symfonyでi18n

| コメント(0) | トラックバック(0)

基本的にはチュートリアルの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:\xampp\php\PEAR\symfony\controller\default\actionsに存在する。

  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>

■おわり

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

トラックバック(0)

トラックバックURL: http://www.kazu.tv/blog-mgr/mt-tb.cgi/929

コメントする

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このブログ記事について

このページは、kazuが2010年5月14日 23:08に書いたブログ記事です。

ひとつ前のブログ記事は「自宅サーバーからOCN経由でメール送信」です。

次のブログ記事は「IT業界特化の無料オンライン英会話、登録者募集中」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ