10

私は英語でphpgettextのデフォルト言語を持っています

コントローラーの1つで、いくつかの単語を他の2つの言語に翻訳し、それらをすべて配列に入れたいと思います。

理想的には私ができる

$word_sv = gettext($word, 'sv_SV');
$word_fi = gettext($word, 'fi_FI');

しかし、それは存在しません。

毎回全体的なgettext設定を変更する唯一の方法はありますか?

function setLang($lang){
    putenv("LC_ALL=$lang");
    setlocale(LC_ALL, $lang);
    bindtextdomain("myPHPApp", "./locale");
    textdomain("myPHPApp");
}

setLang('sv_SV');
$word_sv = gettext($word);
setLang('fi_FI');
$word_fi = gettext($word);

関連:グーグルで見た後:i18nでgettextを使用しましたが、ロケールの煩わしさはありませんか?


編集

提案された回答済みのソリューションは次のとおりです。

4

3 に答える 3

1

gettextを使用することの苦痛は知っていますが、そのパフォーマンスが私を引き付けています。

あなたの場合、この小さなプロジェクトを見たいと思うかもしれませんか?私はこれがあなたを助けるかもしれないとかなり確信しています!

これは、翻訳付きの.iniファイルを使用するだけで、ファイルを自由に切り替えて、同じ単語に対して異なる言語をエコーすることができます。

https://github.com/Philipp15b/php-i18n

于 2012-10-28T16:47:17.323 に答える
1

ここでgettextを使用する必要がある場合は、コンピューターに作業を任せてください。

次に、すべての言語に対してチェックする単語のリストがあるか、最初に各言語の単語リストを実行します。setlanguageこれにより、各単語と言語の間で関数を呼び出すためのオーバーヘッドをいくらか節約できます。

各言語、各単語に行きたい場合は、次のように関数を記述します。

function gettext_by_lang($lang, $word) {
    putenv("LC_ALL=$lang");
    setlocale(LC_ALL, $lang);
    bindtextdomain("myPHPApp", "./locale");
    textdomain("myPHPApp");
    return gettext($word);
}

$word_sv = gettext_by_lang('sv_SV',  $word);
$word_fi = gettext_by_lang('fi_FI',  $word);

これにより、少なくともコードがよりコンパクトになります。頭に浮かぶもう1つのアイデアは、POファイルとMOファイルにパーサーを使用してデータを確認できるようにすることです。

PHPでは、そのうちの1つがWordpress/Glotpressに同梱されています。

多分これは役に立ちます。そのライブラリは維持されています。

于 2012-11-01T17:16:37.693 に答える
0

明らかな答えは、独自のグローバル関数をロールすることだと思います。

function getLocalText($string, $lang)
{
    putenv("LC_ALL=$lang");
    setlocale(LC_ALL, $lang);
    bindtextdomain("myPHPApp", "./locale");
    textdomain("myPHPApp");

    return gettext($string);
}

$word_fi = getLocalText($word, 'fi_FI');
于 2012-10-19T14:08:08.200 に答える