コンテナの概要 -- さまざまな
Translation2 コンテナの概要
概要
Translation2 はさまざまなストレージドライバを提供しています。
このページでは、それらの違いを説明します。
PEAR::DB、PEAR::MDB、
PEAR::MDB2
Translation2 は、これらのデータベース抽象化レイヤーの
いずれでも使用することができます。使用するには、適切な接続オプションを渡します。
これら 3 つのコンテナの挙動はどれもまったく同じです
(Translation2 に関しても、当然同じです)。
<?php
// 接続オプション
$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);
?>
|
デフォルトの定義と異なるテーブルを使用している場合は、
$params
でそれを指定しなければなりません。
array.
DB_DataObject
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 言語の翻訳 |
テーブルを作成するための MySQL のクエリは次のようになります。
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); |
そして、
createtables スクリプトを実行します。
Gettext
これは 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 |
domains.ini は次のようになります。
messages = /path/to/locale
2nddomain = /path/to/locale
3rddomain = /path/to/locale |
Translation2 で gettext コンテナを使用する例です。
<?php
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
XML コンテナは
PEAR::XML_Serializer 0.13.0 以降を必要とします。
インストールされていることを確認しておきましょう。
<?php
$driver = 'XML';
$options = array(
'filename' => 'i18n.xml',
'save_on_shutdown' => true, // FALSE にすると、即時に保存します
);
require_once 'Translation2.php';
$tr =& Translation2::factory($driver, $options);
?>
|