網站國際化(多語言切換)


項目上很好的東西一直沒有總結,今天抽空整理一下,以便不時之需。

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