Asp.net mvc 我如何在MVC中全球化视图结果,而不为每个文化创建页面?
我有一个名为HomeController的简单控制器,还有一些动作Asp.net mvc 我如何在MVC中全球化视图结果,而不为每个文化创建页面?,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我有一个名为HomeController的简单控制器,还有一些动作 public ActionResult Index() { return View(); } 我的索引页是 <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> <asp:Content ID="indexTitle" ContentPlaceH
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>
我不喜欢为每一种文化创建视图。。我只想创建一个索引视图,并将页面转换为所选区域性。您忘记了模型视图控制器的“模型”
从本质上讲,您可以设置一个简单的模型类,其中包含要设置的变量。
在控制器中的某个位置设置这些变量,视图将显示这些变量
非常简单的例子如下
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>
@Model-MyModel
...
@MyModel.sayingOne@MyModel.sayingTwo
您忘记了模型视图控制器的“模型”
从本质上讲,您可以设置一个简单的模型类,其中包含要设置的变量。
在控制器中的某个位置设置这些变量,视图将显示这些变量
非常简单的例子如下
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>
@Model-MyModel
...
@MyModel.sayingOne@MyModel.sayingTwo
应该让您开始。我不同意作者的假设,即你应该为每种语言创建一个视图(谈论违反DRY),但全球化的其他方面应该为你指明正确的方向
你的问题有很多,在一个非常简单的答案中,有些人很难表达出来。我会搜索有关MVC和全球化的博客/教程。应该会让您开始学习。我不同意作者的假设,即你应该为每种语言创建一个视图(谈论违反DRY),但全球化的其他方面应该为你指明正确的方向
你的问题有很多,在一个非常简单的答案中,有些人很难表达出来。我会搜索关于MVC和全球化的博客/教程。这个问题在这里被问到并回答了:。不确定为什么正确的答案(该社区投了27票)没有被选为正确答案,但这正是使ASP.NET MVC项目全球化/本地化的方法
复制粘贴:
您可以使用与以下任何其他应用程序相同的方式对其进行本地化:
创建一个文件夹,称之为Resources
右键单击文件夹并添加类。。。选择资源文件。可以随意称呼它,例如Strings.resx
在文件属性下,将自定义工具更改为PublicResXFileCodeGenerator
使用翻译键和值对填充资源文件(这将是默认翻译)
使用其所在区域性的名称以以下格式创建其他资源:{name}.de.resx,例如Strings.de.resx
(适用于Razor)打开Views文件夹中的web.config,并将其添加到/configuration/system.web.webPages.Razor/pages/namespace:(假设resources是您在其中创建资源的文件夹的名称,并且您没有更改资源文件本身的默认名称空间)。这一步意味着您不必每次引用翻译时都完全限定视图中的资源类
使用翻译来代替视图中的文本,如以下代码所示:
@Strings.MyString
字符串将根据CultureInfo.CurrentCulture在视图中自动转换,但这不是为您自动设置的
您需要更改CurrentCulture
(可能在应用程序中_BeginRequest
)。如何做到这一点取决于您,它可以是设置它的路由值,也可以是用户的浏览器语言
您可以在HttpContext.Current.Request.UserLanguages
中找到用户首选语言的列表(按顺序)
您不需要创建每个区域性的视图,您可以创建带有palceholder的视图模型,palceholder将从资源中获取它们的值,您可以创建每个区域性的资源(字符串列表),而不是每个区域性的视图
希望这将对您有所帮助此问题已在此处提出并回答:。不确定为什么正确的答案(该社区投了27票)没有被选为正确答案,但这正是使ASP.NET MVC项目全球化/本地化的方法
复制粘贴:
您可以使用与以下任何其他应用程序相同的方式对其进行本地化:
创建一个文件夹,称之为Resources
右键单击文件夹并添加类。。。选择资源文件。可以随意称呼它,例如Strings.resx
在文件属性下,将自定义工具更改为PublicResXFileCodeGenerator
使用翻译键和值对填充资源文件(这将是默认翻译)
使用其所在区域性的名称以以下格式创建其他资源:{name}.de.resx,例如Strings.de.resx
(适用于Razor)打开Views文件夹中的web.config,并将其添加到/configuration/system.web.webPages.Razor/pages/namespace:(假设resources是您在其中创建资源的文件夹的名称,并且您没有更改资源文件本身的默认名称空间)。这一步意味着您不必每次引用翻译时都完全限定视图中的资源类
使用翻译来代替视图中的文本,如以下代码所示:
@Strings.MyString
字符串将根据CultureInfo.CurrentCulture在视图中自动转换,但这不是为您自动设置的
您需要更改CurrentCulture
(可能在应用程序中_BeginRequest
)。如何做到这一点取决于您,它可以是设置它的路由值,也可以是用户的浏览器语言
您可以在HttpContext.Current.Request.user中找到用户首选语言的列表(按顺序)