Symfonyでの国際化(i18n)対応
多言語対応
Symfonyでの国際化対応をした備忘録です。
データの項目名など対応も可能。
今回は主にエラー文言に対応しました。
準備
特に必要なし
記述方法
同じエラー文言でも記述ファイルが異なることがあります。
FormTypeなどフォーム入力時に編集するのは
1 | src/Application/BackendBundle/Resources/translations/validators.ja.yml |
などです。
拡張子の直前にあるドットで囲まれた文字列が言語識別子です。
日本語ならja, 英語ならen。
以下のようにvalidators.ja.ymlでエラーを定義し
1 2 3 | consumer: password: not_blank: パスワードは必須入力です |
FormType側ではコロンとインデントで句切られた定義文字列を
ドットで以下のように渡せば言語ごとに上記の validators.{{ language code }}.yml を読み取ってくれます。
1 2 3 4 5 6 | // ja言語に設定 $this->container->get('translator')->setLocale('ja'); $_trans = $this->container->get('translator'); if (empty($consumer->password)) { $form['password']->addError(new FormError($_trans->trans('consumer.password.not_blank'))); } |
ラベルなどのバリデーション以外での翻訳は以下のようなファイルです
1 | src/Application/BackendBundle/Resources/translations/messages.ja.yml |
※ アクティブなBundleや読み込んでいるリソースによって {{ Application/BackendBundle }} 部分は都度変わることあり。
使用方法は validators と同じです。
テンプレート(twig)側では
1 | {{ consumer.password.not_blank | trans }} |
のように記述すれば同様の言語毎の翻訳文字列が取得可能です。
Author Profile
スターフィールド編集部
SHARE