自从esc_html_e
将转义HTML链接(因此将HTML锚定显示为纯文本),您需要使用esc_html_e
或esc_html__
, 并打印HTML链接部分,而不进行HTML转义。
方法1(仅供您理解):
您可以分部分进行,如下所示:
esc_html_e( \'Dear Guest, with Your information we could not find any room at the moment.\', \'text-domain\' );
echo "<br><br>";
printf(
esc_html__( \'%1$s %2$s\', \'text-domain\' ),
esc_html__( \'Please contact us on our\', \'text-domain\' ),
sprintf(
\'<a href="%s">%s</a>\',
esc_url( \'http://www.example.com/contact-us/\' ),
esc_html__( \'Contact Page\', \'text-domain\' )
)
);
printf(
\' or <a href="%s">%s</a>\',
esc_url( \'mailto:[email protected]\', array( \'mailto\' ) ),
esc_html__( \'Email\', \'text-domain\' )
);
方法2(仅供您理解):显然,不同的语言会有不同的文本顺序,因此为了给翻译人员更多的灵活性(对文本进行转义和排序),您可以通过以下方式进行:
printf(
esc_html__( \'%1$s%2$s%3$s%4$s%5$s\', \'text-domain\' ),
esc_html__( \'Dear Guest, with Your information we could not find any room at the moment.\', \'text-domain\' ),
nl2br( esc_html__( "\\n\\n", \'text-domain\' ) ),
sprintf(
esc_html__( \'%1$s %2$s\', \'text-domain\' ),
esc_html__( \'Please contact us on our\', \'text-domain\' ),
sprintf(
\'<a href="%s">%s</a>\',
esc_url( \'http://www.example.com/contact-us/\' ),
esc_html__( \'Contact Page\', \'text-domain\' )
)
),
esc_html__( \' or \', \'text-domain\' ),
sprintf(
\'<a href="%s">%s</a>\',
esc_url( \'mailto:[email protected]\', array( \'mailto\' ) ),
esc_html__( \'Email\', \'text-domain\' )
)
);
这种方法将:
避开所有必要的翻译文本。
允许HTML用于链接、电子邮件(带有mailto:
语法)等。
允许译者对不同语言的文本进行各种不同的排序。这个argument swapping notation (%1$s
, %2$s
等),以便翻译人员可以在需要时对译文重新排序。
方法3(更新和推荐):如@shea rightly pointed out, Method-2 以上工作很好,但对于翻译人员来说,添加对不同语言的支持可能很困难。因此,我们需要一个解决方案:
保持句子完整(不断句)。
进行正确的转义。为联系人提供了不同的订购方式;翻译句子中的电子邮件链接(或任何类似链接)。因此,为了避免method-2, 下面的解决方案保持了可翻译句子的完整性,并进行了正确的URL转义&;同时交换参数(代码注释中有更多注释):
// sample contact url (may be from an unsafe place like user input)
$contact_url = \'http://www.example.com/contact-us/\';
// escaping $contact_url
$contact_url = esc_url( $contact_url );
// sample contact email (may be from an unsafe place like user input)
$contact_email = \'[email protected]\';
// escaping, sanitizing & hiding $contact_email.
// Yes, you may still need to sanitize & escape email while using antispambot() function
$contact_email = esc_url( sprintf( \'mailto:%s\', antispambot( sanitize_email( $contact_email ) ) ), array( \'mailto\' ) );
esc_html_e( \'Dear Guest, with Your information we could not find any room at the moment.\', \'text-domain\' );
echo "<br><br>";
printf(
esc_html__( \'Please contact us on our %1$s or per %2$s.\', \'text-domain\' ),
sprintf(
\'<a href="%s">%s</a>\',
$contact_url,
esc_html__( \'Contact Page\', \'text-domain\' )
),
sprintf(
\'<a href="%s">%s</a>\',
$contact_email,
esc_html__( \'Email\', \'text-domain\' )
)
);
这样做会给翻译人员两个完整的句子&;要翻译的两个单独的单词。因此,翻译人员只需担心以下简单的行(而代码会处理其余的行):esc_html_e( \'Dear Guest, with Your information we could not find any room at the moment.\', \'text-domain\' );
// ...
esc_html__( \'Please contact us on our %1$s or per %2$s\', \'text-domain\' )
// ...
esc_html__( \'Contact Page\', \'text-domain\' )
// ...
esc_html__( \'Email\', \'text-domain\' )
就是这样,结构简单,并进行适当的转义和参数交换。了解更多信息internationalization for themes &;internationalization for plugins.