index.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import i18n from 'i18next';
  2. import { initReactI18next } from 'react-i18next';
  3. import LanguageDetector from 'i18next-browser-languagedetector';
  4. // 自編語言包
  5. import en from './languages/en_US.json';
  6. // import zh from './languages/zh_CN.json'
  7. import pt from './languages/pt_BR.json';
  8. import ru from './languages/ru_RU.json';
  9. import es from './languages/es_MX.json';
  10. const resources = {
  11. en: {
  12. key:"en_US",
  13. name:"English",
  14. translation: en,
  15. },
  16. // zh: {
  17. // translation: zh
  18. // }
  19. pt:{
  20. key:"pt_BR",
  21. name:"Português",
  22. translation:pt
  23. },
  24. es:{
  25. key:"es_MX",
  26. name:"Español",
  27. translation:es
  28. },
  29. ru: {
  30. key:"ru_RU",
  31. name:"Русский",
  32. translation: ru,
  33. }
  34. }
  35. const dlang="en";
  36. i18n
  37. .use(LanguageDetector)
  38. .use(initReactI18next)
  39. .init({
  40. compatibilityJSON: 'v3', // 对安卓进行兼容
  41. resources,
  42. fallbackLng: dlang, // 默认语言,也是设置语言时设置了不存在的语言时使用的
  43. interpolation: {
  44. escapeValue: false
  45. }
  46. }, (err) => {
  47. // 錯誤
  48. if (err) throw err;
  49. let language=i18n.language;
  50. if (language.indexOf("-"))language=language.split("-")[0];
  51. if (resources[language]==null)language=dlang;
  52. // 这里放多一层函数是为了方便之后切换语言的同时做一些其他的统一处理
  53. i18n.setLocalLanguage = function (value) {
  54. // 設置項目文本的語言
  55. this.changeLanguage(value);
  56. // 做点别的,比如同时切换别的插件的语言
  57. }
  58. // 初始化
  59. i18n.setLocalLanguage(language);
  60. i18n.old_t=i18n.t;
  61. i18n.t=(key)=>{
  62. let value=i18n.old_t(key);
  63. let DOLLAR=global.DOLLAR!=null?global.DOLLAR:"";
  64. let currency=global.currency!=null?global.currency:"";
  65. if (value!=null&&typeof value==="string"){
  66. value=value.replaceAll("{D}",DOLLAR);
  67. value=value.replaceAll("{C}",currency);
  68. }
  69. return value;
  70. }
  71. });
  72. i18n.getCurrLang=()=>{
  73. let res=resources[i18n.language];
  74. if (res)return res.key;
  75. return "";
  76. }
  77. i18n.getCurrLangName=()=>{
  78. let res=resources[i18n.language];
  79. if (res)return res.name;
  80. return "";
  81. }
  82. i18n.getAllLangs=()=>{
  83. let langs=[];
  84. for (const lkey in resources) {
  85. let lang=resources[lkey];
  86. langs.push(Object.assign({},{lkey:lkey},lang));
  87. }
  88. return langs;
  89. }
  90. //同步lang 从服务器
  91. i18n.setLocalLangFromS=(language)=>{
  92. if (resources[language]==null)return;
  93. i18n.setLocalLanguage(language);
  94. }
  95. export default i18n;