【问题标题】:WPF App Support Locale without Localization没有本地化的 WPF 应用程序支持区域设置
【发布时间】:2017-03-06 14:13:19
【问题描述】:

我有一个未进行语言本地化的美国英语 WPF 应用程序,但英语流利的用户希望它在设置为德语区域设置的 PC 上运行。所以用英语显示所有内容不是问题,但是当我的应用程序从 XML 文件读取时,他们会看到解析失败。 XML 文件由开发人员手动创建,作为插件架构的一部分,包含格式为 1.23E+05 的数字。我使用 StreamReader 和 XmlSerializer.Deserialize() 读取它们。序列化类中的大多数字段都被声明为字符串,我稍后将它们解析为双精度。有没有办法支持这种使用模式?是否有只影响来自应用程序外部的输入的解决方案(希望最大限度地减少所需的更改)?我认为我要求的是在不完全支持本地化的情况下支持不同的语言环境,如果这有意义的话。我可以接受影响数字/日期显示格式的语言环境,如果这种情况自动发生的话。我最关心的是不要崩溃:)谢谢。

【问题讨论】:

  • 当您的应用在德国电脑上运行时,您仍然希望使用英文数字/日期/等。格式?这是你的目标吗?
  • @Mighty Badaboom:更新了帖子以表明它们的显示方式没有偏好。
  • xml 文件中有什么?通常,如果它是设置或一些内部数据(与例如用户生成的报告相反),那么它们必须保存在中性文化中以避免此类情况。您如何序列化/创建 xml,然后反序列化/加载/使用它? XmlSerializerculture independent(也就是使用中性文化)。
  • @Sinatr:更新了帖子以更多地描述 XML 文件。
  • 您没有展示如何读取 xml 文件。 其他开发人员似乎已经在使用中立文化,所以这是你的错误^^。

标签: c# wpf localization locale


【解决方案1】:

您应该为您的应用明确设置文化

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;

除了 InvariantCulture,您还可以传递特定的文化。数字格式等内容与您当前的文化息息相关。

【讨论】:

  • 因此,如果我设置 CurrentCulture = en-US,那么只要我的所有输入文件都包含格式为 en-US 的数字,那么我所在机器的语言环境是什么都没有关系执行?
【解决方案2】:

post of Sebastien Lambla 中描述了一个巧妙的技巧:

插入你的App.xaml.cs-文件

public partial class App : Application

{

    static App()

    {

        FrameworkElement.LanguageProperty.OverrideMetadata(

            typeof(FrameworkElement),

            new FrameworkPropertyMetadata(

                XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

    }

}

现在您的应用程序默认使用当前文化在客户端计算机上在运行时

VB.Net-Variant 在Application.xaml.vb-文件中

Class Application
    Public Sub New()

        FrameworkElement.LanguageProperty.OverrideMetadata(
            GetType(FrameworkElement),
            New FrameworkPropertyMetadata(Markup.XmlLanguage.GetLanguage(Globalization.CultureInfo.CurrentCulture.IetfLanguageTag)))
    End Sub

End Class

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 2014-03-26
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多