【问题标题】:Translating WP with __() and sprintf()用 __() 和 sprintf() 翻译 WP
【发布时间】:2016-08-25 16:34:14
【问题描述】:

我正在尝试翻译 WP 主题。我有这个代码:

$translation = __( get_color(), 'textdomain' );

它有效,我从 get_color() 函数动态获取颜色,并且翻译得很好。但是当我使用“主题检查”插件时,我收到此代码的错误。

我需要改用这个:

$translation = sprintf( __( '%s', 'textdomain' ), get_color() );

但在这种情况下,我的占位符 %s 没有翻译,我得到原始颜色名称(未翻译)。

我做错了什么?谢谢。

【问题讨论】:

  • 找到原因了吗?
  • 如果你问我,在这种情况下忽略主题检查插件,并对工作和良好的解决方案感到满意。

标签: php wordpress internationalization gettext translate


【解决方案1】:
echo sprintf(__("text %s", 'your__text_domain'), $data);

【讨论】:

  • sprintf() 是一个 PHP 函数:php.net/manual/en/function.sprintf.php
  • OP 的问题中已经说明了这一点。为什么你认为你已经回答了这个问题?!
  • echo sprintf 没有意义 ;) 使用 printf
【解决方案2】:

A.,

在您的代码中:

$translation = sprintf( __( '%s', 'textdomain' ), get_color() );

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

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

【讨论】:

    【解决方案3】:

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

    sprintf(
        /* translators: %s: Name of a city */
        __( 'Your city is %s.', 'my-plugin' ),
        $city
    );
    
    sprintf(
         /* translators: 1: Name of a city 2: ZIP code */
        __( 'Your city is %1$s, and your zip code is %2$s.', 'my-plugin' ),
        $city,
        $zipcode
    );
    

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

    【讨论】:

      【解决方案4】:

      许多提取可翻译字符串的翻译工具会查找字符串literals,如下所示:

      $translation = __( 'red', 'textdomain' );
      

      可以肯定* Theme Check 插件会提醒您注意,此类工具不会提取您的 dynamic 字符串。这是因为在提取过程中不会执行代码,因此表达式get_color() 不会被计算为可翻译的字符串。

      如果您不关心与字符串提取工具的兼容性,那么只需按照您的第一个示例保留您的代码(第二个示例是错误的,正如已经指出的那样)。

      如果您确实希望您的代码使用翻译工具,那么我建议您创建一个包含所有可能颜色值的 dummy PHP 文件。 (假设列表是有限的)。您的文件将如下所示:

      <?php
      __('red', 'textdomain' );
      __('blue', 'textdomain' );
      // and so on..
      

      然后,如果您想阻止实际的翻译调用产生“主题检查”错误,则必须将其重构为不会被拾取的内容。大多数提取器都会错过这样的事情:

      $translation = call_user_func( '__', get_color(), 'textdomain' );
      

      * 值得注意的是,Theme Check 的作者是 WordPress 的核心贡献者,并且对 doing WordPress i18n correctly 直言不讳。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        • 1970-01-01
        • 2019-05-20
        • 2019-11-26
        • 1970-01-01
        • 2013-09-16
        相关资源
        最近更新 更多