WordPress插件-多语种切换插件qTranslate使用心得

qTranslate是一款能让你的网站支持多语种切换的轻便插件,可以到qTranslate的作者官网下载这个插件。我已经在自己做的十多个WordPress网站上使用这款插件,是时候总结一下基本的用法和小技巧了。


1. qTranslate版本问题

这款插件在安装后,如果你的WP版本比插件对应版本新,那么每次编辑文章和页面的时候插件会自动禁用自己,要点一下重新使用(其实很多插件都这样),比较麻烦。解决办法是去官网的下载页面先看一下你使用的WP是否能对应上当前安装的插件版本,如果插件过旧就下载最新的插件。但如果最新版的插件还不支持当前版本的WP,你可以自己手动修改WP的版本号。(这个办法适用于不准备频繁升级自己的WordPress版本的人,升级也是种折腾,如果你的站点用了很多插件,升级WP的版本本身就可能会导致各种问题。)
修改WP版本号,只要打开\wp-includes\version.php,修改$wp_version的值就行了。
另外,现在WordPress版本更新很快,而qTranslate作者更新插件的速度似乎有点跟不上了,因此他特意提供了一个开发版的下载,以免大家总是抱怨这款插件会在WP更新后自动禁用。你可以去作者网站下载qTranslate的开发版本。
qTranslate开发版下载

2014年10月14日更新:
qTranslate作者已经停止开发这个插件好几个月了。在WordPress已经升级到4.0的时候,qTranslate仍然会自动禁用自己,而且没有更新的版本可以直接使用。经我测试目前最新的qTranslate版本,也就是官网上的那个开发版,在WordPress4.0是可以正常使用的。用记事本打开qtranslate.php,找到第90行,把后面的版本号改成4.0,即:

1
define('QT_SUPPORTED_WP_VERSION', '4.0');

这样它就不会自动禁用自己了。今后的新版WordPress是否还能完美支持谁也没法保证,总之还是不要随便升级吧!


2. 基本语法

在页面模板上可以简单的通过

1
<?php _e("<!--:en-->English<!--:--><!--:zh-->中文<!--:-->") ?>

这样的语法显示对应的内容,这个办法不太环保,但在在有些地方就很有用,比如在需要根据语种判断调用CSS哪个的时候:

1
<link rel='stylesheet' href='css/<?php _e("<!--:en-->en<!--:--><!--:zh-->zh<!--:-->") ?>.css' type='text/css' media='screen'>

再比如这样,直接在body上加CSS类,对布局产生干预:

1
<body class="lan_<?php _e("<!--:en-->en<!--:--><!--:zh-->zh<!--:-->") ?>">

更简单的,可以这样,直接调用qtrans_getLanguage函数得到语言值:

1
<body class="lan_<?php echo qtrans_getLanguage() ?>">

3. 语言切换栏的重写

用qtrans_generateLanguageSelectCode函数调出的选择器大致是这样的:
WordPress插件-多语种切换插件qTranslate使用心得
如果网站有很多语种,这一行就会太长,我要把它改成一个下拉菜单
先建一个空的Select的元素在需要的位置

1
<select></select>

然后添加JS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function JumpMenu(targ,selObj,restore){ //菜单跳转功能
	eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
 	if (restore) selObj.selectedIndex=0;
}
(function(){
	var lanChooser=document.getElementById("qtranslate-chooser");
	lanChooser.style.display="none"; //隐藏原来的ul形式选择器
	for(i=0;i&lt; lanChooser.children.length;i++){
		var option=document.createElement('option');
		option.value=lanChooser.children[i].children[0].href;
		option.innerHTML=lanChooser.children[i].children[0].children[0].innerHTML;
		option.className=lanChooser.children[i].children[0].className;
 
		if(lanChooser.children[i].className=="active"){option.selected="selected"}
		document.getElementById("jumpMenu").appendChild(option);
	}
}());

4. 日期乱码问题

安装了qTranslate之后,你会发现文章发布的时间在页面上会显示成类似这样的乱码: %x %A, 英文的则变成: %A %B %e%q, %Y,这是qTranslate预设的日期时间格式错误所导致的。
点击后台的“设置(Settings)”-“语言(Languages)”找到中文,点击后面的“编辑”,将“日期格式”和“时间格式”里面预设的信息删除,保持为空,然后保存,Wordpress就会调用系统默认的日期时间格式。
再设置English,将“Date Format”改为“F j, Y”,“Time Format”改为“H:i”,保存设置,这样英文的日期显示也就修正了。
在qTranslate中修复日期显示乱码问题


5. 与表单插件Gravity Forms的兼容

qTranslate虽然好用,但对WP的其他插件的支持度很低,比如我最常用的另一款插件是Gravity Forms,用qTranslate就没办法多语化它生成的表单。不过有人写了个第四方插件解决了这个问题,这个插件名称是“qTranslate support for GravityForms”,可以在这里下载到:https://github.com/mweimerskirch/wordpress-qtranslate-support-for-gravityforms

本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/203.html。百度不可信,搜索请谨慎。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以获取本文的最新版本。

关注我们的微信公众号-JennyStudio 本站记录了近几年的工作中遇到的一些技术问题和解决过程,“作品集”还收录了本人的大部分作品展示。除了本博客外,我们的工作室网站 – JennyStudio,内有更多作品回顾和展示。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。

4 关于 “WordPress插件-多语种切换插件qTranslate使用心得” 的评论

  1. Brain 文章作者

    qt已经很久不更新了,现在有一些替代插件比如qt-x,可能调用语言栏的命令有所改变。本文所述问题应该也有很多过时的东西,建议不要参考本文了。我自己已经全部改用WPML,不再使用qt系列插件。

    回复
    1. tom

      后台为什么新增字段不翻译呢,数据存储格式是ces测试 但是后台列表显示却是ces测试,中英文切换不翻译,是怎么回事呢,求解

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注