You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

translation.js 4.0KB

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