見出し画像

MGL週報 #49 - 言語設定の諸問題など

このエントリはゲーム開発用フレームワーク「MGL」の開発記録です。MGLはzlibライセンスの下に無償で提供されています。


今週の作業

システムアクセス関連のドキュメント化と整理

特に問題なく順調に進んでいます。

システムアクセス関連は大きな改修は不要だろうと考えていましたが、やっぱり叩けば色々と出てくるようで、細かい改修が積み重なって結構な変更量となっています。丁度良い機会という事で、破壊的変更を前提に全体的な見直しも行なっています。

あからさまな不具合なども見つかっているため、これが一通り片付いたらバージョン1.1.12としてリリースしてしまうのも良いかもしれません。もしかしたら他に入れたいものを押し込むかもしれませんが、前回のように何ヶ月もリリースできないという事は避けられるでしょう。


言語設定の諸問題

この週報の意義の一つは、MGLがどのような問題を抱えていて、それに対する試行錯誤を公開することだと考えています。という訳で、システムアクセスの機能の一部である、言語設定が抱えている諸問題についてをご紹介しましょう。

MGLは設定可能な言語を独自に定義しています。その一覧は次の更新で正式にドキュメントに乗る予定ですが、暫定版(Doxygen出力)はこちら

実はこのようにサポートする言語を列挙する方法は、ちょっとしたデメリットがあるのです。

言語というのは同じ言語なら世界共通という訳ではなく、話される地域によって差異が発生するものです。例えば、同じ英語でもイギリス英語とアメリカ英語では微妙に異なります。歴史的な経緯からか、スペイン語とポルトガル語はこの地域差が大きいとも言われています。

したがって、言語の種類をより高精度に分類しようとする場合、言語と地域の2つの情報を参照する必要があるのです。

多くのシステムではこれを解決するために、ISOで定義された言語コード、国名コードを組み合わせた文字列を用いています。具体的には、言語コードはISO 639、国名コードはISO 3166です。これはゲーム開発に限らず、何かしらの国際対応を行う場合によく使われますので、開発者の方はメモしておくと何かと便利です。

この方法に当てはめて言語を表現する場合、イギリス英語なら「en_UK」、アメリカ英語なら「en_US」となります。この場合「en」の部分が言語コードで、「US」や「UK」が国名コードです。

これに加えて、言語を文字として表現する場合はISO 15924で定義された書体コードも必要になる場合があります。

書体コードは同一言語でも書体が異なる場合に用いるコードです。例えば中国語には繁体字と簡体字があり、それぞれ「Hant」「Hans」で表されます。もし香港で扱われる簡体字の中国語を表す場合、「zh-Hans_HK」となる訳です。

さて、先述の通り、MGLではこの方式を使用せずに独自に扱う言語を列挙しています。その主な理由は、単純に使い勝手の問題です。

ISO準拠の方式は正確な表現が可能ですが、3つの要素が含まれる文字列である都合上、プログラム上での扱いが複雑になりがちです。一方で、1つのゲームが対応する言語はせいぜい数種類、10種類もあればかなり多いほうと言えます。そうなると、結局はアプリケーション側で何らかの定数に置き換えることは目に見えているし、それをカバーするのはむしろMGL側だろうという判断です。

しかし、この方法ではMGLがリストアップしていない言語を扱いにくいという欠点もあります。そして、現在のところ、それを補う手段がまだありません。

この辺の対応方針はちょっと悩んでいるところでして、理想を言えばアプリケーション側から任意の言語を追加できる仕組みが欲しいところです。ISOで定義された3つの要素を組み合わせ、一意の値に落とし込む方法も考えましたが、それは表現が変わっただけでデータとしての使い勝手は煩雑なままです。定義済みの言語とは別に任意の詳細設定のようなものを設ける事も検討しましたが、あまりスマートな方法とは言えません。そんなこんなで、結局上手い方法を思い付くに至らずとなっています。

ですので、一旦は随時言語リストを更新していく方針になるかと思います。

ちなみに、現在MGLにリストアップされている言語は、Steamクライアントが対応していた言語を元に作成されています。世界最大のゲームクライアントであるSteamが対応している言語ならば、需要として大きく外れてはいないだろう、という理由により拝借させて頂きました。あれからSteamクライアント側の対応言語も増えたらしいので、必要に応じて追加対応を行なっていく予定です。


その他

他にも色々と諸問題を書く予定だったのですが、言語関連のネタが意外に長くなってしまったため、他は次週以降に回します。

この記事が気に入ったらサポートをしてみませんか?