From aa655ac1a73c2a04feac232062a94b8a8385e75d Mon Sep 17 00:00:00 2001 From: haraldox Date: Thu, 1 Mar 2018 10:49:21 +0100 Subject: ADD Franz-wide internationalization --- src/I18n.js | 10 +++++++++- src/i18n/locales/en-US.json | 3 ++- 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'; @inject('stores') @observer export default class I18N extends Component { + + componentDidUpdate() { + window.franz.menu.rebuild(); + } + render() { const { stores, children } = this.props; const { locale } = stores.app; return ( - + { window.franz.intl = intlProvider ? intlProvider.getChildContext().intl : null; }} + > {children} ); 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 @@ "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.disabledHandler.headline": "{name} is disabled", - "service.disabledHandler.action": "Enable {name}" + "service.disabledHandler.action": "Enable {name}", + "menu.edit": "Edit" } 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 @@ import { remote, shell } from 'electron'; import { autorun, computed, observable, toJS } from 'mobx'; +import { defineMessages } from 'react-intl'; import { isMac } from '../environment'; const { app, Menu, dialog } = remote; -const template = [ +const menuItems = defineMessages({ + edit: { + id: 'menu.edit', + defaultMessage: '!!!Edit', + }, +}); + +const _makeTemplate = intl => [ { - label: 'Edit', + label: intl.formatMessage(menuItems.edit), submenu: [ { role: 'undo', @@ -115,8 +123,6 @@ const template = [ ]; export default class FranzMenu { - @observable tpl = template; - constructor(stores, actions) { this.stores = stores; this.actions = actions; @@ -124,8 +130,19 @@ export default class FranzMenu { autorun(this._build.bind(this)); } + rebuild() { + this._build(); + } + _build() { - const tpl = toJS(this.tpl); + // console.log(window.franz); + const serviceTpl = Object.assign([], this.serviceTpl); // need to clone object so we don't modify computed (cached) object + + if (window.franz === undefined) { + return; + } + + const tpl = _makeTemplate(window.franz.intl); tpl[1].submenu.push({ role: 'toggledevtools', @@ -232,8 +249,6 @@ export default class FranzMenu { }); } - const serviceTpl = this.serviceTpl; - serviceTpl.unshift({ label: 'Add new Service', accelerator: 'CmdOrCtrl+N', @@ -245,7 +260,7 @@ export default class FranzMenu { }); if (serviceTpl.length > 0) { - tpl[isMac ? 3 : 2].submenu = toJS(this.serviceTpl); + tpl[isMac ? 3 : 2].submenu = serviceTpl; } const menu = Menu.buildFromTemplate(tpl); -- cgit v1.2.3-54-g00ecf