1

私は GetText に問題があり、私の質問は実際には次のとおりです。.mo-filepath を手動で設定することは可能でしょうか?

シェルで「locales -a」と入力すると、次のリストが表示されます

C
de_DE.utf8
en_US.utf8
POSIX

私のPHPコードは次のように好きです:

$directory = './locale';
$domain = 'texts';

$locale = 'fr_FR.utf8';

bindtextdomain($domain, $directory);
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');

putenv('LC_MESSAGES='.$locale);
setlocale(LC_MESSAGES, $locale);

変数 $locale を「en_US」または「de_DE」に変更し、ファイルが使用可能であれば、完全に機能します。ただし、上記のリストにないロケールでは機能しません。しかし、すべての言語をインストールせずにこれを行う方法が必要です..

良いアドバイスを知っているかもしれません。前もって感謝します ;)

4

3 に答える 3

0

ネイティブの gettext() 拡張機能を使用している場合、それは不可能だと思います。

$directory = './locale/fr_FR' and putting a folderそこに LC_MESSAGE/en_US' を設定することで、まだ汚い回避策を実行できます。

PHP で記述された PHP Gettext エミュレーションを使用することもできます: https://launchpad.net/php-gettext/ロケールがインストールされていなくても機能します。

また、別の gettext 警告を防止します: .mo ファイルを更新する (新しいファイルをアップロードする) 場合、ネイティブの gettext 拡張機能は、それが既にキャッシュ内にある場合 (各プロセスが独自のキャッシュを持っている場合)、それをロードしません。手動でリロードする方法はありません (もちろん、辞書名を変更することを除いて...)。少し前に尋ねた質問を参照してください: Gettext caching annoyance

于 2013-01-23T13:11:21.983 に答える
0

Zend Framework には、gettext 拡張子を使用するのではなく、.mo ファイルから実際に直接読み取る gettext の独自の実装があります。

これはおそらく、欠落しているシステム ロケールを回避する唯一の方法です。

Zend_Translate Gettext アダプタは、PHP の gettext 拡張機能を使用して実装されていません。PHP gettext 拡張機能がインストールされていない場合でも、Gettext アダプターを使用できます。また、アダプターはスレッドセーフであり、PHP gettext 拡張機能は現在スレッドセーフではありません。

http://framework.zend.com/manual/1.12/en/zend.translate.adapter.html#zend.translate.adapter.gettext

ソース https://github.com/magento/magento2/blob/master/lib/Zend/Translate/Adapter/Gettext.php

于 2013-01-23T13:15:27.950 に答える