網站中的簡體繁體切換是如何實現的?

這裡面兩方面內容,一方面是標題類的,一方面是數據。難道都要存兩份嗎?


我以中文維基百科的「大陸簡體」、「馬新簡體」、「港澳繁體」、「台灣正體」整合和轉換作為例子介紹一下吧。總體來說,是利用程序自動轉換的,基本方式就是通過維護好的多個「轉換表」來進行轉換的:

最基本的系統默認轉換表(源碼在此:http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/ZhConversion.php?view=markup 更新:這並非是系統默認轉換表的源碼,而是整合了默認轉換表和定製轉換表的總轉換表。)涵蓋大部分用字轉換,包括單字的和考慮到簡繁一對多對應的用詞轉換,經過挺長一段時間的發展和社區的力量,維基百科目前的這份轉換表格應當已經能夠滿足大多情況的轉換需求。

然後是定製轉換表。根據「大陸簡體」、「馬新簡體」、「港澳繁體」、「台灣正體」四種用字地區不同的習慣不同,有很多詞語各地用法不同,比如「台灣正體」用戶看到的應當是(箭頭後為轉換結果):

北朝鮮=&>北韓

喬戈里峰=&>K2;

寮國人民民主共和國=&>寮人民民主共和國

萊特灣=&>雷伊泰灣

賓西法尼亞=&>賓夕法尼亞

羅納德·里根=&>隆納·雷根

正態分布=&>常態分佈

貝塞爾函數=&>貝索函數

納米=&>奈米

等等。

經過這兩套轉換表的轉換,基本就得到了簡繁字詞準確、地區用法恰當的轉換結果。

所有的介紹都在:http://zh.wikipedia.org/wiki/Help:%E4%B8%AD%E6%96%87%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91%E7%9A%84%E7%B9%81%E7%AE%80%E3%80%81%E5%9C%B0%E5%8C%BA%E8%AF%8D%E5%A4%84%E7%90%86

http://zh.wikipedia.org/wiki/Help:%E7%B9%81%E7%AE%80%E5%A4%84%E7%90%86

在中文維基百科裡,繁簡處理和地區詞處理是字詞轉換系統的兩大組成部分。繁簡轉換旨在為用戶提供只針對單字的轉換(並包括繁簡/簡繁一對多的轉換,例如簡體的「打鬥」會正確地轉換成繁體的「打鬥」),是進一步實現地區詞轉換的基礎。

維基百科的繁簡轉換總共通過三個轉換表來實現:其一是MediaWiki內置的轉換表ZhConversion.php,其二是在MediaWiki:Conversiontable/zh-hans中定義的簡體中文轉換表、其三是在MediaWiki:Conversiontable/zh-hant中定義的繁體中文轉換表。

關於技術方案,維基百科上也有一些概述,但比較簡單:http://zh.wikipedia.org/wiki/Help:%E7%B9%81%E7%AE%80%E5%A4%84%E7%90%86/%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88

另外,如果你感興趣,你可以查閱 MediaWiki 的源代碼。

-------

更新:對於中文維基百科的轉換問題,@stevenliuyi 在本題的答案給出了更進一步的介紹,請感興趣的朋友參考!謝謝!


@張塔 對中文維基百科簡繁與地區詞轉換系統的介紹不是太完整,我需要再補充一點。

他提到的「系統默認轉換表」和「定製轉換表」都是屬於「全局轉換」的層次,也就是說其效果作用於中文維基百科的所有頁面。事實上,除此以外還有三個層次,作用範圍從大到小依次為:

  • 全局轉換(作用於所有條目)

  • 公共組轉換(作用於同一主題的條目,比如化學轉換組作用於化學相關的條目)

  • 全文轉換(作用於單個條目)

  • 單獨轉換(作用於個別地方)

之所以要分這麼多層次,主要是為了避免過度轉換的情況出現。因為「全局轉換」的作用範圍最廣,稍有不慎就會影響很多條目,因而只保留最常見的轉換。但即便如此也無法完全避免過度轉換,此時就需要「單獨轉換」來微調。比如「採用→採用」作用常用詞列入「全局轉換」是很合理的,但如果有人寫「尼採用……」的話就會過度轉換為「尼採用……」。

像上面「尼采」被轉換為「尼採」的情況畢竟是比較少見的(單獨的「尼采」是不會轉換的,只有後面加了「用」才會),放在「全局轉換」中影響不是很大。但有些經常出現的過度轉換就必須放入作用範圍更小的「公共組轉換」中。像「數位→數碼」雖然也是很常用的詞,但「數位人士」這樣的常見表述就會被轉換為「數碼人士」了,因而這組轉換隻能放在IT公共轉換組中。

還有些轉換即便是「公共組轉換」也會頻繁地出現過度轉換,特別是涉及到單字的時候。比如「宏→巨集」,這時就只能使用「全文轉換」或「單獨轉換」來實現了(如果條目中需要多次「宏→巨集」轉換的話就用「全文轉換」,個別地方用「單獨轉換」就夠了)。

此外還有一些情況必須使用「單獨轉換」才行,比如條目中需要提到兩岸三地的不同譯名、專門討論漢字簡繁問題的條目以及其他一些特殊場合(像「台灣」和「臺灣」兩種寫法在台灣的使用情況等等)。

從上面的介紹可以看到,雖然中文維基百科簡繁與地區詞的轉換表已經是精心設計的了,但還有大量工作需要人工完成,完全使用機器轉換還是很難達到滿意的效果。

謝邀。


不一定需要存兩份。大約十年(左右)以前,Apache HTTP server就已經有了第三方的即時GB&<-&>BIG5轉換module。當然具體到實踐當中,是實時轉換還是存兩份,取決於網站開發者願意用CPU換存儲空間,還是用存儲空間換CPU。


i18n

常把I18N作為「國際化」的簡稱,其來源是英文單詞 internationalization的首末字元i和n。18為中間的字元數。

隨著全球經濟的一體化,軟體開發者應該開發出支持多國語言、國際化的Web應用。對於Web應用來說,同樣的頁面在不同的語言環境下需要顯示不同的效果。也就是說,一個Web應用程序在運行時能夠根據客戶端請求所來自的國家和語言顯示不同的用戶界面。這樣 ,當需要在應用程序中添加對一種新的語言的支持時,無需修改應用程序的代碼。

國際化是指在設計軟體時,將軟體與特定語言及地區脫鉤的過程。當軟體被移植到不同的語言地區時,軟體本身不用做內部工程上的改變或修正。本地化則是指當移植軟體時,加上與特定區域設置有關的資訊和翻譯文件的過程。 國際化和本地化之間的區別雖然微妙,但卻很重要。國際化意味著產品有適用於任何地方的潛力;本地化則是為了更適合於特定地方的使用,而另外增添的特色。用一項產品來說,國際化只需做一次,但本地化則要針對不同的區域各做一次。 這兩者之間是互補的,並且兩者結合起來才能讓一個系統適用於各地。


以前下過一個chm格式電子書,裡面有繁簡轉換按鈕,很好奇,查看源碼,其實是個對每個頁面都有效的java script(記憶模糊,亦非相關專業,所以不確定),凡是有繁體形式的字都有一份繁體供切換,常用的大概就三幾百個,就這麼簡單。上面的答案沒仔細看,但這麼做一定存在不能解決的轉碼問題,所以僅對大陸想看繁體的用戶有效。


固定的內容,語言包實現,

動態的內容,比如文章之類,確實是要存2份


推薦閱讀:

請問開發的混合應用Hybrid App可以和Native應用「混合」成一個App嗎?
學習ASP.NET WEB開發需要學習那些知識?
GitHub 有什麼用?放在上面的代碼會泄漏嗎?
如果我們能從頭開始,web編程會是什麼樣子?

TAG:Web開發 | 國際化與本地化 | 簡繁轉換 |