i18nしてますか?
■i18n入門を書こうかと
どうも、鹿島和郎(かしまかずお)です。ワールドカップの観戦やら仕事やらで忙しくて1カ月以上ご無沙汰してしまいました。
さて、前回のコラムで少し予告したとおり、今回は少し技術的なことを書こうかと思います。ITエンジニアを名乗っておきながら、今まで技術的な話を一度もしていないのもどうかと思いますので。
そんな記念すべき技術ネタ第1弾は「i18n」です。
○i18nとL10n
i18nってそもそも何なんでしょう。似たような単語にL10nなんてのもありますし。ご存知の方も多いと思いますが、i18nはInternationalizationの略で、日本語では「国際化」と訳します。それに対しL10nはLocalizationの略で、日本語ではカタカナ英語でローカライズ、ローカライゼーションと言われることが多いかと思います。
どう違うのかはWebにいろいろ情報がありますので詳しくは説明しませんが、i18nは1つのプログラムで複数の国向けに使えるようにするものです。設定によりメッセージの言語、日付表記(yyyy/mm/dd、mm/dd/yyyyなど)、タイムゾーンを切り替えたりするのは割と一般的かと思います。
L10nは、例えば日本語用の言語ファイルを用意したり、あるいは日本の法律に合わせた税率計算のモジュールを組み込んだりといった作業などが挙げられます。
○i18n対応にするメリット
先日のコラムで取り上げた楽天もそうですし、最近では多くの企業が中国をはじめとする広大な市場を目指して海外進出をしています。
改めて書くまでもありませんが、ほかの国で製品を売る・サービスを展開する際に、最初からi18n対応にしておくと楽です。現時点で海外に展開するつもりがあまりなくても、単純なi18n対応はそれほど面倒ではないので、最初から対応させておいたほうが良いのではないかと思います(もちろん国内マーケットしか対象にするつもりはない、という固い決意のある人は例外だと思いますが)。
○一緒に勉強しながら
さて、これから(多分)数回に渡ってi18n関連のトピックに触れていこうと思います。初めに断っておきますと、わたしはi18n対応のシステム構築にかかわったことはあるものの、専門家ではありません。自分で徐々に勉強しつつ、初心者の目線で解説していければと思っていますので、
- 興味はあるけど難しそう(or 面倒くさそう)で何となく敬遠してた人
- 知識はないけど、海外向けにソフト・サービスを作ってきたい人
- 「i18n」って何? おいしいの? って人
などに読んでいただければ幸いです。もちろん専門家からのご指摘などは大歓迎です。
とりあえず、大ざっぱに以下のような感じで進めようかと思ってますが、気分で変わるかもしれません。
基礎知識編
- 文字コード
- Locale
実践編(とりあえず簡単なWebアプリをサンプルに)
- PHP + gettext
- symfony
- Java(多分……)
■文字コードくらい知ってるよね?
まずは文字コードについて話をしようと思います。とりあえず、簡単な質問をしたいと思います。
「UnicodeとUTF-8の違いって何?」
これに答えられるかで、「PCに詳しい一般人」と「ITエンジニア」が分けられます。と言いたいところですが……ITエンジニアでも意外に答えられない人が多いのではないかと想像します。みなさんは大丈夫だったでしょうか(自分も昔は答えられませんでした)。
○「(符号化)文字集合」と「文字符号化方式」って?
まず最初に断っておくと、この辺の日本語の用語は非常にややこしいです。ここでは、正確性を若干犠牲にしてでも簡単な説明にしたいと思います。
まず、「文字集合」ですが、その名のとおり、文字の集合です。例えば、a~zは「アルファベット小文字」という文字集合ですし、「ひらがな」というのも1つの文字集合です。
「文字符号化方式」は、文字集合をどうやってバイト列に変換するかという規則のことです。
例えば、
「あ」→ 0x01
「い」→ 0x02
:
「ん」→ 0x33
という変換ルールが「文字符号化方式」となります。
○UnicodeにはUTF-8以外の文字符号化方式が存在
ここで冒頭の質問に答えますと、Unicodeが「(符号化)文字集合(※1)」で、UTF-8が「文字符号化方式」です。Unicodeはアルファベット、記号、漢字、その他、世界中のありとあらゆる文字を1つの文字集合に集めたものです(※2)。
Unicodeの場合は複数の「文字符号化方式」が存在し、UTF-8以外ですとUTF-16などは比較的使われることが多いかと思います。
UTF-8の特徴としてはASCIIコードと互換性があることでしょうか。そのほか、各方式にはそれぞれ長所・短所がありますが、詳細はここでは触れません。適当にググって(or Bingって)みてください。
※1:「文字集合」の前に「(符号化)」とカッコつきで書かれていますが、ここでは特に気にしないでください。
※2:若干、不正確な説明ですが、ご容赦ください。
■おわりに
最初の方に書いたとおり、自分でも勉強しつつi18nについて書いていこうと思います。とはいえ、あくまで「コラム」ですので、最新の話題・動向の紹介や論評なども交えていこうと思います。
次回はLocaleについて、の予定です。
それではまた。