From 0d39bbd9c35f458ac17f52a49a2c103d84ea240b Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Fri, 18 May 2018 00:40:33 +0300 Subject: [PATCH] feat(translations): generate words on translation --- package.json | 1 + src/app/translation.js | 28 +++++++++++++++++---- src/background/menu/config_menu_template.js | 7 +++--- translations/en.json | 12 ++++----- translations/ru.json | 13 +++++----- 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 4a75ce0..24dec6d 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "from": "resources/icons/19x19.png", "to": "icons/19x19.png" }, + "translations", "CHANGELOG.md" ], "directories": { diff --git a/src/app/translation.js b/src/app/translation.js index 319dad2..ace4bb2 100644 --- a/src/app/translation.js +++ b/src/app/translation.js @@ -1,16 +1,24 @@ const fs = require('fs') +const env = typeof WEB !== 'undefined' ? false : require('env') let dictionary = {} +const translationsDir = () => { + if(env.name == 'production') + return process.resourcesPath + '/translations' + else + return 'translations' +} + function loadJSON(file, callback) { - if(fs) + if(fs && env) { - callback(JSON.parse(fs.readFileSync(file, 'utf8'))) + callback(JSON.parse(fs.readFileSync(`${translationsDir()}/${file}`, 'utf8'))) } else { const xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); - xobj.open('GET', file, true); + xobj.open('GET', `translations/${file}`, true); xobj.onreadystatechange = function() { if (xobj.readyState == 4 && xobj.status == 200) { // .open will NOT return a value but simply returns undefined in async mode so use a callback @@ -22,19 +30,29 @@ function loadJSON(file, callback) { } const changeLanguage = (lang, callback) => { - loadJSON(`translations/${lang}.json`, (data) => { + loadJSON(`${lang}.json`, (data) => { dictionary = data.translations if(callback) callback() }) } -export { changeLanguage } +export { changeLanguage, translationsDir } export default (word) => { const translation = dictionary[word] if(translation === undefined) { + if(fs && env && env.name === "development") + { + dictionary[word] = word + fs.readdirSync('translations').forEach(translation => { + console.log('update translation in file', translation) + const translationJson = JSON.parse(fs.readFileSync(`translations/${translation}`, 'utf8')) + translationJson.translations[word] = word + fs.writeFileSync(`translations/${translation}`, JSON.stringify(translationJson, null, 4), 'utf8'); + }) + } return word } return translation diff --git a/src/background/menu/config_menu_template.js b/src/background/menu/config_menu_template.js index b315a40..c3dd718 100644 --- a/src/background/menu/config_menu_template.js +++ b/src/background/menu/config_menu_template.js @@ -1,7 +1,7 @@ import { app, BrowserWindow } from "electron"; import fs from 'fs' import path from 'path' -import __ from '../../app/translation' +import __, { translationsDir } from '../../app/translation' export const settingsMenuTemplateFunc = (config, onLanguageChange) => ({ label: "Settings", @@ -24,8 +24,9 @@ export const settingsMenuTemplateFunc = (config, onLanguageChange) => ({ label: __("Language"), submenu: (() => { const translations = [] - fs.readdirSync('translations').forEach(translation => { - const translationJson = JSON.parse(fs.readFileSync(`translations/${translation}`, 'utf8')) + const translationsDirectory = translationsDir() + fs.readdirSync(translationsDirectory).forEach(translation => { + const translationJson = JSON.parse(fs.readFileSync(`${translationsDirectory}/${translation}`, 'utf8')) const lang = path.basename(translation, '.json') translations.push({ label: translationJson.nameOriginal, diff --git a/translations/en.json b/translations/en.json index b126a8c..0491275 100644 --- a/translations/en.json +++ b/translations/en.json @@ -1,8 +1,8 @@ { - "name": "English", - "nameOriginal": "English", - "translations": - { - "welcome": "welcome" - } + "name": "English", + "nameOriginal": "English", + "translations": { + "Language": "Language", + "welcome": "welcome" + } } \ No newline at end of file diff --git a/translations/ru.json b/translations/ru.json index ed7f6e4..1716e6e 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -1,9 +1,8 @@ { - "name": "Russian", - "nameOriginal": "Русский", - "translations": - { - "welcome": "приветствие", - "Language": "Язык" - } + "name": "Russian", + "nameOriginal": "Русский", + "translations": { + "Language": "Язык", + "welcome": "Добро пожаловать" + } } \ No newline at end of file