Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在javascript中本地化字符串的最简单方法_C#_Javascript_.net_Asp.net Mvc 4 - Fatal编程技术网

C# 在javascript中本地化字符串的最简单方法

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>

在我的mvc4应用程序中,我有一个内部布局视图javascript函数,它只有3个字符串,在用户视图中呈现

我的mvc4应用程序使用cookie值在4种语言上进行本地化,并基于该值设置当前线程

本地化这3个字符串的最简单解决方案是什么

<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的内置资源管理功能,允许重用您的翻译,而无需重复将其附加到视图模型。也许你应该在用不友好的讽刺反驳之前更深入地阅读人们的答案。这是一个有用的网站。