SHOEISHA iD

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

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

Zend Framework入門

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

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

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

 本連載では、PHP上で動作するアプリケーションフレームワークZend Frameworkについて紹介します。今回は、サイトをユーザーの環境に合わせて多言語で表示させるパッケージ「Zend_Translate」を解説します。

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

はじめに

 本連載では、PHP上で動作するアプリケーションフレームワークZend Frameworkについて紹介します。

 今回は、サイトをユーザーの環境に合わせて多言語で表示させるパッケージ「Zend_Translate」を解説します。

 最近ではサイトを日本語、英語と複数の言語で構築したいという要件が多くあり、サイトのトップページで国旗を表示してユーザーに表示させたいページを選ばせたり、「English page is here」のリンクをクリックしてもらったりといった静的な方法がよく使われます。しかしこの場合、対応する言語が増えるごとに言語の数だけサイト構成し、似たようなファイルを都度増やさなくてはなりません。

 そこでサイトの国際化が必要となってきます。「国際化」とはアプリケーションに技術的変更を加えることなく多言語対応するための設計を組み込むことをいいます。

 Zend_Translateを使用して、動的にユーザーの環境に合わせた言語で表示するスマートな国際化サイトを作りましょう。

対象読者

 PHPの基本構文は一通り理解しているが、フレームワークを利用したことはないという方を対象としています。

必要な環境

 Zend_Frameworkは、PHP 5.1.4以降とWebサーバがインストールされている環境で利用可能です。

 以下に、今回アプリケーション作成/動作確認に用いた環境を示します(インストールにあたっては最新安定版の使用を推奨します)。各項目の詳細なインストール手順は、「サーバサイド技術の学び舎 - WINGS」より「サーバサイド環境構築設定手順」を参照ください。

  • Mac OX 10.4.11
  • PHP 5.2.6
  • Apache 2.2.10
  • Zend_Framework 1.7.0

 Windows、LinuxやFreeBSDなどUNIX系OSをお使いの方もコマンドはほぼ一緒ですので、パスなどは適宜読み替えてください。

Zend_Translateコンポーネントの仕組み

 まずはZend_Translateの仕組みについて簡単に理解しましょう。

図1:Zend_Translateの仕組み
図1:Zend_Translateの仕組み
  1. phpアプリケーションにてZend_Translateオブジェクトを生成
  2. Zend_Translateオブジェクトは指定されたZend_Translate_Adapterオブジェクトを呼び出し、翻訳ソースの情報を読み込む
  3. phpアプリケーションは、Zend_Translateオブジェクトから翻訳したいインデックスに対応する値を取得し、表示

 上記のようにphpアプリケーションはアダプタを介して翻訳した情報を取得するため、サイトに新しく言語を追加する場合も、「翻訳ソースを用意する」「アダプタに翻訳ソースを読み込ませる」という2つの手順だけで対応できるようになります。

 それでは具体的な構築手順をみていきましょう。

サイト多言語化への手順

 サイトを多言語対応するための手順は簡単です。

  1. 翻訳アダプタの選択
  2. 翻訳ソースの作成
  3. Zend_Translateオブジェクト生成(翻訳アダプタの生成)
  4. 翻訳された値の取得と表示

 今回はブラウザの言語環境によって、表示を切り替えるようなコードをサンプルに解説を行います。まずはコードの全体を掲載しますが、細部はまた後から詳しく説明しますので、まずはこんなものかという程度で大まかなコードの流れとその実行結果とを確認してみましょう。

[リスト1]index.php
<?php

require_once 'Zend/Translate.php';

// 翻訳ソースの作成
// アダプタarray
$ja = array(
    'welcome' => 'ようこそ',
    'time' => '今の時刻は %1$s です。'
);
$en = array(
    'welcome' => 'welcome',
    'time' => 'It is %1$s now.'
);
$fr = array(
    'welcome' => 'accueil',
    'time' => 'C\'est maintenant %1$s .'
);

//Zend_Translateオブジェクト生成(翻訳アダプタの生成)
$translate = new Zend_Translate('array', $ja, 'ja');
$translate->addTranslation($en, 'en');
$translate->addTranslation($fr, 'fr');

// 翻訳された値の取得と表示
$translate->setLocale('auto');

print ("<html><head>");
print ("<title>".$translate->_('welcome')."</title>");
print ("</head>");
print ("<body>");
printf ($translate->_('time'), date('H:i:s'));
print ("</body></html>");

?>

 上記コードを実行すると次のような表示が得られます。

図2:日本語表示(ブラウザの言語設定が[ja])
図2:日本語表示(ブラウザの言語設定が[ja])
図3:英語表示(ブラウザの言語設定が[en])
図3:英語表示(ブラウザの言語設定が[en])
図4:フランス語表示(ブラウザの言語設定が[fr])
図4:フランス語表示(ブラウザの言語設定が[fr])

次のページ
翻訳ソースの作成

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

  • 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 X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング