【问题标题】:Windows 8 Metro app (XAML) - How to set a default startup language?Windows 8 Metro 应用程序 (XAML) - 如何设置默认启动语言?
【发布时间】:2012-03-21 12:29:41
【问题描述】:

我尝试在 App.xaml.cs 中的 Windows Metro 应用程序中设置默认启动语言,但我找不到执行此操作的位置。通常我在 C# 中使用 Thread.CurrentCulture 进行设置,但我找不到 Thread 命名空间。我在这里缺少什么吗?

【问题讨论】:

    标签: c# xaml windows-8 microsoft-metro


    【解决方案1】:

    这在 Windows8 CP 中效果很好:

    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
    var resourceLoader = new ResourceLoader();
    

    【讨论】:

      【解决方案2】:

      如果仍然需要,我可以在这里选择:

      尝试在 Package.appxmanifest 中设置默认应用语言。使用 VS 打开清单并在适当的框中设置默认语言(应用程序 UI -> 默认语言)。

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        您可以尝试在项目程序集中设置它。尝试右键单击该项目,然后单击“Assembly Information...”并选择您的中立文化。

        【讨论】:

        • UDPATE:我确实试过了,但是 Metro App 没有找到正确的资源文件。我检查了我实际上是否设法使用以下代码在 app.xaml.cs 中设置了文化: //Setting挪威语作为默认启动语言,即使操作系统是英语。 System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("no"); System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("no");
        • 更新:但英文资源文件仍在加载,因为我的 Windows 8 操作系统似乎是用英文安装的。我已经按照此快速入门中的描述定义了资源:msdn.microsoft.com/en-us/library/windows/apps/xaml/…,但没有运气。我还希望用户能够在运行时更改语言。
        • 知道如何在运行时更改 C# Metro App 中的语言以加载正确的语言资源吗?
        • 我不确定您是否可以这样做。我没有在win8上尝试过,但我猜它使用的是与WP7相同的模型,即只有用户定义语言。但是你可以定义你接受哪些文化:stackoverflow.com/questions/3801119/…,也许这有帮助?
        【解决方案4】:

        您可以使用 CultureInfo.DefaultThreadCurrentCulture 属性设置默认线程文化。

        【讨论】:

          【解决方案5】:

          也许如下所示在 App.xaml.cs 中设置它会有所帮助

          Windows.Globalization.ApplicationPreferences.PreferredLanguage = "no";
          

          其中“no”是挪威语的 BCP47 语言标签。

          更新:Metro 应用程序在运行时更改语言

          根据 Windows 8 SDK 示例“应用程序资源和本地化”

          在应用程序运行时,语言、比例、对比度或其他设置可能会发生变化。为了处理这些事件,应该注册事件侦听器以侦听并响应更改。这可以通过存储状态和刷新页面或通过重绘特定资源来完成。

          现在在我的语言更改选择事件中,我将 PreferredLanguage 设置为:

          Windows.Globalization.ApplicationPreferences.PreferredLanguage = "en";
          this.Frame.Navigate(this.GetType());
          

          我一直缺少的关键是 App 的 OnLaunched 事件中的以下代码:

          ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, m) => 
          {
              if (m.Key == "Language")
              {
                  // react to language change
              }
          };
          

          我没有将此事件注册放置在 Page 的构造函数或任何页面的事件中(就像在 SDK 示例中一样),因为它可能已被多次注册。 仍然必须在某处注册此事件,以便语言更改在运行时生效。

          【讨论】:

            【解决方案6】:

            我认为您正在寻找(在 CP 中)是 Windows.Globalization.ApplicationPreferences.PreferredLanguage.

            请注意,您的清单应列出您实际支持的所有语言。如果项目中的 manifest 包含x-generate,VS 会自动为你设置语言。

            【讨论】:

              【解决方案7】:

              打开 Package.appxmanifest 的代码视图 将资源更改为:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-07-05
                • 1970-01-01
                • 1970-01-01
                • 2019-11-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多