php实现项目国际化技术指南

      web项目中很多有国际化多语言的需求,其实就是按多种语言翻译解析web页面来显示,如果单纯用google翻译插件,翻译出的页面可能不一定达到比较准确的要求,如何能按要求达到解析翻译多语言页面呢?在项目中积累如下方法(持续跟进、改进完善)。

     本文使用thinkphp框架的方法。tp框架提供了国际化的支持。Thinkphp框架核心包提供国际化的代码和配置,

conf/convention.php中配置,common/functions.php中都有关于国际化处理,解读一下源码我们就可以知道国际化处理机制。

项目中国际化处理的做法如下:

在App包下建立Lang目录,里面放置各个国际化语言包的php文件,conf下放置tag.php文件

做法重点是,其中默认zh-cn.php,可以不用返回值,其他语言包以中文键值来翻译,这样,每个语言包只要翻译一下相应的语言即可。以en-us.php为例,代码如下:

<?php
return array(
	'产品介绍'=>"Product intruduce", '关于我们'=>"About us", '联系我们'=>"Contact us",
	'登录'=>'Login',  '注册'=>'Register',	'退出'=>'Logout',
	'中文'=>'Chinese',  '英文'=>'English',
	
);

conf/config.php增加配置代码如下:

'DEFAULT_LANG'=> 'zh-cn',
'LANG_SWITCH_ON'   => true, // 开启语言包功能
'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效
'LANG_LIST'        => 'zh-cn,en-us', // 允许切换的语言列表 用逗号分隔
'VAR_LANGUAGE'     => 'l', // 默认语言切换变量

tags.php代码如下:

<?php
return array(
    'app_begin' =>array('Behavior\CheckLangBehavior')
);
?>

 这样我们一般在php的controller中传递参数,代码如下:

xxxController(){
...
$this->assign('l',$_REQUEST['l']);
...

页面中调用直接用标签代码如下:

{:L('登录')}

参数为在语言包定义的中文字段,这样根据tp的国际化解析机制自动会解析不同的语言。

切换语言包,我们可以在页面中调用如下:

<select onchange="to_lang(this.value)">
  <option value='zh-cn' <eq name="l" value="zh-cn">selected</eq>>{:L('中文')}</option>
  <option value='en-us' <eq name="l" value="en-us">selected</eq> >{:L('英文')}</option>
</select>
<script>
function to_lang(a_lang){
 location.href="?l="+a_lang;
}
</scipt>

 我们就可以在页面上操作,根据我们的语言包设置的对应值,切换不同的语言解析了。

 

本文持续改进完善...

 

Guess you like

Origin blog.csdn.net/yan_dk/article/details/110845730