国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用gettext技術為ASP.NET網站實現國際化支持

開發 后端
本文從理念和做法兩方面介紹了gettext技術,讓我們一起來看。

不知道有多少人對這個題目感興趣,因為最近在做一個網站玩玩,有點閑心給網站加了國際化支持。雖然ASP.NET已經有ResourceManager這個類,并且有標簽實現國際化的支持了,但是它的問題是,ResourceManager對每一個需要翻譯的句子都要求有一個鍵(Key):

1. 要先創建一個.resx文件,在Visual Studio里,有一個工具編輯這個.resx文件。

2. 對每一個需要翻譯的句子,添加一個鍵值對。

3. 然后在代碼里,使用ResourceManager或者<%#這個標簽,通過定義好的鍵來告訴ASP.NET在運行的時候查找正確的翻譯文本。

太麻煩了,不知道大家有什么其它好的方法,我使用的方法是從unix gettext那邊借用過來的理念。

理念

Gettext的理念很簡單,文本翻譯嗎,說白了就是把一句話翻譯成另外一句話嘛,這個要翻譯的句子,本身就可以當做檢索要用的關鍵字,何必要再新建一個另外的關鍵字呢?gettext的方式很簡單:

1. 在源代碼里,你可以編寫一個特殊的函數執行翻譯,這個函數只接受一個參數,就是要翻譯的文本。

2. 使用一個輔助程序xgettext掃描源代碼的文本,將所有待翻譯的文本都找出來,保存到一個文件里,一般來說,這個文件叫做po文件。

3. 因為ASP.NET程序不支持po文件,再使用一個輔助程序msgfmt將po文件轉換成ASP.NET支持的.resources文件。這個方法的優點在于:

1. 你在編寫程序的時候,不用為需要翻譯的句子,定義一個新的關鍵字——這個關鍵字一般都比較難理解,也不好取名。在維護代碼的時候很麻煩——因為你需要不停地在.resx編輯器和cs文件之間切換。

2. 不知道怎么搞的,很難找到可以編輯.resx文件的工具,而gettext生成的po文件是普通的文本文件,而且格式非常簡單。這樣在翻譯的時候,就很方便了。

做法

比如寫了一個ASP.NET MVC程序,當然窗體(Web Form)形式的程序理念也是一樣的,

1. 寫一個控制器和視圖頁的基類,里面都有一個執行翻譯的函數T:

  1. public class G18nController : Controller  
  2. {  
  3. public CultureInfo Culture { getset; }  
  4. public string T(string message)  
  5. {  
  6. var obj = HttpContext.GetGlobalResourceObject("website", message, Culture);  
  7. var translated = obj == null ? null : obj.ToString();  
  8. if (string.IsNullOrEmpty(translated))  
  9. return message;  
  10. else 
  11. return translated;  
  12. }  
  13. }  
  14. public abstract class G18nWebViewPage<U> : WebViewPage<U>  
  15. {  
  16. public CultureInfo Culture { getset; }  
  17. public string T(string message)  
  18. {  
  19. var obj = HttpContext.GetGlobalResourceObject("website", message, Culture);  
  20. var translated = obj == null ? null : obj.ToString();  
  21. if (string.IsNullOrEmpty(translated))  
  22. return message;  
  23. else 
  24. return translated;  
  25. }  
  26. }  
  27.  

上面的Culture屬性,可以從Request.Headers["Accept-Language"]屬性取得。

2. 在代碼里,針對每個要翻譯的句子,直接調用這個T函數好了:

  1. throw new ArgumentException(string.Format(T("找不到ID為{0}的項目!"), id)); 

3. 程序寫好后,要開始翻譯,調用gettext程序將所有要翻譯的句子找出來,保存到指定的po文件里。可以在http://gnuwin32.sourceforge.net/packages/gettext.htm這個網頁下載gettext。

但是悲劇的是,gettext好像要求主語言是英文,對中文字符串支持的不是很好。所以我就用C#自己寫了一個gettext,你可以在本文的附件里下載它,命令的格式是:

Zgettext -k T -i 源代碼路徑名 -o 輸出的po文件名

Zgettext -k T -f 源代碼路徑列表文件 -o 輸出的po文件名

比如:

Zgettext -k T -i AccountController.cs -o test.po

4. 生成的po文件格式其實非常簡單易懂:

  1. #: C:\workspace\Views\Role\Edit.cshtml:9  
  2. msgid "管理用戶組" 
  3. msgstr "" 
  4. #: C:\workspace\Views\Role\Edit.cshtml:23  
  5. msgid "用戶組[{0}]的權限" 
  6. msgstr "" 

Msgid就是要翻譯的句子,msgstr就是翻譯好的句子。

5. 完成翻譯后,使用一個輔助程序msgfmt將翻譯好的po文件轉換成ASP.NET支持的格式。因為原始的gettext程序包里的msgfmt.exe好像不能生成ASP.NET識別的.resources文件,所以 我也寫了一個msgfmt程序完成這個工作——在本文的附件里可以下載到,命令格式是:

Msgfmt -o 輸出的resource文件路徑 -i 輸入的po文件路徑

例如:

Msgfmt -o website.en-US.resources -i website.po

注意:輸出的resource文件名,必須與你在***步里,使用HttpContext.GetGlobalResourceObject函數的***個參數相同。

6. 我寫了一個小的批處理,將3、4、5步結合在一起執行:

  1. pushd src  
  2. del /F source.lst  
  3. dir /s /b src\*.cs >> source.lst  
  4. dir /s /b src\*.cshtml >> source.lst  
  5. tools\zgettext\zgettext\bin\Debug\zgettext.exe -k T -f source.lst -o glob\website.po  
  6. tools\zgettext\msgfmt\bin\Debug\msgfmt.exe -o src\App_GlobalResources\website.resources -i glob\ website.po  
  7. popd  

希望對你有點幫助。

【編輯推薦】

  1. C#改寫WM_GETTEXT處理例程
  2. PHP Smarty通過gettext加強國際化的總結
  3. 使用gettext實現PHP的國際化編程
  4. gettext不安全臨時文件文件刪除漏洞

 

責任編輯:于鐵 來源: 博客園
相關推薦

2009-01-19 09:06:31

gettextPHP國際化編程

2009-08-05 17:58:34

實現ASP.NET網站

2009-12-29 15:05:29

WPF支持國際化

2009-07-29 09:14:36

ASP.NET網站

2009-03-04 10:53:39

gettextsmartyphp

2009-07-23 10:31:14

2011-08-11 13:26:30

iPhoneNSLocalized

2011-07-20 14:53:28

iPhone NSLocalize 國際化

2009-07-28 16:42:02

ViewState技術ASP.NET應用

2009-10-09 10:52:43

ASP.NET模板引擎

2009-08-04 17:28:45

Apache支持ASP

2010-01-04 13:09:51

Silverlight

2009-07-29 15:38:01

2009-07-28 17:17:19

ASP.NET概述

2009-08-03 14:22:33

什么是ASP.NET

2009-07-22 17:45:35

ASP.NET教程

2009-07-23 15:44:39

ASP.NET MVC

2009-07-27 09:45:14

ASP.NET Dro

2009-08-03 10:07:20

ASP.NET Ses

2009-08-10 14:55:43

ASP.NET htt
點贊
收藏

51CTO技術棧公眾號

色妞在线综合亚洲欧美| 亚洲影视资源网| 精品福利av导航| 国产免费人做人爱午夜视频| 国产精品最新| 色综合久久综合网欧美综合网| 欧美精品欧美精品系列c| 成人福利视频| 一区二区三区国产豹纹内裤在线| 欧美大香线蕉线伊人久久| 色播一区二区| 精品欧美乱码久久久久久| 2222www色视频在线观看| 中文字幕精品一区二区精品绿巨人| 69av视频在线播放| 香蕉伊大人中文在线观看| 狠狠综合久久av一区二区小说| 男女激情无遮挡| 麻豆久久久久久| 91欧美视频网站| 国产欧美日韩精品一区二区免费 | 黄页网站视频在线观看| 亚洲男人的天堂网| 国产区二区三区| 久久国产高清| 精品国产综合久久| 第九色区aⅴ天堂久久香| 欧美激情成人在线视频| 成人影院大全| 亚洲国模精品私拍| 污污片在线免费视频| 制服视频三区第一页精品| 亚洲人性生活视频| 日本久久一区二区三区| 裸体免费网站| 亚洲男人的天堂在线aⅴ视频| 午夜影院免费| 日韩一区二区三免费高清| 精品裸体bbb| 日韩视频―中文字幕| 欧美国产视频| 4388成人网| 国产精品传媒精东影业在线| 96pao国产成视频永久免费| 日韩免费在线| 一区二区三区在线视频111| 欧美激情综合五月色丁香小说| 国产剧情演绎av| 美女久久久久| 十八禁视频网站在线观看| 久久精品最新地址| 一区二区三区四区国产精品| 欧美日韩一区在线观看| **毛片在线网站| 亚洲永久精品大片| 三级短视频在线| 6080日韩午夜伦伦午夜伦| 日本韩国在线视频爽| 国产97人人超碰caoprom| 91丨九色丨尤物| 青草伊人久久| 人成网站免费观看| av成人午夜| 尤物在线观看一区| 欧美一区二区三区久久精品茉莉花| 中文字幕免费在线| 日本10禁啪啪无遮挡免费一区二区 | 国产成人一区二区三区电影| 好吊成人免视频| 祥仔av免费一区二区三区四区| 精品国产综合区久久久久久| 午夜伊人狠狠久久| 天堂99x99es久久精品免费| 日韩成人三级视频| 亚洲精品自拍偷拍| 久久国产精品99精品国产 | 亚洲精品国产偷自在线观看| 五月天久久狠狠| 777a∨成人精品桃花网| 欧美aⅴ99久久黑人专区| 成人观看视频| 91欧美精品午夜性色福利在线 | av在线免费一区| 国产精品二区二区三区| 欧美三级三级三级爽爽爽| 欧美色综合网| 国产午夜精品久久久久免费视| 91精品在线观| 亚洲精品成a人在线观看| 久久精品99久久久| 另类图片综合电影| 欧美综合在线播放| 美女精品视频一区| 中文字幕一区二区三区不卡| 青青草久久爱| aaa在线观看| 正在播放国产精品| 中文字幕在线亚洲| 国产清纯白嫩初高生在线观看91| 亚洲理论电影| 超碰免费97在线观看| 欧美三级韩国三级日本一级| 日本免费新一区视频| 亚洲欧洲一二区| 天堂资源在线观看| 欧美日韩亚洲一区二区三区四区| 亚洲国产高清福利视频| 中文字幕一区二区不卡| 黄色工厂这里只有精品| 成人日韩欧美| 国产极品粉嫩福利姬萌白酱| 国产精品亚洲自拍| 亚洲电影天堂av| 国产精品久久久久久久久久久免费看 | 99re6热在线精品视频播放| 欧美一区二区高清在线观看| 免费99精品国产自在在线| 欧美午夜电影网| 国产精品一区二区久激情瑜伽 | 一二三区精品福利视频| 国产精品入口| 妖精视频一区二区三区| 日韩av毛片| 最近最新mv在线观看免费高清| 一区在线电影| 精品综合久久| 国产在线视频不卡| 欧美日本精品在线| 日韩久久精品电影| 欧美精品丝袜久久久中文字幕| 亚洲1区2区3区4区| 中文字幕在线不卡一区| 91麻豆国产福利精品| 久久99国产精品麻豆| 国产精品激情| 亚洲一区欧美二区| 国产欧美一级| 国内精品福利| 影音先锋久久精品| 天天插综合网| 国产区一区二区| 91高潮精品免费porn| 欧美激情一区二区三区高清视频| 久久偷看各类女兵18女厕嘘嘘| 色哟哟网站入口亚洲精品| 亚洲毛片在线观看.| 一区二区三区四区精品| 九九热这里只有在线精品视| 欧美激情啊啊啊| 68精品国产免费久久久久久婷婷| 欧美老妇交乱视频| 国产精品一香蕉国产线看观看| 中文字幕精品久久久久| 在线成人免费网站| 91国产视频在线播放| 欧美野外猛男的大粗鳮| 精品久久久久久一区二区里番| 精品国产aⅴ麻豆| 亚洲精品少妇一区二区| 九七影院97影院理论片免费| 免费白浆视频| 天堂亚洲精品| 日本99精品| 中文在线日韩| 国产精品亚洲第一区在线暖暖韩国 | 欧美性感一区二区三区| 精品少妇一区二区三区在线播放 | 欧美激情极品视频| 91久久极品少妇xxxxⅹ软件| 一区二区三区四区五区视频| 国产精品入口免费软件| sese一区| 青青草久久爱| 国产伦精品一区二区三区免费 | 中文字幕第50页| 在线观看国产视频| 国产麻豆久久| 久久精品观看| 亚洲一区二区三区三| 日韩欧美一区二区三区在线| 日韩美女视频在线观看| 日韩精品久久一区二区| 欧美日韩国产中文字幕在线| 91精品麻豆| 久草这里只有精品视频| 欧美在线观看你懂的| 午夜精品久久久久久久久久久久久 | 日韩精品成人在线观看| 国产综合精品| 玉足女爽爽91| 欧美一区二区三区精品电影| 国产女教师bbwbbwbbw| 成人影院在线看| 激情文学一区| 富二代精品短视频| 国产精品一香蕉国产线看观看 | 国产乱人伦偷精品视频免下载| 久久一二三四| 日韩电影免费在线观看网站| 中文字幕不卡在线播放|