mirror of
https://github.com/scratchfoundation/scratch-l10n.git
synced 2025-05-09 12:40:34 -04:00
Add script for building en.json
Add dependency on babel-cli and the intl plugins for extracting strings from source. Include script for combining extracted strings into a single source chrome-i18n file as a binary from this package.
This commit is contained in:
parent
782c4498a2
commit
12a43c94d3
2 changed files with 53 additions and 1 deletions
scripts
45
scripts/build-i18n-src.js
Executable file
45
scripts/build-i18n-src.js
Executable file
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs');
|
||||
const glob = require('glob');
|
||||
const path = require('path');
|
||||
const mkdirp = require('mkdirp');
|
||||
|
||||
var args = process.argv.slice(2);
|
||||
|
||||
if (!args.length) {
|
||||
process.stdout.write('You must specify the messages dir generated by babel-plugin-react-intl.\n');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const MESSAGES_PATTERN = args.shift() + '/**/*.json';
|
||||
|
||||
if (!args.length) {
|
||||
process.stdout.write('A destination directory must be specified.\n');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const LANG_DIR = args.shift();
|
||||
|
||||
// Aggregates the default messages that were extracted from the example app's
|
||||
// React components via the React Intl Babel plugin. An error will be thrown if
|
||||
// there are messages in different components that use the same `id`. The result
|
||||
// is a chromei18n format collection of `id: {message: defaultMessage,
|
||||
// description: description}` pairs for the app's default locale.
|
||||
let defaultMessages = glob.sync(MESSAGES_PATTERN)
|
||||
.map((filename) => fs.readFileSync(filename, 'utf8'))
|
||||
.map((file) => JSON.parse(file))
|
||||
.reduce((collection, descriptors) => {
|
||||
descriptors.forEach(({id, defaultMessage, description}) => {
|
||||
if (collection.hasOwnProperty(id)) {
|
||||
throw new Error(`Duplicate message id: ${id}`);
|
||||
}
|
||||
|
||||
collection[id] = {message: defaultMessage, description: description};
|
||||
});
|
||||
|
||||
return collection;
|
||||
}, {});
|
||||
|
||||
mkdirp.sync(LANG_DIR);
|
||||
fs.writeFileSync(path.join(LANG_DIR, 'en.json'), JSON.stringify(defaultMessages, null, 2));
|
Loading…
Add table
Add a link
Reference in a new issue