C# 在javascript中本地化字符串的最简单方法
在我的mvc4应用程序中,我有一个内部布局视图javascript函数,它只有3个字符串,在用户视图中呈现 我的mvc4应用程序使用cookie值在4种语言上进行本地化,并基于该值设置当前线程 本地化这3个字符串的最简单解决方案是什么C# 在javascript中本地化字符串的最简单方法,c#,javascript,.net,asp.net-mvc-4,C#,Javascript,.net,Asp.net Mvc 4,在我的mvc4应用程序中,我有一个内部布局视图javascript函数,它只有3个字符串,在用户视图中呈现 我的mvc4应用程序使用cookie值在4种语言上进行本地化,并基于该值设置当前线程 本地化这3个字符串的最简单解决方案是什么 <script type="text/javascript"> var message = "Please enter value in valid range in order to ..."; .... </script>
<script type="text/javascript">
var message = "Please enter value in valid range in order to ...";
....
</script>
var message=“请在有效范围内输入值,以便……”;
....
最简单的方法是在变量中“设置”控制器中的本地化字符串,然后根据以下内容构建要使用的JavaScript变量:
<script type="text/javascript">
userName = "@Model.UserName";
someSetting = parseInt("@Model.someSetting");
messages = { // Or even an object
InvalidRights: "@Html.Raw(ValidationMessages.UserHasInvalidRights)",
FileRequired: "@Html.Raw(ValidationMessages.FileIsRequired)"
};
</script>
userName=“@Model.userName”;
someSetting=parseInt(@Model.someSetting”);
messages={//甚至是一个对象
InvalidRights:“@Html.Raw(ValidationMessages.UserHasInvalidRights)”,
FileRequired:“@Html.Raw(ValidationMessages.FileIsRequired)”
};
您可以使用“全局资源”功能
使用此功能,您可以创建一组“翻译”文件(称为资源文件),其中包含web应用程序所需的所有各种翻译
下面的文章为您提供了一个这样做的示例:
那篇文章使用了旧的Web表单视图引擎,但它也可以在Razor视图引擎中工作(@symbol而不是the)
假设您添加了一个名为“MyTranslations”的资源文件,然后将您的翻译添加到此文件中,您的html现在看起来如下所示:
<script type="text/javascript">
messages = {
AccessDenied: "@Html.Raw(Resources.MyTranslations.AccessIsDenied)",
FieldRequired: "@Html.Raw(Resources.MyTranslations.FieldRequired)"
};
</script>
消息={
AccessDenied:“@Html.Raw(Resources.MyTranslations.AccessIsDenied)”,
FieldRequired:“@Html.Raw(Resources.MyTranslations.FieldRequired)”
};
您还可以利用模型和属性注释中的标准资源文件来提供一些帮助
public class MyModel:BaseModel
{
[Required(ErrorMessage = "*")]
[Display(ResourceType = typeof(RES.labels),Name = "lblLanguageCode")]
public string LanguageCode { get; set; }
[Required(ErrorMessage = "*")]
[Display(ResourceType = typeof(RES.labels), Name = "lblCountryCode")]
public string CountryCode{ get; set; }
...
}
您可以返回模型中的任何内容。我刚刚展示了一种在模型中很好地连接翻译的方法
<script type="text/javascript">
test= '@Model.SomeErrorString';
</script>
test='@Model.SomeErrorString';
最简单的方法(在您的情况下)是利用razor设置JavaScript变量,请参阅本文:。由于此javascript字符串位于布局视图中,如果我想在每个页面上看到本地化字符串,我需要从每个返回视图的控制器发送变量。除非您向Web.config
添加类似
的内容,我只有3个字符串,每个字符串都已经在LocStrings.en-US,LocStrings.es-MX,….嗯,我不同意你说的这是你答案的逐字记录。您将讨论“在控制器中,在变量中设置本地化字符串”。我的解决方案与任何控制器或viewmodel断开连接。它使用.NET的内置资源管理功能,允许重用您的翻译,而无需重复将其附加到视图模型。也许你应该在用不友好的讽刺反驳之前更深入地阅读人们的答案。这是一个有用的网站。