某些翻译在我的模板类中不起作用

时间:2020-03-07 作者:chrisbergr

我正在努力翻译我的主题。我使用函数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?

2 个回复
最合适的回答,由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中显示的字符串(例如:> 成为&gt;) 您应该经常在模板中使用它,因为它通过防止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 查看所有声明的函数

SO网友:chrisbergr

好吧,我似乎被翻译字符串的函数数量弄得不知所措。名称中带有“x”的函数需要gettext上下文。我的琴弦没有这个,所以它不起作用。

esc_html_x(); replaced with esc_html__(); and _x(); replaced with __(); is the simple solution.

对我来说很尴尬,希望对其他人有所帮助。

相关推荐

Disabling Translation Update

WordPress更新Languages文件夹中的翻译文件有两种方式:1。触发时自动更新。2、当用户在“更新”页面上请求时手动执行。有没有办法禁用这两个文件夹,这样就不能对Languages文件夹应用任何更改?