关于windows窗体本地化c#
本文关键字:本地化 窗体 windows 关于 | 更新日期: 2023-09-27 18:17:45
我注意到人们使用这段代码来本地化
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
谁能告诉我CurrentUICulture
和CurrentCulture
是什么?为什么要给两个
如果我赋值CultureInfo("fr-FR")
,会发生什么?只有当前文化还是当前文化?
我很想详细了解CurrentUICulture
和CurrentCulture
的作用。
假设客户端pc语言设置可以是德语或法语等,但我想以这样一种方式开发我的应用程序,即无论语言设置是什么,我的应用程序都将在该pc上使用其语言设置。我的意思是所有的控件都会显示德文或法文的文本。我不想这样硬编码文化CultureInfo("fr-FR")
我宁愿用户的语言设置决定我的控件的语言。我该怎么做呢?
这很简单。
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中,更改区域性后必须重新加载窗体。最简单的解决方案就是简单地告诉用户"需要重新启动软件"。