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ブロックはプレースホルダーも指定します。ページ結果は以下のとおりです。