我正在使用不同人类语言的Datatables.js。我使用Datatables提供的语言插件,它们工作正常。但是,我想用自己的翻译覆盖一些翻译。
我怎样才能以最好的方式做到这一点?
这是我的代码:
function getLanguage() {
var $langMap = {
en: 'English',
es: 'Spanish'
};
var $lang = $('html').attr('lang');
return '//cdn.datatables.net/plug-ins/1.10.13/i18n/' + $langMap[$lang] + '.json';
}
// Build Datatable
$('#example').DataTable({
language: {
url: getLanguage() // works perfectly, but I need to overwrite with a few custom text options
}
});
说,我想ower写这些语言选项:
en: {
// Overwrite defaults with this string
"lengthMenu": "Display _MENU_ records per page - custom test",
},
es: {
// Overwrite Spanish defaults with this string
"lengthMenu": "Mostrar _MENU_ registros - algo muy especial...",
}
答案 0 :(得分:0)
您可以展开langMap
以保留要添加到语言结构中的修改:
var langMap = {
en: {
path: 'English',
mods: {
sLengthMenu: "Display _MENU_ records per page - custom test"
}
},
es: {
path: 'Spanish',
mods: {
sLengthMenu: "Mostrar _MENU_ registros - algo muy especial..."
}
}
};
注意我使用的是匈牙利表示法,sLengthMenu
而不是lengthMenu
。这是因为语言文件仍然使用这种格式。然后通过同步AJAX请求加载语言对象,使用mods
进行修改并返回
function getLanguage() {
var lang = $('html').attr('lang');
var path = '//cdn.datatables.net/plug-ins/1.10.13/i18n/';
var result = null;
$.ajax({
async: false,
url: path + langMap[lang].path + '.json',
success: function(obj) {
result = $.extend({}, obj, langMap[lang].mods)
}
})
return result
}
// Build Datatable
$('#example').DataTable({
language: getLanguage()
});
演示 - > http://jsfiddle.net/v84wjLqe/ (使用硬编码es
仅供测试)
注意:您可以考虑使用promise,jQuery deferred,q或其中一个承诺polyfill,而不是使用async: false
。但这是不可能的。