aboutsummaryrefslogtreecommitdiff
path: root/scripts/download-language-names.js
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/download-language-names.js')
-rw-r--r--scripts/download-language-names.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/scripts/download-language-names.js b/scripts/download-language-names.js
new file mode 100644
index 0000000..d3db601
--- /dev/null
+++ b/scripts/download-language-names.js
@@ -0,0 +1,59 @@
+/* eslint-disable no-console */
+
+import path from 'node:path';
+import chalk from 'chalk';
+import fs from 'fs-extra';
+import https from 'https';
+
+const src = path.resolve(process.cwd(), 'src/lang');
+const dest = path.resolve(process.cwd(), 'public/intl/language');
+const files = fs.readdirSync(src);
+
+const getUrl = locale =>
+ `https://raw.githubusercontent.com/umpirsky/language-list/master/data/${locale}/language.json`;
+
+const asyncForEach = async (array, callback) => {
+ for (let index = 0; index < array.length; index++) {
+ await callback(array[index], index, array);
+ }
+};
+
+const downloadFile = (url, filepath) =>
+ new Promise(resolve => {
+ https
+ .get(url, res => {
+ if (res.statusCode === 200) {
+ const fileStream = fs.createWriteStream(filepath);
+ res.pipe(fileStream);
+ fileStream.on('finish', () => {
+ fileStream.close();
+ console.log('Downloaded', chalk.greenBright('->'), filepath);
+ resolve();
+ });
+ } else {
+ res.resume();
+ console.warn(`Warning: ${url} returned ${res.statusCode}`);
+ resolve();
+ }
+ })
+ .on('error', err => {
+ console.error(`Error downloading ${url}:`, err.message);
+ resolve();
+ });
+ });
+
+const download = async files => {
+ await fs.ensureDir(dest);
+
+ await asyncForEach(files, async file => {
+ const locale = file.replace('-', '_').replace('.json', '');
+
+ const filename = path.join(dest, file);
+ if (!fs.existsSync(filename)) {
+ const url = getUrl(locale);
+ await downloadFile(url, filename);
+ }
+ });
+};
+
+download(files);