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 ctx="./"
  20. var targetScript = (function () {
  21. var r = new RegExp("(^|(.*?\\/js\\/))(localization\.js)(\\?|$)"),
  22. s = document.getElementsByTagName('script');
  23. for (var i = 0; i < s.length; i++) {
  24. var src = s[i].getAttribute('src');
  25. if (src && src.match(r)) {
  26. return s[i];
  27. }
  28. }
  29. })();
  30. function initializeI18N(path, callback) {
  31. var localPath = ctx + "supermap/examples/locales",
  32. file = "/resources.js";
  33. var filePathMap = {
  34. "en-US": localPath + "/en-US" + file,
  35. "zh-CN": localPath + "/zh-CN" + file
  36. };
  37. //脚本加载完成标志
  38. var lang = utils.getLanguage();
  39. inputScript(filePathMap[lang], function () {
  40. i18next.init({
  41. lng: lang,
  42. whitelist: ["zh-CN", "en-US"],
  43. fallbackLng: ["zh-CN", "en-US"]
  44. },function(){
  45. if (window.isSite) {
  46. var webResourceURL = '../../web/locales/'+lang+'/resources.js';
  47. $.get(webResourceURL, function () {
  48. for (var name in window.webResources) {
  49. var subWeb = window.webResources[name];
  50. var subExamples = window.examplesResources[name];
  51. //重名以webResource为准
  52. if (typeof window.webResources[name] == 'object') {
  53. if (!subExamples) {
  54. subExamples = {};
  55. }
  56. for (var name1 in subWeb) {
  57. subExamples[name1] = subWeb[name1];
  58. }
  59. } else {
  60. subExamples[name1] = subWeb[name];
  61. }
  62. }
  63. window.resources = window.examplesResources;
  64. i18next.addResourceBundle && i18next.addResourceBundle(lang, 'translation', window.resources);
  65. callback && callback();
  66. })
  67. } else {
  68. window.resources = window.examplesResources;
  69. i18next.addResourceBundle && i18next.addResourceBundle(lang, 'translation', window.resources);
  70. callback && callback();
  71. }
  72. });
  73. });
  74. }
  75. //国际化dom中的文本
  76. function localize() {
  77. jqueryI18next.init(i18next, $);
  78. $("html").localize(); //翻译页面所有含data-i18n属性的标签的文本
  79. }
  80. //全局变量挂载
  81. function initGlobal(root) {
  82. var rootNameSpace = root || window;
  83. if (rootNameSpace.resources) {
  84. rootNameSpace.oldResources = rootNameSpace.resources;
  85. }
  86. //example只开放资源映射到resources字段
  87. var resources = i18next.getResourceBundle && i18next.getResourceBundle(utils.getLanguage());
  88. rootNameSpace.resources = resources && resources.resources;
  89. }
  90. //插入script
  91. function inputScript(url, callback) {
  92. var script = document.createElement("script");
  93. script.type = "text/javascript";
  94. if (script.readyState) { //for IE
  95. script.onreadystatechange = function () {
  96. if (script.readyState === "loaded" || script.readyState === "complete") {
  97. script.onreadystatechange = null;
  98. callback && callback();
  99. }
  100. };
  101. } else { //for Others
  102. script.onload = function () {
  103. callback && callback();
  104. };
  105. }
  106. script.src = url;
  107. targetScript.parentElement.insertBefore(script, targetScript);
  108. }
  109. nameSpace.initializeI18N = initializeI18N;
  110. nameSpace.localize = localize;
  111. nameSpace.initGlobal = initGlobal;
  112. })(Localization, jQuery);