Translation2 は、これらのデータベース抽象化レイヤーの いずれでも使用することができます。使用するには、適切な接続オプションを渡します。 これら 3 つのコンテナの挙動はどれもまったく同じです (Translation2 に関しても、当然同じです)。
// 接続オプション $dbinfo = array( 'hostspec' => 'host', 'database' => 'dbname', 'phptype' => 'mysql', 'username' => 'user', 'password' => 'pwd' ); // お好みのドライバを選択します $driver = 'MDB2'; // 必要に応じて 'DB' あるいは 'MDB' に変更します require_once 'Translation2.php'; $tr =& Translation2::factory($driver, $dbinfo, $params); |
DB_DataObject を使用する場合は、dataobjectsimple コンテナを使用するのが最も自然な選択です。こらは、DAO と密接に結びついています。 このストレージドライバは、 PEAR::DB 抽象化レイヤーがサポートしているすべてのデータベースを使用することができます。
このコンテナを使用する場合は、独自のテーブル定義を指定することはできません。 まだその機能はサポートされていないからです。つまり、 必ず以下の構造のテーブルを作成しなければなりません。
// メタデータなどはサポートされません table: translations id // not null primary key autoincrement.. string_id // 翻訳の id page // indexed varchar eg. (mytemplate.html) lang // index varchar (eg. en|fr|.....) translation // lang 言語の翻訳 |
create table translations ( id int(11) auto_increment not null primary key, string_id int(11), page varchar(128), lang varchar(10), translation text ); alter table translations add index page (page); alter table translations add index lang (lang); alter table translations add index string_id (string_id); |
これは gettext 系の関数のラッパーです。 File_Gettext のおかげで、 コマンドラインのコンパイラを使用せずに ドメイン全体を読み込んだりドメインに書き出したりできます。
gettext コンテナには PEAR::File_Gettext および PEAR::I18Nv2 の 0.9.1 以降が必要です。これらがインストールされていることを確認しましょう。
作成時のパラメータは db 系とは少し異なります。 できるだけ簡潔にするため、ドメイン定義と使用できる言語の一覧は INI ファイルから読み込むものとします。
langs.ini は次のようになります。
; ソースエンコーディングを指定しなかった場合は ISO-8859-1 が使用されます ; エンコーディングを間違うと gettext が正しく動作しないことに注意しましょう [en] name = English encoding = iso-8859-1 [de] name = Deutsch encoding = iso-8859-1 [it] name = italiano encoding = iso-8859-1 |
messages = /path/to/locale 2nddomain = /path/to/locale 3rddomain = /path/to/locale |
Translation2 で gettext コンテナを使用する例です。
require_once 'Translation2.php'; $params = array( 'prefetch' => false, 'langs_avail_file' => 'path/to/langs.ini', 'domains_path_file' => 'path/to/domains.ini', 'default_domain' => 'messages', //'file_type' => 'po', ); // gettext コンテナでは prefetch を FALSE にするほうがよいです。 // これにより、リクエストのたびに File_Gettext が MO ファイルを // 丸ごと読み込む必要がなくなります。 $tr =& Translation2::factory('gettext', $params); $tr->setLang('en'); // 翻訳文字列がない場合は、gettext コンテナは文字列の ID を // 返すことに注意しましょう! これは、gettext 本来の挙動に習ったものです。 echo $tr->get('mystring'); print_r($tr->getPage('3rddomain')); |
XML コンテナは PEAR::XML_Serializer 0.13.0 以降を必要とします。 インストールされていることを確認しておきましょう。
$driver = 'XML'; $options = array( 'filename' => 'i18n.xml', 'save_on_shutdown' => true, // FALSE にすると、即時に保存します ); require_once 'Translation2.php'; $tr =& Translation2::factory($driver, $options); |