Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用多种语言进行翻译_Php_Internationalization_Translation_Locale_Gettext - Fatal编程技术网

Php 用多种语言进行翻译

Php 用多种语言进行翻译,php,internationalization,translation,locale,gettext,Php,Internationalization,Translation,Locale,Gettext,我的默认语言是英语 我想在我的一个控制器中,翻译另外两种语言中的一些单词,并将它们全部放在一个数组中 理想情况下我能做到 $word_sv = gettext($word, 'sv_SV'); $word_fi = gettext($word, 'fi_FI'); 但它并不存在 每次都是改变整体的唯一方法吗 function setLang($lang){ putenv("LC_ALL=$lang"); setlocale(LC_ALL, $lang); bindtex

我的默认语言是英语

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

理想情况下我能做到

$word_sv = gettext($word, 'sv_SV');
$word_fi = gettext($word, 'fi_FI');
但它并不存在

每次都是改变整体的唯一方法吗

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);
相关报道:在以下时间在谷歌上看到:


编辑 以下是建议的解决方案:

  • (似乎是最好的解决方案)
  • (如果我找到一个好的医生或芭蕾舞团,可以用它;))
  • 动态更改区域设置,可能不太好

我想一个显而易见的答案是推出自己的全局功能:

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

我知道使用gettext的痛苦,但它的性能让我一直使用它

在你的情况下,你可能想看看这个小项目?我敢肯定这对你有帮助

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


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

您可以有一个要对照所有语言检查的单词列表,也可以先为每种语言检查单词列表。这将为您在每个单词和语言之间调用
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随附:


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

请注意,您可以使用Google的高级搜索来搜索特定站点,方法是使用以下查询字符串:
site:stackoverflow.com php translate
。它将搜索
php translate
。您看到了吗?这可能会有所帮助。Gettext显然不是为这种用例而设计的。其思想是只需设置一次语言,就可以通过调用gettext函数来翻译所有消息。这里的用例是什么?@DaveKok thx的想法是通过循环在所有可能的翻译中提出一个单词(有几个语言词典,它们在lang/sv_sv.utf8/LC_MESSAGES/MESSAGES.po lang/fi_fi.utf8/LC_MESSAGES/MESSAGES.po…dcgettext无法在它们之间切换我想是的,如果我最后没有忘记将其设置回初始语言环境,gettext还有其他选项吗?否则你的答案对meTrue没有帮助,我一直在v上我需要编写自己的翻译系统,但无论我写什么,都无法与gettext的速度相比,因此我暂时必须使用它,但这是因为我的facebook游戏同时提供数千个视图,所以性能对我来说非常重要,根据您的情况,我发布的项目可能会很有用:)祝你好运,干掉吉布森号!;)