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

ASP.Net 中实现多语言界面的方法(2.0以上版本)

2009-03-26 11:51 771 查看
  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.下一步,我们要允许用户选择自己的语言,而不是自动。我们会用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. 打开来看一看吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: