标签: cultureinfo

使用InvariantCulture或CurrentCulture格式化异常消息?

抛出异常时,我经常传入一个格式化的字符串,该字符串公开有关已发生问题的详细信息.如果可能的话,我总是指定格式化提供程序(这是一种很好的做法,因为否则您可能会忘记确定哪种文化是合适的,并且默认情况下是当前文化,这可能会导致许多错误).

这是一个例子:

throw new InvalidOperationException(
    string.Format(
        CultureInfo.CurrentCulture,
        "{0} is a bad number.",
        number));
Run Code Online (Sandbox Code Playgroud)

我很想使用CurrentCulture,如上所示,因为异常消息是针对人类的(当然,代码永远不会对异常消息本身起作用).消息将使用客户端的文化格式化,因此每当我需要将其显示给我的客户端时,它看起来很不错.

但是,除了向用户显示消息外,还可以将异常记录到日志文件中.我看到很多邮件都放在我的日志文件中,各种文化用于格式化它们.蛮丑的!在这种情况下,InvariantCulture更合适或者可能是托管日志文件的服务器的文化.

这里的要点是,在格式化异常时,您永远不会知道您的受众,因此在格式化时似乎无法确定要使用的文化.如果能够将格式推迟到捕获异常的位置,那将会很棒,但这将远远超出.NET中实现异常的方式.

那你对此有何看法?

.net c# resources exception cultureinfo

3
推荐指数
1
解决办法
1912
查看次数

FxCop CA1305:CurrentCulture与CurrentUICulture

所以,我有一些资源文件用于本地化.它们是可以格式化的字符串.

例如:

MyResource.resx
 Title: "MyApp - Ver: {0}"
Run Code Online (Sandbox Code Playgroud)

我然后通过这样做返回它:

public String Title
{
    get { return String.Format(CultureInfo.CurrentUICulture, MyResources.Title, 1); }
}
Run Code Online (Sandbox Code Playgroud)

我理解CurrentUICulture和CurrentCulture之间的区别,但是FxCop告诉我使用CurrentCulture吗?

c# cultureinfo string-formatting currentculture currentuiculture

3
推荐指数
2
解决办法
1815
查看次数

为什么DateTimeFormatInfo.GetAllDateTimePatterns在不同的.NET版本中返回不同的结果?

我在当前项目中做了一些全球化工作,我遇到了一个奇怪的行为.我在Windows 7上运行,只安装了英语 - 美国,我的应用程序在.NET 3.5上运行.

给出以下代码段:

var culture = new CultureInfo("zh-CN", true);
var formats = culture.GetAllDateTimePatterns('D');
Run Code Online (Sandbox Code Playgroud)

在.NET 4下,返回以下格式:

    yyyy'?'M'?'d'?'
    yyyy'?'M'?'d'?',dddd 
    dddd,yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)

这是控制面板中的日期和时间格式对话框显示的内容(我的目标).

但是在.NET 3.5(及更早版本)中,返回以下内容:

   yyyy'?'M'?'d'?'
   yyyy-MM-dd
   dddd, yyyy-MM-dd
   dddd, yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)

我去检查了使用EnumDateFormatsExEx(和早期版本)返回了什么值,它与.NET 4的结果相匹配.

差异不会打扰我; 我的问题是为什么结果不同?我认为底层实现是在呼唤EnumDateFormatsExEx或类似,但在我解雇了Ilspy后,我没有看到任何类似的东西.我想显示控制面板中显示的相同列表,所以当格式不同时我感到很惊讶.我认为格式列表将来自操作系统,并且在运行时版本之间没有区别.

c# globalization cultureinfo

3
推荐指数
1
解决办法
509
查看次数

特定于文化的DateTime字符串在平台之间不一致

我有一个测试应用程序,允许用户从ComboBox中选择文化,并在多行TextBox中显示文化特定日期.代码如下:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        comboBox1.Items.AddRange(
            CultureInfo.GetCultures(CultureTypes.SpecificCultures));
    }

    private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        CultureInfo selectedCulture = comboBox1.SelectedItem as CultureInfo;
        DateTime currentDate = DateTime.Now;

        textBox1.Text =
            "My Date : " + currentDate.ToString() + Environment.NewLine +
            "Culture Specific Date: " + currentDate.ToString(selectedCulture);
    }
}
Run Code Online (Sandbox Code Playgroud)

我注意到如果选择"ar-SA",阿拉伯语(沙特阿拉伯),那么当我在不同的机器上运行应用程序时,我会看到不同的结果.

在Windows 7计算机上,文本框显示:

My Date : 4/11/2012 4:07:09 PM
Culture Specific Date: 19/05/33 04:07:09 ?

在Windows XP计算机上,文本框显示:

My Date : 4/11/2012 4:07:09 PM
Culture Specific Date: 20/05/33 04:07:09 ? …

.net c# datetime cultureinfo currentculture

3
推荐指数
1
解决办法
360
查看次数

在c#中找出字符串日期的日期时间格式

我正在申请.该应用程序使用日期格式,如 "2012-11-21 15:22:35".
我已经知道格式了"yyyy-MM-dd HH:mm:ss".但是,如何以编程方式查找任意输入字符串的日期和时间格式?有没有办法做到这一点?

c# globalization datetime cultureinfo internationalization

3
推荐指数
3
解决办法
1万
查看次数

.NET CultureInfo ru和ru-RU之间的区别

我在CultureInfo类中发现了一件有趣的事情.我在ASP.NET中编写了一个应用程序,我正在使用Thread.CurrentThread.CurrentCulture当前选择的语言,并且:

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(alias);
Run Code Online (Sandbox Code Playgroud)

有两个地方我可以在一个地方设置当前线程的文化,就像这样:

  1. Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru");

  2. Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru-RU");

然后我突然发现文化(1)与文化(2)不同,但两者都是俄语.

我做错了还是微软喝醉了?

编辑

@Tim Schmelter

        var culture = CultureInfo.GetCultureInfo("ru");
        var culture2 = CultureInfo.GetCultureInfo("ru-RU");
        if (Equals(culture, culture2))
        {
            Console.Write(true);
            return;
        }
        Console.Write(false);
Run Code Online (Sandbox Code Playgroud)

问题是 - "为什么微软将"ru"和"ru-RU"分开?

.net c# cultureinfo

3
推荐指数
2
解决办法
8676
查看次数

CultureInfo和ISO 639-3

我正在寻找一种CultureInfoISO 639-3语言代码构造对象的方法.我没有在MSDN中找到任何关于它的内容,并试图从所有文化列表中获取它不起作用...

CultureInfo cInfo = CultureInfo.GetCultures(CultureTypes.AllCultures)
                         .FirstOrDefault(r => String.Equals(r.ThreeLetterISOLanguageName, "CCH", StringComparison.CurrentCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)

将始终返回null(请注意,"CCH"是ISO-639-3列表中的一种语言).

任何想法都表示赞赏,谢谢!

.net c# culture iso cultureinfo

3
推荐指数
2
解决办法
4612
查看次数

将"de"添加到es-ES CultureInfo DateTime C#

可能是愚蠢的问题,但我以前没有和Culture一起工作过.该日期的资产需要是:

MMMM dd"de"yyyy(没有引用"de").

junio 1 de 2015

我现在拥有的:

CultureInfo ci = new CultureInfo("es-ES", false);
string date = DateTime.Now.ToString("MMMM dd REPLACE yyyy", ci).Replace("REPLACE", "de");
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种"编程更正确"的做法,我不知道这样做而不是做 string.Replace

c# datetime cultureinfo

3
推荐指数
1
解决办法
274
查看次数

c#:从国家/地区代码中获取国家名称

我正在尝试使用c#从国家/地区代码中获取国家/地区名称

例如 :

  • fr-fr 让我成为法国
  • it-it 让我意大利

我的代码的问题是我没有得到这个名字,而是这样的信息:

French (France)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

var cultureInfo = new CultureInfo("fr-fr");
var result : cultureInfo.EnglishName
Run Code Online (Sandbox Code Playgroud)

我的结果是"French (France)"代替法国.

我已经设法通过使用cultureInfo的parent属性获得我想要的东西,但我不确定它是否是一个好方法.

c# cultureinfo

3
推荐指数
2
解决办法
4029
查看次数

字符串串联Visual Studio 2019上的int.ToString()错误

将Visual Studio 2019从v16.2.5更新到v16.3.5之后,在我使用字符串连接的每个位置的应用程序中都发生了一些错误。

例如:

int x = 5;
string y = x + " years";
Run Code Online (Sandbox Code Playgroud)

有什么变化?文化如何影响int? 在此处输入图片说明

c# cultureinfo visual-studio

3
推荐指数
1
解决办法
88
查看次数