关于windows窗体本地化c#

本文关键字:本地化 窗体 windows 关于 | 更新日期: 2023-09-27 18:17:45

我注意到人们使用这段代码来本地化

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

谁能告诉我CurrentUICultureCurrentCulture是什么?为什么要给两个

赋相同的值?

如果我赋值CultureInfo("fr-FR"),会发生什么?只有当前文化还是当前文化?

我很想详细了解CurrentUICultureCurrentCulture的作用。

假设客户端pc语言设置可以是德语或法语等,但我想以这样一种方式开发我的应用程序,即无论语言设置是什么,我的应用程序都将在该pc上使用其语言设置。我的意思是所有的控件都会显示德文或法文的文本。我不想这样硬编码文化CultureInfo("fr-FR")

我宁愿用户的语言设置决定我的控件的语言。我该怎么做呢?

关于windows窗体本地化c#

这很简单。

CurrentCulture是为在各种区域性特定方法中使用的线程分配的区域性。例如,ToString() one.

CurrentUICulture is

资源管理器用于在运行时查找特定于区域性的资源。

通过设置两者,您可以确保所有ToString()正确工作,并且您的表单资源是从适当的卫星加载的。

在使用方面,您可以考虑为用户提供更改语言的选项。例如,我有本地的德语窗口,但我在其中设置了英语文化(控制台应用程序的日期格式和默认文化),而我说俄语。你认为我在使用你们的软件时会选择哪种语言?= P

默认情况下,要么使用安装程序中选择的语言(如果您有多种语言的安装程序并可以在那里更改它),要么使用当前Windows用户的语言首选项。


一个可能的场景:

前提条件:应用程序已经本地化,卫星已经存在(如果没有,请阅读此内容)。我自己不喜欢卫星,但它们很容易上手。

当应用程序启动时,您创建一个可用语言的列表(静态或通过枚举卫星)。

string[] Languages = new[] {"en", "fr", "de", "ru"};

然后,如果应用程序第一次启动(例如,你有string language设置,默认是null"",这将是一个尚未选择语言的标志),你检测默认的操作系统语言

var language = CultureInfo.InstalledUICulture.TwoLetterISOLanguageName; // to ex, "fr"

如果它在你的列表中,那么你设置

Thread.CurrentThread.CurrentUICulture =
    Thread.CurrentThread.CurrentCulture = new new CultureInfo(language);

否则,如果您没有此语言,则使用"默认"语言(例如,"en")。如果它在应用程序开始时完成,那么任何进一步构建和使用的窗口都将使用适当的资源。

用户应该能够更改语言。给他选择一个可用的Languages的可能性。在winforms中,更改区域性后必须重新加载窗体。最简单的解决方案就是简单地告诉用户"需要重新启动软件"。