本地化javascript消息和validation文本

我正在开发一个多语言的网络项目。 例如,项目的一部分涉及一些自定义谷歌映射,利用客户端interace使用jquery / .net将点添加到地图并将它们保存到数据库。

将有一些必须进行本地化的validation和其他信息性消息(例如,“请在地图中添加至少一个点”)。

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

  1. 在javascript中使用代码渲染块从资源文件中提取本地化消息

  2. 使用带有meta:resourcekey的隐藏字段,使用当前区域性自动从资源文件中获取正确的本地化消息,并在必要时在jquery中获取.val()。

  3. 每次需要消息时,进行Web服务调用以按键/语言获取正确的消息。

有什么想法,经历吗?

编辑:

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

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

 _  _ Public Function GetResources(ByVal resourceFileName As String, ByVal culture As String) As Dictionary(Of String, String) Dim reader As New System.Resources.ResXResourceReader(String.Format(Server.MapPath("/App_GlobalResources/{0}.{1}.resx"), resourceFileName, culture)) If reader IsNot Nothing Then Dim d As New Dictionary(Of String, String) Dim enumerator As System.Collections.IDictionaryEnumerator = reader.GetEnumerator() While enumerator.MoveNext d.Add(enumerator.Key, enumerator.Value) End While Return d End If Return Nothing End Function 

然后,我可以获取此json结果并将其分配给局部变量:

 // load resources $.ajax({ type: "POST", url: "mapping.asmx/GetResources", contentType: "application/json; charset=utf-8", dataType: "json", data: '{"resourceFileName":"common","culture":"en-CA"}', cache: true, async: false, success: function(data) { localizations = data.d; } }); 

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

localizations.Key1

这里唯一的问题是,如果要将本地化分配给全局变量,则必须运行async = false,否则在需要时将无法使用这些转换。 我正在尝试使用’get’,所以我可以缓存响应,但它不适合我。 看到这个问题:

无法通过GET ajax web请求返回Dictionary(Of String,String),与POST一起使用

我之前已经完成了这个,其中隐藏字段的值设置在Page_Init()和Page_Load()上,并带有来自全局和本地资源文件的适当值。 然后javascript代码将使用这些隐藏的值。

代码背后

 this.hfInvalidCheckDateMessage.Value = this.GetLocalResourceObject("DatesRequired").ToString(); 

Page.aspx

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

免责声明 ……不确定这是否是最好的路线,但似乎确实运作良好。

我已经实现了这里描述的解决方案的修改版本: http : //madskristensen.net/post/Localize-text-in-JavaScript-files-in-ASPNET.aspx

我通过更改正则表达式并使用HttpContext.GetGlobalResourceObject方法检索资源字符串,将其更改为允许多个资源文件名(如果需要)。

我用这种技术。 它使编辑经验很少的任何人都可以轻松编辑JavaScript文件。

 var lang = 0 // 0 = english, 1 = french var phrases=[] phrases["plans"] = "Rate Plans and Features|Forfaits et options").split("|") 

然后你输出它:

 phrases["plans"][lang] 

…根据需要添加更多列。