这是一个多方面的问题。它将固有的HTML内容问题与全新的翻译挑战相结合,例如字符串扫描、翻译过程本身及其验证。
因此,我们必须结合:
文本(可翻译形式)
HTML标记(难以打破,但最好是灵活的形式)URL目标(安全且最好是可翻译形式,可能特定于语言!)我们还需要考虑熟悉度和现有技术,换句话说,core会做什么。好吧,从quick check(快速检查)来看,核心以大多数(如果不是全部的话)方式来实现这一点是没有帮助的。
从这些因素和surrounding discussion 我想说,根据需要和优先事项,有三种方法。
简单-包含所有内容的一个字符串
__( \'Please read <a href="https://goo.gl">this</a>\', \'example-domain\' );
代码易于理解,允许将所有部分(文本、标记、URL)作为一个整体进行翻译,URL硬编码,容易出现HTML中断
sprintf(
__( \'Please read <a href="%s">this</a>\', \'example-domain\' ),
esc_url( \'https://goo.gl\' )
);
易于理解的URL可以翻译所有部分,但URL需要单独的翻译调用。URL可以是动态的,并且可以转义,易于HTML中断
sprintf(
__( \'Please read %1$sthis%2$s.\', \'example-domain\' ),
\'<a href="\' . esc_url( \'https://goo.gl\' ) . \'">\',
\'</a>\'
);
或通过串联
\'<a href="\' . esc_url( \'https://goo.gl\' ) . \'">\'
. __( \'Please read this.\', \'example-domain\' );
. \'</a>\';
可读性较差,更能适应HTML中断,核心不太流行,需要为翻译提供更多的上下文(据我所知)
simple 使其尽可能简单
piecemeal 防止HTML中断
balanced 对于所有其他情况(可能是最常见的)