我正在编写wordpress插件并计划它的drupal实现,我正在将wordpress函数封装到适配器中。因此,我为__()
编写了一个适配器,它非常简单
class Ai1ec_Wordpress_Template_Adapter implements Ai1ec_Template_Adapter {
...
public function translate( $text ) {
return __( $text, AI1EC_PLUGIN_NAME );
}
我不是gettext的大专家,一个大学给我写信说:
当xgettext解析代码以生成.pot文件时,将失败。WP i18n函数(如__() )要求将字符串文字作为第一个参数传递,而不是变量。对于Drupal的t()函数,IIRC也是如此。
我看过法典条目
Developers#Placeholders
http://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/t/7
却找不到与此相关的东西。soemone能解释我为什么这不能工作,我怎么能写一些可以与Wordpress和Drupal兼容的东西呢?
发布于 2012-10-04 12:13:54
一般来说,您的同事是正确的,如果您将变量传递给翻译函数,它们将不会被翻译,除非在其他地方传递相同的字符串作为直译。这是因为生成转换模板没有运行代码,它会搜索它的特定函数名。翻译方法有两个目的:一是翻译参数的翻译,二是识别翻译模板生成程序中应该包含哪些字符串的翻译模板文件。
您需要告诉转换模板生成代码(通常是xgettext)程序,函数的参数是可翻译的字符串。使用xgettext,这可以通过-k参数来完成。WordPress可能已经有自己的xgettext包装器,您可以使用它。
您显式链接的drupal文档表示,除非您确信文本作为文字传递到其他地方,否则不应该将变量传递给t()。
发布于 2012-10-03 09:55:01
Wordpress和Drupal版本都应该将字符串保存在变量中。Drupal版本的措辞有点令人困惑。Drupal文档的意思是,如果原始文本的源是用户生成的,那么您应该小心。
$foo = 'bar';
($foo == 'bar') == true;
https://stackoverflow.com/questions/12705764
复制相似问题