首页 > 编程 > .NET > 正文

在ASP.Net 2.0中实现多语言界面的方法

2024-07-10 13:10:43
字体:
来源:转载
供稿:网友

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>

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. 打开来看一看吧!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表