gpt4 book ai didi

c# - 有什么理由不使用标准 resx+static 绑定(bind)来本地化 WPF 吗?

转载 作者:可可西里 更新时间:2023-11-01 08:09:51 24 4
gpt4 key购买 nike

我正在寻找一种非常简单的方法来将我的应用程序本地化为日语以及默认的英语。唯一的要求是我们能够以指定的语言启动它。我们使用的 LocBaml 东西笨重、复杂、容易出错,并且使我们的构建过程极其困难。

我正在考虑将所有内容移回资源文件(Strings.resx、Strings.ja.resx)并只进行静态绑定(bind),如下所示:

<TextBlock Text="{x:Static resx:MyWindow.MessageText}" />

然后在启动时找出他们想要的语言并切换从中提取字符串的资源:

public static void Main(string[] args)
{
if (args[0] == "-lang")
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(args[i + 1]);
}

App app = new App();
app.InitializeComponent();
app.Run();
}

这很简单,似乎唯一真正的缺点是我们不能在运行时切换,这不是我们想要做的事情。我见过一些像这样的本地化扩展:

http://wpflocalization.codeplex.com/

http://www.wpftutorial.net/LocalizeMarkupExtension.html

它们提供更简洁的 Xaml,并且在设计时看起来更漂亮一些,但除了允许您在运行时更改语言外,我看不出任何功能差异。我在这里遗漏了什么,还是我们应该走简单的内置路线?总计我们只有约 100 个字符串需要本地化。我认为这里最简单的路线是最好的,特别是考虑到我们应用程序的相对简单性。

最佳答案

我肯定会推荐 resx 路线。我刚刚完成了一个大型 wpf 应用程序的构建,该应用程序将以多种语言进行本地化(目前只有 en_GB 和 it_IT,但很快就会推出更多语言环境)并且运行良好。

需要考虑的一些缺点:

  • 就像你提到的,它并不是真正的如果你想的话,很好的解决方案动态切换语言(虽然这仍然可以实现使用标记进行一些工作扩展名)。
  • 与 locBaml 方法相反你需要把资源放在你的 resx 预先增加了一个小一点开销
  • 你几乎受限于本地化字符串(其中 locBaml,如据我所知,你几乎可以本地化所有元素属性)

在我们看来,resx 方法的小缺点远远超过了 locBaml 的缺点。

需要注意的是,我没有在完整的构建项目中使用 locBaml 方法。我和你的情况一样,不得不研究这两种方法。事后看来,这对我们来说绝对是正确的决定。

关于c# - 有什么理由不使用标准 resx+static 绑定(bind)来本地化 WPF 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5008721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com