我想用.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);
}
}
在本地化WPF应用程序时,您有多种选择。
-
使用本机WPF的方法(使用UID(,请参阅:MSDN。这种方法的缺点在文章中有更详细的解释,但一般来说:
- 它没有使用resx(这对大多数开发人员来说是很自然的(
- 不支持在运行时更改语言
-
使用PublicResXFileCodeGenerator/ResXFileCodeGenerator生成的resx的强类型资源类。
(请参阅VS中resx文件的属性窗口中的自定义工具;PS:第二个生成器创建内部类,因此请记住,它只能在存在本地化的xaml的同一程序集中使用,并且只能使用WPF绑定,而不能使用静态标记扩展(
这种方法类似于您尝试应用的方法,这意味着在xaml中,您使用Binding(或x:Static(来绑定生成的强类型资源类的属性。这种方法的缺点是,每当区域性/语言发生更改时,生成的强类型资源类都不会提供任何通知。换句话说,您可以提供字符串、标签等,但它们将在解析/加载xaml时解析。之后它变成固定内容:
- 不支持在运行时更改语言
-
您可以在市场上找到使用resx文件本地化WPF应用程序的现有解决方案,例如:https://www.qube7.com/guides/localization.html
- 它支持在运行时更改语言(当您设置Culture.Current时,UI会自动刷新(
- 该解决方案提供了VS设计器中支持的本地化xaml的方法
- 本地化xaml的方法类似于本地化asp.net:您可能拥有本地资源(每个xaml视图的resx(+您可能拥有全局资源(拥有共享资源的resx
- 该解决方案还为您提供了本地化视图模型的方法(这也是常见的(
您可以在此处找到资源标记扩展的完整源代码:Resource.cs
我使用此解决方案解决了类似的问题:https://stackoverflow.com/a/63731647/660753
- 创建了一个新的Resource.resx。(使用"添加>新项…>资源文件.resx">
- 复制新文件中第一个文件的所有内容(复制所有三列(
- 删除旧文件
- 将新文件重命名为预期名称。6.不要忘记将resx文件的访问修饰符更改为";"公共">
此外,您还可以使用此ASP.NET解决方案https://developpaper.com/dotnetcore3-1-multi-language-implementation-of-wpf/