Skip to content

Commit

Permalink
Merge pull request #15 from Cyb10101/cyb-translate
Browse files Browse the repository at this point in the history
Cyb translate
  • Loading branch information
Cyb10101 authored Oct 12, 2019
2 parents 35480bc + bf91ae9 commit 775f136
Show file tree
Hide file tree
Showing 11 changed files with 142 additions and 29 deletions.
1 change: 1 addition & 0 deletions assets/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ require('bootstrap');
require('./development.js');
require('./sound-board.js');
require('./settings.js');
require('./translate.js');
64 changes: 58 additions & 6 deletions assets/js/language.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,46 @@

const electron = require('electron');
const fs = require('fs');
const Store = require('electron-store');
const store = new Store();
let loadedLanguage;
let app = electron.app ? electron.app : electron.remote.app;
let pathLanguage = electron.app ? __dirname + '/../../' : '';
let languages = ['en', 'de'];

class Language {
constructor() {
let currentLanguage = 'en';
if (fs.existsSync(pathLanguage + 'public/language/' + app.getLocale() + '.json')) {
currentLanguage = app.getLocale();
this.load();
}

load() {
let language = this.getCurrent();
loadedLanguage = JSON.parse(fs.readFileSync(pathLanguage + 'public/language/en.json', 'utf8'));
if (language !== '' && language !== 'en') {
let loadedLanguage2 = JSON.parse(fs.readFileSync(pathLanguage + 'public/language/' + language + '.json', 'utf8'));
loadedLanguage = {...loadedLanguage, ...loadedLanguage2}; // Merge language objects
}
loadedLanguage = JSON.parse(fs.readFileSync(pathLanguage + 'public/language/' + currentLanguage + '.json', 'utf8'));
}

getAvailable() {
return ['en', 'de'];
}

getCurrent() {
let language = store.get('language', '');
if (!this.getAvailable().includes(language)) {
language = app.getLocale();

if (!this.getAvailable().includes(language)) {
language = 'en';
}
}

if (!fs.existsSync(pathLanguage + 'public/language/' + language + '.json')) {
language = 'en';
}

return language;
}

__(phrase) {
Expand All @@ -22,9 +51,32 @@ class Language {
}
return translation
}

translate() {
let instance = this;
document.querySelectorAll('.translate').forEach(function (obj) {
obj.innerHTML = instance.__(obj.innerHTML.trim());
});
}

reTranslate() {
let instance = this;
loadedLanguage = this.objectFlip(loadedLanguage);
this.translate();
language.load();
this.translate();
}

objectFlip(obj) {
const ret = {};
Object.keys(obj).forEach(key => {
ret[obj[key]] = key;
});
return ret;
}
}

const language = new Language();
const __ = language.__;
// module.exports = language;
module.exports = __;
exports.language = language;
exports.__ = language.__;
41 changes: 37 additions & 4 deletions assets/js/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,23 @@
const {ipcRenderer, remote, shell} = require('electron');
const Store = require('electron-store');
const store = new Store();
const {__, language} = require('./language.js');

class Settings {
constructor() {
this.setVolume();
this.bindVolume();
this.setVolume();

this.setModifier();
this.bindModifier();
this.setModifier();

this.setPageColor();
this.setButtonColor();
this.bindPageColor();
this.bindButtonColor();
this.setPageColor();
this.setButtonColor();

this.bindLanguage();
this.setLanguage();

this.bindAppSettings();
this.setAppSettings();
Expand Down Expand Up @@ -81,6 +85,35 @@ class Settings {
ipcRenderer.send('setGlobalShortcuts', amount);
}

bindLanguage() {
let settingLanguage = document.querySelector('#settings-language');

for (let languageAvailable of language.getAvailable()) {
let option = document.createElement('option');
option.className = 'translate';
option.value = languageAvailable;
option.innerText = __('language.' + languageAvailable);
settingLanguage.appendChild(option);
}

settingLanguage.addEventListener('change', function () {
let oldLanguage = store.get('language', 'en');
store.set('language', this.value);
language.reTranslate();
ipcRenderer.send('app', {do: 'reTranslate'});
});
}

setLanguage() {
let settingLanguage = document.querySelector('#settings-language');
let languageStored = store.get('language', '');
if (language.getAvailable().includes(languageStored)) {
settingLanguage.value = languageStored;
} else {
settingLanguage.value = '';
}
}

bindAppSettings() {
let instance = this;
document.querySelector('#settings-app-start-minimized').addEventListener('change', function () {
Expand Down
9 changes: 1 addition & 8 deletions assets/js/sound-board.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ const Store = require('electron-store');
const store = new Store();
import Sortable from 'sortablejs';
import {predefinedSounds} from './predefined-sounds.js';
const __ = require('./language.js');
const {__} = require('./language.js');

class SoundBoard {
constructor() {
this.translate();
this.initializeUserData();
this.createSoundBoard();
this.addTestSoundButtons();
Expand All @@ -22,12 +21,6 @@ class SoundBoard {
this.connectExternalLinks();
}

translate() {
document.querySelectorAll('.translate').forEach(function (obj) {
obj.innerHTML = __(obj.innerHTML.trim());
});
}

initializeUserData() {
this.userData = remote.app.getPath('userData');
this.userDataSounds = this.userData + '/sounds';
Expand Down
7 changes: 7 additions & 0 deletions assets/js/translate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

const {language} = require('./language.js');

document.addEventListener('DOMContentLoaded', function () {
language.translate();
});
14 changes: 11 additions & 3 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ let initializeStartMinimized = store.get('app-tray-instead-taskbar', false) && s

class ElectronApp {
initializeLanguage() {
this.__ = require('./assets/js/language.js');
const {language} = require('./assets/js/language.js');
language.load();
this.__ = language.__;
}

mainWindowMenu() {
Expand Down Expand Up @@ -229,7 +231,9 @@ class ElectronApp {
}

let instance = this;
trayMenu = new Tray(path.join(__dirname, 'assets/images/icons/iconfinder_S_1553065_32.png'));
if (!trayMenu) {
trayMenu = new Tray(path.join(__dirname, 'assets/images/icons/iconfinder_S_1553065_32.png'));
}
trayMenu.addListener('click', function () {
instance.trayMenuOpenPage('.page-sound-board');
});
Expand Down Expand Up @@ -310,6 +314,10 @@ class ElectronApp {
// @todo destroy tray menu
}
mainWindow.setSkipTaskbar(isTray);
} else if (args.do === 'reTranslate') {
instance.initializeLanguage();
instance.mainWindowMenu();
instance.trayMenu();
} else if (args.do === 'restart') {
if (store.get('app-tray-instead-taskbar', false)) {
appQuit = true;
Expand Down Expand Up @@ -383,7 +391,7 @@ app.on('second-instance', (event, argv, cwd) => {
});

app.on('ready', () => {
electronApp.initializeLanguage()
electronApp.initializeLanguage();
electronApp.mainWindowMenu();
electronApp.mainWindowCreate();
electronApp.connectIpc();
Expand Down
12 changes: 6 additions & 6 deletions public/build/app.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/build/app.js.map

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,12 @@ <h3 class="translate">Button color</h3>
<div class="color-circle setting-color-21"></div>
</div>
</div>
<div class="col-12 mb-3">
<h3 class="translate">Language</h3>
<select class="custom-select" id="settings-language">
<option class="translate" value="" selected>- System default -</option>
</select>
</div>
<div class="col-12 mb-3">
<h3 class="translate">Application</h3>
<div class="custom-control custom-checkbox mb-1">
Expand Down
7 changes: 6 additions & 1 deletion public/language/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,10 @@
"Do you want to change window frame and restart the application?": "Willst du den Fensterrahmen ändern und die Anwendung neu starten?",
"Reset app data": "Anwendungsdaten zurücksetzen",
"If you reset the app, all settings will be reset to default.": "Wenn Sie die Anwendung zurücksetzen, werden alle Einstellungen auf die Standardeinstellungen zurückgesetzt.",
"Note: Windows maybe does not start the application automatically.": "Hinweis: Windows startet die Anwendung möglicherweise nicht automatisch."
"Note: Windows maybe does not start the application automatically.": "Hinweis: Windows startet die Anwendung möglicherweise nicht automatisch.",

"Language": "Sprache",
"- System default -": "- System Standard -",
"English": "Englisch",
"German": "Deutsch"
}
8 changes: 8 additions & 0 deletions public/language/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,12 @@
"Reset app data": "Reset app data",
"If you reset the app, all settings will be reset to default.": "If you reset the app, all settings will be reset to default.",
"Note: Windows maybe does not start the application automatically.": "Note: Windows maybe does not start the application automatically.",

"Language": "Language",
"- System default -": "- System default -",
"English": "English",
"German": "German",

"language.en": "English",
"language.de": "German"
}

0 comments on commit 775f136

Please sign in to comment.