老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

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

這篇文章將為大家詳細講解有關如何使用gettext技術為ASP.NET網站實現國際化支持,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

公司主營業務:成都網站設計、成都網站建設、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯公司是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯公司推出臺州免費做網站回饋大家。

不知道有多少人對這個題目感興趣,因為最近在做一個網站玩玩,有點閑心給網站加了國際化支持。雖然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:

public class G18nController : Controller  {  public CultureInfo Culture { get; set; }  public string T(string message)  {  var obj = HttpContext.GetGlobalResourceObject("website", message, Culture);  var translated = obj == null ? null : obj.ToString();  if (string.IsNullOrEmpty(translated))  return message;  else return translated;  }  }  public abstract class G18nWebViewPage : WebViewPage  {  public CultureInfo Culture { get; set; }  public string T(string message)  {  var obj = HttpContext.GetGlobalResourceObject("website", message, Culture);  var translated = obj == null ? null : obj.ToString();  if (string.IsNullOrEmpty(translated))  return message;  else return translated;  }  }

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

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

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文件格式其實非常簡單易懂:

#: C:\workspace\Views\Role\Edit.cshtml:9  msgid "管理用戶組" msgstr "" #: C:\workspace\Views\Role\Edit.cshtml:23  msgid "用戶組[{0}]的權限" 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步結合在一起執行:

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

關于如何使用gettext技術為ASP.NET網站實現國際化支持就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


網站標題:如何使用gettext技術為ASP.NET網站實現國際化支持
網站網址:http://www.xueling.net.cn/article/jiecei.html
主站蜘蛛池模板: 国产激情视频一区二区 | 国产成人情侣激情小视频 | 久久精品免费国产 | 中文字幕乱码中文乱码777 | 日日噜噜夜夜爽狠狠视频 | 狼友AV永久网站免费极品在线 | 免费无码一区二区三区A片 未满小14洗澡无码视频网站 | A级毛片无码久久精品免费 激情欧美成人久久综合 | 三年片在线观看免费动漫 | 56精品视频在线播放免费观看 | 国产精品绯色蜜臀99久久 | 日本毛片免费看 | 中文字幕大香视频蕉免费 | 毛片免费全部无码播放 | 越做高潮越喷奶水视频 | 狠狠久久亚洲欧美专区 | 伊人大杳焦在久久综合网 | 国产色av | 亚洲男人的天堂视频 | 日本永久免费 | 精品婷婷 | 无码人妻品一区二区三区精99 | 久久22 | 国产我和子的与子乱视频 | 人人妻人人玩人人澡人人爽 | 91香蕉麻豆 | 古典武侠第一页久久777 | 91久久香蕉国产熟女线看 | 国产精华液一线二线三线区别 | 榴莲导航深夜福利 | 97国产精华最好的产品在线 | 精品亚洲AⅤ无码午夜在线网站 | 国产精品午夜小视频观看 | 美国黄色毛片 | 久草a视频 | 春药刺激国产老富婆露脸 | 动漫av一区二区在线观看 | 91成年网站 | 欧美男男激情videos高清 | 在线看午夜福利片国产 | 婷婷六月久久综合丁香 |