蛋疼WP: 瞎折腾多语言插件Qtranslate

上次帮别人做WP站点时,对方要求双语言撰写的功能(而非机器翻译)。他的要求很多,不过我也学到了不少东西,在此共享。

Qtranslate的优点

刚开始试用的是 xlanguage ,用它撰写的多语言Blog实际上每个文章的不同语言版本都是一个独立的 Post,这样会带来一个问题:由于他们其实不是同一post,所以针对他们的评论也是相互独立的,这会让评论者迷惑。

试用了几个插件之后,觉得留德华人秦谦开发的 qTranslate 比较合适,它的思路比较好,用类似<!–:en–><!–:–>的语句将相应语言内容封装,再用php判断当前页面的语言状态,然后显示相应容器中的内容。这样,当阅读文章时,无论切换到哪个版本都可以看见这篇文章的所有评论,不会造成迷惑。而且他可以将标签、分类等后台可编辑的内容都多语言化。更酷的是,它可以实现后台的多语言化(用户需安装相应语言文件)。

qTranslate 的具体介绍有很多,我就不做重复介绍了。

不同语言下使用不同CSS控制字体

后来对方指出,在韩语下的字体太大,并且标题字体要使用某韩文字体(Win系统自带,估计类似于黑体在中文 Win 系统中的地位)。这确实是个难题,因为如果在韩文的 Post 里使用font标签定义字体大小,那对Blog作者将是件十分麻烦的事,而且 font 标签显然不能用于标题。这就意味着要对英文和韩文使用不同的 CSS,如你所知,同一文章的不同语言版本是在同一篇 post 里的,也就是说,css 是同时影响英文和韩文的。

如何实现?我想到了如下方法:

  1. 在韩文版本下,链接里会有“/ko/”,设想自动判断地址栏的这个文字,然后加载不同的CSS。
  2. 在韩文下,对post和标题部分使用不同于英文的 class 或 id,然后在CSS里定义这些特殊类的属性。

最终,我采用了第二种方法,因为我不知道如何实现第一种方法:-),而第二种方法,我在插件的技术文档里找到了这句

<?php if(qtrans_getLanguage()==’en’): ?>

<?php endif; ?>

把相应的内容放在这个php语句里,可用来在某语言下显示某特定内容,用于Wordpress里需要在php里修改源代码的网页内容。

最终示意图如下:

最后,实现了在不同语言下的不同字体样式:

具体效果参见这里 ,主题是他自选的,我只负责后期的改造,这其中也得到了 Z大的指导,感谢 Z大

25 Comments to This Post

Add a Comment
  1. 先沙发了~~

    回复

    danny:

    @小杰, 你的 Blog 真是办的不错

    回复

  2. 折腾无罪但这个用处不大,你还期望有国外要看你的博客呀,呵

    回复

    danny:

    @yesureadmin, 不是,这是帮国际友人做的博客,他要求的,没办法,呵呵

    回复

    泥_巴:

    @danny, “国际友人”,哈哈,笑死我了……我说,你这个文章凌晨4点多怎么发的??

    回复

    danny:

    @泥_巴, 不是国际友人么,哈哈。我时区设置错误了,明天改

    回复

  3. 又多了一个折腾帝,支持支持
    建议给回复加上ctrl+enter

    回复

    danny:

    @derek, 本来就是折腾帝啊。恩,好建议,这个功能马上加上去

    回复

  4. danny

    测试时区

    回复

  5. 膜拜折腾帝…

    回复

    danny:

    @mice, 爱卿平身

    回复

  6. 路过。。很少玩博客~

    回复

    danny:

    @快播电影, 汗,你玩的是网站

    回复

  7. 我那好像不许要翻译,国外的人很少

    回复

    danny:

    @zwwooooo, 我的也不需要的,其实这个折腾也不是为自己折腾

    回复

  8. 啊呀呀呀呀呀呀呀 Qtranslate的优点和不同语言下使用不同CSS控制字体背后的浅蓝色背景如何做到的? 啊呀呀呀呀呀 对于你的BLOG的风格我现在开始五体投地。。颜色搭配真好

    回复

    danny:

    @YesCola, 呵呵过奖,你可以用FF+firebug看下啊,我是对内容部分的 h2 定义了background 和 border:
    background:#EFF7FF none repeat scroll 0 0;
    border-left:2px solid #249DDD;

    回复

    YesCola:

    @danny, 感谢~~~~~~~ 正在研究

    回复

  9. 要是和globe translate一样可以选择自动翻译就好了

    回复

    armgod:

    @john, 这个插件的定位不同吧,毕竟自动翻译的不准确,严谨的网站——比如企业网站——是不会使用这种方法的。个人意见

    回复

    armgod:

    @john, 才发现你的网站,挺有意思的,另一个web OS

    回复

  10. 博主
    采用查询字符串模式 (?lang=en)
    采用路径前缀模式 (默认,在 URL 之前放置 /en/ )
    采用子域名模式 (http://en.yoursite.com)
    我想使用第三种模式,子域模式 (http://en.yoursite.com)请问具体如何设置,找了好久也没找到具体设置方法,特来求助!谢谢!

    回复

    Armgod:

    这个没试过,你试着把 http://www.yousite.com/en 在域名设置里定向到 en.yousite.com试试?

    回复

  11. 好东西,分享了哈

    回复

    armgod:

    @Jessy, 欢迎分享

    回复

添加评论

邮箱不会被公开, 标有 *的是必填项

*
*