- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何确定 CultureInfo.CurrentCulture 返回的 CultureInfo 实例是否具有所有默认值,或者是否已由用户自定义。
我已经使用以下 LINQPad 代码段和 LINQPad 命令行运行程序进行了一些测试。
var ci = CultureInfo.CurrentCulture;
var dtf = ci.DateTimeFormat;
ci.Name.Dump("CultureInfo");
dtf.FullDateTimePattern.Dump("FullDateTimePattern");
dtf.LongDatePattern.Dump("LongDatePattern");
dtf.LongTimePattern.Dump("LongTimePattern");
我在区域对话框中选择英语(南非)作为我的格式,我的代码片段报告如下。
E:\Junk>lprun CurrentCulture.linq
CultureInfo: en-ZA
FullDateTimePattern: dd MMMM yyyy hh:mm:ss tt
LongDatePattern: dd MMMM yyyy
LongTimePattern: hh:mm:ss tt
然后我将长日期格式更改为隐藏当天的前导零,并将长短时间更改为 24 小时制。该代码段现在报告了这一点。
E:\Junk>lprun CurrentCulture.linq
CultureInfo: en-ZA
FullDateTimePattern: d MMMM yyyy HH:mm:ss
LongDatePattern: d MMMM yyyy
LongTimePattern: HH:mm:ss
虽然区域性名称保持不变,但我更改的属性向我展示了新值。
我的问题是是否有一个属性或方法可以告诉我 CurrentCulture 返回的文化是否已从其默认值(在本例中为 en-ZA)更改。我认为 CultureInfo.UseUserOverride 可能是该属性,但在任何一种情况下它都会返回 true。
最佳答案
您不能询问文化是否已被用户更改,但您可以请求用户未更改的文化。
new CultureInfo(CultureInfo.CurrentCulture.Name, false);
或
CultureInfo::GetCultureInfo(CultureInfo.CurrentCulture.Name);
在其中任何一个中,UseUserOverrides 属性都将为 false。
只有默认区域性可以让其数据被用户覆盖。管理员可以通过安装自定义替换区域性来覆盖任何区域性中的数据。您可以通过检查 CultureTypes 属性是否存在 CultureTypes.ReplacementCultures 标志来检测到这一点。在这种情况下无法获取原始数据。
请注意,如果您实际上是在尝试编写基于此更改其行为的代码,那么您编写的代码可能会被 future 的版本破坏。由于修复了错误,数据在不同版本之间确实发生了变化。
关于c# - 如何检测CurrentCulture是否被用户自定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280754/
我有一个使用任务的应用程序。我们还修改了 cultureInfo(我们使用 EN-US 语言,但保留日期/数字格式),我们使用 .Net 4.0。 应用程序有很多线程和任务,我们有一个用于创建任务/线
谁能告诉我 Application.CurrentCulture 和 Thread.CurrentCulture 之间的区别。 线程有CurrentCulture 和CurrentUICulture。
我需要根据每种文化的资源文件在运行时更改文化。 我需要根据两种文化更改表单中控件的属性其中有指定的.resx文件 resorces1.aspx.resx // default resorces1.as
在 .net 2 winforms 应用程序中,为整个应用程序设置文化的好方法是什么? 为每个新线程设置 CurrentThread.CurrentCulture 是重复且容易出错的。 理想情况下,我
CultureInfo.CurrentCulture 可以为空吗? 空值会使我的程序崩溃,这是我不想要的。所以我问,为了安全起见,我需要做什么吗? var culture = CultureInfo.
我有一个具有以下命名空间的窗口 xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib" 包含一个文本框 根据 Gusd
正如您所看到的,我尝试将线程的 CurrentCulture 捕获到实例变量中,以便我可以在整个类中重用它,但它并没有持久存在。在上面的照片中,我显示即使在分配它之后,值仍然不同。这是为什么? 最佳答
我们的应用程序允许用户更改他们运行它的文化,并且该文化可以与底层操作系统文化不同。我发现这样做的唯一方法是为每个线程设置 Thread.CurrentThread.CurrentCulture 和 T
Thread.CurrentCulture 从哪里获取数据?客户端(浏览器)或服务器。 另一个问题,这是找出用户文化的正确方法吗? 谢谢 最佳答案 Thread.CurrentCulture 获取正在
我用一个按钮创建了一个简单的窗口应用程序 public partial class Form1 : Form { public Form1() { Initialize
我有一个错误报告,其中 double.Parse(input) 在输入 "0.69803923368454" 时抛出以下异常: FormatException: Unknown char: . Sys
我的解决方案中有多个项目:我有一个名为“Api”的 WebApi 项目,它引用了一个名为“Models”的类库。我在我的网络配置中设置全局化信息是这样的: 我的“模型”项目中有一些资源 (.resx
在 iPhone 上,用户可以选择他的显示语言和用于格式化的区域。 显示语言相当于.NET的Thread.CurrentUICulture,即UI的语言。 格式化区域等同于 .NET 的 Thread
尽管我本地化了当前文化,但以下代码返回英文名称。 List languageList = new List(); CultureInfo[] cultureList = CultureInfo.Get
在较旧的 asp.net 项目中,我们通常在 Application_BeginRequest - 处理程序 (Global.asax) 中设置语言,如下所示: System.Threading.Th
使用: Console.WriteLine(System.Globalization.CultureInfo.CurrentCulture.ToString()); 我得到 “en-US”。 我应该在
我将 Global.asax 设置为: protected void Application_BeginRequest(object sender, EventArgs e) {
根据我的研究,不可能更改线程的时区。所以我的问题是为什么你不能? 我原以为将您的应用程序的文化切换到特定国家/地区也会改变这种情况,这似乎是 IMO 的预期行为。 编辑 修改后我明白了为什么默认情况下
我试图获取客户的国家/地区,因此我使用 CultureInfo.CurrentCulture。问题是,当我的加拿大客户使用我的网站时,他们显示为美国人。 看起来 CultureInfo.Current
使用完整的 .NET 框架,您可以使用以下方法获取/设置当前线程的文化和 UI 文化: Thread.CurrentThread.CurrentCulture = culture; Thread.Cu
我是一名优秀的程序员,十分优秀!