wiki:pne-i18n-note
 ここの情報は古いです。ご理解頂いた上でお取り扱いください。

ノート

[wii:Projects プロジェクト/国際化]

いくつかの方法がありますので、まとめさせて頂きます。

1) php/gnu gettext http://www.onlamp.com/pub/a/php/2002/06/13/php.html
一番「正しい」方法ですが、
× Smarty テンプレートのなかで、使いにくい。
× WindowsではデフォルトExtensionではありません。
○ 言語String管理ツールある
○ パフォーマンスがいい

2) Smarty + config file
× 遅い?
○ ↑に対して、テンプレートをコンパイルできますが、微妙
○ 開発はある程度簡単:テンプレート編集だけで

LocalizeNotesWithSmarty

3) テンプレートすべてそのまま翻訳
○ 2言語だけで、一番早い方法だはず
○ パフォーマンスがいい
× 将来的にはたくさんテンプレート、管理できません

4) Smarty library
http://code.jellycan.com/langselect/[[BR]] ○ 翻訳向けコンパイルしているライブラリー
× いらない機能もある


私にとって、一番結果がいいとすぐに出来る 妥協は:2) Smarty + config file


もっと詳しい説明は下記です

1)テンプレートそのまま翻訳多分一番早いのはテンプレート事態を翻訳して、そのままだす。言語ごと、テンプレートダイレクトリー。この問題は日本語と海外のものが分けていく。

2)テンプレート+タグほかには、テンプレートの中で、Tagを使う。弊社はこの方で進んでいます。それを使って、ユーザーがランタイムで好きな言語を簡単に変えます。「Dual language」。これも弊社にとってはメリットです。

問題はおそらくパフォーマンス。Smartyはテンプレートをコンパイルしていますが、どこまでコンパイルして、Cacheしているか、ちょっと調べてないことです。

弊社は2番目で進んでいます。


1)テンプレートをタグ化

テンプレートの中で、日本語をやめる。例えば 

A href='....>メッセージ送信</a>

の代わりに、これ:

A href='....>({$ui.sendMsg})</a>


ソースの変換

OpenPNE_Action::execute() $this->set("ui", getUiBtnList());

これはSmartyのVariableを設定します。


その後SmartyVariableの設定では、いくつかの方法があります。

実は弊社は簡単の管理画面を作った、データベースにStringを全部管理しています。なぜなら、英語と日本語のすべてのタグが相当するものが必ずあるかどうかを確認できます。

言語はユーザー設定 >> = "ja|en" $lang = getLang(); $sql = "select tag, $lang from pk_strings";

もう少し細かいと: $sql .= "where tag like '$section' ;"; limit db read to %section%


相談したいこと:

今後、UI stringsを元簡単に交換できるためには、外部テキストファイルを使ったほうがいいか、と思ってます。管理画面、データベースも必要ない。必要であれば、別の管理ツールも作れるけど。

例えば言語ごとに、別のテキストファイル。

その場合、Smarty の config_load を使えます。例えば:

{if $lang=='ja'}

{config_load file='uiStrings_ja.txt' }

... etc

あるいは、Smarty variableとして渡す:

({config_load file=$ui.langStringsFile })


uiStrings_ja.txt :

# this is config file comment sendMsg='メッセージ送信'

smartyのconfig . section機能もありますが、取り合えず言語ファイルを別々にしたほうがよいと思ってます。

それでは、ご検討の上、よろしくお願い致します。

興味ある人をココに編集して、か私に連絡してください。すぐML作る予定があります。

some notes on the translation project. contact me if you need this in english!

/dc より {dc atto pikkle.com}


コメント

なるべく言語依存部分ををSmartyに押し込むのは賛成です。エラーメッセージなどが、tplではなく現在php側に含まれていますので、それをSmarty側に逃がすことで解決したいです。(手嶋)

LocalizeNotesWithSmarty

国際化のメモ

its possible to cache the template output so there will be no performance hit. http://smarty.php.net/manual/en/caching.cacheable.php

Page created: {"0"|date_format:"%D %H:%M:%S"} {dynamic} Now is: {"0"|date_format:"%D %H:%M:%S"} {/dynamic}

so eg:

{#menuName#} from config variable {dynamic} {$userName} {/dynamic}

Last modified 10 years ago Last modified on Jan 11, 2008, 4:49:29 PM