LoginSignup
1
1

More than 5 years have passed since last update.

多言語メッセージファイルの指定

Posted at

はじめに

メッセージファイル(翻訳ファイル)に指定したメッセージをテンプレートファイル(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

参照

多言語化

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1