今天有需求要求多语言,也就是一下拉框,选择语言,立马提交变成E文那种。 想来简单,因为winform下做过N次,打开VS2005,新建项,添加资源文件,OK,将名字改成Msg.地区号.resx,然后zh-CN、en-US各一份,外加一个没地区号的默认资源。随后web-config里头addkey,一切都这么顺利成章; 现在环境如下:
vs2005,资源文件3份:Msg.zh-CN.resx Msg.en-US.resx Msg.resx,另外web-config中配置默认语言
<!--语言切换-->
<add key="DefaultLang" value="zh-CN"/>
<add key="1" value="zh-CN"/>
<add key="2" value="en-US"/> 然后Global.asax中Session_Start事件:
try
{
string lang = "";
if (this.Session["lang"] == null)
{
//设定语言到cookie
lang = ConfigurationManager.AppSettings["DefaultLang"];
this.Session["lang"] = lang;
}
}
catch (Exception ex)
{
Response.Redirect("~/notlang.aspx");
} 然后首页Page_Load中调用:
黑暗的一天来了,第一次我按照以往的经验调用:
string lang=""
if(this.Session["lang"]!=null)
lang= this.Session["lang"];
else
lang= System.Configuration.ConfigurationManager.AppSettings["DefaultLang"]; ResourceManager rm = new ResourceManager("命名空间.Msg",system.Reflection.Assembly.GetExecutingAssembly());
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(lang) 配置完毕:开始查Key rm.GetString("LoginTit",ci) 完了出错,我认为是我记错了new ResourceManager的第一个参数,改为("Msg",...),错误...仔细检查一编,web-config没错,地区名没错,session["lang"]正常获得web-config的值,最后运行至获取key就出错,仔细看看错误消息:未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源.请确保已将"iconresourc..."正确什么链接什么到程序集"XXXX",
我注意到"XXXX"看起来似乎是个随机字符串,是否是用VS2005自带IIS调试出的错,发布到win2003IIS,错误依旧,打开bin文件,我突然看到bin下生成的dll文件名与刚刚出错的"XXXX"是两个东西,晕,记着那个帖子说过VS2005web程序的程序集名是加密的,还牵扯到密钥什么的,不管了,我可不想解密,于是在调用前加上 string str = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
然后在加上
rh = new ResourceManager(str + ".Msg", System.Reflection.Assembly.GetExecutingAssembly()); //new ResourceHelper(this.Page);
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(ConfigurationManager.AppSettings["DefaultLang"]);
这次str保证与程序集名同步了,问题是,错误还是依旧:
未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源.请确保已将"iconresourc..."正确什么链接什么到程序集"XXXX", "XXXX"是可变的,随机的程序集名。小弟花悲愤为力量,花了半晚上在网上寻觅解决方法,但找到的大多都为winform、或无结果帖子,哪位大哥知道思路的点拨点拨,吐血求解啊!!!
vs2005,资源文件3份:Msg.zh-CN.resx Msg.en-US.resx Msg.resx,另外web-config中配置默认语言
<!--语言切换-->
<add key="DefaultLang" value="zh-CN"/>
<add key="1" value="zh-CN"/>
<add key="2" value="en-US"/> 然后Global.asax中Session_Start事件:
try
{
string lang = "";
if (this.Session["lang"] == null)
{
//设定语言到cookie
lang = ConfigurationManager.AppSettings["DefaultLang"];
this.Session["lang"] = lang;
}
}
catch (Exception ex)
{
Response.Redirect("~/notlang.aspx");
} 然后首页Page_Load中调用:
黑暗的一天来了,第一次我按照以往的经验调用:
string lang=""
if(this.Session["lang"]!=null)
lang= this.Session["lang"];
else
lang= System.Configuration.ConfigurationManager.AppSettings["DefaultLang"]; ResourceManager rm = new ResourceManager("命名空间.Msg",system.Reflection.Assembly.GetExecutingAssembly());
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(lang) 配置完毕:开始查Key rm.GetString("LoginTit",ci) 完了出错,我认为是我记错了new ResourceManager的第一个参数,改为("Msg",...),错误...仔细检查一编,web-config没错,地区名没错,session["lang"]正常获得web-config的值,最后运行至获取key就出错,仔细看看错误消息:未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源.请确保已将"iconresourc..."正确什么链接什么到程序集"XXXX",
我注意到"XXXX"看起来似乎是个随机字符串,是否是用VS2005自带IIS调试出的错,发布到win2003IIS,错误依旧,打开bin文件,我突然看到bin下生成的dll文件名与刚刚出错的"XXXX"是两个东西,晕,记着那个帖子说过VS2005web程序的程序集名是加密的,还牵扯到密钥什么的,不管了,我可不想解密,于是在调用前加上 string str = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
然后在加上
rh = new ResourceManager(str + ".Msg", System.Reflection.Assembly.GetExecutingAssembly()); //new ResourceHelper(this.Page);
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(ConfigurationManager.AppSettings["DefaultLang"]);
这次str保证与程序集名同步了,问题是,错误还是依旧:
未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源.请确保已将"iconresourc..."正确什么链接什么到程序集"XXXX", "XXXX"是可变的,随机的程序集名。小弟花悲愤为力量,花了半晚上在网上寻觅解决方法,但找到的大多都为winform、或无结果帖子,哪位大哥知道思路的点拨点拨,吐血求解啊!!!
解决方案 »
- DataTable提取部分列的数据。。。
- WinForm程序的控件多线程能共同访问?
- C# 怎么像 浏览器一样更新cookies呢?
- 无法连接Remoting服务原因分析(过年顶有分)
- 谁知道C#怎么实现曲线图啊。急!急!急!急!急!急!急!急!急!
- webbrowser显示Excel时的问题,有时间的请进!!
- 一楼安装了一个无线路由器,一楼的每台计算机通过安装无线网卡可以上网,但是我们三楼的计算机用同样的无线网卡确上不了网,谁有办法解决?
- 加载了dll的窗体后,退出主程序后报错内存错,怎么办??
- C#,如何,让代码自动创建类?(是不是:用:类工厂?)
- 再次提问,难道没有人知道C# Winform里面的Column的汉字是怎么弄上去的吗?
- C#中一个输出问题
- winforms的用武之地大吗?
通过配置文件自己做吧