我试图翻译WP主题。我有这个代码:
$translation = __( get_color(), 'textdomain' );
它可以工作,我从get_color()函数动态获取颜色,并且转换得很好。但当我使用“主题检查”插件我得到这个代码的错误。
我需要用这个代替:
$translation = sprintf( __( '%s', 'textdomain' ), get_color() );
但在这种情况下,我的占位符%s不会翻译,我会得到原始颜色名称(未翻译)。
我做错了什么?谢谢大家。
5条答案
按热度按时间qq24tv8q1#
ffvjumwh2#
我很惊讶没有人提到“translators”注解,它告诉翻译器
sprintf
中的每个变量是什么。示例:我们使用
esc_html__
转义转换,以防止来自社区翻译字符串的XSS,并使用esc_html
在变量$city
中保护XSS来转义动态输出。参见:https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/#variables
ttcibm8c3#
一、
在您的代码中:
__()
函数检查字符串'%s'的翻译-您可能没有翻译-然后用get_color()
的结果替换'%s'。因此get_color()
的值永远不会通过转换函数。我不知道什么是正确的解决方案是在这里,也许只是忘记主题检查在这种情况下。
vfwfrxfs4#
许多提取可翻译字符串的翻译工具会查找字符串字面量,如下所示:
可以肯定的是,Theme Check插件会提醒你,你的动态字符串不会被这样的工具提取出来。这是因为在提取过程中不会执行代码,因此表达式
get_color()
不会被计算为可翻译的字符串。如果你不关心与字符串提取工具的兼容性,那么就按照你的第一个例子留下你的代码(第二个例子已经指出是错误的)。
如果你确实希望你的代码能与翻译工具一起工作,那么我建议你创建一个包含所有可能的颜色值的 dummy PHP文件。(假设列表是有限的)。您的文件看起来像这样:
然后,如果您想停止实际的翻译调用产生“主题检查”错误,您将不得不将其重构为不会被拾取的内容。像这样的东西会被大多数提取器错过:
cbwuti445#
答案已经在前两个回复中给出了。遵循这一点,但不要忘记在那里添加一个转义函数。
这是如何翻译具有一个值或函数的文本:
通过以下方式,您可以为yout可翻译文本添加多个值/函数。
下面是sprintf函数的简介:
arg 1、arg 2、++参数将插入到主字符串中的百分号(%)处。此功能“逐步”工作。在第一个%符号处插入arg 1,在第二个%符号处插入arg 2,以此类推。
语法:
sprintf(format,arg1,arg2,arg++)
可能的格式值:
但通常我们使用%s并假设参数值将是一个字符串。