Asp.net 本地化javascript消息和验证文本

Asp.net 本地化javascript消息和验证文本,asp.net,javascript,jquery,localization,Asp.net,Javascript,Jquery,Localization,我正在做一个多语言的网络项目。例如,项目的一部分涉及一些定制的google映射,该映射利用客户端交互,使用jquery/.net向映射添加点并将其保存到数据库 将有一些验证和其他信息消息(例如“请在地图上至少添加一个点”)必须本地化 我现在能想到的唯一选择是: 使用javascript中的代码呈现块从资源文件中提取本地化消息 将隐藏字段与meta:resourcekey一起使用,可以使用当前区域性自动从资源文件中获取适当的本地化消息,并在必要时在jquery中获取.val() 每次需要消息时,通

我正在做一个多语言的网络项目。例如,项目的一部分涉及一些定制的google映射,该映射利用客户端交互,使用jquery/.net向映射添加点并将其保存到数据库

将有一些验证和其他信息消息(例如“请在地图上至少添加一个点”)必须本地化

我现在能想到的唯一选择是:

  • 使用javascript中的代码呈现块从资源文件中提取本地化消息

  • 将隐藏字段与meta:resourcekey一起使用,可以使用当前区域性自动从资源文件中获取适当的本地化消息,并在必要时在jquery中获取.val()

  • 每次需要消息时,通过键/语言进行webservice调用以获取正确的消息

  • 有什么想法、经历吗

    编辑:


    我更喜欢使用.net资源文件来保持与应用程序其余部分的一致性。

    我以前做过这样的工作,其中有隐藏字段,它们的值在Page_Init()和Page_Load()上设置,并具有全局和本地资源文件中的适当值。然后javascript代码将处理这些隐藏的值

    代码隐藏

    this.hfInvalidCheckDateMessage.Value = this.GetLocalResourceObject("DatesRequired").ToString();
    
    $('#<%= btnSearch.ClientID %>').click(function(e) {
        if (!RequiredFieldCheck()) {
            var message = $("#<%= hfInvalidCheckDateMessage.ClientID %>").val();
            alert(message);
            e.preventDefault();
            $("#<%= txtAuthDateFrom.ClientID %>").focus();
         }
     });
    
    Page.aspx

    this.hfInvalidCheckDateMessage.Value = this.GetLocalResourceObject("DatesRequired").ToString();
    
    $('#<%= btnSearch.ClientID %>').click(function(e) {
        if (!RequiredFieldCheck()) {
            var message = $("#<%= hfInvalidCheckDateMessage.ClientID %>").val();
            alert(message);
            e.preventDefault();
            $("#<%= txtAuthDateFrom.ClientID %>").focus();
         }
     });
    
    $('#')。单击(函数(e){
    如果(!RequiredFieldCheck()){
    var message=$(“#”)val();
    警报(信息);
    e、 预防默认值();
    $(“#”)焦点();
    }
    });
    

    免责声明。。。不确定这是否是最好的路线,但它似乎确实很有效。

    我使用这种技术。这使得几乎没有编码经验的任何人都可以轻松地编辑短语JavaScript文件

    var lang = 0 // 0 = english, 1 = french
    var phrases=[]
    
    phrases["plans"] = "Rate Plans and Features|Forfaits et options").split("|")
    
    然后将其输出为:

    phrases["plans"][lang]
    

    …根据需要添加更多列。

    好的,我构建了一个通用的web服务,允许我获取资源并将其返回到字典中(这可能是转换为字典的更好方法)

    然后,您可以从局部变量中获取值,如下所示:

    本地化。关键1

    这里唯一需要注意的是,如果要将本地化分配给全局变量,必须运行async=false,否则在需要时将无法提供翻译。我试图使用“get”来缓存响应,但它对我不起作用。见这个问题:


    我已经实现了此处所述解决方案的修改版本:


    如果需要的话,我通过更改正则表达式和使用
    HttpContext.GetGlobalResourceObject
    方法来检索资源字符串,从而允许使用多个资源文件名。

    是的,我不太喜欢将代码呈现块混合到javascript中。我想到的另一个选择是将web服务中的资源文件键/值作为json加载,然后根据需要查找这些值。这对我来说不太合适,因为我想使用共享的.net资源文件。使用这种与数组位置相关的方法不是很好的做法。这导致代码不太清晰。好主意。我想是不是太大了。这比将所有本地化写入隐藏字段要好。代码呈现块也会有同样的问题——无论如何都会写入js。其目的更多的是界面/验证消息,而不是大块的内容或html。您可以设置一些脚本来调查JavaScript文件,以找出哪些本地化消息在那里真正被使用。然后,您只能将那些仅在那里使用的消息发送到JavaScript。这将使尺寸减小。我正在使用这种方法将GNUgetText引入JavaScript,如下所述:非常有趣的方法。再说一次,由于我依赖于共享的.net资源文件,所以我不认为我可以使用它。尽管ajax调用必须同步运行,但速度相当快,因此阻塞是不可察觉的。很好用!