__()或_e()语言转换字符串中的HTML

时间:2013-09-15 作者:Jason

构建翻译字符串的正确方法是什么?

例如

echo __( \'Hello \' . $first . \' you owe me money.\' );
echo __( \'<div><p>Top: \' . $t_margin . \'</p>\' . \'<p>Bottom: \' . $b_margin . \'</p></div>\' )
是否可以添加字符串和/或HTML,还是应该先添加字符串和/或HTML,然后再进行如下转换:

$html = \'<div><p>Top: \' . $t_margin . \'</p>\' . \'<p>Bottom: \' . $b_margin . \'</p></div>\';
echo __( $html ); 

2 个回复
最合适的回答,由SO网友:Charles Clarkson 整理而成

__() 作用它应该设置为您用于插件或主题的域。在下面的示例中,我使用\'text_domain\'. 您的域字符串应该是唯一的。它不应与任何其他域字符串匹配。不使用文本域参数默认为\'default\' WordPress域名。有关更多详细信息,请参阅链接。

始终使用字符串(\'text_domain\'). 切勿将变量、函数或常量与字符串一起使用。大多数(全部?)如果没有字符串,翻译程序将无法看到它。

您的代码:

echo __( \'Hello \' . $first . \' you own me money.\' );
不要在字符串中包含变量。

更好的方法:

echo sprintf( __( \'Hello %s you own me money.\', \'text_domain\' ), $first );
或者只是:

printf( __( \'Hello %s you own me money.\', \'text_domain\' ), $first );
The%s 占位符告诉人工翻译器一个字符串将进入其中。使用%d 对于数字。还有other placeholders.

(这句英语语法错误。请使用\'Hello %s, you owe me money.\'\'Hello %s, you own my money.\' 取决于您的意图。)

您的代码:

$html = \'<div><p>Top: \' . $t_margin . \'</p>\' . <p>Bottom: \' . $b_margin . \'</p></div>\';
不要翻译HTML。这在任何语言中都是一样的。

更好的方法:

$html = sprintf( \'<div><p>%s</p><p>%s</p></div>\', __( \'Top: \', \'text_domain\' ) .  $t_margin, __( \'Bottom: \', \'text_domain\' ) . $b_margin );
或者将其拆分为多行:

$html = sprintf(
    \'<div><p>%s</p><p>%s</p></div>\',
    __( \'Top: \', \'text_domain\' ) .  $t_margin,
    __( \'Bottom: \', \'text_domain\' ) . $b_margin
);
如果不清楚顶部和底部是什么,可以使用_x() 解释这些术语的上下文。

您可以在此处找到其他翻译案例:Internationalization: You’re probably doing it wrong

SO网友:Twifty

我不会讨论字符串中的变量问题,因为已经说过了。

您希望保持字符串静态,这意味着内容不会更改。您还希望保留不必要的HTML。

__( \'<p>Hello World!</p>\' );
__( \'<h1>Hello World!</h1>\' );
对于本质上相同的文本,上述内容将占据表中的两行。它们可以重写为:

\'<p>\' . __( \'Hello World!\' ) . \'</p>\'
\'<h1>\' . __( \'Hello World!\' ) . \'</h1>\'
将其减少到一行。

有时文本中的HTML是不可避免的。例如:

__( \'You currently owe <b>%s</b> dollars\' );
由于语言是语法性的,因此拆分文本会给翻译人员带来问题。

经验法则。HTML文本格式设置标记句中可以。以HTML开头和结尾的句子只是浪费空间。

结束

相关推荐

Translation for plugin

我修改了a。po文件,基本上是我以txt文件的形式打开并进行了更改,但是我上传了它,并且更改不起作用。我想知道我是否需要一个特殊的软件来做和生成一个新的。mo每次我做出改变,或者我错过了什么?提前感谢