PHP

Wordpress 语言包设置和翻译

多语言翻译设置

  1. 主题的functions.php添加多语言的初始代码
    1
    2
    3
    4
    
    function theme_languages_init(){   
        load_theme_textdomain('bluenight', get_template_directory() . '/languages');   
    }
    add_action ('init', 'theme_languages_init');
    

插件为:

1
2
3
4
5
6
add_action('plugins_loaded','MingPressAdmin::mingspress_textdomain');
class MingPressAdmin {
	static function mingspress_textdomain() {
		$result = load_plugin_textdomain( 'mingspress', false, dirname( plugin_basename( __FILE__ ) ) );
	}
}

将对应的语言包放在主题下,bluenight是主题名,也相当于翻译的命名空间


2. 在主题中使用_e__标记需要多语言翻译的内容,如:
1
2
3
4
// 普通的输出使用 _e() 函数   
<div class="post"><p><?php _e('Sorry, no posts matched your criteria.', 'bluenight'); ?></p></div>   
// 在函数中走参数或返回值输出使用 __() 函数   
echo the_tags('<h2>'.__('Related ','bluenight'), ' , ' , __(' Posts','bluenight').'</h2>').'<ul>';
  1. PoEdit 设置

下载地址:http://poedit.net/

安装后新建一个工程,

翻译的语言这里选择:简体中文/zh_CN

确认后再点击保存会提供保存的名称和位置,我们放在主题的language下,命名为zh_CN.po

如果可供其他人翻译的模板,则翻译语言一则选择英语,保存为主题名.pot

那么其他人翻译时可以用PoEdit中导入此模板进行翻译,wordpress官方主题就是这样的

保存后点击从源代码提取,填写翻译的属性,再保存一次

源路径填写为文件上一级目录:

源关键字:

__
_e
_n:1,2
_x:1,2c
_ex:1,2c

_n是单复数,如评论

<?php  
echo _n( 'There is a comment' , 'There are comments' , get_comments_number() );  
?>

_x和_ex是按上下文语义翻译,如:

名词:一篇文章

<?php _ex("Post","a post","mings");?>

动词:发布

<?php _ex("Post","To post","mings");?>

点击从源文件更新,此时PoEdit搜索到的翻译字符串为

确认后会自动导入翻译文本

修改wp-config.php的语言常量

define('WPLANG', 'zh_CN');      

参考文章:
http://www.wpdaxue.com/localize-wordpress-themes.html
http://www.wpdaxue.com/difference-between-__-_e-_x-_ex-and-_n.html
WordPress主题插件汉化教程 - 露兜博客

令插件支持语言包

function myplugin_init() {
  load_plugin_textdomain( 'wpdaxue', false , dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action('plugins_loaded', 'myplugin_init');

此时語言包命名方式为 wpdaxue-zh_CN.po,放在插件的languages目录下