ログってなんぼ

日々のメモです

CakePHP2.4.5:多言語対応ファイルの作り方と設定方法

Viewファイル

SS 2014 02 13 22 03 35


/app で作業

$ Console/cake i18n

Welcome to CakePHP v2.4.5 Console
---------------------------------------------------------------
App : app
Path: PATH_TO_CAKE/app/
---------------------------------------------------------------
I18n Shell
---------------------------------------------------------------
[E]xtract POT file from sources
[I]nitialize i18n database table
[H]elp
[Q]uit
What would you like to do? (E/I/H/Q)
> e
Current paths: None
What is the path you would like to extract?
[Q]uit [D]one
[PATH_TO_CAKE/app/] >

Current paths: PATH_TO_CAKE/app/
What is the path you would like to extract?
[Q]uit [D]one
[D] >

Would you like to extract the messages from the CakePHP core? (y/n)
[n] >
What is the path you would like to output?
[Q]uit
[PATH_TO_CAKE/app/Locale] >

Would you like to merge all domain and category strings into the default.pot file? (y/n)
[n] > y


Extracting...
---------------------------------------------------------------
Paths:
   PATH_TO_CAKE/app/
Output Directory: PATH_TO_CAKE/app/Locale/
---------------------------------------------------------------

英語版ファイルを作る

拡張子を .po に変更して英語版ディレクトリにコピー

$ cp PATH_TO_CAKE/app/Locale/default.pot PATH_TO_CAKE/app/Locale/eng/LC_MESSAGES/default.po

PATH_TO_CAKE/app/Locale/eng/LC_MESSAGES/default.poを編集

該当箇所に翻訳テキストを入れる

msgid "詳しく"
msgstr "Detail"

確認

ブラウザのロケールを切り替えてチェック SS 2014 02 13 22 17 45

Chromeは優先度をドラッグアンドドロップで変更するみたい。一番上に英語を持ってくる

SS 2014 02 13 22 18 53

OKです。

ディレクトリの命名規則

何語の時にどんな名前のディレクトリを掘ればいいのかは

PATH_TO_CAKE/lib/Cake/I18n/L10n.php

    protected $_l10nMap = array(
        /* Afrikaans */ 'afr' => 'af',
        /* Albanian */ 'sqi' => 'sq',
        /* Albanian - bibliographic */ 'alb' => 'sq',
        /* Arabic */ 'ara' => 'ar',
        /* Armenian/Armenia */ 'hye' => 'hy',
        /* Basque */ 'eus' => 'eu',
        /* Basque */ 'baq' => 'eu',
        /* Tibetan */ 'bod' => 'bo',
        /* Tibetan - bibliographic */ 'tib' => 'bo',
        /* Bosnian */ 'bos' => 'bs',
        /* Bulgarian */ 'bul' => 'bg',

ズラズラっと定義されてます。

イタリア語にしてみる

/* Italian */ 'ita' => 'it',

左側がディレクトリ名。

SS 2014 02 13 22 23 52

というわけで、ita ディレクトリを作って同じようにファイルを用意

msgid "詳しく"
msgstr "dettaglio"

SS 2014 02 13 22 26 03

ではチェックしてみます

SS 2014 02 13 22 26 31

OKです。