Change locales file generation to use JSON sources (#2028)
* Change locales file generation to use JSON sources
Instead of inheriting in JS files, set locale inheritance in the
theme's YML file, and inherit in the generated locale file, rather
than the source file.
* Convert glitch-soc JS translation files to JSON
Obtained running the following:
```sh
sed -i -z "s/import inherited from '.*';\s*\nconst messages = //" *.js
sed -i "s/\s*\/\/.*//" *.js
sed -i -z "s/;\s*export default .*/\n/" *.js
for i in *.js; do
json5 $i | json_pp > ${i}on;
done
```
* Change `yarn manage:translations` to exclude any translation already defined upstream
* Run yarn manage:translations
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { default: manageTranslations } = require('react-intl-translations-manager');
|
||||
const { default: manageTranslations, readMessageFiles } = require('react-intl-translations-manager');
|
||||
|
||||
const RFC5646_REGEXP = /^[a-z]{2,3}(?:-(?:x|[A-Za-z]{2,4}))*$/;
|
||||
|
||||
const rootDirectory = path.resolve(__dirname, '..', '..');
|
||||
const translationsDirectory = path.resolve(rootDirectory, 'app', 'javascript', 'mastodon', 'locales');
|
||||
const externalDefaultMessages = path.resolve(rootDirectory, 'app', 'javascript', 'mastodon', 'locales', 'defaultMessages.json');
|
||||
const translationsDirectory = path.resolve(rootDirectory, 'app', 'javascript', 'flavours', 'glitch', 'locales');
|
||||
const messagesDirectory = path.resolve(rootDirectory, 'build', 'messages');
|
||||
const availableLanguages = fs.readdirSync(translationsDirectory).reduce((languages, filename) => {
|
||||
const basename = path.basename(filename, '.json');
|
||||
@@ -86,6 +87,25 @@ validateLanguages(languages, [
|
||||
!argv.force && testAvailability,
|
||||
].filter(Boolean));
|
||||
|
||||
// Override `provideExtractedMessages` to ignore translation strings provided upstream already
|
||||
const provideExtractedMessages = () => {
|
||||
const extractedMessages = readMessageFiles(messagesDirectory);
|
||||
const originalExtractedMessages = JSON.parse(fs.readFileSync(externalDefaultMessages, 'utf8'));
|
||||
const originalKeys = new Set();
|
||||
|
||||
originalExtractedMessages.forEach(file => {
|
||||
file.descriptors.forEach(descriptor => {
|
||||
originalKeys.add(descriptor.id)
|
||||
});
|
||||
});
|
||||
|
||||
extractedMessages.forEach(file => {
|
||||
file.descriptors = file.descriptors.filter((descriptor) => !originalKeys.has(descriptor.id));
|
||||
});
|
||||
|
||||
return extractedMessages.filter((file) => file.descriptors.length > 0);
|
||||
};
|
||||
|
||||
// manage translations
|
||||
manageTranslations({
|
||||
messagesDirectory,
|
||||
@@ -96,4 +116,7 @@ manageTranslations({
|
||||
jsonOptions: {
|
||||
trailingNewline: true,
|
||||
},
|
||||
overrideCoreMethods: {
|
||||
provideExtractedMessages,
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user