像大多数人一样,我在我的网站上使用了一堆 jquery 插件。从 Twitter bootstrap 到 jquery ui datepicker 等等。
但我需要我的网站是多语言的,所以我创建了一个名为 english.js 的通用语言文件,在该文件中我想声明一些来自插件的默认值以及其他语言变量.
问题是所有这些插件都有不同的结构来声明默认值。我已经看到了几个问题( jquery - setting plugin defaults? , Globally defining jQuery plugin parameters , jQuery plugin defaults ,...)。但他们并不清楚。
结构 1
$.fn.ajaxStatus = function (params)
{
var settings = $.extend(
{
defaultLoadingText :"Loading...",
defaultSavingText :"Saving...",
defaultDoneText :"Done",
defaultRedirectText:"Redirecting...",
defaultErrorText :"Oops! Our bad, something wrong.";
},$.fn.ajaxStatus.defaults,
params),
});
结构 2
jQuery.fn.extend({
shrinker:function (options) {
var opts = $.extend({
"moreText":"Read more",
"lessText":"hide",
}, $.fn.shrinker.defaults, options);
});
问题
在不修改插件的情况下,是否可以为每次使用插件时使用的功能分配一些默认值? 如何在外部文件中定义语言默认值?
现在,我的语言文件中有这个,但感觉不对,你是这样做的吗?
if ($.fn.ajaxStatus !== undefined) {
$.fn.ajaxStatus.defaults =
{
defaultLoadingText :"Loading2...",
defaultSavingText :"Saving2...",
defaultDoneText :"Done2",
defaultRedirectText:"Redirecting2...",
defaultErrorText :"Oops! Our bad, something wrong"
};
}
在此先感谢您的帮助。
最佳答案
我可以看到在一个对象中这样做,就像这样:
var en = {
defaultLoadingText: "Loading...",
defaultSavingText: "Saving...",
defaultDoneText: "Done",
defaultRedirectText: "Redirecting...",
defaultErrorText: "Oops! Our bad, something wrong.";
moreText: "Read more",
lessText: "hide"
};
假设插件之间的选项名称没有重叠,您可以使用以下方式启动您的插件:
$('').ajaxStatus(en);
$('').shrinker(en);
大多数插件接受一个选项对象并忽略额外的属性。如果您有一些其他选项要传递给特定插件,您只需使用 $.extend()
:
$('').ajaxStatus($.extend({}, { success: function () {} }, en));
如果您真的想将插件选项分开,只需创建另一个级别:
var en = {
ajaxStatus: {
defaultLoadingText: "Loading...",
defaultSavingText: "Saving...",
defaultDoneText: "Done",
defaultRedirectText: "Redirecting...",
defaultErrorText: "Oops! Our bad, something wrong.";
},
shrinker: {
moreText: "Read more",
lessText: "hide"
}
};
然后:
$('').ajaxStatus(en.ajaxStatus);
$('').shrinker(en.shrinker);
最后,您可以想象一下,通过将它们全部存储在一个多层对象中来更容易地获得不同的语言:
var localizedOptions = {
'en-US': {
ajaxStatus: {
defaultLoadingText: "Loading...",
defaultSavingText: "Saving...",
defaultDoneText: "Done",
defaultRedirectText: "Redirecting...",
defaultErrorText: "Oops! Our bad, something wrong.";
},
shrinker: {
moreText: "Read more",
lessText: "hide"
}
},
'es-ES': {
ajaxStatus: {
defaultLoadingText: "Cargar...",
defaultSavingText: "Guardar...",
defaultDoneText: "Terminado",
defaultRedirectText: "Redirigir...",
defaultErrorText: "¡Ay! Nuestra algo malo, malo.";
},
shrinker: {
moreText: "Leer más",
lessText: "esconder"
}
} // ... etc.
};
和
$('').ajaxStatus(localizedOptions[navigator.language || navigator.userLanguage].ajaxStatus);
我必须承认我自己没有使用过这样的东西,因为我通常以资源文件的形式获取语言文件。在这种情况下,我将仅通过服务器端逻辑输出单个键/值对集合并手动设置适当的插件属性。
在 ASP.NET MVC 中:
<script>
var Resources = {};
@foreach (var kvp in ViewBag.Resources) {
Resources['@kvp.Key'] = "@kvp.Value";
}
</script>
这将输出不同的集合,具体取决于我所在的页面。
关于javascript - Jquery - 创建一个通用语言文件来声明任何插件的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12907730/