задний план
Некоторое время назад мне нужно было интернационализировать проект, который разрабатывался около двух лет, и поддерживать как китайский, так и английский языки, я посетил сообщество и не нашел колес, которые могли бы решить болевые точки, такие как:
- Поддерживать файлы ресурсов слишком обременительно
- Код слишком навязчив, не хочу двухлетний проект, изменение в файле
Поэтому я решил написать свой собственный инструмент:
- Файлы ресурсов автоматически генерируются и обновляются
- Код 0 вторгается, вам не нужно учитывать интернационализацию при написании кода
Как правило, пока инструмент введен, в более поздний период есть только одна стоимость обслуживания, и необходимо учитывать только файл ресурса перевода.
идеи
По существу, реализацияwebpack loader, который автоматически обрабатывает интернационализацию при упаковке:
- Пройдите все коды, извлеките китайские строки в кодах и сгенерируйте файлы ресурсов (ключ файла ресурсов через соответствующий китайский язык).
MD5зашифрованное поколение) - Повесить содержимое файла ресурсов на глобальный
$i18nна объекте - Пройдитесь по всему коду и замените китайский язык в коде на
$i18n[key]
код был размещенGithub:miao-i18n
как использовать
кcreate-react-appНапример, создайте проект:
create-react-app myapp
Так как нам нужно добавитьwebpack loaderИтак, вам нужно выставить конфигурацию:
yarn eject
Установитьmiao-i18n:
yarn add miao-i18n
настроитьwebpack, Открытьmyapp/config/webpackDevServer.config.js,из-заloaderВыполняется снизу вверх, все что нам нужно настроить наш загрузчик вверх, это очень важно.
module: {
strictExportPresence: true,
rules: [
// Disable require.ensure as it's not a standard language feature.
{ parser: { requireEnsure: false } },
+ {
+ test: /\.(js|mjs|jsx|ts|tsx)$/,
+ exclude: /node_module/,
+ loader: require.resolve("miao-i18n"),
+ },
...
}
Настройка завершена, можно начинать играть в свое удовольствие 😊
yarn start
После запуска проекта вы можете увидетьsrcКаталог создается автоматическиi18nпапка:
├─src
| ├─i18n
| | ├─i18n.js
| | ├─zh
| | | └data.json
| | ├─en
| | | └data.json
zh,enСамо собой разумеется, соответствующие китайским и английским ресурсам.
i18n.jsИспользуется для импорта и переключения файлов ресурсов:
import zh from "./zh/data.json"
import en from "./en/data.json"
/**
如果需要用按钮切换语言,可以将此方法暴露给按钮的点击回调。
*/
function i18n(lang) {
let data;
switch (lang) {
case "zh":
data = zh;
break;
case "en":
data = en;
break;
default:
data = zh;
break;
}
window.$i18n = data;
};
i18n("en")// 切换为英文
Наконец положитьi18n.jsвведены в проект. Открытьsrc/index.js, представленный в начале проектаi18n.js
+ import "./i18n/i18n"
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker'
...
Конфигурация завершена! 🍾🍾🍾
Попробуйте добавить китайский.
Открытьsrc/App.js, измените код следующим образом
import React from 'react';
function App() {
return (
<div className="App">
<p>苹果</p>
<p>香蕉</p>
<p>葡萄</p>
</div>
);
}
export default App;
Сохраните файл и просмотрите его в браузере:
Откройте консоль, и вы увидите, что исходный код был автоматически скомпилирован для интернационализации:
На данный момент файл ресурсов был автоматически сгенерирован, откройте егоsrc/i18n/en/data.jsonилиsrc/i18n/zh/data.jsonПроверить:
{
"e6803e21b9c61f9ab3d04088638cecd2": "苹果",
"b7c03bbf2b8bb334e1dfae5939d82d1b": "香蕉",
"05b1b3102be250f2a6fadf800f8ad8b6": "葡萄"
}
мы кладемsrc/i18n/en/data.jsonпереведено
{
- "e6803e21b9c61f9ab3d04088638cecd2": "苹果",
- "b7c03bbf2b8bb334e1dfae5939d82d1b": "香蕉",
- "05b1b3102be250f2a6fadf800f8ad8b6": "葡萄"
+ "e6803e21b9c61f9ab3d04088638cecd2": "Apple",
+ "b7c03bbf2b8bb334e1dfae5939d82d1b": "banana",
+ "05b1b3102be250f2a6fadf800f8ad8b6": "grape"
}
Сохраните код и просмотрите его в браузере
Страница отображается на английском языке, и все готово! 🙂
наконец
Поскольку этот инструмент в настоящее время используется только в моем проекте, должно быть много вещей, которые я не учел.Я приветствую ваши предложения и мнения.Github 地址: miao-i18n
Спасибо за прочтение! 🌹