2010-10-19 45 views
0

我有一个将使用几种不同文化的Web应用程序,其中一个是es-US(西班牙美国)。但是,Windows XP对es-US文化没有任何支持。要解决这个问题,我发现一个应该能够使用CultureAndRegionInfoBuilder。所以,我看着CultureAndRegionInfoBuilder,也做了以下内容:在Windows XP上使用CultureAndRegionInfoBuilder从XML加载文化的问题

在Windows 7机器,我保存了文化ES-美国一个XML文件,内容如下:

private static void SaveCultureToFile() { 
      try { 
       CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = null; 
       Console.WriteLine("Saving es-US to xml disc...\n"); 
       cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder("es-US", CultureAndRegionModifiers.Replacement); 

       // Populate the new CultureAndRegionInfoBuilder object with culture information. 
       CultureInfo ci = new CultureInfo("es-US"); 
       cultureAndRegionInfoBuilder.LoadDataFromCultureInfo(ci); 

       cultureAndRegionInfoBuilder.Save("es-US.xml"); 

      } 

然后,我有一个功能,读取XML和registeres的文化融入到系统中,具体如下:

private static void RegisterCultureFromDisk() { 
     try { 
      CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = null; 
      Console.WriteLine("Loading es-US from xml...\n"); 
      cultureAndRegionInfoBuilder = CultureAndRegionInfoBuilder.CreateFromLdml("es-US.xml"); 
      Console.WriteLine("Culture is registred to the system...\n"); 
      cultureAndRegionInfoBuilder.Register(); 
      Console.WriteLine("The following culture has been registred to the system: \n"); 

     } 

所以我在Windows 7计算机上运行使用SaveCultureToFile方法的程序,从而节省了文化的XML文件。然后我将这些文件复制到Windows XP机器上,并运行相同的程序,但RegisterCultureFromDisk()方法。但该方案在CultureAndRegionInfoBuilder.CreateFromLdml失败( “ES-US.xml”)法说:

“文化名 'ES-我们' 不 支持”

好了,这就是正是为什么我试图从XML加载文化并注册到系统中。

是否有人知道我做错了什么,或者我如何在Windows XP机器上创建es-us文化?

Thanx!

回答

0

From MSDN

需要注意的是一个自定义的文化可以在计算机上只有谁拥有该计算机上的管理权限的用户进行注册。因此,典型的应用程序无法创建自定义文化。

我怀疑这可能是你的问题的原因......你有这台机器的管理员权限?

+0

是的,我不认为这是导致问题的原因。在http://www.codeproject.com/KB/books/CustomCultures.aspx找到一些有用的信息。看来,msLocale:textInfoName和ms:LocalesortName不能引用机器不具备的文化。因此,在Windows XP机器上注册一个全功能的es-us文化似乎是不可能的。然而,人们可以尽可能创造类似于es-us文化的习俗文化。 – 2010-10-20 06:53:17

+0

我很肯定它*可以*指的是机器没有的文化,这就是创造新文化的重点。一旦我创造了“火星人”文化,只是为了看看它是否可行,而且它运作良好 – 2010-10-20 07:54:31

0

我知道这是一个古老的问题,但我最近遇到了这个问题,并设法实际解决它。

原来,如果您只是使用要导入的文件的名称创建临时文化,那么CreateFromLdml方法可能会诱骗加载不存在的文化。然后,您可以取消注册临时文化,并注册刚刚加载的文化。

我已经为出口/我们已经成功地用来在Azure上部署新的服务器时,我们需要一些不起眼的缺失文化添加导入文化,做了一个简单的命令行工具。

如果您需要它 - 解决方案的源代码和更深入的说明可用here