i18n.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import store from './store.js'
  2. import en from './i18n/en.js'
  3. import zhCN from './i18n/zh-cn.js'
  4. const localeName = store.get('locale')
  5. let locale = zhCN
  6. if(localeName === 'en'){
  7. locale = en
  8. }
  9. export default function doLocale(key, ...args){
  10. try{
  11. const msg = key.split('.').reduce((val, k) => val[k], locale);
  12. if(msg && args.length > 0){
  13. return msg.replace(/\{(\d+)\}/g, (match, index) => args[index])
  14. }
  15. return msg || key;
  16. } catch(e){
  17. return key
  18. }
  19. }
  20. export function translateCode(code, message){
  21. if(zhCN === locale){
  22. return message
  23. }
  24. const src = zhCN.code[`${code}`]
  25. const target = locale.code[`${code}`]
  26. if(src && target){
  27. const regex = src.replace(/([()\[\]\.])/g, '\\$1').replace(/{\d+}/g, '(.*?)')
  28. if(regex){
  29. const result = []
  30. const exp = new RegExp(regex, 'g')
  31. let str
  32. while((str = exp.exec(message)) != null){
  33. result.push(str)
  34. }
  35. return doLocale(`code.${code}`, result.splice(0, 1))
  36. }
  37. }
  38. return message
  39. }