|
|
@@ -1,52 +1,59 @@
|
|
|
-const path = require('path')
|
|
|
-const { promises: fs } = require('fs')
|
|
|
-const oneSky = require('@brainly/onesky-utils')
|
|
|
-const { sanitize } = require('./sanitize')
|
|
|
-const { withAuth } = require('./config')
|
|
|
+import path from 'path'
|
|
|
+import { promises as fs } from 'fs'
|
|
|
+import oneSky from '@brainly/onesky-utils'
|
|
|
+import Sanitize from './sanitize.js'
|
|
|
+import Config from './config.js'
|
|
|
+import { fileURLToPath } from 'url'
|
|
|
+
|
|
|
+const __dirname = fileURLToPath(new URL('.', import.meta.url))
|
|
|
+
|
|
|
+const { sanitize } = Sanitize
|
|
|
+const { withAuth } = Config
|
|
|
|
|
|
async function run() {
|
|
|
- try {
|
|
|
- // The recommended OneSky set-up appears to require an API request to
|
|
|
- // generate files on their side, which you could then request and use. We
|
|
|
- // only have 1 such file that appears to be misnamed (en-US, despite our
|
|
|
- // translations being marked as GB) and very out-of-date.
|
|
|
- // However by requesting the "multilingual file" for this file, we get all
|
|
|
- // of the translations
|
|
|
- const content = await oneSky.getMultilingualFile(
|
|
|
- withAuth({
|
|
|
- fileName: 'en-US.json',
|
|
|
- })
|
|
|
- )
|
|
|
- const json = JSON.parse(content)
|
|
|
+ // The recommended OneSky set-up appears to require an API request to
|
|
|
+ // generate files on their side, which you could then request and use. We
|
|
|
+ // only have 1 such file that appears to be misnamed (en-US, despite our
|
|
|
+ // translations being marked as GB) and very out-of-date.
|
|
|
+ // However by requesting the "multilingual file" for this file, we get all
|
|
|
+ // of the translations
|
|
|
+ const content = await oneSky.getMultilingualFile(
|
|
|
+ withAuth({
|
|
|
+ fileName: 'en-US.json',
|
|
|
+ })
|
|
|
+ )
|
|
|
+ const json = JSON.parse(content)
|
|
|
|
|
|
- for (const [code, lang] of Object.entries(json)) {
|
|
|
- if (code === 'en-GB') {
|
|
|
- // OneSky does not have read-after-write consistency.
|
|
|
- // Skip the dump of English locales, which may not include locales
|
|
|
- // that were just uploaded.
|
|
|
- continue
|
|
|
- }
|
|
|
+ for (const [code, lang] of Object.entries(json)) {
|
|
|
+ if (code === 'en-GB') {
|
|
|
+ // OneSky does not have read-after-write consistency.
|
|
|
+ // Skip the dump of English locales, which may not include locales
|
|
|
+ // that were just uploaded.
|
|
|
+ continue
|
|
|
+ }
|
|
|
|
|
|
- for (let [key, value] of Object.entries(lang.translation)) {
|
|
|
- // Handle multi-line strings as arrays by joining on newline
|
|
|
- if (Array.isArray(value)) {
|
|
|
- value = value.join('\n')
|
|
|
- }
|
|
|
- lang.translation[key] = sanitize(value)
|
|
|
+ for (let [key, value] of Object.entries(lang.translation)) {
|
|
|
+ // Handle multi-line strings as arrays by joining on newline
|
|
|
+ if (Array.isArray(value)) {
|
|
|
+ value = value.join('\n')
|
|
|
}
|
|
|
-
|
|
|
- await fs.writeFile(
|
|
|
- path.join(__dirname, `/../../locales/${code}.json`),
|
|
|
- JSON.stringify(
|
|
|
- lang.translation,
|
|
|
- Object.keys(lang.translation).sort(),
|
|
|
- 2
|
|
|
- ) + '\n'
|
|
|
- )
|
|
|
+ lang.translation[key] = sanitize(value)
|
|
|
}
|
|
|
- } catch (error) {
|
|
|
- console.error(error)
|
|
|
- process.exit(1)
|
|
|
+
|
|
|
+ await fs.writeFile(
|
|
|
+ path.join(__dirname, `/../../locales/${code}.json`),
|
|
|
+ JSON.stringify(
|
|
|
+ lang.translation,
|
|
|
+ Object.keys(lang.translation).sort(),
|
|
|
+ 2
|
|
|
+ ) + '\n'
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
-run()
|
|
|
+
|
|
|
+try {
|
|
|
+ await run()
|
|
|
+} catch (error) {
|
|
|
+ console.error(error)
|
|
|
+ process.exit(1)
|
|
|
+}
|