我正在开发双语 ASP.NET 应用程序,我想知道帽子是在整个应用程序中存储 UICulture 和 Culture 值的最佳方式吗?
- 饼干。
- 会议。
- 请求参数。
- 或者是其他东西。
更新: 我想让相同的 ASPX 表单成为双语页面,到目前为止我得到的答案是制作一个单独的页面并使其可以被子域访问,我现在真正在做的是使用 Session,但我现在想知道用户资源文件的最佳做法是使页面双语而不创建另一个副本。
我正在开发双语 ASP.NET 应用程序,我想知道帽子是在整个应用程序中存储 UICulture 和 Culture 值的最佳方式吗?
更新: 我想让相同的 ASPX 表单成为双语页面,到目前为止我得到的答案是制作一个单独的页面并使其可以被子域访问,我现在真正在做的是使用 Session,但我现在想知道用户资源文件的最佳做法是使页面双语而不创建另一个副本。
通常,这取决于您的特定用例。
然而,大多数情况下,您可能希望为每个页面和语言设置不同的URL,以便搜索引擎对其进行正确索引。例如 URL 是这样的:
我更喜欢前两个选项。
或者,您可以在用户首次访问您的网站时根据他们的浏览器语言重定向用户(但请确保用户仍然可以浏览其他语言)。
更新:这并不意味着您必须制作与语言一样多的网站版本。
如果您有每种语言的子域:
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();
}
您始终可以使用 URL 重写来存储用户选择的文化偏好。不是特别确定这是如何在 ASP.Net 中实现的,但是在 MVC 中使用路由表很容易。
为了说明,您的 url 看起来像这样:http://example.org/en-gb/Action 作为一种解决方案,这消除了会话的开销、有人在浏览器中关闭了 cookie 的可能性以及难看的生成的 QueryString。
我将尝试以如何进行 url 重写的示例返回。
最佳实践是为每种语言创建子域\单独的站点,并使用其自己的单独 IIS 网站。对于需要双字节的亚洲语言尤其如此。
你会在 yahoo、google 等平台上看到这种做法: