Previous Next

Zend_Translate のアダプタ

Zend_Translate は、さまざまなアダプタを使用して翻訳を行えます。 それぞれのアダプタによって利点や欠点があります。 以下に、翻訳の入力ファイルとしてサポートしているすべてのアダプタについてまとめます。

Zend_Translate のアダプタ
アダプタ 説明 備考
Array PHP の配列 小さめのページ。簡単に使用できる。プログラマしかさわれない。
Csv カンマ区切りファイル (*.csv/*.txt) シンプルなテキスト形式。高速。Unicode 文字で問題が発生する可能性がある。
Gettext gettext のバイナリファイル (*.mo) linux における GNU の標準形式。スレッドセーフ。翻訳用ツールが必要。
Ini シンプルな INI ファイル (*.ini) シンプルなテキスト形式。高速。Unicode 文字で問題が発生する可能性がある。
Tbx termbase 変換ファイル (*.tbx/*.xml) アプリケーション間で専門用語を変換するための業界標準。XML フォーマット。
Tmx tmx ファイル (*.tmx/*.xml) アプリケーション間での翻訳の業界標準。XML フォーマット。可読形式。
Qt qt 言語ファイル (*.ts) クロスプラットフォームなアプリケーションフレームワーク。XML フォーマット。可読形式。
Xliff xliff ファイル (*.xliff/*.xml) TMX に似ているが、よりシンプル。XML フォーマット。可読形式。
XmlTm xmltm ファイル (*.xml) XML ドキュメントの翻訳メモリの業界標準。XML フォーマット。可読形式。
その他 *.sql 今後、その他さまざまなアダプタを実装する予定です。

使用するアダプタを決める方法

Zend_Translate でどのアダプタを使用するのかを決める必要があります。 プロジェクトの制約や顧客からの要望などの外的要因でアダプタが決まることもよくありますが、 もしあなたに決定権があるのなら、以下のヒントを参考にしてください。

注意:

使用するアダプタを決めるにあたっては、 使用するエンコーディングを考慮しなければなりません。 Zend Framework では UTF-8 をデフォルトのエンコーディングとしていますが、 時には他のエンコーディングを使わなければならないこともあるでしょう。 Zend_Translate は、 ソースファイル内で定義されているエンコーディングを変更しません。 つまり、もし Gettext のソースが ISO-8859-1 で作られている場合は、 それをそのままのエンコーディングで返します。 ただ、ひとつだけ制限があります。

TMX や XLIFF といった XML ベースのソース形式を使用する場合は、 そのエンコーディングを XML ファイルのヘッダで定義しなければなりません。 エンコーディングの定義がない XML ファイルは、 デフォルトでは UTF-8 として扱われるからです。 また、もうひとつ注意すべき点は、XML ファイルのエンコーディングとして使用できるのは PHP がサポートしているエンコーディングのみであること、 つまり UTF-8、ISO-8859-1 および US-ASCII だけであるということです。

Zend_Translate_Adapter_Array

Array アダプタは、プログラマにとっては 一番シンプルに使えるアダプタです。 しかし、翻訳する文字列が大量にある場合や 多くの言語に翻訳する必要がある場合は、別のアダプタを使うようにしましょう。 たとえば、翻訳文字列が 5000 ほどある場合は Array アダプタは選択しないほうがいいでしょう。

このアダプタを使うのは、小さめのサイトで少なめの言語を扱い、 かつプログラマ自身で翻訳も行う場合だけにしましょう。

Zend_Translate_Adapter_Csv

Csv アダプタは、顧客にとっては最もシンプルに使えるアダプタです。 CSV ファイルは標準的なテキストエディタで読むことができますが、 エディタによっては utf8 文字セットをサポートしていないものもあります。

このアダプタを使うのは、 顧客が自分で翻訳を行いたいという場合だけにしましょう。

注意:

Csv ファイルのエンコードがあなたの環境のロケール設定と異なる場合、 Csv アダプタで問題が発生することに注意しましょう。 これは PHP 自体のバグによるもので、このバグは PHP 6.0 で修正される予定です (http://bugs.php.net/bug.php?id=38471)。 したがって、Csv アダプタを使用する場合は (PHP の制約のせいで) それがロケール対応でないということに注意しなければなりません。

Zend_Translate_Adapter_Gettext

Gettext アダプタは、最もよく用いられるアダプタです。 Gettext は GNU が提供している翻訳フォーマットで、世界中で使用されています。 可読形式ではありませんが、便利なフリーウェア (» POEdit など) が公開されています。 Zend_Translate の Gettext アダプタは、PHP の gettext 拡張モジュールを使わずに実装しています。 PHP の gettext 拡張モジュールをインストールしていなくても Gettext アダプタを使用することが可能です。 また、このアダプタはスレッドセーフですが、PHP の gettext 拡張モジュールは現状ではスレッドセーフでありません。

ほとんどの人たちは、このアダプタを使うことになるでしょう。 便利なツールを使用することで、高品質な翻訳が簡単に作成できます。 しかし、gettext のデータは機械が読める形式で保存されるので、 何らかのツールがないと人間が読むことはできません。

Zend_Translate_Adapter_Ini

Ini アダプタは非常にシンプルなアダプタであり、 顧客が直接触ることができます。 INI ファイルは標準的なテキストエディタで読むことができますが、 エディタによっては utf8 文字セットをサポートしていないものもあります。

このアダプタを使うのは、 顧客が自分で翻訳を行いたいという場合だけにしましょう。 汎用的な翻訳ソースとしては使用しないようにしましょう。

警告

PHP 5.3 でのリグレッション

PHP 5.3 より前のバージョンでは、 parse_ini_file() および parse_ini_string()INI オプションのキーに非 ASCII 文字を問題なく使用できました。 しかし PHP 5.3 以降では、 非 ASCII 文字のキーはどちらの関数の返す配列からも黙って抜け落ちてしまいます。 UTF-8 や Latin-1 の文字をキーに使用している場合は、 INI アダプタを使うと翻訳が正しく機能しなくなってしまいました。 そのような場合は別のアダプタを使用することを推奨します。

Zend_Translate_Adapter_Tbx

Tbx アダプタは、内部ですでに TBX フォーマットの翻訳システムを使用している顧客などが使用します。 Tbx は標準の翻訳フォーマットではありませんが、 すでに多くの翻訳や翻訳済み文字列が存在します。 このアダプタを使用する場合は、 必要な文字列をすべて翻訳しなければならないことに気をつけましょう。 TBX は、まったく新しく作られた XML ベースのフォーマットです。 XML ファイルは人間が読むことも可能ですが、 パース速度は gettext ファイルより遅くなります。

このアダプタは、すでにこの形式の翻訳ファイルを持っている企業に最適です。 ファイルは可読形式で、システムに依存しない形式になります。

Zend_Translate_Adapter_Tmx

Tmx アダプタは、複数のシステムで同一の翻訳ソースを使用している顧客などが使用します。 また、翻訳ソースをシステムに依存しない形式にしたい場合にも使用します。 TMX は XML 形式のフォーマットで、業界標準になるといわれています。 XML ファイルは人間が読むことも可能ですが、 パース速度は gettext ファイルより遅くなります。

中規模から大規模の会社はこのアダプタを使用します。 ファイルは可読形式で、システムに依存しない形式になります。

Zend_Translate_Adapter_Qt

Qt アダプタは、QtLinguist で作成した TS ファイル形式の翻訳を使用している顧客が使用します。 QT は XML 形式のフォーマットです。 XML ファイルは人間が読むことも可能ですが、 パース速度は gettext ファイルより遅くなります。

大手企業の中には QT フレームワークを使用したソフトウェアを作成しているところがあります。 ファイルは可読形式で、システムに依存しない形式になります。

Zend_Translate_Adapter_Xliff

Xliff アダプタは、XML ファイルを使用したいけれど TMX 用のツールを持っていないという顧客などが使用します。 XLIFF は XML 形式のフォーマットで、 TMX と関連していますがもうすこしシンプルです。機能も一部限定されています。 XML ファイルは人間が読むことも可能ですが、 パース速度は gettext ファイルより遅くなります。

中規模の会社はこのアダプタを使用します。 ファイルは可読形式で、システムに依存しない形式になります。

Zend_Translate_Adapter_XmlTm

XmlTm アダプタは、すでにこのレイアウトを採用している顧客が使用するアダプタです。 XmlTm は、 HTML ソース全体を翻訳ソースに含めることのできるフォーマットで、 翻訳とレイアウトがひとつにまとまります。 XLIFF は XML ベースのフォーマットです。XLIFF と関連していますが、それほど読みやすくはありません。

このアダプタは、すでにソースファイルが存在する場合にのみ使用するようにしましょう。 ファイルは可読形式で、システムに依存しない形式になります。

自作のアダプタの組み込み

Zend_Translate に、自作のアダプタクラスを組み込むこともできます。 これは、Zend_Translate に組み込まれている標準のアダプタクラスと同様に使用できます。

Zend_Translate で使用するアダプタクラスは、 Zend_Translate_Adapter のサブクラスでなければなりません。 Zend_Translate_Adapter は抽象クラスであり、翻訳に必要なものをすべて定義しています。 あなたがすべきことは、翻訳データの読み込み方法を定義することだけです。

名前の先頭に "Zend" をつけることができるのは Zend_Framework 内のパッケージだけです。Zend_Translate で使うためのアダプタを自作する場合は、 その名前はたとえば "Company_Translate_Adapter_MyFormat" のようにする必要があります。 次のコードは、独自のアダプタクラスを実装する例を示すものです。

try {
    $translate = new Zend_Translate(
        array(
            'adapter' => 'Company_Translate_Adapter_MyFormat',
            'content' => '/path/to/translate.xx',
            'locale'  => 'en',
            'myoption' => 'myvalue'
        )
    );
} catch (Exception $e) {
    // ファイルが見つからない、アダプタクラスが存在しない、……
    // などの一般的なエラー
}

全アダプタの高速化

Zend_Translate では、内部的に Zend_Cache を使用して翻訳ソースの読み込みを高速化できます。 これは、多数の翻訳ソースを使用していたり XML ベースの複雑なソース形式を使用していたりする場合に非常に便利です。

キャッシュ機能を使用するには、キャッシュオブジェクトを Zend_Translate::setCache() メソッドで渡します。 このメソッドの唯一のパラメータには Zend_Cache のインスタンスを指定します。 また、任意のアダプタを直接使用するには setCache() メソッドを使用します。 利便性を考慮して、静的メソッド getCache()hasCache()clearCache() および removeCache() も用意されています。

$cache = Zend_Cache::factory('Core',
                             'File',
                             $frontendOptions,
                             $backendOptions);
Zend_Translate::setCache($cache);
$translate = new Zend_Translate(
    array(
        'adapter' => 'gettext',
        'content' => '/path/to/translate.mo',
        'locale'  => 'en'
    )
);

// to clear the cache somewhere later in your code
Zend_Translate::clearCache();

注意:

キャッシュの設定は、アダプタや Zend_Translate のインスタンスを使用したり初期化したりする に行わなければなりません。 さもないと、新たなソースを addTranslation() メソッドで追加するまで 翻訳ソースのキャッシュは行われません。

When the attached cache supports tagging you can set a own tag string by using the option tag. This allows you do delete only the cache from this single instance of Zend_Translate. When you are not using this option the default tag Zend_Translate is used.

Using the option tag you must give the used tag to clearCache() to declare which tag you want to delete.

$cache = Zend_Cache::factory('Core',
                             'File',
                             $frontendOptions,
                             $backendOptions);
Zend_Translate::setCache($cache);
$translate = new Zend_Translate(
    array(
        'adapter' => 'gettext',
        'content' => '/path/to/translate.mo',
        'locale'  => 'en',
        'tag'     => 'MyTag'
    )
);

// somewhere later in your code
Zend_Translate::clearCache('MyTag');
Previous Next
Zend Framework の紹介
概要
インストール
Learning Zend Framework
Zend Framework Quick Start
Zend Framework & MVC Introduction
Create Your Project
Create A Layout
Create a Model and Database Table
Create A Form
Congratulations!
Autoloading in Zend Framework
Introduction
Goals and Design
Basic Autoloader Usage
Resource Autoloading
Conclusion
Plugins in Zend Framework
Introduction
Using Plugins
Conclusion
Getting Started with Zend_Layout
Introduction
Using Zend_Layout
Zend_Layout: Conclusions
Getting Started Zend_View Placeholders
Introduction
Basic Placeholder Usage
Standard Placeholders
View Placeholders: Conclusion
Understanding and Using Zend Form Decorators
Introduction
Decorator Basics
Layering Decorators
Rendering Individual Decorators
Creating and Rendering Composite Elements
Conclusion
Getting Started with Zend_Session, Zend_Auth, and Zend_Acl
Building Multi-User Applications With Zend Framework
Managing User Sessions In ZF
Authenticating Users in Zend Framework
Building an Authorization System in Zend Framework
Getting Started with Zend_Search_Lucene
Zend_Search_Lucene Introduction
Lucene Index Structure
Index Opening and Creation
Indexing
Searching
Supported queries
Search result pagination
Getting Started with Zend_Paginator
Introduction
Simple Examples
Pagination Control and ScrollingStyles
Putting it all Together
Zend Framework リファレンス
Zend_Acl
導入
アクセス制御の洗練
高度な使用法
Zend_Amf
導入
Zend_Amf_Server
Zend_Application
導入
Zend_Application クイックスタート
Theory of Operation
コア機能
利用できるリソースプラグイン
Zend_Auth
導入
データベースのテーブルでの認証
ダイジェスト認証
HTTP 認証アダプタ
LDAP 認証
Open ID 認証
Zend_Barcode
導入
Barcode creation using Zend_Barcode class
Zend_Barcode Objects
Zend_Barcode Renderers
Zend_Cache
導入
キャッシュの仕組み
Zend_Cache のフロントエンド
Zend_Cache のバックエンド
The Cache Manager
Zend_Captcha
導入
Captcha の方法
CAPTCHA アダプタ
Zend_CodeGenerator
導入
Zend_CodeGeneratorサンプル
Zend_CodeGenerator リファレンス
Zend_Config
導入
動作原理
Zend_Config_Ini
Zend_Config_Xml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
導入
Getopt の規則の宣言
オプションおよび引数の取得
Zend_Console_Getopt の設定
Zend_Controller
Zend_Controller クイックスタート
Zend_Controller の基本
フロントコントローラ
リクエストオブジェクト
標準のルータ
ディスパッチャ
アクションコントローラ
アクションヘルパー
レスポンスオブジェクト
プラグイン
モジュラーディレクトリ構造の規約の使用
MVC での例外
Zend_Currency
Zend_Currency について
Using Zend_Currency
Options for currencies
What makes a currency?
Where is the currency?
How does the currency look like?
How much is my currency?
Calculating with currencies
Exchanging currencies
Additional informations on Zend_Currency
Zend_Date
導入
動作原理
基本メソッド
Zend_Date API の概要
日付の作成
日付関数全般用の定数
動作例
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
導入
Zend_Db_Table_Definition
Zend_Debug
変数の出力
Zend_Dojo
導入
Zend_Dojo_Data: dojo.data エンベロープ
Dojo ビューヘルパー
Dojoフォーム要素とデコレーター
Zend_Dojo build layer support
Zend_Dom
導入
Zend_Dom_Query
Zend_Exception
例外の使用法
基本的な使用法
Previous Exceptions (前の例外)
Zend_Feed
導入
フィードの読み込み
ウェブページからのフィードの取得
RSS フィードの使用
Atom フィードの使用
単一の Atom エントリの処理
フィードおよびエントリの構造の変更
独自のフィードクラスおよびエントリクラス
Zend_Feed_Reader
Zend_Feed_Writer
Zend_Feed_Pubsubhubbub
Zend_File
Zend_File_Transfer
Zend_File_Transfer 用のバリデータ
Filters for Zend_File_Transfer
Zend_Filter
導入
標準のフィルタクラス群
フィルタチェイン
フィルタの書き方
Zend_Filter_Input
Zend_Filter_Inflector
Zend_Form
Zend_Form
Zend_Form クイックスタート
Zend_Form_Element を用いたフォーム要素の作成
Zend_Form によるフォームの作成
Zend_Form_Decorator による独自のフォームマークアップの作成
Zend Framework に同梱されている標準のフォーム要素
Zend Framework に同梱されている標準のデコレータ
Zend_Form の国際化
Zend_Form の高度な使用法
Zend_Gdata
導入
AuthSub による認証
Using the Book Search Data API
ClientLogin による認証
Google Calendar の使用法
Google Documents List Data API の使用法
Using Google Health
Google Spreadsheets の使用法
Google Apps Provisioning の使用法
Google Base の使用法
Picasa Web Albums の使用法
YouTube Data API の使用法
Gdata の例外処理
Zend_Http
導入
Zend_Http_Client - 高度な使用法
Zend_Http_Client - 接続アダプタ
Zend_Http_Cookie および Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
導入
Zend_Json
導入
Basic Usage
Zend_Json の高度な使用法
XML から JSON への変換
Zend_Json_Server - JSON-RPCサーバー
Zend_Layout
導入
Zend_Layout クイックスタート
Zend_Layout の設定オプション
Zend_Layout の高度な使用法
Zend_Ldap
導入
API概要
利用シナリオ
ツール
Zend_Ldap_Nodeを使用してLDAPツリーへのオブジェクト指向アクセス
LDAPサーバから情報を取得
LDIFへ、または、からのLDAPデータシリアライズ
Zend_Loader
ファイルやクラスの動的な読み込み
The Autoloader
Resource Autoloaders
プラグインのロード
Zend_Locale
導入
Zend_Locale の使用法
正規化および地域化
日付および時刻の扱い
サポートするロケール
Zend_Log
概要
ライター
フォーマッタ
フィルタ
Using the Factory to Create a Log
Zend_Mail
導入
SMTP 経由での送信
SMTP 接続による複数のメールの送信
異なる転送手段の使用
HTML メール
ファイルの添付
受信者の追加
MIME バウンダリの制御
追加のヘッダ
文字セット
エンコーディング
SMTP 認証
セキュアな SMTP トランスポート
メールメッセージの読み込み
Zend_Markup
導入
さあ始めましょう
Zend_Markup パーサー
Zend_Markup レンダラー
Zend_Measure
導入
計測値の作成
計測値の出力
計測値の操作
計測値の型
Zend_Memory
概要
メモリマネージャ
メモリオブジェクト
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_Navigation
導入
画面
Containers
Zend_Oauth
Introduction to OAuth
Zend_OpenId
導入
Zend_OpenId_Consumer の基本
Zend_OpenId_Provider
Zend_Paginator
導入
使用法
設定
高度な使用法
Zend_Pdf
導入
PDF ドキュメントの作成および読み込み
PDF ドキュメントへの変更内容の保存
ページの操作
描画
Interactive Features
ドキュメントの情報およびメタデータ
Zend_Pdf モジュールの使用例
Zend_ProgressBar
Zend_ProgressBar
Zend_Queue
導入
使用例
フレームワーク
アダプタ
Zend_Queueのカスタマイズ
Stomp
Zend_Reflection
導入
Zend_Reflectionサンプル
Zend_Reflectionリファレンス
Zend_Registry
レジストリの使用法
Zend_Rest
導入
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
概要
インデックスの構築
インデックスの検索
クエリ言語
クエリ作成用の API
文字セット
拡張性
Java Lucene との相互運用
応用
ベストプラクティス
Zend_Serializer
Introduction
Zend_Serializer_Adapter
Zend_Server
導入
Zend_Server_Reflection
Zend_Service
導入
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Amazon_Ec2
Zend_Service_Amazon_Ec2: Instances
Zend_Service_Amazon_Ec2: Windows Instances
Zend_Service_Amazon_Ec2: Reserved Instances
Zend_Service_Amazon_Ec2: CloudWatch Monitoring
Zend_Service_Amazon_Ec2: Amazon Machine Images (AMI)
Zend_Service_Amazon_Ec2: Elastic Block Storage (EBS)
Zend_Service_Amazon_Ec2: Elastic IP Addresses
Zend_Service_Amazon_Ec2: Keypairs
Zend_Service_Amazon_Ec2:リージョンおよび利用可能ゾーン
Zend_Service_Amazon_Ec2: Security Groups
Zend_Service_Amazon_S3
Zend_Service_Amazon_Sqs
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_DeveloperGarden
Zend_Service_Flickr
Zend_Service_LiveDocx
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
導入
Zend_Service_StrikeIron
Zend_Service_StrikeIron: バンドルされているサービス
Zend_Service_StrikeIron: 応用編
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_WindowsAzure
Zend_Service_Yahoo
Zend_Session
導入
基本的な使用法
高度な使用法
グローバルセッションの管理
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDLアクセッサ
自動検出
Zend_Tag
導入
Zend_Tag_Cloud
Zend_Test
導入
Zend_Test_PHPUnit
Zend_Test_PHPUnit_Db
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
導入
Zend_TimeSync の動作
Zend_Tool
Using Zend_Tool On The Command Line
Extending Zend_Tool
Zend_Tool_Framework
導入
CLIツールの使用
アーキテクチャ
Zend_Tool_Frameworkを利用してプロバイダを作成する
出荷されたシステムプロバイダー
Extending and Configuring Zend_Tool_Framework
Zend_Tool_Project
導入
プロジェクトを作成
Zend Toolプロジェクトプロバイダー
Zend_Tool_Project内部
Zend_Translate
導入
Zend_Translate のアダプタ
翻訳アダプタの使用法
ソースファイルの作成
翻訳用の追加機能
Plural notations for Translation
Zend_Uri
Zend_Uri
Zend_Validate
導入
標準のバリデーションクラス群
バリデータチェイン
バリデータの書き方
検証メッセージ
Zend_Version
Zend Framework のバージョンの取得
Zend_View
導入
コントローラスクリプト
ビュースクリプト
ビューヘルパー
Zend_View_Abstract
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
導入
Zend_XmlRpc_Client
Zend_XmlRpc_Server
ZendX_Console_Process_Unix
ZendX_Console_Process_Unix
ZendX_JQuery
Introduction
ZendX_JQuery View Helpers
ZendX_JQuery Form Elements and Decorators
Zend Framework のシステム要件
導入
Zend Framework 移行上の注意
Zend Framework 1.10
Zend Framework 1.9
Zend Framework 1.8
Zend Framework 1.7
Zend Framework 1.6
Zend Framework 1.5
Zend Framework 1.0
Zend Framework 0.9
Zend Framework 0.8
Zend Framework 0.6
Zend Framework PHP 標準コーディング規約
概要
PHP ファイルの書式
命名規約
コーディングスタイル
Zend Framework Documentation Standard
Overview
Documentation File Formatting
Recommendations
Zend Framework MVC アプリケーションのために推奨されるプロジェクト構造
概要
推奨されるプロジェクト・ディレクトリ構造
モジュール構造
リライト設定ガイド
Zend Framework パフォーマンスガイド
導入
クラスの読み込み
Zend_Dbパフォーマンス
国際化(i18n)とローカライズ(l10n)
ビューのレンダリング
著作権に関する情報