有没有更好的方法可以在Wordpress插件和主题中包含要本地化的标签?我当前的设置涉及调用以下方法来获取标签:
public function plug_get_labels(){
$labels = array(
\'details\' => __( \'Details\', \'plug\' ),
\'specs\' => __( \'Specifications\', \'plug\' ),
);
return $labels;
}
但对于小部件,例如,我觉得调用
plug_get_labels
方法仅提供真正属于小部件的标签:
public function __construct() {
parent::__construct(
\'plug_widget\', __(\'Plug Widget\', \'plug\'),
array( \'description\' => __( \'A widget for displaying something\', \'plug\' ) )
);
}
所以我要做的就是使用
plug_get_labels
方法为与AJAX相关的内容提供标签,以便仅在需要动态加载标签时使用它。
但我的问题是,我的团队中有一位资深人士说,代码和标签应该彼此分离。我必须从其他地方加载标签,以便将其与代码分离。
所以我想到的解决方案是将所有标签放在一个JSON文件中,然后放在plug_get_labels
方法从该文件中读取,将其转换为数组,然后循环遍历该文件以为每个标签提供文本域:
public function plug_get_labels(){
$file = file_get_contents(WP_CONTENT_DIR . \'/plug-labels.json\');
$labels = json_decode($file, true);
$new_labels = array();
foreach($labels as $key => $label){
$new_labels[$key] = __($label, \'plug\');
}
return $new_labels;
}
我只能想象,在这种情况下,高级开发人员还希望从文件中读取插件与之集成的每个小部件和主题上的标签,以便标签与代码分离。
这是个好主意吗?似乎其他Wordpress插件也直接将标签嵌入到它们的小部件和代码中。如果我实现了这一点,会影响性能吗?你能推荐我的其他选项吗?这样我就可以把代码和标签分开了?提前感谢!
最合适的回答,由SO网友:Mark Kaplun 整理而成
不需要将代码与可翻译标签分开。你的plug_get_labels
功能存在以下问题
翻译工具可以向您显示标签使用的上下文,这有助于更快地进行良好的翻译。由于你的功能,你失去了上下文。
这种函数的使用鼓励您在每次运行代码时调用它,而不仅仅是在需要翻译时。这可能会导致负面性能,因为加载翻译文件并对其进行解析的速度相对较慢,并且会使用额外的内存(仅当需要翻译时才加载翻译文件)。当然,如果翻译的字符串数量很小,则不会产生很大影响。
你的json解决方案真的很糟糕。您将无法使用poedit之类的工具进行翻译,因为使用这些工具需要第一个参数__
将是文本字符串,而不是变量。