本地化带有html标记并在该标记内包含单词的字符串

时间:2014-02-25 作者:Pieter Goosen

以前我已经成功翻译了很多字符串,但这一个让我头痛。此部分用于我的相关内容。我用来显示相关帖子的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”。我在某个地方读到过,可能是在法典中,把一个字符串分成几个字符串不是一个好主意,因为它可能会给某些语言带来问题,因为某些语言的语序不同。

还有什么解决这个问题的建议吗?

4 个回复
最合适的回答,由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网友:levi

另一个选项是将标记拆分为两个字符串:

printf(__(\'Click %shere%s to go and wacth the video.\', \'pietergoosen\'), \'<a href="\'. esc_url( get_permalink() ) . \'">\', \'</a>\');

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 串内的零件将被更换。这将帮助您克服这样的情况,即一种语言需要使用完全不同的单词量或句子中不同的位置来包装锚定标记。这也会帮助你避免分句。

结束

相关推荐

Html-to-WordPress:下拉导航菜单

所以我一直在四处寻找希望有人也有这个问题。。但我找不到。我目前已经用硬编码的HTML模板为某人创建了Wordpress模板。现在问题来了。。。他已经在CSS中编写了下拉函数,所以我的工作是将其移植到Wordpress,但效果似乎不太好。应该是这样的(请注意,有三行,因为菜单本身有三个类别):这是来自硬编码模板的HTML;<li class=\"green\"> <a href=\"#\">Evenementen</a> <ul cl