繁体   English   中英

确定int的字符串int列表

[英]List of string int to determine int

我有一个带有Windows LCID值的语言代码列表:

"de-de" 1031  
"de" 1031
"en-us" 1033
"en" 1033
"en-US" 1033

我想创建一个函数,可以输入“ en-US”之类的字符串,并告诉我LCID(在这种情况下为1033)。

由于我只喜欢其中的300个“项目”,因此我想对其进行硬编码。

但是,我不确定编码该代码的适当方法。

我想我不应该使用

if (value == "en-us")
     return 1033;
else if (value == "en-US")
     return 1033;

有人可以告诉我成人的处理方式吗?

您需要提供文化代码以获取LCID的功能吗? 只需使用.NET默认方式:

return System.Globalization.CultureInfo.GetCultureInfo("de-DE").LCID;

如果您需要管理从这些代码到LCID的映射,则可以调用GetCultures()因为“仅” 300对我来说很难被硬编码。 我们都知道.NET中的每种文化都具有该LCID。 那么列出所有这些,或者将它们放入字典中以便轻松解决该怎么办。

从此处获取默认列表:

    foreach (var c in  System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.UserCustomCulture | System.Globalization.CultureTypes.SpecificCultures))
        Console.WriteLine(c.ToString() + " code:" + c.LCID);

使用在语言代码上键入值为LCID的Dictionary

这仍然可以是“硬编码”,因为您可以手动将键/值添加到字典中,但是这使可维护性等高得多,并且如果您想切换到以后更好的加载方式,则可以轻松地(只需例如,将您的手动添加内容替换为某些文件read + parse)。

Dictionary<string, int> lcidLookup = new Dictionary<string, int>();
lcidLookup.Add("de-de", 1031);
lcidLookup.Add("de", 1031);
lcidLookup.Add("en-us", 1033);
lcidLookup.Add("en", 1033);

...

int lcid = lcidLookup["en-us"];

也可考虑确保您使用的所有按键都转换为小写/大写(见String.ToLower和类似String.ToUpper ),并确保你搜索所有的密钥匹配此约定,以避免错误套管周围( en-USen-us )。


鉴于您的LCID值映射到实际的语言环境代码,您应该改用@Waescher的答案-这样就完全可以避免进行任何硬编码。

一种解决方案是使用switch语句,即:

switch(value.ToLower())
{
       case "en-us":
       case "en":
            return 1033;
       case "de-de":
       case "de":
            return 1031;
       default: return -1;
}

使用System.Globalization.CultureInfo

CultureInfo ci = new CultureInfo("en-US");
Console.WriteLine(ci.LCID);
    public static int LCIDFromLangName(string uKey)
    {
        uKey = uKey.ToLower();

        Dictionary<string, int> _dic;
        _dic = new Dictionary<string, int>();
        _dic.Add("de-de", 1031);
        _dic.Add("en-us", 1033);
        (and so on)

        int iRet = 0;
        bool b = _dic.TryGetValue(uKey, out iRet);
        if (!b)
        {
            iRet = 1033;
        }
        return iRet;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM