我们使用CultureInfo(customCulture)
将文化设置为自定义文化我们在app_start中的global.cs中创建customCulture以防万一。
在我的本地电脑上,这很好用。 但是在Web服务器上,当我去设置文化时,我得到了不支持文化的错误? 我已经检查了Windows \ Globalization文件夹,那里有一个文化文件用于正确的文化?
相同的代码在3.5下工作正常吗?
答案 0 :(得分:2)
如果其他人遇到此问题,我必须编写命令行工具来取消注册文化,然后重新注册。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace InstallCulture
{
class Program
{
static void Main(string[] args)
{
// Is CustomCulture already installed?
string parentCultureName = "en-GB";
string extendedName = "custom";
System.Globalization.CultureInfo[] userCultures = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.UserCustomCulture);
Console.WriteLine(string.Format("number of user cultures:{0}", userCultures.Count()));
Console.WriteLine(string.Format("Setting culture {0}-{1}", parentCultureName, extendedName));
// Install CustomCulture based on language parent.
System.Globalization.CultureAndRegionInfoBuilder builder = new System.Globalization.CultureAndRegionInfoBuilder(
string.Format("{0}-{1}", parentCultureName, extendedName),
System.Globalization.CultureAndRegionModifiers.None);
builder.LoadDataFromCultureInfo(new System.Globalization.CultureInfo("en-GB"));
builder.LoadDataFromRegionInfo(new System.Globalization.RegionInfo("GB"));
Console.WriteLine("CultureName:. . . . . . . . . . {0}", builder.CultureName);
Console.WriteLine("CultureEnglishName: . . . . . . {0}", builder.CultureEnglishName);
Console.WriteLine("CultureNativeName:. . . . . . . {0}", builder.CultureNativeName);
foreach(System.Globalization.CultureInfo cultInfo in userCultures)
{
Console.WriteLine("Found culture in userCultures");
if(cultInfo.Name.ToLower() == string.Format("{0}-{1}", parentCultureName, extendedName).ToLower())
{
Console.WriteLine(string.Format("{0} already registered", cultInfo.Name));
CultureAndRegionInfoBuilder.Unregister("en-GB-custom");
Console.WriteLine("Unregistered culture en-GB-custom");
}
}
Console.WriteLine("Registering culture en-GB-PolHol");
builder.Register();
Console.WriteLine("Create new culture info object");
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-GB-custom");
Console.WriteLine("Name: . . . . . . . . . . . . . {0}", culture.Name);
Console.WriteLine("EnglishName:. . . . . . . . . . {0}", culture.EnglishName);
Console.WriteLine("NativeName: . . . . . . . . . . {0}", culture.NativeName);
Console.WriteLine("Set threads to new culture");
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
Console.WriteLine("Set culture done");
}
}
}
答案 1 :(得分:1)
我遵循了如何添加自定义文化和本地机器的众多指南,如果工作完美的话。但是,我在开发服务器上的CultureInfo构造函数中获得了CultureNotFoundException,并且名称有错误。 nlp文件是正确创建的,我怀疑注册表步骤是问题,但我找不到任何关于它的资源。此外,它破坏了机器上任何其他语言映射以用于所有其他应用程序。
最终,我遵循了构建全局Windows和Web应用程序的开发人员指南:第11章 - 代码项目上的自定义文化,并使用所需的修改替换了现有文化,这些修改正常。
我仍然想知道为什么我原来的自定义文化不起作用而且更换了。无论如何,我也想分享我的经验。