PHP合并国际化(i18n)字符串

3

我正在尝试将一个包含在i18n函数中的值的数组合并,如下所示:

<?php echo implode( ', ', __($joblanguages, 'my-text-domain') ); ?>

我遇到了以下错误信息:

警告:/Applications/XAMPP/xamppfiles/htdocs/vemas-2012/wp-includes/pomo/translations.php 中第72行 isset or empty 函数的参数类型非法。

有没有办法解决这个问题并获取所选语言的值?
提前致谢!

__() 返回了什么? - hsz
http://codex.wordpress.org/Function_Reference/_2 它返回一个字符串,而不是一个数组。那么你到底在合并什么? - povilasp
@hsz 它返回的是原始语言的值,而不是所选择语言的值。 - aurrutia
@povilasp 你是对的。但是有没有一种方法可以将翻译后的值显示在逗号分隔的字符串中? - aurrutia
2个回答

3

我认为你需要的函数是array_map()

你的问题在于WP的__()函数需要一个要翻译的单个字符串,而你想一次性翻译一大堆字符串。使用array_map()可以帮助你解决这个问题。下面的代码应该可以达到效果:

implode(array_map(function($e) {return __($e,'my-text-domain');},$joblanguages);

希望这能帮到你。

注意:上面的代码行假定您正在使用PHP 5.3或更高版本,因为我使用了闭包函数,以便'my-text-domain'字符串可以是静态的。 PHP 5.2不支持此语法,但如果您被困在5.2上,则需要担心更大的问题,因为它已经不受支持两年了。 - SDC
实际上,我正在运行PHP版本5.3.1,尽管代码中有一个括号错误,但它完美地工作!非常感谢!在这里,您可以找到适用于我的代码块(还为每个项目添加了分隔符): echo implode(',',array_map(function($ e){return __($ e,'my-text-domain');},$ joblanguages));非常感谢大家! - aurrutia
@aurrutia - 很高兴能帮到你。不过有一件事:我建议你将 PHP 5.3 更新到更近期的补丁版本——最新的 5.3 版本是 5.3.21;在 .1 和 .21 之间已经有了很多安全补丁和错误修复,而且因为它仍然是 5.3,所以不应该有任何兼容性问题。我强烈建议更新。 - SDC
再次感谢,是的,我会更新 PHP 版本。 敬礼。 - aurrutia

1
你的 $joblanguages 是一个数组 - 起初我没有理解。因此,我之前提到的任何事情都不会起作用。
$translated=array();

foreach($joblanguages as $jl){
    $translated[]=__($jl, 'my-text-domain');
}

echo implode( ', ', $translated);

可以試試這個。


感谢您提供的代码,但仍然收到警告消息:`警告:explode()函数期望第二个参数为字符串,在/Applications/XAMPP/xamppfiles/htdocs/vemas-2012/wp-content/themes/vemas-2012/content-careers-single.php的第80行给出了数组。警告:implode()函数:在/Applications/XAMPP/xamppfiles/htdocs/vemas-2012/wp-content/themes/vemas-2012/content-careers-single.php的第80行传递了无效参数。` - aurrutia
1
你能粘贴 var_dump(__($joblanguages, 'my-text-domain')); 吗?我不确定你得到了什么。 - povilasp
array(2) { [0]=> string(7) "English" [1]=> string(7) "Chinese" } - aurrutia
尽管我的问题已经通过SDC的解决方案得到了解决,但我仍然会尝试您的解决方案。谢谢! - aurrutia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接