准备数组中的字符串以进行本地化

时间:2011-07-02 作者:tollmanz

我正在开发WordPress插件,希望确保显示的所有文本都已准备好进行本地化。我在定位数组中的文本时遇到问题。

例如,我在一个类中有以下代码

var $control_type_default = array(
    array(
        \'key\' => \'automatic\',
        \'value\' => \'Automatic\'
    )
);

var $control_types = array(
    array(
        \'key\' => \'manual\',
        \'value\' => \'Manual\'
    )
);

function process_class_vars()
{
    // Add default control type value to beginning of control types array
    $this->control_types = array_merge($this->control_type_default, $this->control_types);

    // Prepare values for localization
    $temp_array = array();
    foreach ($this->control_types as $control_type_array => $values) 
    {
        $temp_array[] = array(
            \'key\' => $values[\'key\'],
            \'value\' => __($values[\'value\'], \'my_plugin\')
        );
    }
    $this->control_type = $temp_array;
}
请注意,“process\\u class\\u vars”函数是由构造函数调用的。如您所见,我试图通过__() 函数(作为补充说明,我使用函数“process\\u class\\u vars”来执行此操作,而不是在最初创建数组时执行此操作,因为在最初创建数组时传递该函数会引发错误)。

问题是,当我通过一个。po生成器,“自动”和“手动”字符串完全缺失。如何正确处理这些值?

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

您不能这样做,至少不能从GUI翻译助手应用程序中这样做,因为这些应用程序设置为从标准函数中提取字符串,如__(), _e 等等,他们不能读取变量(包括字符串变量)

相反,试着:

var $control_types = array(
    array(
        \'key\' => \'manual\',
        \'value\' => __(\'Manual\', \'yourtextdomain\')
    )
);
但如果$control_types 是类中的静态变量,则无法将函数的返回值指定为其值。为什么不在process\\u class\\u vars()方法中使其成为普通变量?或者只是让它成为一个函数:

public static function control_types(){
 return
    array(
        \'manual\' => __(\'Manual\', \'yourtextdomain\'),
        ...
    )
);

...
foreach ($this->control_types() as $control_type => $label) 
{
    // I\'m pretty sure you don\'t need \'key\' / and \'value\' as key name here either...
    $temp_array[] = array(
        \'key\' => $control_type,
        \'value\' => $label,
    );
}

结束

相关推荐

Plugin Localization

我刚刚为wp构建了我的第一个插件,即使它不是一个伟大的“代码诗意”;)它正常工作。这是一个使用GalleryView 3.0 jquery插件转换默认wp库的插件(http://spaceforaname.com/galleryview).我唯一不能做的就是本地化。此插件的本地化意味着转换管理界面,在这里可以配置jquery插件选项来更改结果库的外观。我试着关注网络上数百万的教程,在论坛上阅读了很多关于这个问题的帖子,并遵循了codex的指南。。。但仍然没有运气。这就是我所做的:每个文本行都位于gette