1. PolyLang插件
该插件主要实现,切换站点多语言环境:
WordPress后台配置多语言,如下,配置前端显示多语言文案显示:
<img style="width:300px" src="https://tva1.sinaimg.cn/large/006y8mN6ly1g87xrqm3wvj31c00nrn10.jpg" >调用menu,编辑menu,添加多语言切换按钮。
I18n for WordPress Developers
2. 本地多语言配置
语言包开发:
- 在当前主题文件夹下 新建languages文件夹,
- 下载poedit软件,用软件新建语言包
- 安装完poedit软件之后,
-
文件->新建,表示将英文翻译成中文
新建完成之后,需要将文件保存到本地主题所在languages文件夹下,名为zh_CN,此时languages文件夹下就会多出4个文件,mo,po后缀的;
-
点击从源代码中提取
- 翻译属性:
- 路径:点击+号,选择languages上级目录,即当前主题文件夹,添加成功显示为.
- 源关键字:添加"e","_"方法
- 点击右下角确定之后,保存
如下,可自动搜索文章中使用"e","_"方法添加的多语言,在下方"翻译"中,将对应的英文文案,翻译成中文文案,保存,刷新页面,就可以实现多语言切换。
-
代码使用:
functions.php中添加代码如下:
add_action( 'after_setup_theme', 'my_setup_theme' );
function my_setup_theme(){
load_theme_textdomain( 'academy', get_template_directory() . '/languages' );
}
代码中使用如下:
<? echo __('Search for:','academy'); ?>
<p><? _e('category','academy'); ?>
就会将对应的文案显示在界面上,同时根据多语言切换,当前环境会自动切换中英文显示。
tips:
Gettext的简介:</br>
WordPress使用的是gettext库和i18n工具。需要注意的是,如果你看看网上,你会看到()函数,它是指原生的PHP的gettext标准翻译功能,但对于WordPress ,你应该使用WordPress定义的函数来替代PHP的()函数.
所谓的小工具(widget)就是一个在被调用时会输出字符到标准输出的 PHP 函数。把 PHP 函数变成小工具,则需要注册。调用 WordPress 小工具接口所注册的 PHP 回调函数(PHP 文档中称之为伪类型)即可注册您的函数。
参考文章
首先将所有需要国际化的文字修改为英文,然后作为参数传给__()函数,例如
您必须启用 javascript 才能在这儿看到验证码!
修改为
注意,_()函数要有两个参数,第一个参数是英文版的内容,第二个参数是你自己定义的一个名字,不一定要是插件名,但是不可以有下划线。
然后增加一个函数
function captcha_init() { plugin_dir.'/language' ); }
其中load_plugin_textdomain的参数有三个,第一个是刚刚你定义的那个名字,不可以有下划线,第二个统一用false,第三个是放置po和mo文件的目录。
最后添加一个action hook
add_action( 'init' , 'captcha_init');
保存即可。
下面介绍如何生成po和mo文件。
首先访问http://sourceforge.net/projects/poedit/下载poedit。
运行poedit,点击菜单的“文件”→“新建消息目录文档”
填好前四个框即可,注意千万不要填“国家”这个里面的内容。
然后切换到“路径”选项卡,基本路径那边填入的你插件文件所在文件夹,然后在那些小图标里找到“新项”,点击之后填入“.”即可(就是一个点)。
再切换到“关键字”选项卡,还是点击“新项”,填入“__”(两个下划线)。
点确定。
如果你的配置正确,poedit就会自动扫描你的php文件,寻找所有需要国际化的字符串。
然后你就可以双击那些字符串进行翻译了(当然是你自己翻译了- -!)
所有字符串翻译完毕之后,保存的名字用fancy-captcha-zh_CN,其中zh_CN为你翻译的目标语言,zh_CN前面是你之前定义的名字,这就是为什么不可以有下划线的原因。
之后会自动生成fancy-captcha-zh_CN.mo和fancy-captcha-zh_CN.po两个文件,把这两个文件移动到language文件夹下,大功告成!
// 获取当前中英文环境
function getCookie(c_name){
console.log('调用getCookie');
if (document.cookie.length>0){
var c_start = document.cookie.indexOf(c_name + "=");
if (c_start!=-1){
c_start=c_start + c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
if (c_end==-1) c_end=document.cookie.length;
var lang = unescape(document.cookie.substring(c_start,c_end));
return lang;
}
}
return "";//不存在
}