深入Resource实现多语言支持的应用详解

Posted tianciliangen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入Resource实现多语言支持的应用详解相关的知识,希望对你有一定的参考价值。

首先为假设有一个应用程序CAStudy,接着右键添加一个资源文件Resource1.resx

Resource1.resx里面如下:

技术分享图片

Main函数如下:

static void Main()
{
    ResourceManager resourceManager = new ResourceManager(
        "CAStudy.Resource1",
        Assembly.GetExecutingAssembly());

    Console.WriteLine("String1 : " + resourceManager.GetString("String1"));
    Console.WriteLine("String1 : " + Resource1.String1);
    Console.ReadLine();
}

使用的ResourceManager构造函数如下:

[SecuritySafeCritical]
public ResourceManager(string baseName, Assembly assembly);

在应用程序编译的时候Resource1.resx就会被编译成Resource1的一个类。所以如果你不知道baseName是什么,也可以这样:

ResourceManager resourceManager = new ResourceManager(
                Resource1.ResourceManager.BaseName,
                Assembly.GetExecutingAssembly());

或者你查看IL代码,可以发现如下:

技术分享图片 

运行结果如下:

技术分享图片 

假设我们要支持 英语-美国(en-US) 的人来访问的话:

技术分享图片

那么我们可以复制Resource1.resx ,从而生成Resource1.en-US.resx。

注意除了中间多出来了en-US之外,其他都相同,

当然,如果你需要支持中文-台湾,那么可以生成Resource1.zh-TW.resx.

Resource1.en-US.resx内容如下:

技术分享图片 

可以看到,现在的是Hello。

使用的时候只需要修改

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

为什么修改 CurrentUICulture 就可以了呢?

// 摘要:
// 获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源。
public CultureInfo CurrentUICulture { get; set; }

完整的Main函数如下:

static void Main()
{
  ResourceManager resourceManager = new ResourceManager(
    Resource1.ResourceManager.BaseName,
    Assembly.GetExecutingAssembly());

  Console.WriteLine("String1 :" + resourceManager.GetString("String1"));
  Console.WriteLine("String1 :" + Resource1.String1);

  Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
  Console.WriteLine("String1 :" + resourceManager.GetString("String1"));
  Console.WriteLine("String1 :" + Resource1.String1);

  Console.ReadLine();
}

运行结果如下:

技术分享图片

 

http://www.jb51.net/article/36772.htm













以上是关于深入Resource实现多语言支持的应用详解的主要内容,如果未能解决你的问题,请参考以下文章

WPF使用X:Static做多语言支持

WPF使用X:Static做多语言支持

.NET网站国际化策略

多语言支持的最佳状态管理?

nopCommerce 3.9 大波浪系列 之 路由扩展 [多语言Seo的实现]

nopCommerce 3.9 大波浪系列 之 路由扩展 [多语言Seo的实现]