国際化の方法についてのアイディア

Nucleusと同じように定数に言語別の文字列を割り当てて,と考えていたのですが,別の方法を考え中。gettextみたいに,デフォルトの文字列を直接書き入れていき,それに言語ファイルで言語ごとの翻訳を割り当てるといった形。

具体的には,これまでの方法だと
「_ADD_NEW_ITEM」
に対して英語だったら
「Add New Item」
日本語だったら
「新規アイテム追加」
といった形で言語ファイルを作っていったわけですが,これだと言語ファイルがなかったり,あっても該当する定数やシンボルに対応する翻訳がないときに,かっこ悪いことになってしまいます。

これを
"Add New Item"
という文字列に対して
英語だったらそのまま,
日本語だったら
「新規アイテム追加」
にするといった形で言語ファイルを作っていく方法が,今考えているものです。これだと,①言語ファイルを作らなくてもデフォルトの文字列でスキンや管理画面を作っていけます。特にスキンやプラグインであれば,デフォルトの文字列を日本語にしておき,それを言語ファイルで英語などに置き換えるといった作り方も許されるでしょう。

Nucleusでは言語ファイル作るのが面倒なのでプラグインのメッセージを英語で作っていたこともよくあったのですが,この方法なら,言語ファイル対応にするためのしきいが低いのではないかと思います。

管理画面作るときも英語のまま作っておいて後から言語ファイルを作るといった作業手順にできるので,これまでのように言語ファイルと平行して作業するといった手間が省略できます。

ただし,難点は二つあって,一つは「シンボル」から変換する形式を取るRailsの標準の国際化機能と相性が悪いこと。もう一つはデフォルト文字列を変えてしまうと,翻訳した文字列を呼べなくなってしまうこと。

前者については,シンプルで実用的でさえあればかならずしもRailsの機能を使わなくてもいいかなと思ってます。言語ファイルは管理画面やスキン,プラグインなどがそれぞれ持つので,サイズもそれほど大きくなく,この設計でも読み込み負荷はあまりないだろうと予想しています。

後者については,デフォルトの文字列を変えたいときはデフォルト文字列の言語用に言語ファイルを用意して,そこで変換させてしまうというのが一つの逃げ道になります。例えば,先ほどの例で「Add New Item」を「Add a Item」に変えたいとしたら,管理画面のテンプレートに書く文字列を変えるのではなく,英語の言語ファイルに
"Add New Item": "Add a Item"
といった形で変換語の文字列を入れる方法です。後は,元の文字列が変わったのだからと割り切って言語ファイルも全部修正する方法。数が少なければ前者もあるでしょうけど,あまりこれをやると訳が分からなくなってしまうので,言語ファイルを修正するのが面倒でも正解かもしれません。


01 Sep, 2008 | Foodyn ( 仕様 , つぶやき ) , Rails | | Andy
« Prev item - Next Item »
---------------------------------------------

Comments


まさにgettextが実現している機能だと思うのですが。

それから、導入はともかく、msgmergeというツールが何をしてくれるかだけでも勉強しておいた方が良いですよ。

Anonymous - 04 Sep, 2008 - 17:31:48
--------------------------


コメントありがとうございます。
gettextはいいと思うのですが,gemでインストールが必要というのは,汎用のアプリではちょっとつらいところがあります。

Andy - 16 Sep, 2008 - 13:49:18
--------------------------


Leave comment

© 2007 yoursite.com | Designed by DesignsByDarren
Ported to Nucleus CMS: Suvoroff