symfonyでi18n
基本的にはチュートリアルのi18nのに沿ってやったけど、やる順番は若干入れ替えてる。間違いとかがあれば指摘して下さいな。
環境:symfony 1.4.3
■settings.ymlの編集
settings.ymlに以下の記述をしてi18nを有効にする。
all: .settings: i18n: true
後は、デフォルトの"culture"をja_JPに設定。cultureはlocaleと同じようなものなのかな。
(5/23追記 )あと、i18nのヘルパーを使う設定をしておくと良い(standard_helpersの行)。
最終的なsettings.ymlの変更点は以下の通り。
all: .settings: i18n: true default_culture: ja_JP standard_helpers: [Partial, Cache, I18N]
charsetをutf-8に設定する、とも書いてあったけど、別にやらなくても良さそうなので今のところ放置中。
■myUser.class.phpに初回アクセスかどうかを返すメソッドを追加
myUserクラスにメソッドを追加。
class myUser extends sfGuardSecurityUser { public function isFirstRequest($boolean = null) { if (is_null($boolean)) { return $this->getAttribute('first_request', true); } $this->setAttribute('first_request', $boolean); } }
※自分の場合sfDoctrineSecurityPluginを使ってるので、継承元がsfGuardSecurityUserになっているけど気にしない。
■routing.ymlを修正し、"ja"付きでアクセス出来るようにする
"homepage"以外のエントリに:sf_cultureを追加する。って書いても分からないと思うので、具体例を。
settings: url: /settings param: { module: sfApply, action: settings }
を以下のように修正する。これをrouting.ymlの中のhomepage以外の全てのエントリ(といっても、通常はそれ程数が多くないのではないかと)に対して行う。
settings: url: /:sf_culture/settings param: { module: sfApply, action: settings }
後は、localized_homepageというエントリもrouting.ymlに追加する。
localized_homepage: url: /:sf_culture/ param: { module: default, action: index } requirements: sf_culture: (?:ja|en)
ちなみに自分の場合homepageは以下の通り。
homepage: url: / param: { module: default, action: index }
■homepageで起動されるモジュールの修正
routing.ymlの"homepage"で呼び出されるモジュールを修正する。自分の場合はdefaultモジュールで、呼び出されるアクションはindex。
従って、修正するファイルはapps/xxxx/modules/default/actions/action.class.php。このファイルが存在しない場合は、symfonyのファイルをコピーしてきて修正する。自分の環境(XAMP)の場合は、C:xamppphpPEARsymfonycontrollerdefaultactionsに存在する。
public function executeIndex(sfWebRequest $request) { if (!$request->getParameter('sf_culture')) { if ($this->getUser()->isFirstRequest()) { $culture = $request->getPreferredCulture(array('ja', 'en')); $this->getUser()->setCulture($culture); $this->getUser()->isFirstRequest(false); } else { $culture = $this->getUser()->getCulture(); } $this->redirect('localized_homepage'); } }
■言語切替の追加
言語切替のドロップダウンリストを追加する方法は、基本的にはチュートリアルの通り。sfFormExtraPluginをインストールして、languageと言う名前のモジュールを作成して・・・という方法だが、そのままやると以下のエラーを出力する。
sfValidatorI18nChoiceLanguage does not support the following options: ‘culture’.
どうやらプラグインのバグっぽくて、symfonyのtracにもバグとして登録されている(→)。解決方法はそこに登録されているパッチを適用するだけ。あるいはフォーラムのこっちの書き込みの方が分かりやすいかも。
■テキストの翻訳
後は以下のコマンドを実行すると、apps/frontend/i18n/ja/の下にmessages.xmlというファイルが出来る。
# symfony i18n:extract frontend ja --auto-save
あとは、それを翻訳。messages.xmlの例を以下に示す(抜粋)。
<trans-unit id="3"> <source>Forgot your password?</source> <target>パスワードを忘れた場合はこちら。</target> </trans-unit>
■おわり
これで大体完了。間違っている所、その他は随時加筆修正予定。