使用_e()或__()翻译带有div的文本

时间:2020-09-28 作者:Dev

这是翻译一段文字的正确方法吗?

_e( \'<h2 class="title">\' . $var . \'</h2>\', \'text-domain\' );
或者,这是吗?

echo \'<h2 class="title">\';
_e( $var, \'text-domain\' );
echo \'</h2>\';
还是这个?

printf( __( \'<h2 class="title">%s</h2>\', \'text-domain\' ), $var );
Edit: 更新还是此?

printf( \'<h2 class="title">%s</h2>\', esc_html__( $var, \'text-domain\' )  );

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

None of them are correct. 这些API不适用于数据库中的动态数据或内容。

这将是最佳实践答案:

echo \'<h2 class="title">\';
esc_html_e( \'static string\', \'text-domain\' );
echo \'</h2>\';
如果要翻译帖子和其他数据库用户输入的内容,请使用翻译插件,而不是本地化API。

但为什么呢

You should never use variables as the first parameter of a localisation API call.

除了极为糟糕的做法外,这意味着字符串不会被工具拾取,因此不可能为翻译人员生成翻译文件。

不管你怎么通过$var 对于函数,它总是不正确的。不要将变量传递给WordPress中的本地化函数。These functions are intended for static strings, not dynamic values.

如果要本地化数据库中的内容,则此API不是实现此目的的方法。

HTML标记

本地化字符串不应包括H2标记和其他HTML标记,而是提供这些标记中的文本内容。很少有这样的情况,在这种情况下__()wp_kses_postsprintf 可能很有用。

_e() vs公司__()

_e() 相当于echo __()

为什么是_e__ 错了吗

因为逃逸也是如此。

这是典型的正确答案:

echo \'<h2 class="title">\';
esc_html_e( \'static string\', \'text-domain\' );
echo \'</h2>\';
esc_html_e( 是的缩写echo esc_html( __(. 我们知道H2标记中会有文本,但没有标记,因此我们使用esc_html 转义出现的任何HTML

如果这是标记的属性,那么它将是attribute="<?php esc_attr_e(...); ?>"

那么,为什么__( etc是否存在?因为逃跑必须尽可能晚,而且只有一次。否则,我们将面临双重转义字符串的风险。

修复printf 示例

我们可以在将本地化字符串传递给之前对其进行转义printf 允许转义:

printf( \'<h2 class="title">%s</h2>\', esc_html__( \'static string\',\'text-domain\' )  );

那么如何翻译动态内容呢

如果你想启用多种语言的帖子/术语/标题等,你需要一个翻译插件。i18n API用于硬编码的静态字符串,而不是数据库或生成的内容。

SO网友:DaFois

这两种功能都用于wordpress主题的本地化_e() 回声,但__() 返回正确本地化的文本。

_e() function

_e( \'text\', \'domain\' )
以上是_e 作用text 表示文本和domain 主题的文本域是否通过加载load_theme_text_domain 作用

load_theme_textdomain( \'domain\', $path )
Domain表示域名,例如主题的名称,路径是languages目录的路径(用于本地化的pot文件所在的目录)。的每个实例_e 使用加载的文本域进行翻译。

__() function

$localised_string = __( \'text\', \'domain\' );
这里是$localised_string 变量保存文本的本地化值__()函数返回本地化的值,而不是回显它(而__e() 函数执行)。

相关推荐

Theme Translation?

我下载了一个主题名为Contango 来自Wordpress主题库。该主题有一个名为“languagues”的文件夹和一个名为“contango.po”的文件。我可以打开那个文件进行翻译,但什么也没变。我怎样才能把这个主题翻译成我自己的语言</非常感谢并为我的新手问题道歉?