Zend_Translate+gettext.jsによる翻訳ソース一元管理型多言語対応

JavaScript PHP web制作 Zend Framework アプリケーション別 プログラミング

広報:齊藤 メイ 広報:齊藤 メイ

Posted on 2013年10月22日(火)08:00
Updated on 2015年07月18日(土)16:19


Zend_Translate+gettext.jsによる翻訳ソース一元管理型多言語対応

webサイトの多言語対応において、サーバーサイドスクリプトとクライアントサイド(JavaScript)の両方で行いたい場合があります。本日は「Zend_Translate+gettext.jsによる翻訳ソース一元管理型多言語対応」についてです。

こんにちは。猫ITソリューションズ広報の齊藤メイ(♀)です。 本日は、「Zend_Translate+gettext.jsによる翻訳ソース一元管理型多言語対応」についてです。

冒頭にも書いた通り、サーバーサイド(以下PHP)とクライアントサイド(以下JavaScript)の両方で多言語対応をしたいという事があるかと思います。出来れば翻訳ソースを一元化したいところですが、それはなかなか難しいようです。ですが、管理は一元管理にしないと後が大変になります。という訳で今回は「翻訳ソースの管理は一元管理」という前提での実装について説明します。

開発環境

開発環境は以下のようになります。

PHP 5.4.12
Zend Framework 1.12.3
Gettext.js 0.08

 

翻訳ソースについて

多言語対応の翻訳ソースはgettext方式を採用します。
gettextはlinuxのGNUが提供するライブラリで非常に高速、かつ他開発言語でも標準的に使用されています。今回のように翻訳ソース共有を目的とするならば、このgettext方式が良かろうと考えての採用です。ただし翻訳ソースファイルは.moという形式のバイナリファイルとなるため、翻訳ソース作成時には専用のツールが必要となります。ツールについては後ほど説明します。

そして翻訳ソースは割と更新頻度が高いファイルになると思われます。今回は以下の図のような管理方法を採ります。正直少し非効率な感は否めません。これは今後の改善、またはこの記事をご覧になった皆さんでベストケースを編み出していただきたいです。その際はぜひとも猫ITソリューションズまでお知らせください。参考にさせていただきます。

po0002.jpg

また、各データはドキュメントルート以下に、下図のようなディレクトリ構成で格納する事とします。

dir_languages.jpg
 

Excelファイルの準備

言語別シートをまとめたExcelファイルは以下のような内容になります。しかしこれはあくまでサンプルであって、Excelファイルの時点では決まった書式はありません。皆さんの扱いやすいようにまとめてください。

※サンプルのExcelファイルには英訳列はありますが、翻訳データは入っておりません。
翻訳ソース管理用ファイル(サンプル)のダウンロード
 

poファイルの準備

poファイルは、まずPoeditにより元のファイルを作るところから始めます。
以下サイトの通りにまずはPoeditをインストールして、初期ファイルを生成してください。
Zend Framework入門(14): 多言語対応サイトの作成- Zend_Translate(前編)-(4/5):CodeZine

初期ファイルを用意できたら、後はExcelファイルより翻訳ソースをコピペ追記するだけです。以下のように追記してください。

※翻訳ソース管理用ファイルには簡単に?コピペ用整形するための秀丸置換例が掲載されています。

gettextは、msgidとmsgstrの対により管理されます。
ja.poに、

と記述すれば、メッセージID「msg0001」の翻訳文は「こんにちわ世界」となり、en.poには、

と記述する事になります。

msgidとmsgstrは16行目から記述します。15行以前は「コピペの時点では」固定となりますので、あまり気にする必要はありません。なお、PO-Revision-DateなどはPoeditによる.mo生成時に自動的に更新されます。なお、上記中の「n」も記述に含めますのでご注意ください。

moファイルの準備

moファイルは上述の通りバイナリ形式となり、Poeditにより生成します。以下サイトの通りにmoファイルを生成してください。
Zend Framework入門(14): 多言語対応サイトの作成- Zend_Translate(前編)-(5/5):CodeZine
 

jsonファイルの準備

JavaScriptからgettext形式の翻訳ソースを扱うのはGettext.jsです。Gettext.jsパッケージにはGettext.jsで読み込むjsonファイルに変換するためのツールpo2jsonが用意されています。以下のコマンドを実行してください。

最初と最後のechoはGettext.jsでjson形式の翻訳ソースとして認識させるために必要ですが、これはそのうち改善されると思います。が、現時点では必要な追記処理になります。
 

PHPの準備

既にZend Frameworkが稼働している事を前提に説明します。以下はサンプルです。


JavaScriptの準備

JavaScript側は以下のようになります。

「_」というのはUNIXにおけるgettext界?で使われる形式に合わせるための処置です。これでイチイチ

などと記述せずに、

だけで呼び出せます。

よく使う関数だけに短い方がいいですよね。
多言語対応の説明は以上です。
しかし大切なのは仕組みではなく内容です。

正確な翻訳が一番大切な訳ですね、、、


いかがでしたでしょうか?
猫ITソリューションズは、飼い主の皆さんにITを活用しあらゆるシーンで的確なアドバイスをいたします。それではまたお会いしましょう。

Zend_Translate+gettext.jsによる翻訳ソース一元管理型多言語対応

see you!

 

本件に関するお問い合わせ先

猫ITソリューションズ

049-290-8502
お問い合わせフォーム



Member Profile

広報:齊藤 メイ

埼玉在住の三毛猫です。趣味は日向ぼっこ、好きな猫缶はカツオ系です。仲良くしてくださいね!

Facebook
Twitter

代表:齊藤 智宏

埼玉在住のWebデベロッパーです。80's洋楽、映画、レトロゲームが大好きです。よろしく!

Facebook
Twitter

Contact

ご意見、ご相談などお気軽にお問い合わせ下さい。お問い合わせ内容の確認後、担当者よりご連絡させていただきます。

049-290-8502
お問い合わせフォーム