localization.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /* Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.*/
  2. /***
  3. * 该文件用来根据语言环境加载相应的示例页面文本提示
  4. * notice:
  5. * 1.依赖jQuery
  6. * 2.配置:依赖locales目录,具体的文本键值对在locales下的resources.js文件中配置。
  7. * 3.使用:在具体的示例页使用键值对,命名空间为resources.
  8. * 如 alert(resources.msg_tip),alert(resources.text_btn)
  9. */
  10. var Localization = {
  11. //初始化加载国际化资源文件
  12. initializeI18N: null,
  13. //执行翻译替换
  14. localize: null,
  15. //挂在全局变量
  16. initGlobal: null
  17. };
  18. (function (nameSpace, $) {
  19. var targetScript = (function () {
  20. var r = new RegExp("(^|(.*?\\/js\\/))(localization\.js)(\\?|$)"),
  21. s = document.getElementsByTagName('script');
  22. for (var i = 0; i < s.length; i++) {
  23. var src = s[i].getAttribute('src');
  24. if (src && src.match(r)) {
  25. return s[i];
  26. }
  27. }
  28. })();
  29. function initializeI18N(path, callback) {
  30. var localPath = path + "./locales",
  31. file = "/resources.js";
  32. var filePathMap = {
  33. "en-US": localPath + "/en-US" + file,
  34. "zh-CN": localPath + "/zh-CN" + file
  35. };
  36. //脚本加载完成标志
  37. var lang = utils.getLanguage();
  38. inputScript(filePathMap[lang], function () {
  39. i18next.init({
  40. lng: lang,
  41. whitelist: ["zh-CN", "en-US"],
  42. fallbackLng: ["zh-CN", "en-US"]
  43. },function(){
  44. if (window.isSite) {
  45. var webResourceURL = '../../web/locales/'+lang+'/resources.js';
  46. $.get(webResourceURL, function () {
  47. for (var name in window.webResources) {
  48. var subWeb = window.webResources[name];
  49. var subExamples = window.examplesResources[name];
  50. //重名以webResource为准
  51. if (typeof window.webResources[name] == 'object') {
  52. if (!subExamples) {
  53. subExamples = {};
  54. }
  55. for (var name1 in subWeb) {
  56. subExamples[name1] = subWeb[name1];
  57. }
  58. } else {
  59. subExamples[name1] = subWeb[name];
  60. }
  61. }
  62. window.resources = window.examplesResources;
  63. i18next.addResourceBundle && i18next.addResourceBundle(lang, 'translation', window.resources);
  64. callback && callback();
  65. })
  66. } else {
  67. window.resources = window.examplesResources;
  68. i18next.addResourceBundle && i18next.addResourceBundle(lang, 'translation', window.resources);
  69. callback && callback();
  70. }
  71. });
  72. });
  73. }
  74. //国际化dom中的文本
  75. function localize() {
  76. jqueryI18next.init(i18next, $);
  77. $("html").localize(); //翻译页面所有含data-i18n属性的标签的文本
  78. }
  79. //全局变量挂载
  80. function initGlobal(root) {
  81. var rootNameSpace = root || window;
  82. if (rootNameSpace.resources) {
  83. rootNameSpace.oldResources = rootNameSpace.resources;
  84. }
  85. //example只开放资源映射到resources字段
  86. var resources = i18next.getResourceBundle && i18next.getResourceBundle(utils.getLanguage());
  87. rootNameSpace.resources = resources && resources.resources;
  88. }
  89. //插入script
  90. function inputScript(url, callback) {
  91. var script = document.createElement("script");
  92. script.type = "text/javascript";
  93. if (script.readyState) { //for IE
  94. script.onreadystatechange = function () {
  95. if (script.readyState === "loaded" || script.readyState === "complete") {
  96. script.onreadystatechange = null;
  97. callback && callback();
  98. }
  99. };
  100. } else { //for Others
  101. script.onload = function () {
  102. callback && callback();
  103. };
  104. }
  105. script.src = url;
  106. targetScript.parentElement.insertBefore(script, targetScript);
  107. }
  108. nameSpace.initializeI18N = initializeI18N;
  109. nameSpace.localize = localize;
  110. nameSpace.initGlobal = initGlobal;
  111. })(Localization, jQuery);