国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

基于ASP.NET實現全球化

2024-07-10 12:56:29
字體:
來源:轉載
供稿:網友

共享下,用這個方法是可以的,試驗通過


第一步,我們創建一個名為testrm的web application。這個項目將缺省包含
- assemblyinfo.cs
- testrm.csproj
- testrm.csproj.webinfo
- testrm.sln
- testrm.suo
- testrm.vsdisco
- webform1.aspx(包含aspx.cs和aspx.resx)
- global.asax(包含asax.cs和asax.resx)
- web.config
第二步,需要為項目創建若干不同語種的資源文件。在.net中,資源文件的擴展名是.resx,此文件是基本于xml的,vs.net提供了非常方便的資源文件編輯工具(個人感覺很象xmlspy),這兒就不多說了。在此,以簡體中文(zh-cn)和美國英語(en-us)為例。通過“項目->添加新項->資源文件”向項目中分別添加名為string.en-us.resx和string.zh-cn.resx的資源文件,并在string.en-us.resx中添加一條記錄,內容是name:string001;value:welcome,在string.zh-cn.resx中添加一條記錄name:string001;value:歡迎。其xml文件的結構如下:
<?xml version="1.0" encoding="utf-8" ?>
<root>
...
<data name="string001">
<value>歡迎</value>
</data>
...
</root>
這兒有一點需要說明,如果你不是希望通過修改配置文件動態的切換語種,而是希望通過設置windows的“區域設置”功能來切換語種的話,請跳過第三步。(有這種需求嗎???-_-)
這樣,當此項目被編譯后,在bin目錄下將為出現en-us和zh-cn兩個子目錄,其中分別有一個dll文件。名為testrm.resources.dll。
第三步,修改global.asax和web.config文件以實現動態切換語種。
首先,我們需要在global.asax的application_beginrequest事件中添加如下代碼:
protected void application_beginrequest(object sender, eventargs e)
{
thread.currentthread.currentculture = cultureinfo.createspecificculture(configurationsettings.appsettings["defaultculture"]);
}
這是最簡單的應用,當然,你可以將一些配置項存儲到cookie之中。
然后,在web.config中添加如下代碼:
<appsettings>
<add key="defaultculture" value="zh-cn" />
</appsettings>
注意,appsettings元素與system.web屬于同一層次。
最后,在webform1的page_load事件中加入如下代碼:
public class webform1 : system.web.ui.page
{
private void page_load(object sender, system.eventargs e)
{
webform1 form1 = new webform1();
resourcemanager resmanager = new resourcemanager(form1.gettype().namespace + ".string", form1.gettype().assembly);
system.globalization.cultureinfo ci = system.threading.thread.currentthread.currentculture;

response.write(resmanager.getstring("string001",ci));
}

...
}
請大家注意上面這段代碼中有下劃線的這行代碼,在vs.net 2002中,如果使用this.gettype().namespace和this.gettype().assembly.fullname得到竟然是asp和6fqpc_hh, version=0.0.0.0, culture=neutral, publickeytoken=null,獲得的assembly顯然是隨機產生。但在c#的類文件和winform中是正常的,不清楚是什么原因。結果當然不用說,肯定是找不到相應的資源文件的。
此外,需要強調的一點是,這兒使用了form1.gettype().namespace + ".string",如果資源文件不是被放置在項目根目錄下,而是被放在某個子目錄下時,請注意修改項目的缺省命名空間。因為,資源文件被編譯后,在項目的資源文件testrm.resources.dll的manifest(用ildasm查看)中會有如下一行,.mresource public 'testrm.string.zh-cn.resources'或.mresource public 'testrm.string.en-us.resources'。其基本的構成規則是項目缺省命名空間+資源文件所在目錄名+資源文件名[+語種],如果一種項目的資源文件不分語種,如:我們定義了一個名為string.resx的資源文件,此時,編譯項目后在bin目錄下將不再會產生諸如zh-cn和en-us之類的子目錄,資源文件將被直接嵌入項目的assembly中。同時,在項目的assembly的manifest中會有如下一行.mresource public 'testrm.string.resources'。所以,如果資源文件不是放在項目的根目錄,且缺省命名空間沒有被改變的話,在試圖使用resmanager.getstring時將會被提示“無法訪問任何語種的資源文件”,原因就是上面所說的。
基本上,上述的這些就是我在研究基于asp.net實現全球化時的一些心得,希望能對一些朋友有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台江县| 延寿县| 新乡县| 平谷区| 上高县| 广西| 岳池县| 五常市| 洪雅县| 克拉玛依市| 会东县| 洪江市| 遂川县| 广宗县| 德钦县| 津南区| 渝中区| 祁门县| 大埔区| 元阳县| 万载县| 栾城县| 肇庆市| 拉孜县| 尤溪县| 平昌县| 巫山县| 吉安市| 防城港市| 集安市| 鹿邑县| 上犹县| 田阳县| 永泰县| 长治市| 西藏| 剑阁县| 铜陵市| 安阳县| 响水县| 宁强县|