【问题标题】:System Culture in a SIlverlight ApplicationSIlverlight 应用程序中的系统文化
【发布时间】:2013-04-26 09:53:30
【问题描述】:

我不知道如何在客户端机器上获取已安装系统的 CultureInfo。

有 CultureInfo.InstalledUICulture 属性,但在 Silverlight 中似乎不可用。

问候 强尼

【问题讨论】:

  • Culture.CurrentCulture 不是您想要的吗?编辑:请注意,这是当前线程的文化(可以通过编程方式更改),但我 认为 默认情况下它设置为用户机器/操作系统的文化。
  • 嘿,当前文化将在申请期间明确改变。所以我不能相信这个价值。很抱歉我没有在我的原始帖子中提到这一点。
  • 没有其他建议?
  • 我用另一个建议更新了我的答案。

标签: c# silverlight system cultureinfo culture


【解决方案1】:

我相信 Culture.CurrentCulture 实际上会为您提供用户的文化。然而,它可以通过当前线程的Thread.CurrentCulture 属性更改或以编程方式设置。我不确定是否 Silverlight 是否可以在此机制之外访问用户的机器/操作系统文化/语言设置。

正如您在评论中提到的,您不能相信它,因为它肯定会在应用程序的整个生命周期中发生变化。也许你应该在应用程序第一次启动时记录当前的文化,然后再以编程方式更改它,并无限期地(静态或其他方式)存储它以供你的代码引用。

编辑:另一种可能性是利用托管浏览器及其 JavaScript。谷歌搜索我看到你可以访问window.navigator.language,它将报告浏览器的语言。 Internet Explorer 喜欢做自己的事情并报告browserLanguage、userLanguage 和systemLanguage。

你可以在页面上写一个小的 JavaScript 方法(你会想做更多的跨浏览器测试、版本测试和操作系统测试):

function GetUserLanguage()
{
    if (window.navigator.language)
        return window.navigator.language;
    else //yay IE
        return clientInformation.browserLanguage;
}

那么在 Silverlight 中你可能会有类似的东西:

string userLanguage = (string)HtmlPage.Window.Invoke("GetUserLanguage");
CultureInfo userCulture = new CultureInfo(userLanguage);

我不确定浏览器报告的所有文化(跨所有浏览器/版本/操作系统)是否与 Silverlight 中的文化列表匹配。

【讨论】:

  • 您好,再次感谢您的详细回答。作为一种解决方法,我现在使用 CurrentCulture 并将其保存到应用程序启动时的应用程序设置中。在这一点上,我别无选择,只能假设这是当前的系统语言。
  • ReferenceError: windows is not defined 正确 - window.navigator.language
  • @AlexSkiffin:感谢您发现这个错字;我现在已经修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 2012-10-21
  • 2011-11-29
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多