Skip to content

Instantly share code, notes, and snippets.

@yano3nora
Last active May 3, 2018 04:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yano3nora/2d88f3e98e37f6784d4abee1ccffe829 to your computer and use it in GitHub Desktop.
Save yano3nora/2d88f3e98e37f6784d4abee1ccffe829 to your computer and use it in GitHub Desktop.
[cakephp: Locale] Internationalization ( = i18n ) and Localization ( = l10n ) on CakePHP3. #cakephp #php

なんなの

出力するメッセージを国際化/地域化しようよって話。開発スタート時に多言語とか何も考えず __('User edit') とか書いておいて後から msgid 'User edit' msgstr 'ユーザー編集' とかしておいて良いんじゃないかな。メッセージ定数とかナンセンスだよねー。

Notes

  • 出力時は常に __() を利用
    • <?php echo __('Message Id') ?>
  • デフォルトロケールを設定
    • app/config/app.php'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'), とか
    • 英語なら en_US
  • 言語ファイルを作成し設置
    • 設置先 app/src/Locale配下全て Apache からの読込を許可
      • $ sudo chmod 755 -R /var/www/app/src/Locale
    • app/src/Locale/ja_JP/default.po
      • デフォルトロケールを設定せずに app/src/Locale/default.po でもとりあえずは動く
    • msgid 'Message Id'msgstr 'Message String' のセット
  • $ bin/cake i18n extract でソースから __() で読んでる msgid 抽出して default.pot 作成してくれる
    • default.pot はテンプレファイルなので default.po へリネームして利用する
  • デフォルトロケールを維持したままコントローラ側でロケールを切替
    • use Cake\I18n\I18n で I18n クラス読込
    • AppController::initialize() とか任意の場所に Cake\I18n\I18n::locale('en_US'); みたいに差し込み

Refs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment