- // A message from upstream:
- // ========================
- // To avoid adding a lot of boilerplate, locale packs are
- // automatically generated here. These are written into the tmp/
- // directory and then used to generate locale_en.js, locale_fr.js, etc.
-
- // Glitch note:
- // ============
- // This code has been entirely rewritten to support glitch flavours.
- // However, the underlying process is exactly the same.
-
- const { existsSync, readdirSync, writeFileSync } = require('fs');
- const { join, resolve } = require('path');
- const rimraf = require('rimraf');
- const mkdirp = require('mkdirp');
- const { flavours } = require('./configuration.js');
-
- module.exports = Object.keys(flavours).reduce(function (map, entry) {
- const flavour = flavours[entry];
- if (!flavour.locales) {
- return map;
- }
- const locales = readdirSync(flavour.locales).filter(
- filename => /\.js(?:on)?$/.test(filename) && !/defaultMessages|whitelist|index/.test(filename)
- );
- const outPath = resolve('tmp', 'locales', entry);
-
- rimraf.sync(outPath);
- mkdirp.sync(outPath);
-
- locales.forEach(function (locale) {
- const localeName = locale.replace(/\.js(?:on)?$/, '');
- const localePath = join(outPath, `${localeName}.js`);
- const baseLocale = localeName.split('-')[0]; // e.g. 'zh-TW' -> 'zh'
- const localeDataPath = [
- // first try react-intl
- `node_modules/react-intl/locale-data/${baseLocale}.js`,
- // then check locales/locale-data
- `app/javascript/locales/locale-data/${baseLocale}.js`,
- // fall back to English (this is what react-intl does anyway)
- 'node_modules/react-intl/locale-data/en.js',
- ].filter(
- filename => existsSync(filename)
- ).map(
- filename => filename.replace(/(?:node_modules|app\/javascript)\//, '')
- )[0];
- const localeContent = `//
- // locales/${entry}/${localeName}.js
- // automatically generated by generateLocalePacks.js
- //
-
- import messages from '../../../${flavour.locales}/${locale.replace(/\.js$/, '')}';
- import localeData from '${localeDataPath}';
- import { setLocale } from 'locales';
-
- setLocale({
- localeData,
- messages,
- });
- `;
- writeFileSync(localePath, localeContent, 'utf8');
- map[`locales/${entry}/${localeName}`] = localePath;
- });
-
- return map;
- }, {});
|