完全详解--使用Resource实现多语言的支持

简介:

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

Resource1.resx里面如下:

image

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代码,可以发现如下:

clip_image002

 

运行结果如下:

clip_image002[5]

 

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

clip_image002[7]

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

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

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

 

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

clip_image004

 

可以看到,现在的是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();
}
 

运行结果如下:

clip_image002[9]






本文转自LoveJenny博客园博客,原文链接:http://www.cnblogs.com/LoveJenny/archive/2011/08/02/2125442.html,如需转载请自行联系原作者
目录
相关文章
|
Kubernetes 网络协议 Docker
k8s教程(service篇)-资源定义详解
k8s教程(service篇)-资源定义详解
87 0
|
6月前
|
存储 API 数据库
如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?
本文介绍了如何在 EF Core 的 Code First 模式下使用自定义类型转换器实现 JsonDocument 和 DateTime 类型到 SQLite 数据库的正确映射。通过自定义 ValueConverter,实现了数据类型的转换,并展示了完整的项目结构和代码实现,包括实体类定义、DbContext 配置、Repositories 仓储模式及数据库应用迁移(Migrations)操作。
109 6
如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?
|
7月前
|
XML 自然语言处理 搜索推荐
Web2py 的多语言支持也太厉害了吧!国际化与本地化策略,让你的应用走向全球!
【8月更文挑战第31天】在全球化背景下,软件需支持多语言以满足不同用户需求。Web2py作为强大Web应用框架,提供了丰富的多语言支持功能,使开发者能轻松实现国际化与本地化。通过创建语言文件夹并利用`T`函数获取翻译文本,可实现界面及动态内容的多语言展示,并支持日期、时间及数字的本地化显示。此外,表单验证错误消息也可进行翻译,从而提供更佳的用户体验。无论大小项目,Web2py均能满足多语言需求。
64 1
|
7月前
|
开发者 前端开发 Java
构建多租户应用程序:深入探讨Entity Framework Core中的租户支持策略与实现
【8月更文挑战第31天】Vaadin 是一个流行的 Java Web 框架,提供丰富的 UI 组件库,助力开发者快速构建美观且功能强大的 Web 应用。本文深入探讨 Vaadin 组件库,介绍如何基于功能性、可访问性、性能和可定制性选择合适的组件,并提供示例代码,帮助开发者做出明智决策。无论是简单的输入框还是复杂的表格,Vaadin 都能满足各种需求。
63 0
|
8月前
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
92 3
|
Android开发
【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 )
【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 )
407 0
【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 )
|
监控 Java Spring
扩展JavaMelod支持自定义监控点
扩展JavaMelod支持自定义监控点
222 0
扩展JavaMelod支持自定义监控点
|
机器学习/深度学习 分布式计算 Java
浅谈 Spark 的多语言支持(修订版)
Spark 设计上的优秀无容置疑,甫一出道便抢了 Hadoop 的 C 位,在开源大数据的黄金十年里一时风头无两,在人工智能时代的当下仍然能够与时俱进,不可谓不牛逼。架构和设计上的卓越,不遑多言,美中不足之处自然也有不少,比如调度模型跟 MapReduce 这种计算范式过于耦合,Spark 最近引入 Barrier 调度模式就是为了支持深度学习这种新的计算类型,所幸在于对框架的改动不会伤经动骨。
|
机器学习/深度学习 分布式计算 Java
浅谈 Spark 的多语言支持
Spark架构和设计上的优秀毋庸置疑,从一出道便抢了 Hadoop 的 C 位。在开源大数据的黄金十年一时风头无两,在当下人工智能时代仍然能够与时俱进,通天之处不遑多言,美中不足之处也有不少。小的方面,比如调度模型跟 MapReduce 这种计算范式过于耦合,Spark 最近引入 Barrier 调度模式就是为了支持深度学习这种新的计算类型,所幸在于对框架的改动不会伤筋动骨;有些缺陷则不然,影响全局,调整起来绝非易事。