gpt4 book ai didi

c# - 使用 WPF 以编程方式更改语言/资源

转载 作者:行者123 更新时间:2023-11-30 23:18:34 28 4
gpt4 key购买 nike

我有一个 DropDown(如果这很重要,可以使用 MahApps),我想用它在我的程序中“即时”切换语言。

语言类

namespace SAM
{
public class Language
{
public string Title { get; set; }
public string Culture { get; set; }
}
}

更改语言

private void DropLanguage_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
Language lang = DropLanguage.SelectedItem as Language;
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang.Culture);
}

我的所有字符串都作为资源在 Resources.resx 中(默认)和 Resources.en.resx (英文)

3个问题我不明白

  • 从下拉列表中选择“englisch”时,语言不会立即改变,但当我点击某物时。否则,例如“关闭”(它询问“确定吗?”),语言已更改。
  • 直接在 .xaml 文件中的字符串,如 <TextBlock Text="{x:Static p:Resources.Config_HeaderBar_Find_Speaker}" />根本不更新。
  • 奖励:我如何切换回默认语言,如new CultureInfo(lang.Culture);需要一个参数,默认情况下我有 Culture = null (因为 Resources.resx 的名称中没有任何内容)。将文件更改为 Resources.default.resx把我的代码搞得一团糟......

最佳答案

我试图解决类似的问题。对我来说最简单的解决方案是将所有窗口内容移动到 UserControl 并使用方法 refreshLanguage() 为窗口创建界面。然后我从模型中调用:

private void SetLanguage(string cultureName)
{
var cul = new System.Globalization.CultureInfo(cultureName);
Properties.Resources.Culture = cul;
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = cul;
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = cul;
System.Threading.Thread.CurrentThread.CurrentUICulture = cul;
System.Threading.Thread.CurrentThread.CurrentCulture = cul;
InitializeHamburgerMenu();
MainWindowView.RegreshLanguage();
RaisePropertyChanged("Title");
}

Window 中的 RefreshLanguage 看起来像:

 public void RegreshLanguage()
{
GlobalUserControl content = new GlobalUserControl("Views/SettingsPage.xaml");
ContentPresenter_GlobalUserControl.Content = content;
}

在我的例子中,UserControl 提供导航,所以我将上次导航的 URI 作为参数传递。因此,如果您需要保留状态,您可以将其作为参数传递给新的 UserControl。 重新创建用户控件会导致所有字符串重新加载,而无需重新创建窗口。可能好主意是在此处调用 GC.Collect();,但这取决于您的情况。

关于默认中立文化。对我来说,可以调用 SetLanguage("")

关于c# - 使用 WPF 以编程方式更改语言/资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40803580/

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