Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET中保存UICulture的最佳方法是什么?_Asp.net_Localization_Webforms - Fatal编程技术网

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

在ASP.NET中保存UICulture的最佳方法是什么?,asp.net,localization,webforms,Asp.net,Localization,Webforms,我正在开发双语ASP.NET应用程序,我想知道在整个应用程序中存储UICulture和Culture值的最佳方法是什么 饼干 会议 质询 或者别的什么 更新: 我想让同样的ASPX表单成为双语页面,到目前为止,我得到的答案是制作一个单独的页面,并通过子域访问它,我现在真正做的是使用会话,但我现在想知道,在不创建另一个副本的情况下,将页面双语化的最佳实践是什么。您始终可以使用URL重写来存储用户选择的文化偏好。不太清楚这是如何在ASP.Net中实现的,但在MVC中使用路由表很容易 为了说明这一

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

  • 饼干
  • 会议
  • 质询
  • 或者别的什么
更新:
我想让同样的ASPX表单成为双语页面,到目前为止,我得到的答案是制作一个单独的页面,并通过子域访问它,我现在真正做的是使用会话,但我现在想知道,在不创建另一个副本的情况下,将页面双语化的最佳实践是什么。

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

为了说明这一点,您的url如下所示: 作为一种解决方案,这消除了会话的开销、浏览器中有人关闭cookie的可能性以及生成的难看的查询字符串


我将尝试返回一个如何重新编写url的示例。

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

然而,大多数情况下,您可能希望每个页面和语言都有一个不同的URL,以便通过搜索引擎对其进行适当的索引。例如,URL类似于:

我更喜欢前两种选择

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


更新:这并不意味着你需要制作尽可能多的语言版本

如果每种语言都有子域:

  • 将每个子域指向您的站点
  • 在页面的codebehind中,重写
    InitializeCulture
    方法(可以对所有页面使用基类以保持其干燥)
  • 在重写的
    InitializeCulture
    方法中设置适当的区域性
  • 创建资源文件
  • 使用页面中的资源-将根据文化显示正确的翻译
如果您决定不使用子域,而是在URL中包含区域性名称,则可以使用URL重写从每个URL指向同一页面

一些代码可以帮助您开始:

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();
}

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

你会在雅虎、谷歌等网站上看到这种做法:

  • 等等

如何根据用户偏好设置区域性,在网站上选择语言或阅读浏览器语言?认真地说,“双字节”?子域与网站的内部表示无关。我没有投你反对票,但我可以提供一个解释。我得出的结论是,stackoverflow已经成为一种在线疗法,适用于无事可做的人、自负的人,以及工作不顺利的人。你可以分辨出他们是谁。它们通常有数千个积分,除非您为stackoverflow工作或符合上面提到的某个配置文件,否则无法累积。不管怎样,别担心。事实上,你当时有1420点意味着你知道你在说什么。这也意味着你不是他们中的一员……是的。知道什么被认为是不正确的,什么是不同意的,那就好了。它让你有机会找到答案,或者让它变得更好。它还为未来的读者提供了一点知识,否则他们将无法获得这些知识。没什么大不了的+1来自我。:-)