c#:在 dotnet 类中是不是有一个属性可以说明“当前”文化是不是是实际的默认文化?

Posted

技术标签:

【中文标题】c#:在 dotnet 类中是不是有一个属性可以说明“当前”文化是不是是实际的默认文化?【英文标题】:c# : In a dotnet class is there a property that states if the "Current" culture is actual the default culture?c#:在 dotnet 类中是否有一个属性可以说明“当前”文化是否是实际的默认文化? 【发布时间】:2011-03-28 16:24:38 【问题描述】:

某个类中是否有一个属性可以告诉我当前文化是否实际上是默认文化。

类似于本地化如何与 winform 一起使用。如果语言是默认的,它会在一个表格中说明。

假设我在 en-US - 我如何通过代码判断 en.US 是否是实际默认值?

我需要为一些 .net 不支持的 XML 文件实现一些本地化,因此我想实现自己的 ...

并按照winforms的工作方式进行操作,即

nameofxml.default.xml(这是默认本地)
nameofXml.de-de.xml(这是德语)

属性是否存在?

【问题讨论】:

默认为“不变文化”还是默认为“系统语言环境”? 【参考方案1】:

System.Globalization.CultureInfo.CurrentCulture 表示您系统的控制面板区域设置,而System.Globalization.CultureInfo.CurrentUICulture 对应于系统的输入 UI 语言设置(除非您安装了多语言用户界面,否则您无法更改)。

因此,您可以使用以下代码 sn-p 来确定“默认”文化:

using System.Globalization;
// N.B. execute the following line *before* you programmatically change the CurrentCulture
// (if you ever do this, of course)

// Gets the CultureInfo that represents the culture used by the current thread
CultureInfo culture = CultureInfo.CurrentCulture;
string code = culture.IetfLanguageTag; // e.g. "en-US", "de-DE", etc.

然后您可以使用code 来定位您的 .xml 文件。

【讨论】:

【参考方案2】:

您可以使用NeutralResourcesLanguageAttribute 在程序集级别声明嵌入式资源属于特定文化。

IIRC,如果所需的文化是嵌入在程序集中的文化,资源管理器可以通过这种方式优化资源加载过程。

由于您正在滚动自己的本地化实现,我不知道这有什么帮助,但您可以使用该属性来指示直接嵌入到程序集中的 XML 本地化信息的文化是一种特定的文化,并且如果您发现程序集中声明的文化与您正在寻找的所需文化不匹配,则默认搜索附属程序集或其他自定义后台存储。

【讨论】:

【参考方案3】:

CultureInfo.CurrentCulture 是一个静态成员,“获取表示当前线程使用的区域性的 CultureInfo”。如果您只包含 System.Globalization 命名空间,则可以从任何类访问它。

文档:http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

【讨论】:

以上是关于c#:在 dotnet 类中是不是有一个属性可以说明“当前”文化是不是是实际的默认文化?的主要内容,如果未能解决你的问题,请参考以下文章

dotnet C# 基础 为什么 GetHashCode 推荐只取只读属性或字段做哈希值

c#如何在父类(或是接口)当中定义一个子类必须要重写的字段(属性)?

C# 重载在类中找到的对象的属性

C#如何在另外一个类中访问Form中控件属性?

如何使用数据集在 C# 或 dotnet 中查找主键列名称?

C#实体类中如何定义泛型集合类型的属性?