海外IT企業で働いていた純日本人エンジニアがいろいろと考えてみる。

i18nしてますか?(2)

»

 どうも、鹿島和郎(かしまかずお)です。今回も引き続き、i18n関係の話をしようかと思います。話題は一応前回予告したとおりLocaleです。Localeは日本語だとロケールと書くのが一般的のようです(ロカールと書く人もいるみたいですが、ここではロケールで統一します)。

■What's LOCALE?

 さて、ロケールとは何でしょう。UNIX系のOSを触っている人であれば、LANGとかLC_ALLなんて環境変数に馴染みがあるかもしれません。Windowsだとコントロールパネルから「地域と言語のオプション」みたいなのが選べるかと思います。大雑把に言うと、それらで設定できる項目(あるいはそれを切り替える仕組み)をロケールと呼びます。

 前回、i18nによって具体的には以下のような項目が切り替え可能になる、という話をしましたが、これがまさにロケールの仕組みによって実現されているものです。

  • 言語(日本語、英語)
  • 地域(日本、アメリカ、イギリス)
  • 通貨(¥、$、€、£)
  • 日付の表記形式(yyyy/mm/dd、mm/dd/yyyy)
  • 文字コード(UTF-8、EUC-JP、ISO-8859-1)
  • そのほか

■UNIX系OSの場合

 ロケールについてもう少し具体的に見てみましょう。UNIX系OSとWindowsでは仕組みが大きく異なりますので、まずはUNIX系OSでの話をします。

 UNIX系OSでは、後述するロケール名("ja_JP.UTF-8"など)をLC_ALLまたはLANGという環境変数に設定することで、ロケールの設定・切り替えができます。実はLC_ALL以外にもLC_*という環境変数がいくつかあるのですが、それに関しては別の機会で触れようと思います。

 ロケール名は、以下のような形を取ります。

language[_territory][.codeset][@modifier]

  • language(言語)
  • territory(地域≒国)
  • codeset(文字コード)
  • modifier(修飾子=通貨、そのほか)

[ ]で囲まれているのはオプションですので、以下はすべて有効なロケールです。

ja、ja_JP、ja_JP.UTF-8、ja.UTF-8、fr_FR@euro

 日本にいるとあまり意識しないかもしれませんが、1つの国で複数の言語が使われていたり、1つの言語が複数の国で使われていたりしますので、言語と国は(そのほかの項目も)個別に設定できるようになっています。

 細かい手順などは今後説明しようと思いますが、例えば、アプリのメッセージを英語に翻訳する際、

  • 「英語」で1つの言語とする場合 → enに対応する翻訳ファイルを用意
  • 「アメリカ英語」「イギリス英語」を分ける場合 → en_US、en_GBに対応する翻訳ファイルを用意

という形になります(若干不正確ですが、大雑把にはこんなものと考えてください)。

 さて、理屈だけの説明だと分かりにくいかもしれませんので、実際にロケールを変えるとどうなるのか、シェルからいくつかコマンドを試してみましょう(bash以外を使っている人は、環境変数の設定の所を適宜置き換えてください)。

$ LANG=en_US date
Thu Jul 29 19:11:47 PDT 2010
$ LANG=fr_FR date
jeudi 29 juillet 2010, 19:23:04 (UTC-0700)
$ LANG=fr_FR ls xx
ls: ne peut accéder xx: Aucun fichier ou répertoire de ce type

 大体、感じはつかめてもらえたかと思います。

※余談:国と言語

 ちょっと余談ですが、「国際化」の英単語を「i18n」と略さないでちゃんと綴ろうとした場合、アメリカとイギリスでは以下のような違いがあります(略すとどっちの国でも意識せずに使えるので便利ですね)。

  • internationalisation(英)
  • internationalization(米)

 英語の場合、大ざっぱにはアメリカ英語とイギリス英語と分かれていますが(Wikipediaに詳しい説明がありますので、興味のある方は読んでみてください)、カナダ、オーストラリアなどほかの国でもそれぞれ特色があります。わたしが以前住んでいたカナダでは、綴りはイギリス英語に近いですが、発音や使う言葉などはアメリカ英語に近いと思います。

 複数の国・地域で使われている言語は、公用語に限っても、英語、フランス語、スペイン語、アラビア語、中国語、ドイツ語、イタリア語などたくさんありますが、逆に1つの国で複数の公用語を持つ国もインドなど沢山あります。

 例えばインドの場合、OS、言語によってサポートされているロケールの数に違いがありますが、en_IN(英語)、hi_IN(ヒンディー語)を始めとして多数のロケール名が存在します。インド英語は独自の単語・言い回しとかもあるでしょうし、en_USと分かれているとメリットがありそうです。

 カナダの場合は英語と「フランス語」が公用語です。カギカッコつきで「フランス語」と書いた理由なんですが、カナダでのフランス語はフランスやそのほかヨーロッパ諸国でのフランス語とは大きく違うのです。独自の単語がけっこうありますし、発音がかなり違うので、フランスのTVとかでカナダ人の「フランス語」が流れる時には字幕が付くんだとか(未確認です)……。ロケールでfr_FRとfr_CAを区別できると、こういう時にも便利ですよね。

 ちなみにキーボード配列もfr_FRとfr_CAでは大きく違います。éなどのアクセントつきのアルファベットを入力したい場合、QWERTYに慣れている一般的な日本人は、fr_CAのキーボード配列の方が分かりやすいです。

■Windowsの場合

 Windowsの場合ですが、OSのロケールの設定はコントロールパネルから行えます。Windowsのバージョンによって若干違いますが、XPの場合は以下から設定できます。

 「コントロールパネル」→ 「地域と言語のオプション」→ 「地域オプション」タブ→ 「標準と形式」内のプルダウン

 言語を変更してからコマンドプロンプトを立ち上げ、dateコマンドなどを実行すると違いが分かるかと思います。

○日本語

C:\Documents and Settings\kashima>date /t
2010/08/03

C:\Documents and Settings\kashima>time /t
17:00

○英語(米国)

C:\Documents and Settings\kashima>date /t
08/03/2010 Tue

C:\Documents and Settings\kashima>time /t
05:00 PM

○スペイン語(メキシコ)

C:\Documents and Settings\kashima>date /t
03/08/2010

C:\Documents and Settings\kashima>time /t
05:00 p.m.

※また余談

 「17時」のように24時間単位で時間を表す方法は一部の国ではあまり一般的ではなく、英語ではmilitary timeなんて呼びます。その名の通り、軍隊などで使われるからです。

■まとめ

 今回はロケールについて、UNIX系OSとWindowsの具体例を交えて説明しました。次回からはプログラムからロケールを扱う方法について説明していきます。

 それではまた。

Comment(0)

コメント

コメントを投稿する