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>

■おわり

これで大体完了。間違っている所、その他は随時加筆修正予定。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です