はじめに
メッセージファイル(翻訳ファイル)に指定したメッセージをテンプレートファイル(Twig)で指定する。
メッセージファイル/テンプレートファイル/コントローラー
メッセージファイル
yaml
message.xx.yaml
(xxはja,en,frなど)
src/Eccube/Resource/locale/messages.ja.yaml
#====================================================================================
# 共通
#====================================================================================
common.select: 選択してください
:
:
#------------------------------------------------------------------------------------
# Sample
#------------------------------------------------------------------------------------
sample.shop_name: 店舗名
sample.maker_name: メーカー名は「%maker_name%」です!
sample.product_name: 商品名は「%product_name%」です⁉
sample.size_ab: |
サイズAは「%size_a%」だけど...
サイズBは「%size_b%」のはず。
(A-B:%size_a%-%size_b%)
sample.size_a: サイズAは「%size_a%」だ。
sample.shop_nameなどがキー
%xx%が可変文字
"|"で複数行で指定可
php
messages.xx.php
(xxはja,en,frなど)
src/Eccube/Resource/locale/messages.en.php
<?php
return [
//common
'common.label.add' => 'Add',
:
:
// sample
'sample.shop_name' => 'shop name',
'sample.maker_name' => 'maker name is "%maker_name%".',
'sample.product_name' => 'product name is "%product_name%"!?',
'sample.size_ab' => "size-a is '%size_a%' ...\n size-b is '%size_b%' .\n (A-B:%size_a%-%size_b%)",
'sample.size_a' => 'size-a is "%size_a%" .',
];
sample.shop_nameなどがキー
%xx%が可変文字
テンプレートファイル
app/template/default/Sample/index.twig
{% extends 'default_frame.twig' %}
{% block main %}
{{ 'sample.shop_name'|trans }}は"{{ shop_name }}"です。<br/>
{{ 'sample.maker_name'|trans({
'%maker_name%' : '株式会社XX'
}) }}<br/>
{{ 'sample.product_name'|trans({
'%product_name%' : product_name
}) }}<br/>
サイズ:A={{ size_a }}/B={{ size_b }}<br/>
{{ 'sample.size_ab'|trans({'%size_a%':size_a,'%size_b%':size_b})|nl2br }} !!<br/>
{% endblock %}
※直接値を指定するときは"'"で括る
※複数変数に値を指定する時は","で区切る
※複数行にするときはメッセージファイルで改行を入れて"nl2br"でフィルターする
コントローラ
app/Customize/Controller/SamplePageController.php
/**
* @Route("/sample/{id}", name="sample_index")
* @Template("Sample/index.twig")
*/
public function index($id)
{
:
:
return [
'shop_name' => $this->baseInfo->getShopName(),
'product_name' => $product->getName(),
'maker_name' => $product->getMakerName(),
'size_a' => $product->getProductSize()->getSizeA(),
'size_b' => $product->getProductSize()->getSizeB(),
];
}
まとめ
メッセージファイル/テンプレートファイル/コントローラーの連携
ja,en,frなどは.envで指定
ECCUBE_LOCALE=en