网站国际化(多语言切换)


项目上很好的东西一直没有总结,今天抽空整理一下,以便不时之需。

web项目要实现多语言,这个功能需求很常见,一般的都会有中英文两种版本。

先说一下本项目的情况:本项目是基于zend framework的一个项目,在本项目中用到了两种国际化方案:

1.在js中实现国际化(主要针对ajax异步请求获取的数据,需要翻译的时候使用).

2.在PHP中实现国际化(主要针对项目的模板页面上的翻译数据).

下面我们先看一看js实现的部分:

思路:新建一个js文件,在文件中添加键名和对应的键值,然后定义一个公用方法,来用键名获取键值。

实现:项目中两种语言则丁一两个文件zh_CN.js和en_US.js分别存放中英文的键名与键值的对应。不多说了直接上一点代码:(这里以英文为例)

    

var langs={

'OK':'OK',
'cancel':'Cancel',
'login':'Login',
'Please wait {n} minutes':'Please wait {n} minutes' //{n}代表可变参数

};

function __(key,params) 
{
if(langs[key]&&params){
   if($.isArray(params)){
    var arr =new Array();
    var str = new string(params);
    var result = '';
    arr = str.split(',');
    for(var i=0;i<arr.length;i++){
    result = langs[key].replace('{n}',arr[i]);
    }
    if(typeof(result)!=='undefined'){
    return result;    
    }else{
    return key;
    }
   }else{
        return langs[key];    
    }
}
else if(langs[key]&&!params){
  return langs[key];
}else{
    return key;
}
}

用的时候在js代码中这样写:__('Please wait {n} minutes',3);即可。注意:函数的第二个参数是这种格式的:'2,3,4,5'用逗号隔开的。

其他要说明的:如何实现语言切换,大概思路如下:切换语言的时候加上?locale=en_US,然后在从url中获取到,存储在cookie的一个变量lang中,供取用。

在程序中根据cookie中lang的值不同来判断加载不同的js,这样就可以对项目中的js部分的翻译做处理了。

 

 

2.下面看一下php部分如何实现翻译:

  php部分因为用到的是zend框架所以会用到里面的zend_Translate适配器。该适配器功能强大。

  先理一下思路:在根目录中新建languages文件夹,下面新建zh和en文件夹分别存放中英文翻译文件,这里面用csv文件保存,具体格式是:

  ok,'OK',

  wait me {n} minutes,'Please wait me {n} minutes!'

   ....

  关于zend_Translate 的配置就不多讲了,可以参考网上的资料。

   可以参考这一份配置方法:http://my.oschina.net/netljx/blog/32485

  最终我们要顶一个公共的方法来攻供模板页面使用:代码如下:

   

<?php
class Commenfunc{
public function translate($key,$params)

  {
    $translate = Zend_Registry::get('Zend_Translate');
$message = $translate->translate($key);
if (isset($params[0])){ if(!isset($params['{n}'])){ $params['{n}'] = $params[0]; $res = strstr($message,$params['{n}']); unset($params[0]); return $res; } }else{ return $message; } } } ?>

用的时候这样使用:

Commenfunc::translate('ok');

Commenfunc::translate('wait me {n} minutes',$n);

大概的思路就是这样了,实现的过程中还有很多小问题需要不断的去做修改,不嫌烦就能搞定。

 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM