echo __( 'Hello ' . $first . ' you owe me money.' );
echo __( '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>' )
是否可以添加字符串和/或HTML或应该先完成,然后再执行翻译,例如:
$html = '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>';
echo __( $html );
#1 楼
__()
函数中有第二个参数。应该将其设置为您用于插件或主题的域。在下面的示例中,我使用'text_domain'
。您的域字符串应该是唯一的。它不应与任何其他域字符串匹配。不使用文本域参数默认为WordPress域名'default'
。有关更多详细信息,请参见链接。始终使用字符串(
'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 );
%s
占位符告诉人工翻译,那里有一个字符串。使用%d
输入数字。还有其他占位符。(这句话在语法上是不正确的英语。根据您的意图使用
'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()
来解释这些术语的上下文。您可以找到其他翻译案例如下:国际化:您可能做错了
#2 楼
因为已经说过了,所以我不会解决字符串中变量的问题。您想使字符串保持静态,这意味着内容不会改变。您还希望避免不必要的HTML。可以将它们重写为:
__( '<p>Hello World!</p>' );
__( '<h1>Hello World!</h1>' );
将其减少为一行。
有时文本中的HTML是不可避免的。例如:
'<p>' . __( 'Hello World!' ) . '</p>'
'<h1>' . __( 'Hello World!' ) . '</h1>'
由于语言是语法的,所以拆分文本会对翻译的人造成问题。
经验法则。句子中间的HTML文本格式标签也可以。以HTML开头和结尾的句子只会浪费空间。
评论
在最后一个示例中,您可以将粗体标签包装在插入的 $ string ”参数周围。然后,您可以使用“您当前欠%s美元”。但是,如果将它与需要%d占位符的_n()函数一起使用,则可能需要保留它。
–查尔斯·克拉克森(Charles Clarkson)
2013年9月15日11:36
@CharlesClarkson好的电话。也许我应该省略%s使其更加清晰。
–二十
2013年9月15日上午11:52
评论
您说不要翻译HTML。我可能会指出,它没有被翻译,而是在现有的预翻译字符串表中查找。如果翻译者没有删除字符串,则在字符串中包含HTML不会有任何区别。实际上,在某些情况下,它比正则表达式搜索和替换具有更好的性能。
–二十
2013年9月15日在7:12
不相关,但值得注意的是:textdomain必须是文字字符串,不能是变量/常量/属性。
–brasofilo
2013年9月15日10:33
@brasofilo,该建议写在顶部附近的答案中,但需要重复。我在为客户编写的几个自定义插件中犯了这个错误。
–查尔斯·克拉克森(Charles Clarkson)
2013年9月15日上午11:27
sprintf()+1。这就是在可翻译字符串中包含HTML的方法。
–helgatheviking
2013年9月15日上午11:31
我看不到sprintf()的使用除了可能看起来更干净以外没有其他帮助。如果您的句子中带有HTML,例如某些文本中带有 strong 单词。如何将整个句子翻译成整体而不翻译,而某些文本中带有强,词的单词则单独翻译(没有意义)。
–phpheini
17-6-37在16:56