Datatables.js - 多种自定义语言

时间:2017-03-30 12:43:18

标签: jquery datatables-1.10

我正在使用不同人类语言的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...",
  }

JsFiddle here

参考:Datatables.js language options

1 个答案:

答案 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 deferredq或其中一个承诺polyfill,而不是使用async: false。但这是不可能的。