精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用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文件里??梢栽趆ttp://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-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-27 17:20:05

2009-07-22 17:45:35

ASP.NET教程

2009-07-27 09:45:14

ASP.NET Dro

2009-07-23 15:44:39

ASP.NET MVC

2009-08-10 14:55:43

ASP.NET htt
點贊
收藏

51CTO技術棧公眾號

国产真实乱子伦| 亚洲三级精品| 97视频热人人精品免费| 亚洲免费资源在线播放| 欧美一区二区三区艳史| 精品国产无码在线| 五月天婷婷激情| 久久久久毛片免费观看| 国产亚洲va综合人人澡精品| 欧美激情aaaa| 狠狠干狠狠操视频| 噜噜噜在线观看播放视频| 成人97精品毛片免费看| 久久―日本道色综合久久| 久久天天躁狠狠躁夜夜爽蜜月| 人妻有码中文字幕| 黄频网站在线观看| 综合在线视频| 亚洲一区成人在线| 91久久精品视频| 国产一二三四区在线| 欧美久久天堂| 丁香天五香天堂综合| 久久精品亚洲热| 欧美第一页浮力影院| 久久精品国产亚洲a∨麻豆| 亚洲大片在线| 亚洲成人av片在线观看| 国产成人一区二区三区别| 国产精品视频a| 日韩av专区| 欧美综合在线视频| 色噜噜一区二区| 啪啪小视频网站| 黑人操亚洲人| 欧美少妇性性性| 性欧美videosex高清少妇| wwwav在线播放| 欧美精品入口| 日韩午夜在线观看视频| 亚洲乱码日产精品bd在线观看| 国产欧美久久久精品免费| 五月天久久网站| 欧美日韩mp4| a级网站在线观看| 精品久久久久久亚洲综合网站| 亚洲一区二区免费看| 精品亚洲永久免费精品| 免费无码国产v片在线观看| 涩爱av在线播放一区二区| 老牛嫩草一区二区三区日本 | www.亚洲一区| 亚洲免费黄色网| 欧美性猛交xxx高清大费中文| 久久久久国产精品人| 国产精品久久久久久久一区探花| wwwww黄色| 日韩av影院| 欧洲中文字幕精品| 日本三级免费网站| а√天堂8资源中文在线| 久久午夜国产精品| 韩国成人动漫在线观看| 天天操天天干天天摸| 日韩欧美自拍| 国产一区二区三区在线看 | 亚洲婷婷综合色高清在线| 91丨九色丨国产在线| 国产精品无码一区| 蜜桃av一区二区| 欧美伦理91i| 欧美精品欧美极品欧美激情| 欧美gay视频| 精品国产户外野外| 视频一区二区三| 国产在线电影| 国产三级三级三级精品8ⅰ区| 欧美精品久久| 一级黄色片在线| 亚洲三级毛片| 日韩在线视频二区| 亚洲一区二区在线免费| 亚洲二区av| 精品久久久久久电影| 国产精品国产亚洲精品看不卡| 在线免费观看黄色| 粉嫩在线一区二区三区视频| 日本一区二区三区在线播放| 国产wwwwxxxx| 亚洲日产av中文字幕| 亚洲视频视频在线| 精品无码av一区二区三区不卡| 亚洲精品**中文毛片| 亚洲日本在线天堂| 99re6这里有精品热视频| 成人全视频高清免费观看| 国产成人av一区二区三区在线| 91青青草免费观看| 在线观看日韩一区二区| 一本久久综合| 欧美激情在线狂野欧美精品| 人妻无码一区二区三区免费| 青草久久视频| 国产亚洲美女久久| 久久久久久视频| 欧美日中文字幕| 日韩国产欧美区| 中文在线字幕观看| 伊人成综合网伊人222| 中文字幕精品视频| 91精彩刺激对白露脸偷拍| 成人性生交大片免费看96| 91精品国产色综合久久久蜜香臀| www日韩视频| 香蕉伊大人中文在线观看| 欧美性猛交xxxxxxxx| av动漫免费看| 免费欧美网站| 亚洲欧美精品suv| 亚洲最大免费视频| 欧美成人精品一区二区三区在线看| 久久成人亚洲精品| 欧美 日韩 精品| 国产精品影视天天线| 91久久国产婷婷一区二区| 丰满人妻一区二区三区免费| 欧美国产精品一区二区| 日韩啊v在线| 黑人与亚洲人色ⅹvideos| 亚洲少妇30p| 成年人免费在线播放| 一区中文字幕| 精品国产电影一区二区| 中文字幕人妻一区| 国产精品网站在线看| 亚洲国产高清自拍| 日本一级特级毛片视频| 国产一区二区三区四区三区四| 欧美黑人国产人伦爽爽爽| 欧美超碰在线观看| 蜜桃视频在线观看一区二区| 精品伦精品一区二区三区视频| 欧美精品电影| 亚洲美女淫视频| 亚洲综合在线网站| 日韩中文影院| 欧美日韩卡一卡二| av网站免费在线播放| 国产一区二区三区91| 欧美福利小视频| 国产又粗又猛又爽又黄视频| 国产性色一区二区| 韩国日本在线视频| 精品一区在线| 日韩在线观看免费全集电视剧网站| 亚洲 欧美 视频| 奇米777欧美一区二区| 成人做爽爽免费视频| 波多野结衣在线影院| 色婷婷综合久久久久中文一区二区| 国产成人黄色网址| 日韩三级久久| 亚洲精品狠狠操| 国产人妻大战黑人20p| 91精品天堂福利在线观看| 久久久久九九九九| 精品国产区一区二| 亚洲欧美激情小说另类| 黄色一级片免费播放| 老牛影视av一区二区在线观看| 亚洲视频axxx| 麻豆精品久久久久久久99蜜桃| 精品一区二区三区在线观看国产 | 国产精品无码电影| 亚洲经典在线| 久久大香伊蕉在人线观看热2| 成人精品一区| 欧美久久久久久久久久 | www.激情成人| 日韩偷拍一区二区| 国精品产品一区| 精品福利一区二区三区 | 亚洲国产日日夜夜| 看欧美ab黄色大片视频免费| 国产成人精品三级高清久久91| 国产精品爱久久久久久久| 成人毛片视频免费看| 亚洲不卡一区二区三区| 91pony九色| 国产午夜一区| 国产一区二区丝袜高跟鞋图片| 香港三日本三级少妇66| 亚洲精品国产一区二区精华液| 成人性视频欧美一区二区三区| 国产一区二区三区探花| 国产视频观看一区| 韩国成人免费视频| 欧美乱熟臀69xxxxxx| 黄页网站免费观看| 国产一区二区在线看| 手机成人在线| 国产精品一区二区三区www| 欧美—级a级欧美特级ar全黄| 天堂91在线| 亚洲二区在线视频| 亚欧洲乱码视频| 极品少妇xxxx精品少妇偷拍| 欧美精品一区二区三区在线四季| 成人不卡视频| 亚洲视频网站在线观看| 精品国产va久久久久久久| 好吊成人免视频| 日本护士做爰视频| 蜜桃视频第一区免费观看| 超级碰在线观看| 色棕色天天综合网| 97在线电影| 日韩精品专区| 欧美激情网友自拍| 91ph在线| 精品香蕉一区二区三区| a级片在线免费看| 亚洲欧美乱综合| 亚洲av无码一区二区三区网址| 麻豆精品新av中文字幕| 亚洲一区二区三区精品视频| 欧美大片网站| 91国语精品自产拍在线观看性色| 狠狠躁日日躁夜夜躁av| 欧美色图天堂网| 日本午夜精品理论片a级app发布| 国产91精品精华液一区二区三区| 免费黄色特级片| 国自产拍偷拍福利精品免费一| 午夜精品美女久久久久av福利| 国产精品99久久免费观看| 国产欧美婷婷中文| 亚洲小少妇裸体bbw| 九色91av视频| 日本中文字幕在线2020| 欧美高清激情brazzers| 无码人妻精品一区二| 婷婷中文字幕一区三区| 久久久一二三区| 91麻豆.com| 黄色免费网址大全| 亚洲一区二区免费看| 青青草精品视频在线| 精品一区毛片| 久久久www免费人成黑人精品| 中文字幕亚洲在线观看| 3d精品h动漫啪啪一区二区| 四虎国产精品免费久久| 国产精品美女www爽爽爽视频| 欧美18av| 日av在线播放中文不卡| 午夜在线免费观看视频| 亚洲午夜国产成人av电影男同| 亚洲人成色777777老人头| 亚洲经典中文字幕| 天堂中文在线看| 欧美中文字幕一区| 日韩黄色一级视频| 欧美自拍偷拍一区| 最好看的日本字幕mv视频大全 | 日韩精品一区二区三区在线 | 久久成人18免费网站| 激情视频在线观看| 亚洲国产黄色片| 狠狠躁夜夜躁av无码中文幕| 欧美精品一区二区三区一线天视频 | 99久久精品情趣| 无码任你躁久久久久久老妇| 可以免费看不卡的av网站| 国产精品亚洲a| 日韩电影在线观看一区| 97在线国产视频| 日韩欧美视频专区| 一区二区三区国| 女主播福利一区| 国产精品无码人妻一区二区在线| 一本一本久久| 欧美精品无码一区二区三区| 日本aⅴ亚洲精品中文乱码| 中文字幕精品一区二区三区在线| 国产综合色视频| 亚洲美女高潮久久久| 99久久精品久久久久久清纯| 在线视频观看一区二区| 国产精品一区专区| 国产精品久久无码| 国产日韩欧美一区二区三区乱码| 精品无码在线观看| 久久亚区不卡日本| 毛片视频免费播放| 一级做a爱片久久| 天海翼在线视频| 国产日韩v精品一区二区| 中文字幕乱码av| 亚洲图片欧美视频| 国产婷婷色一区二区在线观看| 欧美日韩电影在线| 天堂成人在线视频| 中文字幕成人在线| 黄色美女视频在线观看| 日韩av手机在线看| 日韩精品一区二区三区中文| 美日韩免费视频| 精品成人自拍视频| 亚洲资源视频| 一区二区三区福利| 国产美女18xxxx免费视频| av不卡在线播放| 五月天婷婷丁香网| 福利视频一区二区| 精品欧美在线观看| 中文日韩电影网站| 黄色在线观看www| 成人精品视频99在线观看免费| 草民电影神马电影一区二区| 国产精品 欧美在线| 正在播放日韩精品| **亚洲第一综合导航网站| 国产成人精品免费视| 欧美成人精品免费| 极品少妇xxxx偷拍精品少妇| 无码人妻精品一区二区三应用大全| 亚洲免费毛片网站| 久久久999久久久| 亚洲国产成人精品久久| 成人午夜在线影视| 欧美日本亚洲视频| 成人免费一区| 欧美系列一区| 亚洲大胆视频| 国产人妖在线观看| 亚洲色图一区二区| 在线免费观看av片| 国产亚洲精品一区二555| 国产理论在线| 动漫精品视频| 丝袜美腿综合| 四虎影院一区二区三区| 国产欧美日韩一级| 2一3sex性hd| 亚洲国产日韩a在线播放| 精品人妻一区二区三区四区不卡| 色天天综合狠狠色| 日韩欧美2区| 日韩欧美手机在线| 久久亚洲色图| av黄色在线免费观看| 一本大道久久精品懂色aⅴ| 日本精品一二区| 亚洲人成在线电影| 捆绑调教日本一区二区三区| 国产成人精品免费视频大全最热| 亚洲色图网站| 日韩不卡的av| 337p粉嫩大胆噜噜噜噜噜91av| 国产在线成人精品午夜| 日本久久一区二区| 精品人妻一区二区三区浪潮在线| 色综合影院在线| 国产情侣一区二区三区| 亚洲一区二区精品在线观看| 麻豆成人久久精品二区三区红| 四虎国产成人精品免费一女五男| 欧美三级电影网| 日本高清在线观看wwwww色| 成人av色在线观看| 欧美一区二区| 北京富婆泄欲对白| 狠狠躁18三区二区一区| 嫩草研究院在线观看| 国产成人精品在线| 日韩毛片视频| 国产精品嫩草影视| 亚洲国产欧美另类丝袜| 天堂在线视频网站| 国产成人亚洲综合| 国产韩日影视精品| 亚洲美女高潮久久久| 欧美性猛交99久久久久99按摩| 国产成人精品一区二区色戒| 中文字幕少妇一区二区三区| 999精品视频在线观看| 欧美午夜精品久久久久免费视| 视频一区欧美精品| 国产探花在线视频| 精品久久99ma| 毛片在线播放a| 99久久99久久| 99久久亚洲精品蜜臀| 久久久久久国产精品日本| 亚洲 欧美综合在线网络| 国产在线网站| 亚洲综合日韩在线| 色婷婷综合网| 亚洲免费观看在线|