0

我有一个名为HomeController的简单控制器和一些操作,例如

public ActionResult Index()
{
    return View();
}

我的索引页是

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
Test
</asp:Content>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
Hello World,<br/>
Test
</asp:Content>

如果我的索引页面返回“ Hello World ”,我想替换返回结果中的单词,我想将其更改为“ Hola Mundo ”或类似的东西..

我应该怎么做才能使我的项目全球化?我看到http://afana.me/post/aspnet-mvc-internationalization.aspx我不喜欢为每一种文化创建视图..我只想创建一个索引视图并将页面转换为选定的文化。

4

3 回答 3

1

您忘记了模型-视图-控制器的“模型”。

本质上,您设置了一个简单的 Model 类,其中包含您要设置的变量。您将它们设置在控制器中的某个位置,您的视图会显示这些变量。

非常简单的例子...

public class MyModel
{
   public string sayingOne { get; set; }
   public string sayingTwo { get; set; }
}

在你的控制器中

public ActionResult Index()
{
    MyModel model = new MyModel();
    if (someCondition)
    {
        model.sayingOne = "Hello";
        model.sayingTwo = "Mundo";
    }
    return View(model);
}

然后在您的视图中

@Model MyModel
...    
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
@MyModel.sayingOne @MyModel.sayingTwo
</asp:Content>
于 2013-05-10T22:50:31.350 回答
1

这篇文章应该让你开始。我不同意作者的前提,即您应该为每种语言创建一个视图(谈论违反 DRY),但全球化的其他方面应该为您指明正确的方向。

您的问题有很多,而且在 SO 答案的上下文中,这不是某人能够轻易传达的东西。我会搜索有关 MVC 和全球化的博客/教程。

于 2013-05-10T23:07:32.317 回答
1

在这里提出并回答了这个问题:ASP.Net MVC 3 中的全球化。不知道为什么正确的答案(该社区投票了 27 次)没有被选为正确答案,但这正是全球化/本地化 ASP.NET MVC 项目的方式。

复制粘贴:

您以与任何其他应用程序相同的方式对其进行本地化,如下所示:

  1. 创建一个文件夹,将其命名为资源
  2. 右键单击文件夹并添加类...选择资源文件。随便你怎么称呼它,例如 Strings.resx
  3. 在文件的属性下,将自定义工具更改为PublicResXFileCodeGenerator
  4. 使用翻译键和值对填充资源文件(这将是默认翻译)
  5. 以这种格式创建具有其所在区域性名称的其他资源:{name}.de.resx 例如 Strings.de.resx
  6. (这是为 Razor 使用的)破解打开 Views 文件夹中的 web.config 并将其添加到 /configuration/system.web.webPages.razor/pages/namespaces:(假设资源是您在其中创建资源的文件夹的名称和您没有更改资源文件本身的默认命名空间)。此步骤意味着您不必在每次要引用翻译时都完全限定视图中的资源类。
  7. 在您的视图中使用翻译代替文本,如以下代码:

    @Strings.MyString
    

字符串将根据 CultureInfo.CurrentCulture 在视图中自动翻译,但这不会为您自动设置

您将需要更改CurrentCulture(可能在Application_BeginRequest)。你如何做到这一点取决于你,它可能是一个设置它的路由值,或者你可以阅读用户的浏览器语言

您可以在 中找到用户首选语言的列表(按顺序)HttpContext.Current.Request.UserLanguages

您不需要为每种文化创建一个视图,您可以使用占位符创建视图模型,这些占位符将从资源中获取它们的值,并且您为每种文化创建资源(字符串列表),而不是按文化查看。

希望对你有帮助

于 2013-05-11T02:58:46.717 回答