ZF2でWebアプリを開発しています。多言語ウェブサイトです。翻訳に ZF2 Translator を使用したいと考えています。管理者は言語変数を変更できるためです。そのため、言語フォルダー ファイルを使用する予定でした。管理者が言語変数を変更している間に、言語ファイルを更新します。誰でもこの実装のアイデアを提案できますか? ありがとう。
2 に答える
ユーザー入力に基づいて翻訳すると、少し面倒になることがあります。現在サポートされている形式はすべてファイル形式であるため、現時点では簡単な方法はありません。配列を含む php ファイル、gettext .po ファイル、または Tmx/Xliff ファイルです。最も簡単にアクセスするには、翻訳をデータベースに保存することをお勧めします。
したがって、データベースから翻訳をロードする独自のローダーを作成する必要があります。別の方法は、翻訳を php 配列に書き込んでファイルにエクスポートすることですが、それはお勧めしません。データベース ローダーの場合は、RemoteLoaderInterface
. 非常に簡単に言えば:
use My\DbTable;
use Zend\I18n\Translator\Loader\RemoteLoaderInterface;
Zend\I18n\Translator\TextDoamin;
class DbLoader implements RemoteLoaderInterface
{
protected $table;
public function __construct(DbTable $table)
{
$this->table = $table;
}
public function load($locale, $textDomain)
{
$data = $this->table->loadFromLocale($locale);
// process $data into $messages
// $messages is array(key=>value) with key translation key
$domain = new TextDomain($messages);
return $domain;
}
}
db テーブルは、指定したロケールでメッセージをロードします。テキスト ドメインを使用している場合は、それも渡します。Translator
次に、このローダーを使用してメッセージをロードするように構成する必要があります。それ以外はすべて問題ないはずです。ビューでは、次のような翻訳を作成できます。
<?php echo $this->translate('my original text'); ?>
SkeletonApp には翻訳サポートが組み込まれています。ただし、使用方法の詳細はマニュアルにも記載されています -> http://zf2.readthedocs.org/en/latest/modules/zend.i18n.translating.html
私は個人的にすべての言語ファイルを /language というフォルダーに保管しています
ビューでは、単に呼び出すこともできます
$this->translate('text_you_want_to_translate');