在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>

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

  如果是其他的控件上的文字,基本上也是会自动生成的。比如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如下:

  89qas8ou0060.GIF

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

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

转载于:https://www.cnblogs.com/hzuIT/articles/793068.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 使用代码编写的自定义控件类

Qt 使用代码编写的自定义控件类 首先需要完成继承QWidget 或者Qt 原生控件类的类编写实现在需要使用自定义控件类的 UI 文件中添加一个 自定义类的控件(也就是自定义类继承的控件)将这个控件进行提升(promote) 为自定义类,记得设…

mac使用word怎么显示左侧目录树

1,点击”视图” 2,点击“导航窗口” 3,点击如图所示图标

java BigDecimal去掉小数点后的零

new BigDecimal(spstFil.getCnt().stripTrailingZeros().toPlainString())

Qt 多重继承时 moc 编译出错

class SZNR103Client : public QObject , public CommBase {在这里插入代码片 bash 在这里插入代码片 注意一点: QOBject 必须写在自己的类前面,否则编译会有问题

中毒,重装,杀毒……最近一段时间,很烦的一件事,不断重复……

之前写的,因为最近太多人中毒了,太多人问了,太多人找我了…… 所以,很烦很烦…… 自己简直成了专业杀毒软件(麻烦还没有杀毒软件的朋友,用金钱或者其他办法找个杀毒软件,一定…

使用postman发送HttpServletRequest请求

使用postman发送HttpServletRequest请求 使用postman发送HttpServletRequest请求 Headers部分是key: Content-Type value: application/x-www-form-urlencoded 后台使用这个接收String name request.getParameter("name");

第一次写,python爬虫图片,操作excel。

第一次写博客,其实老早就注册博客园了,有写博客的想法,就是没有行动,总是学了忘,忘了丢,最后啥都没有,电脑里零零散散,东找找,西看看,今天认识到写博客的重要…

JavaScript 异常处理

异常处理概述在代码的运行过程中,错误是不可避免的,总的来说,错误发生于两种情况:一是程序内部的逻辑或者语法错误,二是运行环境或者用户输入中不可预知的数据造成的错误。对于前者,就称之为错误&#xff0…

Oracle根据年份分组

select extract(year from 时间字段 ) year from 表名 GROUP BY extract(year from 时间字段 ) 解释:extract(year from 时间字段) 获取相应的年份 得到的结果为数值类型的。year也可以换成month和day获取月和日 GROUP BY extract(year from 时间字段 ) 对获取的年…

Windows VS c++复制文件到网络共享文件夹的实现

远程建立好共享目录本地创建映射盘代码实现,调用 win32 API CopyFile() 或者命令行调用函数 sysytem() 坑: 4. 使用 VS 调试程序的时候会提示无法找到映射盘, 5. CopyFile()函数也会提示没有找…

Qt ftp 文件上传工具开发

一、需求: 1.简单的配置ftp参数界面 2.tcp 客户端端,接收服务器下发的参数信息 3.用户上传操作界面 在这里插入代码片 二、源码#------------------------------------------------- #------------------------------------------------- # # Project c…

Vboxmanage改动uuid报错的解决的方法

我的环境: Virtualbox 4.3.10 r93012 操作系统:win7 问题:Virtualbox在使用拷贝的虚拟盘时会提示uuid冲突: Because a hard disk with uuid ‘’ already exists. 依照网上的说法,执行VBoxManage改动uuid报错&#xff…

QT源码交叉编译

交叉编译QT 源码 板子:全志 V3S , arm32位cpu ubuntu 虚拟机搭建好交叉编译链环境,添加环境变量 ok3399ubuntu:~$ echo $PATH /opt/OK3399-linux-release/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lo…

即将从TechReady5归来

TechReady是微软内部面向Services、DPE、TS等部门的技术会议,每年两次,这次是第5次。听了几天课,虽说很多内容有点旧,但其中还是有不少好的东东,呵呵。 TechReady5的第2天,Bill Gates给了一节General Sessi…

QT 发布程序到开发板

设置 IP 与开发板同一网段 设置一个device 设置开发板平台的 kit , 选择 device 设备为刚刚设置好的 pro 文件加入代码设置远程发布安装路径 INSTALLS target target.path /root/home/ftp5. 重新qmake工程完成设置 6. 是程序可以在板上运行, 之前这里一直…

Hibernate(十):n-n关联关系

背景:在实际开发中我们会遇到表的多对多关联,比如:一篇博客文章,它可以同时属于JAVA分类、Hibernate分类。 因此,我们在hibernate的学习文章系列中,需要学会如何使用hibernate来实现多对多的关联关系。 在h…