Как быстро решить сложную замену интернационализации

внешний интерфейс Командная строка JavaScript React.js Babel

задний план

Я недавно участвовал в двух зарубежных проектах компании.Проект должен заменить китайский на португальский и английский.Проект важный и времени мало.После нормального развития китайскую запись нужно заменить на метод.

Такие как:var open = '打开'заменитьvar open = intl.get('需要记录的key值').d('打开')

Потому что, когда раньше не было инструмента, я мог только заменить один за другим, назвать значение ключа, проверить, не повторяется ли оно, проверить, нет ли пропусков... Это пустая трата времени.

Эффективность инструментов

В международном задании коллега выполнил нагрузку, которую мне нужно было выполнить за день, за десять минут.Это дало мне ощущение, что я открыл для себя новый мир.Около 80% правильного контента можно заменить одной строкой команд. Конечно, скорость очень высокая!

Но поиск и исправление ошибок — тоже крайне болезненный процесс, люди всегда недовольны настоящим и надеются на лучшее.

Метод, используемый коллегами, заключается в том, чтобы прочитать содержимое файла, затем сопоставить китайский фрагмент по регулярности, а затем заменить его. Этот ход написать относительно просто, но проблема состоит в том, чтобы написать содержание, которое в наибольшей степени соответствует правильному содержанию, и заменить его правильной формой.Портал гаджетов Авторы коллеги

Зачем снова разрабатывать подобный гаджет

Потому что для гаджетов коллеги, я думаю, все же немного хуже, и масштабируемости может не хватить.Хочется сделать все больше и больше бесплатных операций.Это может быть более хлопотно, и если есть какие-то новые ситуации, это не легко расширить. Дело в том, что регуляры длинные и я не хочу их читать (хотя я был зациклен на регулярах).

Расскажи мне о моем новом гаджете

Вдохновившись гаджетом коллеги, я подумал о более элегантном способе.В голову пришло то, почему я не мог разобрать файл, найти место, где находится строка, а потом судить, китайский ли он, и если да , замените его.Идея почти такая же, но я решил конвертировать код файла в ast и заменить его на этой основе.

На этой основе я разработалi18n-astгаджет

Кратко расскажем об этом инструменте, какие модули используются

  • Когда код @babel/types преобразуется в ast, различные типы
  • ядро babel-core для преобразования кода в ast
  • Babel-генератор преобразует ast в код
  • мел добавляет цвет подсказке
  • инструмент командной строки командира
  • инструмент глобального адреса
  • инструмент для проверки шутки
  • ...и целая куча плагинов для Babel

как использовать

По состоянию на 17 сентября была выпущена версия 0.1.3, охватывающая большинство сценариев.

В основном делится на 3 шага: установка, запись командной строки или файла конфигурации, выполнение

Установить

Используйте нпм:

npm install --save-dev i18n-ast

Используйте пряжу:

yarn add i18n-ast --dev

записать конфигурацию

  1. Использование командной строки
  • -e [путь к файлу для конвертации]
  • -o [вывести путь к файлу записи для перевода]
  • -X [исключенный файл, несколько, пожалуйста, используйте сегментацию ","]
  i18n-ast -e [path] -o [path] -x [path]
  1. Новый файл конфигурации I18n-ast.config.js в корневом каталоге Конфигурационный файл имеет непревзойденное содержимое и соответствует значению случайного числа KEY.
module.exports = () => ({
  entry: "需要转换的文件路径",
  output: "输出的文件路径",
   //排除的文件(类型是数组) 
  exclude: [],
  //可以自定义随机字符串,第一个参数是当前文件的路径
  randomFuc: (filePath) => `${filePath.split('/').pop()}-${Math.random()}`
})

увидеть эффект

До конвертации

после преобразования

Извлечение записи перевода

Как показано на рисунке, процесс перевода совершенен. Сейчас поддерживается только реакция, но я оставил место для vue. Заинтересованные друзья могут дать звезду, чтобы поддерживать этот проект вместе.

Адрес проекта на гитхабеGitHub.com/UN stone/i18…

следующий план обслуживания

Если спроса будет немного, я буду поддерживать его потихоньку по следующему плану, ведь мне еще нужно работать, и большая часть моей энергии приходится тратить на работу.

Todo List

  • [ ] Замена
    • js
      • [x] Китайская строка в объекте
      • [x] Китайские параметры в методе
      • [x] строка шаблона (содержит простые переменные)
    • react
      • [x] Китайские свойства в реакции
      • [x] Китайский контент в реакции
    • vue (будет добавлено)
  • [ ] excel
    • [ ] Перевести входной файл в excel
    • [ ] excel преобразовать в файл перевода
  • [ ] Коллекция сменных корпусов
  • [ ] Определить, импортировать ли модуль, если нет, то он будет импортирован автоматически
  • [ ] Метод замены можно настроить
  • [ ] Внедрение автоматического перевода, перевод простых записей (atool-i10n)