本地化来自插件外部的字符串?

时间:2011-02-28 作者:Rarst

插件查询远程API,并在某些情况下(主要是错误)显示来自API响应的文本消息。API响应中的所有消息都是英文的,但由于它们或多或少都集成在插件中,所以将它们本地化并以不同的语言显示以匹配插件的界面是有意义的。

理论问题-这些消息是否应该本地化,还是超出了本地化范围?

编码问题-您如何本地化这些工具并保持与相关工具的兼容性?有点像__( $message ); 甚至有意义?

过去我用过Codestyling Localization 它依赖于扫描插件的源来提取字符串。。。但并没有什么可以提取的,因为字符串并没有包含在插件的主体中。

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

这些消息是否应该进行本地化,还是超出了本地化范围?

是的,它们应该本地化。。。但不要依赖于API返回的文本。

有点像__( $message ); 甚至有意义?

不是真的。首先,您没有为本地化中使用的字符串提供文本域。应该是真的__( $message, \'my-text-domain\' );. 即使如此,如果没有$message, 本地化是一个没有实际意义的问题。

你能做些什么

The Robustness Principle 无论何时从外部API集成内容,都要记住这一点。你永远不能完全相信API给你的。。。原始所有者可能会在不通知您的情况下改变情况,或者他们的系统可能会中断并提供错误信息。因此,您应该始终:

在发送内容上要保守;在你接受的事情上要自由。

如果您已经知道API将返回什么内容(即字符串的静态列表),请将其放入插件中。然后使用卫生方法将API返回的内容映射到本地化字符串。

例如:

$map = array( 
    \'This is one return\' => __( \'This is one return\', \'my-text-domain\' ),
    \'This is another\' => __( \'This is another\', \'my-text-domain\' )
);

sanitize_api_feedback( $api_sent ) {
    return $map[$api_sent];
}
这样,您就不会实际使用外部API的原始输出,而是始终通过自己的过滤器运行它。您可以完全控制所使用的文本字符串,也可以通过标准本地化过滤器运行它们。

如果API返回是自由格式的,如果您没有API返回的静态字符串列表,这将不起作用。然后,如果API返回自由格式的内容,您应该:

本地化取决于API本身(如果可能的话)

  • 为最终用户提供其他翻译服务。。。大概Google Translate
  • 您的插件不可能负责即时翻译自由格式字符串。但是一个简单的错误消息静态列表?这绝对是你可以而且应该做的事情。

    SO网友:wyrfel

    我认为使用__( $message ) 完全没问题。我还认为,人们会期望API消息相对恒定。我认为最好的方法是使用一个表示API本身的域,而不是插件,这样翻译就可以被其他访问相同API的人重用:__( $message, \'wonder-api\' ).

    然而,我首先要研究API本身是否支持本地化。如果是这样,则应使用API的本地化协议。

    不过,理想情况下,您应该尝试从API中获取“响应代码”,而不是响应消息,这样您就可以根据响应代码映射自己的消息。大多数API确实会在消息旁边提供响应代码。

    结束

    相关推荐

    L10n.js在WordPress 3.1中做什么?那我怎么移除它呢?

    我刚刚在测试服务器上安装了WP 3.1 Beta 2。我注意到它带有一个新的l10n.js 自动插入到标头中的文件。我做了一些挖掘,这与本地化有关。我猜很多人不使用这个,所以我想知道如何删除它?如果重要的是不要删除它,请让我也知道。