在ASP.NET中保存UICulture的最佳方法是什么?

时间:2012-05-09 11:32:06

标签: asp.net localization webforms

我正在开发双语ASP.NET应用程序,我想知道hat是在整个应用程序中存储UICulture和Culture值的最佳方式吗?

  • 缓存数据。
  • 会话。
  • 查询字符串。
  • 或其他。

更新 我想将相同的ASPX表格制作成双语页面,到目前为止我得到的答案是创建一个单独的页面并使其可以通过子域访问,我现在真正在做的是使用会话,但我现在想要用户资源文件的最佳做法是什么才能使页面双语而不创建另一个副本。

3 个答案:

答案 0 :(得分:3)

通常,这取决于您的特定用例。

但是,大多数情况下,您可能希望为每个网页和语言设置不同的网址,以便搜索引擎正确编入索引。例如URL就像:

我更喜欢前两个选项。

或者,您可以在首次到达您的网站时根据用户的浏览器语言重定向用户(但请确保用户仍然可以浏览其他语言)。


更新:这并不意味着您必须制作与您拥有语言一样多的网站版本。

如果您有每种语言的子域名:

  • 将每个子域指向您的网站
  • 在您的网页的代码隐藏中,您覆盖InitializeCulture方法(您可以为所有网页使用基类以使其保持干燥状态)
  • 在覆盖的InitializeCulture方法
  • 中设置适当的文化
  • 创建资源文件
  • 使用页面中的资源 - 将根据文化显示正确的翻译。

如果您决定不使用子域名但在网址中包含文化名称,则可以使用网址重写指向每个网址的同一页面。

一些代码可以帮助您入门:

protected override void InitializeCulture() {
    // Identify the culture and replace the hardcoded values below
    // (Use Request.Url.xxx for example)
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en", false);
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
    base.InitializeCulture();
}

答案 1 :(得分:-1)

您始终可以使用URL重写来存储用户选择的文化偏好。不是特别确定在ASP.Net中如何实现这一点,但在MVC中使用路由表很容易。

为了阐明,您的网址看起来像这样:http://example.org/en-gb/Action 作为一种解决方案,这可以消除会话开销,某人在浏览器中关闭cookie的可能性以及生成的难看的QueryString。

我会尝试回到一个如何重写网址的例子。

答案 2 :(得分:-1)

最佳做法是使用自己独立的IIS网站为每种语言创建子域\单独的站点。对于需要双字节的亚洲语言尤其如此。

你会在雅虎,谷歌等地看到这种做法: