构建语言切换器 - 仅限2种语言 - ASP.NET MVC

时间:2009-07-23 06:38:52

标签: c# asp.net-mvc switch-statement

ASP.NET MVC应用程序,接近完成,然后决定它需要一个语言切换器。它只是两种语言:英语和日语。他们应该能够在两者之间切换,但是如果没有选择,则应该选择浏览器的默认语言。

我想知道在这种情况下最佳解决方案是什么。

首先想到,路线!所以我将路由更改为在每条路径的末尾都有/{l},并默认为l = ""。然后,在我的BaseController中(每个控制器都基于它),我检查路由中的l变量。每个操作都会根据语言返回一个视图。

我想简单地能够在网址的末尾破解/ ja-jp,它会以日语显示视图。它似乎没有正确的路线。然后,我的观点真的很糟糕,手工编码链接...我不能让帮助者首先输出正确的链接......并养成了手工编码的坏习惯。所以,我必须再次重新编码每个链接 - 最后破解语言变量。

第二个想法 ...好吧,使用jQuery将语言变量附加到所有锚点的href。在某些需要隐藏hrefs的情况下,这似乎过于笨拙和困难......等等。

所以......在这一点上,我决定尽一切可能。在两种语言之间切换的最优雅方式是什么 - 不使用资源文件?我只是希望动作根据语言在2个视图之间进行选择。

我是否重写了我必须使用Html帮助程序的每个链接,然后让路由工作?然后在BaseController中将语言设置为英语,如果它们没有值?

非常感谢任何建议,谢谢。

3 个答案:

答案 0 :(得分:2)

我认为最简单和用户友好的方法之一是使用域(实际上是子域)来识别它所说的语言。它不需要改变Html帮助器中的任何东西(那些HTML.ActionLink),因为它只相对于域工作。此外,用户可能看起来很整洁,当看到该域时,他们确切地知道它应该是什么语言,并且不会使URL过长。您需要做的就是在语言切换器中执行某些操作。

无论采用何种方法,我强烈反对使用第二种想法,因为你不能否认(甚至0.1%)没有javascript工作的人访问你的日本网站,对吗?

答案 1 :(得分:2)

不要将语言放在路线的尽头。把它放在开头。 这使得使用可能具有可选参数的不同路径变得容易。

语言设置应该只是改变翻译。

如果您的日本用户有特定规则(价格,交付选项等),那么您应该实现语言和国家/地区特定信息。您可以在“多租户应用程序”下找到某个国家/地区,但浏览器语言无法检测到该国家/地区。

日本用户可以浏览英文网站并在日本翻译中查看英文内容

    routes.MapRoute(
        // Route name
        "LocalizedRoute",
        // URL with parameters                              
        ("{language}/{controller}/{action}"),
        // Parameter defaults
  new
  {

          action = "Index",
          language = "de"

      },
                    //Parameter constraints
        new { language = @"en-us|ja-jp" }

答案 2 :(得分:1)

我们在制作网站时发现,不仅仅是需要改变的语言,而且我们国际客户的意见本身也需要不同。 I.E.我们的香港办事处需要不同数量的空间和数据来查看我们的英语办公室的数据。只是稍微改变了关于视图布局的语言并给我带来了一些麻烦。

What we ended up doing was this

使用非常少量的编码,您可以覆盖到您的视图的路由,并在您喜欢的任何情况下将英语发送到一组视图,将日语发送到另一组。无需更改URL或在客户端进行操作,甚至无需更改操作。

编辑:重新阅读后,我认为这将非常适合您的网站,因为您使用两组视图,每种语言一组。