.net 的资源与本地化

关于ASP.NET 2.0 中的资源与本地化
请看:http://www.microsoft.com/china/msdn/library/webservices/asp.net/BasicInstincts0608.mspx?mfr=true

关于Resources and Localization
请看:http://msdn.microsoft.com/msdnmag/issues/06/05/BasicInstincts/

以下是我在微软新闻组提出的问题及得到的答案。
2006年11月3日 10:11
microsoft.public.cn.dotnet.languages.csharp
请教:关于资源本地化的问题

1、
我有个用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();

        }
    }
}

各项目生成后,运行ConsoleApplication1,得到运行结果:
CurrentCulture is zh-CN.
Al00001 =Hello

我的问题就是:我的Culture 是zh-CN, 为什么 “Al00001 =Hello”, 而不是
“Al00001 =您好” ?


谢谢!


本机环境:
windows 2003中文版 + vs2005 中文版
操作系统的区域选项 为“中文(中国)”

2、
你好,

由于您使用了ResourceWriter直接创建资源文件,所以您在获取资源的时候应该这样写:m_rm = ResourceManager.CreateFileBasedResourceManager("Res", "..\\..\\", null);
希望可以对您的问题有所帮助。


胡文毅
在线技术支持工程师
微软全球技术支持中心
---------------------------------------------------------------------------------------
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。

3、
使用 ResourceManager.CreateFileBasedResourceManager,对 程序的发布有点不好,并且没能用上 .net提供的默认程序集的优势。

另:我在vs2003下测试问题中所列的代码,得到的结果是:
CurrentCulture is zh-CN.
Al00001 =您好

难道vs2005和vs2003对于资源本地化,有不同的处理吗?

4、
VS2005默认使用resx(xml格式)资源文件。
您可以在生成资源的时候使用ResXResourceWriter,代码如下
        ResXResourceWriter rsxw = new ResXResourceWriter("..\\..\\..\\ConsoleApplication1\\Res.zh-CN.resx");
            rsxw.AddResource("Al00001", "您好");
            rsxw.Close();
关于框架资源更详细的内容参考如下:
Microsoft .NET 框架资源基础
http://www.microsoft.com/china/MSDN/library/netFramework/netframework/Nfdnformswinforms02202003.mspx?mfr=true
.Resx 文件格式
http://msdn2.microsoft.com/zh-cn/library/ekyft91f(VS.80).aspx

如果您还是想直接使用resources文件,您需要手动将本地资源文件编译成附属程序集,方法如下:
al /t:lib /embed:Res.zh-CN.resources,ConsoleApplication1.Res.zh-CN.resources /culture:zh-CN /out:ConsoleApplication.resources.dll
您也可以使用Post-build Event:
md "$(TargetDir)zh-CN"
$(FrameworkDir)\$(FrameworkVersion)Al.exe /t:lib /embed:"$(ProjectDir)Res.zh-CN.resources",ConsoleApplication1.Res.zh-CN.resources /culture:zh-CN /out:"$(TargetDir)zh-CN\ConsoleApplication1.resources.dll"

希望对您的问题有所帮助。


胡文毅
在线技术支持工程师
微软全球技术支持中心

原文地址:https://www.cnblogs.com/finema/p/540728.html