以前我已经成功翻译了很多字符串,但这一个让我头痛。此部分用于我的相关内容。我用来显示相关帖子的php文件
这是我正在使用的当前字符串
<?php echo \'Click <a href="\'. esc_url( get_permalink() ) . \'">here</a> to go and wacth the video.\' ?>
我在本地化过程中遇到的问题是
<a href="\'. esc_url( get_permalink() ) . \'">here</a>
在中间部分。
我能想到的最好的办法是
<?php printf(__(\'Click %s to go and wacth the video.\', \'pietergoosen\'), \'<a href="\'. esc_url( get_permalink() ) . \'">here</a>\'); ?>
好的,我知道我可以为
<a>
标记并使用
printf()
字符串而不是整个
<a>
tag,但这不是现在要考虑的问题,而这样做只是为了先测试结果。
当字符串的顺序发生变化时,字符串将进行翻译,但单词“here”在<a>
标签如何让字符串也能翻译单词“here”。我在某个地方读到过,可能是在法典中,把一个字符串分成几个字符串不是一个好主意,因为它可能会给某些语言带来问题,因为某些语言的语序不同。
还有什么解决这个问题的建议吗?
最合适的回答,由SO网友:Mark Kaplun 整理而成
可能的解决方案是将所有内容都翻译为一个sting。
<?php printf(__(\'Click <a href="%s">Here</a> to go and wacth the video.\', \'pietergoosen\'), esc_url( get_permalink() )); ?>
通常可以安全地假设翻译人员有足够的HTML知识来理解那里发生了什么。
SO网友:Emyr Thomas
虽然这并不能完全回答翻译包含HTML的字符串的问题,但请退一步,您可能会使事情变得更加困难。你为什么不把课文改写成简单的“看视频”。这样就不成问题了,因为您可以简单地将整个字符串包装在一个锚点中,使字符串不包含任何HTML,如下所示:
printf( \'<a href="%s">%s</a>\',
esc_url( get_permalink() ),
__( \'Watch the video\', \'pietergoosen\' )
);
如果链接的样式合适(这意味着它显然是可点击的),我认为你不需要告诉人们“点击这里”。
只是一个想法!
SO网友:kaiser
当您查看Codex中的i18n文档时,尤其是Disambiguation by Context 部分,然后您将发现_x()
和_ex()
(后者是echo
变量),它允许您向字符串添加上下文,或者换句话说:为翻译人员留下消息:
printf(
_x(
\'Click %shere%s to go and watch the video\',
\'%s represents the opening and closing HTML tags for an anchor or link\',
\'your_textdomain\'
),
\'<a href="\'.esc_url( get_permalink() ).\'" title="\'.get_the_title().\'">\',
\'</a>\'
);
所以首先要翻译字符串。之后
%s
串内的零件将被更换。这将帮助您克服这样的情况,即一种语言需要使用完全不同的单词量或句子中不同的位置来包装锚定标记。这也会帮助你避免分句。