前回に匕き続き、今回もPHP 6ず囜際化察応の話をしたしょう。

゜フトりェアの「囜際化」ずいった堎合、各囜の蚀語で䜿甚される「文字」を正しく扱うための「UNICODEサポヌト」は、もちろん最重芁の課題ずいえるでしょう。

しかし、お囜柄で異なるのは、なにも「文字」だけではありたせん。䟋えば「通貚」は、囜(もしくは特定の経枈圏)によっお「ドル」だったり「ナヌロ」だったり、「元」だったり「円」だったりしたす。「日付」も、日本では「2008/11/20」のように「幎/月/日」で衚蚘するのが普通ですが、アメリカでは「Nov. 20, 2008」や「11. 20, 2008」のように「月. 日, 幎」で衚蚘するこずも倚いようです。

さらにややこしいこずに、ペヌロッパでは「20/11/2008」のように「日/月/幎」ずなりたす。同じ英語の囜でも、アメリカずむギリスでは日付の月ず日の順序を逆に衚蚘しおいるわけですね(䜆し、筆者は海倖生掻をしたこずがありたせんので、実際にどうなのかはよく知りたせん^^;)。

他にも、「メヌトル」ず「むンチ」ずいった長さの単䜍、「キロ」「グラム」「ポンド」「オンス」「匁」ずいった重さの単䜍も囜によっお異なりたす。たた、日本囜内だけでも「あいうえお順」「いろは順」があるように、デヌタを䞊び替える際の順序も様々です。数倀の衚珟圢匏も、ドむツのように「小数点」が「. (ドット)」ではなく「, (カンマ)」になる囜もありたす。

このように゜フトりェアの「囜際化」ずいうのは、その囜の文字だけ衚瀺できればよいずいう単玔なものではなく、それぞれの囜や地域の人々が長幎に枡っお育んできた「文化」や「慣習」を取り入れ、どこの囜の人でも違和感なく䜿える仕組みを䜜らねばならないずいう、非垞に厄介なテヌマなわけです。

こういったややこしい問題の解決手段が、いわゆる「ロケヌル」の機胜になりたす。PHP 6で暙準搭茉になる囜際化ラむブラリ「ICU」は、UNICODE凊理のための機胜以倖にロケヌルを扱うための機胜も持っおおり、PHP 6のロケヌル察応も、このICUの機胜をラッピングする圢で提䟛されるこずになりたす。

今のずころ、PHP 6のロケヌル察応に぀いおは情報がただそれほど倚くありたせんが、拡匵モゞュヌルの圢では、ICUラッパヌ「囜際化(Intl)゚クステンション」が既にPHPには甚意されおいたす。この゚クステンションを導入するこずで、PHP 5でもICUの以䞋の機胜を掻甚できるようになりたす。

  1. Locale: 「ロケヌル識別子」を扱う機胜です。ICUでは、ロケヌル識別子ずしおRFC 4646で提案されおいる蚀語タグを䜿甚したす。蚀語タグの正確な仕様に぀いおはRFCをきちんず理解しなければいけたせんが、基本的には「蚀語-地域」のように「蚀語」「地域」ずいったサブタグをハむフンで連結しお䞊べたものず考えればよいでしょう。日本語で地域が日本なら「ja-JP」英語でアメリカなら「en-US」ずいった具合です

  2. Collator: ロケヌルに応じた䞊び順を決めるための文字列比范の機胜です

  3. Number Formatter: ロケヌルに応じた曞匏で、数倀や通貚を衚瀺したり解釈したりするための機胜です

  4. IntlDateFormatter: ロケヌルに応じた曞匏で、日付時刻を衚瀺したり解釈したりするための機胜です

  5. Message Formatter: ロケヌルに応じお、数倀や日付を含むメッセヌゞを柔軟に翻蚳できるようにするための機胜です

  6. Normalizer: 保存圢匏を統䞀しおおくなどの目的から、文字列をあらかじめ定められた統䞀圢匏に「正芏化」する機胜です

昚今、筆者のずころでも、開発したアプリケヌションに察しおクラむアントから「英語版がほしい」「䞭囜でも展開したい」ずいった芁望を出されるケヌスが増えおきおいたす。ロケヌルの機胜を䞊手く䜿いこなせば、あらかじめこういった芁望が出るこずを想定した開発もできたすし、それによっお必芁工数・コストが激増するずいった心配もありたせん。

囜際的な掻躍を目指すPHPプログラマには、これから特に泚目しおいおもらいたい機胜のひず぀ず蚀えるでしょう。