SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

Zend Framework入門(14):
多言語対応サイトの作成- Zend_Translate(前編)-

Zend Frameworkによる実践的なPHPアプリケーション開発 14

  • X ポスト
  • このエントリーをはてなブックマークに追加

[5]poファイルを確認する

  poEditを終了し、保存したpoファイルをテキストエディタで開いてみましょう。先ほど入力した情報から、次のようなヘッダが作成されます。

[リスト8]ja.poの一部
msgid ""
msgstr ""
"Project-Id-Version: WINGS_ja 1.0\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: wings_mo3 <mo3@sample.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Japanese\n"
"X-Poedit-Country: JAPAN\n"
"X-Poedit-SourceCharset: utf-8\n"

 ここに翻訳のインデックスキーと翻訳の値を追加していきます。ヘッダより下に次のように追加していきます。

[リスト9]ja.poの一部
msgid "welcome"
msgstr "ようこそ"

msgid "time"
msgstr "今の時刻は %1$s です。"

[6]moファイルを作成する

  再度poEditを起動し、[ファイル]-[開く]で先ほど編集したpoファイルを開きましょう。すると次のように原文欄に翻訳のインデックスキー、対訳欄に翻訳された語が表示されます。

 もしインデックスキーの名称や、訳を編集したい場合は下2つの欄で直接編集可能です。また、既存のカタログファイルがある場合は、この作業から始めればよいことになります。

図10:翻訳表示
図10:翻訳表示

  編集が終了したら[保存]を選択します。カタログファイルを保存すると、poEditでは自動で同じ名前で拡張子が「.mo」のmoファイルが同時に作成されます。

 これでgettextに必要なmoファイルを作成できました。同様にして必要な言語分moファイルを作成しましょう。

[コラム]PHPファイルからの翻訳インデックスキーの自動抽出

 poEditではPHPファイルから自動で翻訳インデックスキーを抽出することができます。これは既にサイト構築が終了した後、新たな言語に対応しなくてはならないという場合に便利です。

 本稿最初に紹介したindex.phpを前提に使用方法を解説します。

 

[1]プロジェクトの情報を入力する

  poEditを起動し、[ファイル]-[新規カタログ]を選択し、[プロジェクトの設定]画面を表示させます。[情報]タブに適切な値を入力後、[パス]タブを開きます。ここにindex.phpの配置されているディレクトリを指定してください。

 このディレクトリ配下にあるphpファイルに対して抽出を行います。翻訳対象ファイルが複数ある場合は複数のパスを入力します。

 

図11:プロジェクトの設定(パス)
図11:プロジェクトの設定(パス)

 若干入力に癖があり、[パス]の下のスペースをフォーカス後、左から2番目のボタンを押下すると値を入力できるようになります。

 

[2]抽出キーワードを指定する

  [キーワード]タブには「_」と「_e」を追加します。phpファイルからこのキーワードをもとに翻訳のインデックスキーを抽出します。

 入力方法はパス入力時と同様です。

 

図12:プロジェクトの設定(キーワード)
図12:プロジェクトの設定(キーワード)

 

[3]インデックスキーの抽出を実行する

  [プロジェクトの設定]画面で[OK]を押下し、poファイルを保存した後、poEditの[Update]ボタンもしくは[カタログ]-[ソースから更新]を選択します。すると翻訳のインデックスキーが抽出されるので[OK]を押下します。後は訳を追加していけばよいことになります。

 

図13:翻訳インデックスキーの抽出
図13:翻訳インデックスキーの抽出

翻訳ソースのフォルダ構成

 arrayアダプタの場合は気にする必要はありませんが、言語ごとに翻訳ソースを作成するgettextやcsvのような場合のフォルダ構造について解説します。

 フォルダ構造に制限はありませんが、推奨される数パターンの構造があります。利点、欠点を理解したうえで、作成するアプリケーションに適切な構造を選択しましょう。

言語ごとにソースを配置

 1言語あたり1ディレクトリとなるため、理解しやすい構造となります。アプリケーション構築時には翻訳チームごとに1つのディレクトリを担当すればよいため、開発がしやすくなります。

 本記事ではこの構造を採用します。

/htdocs
    index.php
/languages
    /ja
        日本語の翻訳ソースファイル(ja.csvやja.mo)
    /en
        英語の翻訳ソースファイル(en.csvやen.mo)
    /fr
        フランス語の翻訳ソースファイル(fr.csvやfr.mo)

単一のディレクトリにソースを配置

 すべての言語を1つのディレクトリ内に配置します。関連するファイルを分割する必要がなく、ファイルがあまり多くならないことが分かっている場合には、分かりやすい構造です。

/htdocs
    index.php
/languages
    日本語の翻訳ソースファイル(ja.csvやja.mo)
    英語の翻訳ソースファイル(en.csvやen.mo)
    フランス語の翻訳ソースファイル(fr.csvやfr.mo)

まとめ

 今回はZend_Translateでサイトを国際化する方法を扱いました。次回は引きつづき翻訳ソースの自動検出と、自作アダプタの作成について解説します。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 森山 絵美 (モリヤマ エミ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3355 2009/01/05 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング