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

如何处理JavaScript文件中的本地化?,javascript,asp.net-mvc,localization,Javascript,Asp.net Mvc,Localization,我希望JavaScript代码与视图分离。 我需要对JavaScript生成的简单图像按钮进行本地化: <img src="..." onclick="..." title="Close" /> 将其标题本地化的最佳技术是什么 附言:我找到了阿伦德。这是正确的方向 编辑: 我得到了本地化助手类,它提供了Controller.Resource('foo')扩展方法 我正在考虑扩展它(helper),这样它就可以按其名称返回指定控制器的所有JavaScript资源(来自App\u

我希望JavaScript代码与视图分离。
我需要对JavaScript生成的简单图像按钮进行本地化:

<img src="..." onclick="..." title="Close" />

将其标题本地化的最佳技术是什么

附言:我找到了阿伦德。这是正确的方向

编辑:
我得到了本地化助手类,它提供了
Controller.Resource('foo')
扩展方法

我正在考虑扩展它(helper),这样它就可以按其名称返回指定控制器的所有JavaScript资源(来自
App\u LocalResources
中的“ClientSideResources”子文件夹)。然后-在
BaseController
中调用它,将它添加到
ViewData
并在
布局中呈现它

这是个好主意吗?编辑

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

<script type="text/javascript"
         src='<%= Url.Content( "~/Resources/Load?translate=Close,Open" %>'></script>
如果没有参数,它将输出整个翻译散列。使用参数可以为每个视图自定义参数

然后在JavaScript文件中使用它,如:

 $(function(){
     $('#button').click( function() {
        $("<img src=... title='" + local.Close + "' />")
           .appendTo("#someDiv")
           .click( function() { ... } );
     });
 });
$(函数(){
$(“#按钮”)。单击(函数(){
$("")
.appendTo(“#someDiv”)
。单击(函数(){…});
});
});
事实上,只要JavaScript代码在容器中本地化,我就不会太在意将JavaScript代码排除在视图之外。通常,我会将母版页设置为4个内容区域:标题、标题、主内容和脚本。标题、标题和主标题位于预期位置,脚本区域位于正文底部

我将所有JavaScript包括的内容(包括viewusercontrols的所有内容)放入脚本容器中。特定于视图的JavaScript代码位于includes之后。我根据需要将共享代码重构回脚本。我曾经考虑过使用一个控制器方法来整理脚本包含,也就是说,使用一个请求包含多个脚本,但还没有考虑到这一点


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

如果您坚持将其分开,可以执行以下操作:

var local = {};
local.Close = "Close";
local.Open = "Open";
//keep all of your localised vars somewhere
var title = '{title_from_server}';
document.getElementById('someImage').title = title;

请记住,如果您使用JavaScript代码初始化元素的任何文本,您的站点将在JavaScript不可用的情况下严重降级。

实际上ASP.NET Ajax有一个内置的本地化机制:

“我希望JavaScript与视图分开。”==“将JavaScript与标记分开也是一个很好的做法。”。顺便说一句,为什么在JS onload上附加onclick处理程序更可取?我错过了你问题中的“由JS生成”部分——只是扫描了一下。在这种情况下,我会考虑将本地化数据写入视图并使JavaScript从本地对象加载它。将重写。很可能您错过了它,因为我编辑了我的问题(提交后约5秒)以添加它。:)@Arnis--re:添加onload。当我认为您正在内联呈现元素时,就做出了这样的评论。我更喜欢使用click()方法来添加处理程序,而不是在动态添加时通过元素属性来添加处理程序。有关如何在动态创建元素时使用本地化资源的示例,请参见我的更新答案。该死。。。再次忘记可能缺少javascript支持:(