您的位置:首页 > 编程语言 > ASP

在ASP.Net 2.0中实现多语言界面的方法及多语言区域代码对应表

2011-04-21 17:48 681 查看
1. 跟以前一样做界面,只是注意,把所有需要有多语言界面的文字都用label来做
2. 做完以后,在Solution Explorer里选中这个文件,选Tools->Generate Local Resource
3. 你会发现生成了一个目录,App_LocalResources;这个目录里多了一个resx的文件。比如你的aspx文件是default.aspx,它就会生成一个叫做default.aspx.resx的文件。
4. 打开这个文件看看,原来在label中的那些文字都跑到这里来了
5. 打开原来的aspx文件看看source,会发现源码变了:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Default2" title="Untitled Page" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>
…………
<asp:Localize ID="Localize1" runat="server" meta:resourcekey="Localize1Resource1"></asp:Localize>

*********************************************************************
如果是其他的控件上的文字,基本上也是会自动生成的。比如button和gridview的:
<asp:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource1" Text="Button1" /><br />
<asp:GridView ID="GridView1" runat="server" meta:resourcekey="GridView1Resource1">
<Columns>
<asp:BoundField HeaderText="Header1" meta:resourcekey="BoundFieldResource1" />
<asp:BoundField HeaderText="Header2" meta:resourcekey="BoundFieldResource2" />
</Columns>
</asp:GridView>

生成的resource如下:



*********************************************************************

6. 注意这里:meta:resourcekey="PageResource1" 和meta:resourcekey="Localize1Resource1" 这就表示这里的文字是从资源中读取的。
7. OK现在来做另一种语言的资源文件。很简单,copy Default.aspx.resx再paste一下,然后rename为Default.aspx.fr-fr.resx注意fr-fr是你要做的语言的名字。大家如果看dvdrip的话,应该觉得这跟字幕文件很像吧?
8. 有人说我怎么知道那个语言叫什么名字呢?很简单,打开ie,tools->internet options -> languages -> add,方框中间的就是了。或参考文章后面表格:
9. 现在开始编辑其他资源的文字。打开Default.aspx.fr-fr.resx,对照着原来的内容,把里面的内容改成法语的。
10. 到此为止,我们就完成了第一阶段。ASP.Net会根据用户的语言偏好来选择显示的语言。把IE里的设置改一下,在我们刚说过的地方改成fr-fr,打开这一页看看?如果是法语,恭喜你。如果不是,回头重做……
11. OK,下一步,我们要允许用户选择自己的语言,而不是自动。我们会用cookie存取用户的选择。在Application级别,我们读取这个cookie并设置适当的culture和uiculture。当然,第一次进来的时候,我们还是要读取浏览器的设置,这个可以从Request.UserLanguages中获得。

Private SupportedLanguages As String() = {"en-us", "fr-fr"}

Public Const LANGUAGE_COOKIE_NAME As String = "UserLanguage"

Sub Application_AcquireRequestState(ByVal sender As Object, ByVal e As EventArgs)
Dim languageCookie As HttpCookie = Request.Cookies(LANGUAGE_COOKIE_NAME)
Dim language As String = String.Empty

If (languageCookie Is Nothing) Then
Dim userLanguages As String() = Request.UserLanguages
Dim index As Integer
For i As Integer = 0 To userLanguages.Length - 1
index = Array.IndexOf(SupportedLanguages, userLanguages(i))
If index >= 0 Then
language = SupportedLanguages(index)
Exit For
End If
Next

If language = String.Empty Then _
language = SupportedLanguages(0)
Response.Cookies.Add(New HttpCookie(LANGUAGE_COOKIE_NAME, language))
Else
language = languageCookie.Value
End If

Dim culture As CultureInfo = New CultureInfo(language)
System.Threading.Thread.CurrentThread.CurrentUICulture = culture
End Sub

12. 然后我们要有一页让用户选择语言,比如我们用两个button来做。在点击这个button之后,我们要设置这个cookie为适当的语言:

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
SetLanguage("fr-fr")
End Sub

Protected Sub SetLanguage(ByVal language As String)
Response.Cookies(Global.ASP.global_asax.LANGUAGE_COOKIE_NAME).Value = language
Dim culture As CultureInfo = New CultureInfo(language)
System.Threading.Thread.CurrentThread.CurrentUICulture = culture
Server.Transfer(Request.Path)
End Sub

注意最后的Server.Transfer(Request.Path) ,这是为了重新读取这一页,这样这一页也会显示新选择的语言。

13. 最后我们要去掉ASP.Net的自动选择。从Default.aspx中去除:

Culture="auto" UICulture="auto"

14. 打开来看一看吧!

区域性/语言名称
区域性标识符
区域性
""(空字符串)
0x007F
固定区域性
af
0x0036
南非荷兰语
af-ZA
0x0436
南非荷兰语(南非)
sq
0x001C
阿尔巴尼亚语
sq-AL
0x041C
阿尔巴尼亚语(阿尔巴尼亚)
ar
0x0001
阿拉伯语
ar-DZ
0x1401
阿拉伯语(阿尔及利亚)
ar-BH
0x3C01
阿拉伯语(巴林)
ar-EG
0x0C01
阿拉伯语(埃及)
ar-IQ
0x0801
阿拉伯语(伊拉克)
ar-JO
0x2C01
阿拉伯语(约旦)
ar-KW
0x3401
阿拉伯语(科威特)
ar-LB
0x3001
阿拉伯语(黎巴嫩)
ar-LY
0x1001
阿拉伯语(利比亚)
ar-MA
0x1801
阿拉伯语(摩洛哥)
ar-OM
0x2001
阿拉伯语(阿曼)
ar-QA
0x4001
阿拉伯语(卡塔尔)
ar-SA
0x0401
阿拉伯语(沙特阿拉伯)
ar-SY
0x2801
阿拉伯语(叙利亚)
ar-TN
0x1C01
阿拉伯语(突尼斯)
ar-AE
0x3801
阿拉伯语(阿联酋)
ar-YE
0x2401
阿拉伯语(也门)
hy
0x002B
亚美尼亚语
hy-AM
0x042B
亚美尼亚语(亚美尼亚)
az
0x002C
阿泽里语
az-Cyrl-AZ
0x082C
阿泽里语(阿塞拜疆,西里尔语)
az-Latn-AZ
0x042C
阿泽里语(阿塞拜疆,拉丁语)
eu
0x002D
巴斯克语
eu-ES
0x042D
巴斯克语(巴斯克地区)
be
0x0023
白俄罗斯语
be-BY
0x0423
白俄罗斯语(白俄罗斯)
bg
0x0002
保加利亚语
bg-BG
0x0402
保加利亚语(保加利亚)
ca
0x0003
加泰罗尼亚语
ca-ES
0x0403
加泰罗尼亚语(加泰罗尼亚地区)
zh-HK
0x0C04
中文(香港特别行政区,中国)
zh-MO
0x1404
中文(澳门特别行政区)
zh-CN
0x0804
中文(中国)
zh-Hans
0x0004
中文(简体)
zh-SG
0x1004
中文(新加坡)
zh-TW
0x0404
中文(台湾)
zh-Hant
0x7C04
中文(繁体)
hr
0x001A
克罗地亚语
hr-HR
0x041A
克罗地亚语(克罗地亚)
cs
0x0005
捷克语
cs-CZ
0x0405
捷克语(捷克共和国)
da
0x0006
丹麦语
da-DK
0x0406
丹麦语(丹麦)
dv
0x0065
迪维希语
dv-MV
0x0465
迪维希语(马尔代夫)
nl
0x0013
荷兰语
nl-BE
0x0813
荷兰语(比利时)
nl-NL
0x0413
荷兰语(荷兰)
en
0x0009
英语
en-AU
0x0C09
英语(澳大利亚)
en-BZ
0x2809
英语(伯利兹)
en-CA
0x1009
英语(加拿大)
en-029
0x2409
英语(加勒比)
en-IE
0x1809
英语(爱尔兰)
en-JM
0x2009
英语(牙买加)
en-NZ
0x1409
英语(新西兰)
en-PH
0x3409
英语(菲律宾)
en-ZA
0x1C09
英语(南非)
en-TT
0x2C09
英语(特立尼达和多巴哥)
en-GB
0x0809
英语(英国)
en-US
0x0409
英语(美国)
en-ZW
0x3009
英语(津巴布韦)
et
0x0025
爱沙尼亚语
et-EE
0x0425
爱沙尼亚语(爱沙尼亚)
fo
0x0038
法罗语
fo-FO
0x0438
法罗语(法罗群岛)
fa
0x0029
波斯语
fa-IR
0x0429
波斯语(伊朗)
fi
0x000B
芬兰语
fi-FI
0x040B
芬兰语(芬兰)
fr
0x000C
法语
fr-BE
0x080C
法语(比利时)
fr-CA
0x0C0C
法语(加拿大)
fr-FR
0x040C
法语(法国)
fr-LU
0x140C
法语(卢森堡)
fr-MC
0x180C
法语(摩纳哥)
fr-CH
0x100C
法语(瑞士)
gl
0x0056
加利西亚语
gl-ES
0x0456
加利西亚语(西班牙)
ka
0x0037
格鲁吉亚语
ka-GE
0x0437
格鲁吉亚语(格鲁吉亚)
de
0x0007
德语
de-AT
0x0C07
德语(奥地利)
de-DE
0x0407
德语(德国)
de-LI
0x1407
德语(列支敦士登)
de-LU
0x1007
德语(卢森堡)
de-CH
0x0807
德语(瑞士)
el
0x0008
希腊语
el-GR
0x0408
希腊语(希腊)
gu
0x0047
古吉拉特语
gu-IN
0x0447
古吉拉特语(印度)
he
0x000D
希伯来语
he-IL
0x040D
希伯来语(以色列)
hi
0x0039
印地语
hi-IN
0x0439
印地语(印度)
hu
0x000E
匈牙利语
hu-HU
0x040E
匈牙利语(匈牙利)
is
0x000F
冰岛语
is-IS
0x040F
冰岛语(冰岛)
id
0x0021
印度尼西亚语
id-ID
0x0421
印度尼西亚语(印度尼西亚)
it
0x0010
意大利语
it-IT
0x0410
意大利语(意大利)
it-CH
0x0810
意大利语(瑞士)
ja
0x0011
日语
ja-JP
0x0411
日语(日本)
kn
0x004B
卡纳达语
kn-IN
0x044B
卡纳达语(印度)
kk
0x003F
哈萨克语
kk-KZ
0x043F
哈萨克语(哈萨克斯坦)
kok
0x0057
贡根语
kok-IN
0x0457
贡根语(印度)
ko
0x0012
朝鲜语
ko-KR
0x0412
朝鲜语(韩国)
ky
0x0040
吉尔吉斯语
ky-KG
0x0440
吉尔吉斯语(吉尔吉斯坦)
lv
0x0026
拉脱维亚语
lv-LV
0x0426
拉脱维亚语(拉脱维亚)
lt
0x0027
立陶宛语
lt-LT
0x0427
立陶宛语(立陶宛)
mk
0x002F
马其顿语
mk-MK
0x042F
马其顿语(马其顿,FYROM)
ms
0x003E
马来语
ms-BN
0x083E
马来语(文莱达鲁萨兰)
ms-MY
0x043E
马来语(马来西亚)
mr
0x004E
马拉地语
mr-IN
0x044E
马拉地语(印度)
mn
0x0050
蒙古语
mn-MN
0x0450
蒙古语(蒙古)
no
0x0014
挪威语
nb-NO
0x0414
挪威语(伯克梅尔,挪威)
nn-NO
0x0814
挪威语(尼诺斯克,挪威)
pl
0x0015
波兰语
pl-PL
0x0415
波兰语(波兰)
pt
0x0016
葡萄牙语
pt-BR
0x0416
葡萄牙语(巴西)
pt-PT
0x0816
葡萄牙语(葡萄牙)
pa
0x0046
旁遮普语
pa-IN
0x0446
旁遮普语(印度)
ro
0x0018
罗马尼亚语
ro-RO
0x0418
罗马尼亚语(罗马尼亚)
ru
0x0019
俄语
ru-RU
0x0419
俄语(俄罗斯)
sa
0x004F
梵语
sa-IN
0x044F
梵语(印度)
sr-Cyrl-CS
0x0C1A
塞尔维亚语(塞尔维亚,西里尔语)
sr-Latn-CS
0x081A
塞尔维亚语(塞尔维亚,拉丁语)
sk
0x001B
斯洛伐克语
sk-SK
0x041B
斯洛伐克语(斯洛伐克)
sl
0x0024
斯洛文尼亚语
sl-SI
0x0424
斯洛文尼亚语(斯洛文尼亚)
es
0x000A
西班牙语
es-AR
0x2C0A
西班牙语(阿根廷)
es-BO
0x400A
西班牙语(玻利维亚)
es-CL
0x340A
西班牙语(智利)
es-CO
0x240A
西班牙语(哥伦比亚)
es-CR
0x140A
西班牙语(哥斯达黎加)
es-DO
0x1C0A
西班牙语(多米尼加共和国)
es-EC
0x300A
西班牙语(厄瓜多尔)
es-SV
0x440A
西班牙语(萨尔瓦多)
es-GT
0x100A
西班牙语(危地马拉)
es-HN
0x480A
西班牙语(洪都拉斯)
es-MX
0x080A
西班牙语(墨西哥)
es-NI
0x4C0A
西班牙语(尼加拉瓜)
es-PA
0x180A
西班牙语(巴拿马)
es-PY
0x3C0A
西班牙语(巴拉圭)
es-PE
0x280A
西班牙(秘鲁)
es-PR
0x500A
西班牙语(波多黎各)
es-ES
0x0C0A
西班牙语(西班牙)
es-UY
0x380A
西班牙语(乌拉圭)
es-VE
0x200A
西班牙语(委内瑞拉)
sw
0x0041
斯瓦希里语
sw-KE
0x0441
斯瓦希里语(肯尼亚)
sv
0x001D
瑞典语
sv-FI
0x081D
瑞典语(芬兰)
sv-SE
0x041D
瑞典语(瑞典)
syr
0x005A
叙利亚语
syr-SY
0x045A
叙利亚语(叙利亚)
ta
0x0049
泰米尔语
ta-IN
0x0449
泰米尔语(印度)
tt
0x0044
鞑靼语
tt-RU
0x0444
鞑靼语(俄罗斯)
te
0x004A
泰卢固语
te-IN
0x044A
泰卢固语(印度)
th
0x001E
泰语
th-TH
0x041E
泰语(泰国)
tr
0x001F
土耳其语
tr-TR
0x041F
土耳其语(土耳其)
uk
0x0022
乌克兰语
uk-UA
0x0422
乌克兰语(乌克兰)
ur
0x0020
乌尔都语
ur-PK
0x0420
乌尔都语(巴基斯坦)
uz
0x0043
乌兹别克语
uz-Cyrl-UZ
0x0843
乌兹别克语(乌兹别克斯坦,西里尔语)
uz-Latn-UZ
0x0443
乌兹别克语(乌兹别克斯坦,拉丁语)
vi
0x002A
越南语
vi-VN
0x042A
越南语(越南)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: