我在
App_GlobalResources
项目的 asp.net
文件夹中创建了 3 个 resx 文件,以便制作一个多语言网站,正如你所知,它是 key-value
集,一切似乎都很好,在我想在 JavaScript 中使用值的情况下.
如果我在 aspx 文件中使用内联 JavaScript,则可以使用 this 方式或
来完成alert('<%= GetGlobalResourceObject([ResourceClassName],[ResourceKey]) %>');
或者
<asp:Literal runat="server" Text="<%$ Resources:[ResourceClassName], [ResourceKey] %>"/>
但是我应该如何在无法使用服务器端代码的 JavaScript 文件中实现这一点?
我使用的结构与我们在
ASP.Net
中使用的结构类似,并且我应用 JavaScript 对象,就像 CKEditor
在多语言功能中使用的那样。
假设您有这些文件:
Culture.js
Main.js
Default.aspx
Culture.js
将所有与翻译相关的单词和短语放置在如下位置:
if (typeof resource == "undefined") {
resource = {}// = new Object();
resource.lang = {};
}
//English language, United States culture
resource.lang['en-US'] = {
"lable": {
"clickHere": "Click here",
"enterYourName": "Enter your name"
},
"message": {
"deleteConfimation": "Are You sure you want to delete?",
"accessIsDenied": "Access is denied"
}
}
//Farsi language, Iran culture
resource.lang['fa-IR'] = {
"lable": {
"clickHere": "اینجا کلیک کنید",
"enterYourName": "نام خود را وارد کنید"
},
"message": {
"deleteConfimation": "آیا از حذف این مورد اطمینان دارید؟",
"accessIsDenied": "دسترسی مقدور نیست"
}
}
您可以添加任意数量的语言和文化,只需在
language-culture
中使用 resourse.lang['language-culture']
组合使它们能够区分,最后定义一个函数,就像您在 ASP.Net 中使用的那样,命名为 getGlobalResourceObject()
var getGlobalResourceObject = function (resourceClassName, resourceKey)
{
return resourse.lang[window.lang][resourceClassName][resourceKey];
}
Main.js
window.lang = "en-US";//Or "fa-IR"
alert(getGlobalResourceObject("message", "deleteConfimation"));
它会弹出一条消息,提示“您确定要删除吗?”如果
window.lang
等于 en-US
。
(我更喜欢在 window.lang
中设置当前文化)。
默认.aspx
在
Default.aspx
或 MasterPage
(如果有)中,在 Culture.js
之前加载 Main.js
,如下所示:
<script src="Culture.js"></script>
<script src="Main.js"></script>
要查找有关 ASP.NET 中全球化支持的信息,请参阅this Microsoft 页面。 根据页面,ScriptManager可以根据用户的文化下发不同的脚本。