diff options
author | haraldox <hnaumann+github@gmail.com> | 2018-03-01 10:49:21 +0100 |
---|---|---|
committer | haraldox <hnaumann+github@gmail.com> | 2018-03-01 10:49:21 +0100 |
commit | aa655ac1a73c2a04feac232062a94b8a8385e75d (patch) | |
tree | 5cd44c1ca784d0b71711076b15ecef68d1955800 /src | |
parent | Update changelog (diff) | |
download | ferdium-app-aa655ac1a73c2a04feac232062a94b8a8385e75d.tar.gz ferdium-app-aa655ac1a73c2a04feac232062a94b8a8385e75d.tar.zst ferdium-app-aa655ac1a73c2a04feac232062a94b8a8385e75d.zip |
ADD Franz-wide internationalization
Diffstat (limited to 'src')
-rw-r--r-- | src/I18n.js | 10 | ||||
-rw-r--r-- | src/i18n/locales/en-US.json | 3 | ||||
-rw-r--r-- | src/lib/Menu.js | 31 |
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 |
11 | export default class I18N extends Component { | 11 | export 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 @@ | |||
1 | import { remote, shell } from 'electron'; | 1 | import { remote, shell } from 'electron'; |
2 | import { autorun, computed, observable, toJS } from 'mobx'; | 2 | import { autorun, computed, observable, toJS } from 'mobx'; |
3 | import { defineMessages } from 'react-intl'; | ||
3 | 4 | ||
4 | import { isMac } from '../environment'; | 5 | import { isMac } from '../environment'; |
5 | 6 | ||
6 | const { app, Menu, dialog } = remote; | 7 | const { app, Menu, dialog } = remote; |
7 | 8 | ||
8 | const template = [ | 9 | const menuItems = defineMessages({ |
10 | edit: { | ||
11 | id: 'menu.edit', | ||
12 | defaultMessage: '!!!Edit', | ||
13 | }, | ||
14 | }); | ||
15 | |||
16 | const _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 | ||
117 | export default class FranzMenu { | 125 | export 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); |