用__()和sprintf()翻译WP

D. *_* A. 3 wordpress gettext internationalization translate

我正在尝试翻译WP主题。我有以下代码:

$translation = __( get_color(), 'textdomain' );
Run Code Online (Sandbox Code Playgroud)

它可以正常工作,我可以从get_color()函数动态获取颜色,并且转换效果很好。但是,当我使用“主题检查”插件时,此代码出现错误。

我需要改用这个:

$translation = sprintf( __( '%s', 'textdomain' ), get_color() );
Run Code Online (Sandbox Code Playgroud)

但是在那种情况下,我的占位符%s不翻译,并且我得到了原始颜色名称(未翻译)。

我做错了什么?谢谢。

Luc*_*nte 10

我很惊讶没有人提到“翻译者”注释,它告诉翻译者其中的每个变量是什么sprintf。例子:

sprintf(
    /* translators: %s: Name of a city */
    esc_html__( 'Your city is %s.', 'my-plugin' ),
    esc_html( $city )
);

sprintf(
     /* translators: 1: Name of a city 2: ZIP code */
    esc_html__( 'Your city is %1$s, and your zip code is %2$s.', 'my-plugin' ),
    esc_html( $city ),
    esc_html( $zipcode )
);
Run Code Online (Sandbox Code Playgroud)

esc_html__我们使用来自社区翻译的字符串来逃避翻译,以防止 XSS,并且我们使用esc_html变量中的 XSS 保护来逃避动态输出$city

请参阅:https ://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/#variables


Mah*_*our 5

echo sprintf(__("text %s", 'your__text_domain'), $data);
Run Code Online (Sandbox Code Playgroud)

  • `echo sprintf` 没有意义;) 使用 `printf` (2认同)

Lil*_*mer 3

A。,

在你的代码中:

$translation = sprintf( __( '%s', 'textdomain' ), get_color() );
Run Code Online (Sandbox Code Playgroud)

__()函数检查字符串“%s”的翻译(您可能没有翻译该字符串),然后将“%s”替换为 的结果get_color()。所以 的值get_color()永远不会通过转换函数。

我不确定这里正确的解决方案是什么,也许在这种情况下忘记主题检查。