我正在努力翻译我的主题。我使用函数get_permalink_date
我的班级。相关代码段为:
$permalink_title = sprintf(
/* translators: 1 = Post Title, 2 = Author Name */
esc_html_x( \'%1$s by %2$s\', \'permalink title\', \'themeberger\' ),
__( \'A post\', \'themeberger\' ),
get_the_author_meta( \'display_name\', $this->post->post_author )
);
我不明白的是
__();
有效,但
esc_html_x();
没有。我希望有人能帮助我。
来自的相关部分。采购订单文件为:
#. translators: %1$s: Post Title. %2$s: Author Name.
#: themeberger/class-themeberger-post-functions.php:237
msgid "%1$s by %2$s"
msgstr "%1$s von %2$s"
#: themeberger/class-themeberger-post-functions.php:238
msgid "A post"
msgstr "Ein Beitrag"
输出为
<a href="[...]" title="Ein Beitrag by Christian Hockenberger">[...]</a>
我真的不明白。在另一行中_x( \'%s ago\', \'%s = human-readable time difference\', \'themeberger\' )
不工作。我首先认为,出于某种原因,翻译没有转移到课堂上,但是__();
作品
What can I do?
最合适的回答,由SO网友:Toffee 整理而成
您正在尝试使用上下文翻译字符串,但在po文件中,您的字符串未声明上下文
要在po文件中声明上下文,您需要使用msgctxt
msgctxt "permalink title"
msgid "%1$s by %2$s"
msgstr "%1$s von %2$s"
您可以找到有关如何格式化采购订单文件的更多文档
here (非常简单,只有5种不同的声明)
或者像这样从字符串中删除上下文
esc_html_x( \'%1$s by %2$s\', \'permalink title\', \'themeberger\' ); //With context
esc_html__( \'%1$s by %2$s\', \'themeberger\' ); //Without context
您可以找到有关如何使用wordpress国际化功能的信息
here文档非常不完整,因此我将添加可用函数的列表
__
基础翻译_n
用复数翻译字符串_x
使用上下文翻译字符串_nx
翻译带有上下文和复数的字符串所有此函数也有以下变体esc_html_
, esc_attr_
或_e
在他们面前这个_e
variant将简单地回显字符串而不是返回它(我不建议使用此选项,因为有时您会希望在字符串中使用sprintf,但如果您在sprintf中使用e,它将不起作用,而且很难捕获)
这个esc_html_
变量将转义要在html中显示的字符串(例如:>
成为>
) 您应该经常在模板中使用它,因为它通过防止XSS(某些翻译是公开的)来提高安全性
这个esc_attr_
变体为toALWAYS 在html属性中使用,因为它将转义引号和其他会破坏属性的引号
示例:
<a href="<?php esc_attr_e(\'https://domain.com/en/content/\', \'domain\') ?>"><?php esc_html_e(\'My link\', \'domain\') ?></a>
您还可以查看source code 查看所有声明的函数