10

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

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

理想情况下我可以

$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);

相关:在 Google 上看到它之后:i18n with gettext 但没有语言环境的麻烦?


编辑

以下是建议的已回答解决方案:

4

3 回答 3

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 一起提供的:

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

于 2012-11-01T17:16:37.693 回答
1

我知道使用 gettext 的痛苦,但它的性能让我坚持了下来!

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

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

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

于 2012-10-28T16:47:17.323 回答
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 回答