【问题标题】:Easiest way to localize string in javascript在javascript中本地化字符串的最简单方法
【发布时间】:2014-05-05 13:36:24
【问题描述】:

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

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

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

<script type="text/javascript">
   var message = "Please enter value in valid range in order to ...";
   ....
</script>

【问题讨论】:

标签: c# javascript .net asp.net-mvc-4


【解决方案1】:

最简单的方法是在控制器中的变量中“设置”本地化字符串,然后构建一个 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>

【讨论】:

  • 由于这个 javascript 字符串在布局视图中,如果我想在每个页面上查看本地化字符串,我需要从每个返回视图的控制器发送变量。
  • 除非您将 &lt;add namespace="Application.Core.Resources"/&gt; 之类的内容添加到您的 Web.config 中,并将您的本地化字符串放在该命名空间中。
  • 能否请您更具体一点:我只有 3 个字符串,每个字符串都已本地化为 LocStrings.en-US、LocStrings.es-MX、....
【解决方案2】:

您还可以利用模型和属性注释中的标准资源文件来提供一些帮助。

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>

【讨论】:

    【解决方案3】:

    您可以使用“全球资源”功能。

    使用它,您可以创建一组“翻译”文件(称为资源文件),其中包含您的网络应用程序所需的所有各种翻译。

    以下文章为您提供了一个示例:http://www.developmentalmadness.com/archive/2009/05/20/aspnet-mvc-globalizationlocalization.aspx

    那篇文章使用较旧的 Web 表单视图引擎,但它也可以在 Razor 视图引擎中工作(@ 符号而不是 )。

    假设您添加了一个名为“MyTranslations”的资源文件,然后将您的翻译添加到此文件中,您的 html 现在将如下所示:

    <script type="text/javascript">
      messages = {
          AccessDenied: "@Html.Raw(Resources.MyTranslations.AccessIsDenied)",
          FieldRequired: "@Html.Raw(Resources.MyTranslations.FieldRequired)"
      };
    </script>
    

    【讨论】:

    • 嗯,我不同意你的观点,这是你回答的逐字记录。您谈论“在变量中设置控制器中的本地化字符串”。我的解决方案与任何控制器或视图模型断开连接。它使用 .NET 的内置资源管理功能,允许重复使用您的翻译,而无需重复地将它们附加到您的视图模型。在以不友好的讽刺反驳之前,也许您应该更深入地阅读人们的答案。这是一个可以提供帮助的网站。
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多