【问题标题】:in C#, Is it possible to specifies category argument like setlocale() in C++?在 C# 中,是否可以在 C++ 中指定像 setlocale() 这样的类别参数?
【发布时间】:2014-04-04 12:18:59
【问题描述】:

我有这个 C++ 代码

static const int category[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY,                       LC_NUMERIC, LC_TIME};
int op;
...
/* op = 0;  => The entire locale. */
op = 3; /* => Affects monetary formatting information */
char *setl = setlocale(category[op], "fr-FR");

我发现

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR");
// OR
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

我认为必须相当于

setlocale(LC_ALL, "fr-FR");

但是在 C# 中,如何指定类别参数来更改程序的语言环境信息?

【问题讨论】:

    标签: c# internationalization culture


    【解决方案1】:

    您需要使用CultureInfo 类,它的成员为Clone,然后在该实例之后相应地更改任何单个信息。

    引用 MSDN 链接中的示例:

    // Clones myCI and modifies the DTFI and NFI instances associated with the clone.
    CultureInfo myCIclone = (CultureInfo) myCI.Clone();
    myCIclone.DateTimeFormat.AMDesignator = "a.m.";
    myCIclone.DateTimeFormat.DateSeparator = "-";
    

    之后

    Thread.CurrentThread.CurrentCulture = myCIclone;
    

    【讨论】:

    • 好的。但是setlocale()的每个类别对应的CultureInfo的属性是什么?
    • @PapyRef:除了已经呈现的 DateTimeFormat 之外,您还可以查看 NumberFormatInfo,它始终是 CultureInfo 类中 NumberFormat 属性的一种类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多