在 Windows XP 上使用 CultureAndRegionInfoBuilder 从 XML 加载文化的问题

Posted

技术标签:

【中文标题】在 Windows XP 上使用 CultureAndRegionInfoBuilder 从 XML 加载文化的问题【英文标题】:Problem with loading culture from XML using CultureAndRegionInfoBuilder on Windows XP 【发布时间】:2010-10-19 14:05:08 【问题描述】:

我有一个 Web 应用程序,它将使用几种不同的文化,其中一种是 es-US(西班牙美国)。但是,Windows XP 对文化 es-US 没有任何支持。为了解决这个问题,我发现应该能够使用 CultureAndRegionInfoBuilder。所以我查看了 CultureAndRegionInfoBuilder 并做了以下事情:

在一台 Windows 7 机器上,我将文化 es-US 保存到一个 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的函数,并将文化注册到系统中,如下:

    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-us’不是 支持”

嗯,这正是我尝试从 xml 加载文化并将其注册到系统中的原因。

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

谢谢!

【问题讨论】:

【参考方案1】:

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

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

我已经制作了一个简单的命令行工具来导出/导入文化,我们已经成功地使用它来添加一些我们在 Azure 上部署新服务器时需要的模糊缺失的文化。

如果您需要 - 源代码和更深入的解决方案描述可用here。

【讨论】:

太棒了!正是我需要看到的。尽管如此,它仍然需要管理员权限,如果您可以为正在运行的进程设置一个不稳定的文化,那就太好了,但据我所知,它需要安装在系统上才能使用。【参考方案2】:

From MSDN:

请注意,只有在计算机上具有管理权限的用户才能在计算机上注册自定义文化。因此,典型应用程序无法创建自定义文化。

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

【讨论】:

是的,我认为这不是导致问题的原因。在codeproject.com/KB/books/CustomCultures.aspx 找到了一些有用的信息。似乎 msLocale:textInfoName 和 ms:LocalesortName 不能引用机器没有的文化。因此,在 windows xp 机器上注册一个功能齐全的 es-us 文化似乎是不可能的。然而,人们可以创建一种尽可能类似于 es-us 文化的自定义文化。 我很确定它可以指代机器没有的文化,这就是创造新文化的全部意义所在。有一次我创造了一种“火星”文化,只是想看看是否可行,并且效果很好

以上是关于在 Windows XP 上使用 CultureAndRegionInfoBuilder 从 XML 加载文化的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 7 上崩溃但在 XP 上运行

在 Windows XP 上运行的 c# 程序中的图像扫描

我可以在 Windows XP 或 7 上使用最新的 .NET 框架吗? [关闭]

在 Windows XP 模式下使用 IE6 访问在主机上运行的 Tomcat 实例(Windows 7)

如何在 Windows XP 上运行 nAudio?

在 Windows XP 中使用 C# 在登录屏幕上显示窗口