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

 

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>


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

如果是其他的控件上的文字,基本上也是会自生成的。比如buttongridview的:

<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.resxpaste一下,然后renameDefault.aspx.fr-fr.resx注意fr-fr是你要做的语言的名字。大家如果看dvdrip的话,应该觉得这跟字幕文件很像吧?

8.     有人说我怎么知道那个语言叫什么名字呢?很简单,打开ietools->internet options -> languages -> add,方框中间的就是了。或参考文章后面表格:

9.     现在开始编辑其他资源的文字。打开Default.aspx.fr-fr.resx,对照着原来的内容,把里面的内容改成法语的。

10. 到此为止,我们就完成了第一阶段。ASP.Net会根据用户的语言偏好来选择显示的语言。把IE里的设置改一下,在我们刚说过的地方改成fr-fr,打开这一页看看?如果是法语,恭喜你。如果不是,回头重做……

11. OK,下一步,我们要允许用户选择自己的语言,而不是自动。我们会用cookie存取用户的选择。在Application级别,我们读取这个cookie并设置适当的cultureuiculture。当然,第一次进来的时候,我们还是要读取浏览器的设置,这个可以从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

越南(越南

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值