Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加

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

目次

はじめに

 本連載では、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])

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

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

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2012年2月時点での登録メンバは37名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

バックナンバー

連載:Zend Framework入門

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5