index.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // 导入国际化JSON文件
  2. import langJSON from './index.json'
  3. (function () {
  4. // 定义翻译函数
  5. let $t = function (key, val, nameSpace) {
  6. // 获取指定命名空间下的语言包
  7. const langPackage = $t[nameSpace];
  8. // 返回翻译结果,如果不存在则返回默认值
  9. return (langPackage || {})[key] || val;
  10. };
  11. // 定义简单翻译函数,直接返回传入的值
  12. let $$t = function (val) {
  13. return val;
  14. };
  15. globalThis.$deepScan = function (val) {
  16. return val;
  17. };
  18. globalThis.$iS = function (val, args) {
  19. // 如果参数不是字符串或数组,直接返回原值
  20. if (typeof val !== 'string' || !Array.isArray(args)) {
  21. return val;
  22. }
  23. try {
  24. // 使用更安全的正则表达式替换方式
  25. return val.replace(/\$(?:\{|\{)(\d+)(?:\}|\})/g, (match, index) => {
  26. // 将index转换为数字
  27. const position = parseInt(index, 10);
  28. // 如果args[position]存在则替换,否则保留原占位符
  29. return args[position] !== undefined ? String(args[position]) : match;
  30. });
  31. } catch (error) {
  32. console.warn('字符串替换过程出现异常:', error);
  33. return val;
  34. }
  35. }
  36. // 定义设置语言包的方法
  37. $t.locale = function (locale, nameSpace) {
  38. // 将指定命名空间下的语言包设置为传入的locale
  39. $t[nameSpace] = locale || {};
  40. };
  41. // 将翻译函数挂载到globalThis对象上,如果已经存在则使用已有的
  42. globalThis.$t = globalThis.$t || $t;
  43. // 将简单翻译函数挂载到globalThis对象上
  44. globalThis.$$t = $$t;
  45. // 定义从JSON文件中获取指定键的语言对象的方法
  46. globalThis._getJSONKey = function (key, insertJSONObj = undefined) {
  47. // 获取JSON对象
  48. const JSONObj = insertJSONObj;
  49. // 初始化语言对象
  50. const langObj = {};
  51. // 遍历JSON对象的所有键
  52. Object.keys(JSONObj).forEach((value) => {
  53. // 将每个语言的对应键值添加到语言对象中
  54. langObj[value] = JSONObj[value][key];
  55. });
  56. // 返回语言对象
  57. return langObj;
  58. };
  59. })();
  60. // 定义语言映射对象
  61. const langMap = {
  62. 'zhhk': (globalThis && globalThis.lang && globalThis.lang.zhhk) ? globalThis.lang.zhhk : globalThis._getJSONKey('zh-hk', langJSON),
  63. 'zhtw': (globalThis && globalThis.lang && globalThis.lang.zhtw) ? globalThis.lang.zhtw : globalThis._getJSONKey('zh-tw', langJSON),
  64. 'en': (globalThis && globalThis.lang && globalThis.lang.en) ? globalThis.lang.en : globalThis._getJSONKey('en', langJSON),
  65. 'it': (globalThis && globalThis.lang && globalThis.lang.it) ? globalThis.lang.it : globalThis._getJSONKey('it', langJSON),
  66. 'zhcn': (globalThis && globalThis.lang && globalThis.lang.zhcn) ? globalThis.lang.zhcn : globalThis._getJSONKey('zh-cn', langJSON)
  67. };
  68. globalThis.langMap = langMap;
  69. // 存储语言是否存在
  70. // 判断 globalThis.localStorage.getItem 是否为函数
  71. const isFunction = (fn) => {
  72. return typeof fn === 'function';
  73. };
  74. const withStorageLang = isFunction && globalThis && globalThis.localStorage &&
  75. isFunction(globalThis.localStorage.getItem) && globalThis.localStorage.getItem('lang');
  76. const withStorageCommonLang = isFunction && globalThis && globalThis.localStorage &&
  77. isFunction(globalThis.localStorage.getItem) && globalThis.localStorage.getItem('');
  78. // 从本地存储中获取通用语言,如果不存在则使用空字符串
  79. const commonLang = withStorageCommonLang ? globalThis.localStorage.getItem('') : '';
  80. // 从本地存储中获取当前语言,如果不存在则使用源语言
  81. const baseLang = withStorageLang ? globalThis.localStorage.getItem('lang') : 'zhcn';
  82. const lang = commonLang ? commonLang : baseLang;
  83. // 根据当前语言设置翻译函数的语言包
  84. globalThis.$t.locale(globalThis.langMap[lang], 'lang');
  85. globalThis.$changeLang = (lang) => {
  86. globalThis.$t.locale(globalThis.langMap[lang], 'lang');
  87. };