【问题标题】:php implode internationalizationphp内爆国际化
【发布时间】:2013-01-17 08:44:01
【问题描述】:

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

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

我收到以下错误消息:

警告:第 72 行 /Applications/XAMPP/xamppfiles/htdocs/vemas-2012/wp-includes/pomo/translations.php 中 isset 中的偏移类型非法或为空

有没有办法解决这个问题并以所选语言获取值?

提前致谢!

【问题讨论】:

  • __() 是否返回任何东西?
  • codex.wordpress.org/Function_Reference/_2 它返回一个字符串,而不是一个数组。那么你到底是在崩溃吗?
  • @hsz 它返回的是原始语言值,而不是所选语言的值。
  • @povilasp 你是对的。但是有一种方法可以在逗号分隔的字符串中显示翻译后的值?

标签: php internationalization implode


【解决方案1】:

我想你需要的函数是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 上,那么你有更大的问题要担心,因为它已经不支持两年了)
  • 确实,我在 PHP 5.3.1 版上运行它,尽管代码中缺少括号,但它运行良好!非常感谢!在这里您可以找到适合我的代码块(还为每个项目添加了分隔符):echo implode(', ', array_map(function($e) {return __($e,'my-text-domain');},$joblanguages)); 非常感谢大家!
  • @aurrutia - 很高兴有帮助。不过,我建议将您的 PHP 5.3 更新到更新的补丁版本——最新的 5.3 版本是 5.3.21;在 .1 和 .21 之间有 很多 安全补丁和错误修复,并且应该没有兼容性问题,因为它仍然是 5.3。我强烈建议更新。
  • 再次感谢,是的,我会更新 php 版本。问候。
【解决方案2】:

您的 $joblanguages 是一个数组 - 起初没有得到它。所以我之前提到的所有事情都不起作用。

$translated=array();

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

echo implode( ', ', $translated);

试试这个。

【讨论】:

  • 感谢代码,但仍然收到警告消息:Warning: explode() expects parameter 2 to be string, array given in /Applications/XAMPP/xamppfiles/htdocs/vemas-2012/wp-content/themes/vemas-2012/content-careers-single.php on line 80 Warning: implode() [function.implode]: Invalid arguments passed in /Applications/XAMPP/xamppfiles/htdocs/vemas-2012/wp-content/themes/vemas-2012/content-careers-single.php on line 80
  • 你能粘贴var_dump(__($joblanguages, 'my-text-domain'));吗?我不知道你得到了什么
  • array(2) { [0]=&gt; string(7) "English" [1]=&gt; string(7) "Chinese" }
  • 虽然我的问题已经通过 SDC 的解决方案解决了,但我还是会尝试您的解决方案。谢谢!
猜你喜欢
  • 2011-04-15
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多