diff --git a/best_practices/i18n.rst b/best_practices/i18n.rst new file mode 100644 index 0000000..a77e314 --- /dev/null +++ b/best_practices/i18n.rst @@ -0,0 +1,92 @@ +国際化 +==================== + +国際化と地域化とは、アプリケーションやコンテンツを特定の地域やユーザーの言語に +対応させることです。Symfonyでは国際化機能を利用する前に事前に有効化する必要があります。 + +.. code-block:: yaml + + # app/config/config.yml + framework: + # ... + translator: { fallback: "%locale%" } + + # app/config/parameters.yml + parameters: + # ... + locale: en + +翻訳ソースのファイルフォーマット +------------------------------ + +SymfonyのTranslationコンポーネントは多くの翻訳フォーマットをサポートしています。 +対応フォーマットには、PHP, Qt, ``.po``, ``.mo``, JSON, CSV, INI, などがあります。 + +.. best-practice:: + + 翻訳ファイルにはXLIFFフォーマットを使用しましょう。 + +全ての利用可能なフォーマットの中で、XLIFFとgettextだけがプロの翻訳者が利用する +ツールで幅広く支持されています。 そしてXLIFFはXMLベースのフォーマットであるので、 +自分で書いたXLIFFファイルのコンテンツと同じように確認することができます。 + +Symfony 2.6 で XLIFF ファイルのタグのサポートが追加され、翻訳者にとって +使いやすいものになりました。 XLIFFのタグを利用することで、文脈を定義する +ことができ、ついに、文脈に応じた翻訳ができるようになりました。 + +.. tip:: + + Apacheライセンスの `JMSTranslationBundle`_ を使うとWebインターフェース上で + 翻訳ファイルの閲覧と編集を行うことができます。このバンドルにはプロジェクト + を読み取り自動でXLIFFファイルを更新する優れた抽出機能があります。 + +翻訳ソースファイルの配置 +-------------------------------- + +.. best-practice:: + + 翻訳ファイルは ``app/Resources/translations/`` ディレクトリに置きましょう。 + +慣習的に、Symfony開発者達は翻訳ファイルをそれぞれのバンドルの ``Resources/translations/`` +ディレクトリに保存してしてきました。 + +しかし ``app/Resources/`` ディレクトリはアプリケーションリソースのグローバルロケーションとして +扱われており、 翻訳ファイルを ``app/Resources/translations/`` に保存することで他の翻訳ファイルより +優先させることができます。こうすることでサードパーティのバンドルの翻訳を上書きすることができます。 + +翻訳キー +---------------- + +.. best-practice:: + + 常に翻訳ではコンテンツの文字列の代わりにキーを使うようにしましょう。 + +キーを利用すれば、全ての翻訳ファイルを変更することなく元のコンテンツを変更することが +できるので翻訳ファイルの管理が容易になります。 + +キーはその位置ではなく、目的を表すべきです。例えば、"Username" というフィールド +を持ったフォームがあるとします。その場合によいキーは ``label.username`` です。 +決して ``edit_form.label.username`` ではありません + +翻訳ファイルのサンプル +------------------------ + +これまで述べてきた全てのベストプラクティスを適用すると、アプリケーションにおける +英語用の翻訳サンプルは次のようになります。 + +.. code-block:: xml + + + + + + + + title.post_list + Post List + + + + + +.. _`JMSTranslationBundle`: https://github.com/schmittjoh/JMSTranslationBundle