我有以下“难题” - 我已经花了一整天多的时间来解决它。
在 MauiProgram.cs 中我有这个函数:
public static void SetAppLanguage(string appLanguagesCurrent)
{
CultureInfo culture = new("en-US");
if (appLanguagesCurrent == "English")
{
Commons.Language = "en";
}
else if (appLanguagesCurrent == "Română")
{
Commons.Language = "ro";
culture = new("ro-RO");
}
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
CultureInfo.CurrentCulture = culture;
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
}
呼叫者
public static MauiApp CreateMauiApp()
应用程序默认以英语启动。一切正常。
然后,我们在某些“设置”页面中切换语言,该页面写入一些“settings.json”文件(用户的首选项)。
在该文件中,我们将语言设置为其他语言,例如罗马尼亚语 (ro-RO)。
如果我们重新启动应用程序,代码会从该 json 文件中读取,一切都很好 - 语言设置正确,我们从服务器提取数据等。一切都很好。
然后,我在登录页面上创建了一个“会话的语言切换” - 如果用户不想更改首选项,但希望仅在本次会话中以某种语言使用该应用程序。
我们再说一遍,默认语言是英语。 假设用户单击登录页面上的罗马尼亚国旗。 在该事件中,我执行以下代码:
private async Task SwitchLanguage(string language)
{
//By default the language is set in the Settings page. However, we can switch it here for this session.
CultureInfo switchToCulture;
if (language == "EN")
{
Commons.Language = "en";
Globals.AppSettings.Language = "English";
switchToCulture = new("en-US");
}
else
{
Commons.Language = "ro";
Globals.AppSettings.Language = "Română";
switchToCulture = new("ro-RO");
}
MauiProgram.SetAppLanguage(Globals.AppSettings.Language);
GlobalLocalizationResourceManager.SetCulture(switchToCulture);
}
不用担心线
GlobalLocalizationResourceManager.SetCulture(switchToCulture)
(它的目的是翻译应用程序中的字符串)。
然而,奇怪的是,虽然在这个函数中,通过调用 MauiProgram.SetAppLanguage("Română"),我们设置了 CultureInfo.DefaultThreadCurrentCulture 和 CultureInfo.DefaultThreadCurrentUICulture 的值,并且它们在 Watches 窗口中显示为更改,当我导航到应用程序的其他页面,这些值(DefaultThreadCurrentCulture 和 DefaultThreadCurrentUICulture,以及 Thread.CurrentThread.CurrentCulture 和 Thread.CurrentThread.CurrentUICulture)在 Watches 窗口中再次显示为英语,即使我们之前已更改它们(在SwitchLanguage()),因此进一步的数据解析失败。
所以,长话短说:
注意:执行该行
(Application.Current as App).MainPage = new AppShell()
没有帮助!
我认为这与线程有关......但也许我错了。 有谁知道我做错了什么? 非常感谢。
亚历克斯
如何在 MAUI 应用程序运行时切换语言?如果我在不重新启动应用程序的情况下切换语言,则会失败 加工中。
关于本地化,MAUI GitHub 上有一个已知问题。您可以看到这个:.Net MAUI Localization #5595。您还可以报告您的情况并跟踪此问题。