2011-02-01 57 views

回答

1

它11.下面是代码:

var count = CultureInfo.GetCultures(CultureTypes.AllCultures) 
         .Select(ci => ci.Name.Length) 
         .Max(); 
+1

谢谢。这对我来说是可以接受的。但是很奇怪的是,微软在其Commerce Server中使用了17个字符来存储CultureInfo.Name:http://technet.microsoft.com/en-us/library/microsoft.commerceserver.marketing.languagestring.culturecode(d = lightweight ,v = CS.90).aspx – msi 2011-02-01 13:19:41

+0

不客气。不要忘记勾选答案;) – gor 2011-02-01 16:25:24

0

根据下面的代码:

public static void Test() 
    { 
     var culturesNames = from c in CultureInfo.GetCultures(CultureTypes.AllCultures) 
          select new { c.DisplayName, c.DisplayName.Length, c.Name }; 


     foreach (var ci in culturesNames.OrderBy((o) => o.Length)) 
     { 
      Console.WriteLine("{0} : {2} {1}", ci.DisplayName, ci.Length, ci.Name); 
     } 
    } 

的最大长度为50 不要忘了开发人员可以创建自定义的文化信息。

+0

CultureInfo.Name和CultureInfo.DisplayName是不同的东西。我需要最长的可能长度CultureInfo.Name – msi 2011-02-01 13:14:52

3

答:84

文件:(在评论感谢@lethek) http://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder.cultureandregioninfobuilder%28v=vs.100%29.aspx

我是能够使使用CultureAndRegionInfoBuilder类是长84个字符,下面的代码一种新的文化。

CultureAndRegionInfoBuilder将不允许超过84个字符的名称。要获得84个字符,您需要确保您用“ - ”分隔的每个部分的长度不能超过8个字符。你不能仅仅创建一个名为“ThisIsLongerThan8Characters”的文化,因为它长于8个字符而没有分隔符。 (请注意,我认为你可以用同样的方式使用“_”,但我没有尝试过)

为了使下面的代码正常工作,你需要引用sysglobl程序集并导入System.Globalization命名空间。

下面的代码尝试在开始和结束时取消注册文化。一旦注册完成,我加载一个CultureInfo,格式化日期并显示名称和显示名称。

希望这是有帮助的。

string cultureName = "qwertyui-12345678-qwertyui-12345678-qwertyui-12345678-qwertyui-12345678-qwertyui-123"; 
Console.WriteLine("MAX LENGTH: " + cultureName.Length); 
try { 
    CultureAndRegionInfoBuilder.Unregister(cultureName); 
} catch { 
    Console.WriteLine("Cannot remove culture"); 
} 

CultureAndRegionInfoBuilder builder = new CultureAndRegionInfoBuilder(cultureName , CultureAndRegionModifiers.None); 

CultureInfo ci = new CultureInfo("en-AU"); 
RegionInfo ri = new RegionInfo("US"); 

builder.LoadDataFromCultureInfo(ci); 
builder.LoadDataFromRegionInfo(ri); 
builder.Register(); 

CultureInfo info = new CultureInfo(cultureName); 

Console.WriteLine(DateTime.Now.ToString(info.DateTimeFormat.LongDatePattern)); 
Console.WriteLine(info.Name); 
Console.WriteLine(info.DisplayName); 

try { 
    CultureAndRegionInfoBuilder.Unregister(cultureName); 
} catch { 
    Console.WriteLine("Cannot remove culture"); 
}