Browse Source

优化多语言翻译

gavin.chen 1 year ago
parent
commit
328bb597a4

+ 1 - 2
dev_tool/i18n_exclude_en.json

@@ -1,4 +1,3 @@
 {
-  "创建课程【按钮】": "Create",
-  "创建专辑【按钮】": "Create"
+  "创建课程【按钮】": "Create"
 }

+ 3 - 0
dev_tool/i18n_exclude_es.json

@@ -0,0 +1,3 @@
+{
+  "创建课程【按钮】": "Crear"
+}

+ 3 - 0
dev_tool/i18n_exclude_ru.json

@@ -0,0 +1,3 @@
+{
+  "创建课程【按钮】": "Создать"
+}

+ 1 - 2
dev_tool/i18n_exclude_zh.json

@@ -1,4 +1,3 @@
 {
-  "创建课程【按钮】": "创建课程",
-  "创建专辑【按钮】": "创建专辑"
+  "创建课程【按钮】": "创建课程"
 }

+ 45 - 15
dev_tool/i18n_scanner.cjs

@@ -3,37 +3,45 @@ var path = require('path');
 var Parser = require('i18next-scanner').Parser;
 const zhExclude = require('./i18n_exclude_zh.json');
 const enExclude = require('./i18n_exclude_en.json');
+const ruExclude = require('./i18n_exclude_ru.json');
+const esExclude = require('./i18n_exclude_es.json');
 const existedEn = require('../src/i18n/en.json');
+const existedRu = require('../src/i18n/ru.json');
+const existedEs = require('../src/i18n/es.json');
 
 var directoryPaths = ['src/pages', 'src/components'];
 var existedEnTranslation = existedEn.translation;
+var existedRuTranslation = existedRu.translation;
+var existedEsTranslation = existedEs.translation;
 
-var zhHandler = function (key) {
-  /// 读取特殊规则,如果有特殊规则,就从特殊规则取值
+var zhHandler = function (key, parser) {
+  // 读取特殊规则,如果有特殊规则,就从特殊规则取值
   if (zhExclude[key]) {
-    zhParser.set(key, zhExclude[key]);
+    parser.set(key, zhExclude[key]);
     return;
   }
-  zhParser.set(key, key);
+  parser.set(key, key);
 };
 
-var enHandler = function (key) {
-  /// 读取特殊规则,如果有特殊规则,就从特殊规则取值
-  if (enExclude[key]) {
-    enParser.set(key, enExclude[key]);
+var otherLanguageHandler = function (key, parser, excludeValue, existedValue) {
+  // 读取特殊规则,如果有特殊规则,就从特殊规则取值
+  if (excludeValue[key]) {
+    parser.set(key, excludeValue[key]);
     return;
   }
-  /// 如果已经有翻译,就从已有翻译取值
-  if (existedEnTranslation[key]) {
-    enParser.set(key, existedEnTranslation[key]);
+  // 如果已经有翻译,就从已有翻译取值
+  if (existedValue[key]) {
+    parser.set(key, existedValue[key]);
     return;
   }
   var defaultValue = '__TRANSLATION__';
-  enParser.set(key, defaultValue);
+  parser.set(key, defaultValue);
 };
 
 var zhParser = new Parser();
 var enParser = new Parser();
+var ruParser = new Parser();
+var esParser = new Parser();
 
 function processDirectory(directoryPath) {
   const files = fs.readdirSync(directoryPath);
@@ -46,19 +54,31 @@ function processDirectory(directoryPath) {
     } else {
       let content = fs.readFileSync(fullPath, 'utf-8');
 
-      zhParser.parseFuncFromString(content, { list: ['t'] }, zhHandler);
-      enParser.parseFuncFromString(content, { list: ['t'] }, enHandler);
+      zhParser.parseFuncFromString(content, { list: ['t'] }, (key) =>
+        zhHandler(key, zhParser),
+      );
+      enParser.parseFuncFromString(content, { list: ['t'] }, (key) =>
+        otherLanguageHandler(key, enParser, enExclude, existedEnTranslation),
+      );
+      ruParser.parseFuncFromString(content, { list: ['t'] }, (key) =>
+        otherLanguageHandler(key, ruParser, ruExclude, existedRuTranslation),
+      );
+      esParser.parseFuncFromString(content, { list: ['t'] }, (key) =>
+        otherLanguageHandler(key, esParser, esExclude, existedEsTranslation),
+      );
     }
   }
 }
 
-// Process all directories
+// 处理所有目录
 for (let directoryPath of directoryPaths) {
   processDirectory(directoryPath);
 }
 
 var zhTranslations = zhParser.get({ sort: true });
 var enTranslations = enParser.get({ sort: true });
+var ruTranslations = ruParser.get({ sort: true });
+var esTranslations = esParser.get({ sort: true });
 
 // 写入翻译到目标json文件
 fs.writeFileSync(
@@ -71,5 +91,15 @@ fs.writeFileSync(
   JSON.stringify(enTranslations.en, null, 2),
 );
 
+fs.writeFileSync(
+  'src/i18n/ru.json',
+  JSON.stringify(ruTranslations.en, null, 2),
+);
+
+fs.writeFileSync(
+  'src/i18n/es.json',
+  JSON.stringify(esTranslations.en, null, 2),
+);
+
 var fileTranslations = Object.keys(zhTranslations.en.translation).length;
 console.log('✅ 翻译查找完成,共找到 ' + fileTranslations + ' 个翻译项');

+ 2 - 1
src/i18n/en.json

@@ -25,6 +25,7 @@
     "互动区": "Interactive Area",
     "互动区暂未开放": "Interactive Area is not Open Yet",
     "价格不得小于0元,且最多小数点后两位": "The price must not be less than 0 and up to two decimal places",
+    "俄文": "__TRANSLATION__",
     "修改": "Modify",
     "公开课": "Public Class",
     "关联专辑": "Related Album",
@@ -169,4 +170,4 @@
     "进入课程": "Enter Course",
     "首页": "Home Page"
   }
-}
+}

+ 2 - 1
src/i18n/es.json

@@ -25,6 +25,7 @@
     "互动区": "Área Interactiva",
     "互动区暂未开放": "Área Interactiva aún no está disponible",
     "价格不得小于0元,且最多小数点后两位": "El precio no debe ser menor a 0 y puede tener hasta dos decimales",
+    "俄文": "__TRANSLATION__",
     "修改": "Modificar",
     "公开课": "Clase Pública",
     "关联专辑": "Álbum Relacionado",
@@ -169,4 +170,4 @@
     "进入课程": "Ingresar al Curso",
     "首页": "Página de Inicio"
   }
-}
+}

+ 2 - 1
src/i18n/ru.json

@@ -25,6 +25,7 @@
     "互动区": "Интерактивная зона",
     "互动区暂未开放": "Интерактивная зона пока не открыта",
     "价格不得小于0元,且最多小数点后两位": "Цена не должна быть меньше 0 юаней и не более двух знаков после запятой",
+    "俄文": "__TRANSLATION__",
     "修改": "Изменить",
     "公开课": "Публичный класс",
     "关联专辑": "Связанный альбом",
@@ -169,4 +170,4 @@
     "进入课程": "Войти в курс",
     "首页": "Главная страница"
   }
-}
+}

+ 1 - 0
src/i18n/zh.json

@@ -25,6 +25,7 @@
     "互动区": "互动区",
     "互动区暂未开放": "互动区暂未开放",
     "价格不得小于0元,且最多小数点后两位": "价格不得小于0元,且最多小数点后两位",
+    "俄文": "俄文",
     "修改": "修改",
     "公开课": "公开课",
     "关联专辑": "关联专辑",