zoukankan      html  css  js  c++  java
  • .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"

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


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

  • 相关阅读:
    二维动态规划(2)
    细节是否真的打败爱情,十年后你还会爱我吗?
    C++的四种cast操作符的区别类型转换
    纯虚函数
    二维动态规划
    1,2,...n n个数m个丢失,找出丢失的数
    虚拟内存管理技术
    C++ 面试题总结
    【转】图的邻接链表 adjacent list of graph
    CIOCPServer的数据结构定义及内存池方案
  • 原文地址:https://www.cnblogs.com/finema/p/540728.html
Copyright © 2011-2022 走看看