填写您的邮件地址,订阅我们的精彩内容:

WordPress多语言插件Qtranslate详解

920

前言:
很多企业站点是需要中英双语版,一般这种情况,可以新建两个wordpress(以下简称WP),一个是中文版,一个是英文版,放入子目录,这样就会产生两个后台,优点是不要更多的程序开发,缺点是太麻烦,发布一篇新闻或者产品,需要发两次。客户自然不愿意。第二种实现多语言的方法是借助WP的自动翻译插件,不幸的是,自动翻译的质量着实令人担忧。这次在搜索插件过程中看到了一款插件,非常适合,这就是Qtranlate,经过测试,可以实现WP站点全部多语化,插件本身已经提供了多国语言,但本人局限于中英,只能介绍中英双语化的实现方法。

Qtranslate基础使用教程

安装Qtranslate

Qtranslate可以在WP后台直接安装,目前已经支持WP最新版本:Qtranslate下载,WP的插件安装不再重复。

Qtranslate基本使用方法

启用插件后,大家可以发现,添加文章和添加页面会自动出现中英文标题和中英文正文编辑区域,因此,在写文章的时候,只需要手动输入双语内容即可。保存后查看数据库会发现post_content中的内容会自动变更为

1
<!--:zh-->正文内容<!--:--><!--:en-->Content<!--:-->

此处的

1
<!--:zh--><!--:-->

标签即为中英文判断标记。其中的zh为语言代码,在Qtranlate后台中可以自定义,一般中文为zh,英文为en。

除了上述的标记外,还可以用以下方式调用。

1
[:zh]正文内容[:en]Content

由于添加文章、页面,分类编辑均提供了语言编辑区域。因此,不需要再重复添加以上代码, 系统会自动生成。

完成如上操作后,基本可以实现WP 文章、页面、分类目录的双语化。如何查看效果呢?

假设WP的域名为http://www.6666.so,英文版只需更改为http://www.6666.so?lang=en ,也可以使用http://www.6666.so/en/进行访问。

WP主题站点标题中英化

由于Qtranslate没有提供站点标题并没有提供语言编辑区域,表面上看无法实现双语化,很多人会想到,只要在后台编辑区域的站点标题中将标题手动更改为双语模式即可。

1
<!--:zh-->站点标题<!--:--><!--:en-->Sitename<!--:-->

但实际的调用是并没有效果,因此,为了实现标题双语化,需要更改两个地方:
1.将后台站点标题更改为

1
[:zh]站点标题[:en]Sitename

之所以要改段代码,是因为大部分标题不支持尖括号输出,尖括号极容易造成站点XSS。
2.修改主题header.php文件,查找

1
bloginfo( 'name' );

将其更改为

1
echo _e(apply_filters(' ', bloginfo( 'name' )));

WP主题自定义域中英化

一般主题不会存在自定义域,但很多WP高级主题需要调用到自定义域,例如酷站导航,我们往往会把酷站的URL填入到一个自定义域,如后在模板中统一调用。这样可以简化我们编辑文章,撰写html的麻烦。由于我们一般在调用自定义域内容的时候代码为

1
<?php echo get_post_meta(get_the_ID(), "price", true);?>

参考之前标题中英化,可以将上述代码更改为:

1
<?php echo _e(apply_filters(' ', _(get_post_meta($post->ID, 'price', true)))); ?>

WP主题版权信息中英化

为了省去版权信息编辑后台化的麻烦,我们喜欢在主题footer.php里面直接写入版权信息,因此,在实际调用中我们会写道类似代码:

<div id="colophon">
<span style="font-family:arial;">&copy;</span> 2004-2012 杭州XXXXX有限公司 版权所有
</div>

此时的杭州XXXXX有限公司 版权所有 双语化,可以更改为如下代码:

<div id="colophon">
<span style="font-family:arial;">&copy;</span> 2004-2012 <?php _e("<!--:zh-->杭州XXXXX有限公司 版权所有<!--:--><!--:en-->Hangzhou  XXXXX Co., Ltd. All Rights Reserved.<!--:-->");?>
</div>

根据以上的案例,如果主题中存在类似的中文信息,均可以使用该思路进行双语化。

WP主题菜单栏中英化

由于WP默认主题twentyten提供了菜单选项,我们可以自由地将页面、文章分类添加到菜单栏。根据之前提及的页面、分类中英化,菜单栏中的所有已知页面和分类均会自动切换中英文。我们的习惯会将首页放置在菜单栏中,一般情况下,我们会将首页做为一个自定义连接添加到菜单栏,此时出现的问题是:名称可以使用[:zh]和[:en]区分,但是链接怎么改都不行。

百般无奈只下,我只能手动将首页链接添加到主题模版。为了让页面自动判断中英为,可以使用如下代码:

<ul><li><a href="<?php bloginfo('url');?>"><?php _e("<!--:zh-->首页<!--:--><!--:en-->Home<!--:-->");?></a></li></ul>

WP主题图片/LOGO中英化

上一节中的代码得益于WP自带函数bloginfo(‘url’),但是

<!--:zh-->首页<!--:--><!--:en-->Home<!--:-->

中无法直接填写img代码,所以,只能考虑判断当前页面的语言属性,代码如下:

<?php if(qtrans_getLanguage()=='zh'): ?>
					<img src="<?php bloginfo('template_url')>/images/logo_zh.png" />
				<?php endif; ?>
				<?php if(qtrans_getLanguage()=='en'): ?>
					<img src="<?php bloginfo('template_url')>/images/logo_en.png" />
				<?php endif; ?>

20130311更新

菜单中自定义链接的中英文化

我们在编辑主题时,常常需要在主题菜单中添加一个自定义连接放置首页。如果我们希望使用[:zh]这些代码判断链接,发现根本是无法添加的。因为这些代码并不是有效的链接,系统会自动清空无效代码。那么,如何实现自定义链接的中英文化呢?在QT作者的支持论坛中看到相关解决方法,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
add_filter('wp_nav_menu_objects', 'wp_nav_menu_objects_tip');
function wp_nav_menu_objects_tip($menu_items) {
   //print_r($menu_items); if you need to see them
   if (function_exists('qtrans_getLanguage')) {
      foreach ($menu_items as &$item) {
         if ($item->url == '#blog') {
            $lang = qtrans_getLanguage();
            if ($lang == 'zh') $item->url = '中文链接';
            if ($lang == 'en') $item->url = '英文链接';

         }
      }
   }
   return $menu_items;
}

这段代码需要更改的地方包括两个,1.$item->url == ‘#blog’ 此处的#blog为后台-菜单-自定义链接中填写的URL,也可以更换为#home等类似的有效连接。

2.if ($lang == ‘zh’) $item->url = ‘中文链接’; 根据自己实际的语言,编写对应的链接。

3.代码写入functions.php文件。

启用qTranslate后,日期乱码的解决方法

启用qTranslate后,主题里面的日期可能会变成%x %A。遇到这种情况的原因是,主题调用日期时,采用了printf模式,例如默认主题twentyten,里面调用日期的函数位于function.php twentyten_posted_on(),代码如下:

1
2
3
4
5
6
7
printf( __( '<span>Posted on</span> %2$s <span>by</span> %3$s', 'twentyten' ),
		'meta-prep meta-prep-author',
		sprintf( '<a href="%1$s" title="%2$s" rel="bookmark"><span>%3$s</span></a>',
			get_permalink(),
			esc_attr( get_the_time() ),
			get_the_date()
		)

这段代码就是产生乱码的原因。

因此,遇到需要生成日期的情况,只需要将输出函数更改为:

1
<?php the_time('Y-m-d');?>

当然,还有不需要改主题的方法。更简单啦。
点击设置-语言,点击语言右侧的编辑,将日期格式、时间格式稍作更改。
例如原来是%A %B %e%q, %Y,就改成j M Y。
具体日期格式可以参考
WordPress官方日期说明

特色图像中英文化

详细点击:WordPress增加多个特色图像

文章转载自:http://www.6666.so/study/wordpress-qtranslate.htm

下面我简单说几句