Extracts string messages from TypeScript React components or ts files that use React Intl.
If you have many files to processes,you can get contents use node-glob with fs module
npm i typescript-react-intl -D
var parse = require('typescript-react-intl').default;
// results is an array
// contents is your tsx file
var results = parse(contents)
Only support <FormattedMessage/>
and defineMessages
We don't use <FormattedHtmlMessage/>
var fs = require('fs');
var glob = require('glob');
var parser = require('typescript-react-intl').default;
function runner (pattern, cb) {
var results = [];
pattern = pattern || 'src/**/*.@(tsx|ts)';
glob(pattern, function (err, files) {
if (err) {
throw new Error(err);
}
files.forEach(f => {
var contents = fs.readFileSync(f).toString();
var res = parser(contents);
results = results.concat(res);
});
cb && cb(results);
});
}
// demo
runner(null, function (res) {
var locale = {};
res.forEach(r => {
locale[r.id] = r.defaultMessage;
});
var locales = {
en: locale,
};
// save file to disk。you can save as a json file,just change the ext and contents as you want.
fs.writeFileSync(`src/translations/all.ts`, `export default ${JSON.stringify(locales, null, 2)}\r`);
});