Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

translation.js 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. var i18n = require("i18next-client");
  2. var languages = require("../../service/translation/languages");
  3. var DEFAULT_LANG = languages.EN;
  4. var initialized = false;
  5. var waitingForInit = [];
  6. i18n.addPostProcessor("resolveAppName", function(value, key, options) {
  7. return value.replace("__app__", interfaceConfig.APP_NAME);
  8. });
  9. var defaultOptions = {
  10. detectLngQS: "lang",
  11. useCookie: false,
  12. fallbackLng: DEFAULT_LANG,
  13. shortcutFunction: 'defaultValue',
  14. load: "unspecific",
  15. resGetPath: 'lang/__ns__-__lng__.json',
  16. ns: {
  17. namespaces: ['main', 'languages'],
  18. defaultNs: 'main'
  19. },
  20. lngWhitelist : languages.getLanguages(),
  21. fallbackOnNull: true,
  22. useDataAttrOptions: true,
  23. app: interfaceConfig.APP_NAME,
  24. getAsync: true,
  25. customLoad: function(lng, ns, options, done) {
  26. var resPath = "lang/__ns__-__lng__.json";
  27. if(lng === languages.EN)
  28. resPath = "lang/__ns__.json";
  29. var url = i18n.functions.applyReplacement(resPath, { lng: lng, ns: ns });
  30. initialized = false;
  31. i18n.functions.ajax({
  32. url: url,
  33. success: function(data, status, xhr) {
  34. i18n.functions.log('loaded: ' + url);
  35. done(null, data);
  36. },
  37. error : function(xhr, status, error) {
  38. if ((status && status == 200) ||
  39. (xhr && xhr.status && xhr.status == 200)) {
  40. // file loaded but invalid json, stop waste time !
  41. i18n.functions.error('There is a typo in: ' + url);
  42. } else if ((status && status == 404) ||
  43. (xhr && xhr.status && xhr.status == 404)) {
  44. i18n.functions.log('Does not exist: ' + url);
  45. } else {
  46. var theStatus = status ? status :
  47. ((xhr && xhr.status) ? xhr.status : null);
  48. i18n.functions.log(theStatus + ' when loading ' + url);
  49. }
  50. done(error, {});
  51. },
  52. dataType: "json",
  53. async : options.getAsync
  54. });
  55. }
  56. // options for caching
  57. // useLocalStorage: true,
  58. // localStorageExpirationTime: 86400000 // in ms, default 1 week
  59. };
  60. function initCompleted(t)
  61. {
  62. initialized = true;
  63. $("[data-i18n]").i18n();
  64. for(var i = 0; i < waitingForInit.length; i++)
  65. {
  66. var obj = waitingForInit[i];
  67. obj.callback(i18n.t(obj.key));
  68. }
  69. waitingForInit = [];
  70. }
  71. module.exports = {
  72. init: function (lang) {
  73. initialized = false;
  74. var options = defaultOptions;
  75. if(lang)
  76. options.lng = lang;
  77. i18n.init(options, initCompleted);
  78. },
  79. translateString: function (key, cb, options) {
  80. if(!cb)
  81. return i18n.t(key, options);
  82. if(initialized)
  83. {
  84. cb(i18n.t(key, options));
  85. }
  86. else
  87. {
  88. waitingForInit.push({"callback": cb, "key": key});
  89. }
  90. },
  91. setLanguage: function (lang) {
  92. initialized = false;
  93. if(!lang)
  94. lang = DEFAULT_LANG;
  95. i18n.setLng(lang, defaultOptions, initCompleted);
  96. },
  97. getCurrentLanguage: function () {
  98. return i18n.lng();
  99. },
  100. translateElement: function (selector) {
  101. selector.i18n();
  102. },
  103. generateTranslatonHTML: function (key, defaultString, options) {
  104. var str = "<span data-i18n=\"" + key + "\"";
  105. if(options)
  106. {
  107. str += " data-i18n-options=\"" + JSON.stringify(options) + "\"";
  108. }
  109. str += ">";
  110. if(!options)
  111. options = {};
  112. if(defaultString)
  113. {
  114. options.defaultValue = defaultString;
  115. }
  116. str += this.translateString(key, null, options);
  117. str += "</span>";
  118. return str;
  119. }
  120. };