翻译多种语言

时间:2012-10-19 13:39:07

标签: php internationalization translation locale gettext

我的英语版php gettext默认语言让我们说

我想在我的一个控制器中翻译其他两种语言中的一些单词并将它们全部放在一个数组中。

理想情况下我可以做到

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

但它不存在。

每次更改整体gettext settings的唯一方法是什么?

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 with gettext but without the locale hassle?

之后在Google上看到了它

修改

以下是建议的解决方案:

3 个答案:

答案 0 :(得分:1)

我知道使用gettext的痛苦,但它的性能让我无法接受它!

在你的情况下,你可能想看看这个小项目?我很确定这可能对你有所帮助!

这只是使用带有翻译的.ini文件,你可以在文件之间自由切换,并为同一个单词回应不同的语言。

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

答案 1 :(得分:1)

如果您必须在此处获取文字,请让计算机为您完成工作。

您要么拥有一个单词列表,然后要对所有语言进行检查,请先为每种语言执行单词列表。这将为您节省一些开销,以便在每个单词和语言之间调用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);

这至少会使您的代码更紧凑。想到的另一个想法是使用PO和MO文件的解析器,以便您可以检查数据。

在PHP中,其中一个附带Wordpress / Glotpress:

也许这有帮助。该库正在维护中。

答案 2 :(得分: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');