如何处理JavaScript文件中的本地化?

Arn*_*psa 13 javascript asp.net-mvc localization

我希望JavaScript代码与视图分开.
我得到了为JavaScript生成的简单图像按钮实现本地化的要求:

<img src="..." onclick="..." title="Close" />
Run Code Online (Sandbox Code Playgroud)

什么是本地化它的最佳技术?

PS:我找到 Ayende 的解决方案.这是正确的方向.

编辑:
我得到了Localization helper类,它提供了Controller.Resource('foo')扩展方法.

我正在考虑扩展它(帮助器),以便它可以App_LocalResources通过其名称返回指定控制器的所有JavaScript资源(来自"ClientSideResources"子文件夹).然后 - 调用它BaseController,将其添加到ViewData并呈现它Layout.

这是个好主意吗?

tva*_*son 9

编辑

考虑将必要的本地化资源写入JavaScript对象(哈希),然后使用它来查找动态创建的对象.我认为这比回到服务器进行翻译更好.这与通过viewdata添加它类似,但可能更灵活一些.FWIW,我可以认为本地化资源是View的一部分,而不是控制器的一部分.

在视图中:

<script type="text/javascript"
         src='<%= Url.Content( "~/Resources/Load?translate=Close,Open" %>'></script>
Run Code Online (Sandbox Code Playgroud)

这将输出如下内容:

var local = {};
local.Close = "Close";
local.Open = "Open";
Run Code Online (Sandbox Code Playgroud)

没有参数,它将输出整个翻译哈希.使用参数使您能够根据视图自定义它.

然后,您可以在JavaScript文件中使用它,例如:

 $(function(){
     $('#button').click( function() {
        $("<img src=... title='" + local.Close + "' />")
           .appendTo("#someDiv")
           .click( function() { ... } );
     });
 });
Run Code Online (Sandbox Code Playgroud)

实际上,只要JavaScript代码本地化在一个容器中,我就不会太过讨厌将JavaScript代码保留在我的视图之外.通常我会在主页面上设置4个内容区域:标题,标题,主要和脚本.标题,标题和主要去你想象的地方,脚本区域位于正文的底部.

我将所有JavaScript包括(包括任何用于viewusercontrols的)包含在脚本容器中.特定于视图的JavaScript代码位于包含之后.我根据需要将共享代码重构为脚本.我曾考虑使用控制器方法来整理脚本包含,即使用单个请求包含多个脚本,但尚未解决这个问题.

这样做的好处是可以保持JavaScript代码的可读性,但也允许我根据需要轻松地将模型或视图数据注入JavaScript代码.