網站多語言設計的一些思路。框架實現多國語言。
介紹一個PHP 多國語框架 v5.1:https://lang-php.com/?lang=zh-CN
有時候做網站的時候需要考慮多語言設計,比如外貿網站。即便是簡體中文和繁體中文網站設計也不是簡單的繁簡轉換就行的。
多語言網站面臨的設計問題:
1、多語言語法問題
簡體中文和繁體中文是現代漢語並存的兩種書面形式。它們在語音、詞彙、語法等方面都有明顯差異,給大陸和港澳臺地區的交流和溝通造成障礙。並不是簡單的繁簡對照替換就行的。如,繁體中文裡的“家庭計劃”對應簡體中文中的“家庭的計劃”和“計劃生育”兩個意義;簡體中文中的“檢討”對應繁體中文的“檢查”和“討論”兩個意義。後一個例子中的詞語在理性意義和感情色彩都是不對應的。
即,繁簡字存在字形轉換模糊的不對稱,更何況英語、法語、韓語….語法總歸不是機器能解決的(至少目前不是)
2、資料庫多語言
主要是錄入資訊的多語言化,涉及到資料庫優化和資料庫設計方面。對於不同架構、不同級別的網站系統設計也有不同之處。
3、頁面多語言
這個,不解釋,一般情況下都是用語言包解決此問題。不過,有些情況下,模板中div的寬度神馬的都要考慮到語言包中對應的語句的長度,以免發生錯位現象。
4、使用者訪問語言統一
使用者初次訪問時,判斷使用者語言環境,自動跳轉…也不解釋
解決方案:
1、簡單:每個語言一個網站,還要注意分離使用者系統
優點:簡單解決。後顧無憂~
缺點:維護複雜,製作週期長~
2、簡單的呼叫谷歌翻譯整個頁面
優點:簡單、方便。
缺點:偶爾被牆、機器翻譯總是有點語法用詞不通順
3、真正實現網站的多語言設計
優點:基本上解決以上所有問題
缺點:設計複雜,實現麻煩,有些情況下得不償失
1、多語言語法問題解決:
這個,找專業翻譯吧..不歸你管
2、資料庫多語言資訊錄入
01、簡單實現:
1、比如,表中加lang欄位,每條資訊的lang欄位不同的值,中文是zh-cn,英文是en
2、多一個語言版本表,用來存放語言版本,每個語言版本對應一個langid,新增資訊的時候,資訊表中的lang欄位存放對應的langid,把lang欄位設計成索引。其實跟上一種設計方法差不多。
3、每條資訊對應一個分類(公告也可以分為多個分類嘛),比如:國內新聞(id=1)寶島新聞(id=2)每個分類的資訊表中有個欄位lang,對應不同的語言,新增新聞資訊的時候,分不同語言的分類新增資訊,這樣新聞資訊表就不用lang欄位區分不同語言的新聞了。使用者訪問的時候,不同語言的使用者訪問不同的分類,呼叫分類的時候區分開分類id就好了。嗯,分類有點多。不過這算是簡單實現中最好的一種了吧
總結,此種方案適合小型系統,沒什麼鴨梨,網站全部靜態化。缺點不好擴充套件~
02、一般實現:
1、繼續優化設計(01、簡單實現 中的 3 方法)。把不同語言的新聞資訊分表儲存,實現方法基本差不多。
總結:此方案適合中型應用。
03、複雜實現
1、同上設計方案,將不同語言資訊分不同資料庫存放。使用者資訊(賬戶、密碼、語言介面)等單獨存放。專門做一個使用者系統,通過api和網站進行溝通。順便實現同步登入神馬的~嗯。不同語言相當於一個子站,組成一個站群。例如使用者訪問www.gookang.com,判斷使用者語言環境為zh-cn,接著跳轉到cn.gookang.com。每個語言版本的子站,擁有不同的分類,不同的資料庫,不同的介面等等.. 複雜度增加了。好處也是有的,不同的語言可以根據壓力做分散式…嗯…思路上還需要再想想,完善下。
總結,好處是有的。缺點也是有的。不同情況不同分析吧。
2、更進一步就是在域名上做文章了,跳轉就不用php做了。其他的麼..再優化神馬的~ = =你是要做類似雅虎那樣的入口網站乜?每個國家一個網站..擦~壓力山大!
3、頁面多語言
1、php語言包+自定義lang()函式
比如一個網站的部落格模組。
語言包存放位置:language/zh-cn/blog/tpl.lang.php
語言包中內容:return $lang = array(‘xxx’=>’{name}xxxxx,{age}xxxxxxxx’)
自定義函式lang($lang, $var=array()) $lang 語言key,$var 語言中的引數
呼叫的時候,lang(‘blog_tpl_xxx’,array(‘name’=>’t-chris’,'age’=>’21′));
最後結果:t-chrisxxxxx,21xxxxxxxx
關於錯位情況,這個有時候可以把錯位的地方的div神馬的變寬點、變高點。不過可能會影響美觀。
所以,最好是每種語言一套模板。這樣保證了介面的統一性,使用者體驗也會爽點。
具體實現方法,此處省略1w字….
2、通過谷歌翻譯。
有些情況下,你不願意設計那麼複雜的資料庫,又是神馬分表儲存,又是神馬分欄位,分欄目….
“擦,分你妹啊分!還讓程式設計師活不活?就那麼幾個程式設計師,整天改bug,改細節。累死人!程式不是你想改,想改就能改…..程式猿,你傷不起啊!!”
噹噹噹當~~偉大的谷歌,它繼承了“為人民服務”的光榮傳統…現在,有谷歌翻譯介面。
具體實現方法,請谷歌“translate API”神馬的..記得查詢中文,假如你英文不好的話…
【補充】 youtube就是利用的 谷歌API翻譯內容.. 具體請翻牆
3、其他方法?
我沒想到…
4、使用者訪問語言統一
獲取瀏覽器的語言環境
$_SERVER['HTTP_ACCEPT_LANGUAGE']
js獲取使用者系統語言環境
<script type=”text/javascript”>
document.write(navigator.language);
document.write(navigator.systemLanguage);
document.write(navigator.browserLanguage);
</script>
通過ip判斷
不解釋~
還有其他….
獲取之後,寫cookie,寫session.. 總之就是讓使用者訪問其他頁面的時候,網站語言能統一起來。