asp.net从指定文化获取.resx的所有资源(ResourceManager.GetResourceSet)

我首先在堆栈溢出时遇到了类似于我的问题: Loop through all Resources in ResourceManager – C#.它只解决了我需要做的部分工作.当您在特定文化的资源文件中请求条目时,如果没有存在,它将默认返回中性文化资源文件.

我需要遍历给定资源文件的每个条目,而GetResourceSet需要一个文化.例如,我有一个中性资源文件,其中包含3个条目,以及一个文化特定资源文件,其中包含1个条目的中性文件.

我的中性资源示例文件是MyResource.resx,我的特定于文化的资源示例文件是MyResource.en-gb.resx.以下代码显示了我当前正在尝试遍历并访问所有资源条目的方式.

Dim cultInfo as New CultureInfo(culture)
For Each entry As System.Collections.DictionaryEntry In myResourceManager.GetResourceSet(cultInfo,True,True)

Next

中性资源文件条目

> FullName /全名
>电话号码/电话号码
>州/州

文化特定资源文件输入

>州/县

当我为特定文化调用GetResourceSet时,我只返回1个条目.我期待(并希望)在覆盖一个特定于文化的条目时取回所有3个条目.这是我想要的回报:

> FullName /全名
>电话号码/电话号码
>州/县

无论如何我能做到这一点吗?谢谢.

解决方法

ResourceManager对象的GetString方法正确处理资源文件的遍历,以根据区域性查找给定键的正确值.可以使用 CultureInfo.InvariantCulture获取基本/中性/默认资源文件,它为您提供资源文件的所有可能密钥(假设您以这种方式设置资源文件).

循环使用ResourceManager的GetResourceSet方法中的DictionaryEntry对象,基于Invariant Culture,然后使用传入的特定文化为每个Key调用GetString,您将根据文化获得给定键的正确值.

For Each entry As DictionaryEntry In myResourceManager.GetResourceSet(CultureInfo.InvariantCulture,True)
     Dim strKey as String = entry.Key.ToString()
     Dim strValue as String = myResourceManager.GetString(entry.Key.ToString(),cultInfo)
Next

希望这可以帮助!

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....