如何使用RESX本地化WPF .net-core应用程序

3

我想使用.resx文件本地化一个.Net Core应用程序。能否有人给我一个完整的逐步解决方案?我对WPF和.Net-Core不熟悉。当我在代码中更改当前文化时,没有任何反应。

这是我的代码:
<ToolBar>
    <Button Content="{x:Static strings:Resource.NewCustomer}" Command="{Binding NewCustomerDelegateCommand}"/>
</ToolBar>

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
        Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-DE");
        base.OnStartup(e);
    }
}

就我个人而言,我更喜欢使用包含字符串的资源字典。可以将其作为动态资源使用,更加灵活。 - Andy
2个回答

5
当本地化 WPF 应用程序时,您有几个选择。
  1. 使用WPF原生方法(使用UID),请参考:MSDN。该方法有缺点,详见文章,但总的来说:

    • 它不使用resx(这对大多数开发人员来说非常自然)
    • 不支持在运行时更改语言
  2. 使用由PublicResXFileCodeGenerator / ResXFileCodeGenerator生成的强类型资源类的resx。

    (请参见VS中resx文件属性窗口中的自定义工具; PS:第二个生成器创建内部类,因此请记住它仅可在本地化的XAML所在的同一程序集中使用,并且仅限于WPF绑定,不能与静态标记扩展一起使用)

    这种方法类似于您尝试应用的方法,意思是在xaml中,您使用Binding(或x:Static)到生成的强类型资源类的属性。这种方法的缺点是生成的强类型资源类在语言/文化更改时不提供任何通知。换句话说,在解析/加载xaml时可以提供字符串、标签等,但之后它变成了固定内容:

    • 不支持在运行时更改语言
  3. 您可以在市场上找到已经可用的解决方案,使用resx文件本地化WPF应用程序,例如,请查看:https://www.qube7.com/guides/localization.html

    • 它支持在运行时更改语言(当您设置Culture.Current时,UI会自动刷新)
    • 该解决方案提供了一种在VS设计器中支持本地化xaml的方法
    • 本地化xaml的方法类似于本地化asp.net:您可以拥有本地资源(每个xaml视图的resx)+您可以拥有全局资源(保存共享资源的resx)
    • 该解决方案还提供了一种本地化视图模型的方法(这也是不少见的情况)

    Resource标记扩展的完整源代码在此处:Resource.cs


最近我开始使用qube7,感觉太棒了。非常感谢 @bgorski 的努力工作。 - JardaB
谢谢,我很感激。请随意提供反馈(在这里或者在GitHub上),对于缺失的功能有任何想法等等。另外,如果你有任何问题,请告诉我。 - gorskib

0

我用这个解决方案解决了一个类似的问题:https://dev59.com/b7bna4cB1Zd3GeqPg8uI#63731647

  1. 创建一个新的 Resource.resx 文件。(使用“添加 > 新建项... > 资源文件.resx”)。
  2. 将第一个文件的所有内容复制到新文件中(复制三列的所有内容)。
  3. 删除旧文件。
  4. 将新文件重命名为预期的名称。 6. 不要忘记将 resx 文件的访问修饰符更改为 "public"。

另外,你也可以使用这个 ASP.NET 解决方案:https://developpaper.com/dotnetcore3-1-multi-language-implementation-of-wpf/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接