aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar haraldox <hnaumann+github@gmail.com>2018-03-01 10:49:21 +0100
committerLibravatar haraldox <hnaumann+github@gmail.com>2018-03-01 10:49:21 +0100
commitaa655ac1a73c2a04feac232062a94b8a8385e75d (patch)
tree5cd44c1ca784d0b71711076b15ecef68d1955800
parentUpdate changelog (diff)
downloadferdium-app-aa655ac1a73c2a04feac232062a94b8a8385e75d.tar.gz
ferdium-app-aa655ac1a73c2a04feac232062a94b8a8385e75d.tar.zst
ferdium-app-aa655ac1a73c2a04feac232062a94b8a8385e75d.zip
ADD Franz-wide internationalization
-rw-r--r--src/I18n.js10
-rw-r--r--src/i18n/locales/en-US.json3
-rw-r--r--src/lib/Menu.js31
3 files changed, 34 insertions, 10 deletions
diff --git a/src/I18n.js b/src/I18n.js
index ae3ba2fa9..5ba7c8c7e 100644
--- a/src/I18n.js
+++ b/src/I18n.js
@@ -9,11 +9,19 @@ import UserStore from './stores/UserStore';
9 9
10@inject('stores') @observer 10@inject('stores') @observer
11export default class I18N extends Component { 11export default class I18N extends Component {
12
13 componentDidUpdate() {
14 window.franz.menu.rebuild();
15 }
16
12 render() { 17 render() {
13 const { stores, children } = this.props; 18 const { stores, children } = this.props;
14 const { locale } = stores.app; 19 const { locale } = stores.app;
15 return ( 20 return (
16 <IntlProvider {...{ locale, key: locale, messages: translations[locale] }}> 21 <IntlProvider
22 {...{ locale, key: locale, messages: translations[locale] }}
23 ref={(intlProvider) => { window.franz.intl = intlProvider ? intlProvider.getChildContext().intl : null; }}
24 >
17 {children} 25 {children}
18 </IntlProvider> 26 </IntlProvider>
19 ); 27 );
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index d5c0ea441..25ca2adeb 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -199,5 +199,6 @@
199 "service.crashHandler.action": "Reload {name}", 199 "service.crashHandler.action": "Reload {name}",
200 "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", 200 "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds",
201 "service.disabledHandler.headline": "{name} is disabled", 201 "service.disabledHandler.headline": "{name} is disabled",
202 "service.disabledHandler.action": "Enable {name}" 202 "service.disabledHandler.action": "Enable {name}",
203 "menu.edit": "Edit"
203} 204}
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index 16e91374e..d94064ada 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -1,13 +1,21 @@
1import { remote, shell } from 'electron'; 1import { remote, shell } from 'electron';
2import { autorun, computed, observable, toJS } from 'mobx'; 2import { autorun, computed, observable, toJS } from 'mobx';
3import { defineMessages } from 'react-intl';
3 4
4import { isMac } from '../environment'; 5import { isMac } from '../environment';
5 6
6const { app, Menu, dialog } = remote; 7const { app, Menu, dialog } = remote;
7 8
8const template = [ 9const menuItems = defineMessages({
10 edit: {
11 id: 'menu.edit',
12 defaultMessage: '!!!Edit',
13 },
14});
15
16const _makeTemplate = intl => [
9 { 17 {
10 label: 'Edit', 18 label: intl.formatMessage(menuItems.edit),
11 submenu: [ 19 submenu: [
12 { 20 {
13 role: 'undo', 21 role: 'undo',
@@ -115,8 +123,6 @@ const template = [
115]; 123];
116 124
117export default class FranzMenu { 125export default class FranzMenu {
118 @observable tpl = template;
119
120 constructor(stores, actions) { 126 constructor(stores, actions) {
121 this.stores = stores; 127 this.stores = stores;
122 this.actions = actions; 128 this.actions = actions;
@@ -124,8 +130,19 @@ export default class FranzMenu {
124 autorun(this._build.bind(this)); 130 autorun(this._build.bind(this));
125 } 131 }
126 132
133 rebuild() {
134 this._build();
135 }
136
127 _build() { 137 _build() {
128 const tpl = toJS(this.tpl); 138 // console.log(window.franz);
139 const serviceTpl = Object.assign([], this.serviceTpl); // need to clone object so we don't modify computed (cached) object
140
141 if (window.franz === undefined) {
142 return;
143 }
144
145 const tpl = _makeTemplate(window.franz.intl);
129 146
130 tpl[1].submenu.push({ 147 tpl[1].submenu.push({
131 role: 'toggledevtools', 148 role: 'toggledevtools',
@@ -232,8 +249,6 @@ export default class FranzMenu {
232 }); 249 });
233 } 250 }
234 251
235 const serviceTpl = this.serviceTpl;
236
237 serviceTpl.unshift({ 252 serviceTpl.unshift({
238 label: 'Add new Service', 253 label: 'Add new Service',
239 accelerator: 'CmdOrCtrl+N', 254 accelerator: 'CmdOrCtrl+N',
@@ -245,7 +260,7 @@ export default class FranzMenu {
245 }); 260 });
246 261
247 if (serviceTpl.length > 0) { 262 if (serviceTpl.length > 0) {
248 tpl[isMac ? 3 : 2].submenu = toJS(this.serviceTpl); 263 tpl[isMac ? 3 : 2].submenu = serviceTpl;
249 } 264 }
250 265
251 const menu = Menu.buildFromTemplate(tpl); 266 const menu = Menu.buildFromTemplate(tpl);