[英]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-US
与en-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.