Symfony-国際化

Internationalization (i18n) そして Localization (l10n)Webアプリケーションの顧客カバレッジを増やすのに役立ちます。symfonyはこの目的のために優れた翻訳コンポーネントを提供します。この章では、翻訳コンポーネントの使用方法を学びましょう。

翻訳を有効にする

デフォルトでは、Symfonyウェブフレームワークは翻訳コンポーネントを無効にします。これを有効にするには、構成ファイル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行目は、プレースホルダーの使用法を示しています。プレースホルダー情報は、翻訳を使用しながら動的に追加できます。

使用法

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

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

この例ではURLベースのロケールを使用して、翻訳の概念を簡単に理解しましょう。新しい関数を作成し、translationSample ルート付き /{_locale}/translation/sampleDefaultController(src / AppBundle / Controller / DefaultController.php)にあります。{_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 ブラウザで。

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

同様に、小枝テンプレートには {% trans %}ブロックして、ビューでも翻訳機能を有効にします。これを確認するには、新しい関数を追加します。translationTwigSample および対応するビュー app/Resources/views/translate/index.html.twig

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

見る

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

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