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>
■おわり
これで大体完了。間違っている所、その他は随時加筆修正予定。