如何对WordPress主题实现多语言化支持之简单教程

如果你是一个WordPress主题制作爱好者,当然会希望自己制件的主题能更受欢迎,一个很重要的方法是让你制作的主题能够实现对中文之外更多语言的支持。而这一篇文章是说一下怎样让WordPress的主题实现语言的本地化。

(接下来的例子我以主题Js O4w作例)

首先你需要在主题文件中添加本地化支持语句,把下面的代码添加到你主题中的function.php文件中去:

function theme_init(){
load_theme_textdomain('js-o4w', get_template_directory() . '/languages');
}

上面的代码中红色字段随意,它是用来告诉WordPress如何选择那些能本地化语言的代码,一般来说,填个主题的名字就可以了。而绿色的字段是告诉WordPress本地化语言文件的调用路径,一般就是那样写的,大可以不用改变。

有了上面代码的设置后,大家就着手定义一下在主题文件中究竟那些字段需要支持语言的本地化,我这里以侧栏中的一句标题代码作例。在还没有支持语言本地化时候,代码是这样的:

<h2>Most Popular</h2>

因为我希望对上面红色字段Most Popular修改到支持本地化,我只要把代码修改成如下:

<h2><?php _e('Most Popular', 'js-o4w'); ?></h2>

大家能看到修改的内容了吧,再举一例,比如我在footer信息中的一段代码:

<span>Copyright 2009</span>

我要把红色的字段copyright修改到支持本地化,修改代码如下:

<span><?php _e('Copyright', 'js-o4w'); ?> 2009</span>

相信到此大家就很了解是如何修改主题中显示字符段的代码了,注意的上面两句代码中都带有的标识字段:

js-o4w

它就是用来对应在文章最开头那段代码中我说的随意那部分,它们之间是要对应的。然后大家把需要修改的都修改后,那接下来怎样对这些需要本地化的字段进行翻译呢?我们继续说下去。

接着要去下载一个Poedit这个编辑工具。然后我们需要在主题的目录中新建一个文件夹,因为我们需要在这个文件夹中放置翻译好供系统读取的文件,根据本文开端代码中的绿色字段部分,我们这个文件夹的名字是:languages

下一步利用Poedit新建一个“消息目录文档”,如下图:

 如何对WordPress主题实现多语言化支持之简单教程

然后它需要我们对这个文档初始设置一下。

分类:theme skill, WordPress;标签:, , , , ;收藏本文的永久链接

45 Responses to “如何对WordPress主题实现多语言化支持之简单教程”

  1. IZK 回复此留言 2009/12/02 18:39 #comment-11263

    看不懂就占沙发真不道德,不过我还是占了

  2. 小y 回复此留言 2009/12/02 18:43 #comment-11264

    :arrow: 看完了才占板凳~嗯嗯~~

  3. 万戈 回复此留言 2009/12/03 01:59 #comment-11270

    曾经汉化过一款插件,对这个有一些些了解
    写的很详细,以后会用到的

  4. lwjef 回复此留言 2009/12/02 19:12 #comment-11265

    没有杀花了

  5. leeiio 回复此留言 2009/12/03 00:50 #comment-11269

    这篇很详细,收藏了,我还没本地化过主题语言…应该即将要用到了

  6. Ariagle 回复此留言 2009/12/03 02:27 #comment-11271

    define ('WPLANG', 'zh_CN');这句最迟可以在哪写呢?比如说我想通过插件实现根据注册用户的不同设定来更改显示语言,是否可以在init中添加?或者通过其他途径实现这方法?

    • Leo 回复此留言 2009/12/03 03:13 #comment-11274

      这个是用户安装wp的时候自己的设定,不需要你动手。
      如果你提供的语言包里面刚好有用户设定的那种语言,就调用语言包进行本地化,如果没有,就直接把 _e() 里面的第一个字串打印出来

    • Leo 回复此留言 2009/12/03 03:14 #comment-11275

      好像理解错你的意思了……看来你好像需要的是wpml这样的插件 :mrgreen:

    • Ariagle 回复此留言 2009/12/03 07:30 #comment-11281

      @Leo 
      WPML…谢谢推荐了。

  7. 虫儿 回复此留言 2009/12/03 02:45 #comment-11272

    现在不忙活模板了

  8. Leo 回复此留言 2009/12/03 03:19 #comment-11276

    话说我很早以前就在考虑做多语言支持,但是总觉得这个事情很繁琐,搞了几次都半途而废。主要是懂的外语不多,也就懒得搞了……

  9. Alan 回复此留言 2009/12/03 04:10 #comment-11277

    正需要 :oops:

  10. zwwooooo 回复此留言 2009/12/03 08:24 #comment-11282

    虽想过加语言包,但主题不受欢迎,不折腾了,反正abc们用得多

    • Jinwen 回复此留言 2009/12/03 23:17 #comment-11314

      谁说你的主题不受欢迎的啊?在我眼里,只有有1个用户,那就是受欢迎的了 :oops:

    • zwwooooo 回复此留言 2009/12/04 11:07 #comment-11344

      @Jinwen 哈哈,国内基本没人用我制作的主题,所以懒得翻译啦。

  11. welee 回复此留言 2009/12/03 09:52 #comment-11284

    我一直想在主题内添加多语言支持,只是一直都很懒... :?:

    • Jinwen 回复此留言 2009/12/03 23:18 #comment-11315

      其实真正需要翻译的语句并不多的,弄一次就一劳永逸了 :mrgreen:

  12. ZH CEXO 回复此留言 2009/12/03 14:22 #comment-11292

    收藏了……还真没想到过,我做主题都是为私人做的,所以没用到多语言支持,这个挺不错~

    • Jinwen 回复此留言 2009/12/03 23:18 #comment-11316

      话说,小批量的东西才值钱,是不是 :wink:

  13. trylife 回复此留言 2009/12/03 18:15 #comment-11296

    太晚了
    只能错略看下,下次再继续看

  14. gisgo 回复此留言 2009/12/04 15:21 #comment-11349

    谢谢了。
    收益不少。

  15. ajian 回复此留言 2009/12/07 00:49 #comment-11461

    开卷有益!

  16. ajian 回复此留言 2009/12/11 09:58 #comment-11576

    Jinwen大兄弟:主题的汉化标准的基本需要汉化哪些文件?这是因为,在根目录下的PHP文件很多很多呀?

  17. jayzeng 回复此留言 2009/12/13 07:56 #comment-11640

    谢谢jinwen!
    最近也要做一个多语言博客
    从你这得到了很多有用的信息!

  18. 网速 回复此留言 2009/12/17 17:23 #comment-11718

    请教一问题,静态目录化后,无法获取page页面内容怎么回事?

    • Jinwen 回复此留言 2009/12/17 22:49 #comment-11725

      你这个问题我也不明白是什么回事呢。就是没有对page页面进行静态化?如果是这样的话,是不是应该咨询一下插件的作者更好呢 :wink:

  19. 墨衣客 回复此留言 2010/02/11 12:54 #comment-12801

    学习了~~,有时间我会去尝试做一个西班牙语翻译文件送给Jinwen~

  20. 悠悠哉哉 回复此留言 2010/02/13 03:03 #comment-12824

    我参考了默认模板,发现将
    function theme_init(){
    load_theme_textdomain('js-o4w', get_template_directory() . '/languages');
    }
    改成
    load_theme_textdomain('js-o4w', get_template_directory() . '/languages');
    才起作用
    不知道是什么原因?

  21. 悠悠哉哉 回复此留言 2010/02/13 03:08 #comment-12825

    另外再问个问题,里的_e可以改成其它,然后在关键字里设置成对应的关键字吗?

  22. Knightby 回复此留言 2010/03/06 20:39 #comment-13249

    我想知道你博客的英文版是怎么实现的?
    就是一篇文章有多个语言的版本。

    • Jinwen 回复此留言 2010/03/06 20:41 #comment-13250

      用这个插件,曾经介绍过:http://www.saywp.com/wordpress/wpml-multilingual-cms.html

    • Knightby 回复此留言 2010/03/06 21:16 #comment-13252

      @Jinwen 
      3Q,不经常来你BLOG,所以就无脑问了...

  23. 图玛奇 回复此留言 2010/04/14 17:12 #comment-13844

    Jinwen,你好,一个主题已经有了其他语言的PO文件,我是否可以直接在这个文件上修改,把已有语言的PO的翻译结果成为中文,并另存为zh_cn.po文件呢,我想知道这样做是否可行,因为我也想偷点懒,哈哈,望告知,非常感谢。

    • Jinwen 回复此留言 2010/04/14 22:52 #comment-13847

      这样做是可行的。但是主题的php文件上的被翻译字符是需要与这个PO里显示的一样才行啊,就是说如果这个PO内对应被翻译为“主题”的原字符是“theme”,那么在主题内所有需要被翻译为“主题”的字符也应该是“theme”才行。

    • 图玛奇 回复此留言 2010/04/14 23:48 #comment-13848

      @Jinwen 非常感谢你的答复,我去尝试一下。在你这里收获不少。

  24. 郭健@北京 回复此留言 2010/04/14 22:44 #comment-13846

    学习啦!!正需要!

  25. amtype 回复此留言 2010/07/11 13:04 #comment-15034

    恩,谢了,讲的比较详细

  26. 珠海SEO 回复此留言 2010/09/15 22:05 #comment-15837

    学习了 :shock:

  27. PLAYBOY 回复此留言 2010/09/25 20:17 #comment-15883

    printf("Sorry, but there aren't any posts in the %s category yet.", single_cat_title('',false));

    请问这个语句怎样进行国际化?

  28. IT不倒翁 回复此留言 2010/10/11 08:48 #comment-16038

    汉化了,没生效咋回事呢 :shock:

  29. IT不倒翁 回复此留言 2010/10/11 08:51 #comment-16039

    知道了,哈哈

  30. WildCat 回复此留言 2011/05/03 16:29 #comment-18821

    发现了一个悲剧的问题,你以前这些文章的图片,地址都被墙了。
    看来以后来串门的时候都要翻墙了啊。 :evil:

    • Jinwen 回复此留言 2011/05/03 17:12 #comment-18822

      我原来的照片都是放在picasa那的,也用一个插件把它们能显示出来。。。不过好像现在不行了,要处理下才行。。