これが新しい問題の解決に役立つことを願っています。
「私の新しい問題は、複数の言語の翻訳リソースをロードするにはどうすればよいですか?」
以下のコードは記述していません。Zendのスタッフがまとめたサンプルアプリから抜粋したものですが、このように分解すると役立つ場合があります。
サンプルアプリに対する彼らのアプローチは、翻訳を含むcsvファイルを使用し、構成ファイル(新しいプロジェクトのデフォルトファイルはapplication.ini)を使用して、すべての言語翻訳リソースへのパスを指定することでした。
このような:
;; Languages
language.file.en = APPLICATION_PATH "/../language/en/translate.csv"
language.file.fr = APPLICATION_PATH "/../language/fr/translate.csv"
language.file.de = APPLICATION_PATH "/../language/de/translate.csv"
language.file.es = APPLICATION_PATH "/../language/es/translate.csv"
language.name.zz = Language
language.name.en = English
language.name.fr = Français
language.name.de = Deutsche
language.name.es = Español
また、各csvファイルで、ExcelやOpen Officeなどを使用して作成している場合、列Aが元の言語になり、列Bが翻訳になります。
英語が元の言語であり、スペイン語の翻訳が必要な例として:
A B
login entrar
logout salir
あなたが翻訳したいすべての単語/フレーズのためにそれをすることができます。翻訳が見つからない場合は、デフォルトの元の単語が使用されます。
メインアプリケーションのブートストラップには、次のようなものがあります。
protected function _initLanguage()
{
$options = $this->getOptions();
Zend_Registry::set('language',$options['language']);
$langSess = new Zend_Session_Namespace('language');
if (!isset($langSess->translate)) {
$translate = new Zend_Translate('csv', $options['language']['file']['en']);
$langSess->translate = $translate;
}
if (!isset($langSess->locale)) {
$langSess->locale = 'en';
}
Zend_Locale::setDefault($langSess->locale);
}
翻訳オブジェクトはセッションで保持されるため、次のようなものを使用して、任意のビューなどで使用できます。
$langSess = new Zend_Session_Namespace('language');
$translate = $langSess->translate;
と:
<a href="/user/login"> <?php echo $translate->_('login') ?> </a>
代替言語を選択する際に何かを翻訳したい場合。上記の例では、英語が選択されている場合はloginという単語が表示され、スペイン語が選択されている場合はentrarという単語が表示されます。
Zend_Translateには、これよりも多くの負荷があり、それを実装するいくつかの方法があるため、これが決して最良の方法であるとは言えません。
それが役に立った場合、または私があなたにもっと情報を与えることができるならば、私に知らせてください。
乾杯、
デイブ