我需要更改语言,但保留货币和日期/时间格式。怎么做?
我已尝试过以下内容(货币和日期/时间格式必须在en-US中):
ApplicationLanguages.PrimaryLanguageOverride = "zh";
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
var fixedCulture = new CultureInfo("en-US");
CultureInfo.CurrentCulture = fixedCulture;
CultureInfo.CurrentUICulture = fixedCulture;
CultureInfo.DefaultThreadCurrentCulture = fixedCulture;
CultureInfo.DefaultThreadCurrentUICulture = fixedCulture;
语言确实变为中文(即资源字符串引用" zh"文件夹)以及货币符号和日期/时间格式。
我的问题是,如何在不更改货币和日期/时间格式的情况下更改语言?
谢谢!
答案 0 :(得分:0)
默认情况下,货币和日期/时间根据当前应用程序语言的约定进行格式化。因此,如果您更改 PrimaryLanguageOverride 设置,则货币和日期/时间的格式也会更改。
要覆盖默认设置,我们可以使用DateTimeFormatter和CurrencyFormatter。
例如,对于日期/时间格式,我们可以使用以下格式化程序:
var dateTimeFormatter = new DateTimeFormatter("shortdate longtime", new[] { "en-US" });
var dateTimeString = dateTimeFormatter.Format(DateTime.Now);
对于货币格式,我们可以使用格式化程序,如:
var currencyFormatter = new CurrencyFormatter(CurrencyIdentifiers.USD, new[] { "en-US" }, "US");
var currencyString = currencyFormatter.Format(123.456);
有关详细信息,请参阅Date and time formatting sample,尤其是方案4和Number formatting and parsing sample,尤其是方案3。
问题是我需要遵守实际的系统语言设置。
要检索系统语言设置,我们可以使用GlobalizationPreferences.Languages属性。此属性按优先顺序获取用户首选的语言集。此列表中的第一种语言是系统语言。
//Obtain the user's system language setting.
var sysLanguage = Windows.System.UserProfile.GlobalizationPreferences.Languages[0];
GlobalizationPreferences Class还有一个Currencies属性,可用于CurrencyFormatter,如下所示:
var currencyFormatter = new CurrencyFormatter(Windows.System.UserProfile.GlobalizationPreferences.Currencies[0]);
var currencyString = currencyFormatter.Format(123.456);
我投入了印度尼西亚" (语言代码:id)并且它不起作用:(
我不熟悉印尼语。我尝试添加" Bahasa Indonesian"在语言中将其设置为默认值
但是,这并没有改变 Windows显示语言。系统仍以英文显示。默认情况下,货币根据Windows显示语言设置。查看设置>时间与时间语言>地区&语言>额外的日期,时间和&区域设置>地区:更改日期,时间或数字格式
所以这可能就是为什么我的解决方案对印尼人不起作用的原因。对于其他一些语言,例如中文,日文和法文,如果我们将它们设置为默认语言,Windows显示语言也会改变。因此它们可以工作。
无论如何,在我的解决方案中,它总是获得用户的系统设置。通常,我们应该尊重用户的设置(我想如果用户使用印尼语并且不想使用英语格式,他/她将改为印尼语格式)。如果您确实希望根据默认语言使用货币格式,您仍然可以利用CultureInfo
之类的:
12345.6789.ToString("C3", new CultureInfo(Windows.System.UserProfile.GlobalizationPreferences.Languages[0]))