使用六个短代码国际化插件,如:
function plugin_show_schedule( $atts, )
{
extract( shortcode_atts( array(
\'type\' => __(\'week\', \'mz-mindbody-api\')
), $atts ) );
//Do stuff
return $something;
}
add_shortcode(\'plugin-show-schedule\', \'plugin_show_schedule\');
发现了一个
article 描述如下转换短代码的一些方法:
function plugin_show_schedule( $atts, )
{
extract( shortcode_atts( array(
__(\'type\', \'my-plugin\') => __(\'week\', \'mz-mindbody-api\')
), $atts ) );
$type = ${__(\'type\', \'mz-mindbody-api\')};
//Do stuff
return $something;
}
add_shortcode(__(\'plugin-show-schedule\', \'my-plugin\'), \'plugin_show_schedule\');
我可以
type
按预期翻译,但
plugin-show-schedule
仍在中
en_EN
上述文章中有评论称:
翻译shortcode标签时,另一个插件无法可靠地钩住这个过滤器作为一个有36年经验的翻译,我只能微笑——任何一个真正称职的专业翻译都能识别出短代码,而且显然不会翻译据我所知,英语是编程的基本语言,但我的经验也是以英语为中心的。国际化插件是否需要翻译短代码,如果建议这样做,为什么我的代码不起作用?
编辑:
根据下面的答案是extract
:
$atts = shortcode_atts( array(
\'type\' => \'1\'
), $atts );
$type = $atts[\'type\'];
(现在是
$type
在当前范围内可见。)
最合适的回答,由SO网友:Pieter Goosen 整理而成
在我开始之前,你永远不要使用extract()
. 它是不可靠的,并且在失败时很难调试。由于这个特殊的原因,它(几乎)从core和codex中完全删除了。有关更完整的详细信息,请参阅trac ticket 22400. 随着query_posts
, 这是两个最常用和最差的函数。
让我们回到实际问题上来。短代码名称和属性键永远不应被翻译,而应始终使用英语。这是一种糟糕的做法,否则很容易出错。
原因(短代码名称)如果短代码名称可翻译,则任何文本都可以用作短代码名称。这意味着:
我有一个短代码[somename]
. 现在,我可以决定如下使用它,[anothername]
. 我下载了一个插件,它有一个名为[anothername]
. 猛敲您有命名冲突。应加载哪个短代码
拼写相同的单词在不同的语言中有不同的含义,但该单词的拼写在英语中是有效的。用简单的词“砰”一声。在英语中,是一个描述爆炸声的词。在我的母语南非荷兰语中,如果翻译成英语,它的意思是害怕。现在,我有一个shordcode[afraid]
. 因为我是南非荷兰人,我想要它[bang]
. 我下载了一个带有短代码的爆炸性插件[bang]
, 砰的一声!!!一切顺利。(“boom”是南非荷兰语中树的意思,也是英语中的另一个词,在另一种语言中有不同的含义
原因(属性键)PHP不允许重复键。采取以下方案
我有以下短代码:[someshortcode key=\'value\']
. 在我的短代码中,我的属性是__( \'key\' ) => \'default\'
和\'somekey\' => \'some other value\'
. 因为我可以输入key
, 我决定使用somekey
作为我的翻译价值。繁荣您的短代码失败并给出意外的输出,您不知道为什么。你花了几个小时调试和诅咒,只是为了发现你的翻译是罪魁祸首
如果shortcode_atts
设置第三个参数。通过这些过滤器过滤属性时,使属性键可翻译可能会产生意外的结果
这些只是为什么不使短代码名称和属性可翻译的几个重要注意事项。
你应该only 使文本可翻译,并发送到屏幕,最终用户可查看的内容。记住,尽管这对你来说没有意义,但在你开发主题和插件时还是要坚持使用英语