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_post
或
sprintf
可能很有用。
_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用于硬编码的静态字符串,而不是数据库或生成的内容。