Conflicts: - `config/webpack/generateLocalePacks.js`: A dependency update changed how functions are imported. Also, some linting fixes not applicable to glitch-soc.
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// 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');
 | 
						|
 | 
						|
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 => {
 | 
						|
    return /\.json$/.test(filename) &&
 | 
						|
      !/defaultMessages/.test(filename) &&
 | 
						|
      !/whitelist/.test(filename);
 | 
						|
  }).map(filename => filename.replace(/\.json$/, ''));
 | 
						|
 | 
						|
  let inherited_locales_path = null;
 | 
						|
  if (flavour.inherit_locales && flavours[flavour.inherit_locales]?.locales) {
 | 
						|
    inherited_locales_path = flavours[flavour.inherit_locales]?.locales;
 | 
						|
  }
 | 
						|
 | 
						|
  const outPath = resolve('tmp', 'locales', entry);
 | 
						|
 | 
						|
  rimraf.sync(outPath);
 | 
						|
  mkdirp.sync(outPath);
 | 
						|
 | 
						|
  locales.forEach(function (locale) {
 | 
						|
    const localePath = join(outPath, `${locale}.js`);
 | 
						|
    const baseLocale = locale.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/mastodon/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}/${locale}.js
 | 
						|
// automatically generated by generateLocalePacks.js
 | 
						|
//
 | 
						|
 | 
						|
${inherited_locales_path ? `import inherited from '../../../${inherited_locales_path}/${locale}.json';` : ''}
 | 
						|
import messages from '../../../${flavour.locales}/${locale}.json';
 | 
						|
import localeData from '${localeDataPath}';
 | 
						|
import { setLocale } from 'locales';
 | 
						|
 | 
						|
setLocale({
 | 
						|
  localeData,
 | 
						|
  ${inherited_locales_path ? 'messages: Object.assign({}, inherited, messages)' : 'messages'},
 | 
						|
});
 | 
						|
`;
 | 
						|
    writeFileSync(localePath, localeContent, 'utf8');
 | 
						|
    map[`locales/${entry}/${locale}`] = localePath;
 | 
						|
  });
 | 
						|
 | 
						|
  return map;
 | 
						|
}, {});
 |