请教:关于资源本地化的问题我有个用C#写的测试资源文件的解决方案(ResTest),由3个项目组成,分别是ConsoleApplication1,ConsoleApplication2,ConsoleApplication3。
其中ConsoleApplication1 是主应用程序,ConsoleApplication2 和 ConsoleApplication3分别为ConsoleApplication1 生成 Res.zh-CN.resources和 Res.resources资源文件。(Res.zh-CN.resources和 Res.resources已经跟ConsoleApplication1项目关联好)各程序代码如下:
ConsoleApplication1:
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Resources;
using System.Reflection;
using System.Globalization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly SampleAssembly= Assembly.GetExecutingAssembly();
System.Resources.ResourceManager m_rm = null; Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name); m_rm = new ResourceManager("ConsoleApplication1.Res", SampleAssembly);
Console.Write("Al00001 =" + m_rm.GetString("Al00001")); Console.Read();
} }}
ConsoleApplication2:
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;using System.Resources;namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
ResourceWriter rw = new ResourceWriter("..\\..\\..\\ConsoleApplication1\\Res.zh-CN.resources"); rw.AddResource("Al00001", "您好");
rw.Close(); Console.WriteLine("Res.zh-CN.resources builded OK.");
Console.ReadKey(); }
}
}ConsoleApplication3:
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Resources;namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
ResourceWriter rw = new ResourceWriter("..\\..\\..\\ConsoleApplication1\\Res.resources"); rw.AddResource("Al00001", "Hello");
rw.Close(); Console.WriteLine("Res.resources builded OK.");
Console.ReadKey(); }
}
}程序目录如下:
ResTest
|
|——ConsoleApplication1
|——ConsoleApplication2
|——ConsoleApplication3
各项目生成后,运行ConsoleApplication1,得到运行结果:
CurrentCulture is zh-CN.
Al00001 =Hello我的问题就是:我的Culture 是zh-CN, 为什么 “Al00001 =Hello”, 而不是 “Al00001 =您好” ?
谢谢!
本机环境:
windows 2003中文版 + vs2005 中文版
操作系统的区域选项 为“中文(中国)”另:我在vs2003下测试以上代码,得到的结果是:
CurrentCulture is zh-CN.
Al00001 =您好难道vs2005和vs2003对于资源本地化,有不同的处理吗?
恳请高手指点。
其中ConsoleApplication1 是主应用程序,ConsoleApplication2 和 ConsoleApplication3分别为ConsoleApplication1 生成 Res.zh-CN.resources和 Res.resources资源文件。(Res.zh-CN.resources和 Res.resources已经跟ConsoleApplication1项目关联好)各程序代码如下:
ConsoleApplication1:
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Resources;
using System.Reflection;
using System.Globalization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly SampleAssembly= Assembly.GetExecutingAssembly();
System.Resources.ResourceManager m_rm = null; Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name); m_rm = new ResourceManager("ConsoleApplication1.Res", SampleAssembly);
Console.Write("Al00001 =" + m_rm.GetString("Al00001")); Console.Read();
} }}
ConsoleApplication2:
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;using System.Resources;namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
ResourceWriter rw = new ResourceWriter("..\\..\\..\\ConsoleApplication1\\Res.zh-CN.resources"); rw.AddResource("Al00001", "您好");
rw.Close(); Console.WriteLine("Res.zh-CN.resources builded OK.");
Console.ReadKey(); }
}
}ConsoleApplication3:
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Resources;namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
ResourceWriter rw = new ResourceWriter("..\\..\\..\\ConsoleApplication1\\Res.resources"); rw.AddResource("Al00001", "Hello");
rw.Close(); Console.WriteLine("Res.resources builded OK.");
Console.ReadKey(); }
}
}程序目录如下:
ResTest
|
|——ConsoleApplication1
|——ConsoleApplication2
|——ConsoleApplication3
各项目生成后,运行ConsoleApplication1,得到运行结果:
CurrentCulture is zh-CN.
Al00001 =Hello我的问题就是:我的Culture 是zh-CN, 为什么 “Al00001 =Hello”, 而不是 “Al00001 =您好” ?
谢谢!
本机环境:
windows 2003中文版 + vs2005 中文版
操作系统的区域选项 为“中文(中国)”另:我在vs2003下测试以上代码,得到的结果是:
CurrentCulture is zh-CN.
Al00001 =您好难道vs2005和vs2003对于资源本地化,有不同的处理吗?
恳请高手指点。
你说的[assembly: AssemblyVersion(??),我都一样了,但是结果还是 Al00001 =Hello,
我觉得资源文件应该是编译到 ConsoleApplication1 ,要不怎么能提示出Al00001 =Hello。你试运行我的代码,看结果是不是和我的一样?等待
resources = new ResourceManager(typeof(Form1));如果你将上面那句代码改成这样,应该就可以了:
m_rm = new ResourceManager("ConsoleApplication1.Res" + CultureInfo.CurrentCulture.Name, SampleAssembly);
Message="未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“ConsoleApplication1.Res.zh-CN.resources”正确嵌入或链接到程序集“ConsoleApplication1”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。"
Source="mscorlib"根据错误提示,我仍然不能知道,到底错在什么地方,因为Res.zh-CN.resources 我是跟ConsoleApplication1 关联着的。难道编译时,编译器没有自动编译进去吗?困惑。。
http://blog.csdn.net/alvachien/archive/2006/09/24/1272441.aspx
对我来说,非常要价值。正在研究当中
你应将 ConsoleApplication1 目录下的 Res.zh-CN.resources 文件包含在 ConsolApplication1 项目中,并设置生成操作为“嵌入的资源”