在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编译报 undefined vtable问题

在类添加信号槽,继承 QObject 后编译,需要先清理项目 ,然后执行qmake, 再构建就不会出错,需要使用来moc编译一下支持信号槽源文件

安装DNN时,数据库连接字符串的设置

最近接触到了DNN,觉得这是一个东西。关于DNN的安装网上有很多文章。我在安装我的第一个DNN程序时,虽然看了那些文章,但是还是无济于事,有的时候,我的系统配置和别人的就是不一样。安装DNN程序时,程序自带的…

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

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

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

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

[YTU]_2800( 逗逗泡泡的保密电文)

Description 某电报局的电文保密的规律是将每个英文字母变成其后的第4个字母(很原始的那种啦),如A变成E,a变成e。最后四个字母(W,X,Y,Z或w,x,y,z)又变成前4个字母(A,B,C,D或a,b,c,d).非字母字符不变。输入一…

java BigDecimal去掉小数点后的零

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

Qt 多重继承时 moc 编译出错

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

网球术语英汉对照 【丰富词汇量,喜欢网球的路过说声。。】

A ace 发球时,对方接球完没有碰触到球之得分球 advantage 占先,打到deuce后优势之一方,分发球占先及接球占先 advantage for receiver 接发球方占先 advantage for server 发球方占先 all 平(比分相同) alley 单打与双…

关于爬虫的一些工具。

网络 通用 urllib -网络库(stdlib)。requests -网络库。grab – 网络库(基于pycurl)。pycurl – 网络库(绑定libcurl)。urllib3 – Python HTTP库,安全连接池、支持文件post、可用性高。httplib2 – 网络库。RoboBrows…

Qt 多线程并发高阶类QtConcurrent 的使用

#include <QCoreApplication> #include <QtConcurrent> #include <QDebug> #include <iostream> #include <csignal> #include <unistd.h> using namespace std;int g_1 0;// 测试中断方式 void signalHandler(int signum) {qDebug() &l…

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

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

使用postman发送HttpServletRequest请求

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

QT VS环境安装后出现生成的程序can not start, can not find Qt pligins “windos“ 问题 2021-06-13

QT VS环境安装后出现生成的程序can not start 问题原因: windows kit 没有配置到系统环境变量 解决方法&#xff1a; 添加环境变量

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

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

JavaScript 异常处理

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

Oracle根据年份分组

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

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

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

做有意义的事

...现实的社会,要有现实的眼光... 在现在的生活中不公平的,不平等的事情,很多很多, 有时你是不是会想 为什么那个人什么都不行,确能进个好的公司? 为什么有能力的人, 人家确不用你哪?? ___关系. 不成认不行,人家有关系就是比你强. ___金钱. 没人家有钱,送不起礼,你就只能靠…