Arn*_*psa 13 javascript asp.net-mvc localization
我希望JavaScript代码与视图分开.
我得到了为JavaScript生成的简单图像按钮实现本地化的要求:
<img src="..." onclick="..." title="Close" />
Run Code Online (Sandbox Code Playgroud)
什么是本地化它的最佳技术?
编辑:
我得到了Localization helper类,它提供了Controller.Resource('foo')扩展方法.
我正在考虑扩展它(帮助器),以便它可以App_LocalResources通过其名称返回指定控制器的所有JavaScript资源(来自"ClientSideResources"子文件夹).然后 - 调用它BaseController,将其添加到ViewData并呈现它Layout.
这是个好主意吗?
编辑
考虑将必要的本地化资源写入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代码.