【问题标题】:How to translate the month and day in DatePicker C# WinRT如何在 DatePicker C# WinRT 中翻译月份和日期
【发布时间】:2016-04-20 15:09:10
【问题描述】:

我在 Windows Phone 8.1 应用程序中有一个默认的日期选择器控件。更改设备语言后,日期选择器字段仍保留英文文本而不是翻译文本。我是否应该添加任何单独的逻辑来翻译这些文本,例如在模板中明确定义月份名称和日期以及翻译所需的逻辑?

要翻译的带有突出显示文本的图像

任何帮助或建议都会有很大帮助。

提前致谢

【问题讨论】:

  • 你有 Language 属性来指定应该使用哪种语言控制
  • 您是否尝试在更改语言后重新启动?
  • @Archana.I 已将 Language 属性添加到 Datepicker 控件,并将语言值显式设置为“fr-FR”(法语)。但没有变化。
  • @Alexej 是的。更新设备语言后,设备提示我们更改语言。当设备语言更改时,我已经使用支持一些翻译的资源字符串本地化我的应用程序。但是这个 datepicker 控件是一个普通的控件,没有任何修改。不确定我是否需要为此明确定义字符串以支持翻译
  • 如果您在 Package.appmanifest 文件中添加对该特定语言的支持,它将起作用。有默认语言字段

标签: c# winrt-xaml win-universal-app


【解决方案1】:

DatePicker 默认支持Globalization and localization。无需在DatePicker 中设置任何内容即可支持多语言。

我们需要做的是Specify the supported languages in the app's manifest

应用开发人员在应用清单文件(通常是 Package.appxmanifest)的 Resources 元素中指定支持的语言列表,或者 Visual Studio 会根据项目中找到的语言自动生成清单文件中的语言列表。清单应在适当的粒度级别准确地描述支持的语言。清单中列出的语言是在 Windows 应用商店中向用户显示的语言。

为确保应用支持“fr-FR”,我们可以在“Solution Explorer”中选择“Package.appxmanifest”并右键单击,然后选择“ 查看代码”并使用

<Resources>
  <Resource Language="EN-US" />
  <Resource Language="FR-FR" />
</Resources>

而不是

<Resources>
  <Resource Language="x-generate" />
</Resources>

之后,当您将设备的语言更改为“法国”时,DatePicker 将自动显示在法国。不过这不会立即生效,需要重新启动。

更新:

PrimaryLanguageOverride 是一个简单的覆盖设置,适用于为用户提供自己独立语言选择的应用,或有充分理由覆盖默认语言选择的应用。

所以你可以使用PrimaryLanguageOverride 来实现你想要的。

PrimaryLanguageOverride 设置在会话之间保持不变。不应在每次加载应用程序时都设置它。它只能根据设置 UI 中显示的用户输入进行设置。该属性可以随时读取。如果该属性从未设置过,则返回一个空字符串。

您可以在下拉控件中添加“自动”选项。当用户选择此选项时,您可以将PrimaryLanguageOverride 设置为空字符串,例如:

ApplicationLanguages.PrimaryLanguageOverride = string.Empty;

然后您的应用将根据您支持的语言使用设备语言设置。有关您的应用中将显示哪种语言的更多信息,请参阅Create the application language listLanguage matching

当使用在您的下拉控件中选择其他语言时,您可以将PrimaryLanguageOverride 设置为所选语言以强制您的应用以该语言显示。更多PrimaryLanguageOverride的使用信息,可以查看ApplicationLanguages.PrimaryLanguageOverride | primaryLanguageOverride property中的备注

【讨论】:

  • 感谢杰伊的建议。目前我的应用程序支持两种模式的本地化。一种是通过设备语言设置,另一种是通过应用程序本身提供的下拉控件,它为用户提供我们支持的语言列表。这种方法会支持这两种模式吗?应用语言偏好实际上比设备语言具有更高的优先级。
  • @Sriram:是的,PrimaryLanguageOverride 具有更高的优先级,我认为可以同时支持这两种模式。请检查我的更新答案。
  • 感谢杰伊的更新。您的建议逻辑与我的实现相匹配。当用户在应用程序中明确选择特定语言时,我将覆盖 PrimaryLanguage。否则它将默认为设备语言。
【解决方案2】:

有 Language 属性来指定语言。

<DatePicker Name="date" />
     CultureInfo ci = new CultureInfo(Windows.System.UserProfile.GlobalizationPreferences.Languages[0]);
                date.Language = ci.ToString();

更新

要完成它,您必须在 Package.appmanifest 文件中添加对该特定语言的支持。清单文件中有默认语言字段。 您可以通过编程方式完成此操作

 CultureInfo ci = new CultureInfo(Windows.System.UserProfile.GlobalizationPreferences.Languages[0]);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ci.Name;
            CultureInfo.DefaultThreadCurrentCulture = ci;
            CultureInfo.DefaultThreadCurrentUICulture = ci; 

【讨论】:

  • 感谢LovetoCode 的建议。这是有效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多