Symfony Best Practice 訳してみた - Chapter8 -

Symfony Best Practiceの翻訳をしてます。 8日目です。

前回の記事

hanahirodev.hatenablog.com

※多分に意訳が入っておりますので、誤訳がある場合はご指摘ください。

※読み進めていくSymfony Best Practiceは 2016/10/23時点の情報です。

※写経をする場合は、事前にPHPの実行ができる環境をご用意ください。

3行まとめ

  • 翻訳ファイルもtemplatesファイルと同じように考えている。

  • フォームの変更と翻訳を分離するために、翻訳はキーを使っている。

  • キーの名前に使っている場所の情報が入らないように注意しよう。


第8章 国際化

国際化と地域化は、ユーザーのいる特定の地域や言語にアプリケーションとコンテンツを適用させることです。 Symfonyでは利用する前に、利用することを明示的に選択しなければいけない機能になります。有効化させるためには、以下のようにtranslatorの設定をコメントインして、ロケールを指定してください。

# app/config/config.yml
framework:
    # ...
    translator: { fallbacks: ['%locale%'] }

# app/config/parameters.yml
parameters:
    # ...
    locale:     en
翻訳ファイルのフォーマット

SymfonyのTranslationフォーマットは多くの翻訳形式に対応しています。PHP,Qt,.po,.mo,JSON,CSV,INIなどがあります。

  • 翻訳ファイルにはXLIFF形式のファイルを使いましょう。

有効な翻訳ファイル形式のうち、プロの翻訳家も利用しているツールではXLIFF*1gettext*2が世界的にサポートされています。XML形式がベースになっているので、開発者が見てもXLIFFファイルの内容に間違いがないか確認できます。 SymfonyではXLIFFファイルのタグをサポートしており、翻訳者が使いやすいようになっています。最後に、良い翻訳は、全く文脈に拠っていて、XLIFFファイルのにより文脈を定義することができるのです。

  • ApacheライセンスのJMSTranslationBundle*3が翻訳ファイルの表示と編集のためのWebインターフェースを提供しています。さらに、プロジェクトを読み込んで自動的にXLIFFファイルを更新する機構も備えています。
翻訳ファイルの配置場所
  • app/Resources/translations/ディレクトリ配下に翻訳ファイルを配置しましょう。

これまではバンドルごとのResources/translations/配下に配置していました。しかしapp/Resources/ディレクトリがアプリケーション全体にかかわるファイルの格納場所として扱われるようになったので、app/Resources/translations配下に翻訳ファイルを格納することで、翻訳ファイルに関心を集中させるようになりました。こうすることで、サードパーティのバンドル内にある翻訳ファイルを上書きできるようになりました。

翻訳キー
  • コンテンツの翻訳には文字列ではなく、キーを使いましょう。

翻訳内容の管理を単純化するために、キーを使うことで、翻訳ファイル全体を更新することなくコンテンツの更新ができます。 キーはその利用場所ではなく、目的を明確に表す名前にするべきです。たとえば、"Username"というラベルを持つフィールドのキーはlabel.usernameとすべきで、edit_form.label.usernameとしてはいけません。

翻訳ファイルの例

上記のベストプラクティスを適用した、英語の翻訳ファイルの例は以下の通りです。

<!-- app/Resources/translations/messages.en.xlf -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" target-language="en" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="title_post_list">
                <source>title.post_list</source>
                <target>Post List</target>
            </trans-unit>
        </body>
    </file>
</xliff>

感想

翻訳ファイルさえ準備できれば比較的簡単にi18n対応できます。翻訳を作るのが本当に大変。

speakerdeck.com

(2016/11/5 更新)

next

hanahirodev.hatenablog.com