Symfony-internationalization

提供:Dev Guides
移動先:案内検索

symfony-国際化

  • 国際化(i18n)*および*ローカリゼーション(l10n)*は、Webアプリケーションの顧客カバレッジの向上に役立ちます。 symfonyは、この目的のために優れた翻訳コンポーネントを提供します。 この章で翻訳コンポーネントの使用方法を学びましょう。

翻訳を有効にする

デフォルトでは、Symfony Webフレームワークは翻訳コンポーネントを無効にします。 有効にするには、設定ファイルapp/config/config.ymlにトランスレーターセクションを追加します。

framework: translator: { fallbacks: [en] }

翻訳ファイル

翻訳コンポーネントは、翻訳リソースファイルを使用してテキストを翻訳します。 リソースファイルは、PHP、XML、およびYAMLで記述できます。 リソースファイルのデフォルトの場所は app/Resources/translations です。 言語ごとに1つのリソースファイルが必要です。 フランス語の messages.fr.yml というリソースファイルを作成してみましょう。

I love Symfony: J'aime Symfony
I love %name%: J'aime %name%

左側のテキストは英語で、右側のテキストはフランス語です。 2行目はプレースホルダーの使用を示しています。 プレースホルダー情報は、翻訳を使用しながら動的に追加できます。

使用法

デフォルトでは、ユーザーのシステムのデフォルトロケールはSymfony Webフレームワークによって設定されます。 デフォルトのロケールがWebアプリケーションで設定されていない場合、英語にフォールバックします。 ロケールは、WebページのURLでも設定できます。

http://www.somedomain.com/en/index
http://www.somedomain.com/fr/index

この例でURLベースのロケールを使用して、翻訳の概念を簡単に理解してみましょう。 DefaultController(src/AppBundle/Controller/DefaultController.php)のルート /\ {_ locale}/translation/sample で新しい関数 translationSample を作成します。 \ {_ locale}はデフォルトのロケールを指定するためのSymfonyの特別なキーワードです。

/* *
  * @Route("/{_locale}/translation/sample", name="translation_sample")
*/
public function translationSample() {
   $translated = $this->get('translator')->trans('I love Symfony');
   return new Response($translated);
}

ここでは、コンテンツを現在のロケールに翻訳する翻訳方法 trans を使用しました。 この場合、現在のロケールはURLの最初の部分です。 ここで、アプリケーションを実行し、ブラウザにページ http://localhost:8000/en/translation/sample をロードします。

結果は英語で「I love symfony」になります。 ここで、ブラウザにページ http://localhost:8000/fr/translation/sample をロードします。 これで、テキストは次のようにフランス語に翻訳されます。

Symfonyが大好き

同様に、twigテンプレートには \ {%trans%} ブロックがあり、ビューでも翻訳機能を有効にします。 これを確認するには、 translationTwigSample と対応するビューを app/Resources/views/translate/indexl.twig に追加します。

/* *
  * @Route("/{_locale}/translation/twigsample", name="translation_twig_sample")
*/
public function translationTwigSample() {
   return $this->render('translate/indexl.twig');
}

View

{% extends 'basel.twig' %}
{% block body %}
   {% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %}
{% endblock %}

ここで、transブロックはプレースホルダーも指定します。 ページ結果は次のとおりです。

プレースホルダー