summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2018-04-04 21:23:38 +0200
committerLibravatar GitHub <noreply@github.com>2018-04-04 21:23:38 +0200
commit1790b795238c2abe832285197cb88c0833bd98ca (patch)
tree89d4bc3632efc05822c0bec53a883b2d092bfd69
parentFix typo [ci skip] (diff)
parentMerge branch 'master' into release/5.0.0-beta.18 (diff)
downloadferdium-app-1790b795238c2abe832285197cb88c0833bd98ca.tar.gz
ferdium-app-1790b795238c2abe832285197cb88c0833bd98ca.tar.zst
ferdium-app-1790b795238c2abe832285197cb88c0833bd98ca.zip
5.0.0 beta.18v5.0.0-beta.18
-rw-r--r--CHANGELOG.md16
-rw-r--r--appveyor.yml2
-rw-r--r--electron-builder.yml6
-rw-r--r--package.json2
-rw-r--r--src/actions/settings.js4
-rw-r--r--src/api/LocalApi.js8
-rw-r--r--src/api/server/LocalApi.js19
-rw-r--r--src/components/layout/AppLayout.js4
-rw-r--r--src/components/settings/settings/EditSettingsForm.js6
-rw-r--r--src/config.js10
-rw-r--r--src/containers/layout/AppLayoutContainer.js7
-rw-r--r--src/containers/settings/EditSettingsScreen.js52
-rw-r--r--src/electron/Settings.js39
-rw-r--r--src/electron/ipc-api/settings.js6
-rw-r--r--src/i18n/locales/ca.json87
-rw-r--r--src/i18n/locales/cs.json87
-rw-r--r--src/i18n/locales/de.json5
-rw-r--r--src/i18n/locales/el.json1
-rw-r--r--src/i18n/locales/en-US.json1
-rw-r--r--src/i18n/locales/es.json97
-rw-r--r--src/i18n/locales/fr.json83
-rw-r--r--src/i18n/locales/ga.json89
-rw-r--r--src/i18n/locales/hr.json1
-rw-r--r--src/i18n/locales/hu.json1
-rw-r--r--src/i18n/locales/id.json1
-rw-r--r--src/i18n/locales/it.json93
-rw-r--r--src/i18n/locales/ja.json87
-rw-r--r--src/i18n/locales/ka.json1
-rw-r--r--src/i18n/locales/nl-BE.json1
-rw-r--r--src/i18n/locales/nl.json61
-rw-r--r--src/i18n/locales/pl.json65
-rw-r--r--src/i18n/locales/pt-BR.json89
-rw-r--r--src/i18n/locales/pt.json15
-rw-r--r--src/i18n/locales/ru.json67
-rw-r--r--src/i18n/locales/sk.json1
-rw-r--r--src/i18n/locales/sr.json1
-rw-r--r--src/i18n/locales/tr.json87
-rw-r--r--src/i18n/locales/uk.json1
-rw-r--r--src/i18n/locales/zh-TW.json35
-rw-r--r--src/index.js8
-rw-r--r--src/lib/Menu.js15
-rw-r--r--src/models/Settings.js34
-rw-r--r--src/models/User.js2
-rw-r--r--src/stores/AppStore.js37
-rw-r--r--src/stores/ServicesStore.js36
-rw-r--r--src/stores/SettingsStore.js98
-rw-r--r--src/stores/UIStore.js2
-rw-r--r--src/stores/UserStore.js24
-rw-r--r--src/styles/title-bar.scss3
-rw-r--r--src/webview/plugin.js6
50 files changed, 862 insertions, 641 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c5159fd09..cdc89b325 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,19 @@
1<a name="5.0.0-beta.18"></a>
2# [5.0.0-beta.18](https://github.com/meetfranz/franz/compare/v5.0.0-beta.16...v5.0.0-beta.18) (2018-04-03)
3
4### General
5* **Translations:** Improved translations. **[A million thanks to the amazing community. 🎉](http://i18n.meetfranz.com/)**
6
7### Features
8
9* **App:** Add option to enable/disable hardware acceleration ([f720d30](https://github.com/meetfranz/franz/commit/f720d30))
10
11### Bug Fixes
12
13* **Windows:** Fix shortcuts for closing, minimizing, quitting and toggling fullscreen ([f720d30](https://github.com/meetfranz/franz/commit/f720d30))
14* **Windows:** Hide title bar when in fullscreen ([655a6ed](https://github.com/meetfranz/franz/commit/655a6ed))
15
16
1<a name="5.0.0-beta.17"></a> 17<a name="5.0.0-beta.17"></a>
2# [5.0.0-beta.17](https://github.com/meetfranz/franz/compare/v5.0.0-beta.16...v5.0.0-beta.17) (2018-03-20) 18# [5.0.0-beta.17](https://github.com/meetfranz/franz/compare/v5.0.0-beta.16...v5.0.0-beta.17) (2018-03-20)
3 19
diff --git a/appveyor.yml b/appveyor.yml
index d9296b1f6..8c83a5644 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -20,7 +20,7 @@ before_build:
20 - yarn lint 20 - yarn lint
21 21
22build_script: 22build_script:
23 - yarn build --x64 --ia32 23 - yarn build
24 24
25notifications: 25notifications:
26 - provider: Slack 26 - provider: Slack
diff --git a/electron-builder.yml b/electron-builder.yml
index 96bd63cc2..3e72da4ce 100644
--- a/electron-builder.yml
+++ b/electron-builder.yml
@@ -18,7 +18,11 @@ dmg:
18 18
19win: 19win:
20 icon: ./build-helpers/images/icon.ico 20 icon: ./build-helpers/images/icon.ico
21 target: nsis 21 target:
22 target: nsis
23 arch:
24 - x64
25 - ia32
22 26
23linux: 27linux:
24 icon: ./build-helpers/images/icons 28 icon: ./build-helpers/images/icons
diff --git a/package.json b/package.json
index 1d7ab2852..3647e963b 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
2 "name": "franz", 2 "name": "franz",
3 "productName": "Franz", 3 "productName": "Franz",
4 "appId": "com.meetfranz.franz", 4 "appId": "com.meetfranz.franz",
5 "version": "5.0.0-beta.17", 5 "version": "5.0.0-beta.18",
6 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", 6 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.",
7 "copyright": "adlk x franz - Stefan Malzner", 7 "copyright": "adlk x franz - Stefan Malzner",
8 "main": "index.js", 8 "main": "index.js",
diff --git a/src/actions/settings.js b/src/actions/settings.js
index 3d53cd674..fd29b798b 100644
--- a/src/actions/settings.js
+++ b/src/actions/settings.js
@@ -2,9 +2,11 @@ import PropTypes from 'prop-types';
2 2
3export default { 3export default {
4 update: { 4 update: {
5 settings: PropTypes.object.isRequired, 5 type: PropTypes.string.isRequired,
6 data: PropTypes.object.isRequired,
6 }, 7 },
7 remove: { 8 remove: {
9 type: PropTypes.string.isRequired,
8 key: PropTypes.string.isRequired, 10 key: PropTypes.string.isRequired,
9 }, 11 },
10}; 12};
diff --git a/src/api/LocalApi.js b/src/api/LocalApi.js
index 59d7d8fa2..741917104 100644
--- a/src/api/LocalApi.js
+++ b/src/api/LocalApi.js
@@ -4,6 +4,14 @@ export default class LocalApi {
4 this.local = local; 4 this.local = local;
5 } 5 }
6 6
7 getAppSettings() {
8 return this.local.getAppSettings();
9 }
10
11 updateAppSettings(data) {
12 return this.local.updateAppSettings(data);
13 }
14
7 getAppCacheSize() { 15 getAppCacheSize() {
8 return this.local.getAppCacheSize(); 16 return this.local.getAppCacheSize();
9 } 17 }
diff --git a/src/api/server/LocalApi.js b/src/api/server/LocalApi.js
index 4d2497c61..78deb7aa5 100644
--- a/src/api/server/LocalApi.js
+++ b/src/api/server/LocalApi.js
@@ -1,4 +1,4 @@
1import { remote } from 'electron'; 1import { ipcRenderer, remote } from 'electron';
2import du from 'du'; 2import du from 'du';
3 3
4import { getServicePartitionsDirectory } from '../../helpers/service-helpers.js'; 4import { getServicePartitionsDirectory } from '../../helpers/service-helpers.js';
@@ -8,6 +8,23 @@ const debug = require('debug')('LocalApi');
8const { session } = remote; 8const { session } = remote;
9 9
10export default class LocalApi { 10export default class LocalApi {
11 // Settings
12 getAppSettings() {
13 return new Promise((resolve) => {
14 ipcRenderer.once('appSettings', (event, data) => {
15 debug('LocalApi::getAppSettings resolves', data);
16 resolve(data);
17 });
18
19 ipcRenderer.send('getAppSettings');
20 });
21 }
22
23 async updateAppSettings(data) {
24 debug('LocalApi::updateAppSettings resolves', data);
25 ipcRenderer.send('updateAppSettings', data);
26 }
27
11 // Services 28 // Services
12 async getAppCacheSize() { 29 async getAppCacheSize() {
13 const partitionsDir = getServicePartitionsDirectory(); 30 const partitionsDir = getServicePartitionsDirectory();
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index 66aef1730..746775a7f 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -43,6 +43,7 @@ const messages = defineMessages({
43@observer 43@observer
44export default class AppLayout extends Component { 44export default class AppLayout extends Component {
45 static propTypes = { 45 static propTypes = {
46 isFullScreen: PropTypes.bool.isRequired,
46 sidebar: PropTypes.element.isRequired, 47 sidebar: PropTypes.element.isRequired,
47 services: PropTypes.element.isRequired, 48 services: PropTypes.element.isRequired,
48 children: PropTypes.element, 49 children: PropTypes.element,
@@ -69,6 +70,7 @@ export default class AppLayout extends Component {
69 70
70 render() { 71 render() {
71 const { 72 const {
73 isFullScreen,
72 sidebar, 74 sidebar,
73 services, 75 services,
74 children, 76 children,
@@ -90,7 +92,7 @@ export default class AppLayout extends Component {
90 return ( 92 return (
91 <div> 93 <div>
92 <div className="app"> 94 <div className="app">
93 {isWindows && <TitleBar menu={window.franz.menu.template} icon={'assets/images/logo.svg'} />} 95 {isWindows && !isFullScreen && <TitleBar menu={window.franz.menu.template} icon={'assets/images/logo.svg'} />}
94 <div className="app__content"> 96 <div className="app__content">
95 {sidebar} 97 {sidebar}
96 <div className="app__service"> 98 <div className="app__service">
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index 72aa5a8af..97f535594 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -76,6 +76,10 @@ const messages = defineMessages({
76 id: 'settings.app.currentVersion', 76 id: 'settings.app.currentVersion',
77 defaultMessage: '!!!Current version:', 77 defaultMessage: '!!!Current version:',
78 }, 78 },
79 enableGPUAccelerationInfo: {
80 id: 'settings.app.restartRequired',
81 defaultMessage: '!!!Changes require restart',
82 },
79}); 83});
80 84
81@observer 85@observer
@@ -172,6 +176,8 @@ export default class EditSettingsForm extends Component {
172 {/* Advanced */} 176 {/* Advanced */}
173 <h2 id="advanced">{intl.formatMessage(messages.headlineAdvanced)}</h2> 177 <h2 id="advanced">{intl.formatMessage(messages.headlineAdvanced)}</h2>
174 <Toggle field={form.$('enableSpellchecking')} /> 178 <Toggle field={form.$('enableSpellchecking')} />
179 <Toggle field={form.$('enableGPUAcceleration')} />
180 <p className="settings__help">{intl.formatMessage(messages.enableGPUAccelerationInfo)}</p>
175 {/* <Select field={form.$('spellcheckingLanguage')} /> */} 181 {/* <Select field={form.$('spellcheckingLanguage')} /> */}
176 <div className="settings__settings-group"> 182 <div className="settings__settings-group">
177 <h3> 183 <h3>
diff --git a/src/config.js b/src/config.js
index e66594c59..77fa92eca 100644
--- a/src/config.js
+++ b/src/config.js
@@ -1,3 +1,8 @@
1import electron from 'electron';
2import path from 'path';
3
4const app = process.type === 'renderer' ? electron.remote.app : electron.app;
5
1export const CHECK_INTERVAL = 1000 * 3600; // How often should we perform checks 6export const CHECK_INTERVAL = 1000 * 3600; // How often should we perform checks
2export const LOCAL_API = 'http://localhost:3000'; 7export const LOCAL_API = 'http://localhost:3000';
3export const DEV_API = 'https://dev.franzinfra.com'; 8export const DEV_API = 'https://dev.franzinfra.com';
@@ -5,7 +10,6 @@ export const LIVE_API = 'https://api.franzinfra.com';
5export const GA_ID = 'UA-74126766-6'; 10export const GA_ID = 'UA-74126766-6';
6 11
7export const DEFAULT_APP_SETTINGS = { 12export const DEFAULT_APP_SETTINGS = {
8 autoLaunchOnStart: true,
9 autoLaunchInBackground: false, 13 autoLaunchInBackground: false,
10 runInBackground: true, 14 runInBackground: true,
11 enableSystemTray: true, 15 enableSystemTray: true,
@@ -13,12 +17,14 @@ export const DEFAULT_APP_SETTINGS = {
13 showDisabledServices: true, 17 showDisabledServices: true,
14 showMessageBadgeWhenMuted: true, 18 showMessageBadgeWhenMuted: true,
15 enableSpellchecking: true, 19 enableSpellchecking: true,
16 // spellcheckingLanguage: 'auto',
17 locale: '', 20 locale: '',
18 fallbackLocale: 'en-US', 21 fallbackLocale: 'en-US',
19 beta: false, 22 beta: false,
20 isAppMuted: false, 23 isAppMuted: false,
24 enableGPUAcceleration: true,
21}; 25};
22 26
23export const FRANZ_SERVICE_REQUEST = 'http://bit.ly/franz-service-request'; 27export const FRANZ_SERVICE_REQUEST = 'http://bit.ly/franz-service-request';
24export const FRANZ_TRANSLATION = 'http://bit.ly/franz-translate'; 28export const FRANZ_TRANSLATION = 'http://bit.ly/franz-translate';
29
30export const SETTINGS_PATH = path.join(app.getPath('userData'), 'config', 'settings.json');
diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js
index 075bd5e34..9212f809f 100644
--- a/src/containers/layout/AppLayoutContainer.js
+++ b/src/containers/layout/AppLayoutContainer.js
@@ -77,7 +77,7 @@ export default class AppLayoutContainer extends Component {
77 <Sidebar 77 <Sidebar
78 services={services.allDisplayed} 78 services={services.allDisplayed}
79 setActive={setActive} 79 setActive={setActive}
80 isAppMuted={settings.all.isAppMuted} 80 isAppMuted={settings.all.app.isAppMuted}
81 openSettings={openSettings} 81 openSettings={openSettings}
82 closeSettings={closeSettings} 82 closeSettings={closeSettings}
83 reorder={reorder} 83 reorder={reorder}
@@ -87,7 +87,7 @@ export default class AppLayoutContainer extends Component {
87 deleteService={deleteService} 87 deleteService={deleteService}
88 updateService={updateService} 88 updateService={updateService}
89 toggleMuteApp={toggleMuteApp} 89 toggleMuteApp={toggleMuteApp}
90 showMessageBadgeWhenMutedSetting={settings.all.showMessageBadgeWhenMuted} 90 showMessageBadgeWhenMutedSetting={settings.all.app.showMessageBadgeWhenMuted}
91 showMessageBadgesEvenWhenMuted={ui.showMessageBadgesEvenWhenMuted} 91 showMessageBadgesEvenWhenMuted={ui.showMessageBadgesEvenWhenMuted}
92 /> 92 />
93 ); 93 );
@@ -99,13 +99,14 @@ export default class AppLayoutContainer extends Component {
99 setWebviewReference={setWebviewReference} 99 setWebviewReference={setWebviewReference}
100 openWindow={openWindow} 100 openWindow={openWindow}
101 reload={reload} 101 reload={reload}
102 isAppMuted={settings.all.isAppMuted} 102 isAppMuted={settings.all.app.isAppMuted}
103 update={updateService} 103 update={updateService}
104 /> 104 />
105 ); 105 );
106 106
107 return ( 107 return (
108 <AppLayout 108 <AppLayout
109 isFullScreen={app.isFullScreen}
109 isOnline={app.isOnline} 110 isOnline={app.isOnline}
110 showServicesUpdatedInfoBar={ui.showServicesUpdatedInfoBar} 111 showServicesUpdatedInfoBar={ui.showServicesUpdatedInfoBar}
111 appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED} 112 appUpdateIsDownloaded={app.updateStatus === app.updateStatusTypes.DOWNLOADED}
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index 1fa7ce8bc..018ce663f 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -51,14 +51,14 @@ const messages = defineMessages({
51 id: 'settings.app.form.enableSpellchecking', 51 id: 'settings.app.form.enableSpellchecking',
52 defaultMessage: '!!!Enable spell checking', 52 defaultMessage: '!!!Enable spell checking',
53 }, 53 },
54 enableGPUAcceleration: {
55 id: 'settings.app.form.enableGPUAcceleration',
56 defaultMessage: '!!!Enable GPU Acceleration',
57 },
54 spellcheckingLanguage: { 58 spellcheckingLanguage: {
55 id: 'settings.app.form.spellcheckingLanguage', 59 id: 'settings.app.form.spellcheckingLanguage',
56 defaultMessage: '!!!Language for spell checking', 60 defaultMessage: '!!!Language for spell checking',
57 }, 61 },
58 // spellcheckingAutomaticDetection: {
59 // id: 'settings.app.form.spellcheckingAutomaticDetection',
60 // defaultMessage: '!!!Detect language automatically',
61 // },
62 beta: { 62 beta: {
63 id: 'settings.app.form.beta', 63 id: 'settings.app.form.beta',
64 defaultMessage: '!!!Include beta versions', 64 defaultMessage: '!!!Include beta versions',
@@ -84,22 +84,24 @@ export default class EditSettingsScreen extends Component {
84 }); 84 });
85 85
86 settings.update({ 86 settings.update({
87 settings: { 87 type: 'app',
88 data: {
88 runInBackground: settingsData.runInBackground, 89 runInBackground: settingsData.runInBackground,
89 enableSystemTray: settingsData.enableSystemTray, 90 enableSystemTray: settingsData.enableSystemTray,
90 minimizeToSystemTray: settingsData.minimizeToSystemTray, 91 minimizeToSystemTray: settingsData.minimizeToSystemTray,
92 enableGPUAcceleration: settingsData.enableGPUAcceleration,
91 showDisabledServices: settingsData.showDisabledServices, 93 showDisabledServices: settingsData.showDisabledServices,
92 showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted, 94 showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted,
93 enableSpellchecking: settingsData.enableSpellchecking, 95 enableSpellchecking: settingsData.enableSpellchecking,
94 // spellcheckingLanguage: settingsData.spellcheckingLanguage, 96 beta: settingsData.beta, // we need this info in the main process as well
95 locale: settingsData.locale, 97 locale: settingsData.locale, // we need this info in the main process as well
96 beta: settingsData.beta,
97 }, 98 },
98 }); 99 });
99 100
100 user.update({ 101 user.update({
101 userData: { 102 userData: {
102 beta: settingsData.beta, 103 beta: settingsData.beta,
104 locale: settingsData.locale,
103 }, 105 },
104 }); 106 });
105 } 107 }
@@ -116,17 +118,6 @@ export default class EditSettingsScreen extends Component {
116 }); 118 });
117 }); 119 });
118 120
119 // const spellcheckerLocales = [{
120 // value: 'auto',
121 // label: intl.formatMessage(messages.spellcheckingAutomaticDetection),
122 // }];
123 // Object.keys(SPELLCHECKER_LOCALES).forEach((key) => {
124 // spellcheckerLocales.push({
125 // value: key,
126 // label: SPELLCHECKER_LOCALES[key],
127 // });
128 // });
129
130 const config = { 121 const config = {
131 fields: { 122 fields: {
132 autoLaunchOnStart: { 123 autoLaunchOnStart: {
@@ -141,40 +132,39 @@ export default class EditSettingsScreen extends Component {
141 }, 132 },
142 runInBackground: { 133 runInBackground: {
143 label: intl.formatMessage(messages.runInBackground), 134 label: intl.formatMessage(messages.runInBackground),
144 value: settings.all.runInBackground, 135 value: settings.all.app.runInBackground,
145 default: DEFAULT_APP_SETTINGS.runInBackground, 136 default: DEFAULT_APP_SETTINGS.runInBackground,
146 }, 137 },
147 enableSystemTray: { 138 enableSystemTray: {
148 label: intl.formatMessage(messages.enableSystemTray), 139 label: intl.formatMessage(messages.enableSystemTray),
149 value: settings.all.enableSystemTray, 140 value: settings.all.app.enableSystemTray,
150 default: DEFAULT_APP_SETTINGS.enableSystemTray, 141 default: DEFAULT_APP_SETTINGS.enableSystemTray,
151 }, 142 },
152 minimizeToSystemTray: { 143 minimizeToSystemTray: {
153 label: intl.formatMessage(messages.minimizeToSystemTray), 144 label: intl.formatMessage(messages.minimizeToSystemTray),
154 value: settings.all.minimizeToSystemTray, 145 value: settings.all.app.minimizeToSystemTray,
155 default: DEFAULT_APP_SETTINGS.minimizeToSystemTray, 146 default: DEFAULT_APP_SETTINGS.minimizeToSystemTray,
156 }, 147 },
157 showDisabledServices: { 148 showDisabledServices: {
158 label: intl.formatMessage(messages.showDisabledServices), 149 label: intl.formatMessage(messages.showDisabledServices),
159 value: settings.all.showDisabledServices, 150 value: settings.all.app.showDisabledServices,
160 default: DEFAULT_APP_SETTINGS.showDisabledServices, 151 default: DEFAULT_APP_SETTINGS.showDisabledServices,
161 }, 152 },
162 showMessageBadgeWhenMuted: { 153 showMessageBadgeWhenMuted: {
163 label: intl.formatMessage(messages.showMessageBadgeWhenMuted), 154 label: intl.formatMessage(messages.showMessageBadgeWhenMuted),
164 value: settings.all.showMessageBadgeWhenMuted, 155 value: settings.all.app.showMessageBadgeWhenMuted,
165 default: DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted, 156 default: DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted,
166 }, 157 },
167 enableSpellchecking: { 158 enableSpellchecking: {
168 label: intl.formatMessage(messages.enableSpellchecking), 159 label: intl.formatMessage(messages.enableSpellchecking),
169 value: settings.all.enableSpellchecking, 160 value: settings.all.app.enableSpellchecking,
170 default: DEFAULT_APP_SETTINGS.enableSpellchecking, 161 default: DEFAULT_APP_SETTINGS.enableSpellchecking,
171 }, 162 },
172 // spellcheckingLanguage: { 163 enableGPUAcceleration: {
173 // label: intl.formatMessage(messages.spellcheckingLanguage), 164 label: intl.formatMessage(messages.enableGPUAcceleration),
174 // value: settings.all.spellcheckingLanguage, 165 value: settings.all.app.enableGPUAcceleration,
175 // options: spellcheckerLocales, 166 default: DEFAULT_APP_SETTINGS.enableGPUAcceleration,
176 // default: DEFAULT_APP_SETTINGS.spellcheckingLanguage, 167 },
177 // },
178 locale: { 168 locale: {
179 label: intl.formatMessage(messages.language), 169 label: intl.formatMessage(messages.language),
180 value: app.locale, 170 value: app.locale,
diff --git a/src/electron/Settings.js b/src/electron/Settings.js
index 824b4c20c..b3138e948 100644
--- a/src/electron/Settings.js
+++ b/src/electron/Settings.js
@@ -1,27 +1,42 @@
1import { observable } from 'mobx'; 1import { observable, toJS } from 'mobx';
2import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra';
2 3
3import { DEFAULT_APP_SETTINGS } from '../config'; 4import { SETTINGS_PATH, DEFAULT_APP_SETTINGS } from '../config';
5
6const debug = require('debug')('Settings');
4 7
5export default class Settings { 8export default class Settings {
6 @observable store = { 9 @observable store = DEFAULT_APP_SETTINGS;
7 autoLaunchOnStart: DEFAULT_APP_SETTINGS.autoLaunchOnStart, 10
8 autoLaunchInBackground: DEFAULT_APP_SETTINGS.autoLaunchInBackground, 11 constructor() {
9 runInBackground: DEFAULT_APP_SETTINGS.runInBackground, 12 if (!pathExistsSync(SETTINGS_PATH)) {
10 enableSystemTray: DEFAULT_APP_SETTINGS.enableSystemTray, 13 this._writeFile();
11 minimizeToSystemTray: DEFAULT_APP_SETTINGS.minimizeToSystemTray, 14 } else {
12 locale: DEFAULT_APP_SETTINGS.locale, 15 this._hydrate();
13 beta: DEFAULT_APP_SETTINGS.beta, 16 }
14 }; 17 }
15 18
16 set(settings) { 19 set(settings) {
17 this.store = Object.assign(this.store, settings); 20 this.store = Object.assign(this.store, settings);
21
22 this._writeFile();
18 } 23 }
19 24
20 all() { 25 get all() {
21 return this.store; 26 return this.store;
22 } 27 }
23 28
24 get(key) { 29 get(key) {
25 return this.store[key]; 30 return this.store[key];
26 } 31 }
32
33 _hydrate() {
34 this.store = readJsonSync(SETTINGS_PATH);
35 debug('Hydrate store', toJS(this.store));
36 }
37
38 _writeFile() {
39 outputJsonSync(SETTINGS_PATH, this.store);
40 debug('Write settings file', toJS(this.store));
41 }
27} 42}
diff --git a/src/electron/ipc-api/settings.js b/src/electron/ipc-api/settings.js
index 995b28fbd..3eab68a91 100644
--- a/src/electron/ipc-api/settings.js
+++ b/src/electron/ipc-api/settings.js
@@ -1,7 +1,11 @@
1import { ipcMain } from 'electron'; 1import { ipcMain } from 'electron';
2 2
3export default (params) => { 3export default (params) => {
4 ipcMain.on('settings', (event, args) => { 4 ipcMain.on('getAppSettings', () => {
5 params.mainWindow.webContents.send('appSettings', params.settings.all);
6 });
7
8 ipcMain.on('updateAppSettings', (event, args) => {
5 params.settings.set(args); 9 params.settings.set(args);
6 }); 10 });
7}; 11};
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json
index be9059727..4ea3eb1a7 100644
--- a/src/i18n/locales/ca.json
+++ b/src/i18n/locales/ca.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "La teva sessió ha caducat, torna a iniciar la sessió.", 26 "login.serverLogout" : "La teva sessió ha caducat, torna a iniciar la sessió.",
27 "login.submit.label" : "Accedir", 27 "login.submit.label" : "Accedir",
28 "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.", 28 "login.tokenExpired" : "La teva sessió ha caducat, torna a iniciar la sessió.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Sobre Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Amaga",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Amaga altres",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Surt",
33 "menu.app.settings" : "Configuració", 33 "menu.app.settings" : "Configuració",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Mostra",
35 "menu.edit" : "Edita", 35 "menu.edit" : "Edita",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Copia",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Retalla",
38 "menu.edit.delete" : "Suprimeix", 38 "menu.edit.delete" : "Suprimeix",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji i Símbols",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Enganxa",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Enganxa amb els estils",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Refés",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Selecciona-ho tot",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Pronuncia",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Inicia el dictat",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Inicia la parla",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Atura la parla",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Desfés",
49 "menu.file" : "File", 49 "menu.file" : "Fitxer",
50 "menu.help" : "Help", 50 "menu.help" : "Ajuda",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Registre de canvis",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Conegueu-ne més detalls",
53 "menu.help.privacy" : "Declaració de privacitat", 53 "menu.help.privacy" : "Declaració de privacitat",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Suport",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Condicions del Servei",
56 "menu.services" : "Services", 56 "menu.services" : "Serveis",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Afegeix un servei...",
58 "menu.view" : "View", 58 "menu.view" : "Visualitza",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Inicia la pantalla completa",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Surt de pantalla completa",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Torna a carregar Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Torna a carregar el servei",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Mida real",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Activa serveis per a desenvolupadors",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Activa la pantalla completa",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Habilita les eines de desenvolupador de serveis",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Amplia",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Redueix",
69 "menu.window" : "Window", 69 "menu.window" : "Finestra",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Tanca",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Minimitza",
72 "password.email.label" : "Correu electrònic", 72 "password.email.label" : "Correu electrònic",
73 "password.headline" : "Restablir contrasenya", 73 "password.headline" : "Restablir contrasenya",
74 "password.link.login" : "Inicia la sessió al teu compte", 74 "password.link.login" : "Inicia la sessió al teu compte",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Obrir en segon plà", 116 "settings.app.form.autoLaunchInBackground" : "Obrir en segon plà",
117 "settings.app.form.autoLaunchOnStart" : "Iniciar Franz a l'inici", 117 "settings.app.form.autoLaunchOnStart" : "Iniciar Franz a l'inici",
118 "settings.app.form.beta" : "Inclou versions beta", 118 "settings.app.form.beta" : "Inclou versions beta",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Mostra Franz a la barra de menú", 120 "settings.app.form.enableMenuBar" : "Mostra Franz a la barra de menú",
120 "settings.app.form.enableSpellchecking" : "Habilita la comprobació ortogràfica", 121 "settings.app.form.enableSpellchecking" : "Habilita la comprobació ortogràfica",
121 "settings.app.form.enableSystemTray" : "Mostra Franz a la safata del sistema", 122 "settings.app.form.enableSystemTray" : "Mostra Franz a la safata del sistema",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Activa les notificacions", 241 "tabs.item.enableNotification" : "Activa les notificacions",
241 "tabs.item.enableService" : "Activa el servei", 242 "tabs.item.enableService" : "Activa el servei",
242 "tabs.item.reload" : "Recarrega", 243 "tabs.item.reload" : "Recarrega",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "{field} no es vàlid",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{field} ha de ser al menys {length} caràcters de llargada",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{field} es requerit",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{field} es una URL no vàlida",
247 "welcome.loginButton" : "Inicia sessió al teu compte", 248 "welcome.loginButton" : "Inicia sessió al teu compte",
248 "welcome.signupButton" : "Crea un compte gratuït", 249 "welcome.signupButton" : "Crea un compte gratuït",
249 "welcome.slogan" : "Crea un compte gratuït" 250 "welcome.slogan" : "Crea un compte gratuït"
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json
index b4142b928..ed4c7a468 100644
--- a/src/i18n/locales/cs.json
+++ b/src/i18n/locales/cs.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "Sezení vypršelo, je třeba se znovu přihlásit.", 26 "login.serverLogout" : "Sezení vypršelo, je třeba se znovu přihlásit.",
27 "login.submit.label" : "Přihlásit se", 27 "login.submit.label" : "Přihlásit se",
28 "login.tokenExpired" : "Sezení vypršelo, prosím přihlaste se znovu", 28 "login.tokenExpired" : "Sezení vypršelo, prosím přihlaste se znovu",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "O aplikaci",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Skrýt",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Skryt ostatní",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "UkonÄit",
33 "menu.app.settings" : "Nastavení", 33 "menu.app.settings" : "Nastavení",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Odkrýt",
35 "menu.edit" : "Upravit", 35 "menu.edit" : "Upravit",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Kopírovat",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Vyjmout",
38 "menu.edit.delete" : "Smazat", 38 "menu.edit.delete" : "Smazat",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji a znaky",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Vložit",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Vložit vÄetnÄ› formátování",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Vpřed",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Vybrat vše",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Mluvené slovo",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "ZaÄít diktovat",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "ZaÄít mluvit",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Přestat mluvit",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Vrátit zpět",
49 "menu.file" : "File", 49 "menu.file" : "Soubor",
50 "menu.help" : "Help", 50 "menu.help" : "Nápověda",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Seznam změn",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Dozvědět se více",
53 "menu.help.privacy" : "Prohlášení o ochraně soukromí", 53 "menu.help.privacy" : "Prohlášení o ochraně soukromí",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Podpora",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Podmínky použití",
56 "menu.services" : "Services", 56 "menu.services" : "Služby",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Přidat novou službu...",
58 "menu.view" : "View", 58 "menu.view" : "Zobrazení",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Spustit režim celé obrazovky",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "UkonÄit celoobrazovkový režim",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Obnovit Franze",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Obnovit službu",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "SkuteÄná velikost",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Zobrazit Vývojářské nástroje",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Přepnout na celou obrazovku",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Zobrazit Vývojářské nástroje pro službu",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Přiblížit",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Oddálit",
69 "menu.window" : "Window", 69 "menu.window" : "Okno",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Zavřít",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Minimalizovat",
72 "password.email.label" : "E-mailová adresa", 72 "password.email.label" : "E-mailová adresa",
73 "password.headline" : "Obnovit heslo", 73 "password.headline" : "Obnovit heslo",
74 "password.link.login" : "PÅ™ihlásit se k úÄtu", 74 "password.link.login" : "PÅ™ihlásit se k úÄtu",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Spustit na pozadí", 116 "settings.app.form.autoLaunchInBackground" : "Spustit na pozadí",
117 "settings.app.form.autoLaunchOnStart" : "Spustit Franz při startu", 117 "settings.app.form.autoLaunchOnStart" : "Spustit Franz při startu",
118 "settings.app.form.beta" : "Zahrnout beta verze", 118 "settings.app.form.beta" : "Zahrnout beta verze",
119 "settings.app.form.enableGPUAcceleration" : "Aktivovat GPU zrychlení",
119 "settings.app.form.enableMenuBar" : "Zobraz Franz v Menu nabídce", 120 "settings.app.form.enableMenuBar" : "Zobraz Franz v Menu nabídce",
120 "settings.app.form.enableSpellchecking" : "Zapnout kontrolu pravopisu", 121 "settings.app.form.enableSpellchecking" : "Zapnout kontrolu pravopisu",
121 "settings.app.form.enableSystemTray" : "Zobrazit Franz v systémové liště", 122 "settings.app.form.enableSystemTray" : "Zobrazit Franz v systémové liště",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Povolit oznamování", 241 "tabs.item.enableNotification" : "Povolit oznamování",
241 "tabs.item.enableService" : "Zapnout službu", 242 "tabs.item.enableService" : "Zapnout službu",
242 "tabs.item.reload" : "Obnovit", 243 "tabs.item.reload" : "Obnovit",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "{field} není validní",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{field} musí být alespoň {length} znaků dlouhé",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{field} je povinné",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{field} není validní URL",
247 "welcome.loginButton" : "PÅ™ihlášení do vaÅ¡eho úÄtu", 248 "welcome.loginButton" : "PÅ™ihlášení do vaÅ¡eho úÄtu",
248 "welcome.signupButton" : "VytvoÅ™it úÄet zdarma", 249 "welcome.signupButton" : "VytvoÅ™it úÄet zdarma",
249 "welcome.slogan" : "Zprávy, které pracují pro vás" 250 "welcome.slogan" : "Zprávy, které pracují pro vás"
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
index 9aaef0465..fa61d26d4 100644
--- a/src/i18n/locales/de.json
+++ b/src/i18n/locales/de.json
@@ -6,7 +6,7 @@
6 "import.skip.label" : "Ich möchte Dienste selbst hinzufügen", 6 "import.skip.label" : "Ich möchte Dienste selbst hinzufügen",
7 "import.submit.label" : "Dienste importieren", 7 "import.submit.label" : "Dienste importieren",
8 "infobar.buttonChangelog" : "Was gibt es neues?", 8 "infobar.buttonChangelog" : "Was gibt es neues?",
9 "infobar.buttonInstallUpdate" : "Neustarten & Update installieren", 9 "infobar.buttonInstallUpdate" : "Neu starten & Update installieren",
10 "infobar.buttonReloadServices" : "Dienste neuladen", 10 "infobar.buttonReloadServices" : "Dienste neuladen",
11 "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden", 11 "infobar.requiredRequestsFailed" : "Dienste und Benutzerinformationen konnten nicht geladen werden",
12 "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.", 12 "infobar.servicesUpdated" : "Deine Dienste wurden aktualisiert.",
@@ -109,13 +109,14 @@
109 "settings.account.tryReloadUserInfoRequest" : "Erneut versuchen", 109 "settings.account.tryReloadUserInfoRequest" : "Erneut versuchen",
110 "settings.account.userInfoRequestFailed" : "Benutzerinformationen konnten nicht geladen werden", 110 "settings.account.userInfoRequestFailed" : "Benutzerinformationen konnten nicht geladen werden",
111 "settings.app.buttonClearAllCache" : "Cache leeren", 111 "settings.app.buttonClearAllCache" : "Cache leeren",
112 "settings.app.buttonInstallUpdate" : "Neustarten & Update installieren", 112 "settings.app.buttonInstallUpdate" : "Neu starten & Update installieren",
113 "settings.app.buttonSearchForUpdate" : "Nach Updates suchen", 113 "settings.app.buttonSearchForUpdate" : "Nach Updates suchen",
114 "settings.app.cacheInfo" : "Der Franz Cache belegt derzeit {size}.", 114 "settings.app.cacheInfo" : "Der Franz Cache belegt derzeit {size}.",
115 "settings.app.currentVersion" : "Aktuelle Version:", 115 "settings.app.currentVersion" : "Aktuelle Version:",
116 "settings.app.form.autoLaunchInBackground" : "Im Hintergrund öffnen", 116 "settings.app.form.autoLaunchInBackground" : "Im Hintergrund öffnen",
117 "settings.app.form.autoLaunchOnStart" : "Franz beim Systemstart ausführen", 117 "settings.app.form.autoLaunchOnStart" : "Franz beim Systemstart ausführen",
118 "settings.app.form.beta" : "Beta-Versionen einbeziehen", 118 "settings.app.form.beta" : "Beta-Versionen einbeziehen",
119 "settings.app.form.enableGPUAcceleration" : "Hardwarebeschleunigung aktivieren",
119 "settings.app.form.enableMenuBar" : "Franz in Menüleiste anzeigen", 120 "settings.app.form.enableMenuBar" : "Franz in Menüleiste anzeigen",
120 "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren", 121 "settings.app.form.enableSpellchecking" : "Rechtschreibprüfung aktivieren",
121 "settings.app.form.enableSystemTray" : "Franz in der Systemleiste anzeigen", 122 "settings.app.form.enableSystemTray" : "Franz in der Systemleiste anzeigen",
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json
index ae37d1f5e..7361d29b7 100644
--- a/src/i18n/locales/el.json
+++ b/src/i18n/locales/el.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Άνοιγμα στο παÏασκήνιο", 116 "settings.app.form.autoLaunchInBackground" : "Άνοιγμα στο παÏασκήνιο",
117 "settings.app.form.autoLaunchOnStart" : "Εκκίνηση του Franz κατά την εκκίνηση του συστήματος", 117 "settings.app.form.autoLaunchOnStart" : "Εκκίνηση του Franz κατά την εκκίνηση του συστήματος",
118 "settings.app.form.beta" : "ΣυμπεÏιλάβετε εκδόσεις beta", 118 "settings.app.form.beta" : "ΣυμπεÏιλάβετε εκδόσεις beta",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", 120 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar",
120 "settings.app.form.enableSpellchecking" : "ΕνεÏγοποίηση οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï…", 121 "settings.app.form.enableSpellchecking" : "ΕνεÏγοποίηση οÏθογÏÎ±Ï†Î¹ÎºÎ¿Ï ÎµÎ»Î­Î³Ï‡Î¿Ï…",
121 "settings.app.form.enableSystemTray" : "Εμφάνιση του Franz στη γÏαμμή ειδοποιήσεων", 122 "settings.app.form.enableSystemTray" : "Εμφάνιση του Franz στη γÏαμμή ειδοποιήσεων",
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 400a9a5d8..0c62da44a 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -164,6 +164,7 @@
164 "settings.app.form.runInBackground": "Keep Franz in background when closing the window", 164 "settings.app.form.runInBackground": "Keep Franz in background when closing the window",
165 "settings.app.form.language": "Language", 165 "settings.app.form.language": "Language",
166 "settings.app.form.enableSpellchecking": "Enable spell checking", 166 "settings.app.form.enableSpellchecking": "Enable spell checking",
167 "settings.app.form.enableGPUAcceleration": "Enable GPU Acceleration",
167 "settings.app.form.showDisabledServices": "Display disabled services tabs", 168 "settings.app.form.showDisabledServices": "Display disabled services tabs",
168 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 169 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
169 "settings.app.form.beta": "Include beta versions", 170 "settings.app.form.beta": "Include beta versions",
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
index 640f87c20..75047a613 100644
--- a/src/i18n/locales/es.json
+++ b/src/i18n/locales/es.json
@@ -1,6 +1,6 @@
1{ 1{
2 "global.api.unhealthy" : "No se puede conectar a los servicios en línea de Franz.", 2 "global.api.unhealthy" : "No se puede conectar a los servicios en línea de Franz",
3 "global.notConnectedToTheInternet" : "No está conectado a Internet", 3 "global.notConnectedToTheInternet" : "No está conectado a Internet.",
4 "import.headline" : "Importa tus servicios de Franz 4", 4 "import.headline" : "Importa tus servicios de Franz 4",
5 "import.notSupportedHeadline" : "Servicios no soportados aún en Franz 5", 5 "import.notSupportedHeadline" : "Servicios no soportados aún en Franz 5",
6 "import.skip.label" : "Quiero agregar servicios manualmente", 6 "import.skip.label" : "Quiero agregar servicios manualmente",
@@ -12,11 +12,11 @@
12 "infobar.servicesUpdated" : "Tus servicios han sido actualizados.", 12 "infobar.servicesUpdated" : "Tus servicios han sido actualizados.",
13 "infobar.updateAvailable" : "Una nueva actualización de Franz está disponible", 13 "infobar.updateAvailable" : "Una nueva actualización de Franz está disponible",
14 "invite.email.label" : "Dirección de correo electrónico", 14 "invite.email.label" : "Dirección de correo electrónico",
15 "invite.headline.friends" : "Invita a 3 de tus amigos o colegas", 15 "invite.headline.friends" : "Invita a 3 de tus amigos o compañeros",
16 "invite.name.label" : "Nombre", 16 "invite.name.label" : "Nombre",
17 "invite.skip.label" : "Quiero hacer esto después", 17 "invite.skip.label" : "Quiero hacer esto después",
18 "invite.submit.label" : "Enviar invitaciones", 18 "invite.submit.label" : "Enviar invitaciones",
19 "invite.successInfo" : "Invitaciones enviadas", 19 "invite.successInfo" : "Invitaciones enviadas correctamente",
20 "login.email.label" : "Dirección de correo electrónico", 20 "login.email.label" : "Dirección de correo electrónico",
21 "login.headline" : "Iniciar sesión", 21 "login.headline" : "Iniciar sesión",
22 "login.invalidCredentials" : "Correo electrónico o contraseña no válidos ", 22 "login.invalidCredentials" : "Correo electrónico o contraseña no válidos ",
@@ -25,50 +25,50 @@
25 "login.password.label" : "Contraseña", 25 "login.password.label" : "Contraseña",
26 "login.serverLogout" : "Tu sesión ha expirado, por favor inicia la sesión de nuevo.", 26 "login.serverLogout" : "Tu sesión ha expirado, por favor inicia la sesión de nuevo.",
27 "login.submit.label" : "Iniciar sesión", 27 "login.submit.label" : "Iniciar sesión",
28 "login.tokenExpired" : "Tu sesión expiró, por favor la inicia sesión nuevamente.", 28 "login.tokenExpired" : "Tu sesión expiró, por favor inicia sesión otra vez.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Sobre Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Ocultar",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Ocultar otros",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Salir",
33 "menu.app.settings" : "Configuración", 33 "menu.app.settings" : "Configuración",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Mostrar",
35 "menu.edit" : "Editar", 35 "menu.edit" : "Editar",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Copiar",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Cortar",
38 "menu.edit.delete" : "Borrar", 38 "menu.edit.delete" : "Borrar",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji y Símbolos",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Pegar",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Pegar con el mismo estilo",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Rehacer",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Seleccionar todo",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Leer",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Empezar dictado",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Empezar lectura",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Detener lectura",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Deshacer",
49 "menu.file" : "File", 49 "menu.file" : "Archivo",
50 "menu.help" : "Help", 50 "menu.help" : "Ayuda",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Registro de cambios",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Conocer más",
53 "menu.help.privacy" : "Declaración de privacidad", 53 "menu.help.privacy" : "Declaración de privacidad",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Soporte",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Términos del Servicio",
56 "menu.services" : "Services", 56 "menu.services" : "Servicios",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Añadir Nuevo Servicio...",
58 "menu.view" : "View", 58 "menu.view" : "Mostrar",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Entrar a Pantalla Completa",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Salir de Pantalla Completa",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Recargar Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Recargar Servicio",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Tamaño Actual",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Activar las Herramientas para Desarrolladores",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Cambiar a Pantalla Completa",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Mostrar Herramientas de Servicios para Desarrolladores",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Ampliar",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Reducir",
69 "menu.window" : "Window", 69 "menu.window" : "Ventana",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Cerrar",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Minimizar",
72 "password.email.label" : "Dirección de correo electrónico", 72 "password.email.label" : "Dirección de correo electrónico",
73 "password.headline" : "Restablecer contraseña", 73 "password.headline" : "Restablecer contraseña",
74 "password.link.login" : "Iniciar sesión en tu cuenta", 74 "password.link.login" : "Iniciar sesión en tu cuenta",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Abrir en segundo plano", 116 "settings.app.form.autoLaunchInBackground" : "Abrir en segundo plano",
117 "settings.app.form.autoLaunchOnStart" : "Iniciar Franz al iniciar", 117 "settings.app.form.autoLaunchOnStart" : "Iniciar Franz al iniciar",
118 "settings.app.form.beta" : "Incluir versiones beta", 118 "settings.app.form.beta" : "Incluir versiones beta",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "mostrar a franz en La barra de menús", 120 "settings.app.form.enableMenuBar" : "mostrar a franz en La barra de menús",
120 "settings.app.form.enableSpellchecking" : "Activar corrección ortográfica", 121 "settings.app.form.enableSpellchecking" : "Activar corrección ortográfica",
121 "settings.app.form.enableSystemTray" : "Mostrar Franz en la bandeja del sistema", 122 "settings.app.form.enableSystemTray" : "Mostrar Franz en la bandeja del sistema",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Activar notificaciones", 241 "tabs.item.enableNotification" : "Activar notificaciones",
241 "tabs.item.enableService" : "Activar servicio", 242 "tabs.item.enableService" : "Activar servicio",
242 "tabs.item.reload" : "Recargar", 243 "tabs.item.reload" : "Recargar",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "{field} no es válido",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{field} debería tener al menos {length} caracteres",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{field} es obligatorio",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{field} no es una URL válida",
247 "welcome.loginButton" : "Accede a tu cuenta", 248 "welcome.loginButton" : "Accede a tu cuenta",
248 "welcome.signupButton" : "Crear una cuenta gratuita", 249 "welcome.signupButton" : "Crear una cuenta gratuita",
249 "welcome.slogan" : "Mensajería que funciona para ti" 250 "welcome.slogan" : "Mensajería que funciona para ti"
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index a40a60833..e00a5671b 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "Votre session a expiré. Reconnectez-vous s'il vous plaît.", 26 "login.serverLogout" : "Votre session a expiré. Reconnectez-vous s'il vous plaît.",
27 "login.submit.label" : "Connexion", 27 "login.submit.label" : "Connexion",
28 "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.", 28 "login.tokenExpired" : "Votre session a expiré, veuillez vous reconnecter.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "À propos de Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Masquer",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Masquer les autres",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Quitter",
33 "menu.app.settings" : "Paramètres", 33 "menu.app.settings" : "Paramètres",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Afficher",
35 "menu.edit" : "Éditer", 35 "menu.edit" : "Éditer",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Copier",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Couper",
38 "menu.edit.delete" : "Supprimer", 38 "menu.edit.delete" : "Supprimer",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji & Symboles",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Coller",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Coller et fusionner le style",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Rétablir",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Tout sélectionner",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Synthèse vocale",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Démarrer la synthèse vocale",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Démarrer la lecture",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Arrêter la synthèse vocale",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Annuler",
49 "menu.file" : "File", 49 "menu.file" : "Fichier",
50 "menu.help" : "Help", 50 "menu.help" : "Aide",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Liste des modifications",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "En savoir plus",
53 "menu.help.privacy" : "Déclaration de confidentialité", 53 "menu.help.privacy" : "Déclaration de confidentialité",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Support",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Conditions d'utilisation",
56 "menu.services" : "Services", 56 "menu.services" : "Services",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Ajouter un nouveau service...",
58 "menu.view" : "View", 58 "menu.view" : "Affichage",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Entrer en mode plein écran",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Sortir du mode plein écran",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Actualiser Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Redémarrer le service",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Taille réelle",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Activer les outils développeur",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Activer \/ désactiver le mode plein écran",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Activer les outils de développement WebKit",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Zoom Avant",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Zoom Arrière",
69 "menu.window" : "Window", 69 "menu.window" : "Fenêtre",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Fermer",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Réduire",
72 "password.email.label" : "Adresse e-mail", 72 "password.email.label" : "Adresse e-mail",
73 "password.headline" : "Réinitialiser le mot de passe", 73 "password.headline" : "Réinitialiser le mot de passe",
74 "password.link.login" : "Connectez-vous à votre compte", 74 "password.link.login" : "Connectez-vous à votre compte",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Ouvrir en arrière-plan", 116 "settings.app.form.autoLaunchInBackground" : "Ouvrir en arrière-plan",
117 "settings.app.form.autoLaunchOnStart" : "Lancer Franz au démarrage", 117 "settings.app.form.autoLaunchOnStart" : "Lancer Franz au démarrage",
118 "settings.app.form.beta" : "Accepter les versions bêta", 118 "settings.app.form.beta" : "Accepter les versions bêta",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Afficher Franz dans la barre des menus", 120 "settings.app.form.enableMenuBar" : "Afficher Franz dans la barre des menus",
120 "settings.app.form.enableSpellchecking" : "Activer la vérification orthographique", 121 "settings.app.form.enableSpellchecking" : "Activer la vérification orthographique",
121 "settings.app.form.enableSystemTray" : "Afficher Franz dans la barre d'état système", 122 "settings.app.form.enableSystemTray" : "Afficher Franz dans la barre d'état système",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Activer les notifications", 241 "tabs.item.enableNotification" : "Activer les notifications",
241 "tabs.item.enableService" : "Activer le service", 242 "tabs.item.enableService" : "Activer le service",
242 "tabs.item.reload" : "Recharger", 243 "tabs.item.reload" : "Recharger",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "{field} n'est pas valide",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{field} doit contenir au moins {length} caractère(s)",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{field} est requis",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{field} n'est pas une URL valide",
247 "welcome.loginButton" : "Se connecter sur son compte", 248 "welcome.loginButton" : "Se connecter sur son compte",
248 "welcome.signupButton" : "Créer un compte gratuit", 249 "welcome.signupButton" : "Créer un compte gratuit",
249 "welcome.slogan" : "Une messagerie qui fonctionne pour vous" 250 "welcome.slogan" : "Une messagerie qui fonctionne pour vous"
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json
index 80aeb0a1b..1c0b537b2 100644
--- a/src/i18n/locales/ga.json
+++ b/src/i18n/locales/ga.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "D'éag do sheisiún, logáil isteach arís le do thoil.", 26 "login.serverLogout" : "D'éag do sheisiún, logáil isteach arís le do thoil.",
27 "login.submit.label" : "Logáil isteach", 27 "login.submit.label" : "Logáil isteach",
28 "login.tokenExpired" : "D'éag do sheisiún, logáil isteach arís le do thoil.", 28 "login.tokenExpired" : "D'éag do sheisiún, logáil isteach arís le do thoil.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Faoi Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Cuir Franz i bhfolach",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Folaigh feidhmchláir eile",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Scoir",
33 "menu.app.settings" : "Socruithe", 33 "menu.app.settings" : "Socruithe",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Taispeáin",
35 "menu.edit" : "Cuir in eagar", 35 "menu.edit" : "Cuir in eagar",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Cóipeáil",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Gearr",
38 "menu.edit.delete" : "Scrios", 38 "menu.edit.delete" : "Scrios",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Straoiseoga ⊠siombailí",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Greamaigh",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Greamaigh agus cuir stíl in oiriúint",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Athdhéan",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Roghnaigh gach rud",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Caint",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Tosaigh deachtú",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Tosaigh ag caint",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Stad ag caint",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Cealaigh",
49 "menu.file" : "File", 49 "menu.file" : "Comhad",
50 "menu.help" : "Help", 50 "menu.help" : "Cabhair",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Athruithe",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Tuilleadh eolais",
53 "menu.help.privacy" : "Ráiteas phríobháideachais", 53 "menu.help.privacy" : "Ráiteas phríobháideachais",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Tacaíocht",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Téarmaí tagartha",
56 "menu.services" : "Services", 56 "menu.services" : "Seirbhísí",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Cuir seirbhís nua leis",
58 "menu.view" : "View", 58 "menu.view" : "Amharc",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Cuir isteach mód lánscáileáin",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Scoir mód lánscáileáin",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Athlódáil Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Athlódáil seirbhís",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Fíormhéid",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Scoránaigh uirlis forbróra",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Scoránaigh mód lánscáileáin",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Scoránaigh uirlis forbróra seirbhíse",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Zúmáil isteach",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Zúmáil amach",
69 "menu.window" : "Window", 69 "menu.window" : "Fuinneog",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Dún",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Ãoslaghdaigh",
72 "password.email.label" : "Seoladh ríomhphoist", 72 "password.email.label" : "Seoladh ríomhphoist",
73 "password.headline" : "Athshocraigh pasfhocal", 73 "password.headline" : "Athshocraigh pasfhocal",
74 "password.link.login" : "Logáil isteach i do chuntas", 74 "password.link.login" : "Logáil isteach i do chuntas",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Oscail sa chúlra", 116 "settings.app.form.autoLaunchInBackground" : "Oscail sa chúlra",
117 "settings.app.form.autoLaunchOnStart" : "Láinseáil Franz ón tús", 117 "settings.app.form.autoLaunchOnStart" : "Láinseáil Franz ón tús",
118 "settings.app.form.beta" : "Cuir leagain béite san áireamh", 118 "settings.app.form.beta" : "Cuir leagain béite san áireamh",
119 "settings.app.form.enableGPUAcceleration" : "Cumasaigh luasghéarú APG",
119 "settings.app.form.enableMenuBar" : "Taispeáin Franz sa bharra roghchláir", 120 "settings.app.form.enableMenuBar" : "Taispeáin Franz sa bharra roghchláir",
120 "settings.app.form.enableSpellchecking" : "Cumasaigh seiceáil litrithe", 121 "settings.app.form.enableSpellchecking" : "Cumasaigh seiceáil litrithe",
121 "settings.app.form.enableSystemTray" : "Taispeáin Franz i dtráidire an chórais", 122 "settings.app.form.enableSystemTray" : "Taispeáin Franz i dtráidire an chórais",
@@ -211,7 +212,7 @@
211 "signup.headline" : "Cláraigh", 212 "signup.headline" : "Cláraigh",
212 "signup.lastname.label" : "Sloinne", 213 "signup.lastname.label" : "Sloinne",
213 "signup.legal.info" : "Agus tú ag cruthú cuntas Franz glacann tú le", 214 "signup.legal.info" : "Agus tú ag cruthú cuntas Franz glacann tú le",
214 "signup.legal.privacy" : "Ráiteas phríobháideachais", 215 "signup.legal.privacy" : "Polasaí príobháideachais",
215 "signup.legal.terms" : "Tearmaí seirbhíse", 216 "signup.legal.terms" : "Tearmaí seirbhíse",
216 "signup.link.login" : "Cuntas agat cheana féin, logáil isteach?", 217 "signup.link.login" : "Cuntas agat cheana féin, logáil isteach?",
217 "signup.password.label" : "Pasfhocal", 218 "signup.password.label" : "Pasfhocal",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Cumasaigh fógraí", 241 "tabs.item.enableNotification" : "Cumasaigh fógraí",
241 "tabs.item.enableService" : "Cumasaigh seirbhís", 242 "tabs.item.enableService" : "Cumasaigh seirbhís",
242 "tabs.item.reload" : "Athlódáil", 243 "tabs.item.reload" : "Athlódáil",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "Níl {field} neamhbhailí",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "Ba cheart go mbeadh {field} ar a laghad {length} charactar fada",
245 "validation.required" : "{field} is required", 246 "validation.required" : "Tá {field} de dhíth",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "Ní AAA bhailí é {field}",
247 "welcome.loginButton" : "Logáil isteach i do chuntas", 248 "welcome.loginButton" : "Logáil isteach i do chuntas",
248 "welcome.signupButton" : "Cruthaigh cuntas nua", 249 "welcome.signupButton" : "Cruthaigh cuntas nua",
249 "welcome.slogan" : "Teachtaireachtaí a oibríonn duitse" 250 "welcome.slogan" : "Teachtaireachtaí a oibríonn duitse"
diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json
index 72930f686..e227c4537 100644
--- a/src/i18n/locales/hr.json
+++ b/src/i18n/locales/hr.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini", 116 "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini",
117 "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom", 117 "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom",
118 "settings.app.form.beta" : "Obuhvati i beta verzije", 118 "settings.app.form.beta" : "Obuhvati i beta verzije",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Prikaži Franz u traci izbornika", 120 "settings.app.form.enableMenuBar" : "Prikaži Franz u traci izbornika",
120 "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", 121 "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa",
121 "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", 122 "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci",
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json
index 308559f3b..3571ad453 100644
--- a/src/i18n/locales/hu.json
+++ b/src/i18n/locales/hu.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Megnyitás háttérben", 116 "settings.app.form.autoLaunchInBackground" : "Megnyitás háttérben",
117 "settings.app.form.autoLaunchOnStart" : "Franz betöltése indításkor", 117 "settings.app.form.autoLaunchOnStart" : "Franz betöltése indításkor",
118 "settings.app.form.beta" : "Béta verziók keresése", 118 "settings.app.form.beta" : "Béta verziók keresése",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", 120 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar",
120 "settings.app.form.enableSpellchecking" : "Helyesírás-ellenőrzés engedélyezése", 121 "settings.app.form.enableSpellchecking" : "Helyesírás-ellenőrzés engedélyezése",
121 "settings.app.form.enableSystemTray" : "Franz mutatása a tálcán", 122 "settings.app.form.enableSystemTray" : "Franz mutatása a tálcán",
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json
index 51820150f..e6d671c1b 100644
--- a/src/i18n/locales/id.json
+++ b/src/i18n/locales/id.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Buka di latar belakang", 116 "settings.app.form.autoLaunchInBackground" : "Buka di latar belakang",
117 "settings.app.form.autoLaunchOnStart" : "Jalankan Franz saat komputer dimulai", 117 "settings.app.form.autoLaunchOnStart" : "Jalankan Franz saat komputer dimulai",
118 "settings.app.form.beta" : "Sertakan versi beta", 118 "settings.app.form.beta" : "Sertakan versi beta",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Tampilkan Franz di Bilah Menu", 120 "settings.app.form.enableMenuBar" : "Tampilkan Franz di Bilah Menu",
120 "settings.app.form.enableSpellchecking" : "Aktifkan pemeriksaan ejaan", 121 "settings.app.form.enableSpellchecking" : "Aktifkan pemeriksaan ejaan",
121 "settings.app.form.enableSystemTray" : "Tampilkan Franz di baki sistem", 122 "settings.app.form.enableSystemTray" : "Tampilkan Franz di baki sistem",
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json
index c45587c87..9d23a309b 100644
--- a/src/i18n/locales/it.json
+++ b/src/i18n/locales/it.json
@@ -6,7 +6,7 @@
6 "import.skip.label" : "Voglio aggiungere servizi manualmente", 6 "import.skip.label" : "Voglio aggiungere servizi manualmente",
7 "import.submit.label" : "Importa servizi", 7 "import.submit.label" : "Importa servizi",
8 "infobar.buttonChangelog" : "Cosa c'è di nuovo?", 8 "infobar.buttonChangelog" : "Cosa c'è di nuovo?",
9 "infobar.buttonInstallUpdate" : "Riavvia e installa gli aggiornamenti", 9 "infobar.buttonInstallUpdate" : "Riavvia e installa aggiornamento",
10 "infobar.buttonReloadServices" : "Ricarica servizi", 10 "infobar.buttonReloadServices" : "Ricarica servizi",
11 "infobar.requiredRequestsFailed" : "Impossibile caricare servizi e info utente", 11 "infobar.requiredRequestsFailed" : "Impossibile caricare servizi e info utente",
12 "infobar.servicesUpdated" : "I tuoi servizi sono stati aggiornati.", 12 "infobar.servicesUpdated" : "I tuoi servizi sono stati aggiornati.",
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "La tua sessione è scaduta, accedi nuovamente.", 26 "login.serverLogout" : "La tua sessione è scaduta, accedi nuovamente.",
27 "login.submit.label" : "Accedi", 27 "login.submit.label" : "Accedi",
28 "login.tokenExpired" : "La tua sessione è scaduta, accedi nuovamente.", 28 "login.tokenExpired" : "La tua sessione è scaduta, accedi nuovamente.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Info su Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Nascondi",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Nascondi Altri",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Esci",
33 "menu.app.settings" : "Impostazioni", 33 "menu.app.settings" : "Impostazioni",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Mostra",
35 "menu.edit" : "Modifica", 35 "menu.edit" : "Modifica",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Copia",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Taglia",
38 "menu.edit.delete" : "Elimina", 38 "menu.edit.delete" : "Elimina",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji e Simboli",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Incolla",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Incolla e Mantieni Stile",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Ripeti",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Seleziona Tutto",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Sintesi Vocale",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Avvia Dettatura",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Avvia Pronuncia",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Interrompi Pronuncia",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Annulla",
49 "menu.file" : "File", 49 "menu.file" : "File",
50 "menu.help" : "Help", 50 "menu.help" : "Aiuto",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Changelog",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Maggiori Informazioni",
53 "menu.help.privacy" : "Informativa sulla Privacy", 53 "menu.help.privacy" : "Informativa sulla Privacy",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Supporto",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Termini di Servizio",
56 "menu.services" : "Services", 56 "menu.services" : "Servizi",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Aggiungi Nuovo Servizio...",
58 "menu.view" : "View", 58 "menu.view" : "Visualizza",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Visualizza a Tutto Schermo",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Modalità Finestra",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Ricarica Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Ricarica Servizio",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Dimensione Attuale",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Attiva Strumenti Sviluppo",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Passa a Schermo Intero",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Attiva Strumenti per Sviluppatori di Servizi",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Aumenta Zoom",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Diminuisci Zoom",
69 "menu.window" : "Window", 69 "menu.window" : "Finestra",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Chiudi",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Minimizza",
72 "password.email.label" : "Indirizzo email", 72 "password.email.label" : "Indirizzo email",
73 "password.headline" : "Reimposta password", 73 "password.headline" : "Reimposta password",
74 "password.link.login" : "Accedi al tuo account", 74 "password.link.login" : "Accedi al tuo account",
@@ -88,7 +88,7 @@
88 "service.disabledHandler.headline" : "{name} è disattivato", 88 "service.disabledHandler.headline" : "{name} è disattivato",
89 "services.getStarted" : "Iniziamo", 89 "services.getStarted" : "Iniziamo",
90 "services.welcome" : "Welcome to Franz", 90 "services.welcome" : "Welcome to Franz",
91 "settings.account.account.editButton" : "Edit account", 91 "settings.account.account.editButton" : "Modifica account",
92 "settings.account.accountType.basic" : "Account Basic", 92 "settings.account.accountType.basic" : "Account Basic",
93 "settings.account.accountType.premium" : "Premium Supporter Account", 93 "settings.account.accountType.premium" : "Premium Supporter Account",
94 "settings.account.buttonSave" : "Aggiorna profilo", 94 "settings.account.buttonSave" : "Aggiorna profilo",
@@ -110,12 +110,13 @@
110 "settings.account.userInfoRequestFailed" : "Impossibile caricare informazioni utente.", 110 "settings.account.userInfoRequestFailed" : "Impossibile caricare informazioni utente.",
111 "settings.app.buttonClearAllCache" : "Svuota la cache", 111 "settings.app.buttonClearAllCache" : "Svuota la cache",
112 "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento", 112 "settings.app.buttonInstallUpdate" : "Riavvia e installa l'aggiornamento",
113 "settings.app.buttonSearchForUpdate" : "Controlla gli aggiornamenti", 113 "settings.app.buttonSearchForUpdate" : "Controlla aggiornamenti",
114 "settings.app.cacheInfo" : "Franz sta utilizzando {size} di spazio su disco.", 114 "settings.app.cacheInfo" : "Franz sta utilizzando {size} di spazio su disco.",
115 "settings.app.currentVersion" : "Versione attuale:", 115 "settings.app.currentVersion" : "Versione attuale:",
116 "settings.app.form.autoLaunchInBackground" : "Apri in background", 116 "settings.app.form.autoLaunchInBackground" : "Apri in background",
117 "settings.app.form.autoLaunchOnStart" : "Esegui Franz all'avvio", 117 "settings.app.form.autoLaunchOnStart" : "Esegui Franz all'avvio",
118 "settings.app.form.beta" : "Includi versioni beta", 118 "settings.app.form.beta" : "Includi versioni beta",
119 "settings.app.form.enableGPUAcceleration" : "Attiva Accelerazione GPU",
119 "settings.app.form.enableMenuBar" : "Mostra Franz nella Barra del Menu", 120 "settings.app.form.enableMenuBar" : "Mostra Franz nella Barra del Menu",
120 "settings.app.form.enableSpellchecking" : "Attiva controllo ortografico", 121 "settings.app.form.enableSpellchecking" : "Attiva controllo ortografico",
121 "settings.app.form.enableSystemTray" : "Mostra Franz nell'area di notifica", 122 "settings.app.form.enableSystemTray" : "Mostra Franz nell'area di notifica",
@@ -201,9 +202,9 @@
201 "settings.user.form.lastname" : "Cognome", 202 "settings.user.form.lastname" : "Cognome",
202 "settings.user.form.newPassword" : "Nuova password", 203 "settings.user.form.newPassword" : "Nuova password",
203 "sidebar.addNewService" : "Aggiungi un nuovo servizio", 204 "sidebar.addNewService" : "Aggiungi un nuovo servizio",
204 "sidebar.muteApp" : "Disattiva notifiche & audio", 205 "sidebar.muteApp" : "Disattiva notifiche e audio",
205 "sidebar.settings" : "Impostazioni", 206 "sidebar.settings" : "Impostazioni",
206 "sidebar.unmuteApp" : "Attiva notifiche & audio", 207 "sidebar.unmuteApp" : "Attiva notifiche e audio",
207 "signup.company.label" : "Società", 208 "signup.company.label" : "Società",
208 "signup.email.label" : "Indirizzo email", 209 "signup.email.label" : "Indirizzo email",
209 "signup.emailDuplicate" : "Esiste già un utente con lo stesso indirizzo email", 210 "signup.emailDuplicate" : "Esiste già un utente con lo stesso indirizzo email",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Attiva notifiche", 241 "tabs.item.enableNotification" : "Attiva notifiche",
241 "tabs.item.enableService" : "Attiva servizio", 242 "tabs.item.enableService" : "Attiva servizio",
242 "tabs.item.reload" : "Aggiorna", 243 "tabs.item.reload" : "Aggiorna",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "{field} non valido",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{field} dovrebbe contenere almeno {length} caratteri",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{field} è necessario",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{field} non è un URL valido",
247 "welcome.loginButton" : "Accedi al tuo account", 248 "welcome.loginButton" : "Accedi al tuo account",
248 "welcome.signupButton" : "Crea un account gratuito", 249 "welcome.signupButton" : "Crea un account gratuito",
249 "welcome.slogan" : "Un sistema di messaggistica che funziona" 250 "welcome.slogan" : "Un sistema di messaggistica che funziona"
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index 0634a8fc8..a7af10aba 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ログインã—ç›´ã—ã¦ä¸‹ã•ã„。", 26 "login.serverLogout" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ログインã—ç›´ã—ã¦ä¸‹ã•ã„。",
27 "login.submit.label" : "サインイン", 27 "login.submit.label" : "サインイン",
28 "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ログインã—ç›´ã—ã¦ä¸‹ã•ã„。", 28 "login.tokenExpired" : "セッションã®æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ログインã—ç›´ã—ã¦ä¸‹ã•ã„。",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Franzã«ã¤ã„ã¦",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "éš ã™",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "ä»–ã‚’éš ã™",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "終了",
33 "menu.app.settings" : "設定", 33 "menu.app.settings" : "設定",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "表示ã™ã‚‹",
35 "menu.edit" : "編集", 35 "menu.edit" : "編集",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "コピー",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "切りå–ã‚Š",
38 "menu.edit.delete" : "削除", 38 "menu.edit.delete" : "削除",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "絵文字ã¨ã‚·ãƒ³ãƒœãƒ«",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "貼り付ã‘",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "書å¼ã‚’統一ã—ã¦è²¼ã‚Šä»˜ã‘",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "ã‚„ã‚Šç›´ã—",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "å…¨ã¦é¸æŠž",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "読ã¿ä¸Šã’",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "音声入力を開始",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "読ã¿ä¸Šã’を開始",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "読ã¿ä¸Šã’ã‚’åœæ­¢",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "å…ƒã«æˆ»ã™",
49 "menu.file" : "File", 49 "menu.file" : "ファイル",
50 "menu.help" : "Help", 50 "menu.help" : "ヘルプ",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "更新履歴",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "詳細ã«ã¤ã„ã¦",
53 "menu.help.privacy" : "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦", 53 "menu.help.privacy" : "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "サãƒãƒ¼ãƒˆ",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "サービス利用è¦ç´„",
56 "menu.services" : "Services", 56 "menu.services" : "サービス",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "サービスを追加",
58 "menu.view" : "View", 58 "menu.view" : "表示",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "全画é¢è¡¨ç¤º",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "全画é¢è¡¨ç¤ºã‚’終了ã™ã‚‹",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "å†èµ·å‹•",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "サービスをリロードã™ã‚‹",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "å…ƒã®ã‚µã‚¤ã‚º",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "開発者ツールを切り替ãˆ",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "全画é¢è¡¨ç¤ºã®åˆ‡ã‚Šæ›¿ãˆ",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "サービス開発者ツールを切り替ãˆ",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "表示を拡大ã™ã‚‹",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "表示を縮å°ã™ã‚‹",
69 "menu.window" : "Window", 69 "menu.window" : "ウィンドウ",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "é–‰ã˜ã‚‹",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "最å°åŒ–",
72 "password.email.label" : "メールアドレス", 72 "password.email.label" : "メールアドレス",
73 "password.headline" : "パスワードã®ãƒªã‚»ãƒƒãƒˆ", 73 "password.headline" : "パスワードã®ãƒªã‚»ãƒƒãƒˆ",
74 "password.link.login" : "サインイン", 74 "password.link.login" : "サインイン",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹ã", 116 "settings.app.form.autoLaunchInBackground" : "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹ã",
117 "settings.app.form.autoLaunchOnStart" : "システム起動時ã«Franzã‚’é–‹ã", 117 "settings.app.form.autoLaunchOnStart" : "システム起動時ã«Franzã‚’é–‹ã",
118 "settings.app.form.beta" : "Betaãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹", 118 "settings.app.form.beta" : "Betaãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹",
119 "settings.app.form.enableGPUAcceleration" : "GPUアクセラレーションを有効ã«ã™ã‚‹",
119 "settings.app.form.enableMenuBar" : "メニューãƒãƒ¼ã«Franzを表示ã™ã‚‹", 120 "settings.app.form.enableMenuBar" : "メニューãƒãƒ¼ã«Franzを表示ã™ã‚‹",
120 "settings.app.form.enableSpellchecking" : "スペルãƒã‚§ãƒƒã‚¯ã‚’有効ã«ã™ã‚‹", 121 "settings.app.form.enableSpellchecking" : "スペルãƒã‚§ãƒƒã‚¯ã‚’有効ã«ã™ã‚‹",
121 "settings.app.form.enableSystemTray" : "Franzをシステムトレイã«è¡¨ç¤ºã™ã‚‹", 122 "settings.app.form.enableSystemTray" : "Franzをシステムトレイã«è¡¨ç¤ºã™ã‚‹",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "通知を有効ã«ã™ã‚‹", 241 "tabs.item.enableNotification" : "通知を有効ã«ã™ã‚‹",
241 "tabs.item.enableService" : "サービスを有効ã«ã™ã‚‹", 242 "tabs.item.enableService" : "サービスを有効ã«ã™ã‚‹",
242 "tabs.item.reload" : "å†èª­ã¿è¾¼ã¿", 243 "tabs.item.reload" : "å†èª­ã¿è¾¼ã¿",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "{field}ã¯æ­£ã—ãã‚ã‚Šã¾ã›ã‚“",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{field}ã¯å°‘ãªãã¨ã‚‚{length}文字以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{field}ã¯å¿…é ˆã§ã™",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{field}ã¯æ­£ã—ã„URLã§ã¯ã‚ã‚Šã¾ã›ã‚“",
247 "welcome.loginButton" : "アカウントã«ãƒ­ã‚°ã‚¤ãƒ³", 248 "welcome.loginButton" : "アカウントã«ãƒ­ã‚°ã‚¤ãƒ³",
248 "welcome.signupButton" : "無料アカウントを作æˆ", 249 "welcome.signupButton" : "無料アカウントを作æˆ",
249 "welcome.slogan" : "Messaging that works for you" 250 "welcome.slogan" : "Messaging that works for you"
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json
index 8eb0fff56..7679bc6fc 100644
--- a/src/i18n/locales/ka.json
+++ b/src/i18n/locales/ka.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "გáƒáƒ®áƒ¡áƒ”ნით ფáƒáƒœáƒ–ე", 116 "settings.app.form.autoLaunchInBackground" : "გáƒáƒ®áƒ¡áƒ”ნით ფáƒáƒœáƒ–ე",
117 "settings.app.form.autoLaunchOnStart" : "გáƒáƒ”შვáƒáƒ¡ Franz სისტემის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვისáƒáƒ¡", 117 "settings.app.form.autoLaunchOnStart" : "გáƒáƒ”შვáƒáƒ¡ Franz სისტემის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვისáƒáƒ¡",
118 "settings.app.form.beta" : "ჩáƒáƒ áƒ—ეთ ბეტრვერსიები", 118 "settings.app.form.beta" : "ჩáƒáƒ áƒ—ეთ ბეტრვერსიები",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", 120 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar",
120 "settings.app.form.enableSpellchecking" : "Enable spell checking", 121 "settings.app.form.enableSpellchecking" : "Enable spell checking",
121 "settings.app.form.enableSystemTray" : "áƒáƒ©áƒ•áƒ”ნეთ Franz სისტემის უჯრáƒáƒ¨áƒ˜", 122 "settings.app.form.enableSystemTray" : "áƒáƒ©áƒ•áƒ”ნეთ Franz სისტემის უჯრáƒáƒ¨áƒ˜",
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
index fe0135a14..13dc7548e 100644
--- a/src/i18n/locales/nl-BE.json
+++ b/src/i18n/locales/nl-BE.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", 116 "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond",
117 "settings.app.form.autoLaunchOnStart" : "Lanceer Franz bij opstarten", 117 "settings.app.form.autoLaunchOnStart" : "Lanceer Franz bij opstarten",
118 "settings.app.form.beta" : "Inclusief bèta versies", 118 "settings.app.form.beta" : "Inclusief bèta versies",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", 120 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar",
120 "settings.app.form.enableSpellchecking" : "Enable spell checking", 121 "settings.app.form.enableSpellchecking" : "Enable spell checking",
121 "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk", 122 "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk",
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index ac436fc54..4ff3cdd80 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -7,7 +7,7 @@
7 "import.submit.label" : "Importeer services", 7 "import.submit.label" : "Importeer services",
8 "infobar.buttonChangelog" : "Wat is er nieuw?", 8 "infobar.buttonChangelog" : "Wat is er nieuw?",
9 "infobar.buttonInstallUpdate" : "Opnieuw opstarten & update installeren", 9 "infobar.buttonInstallUpdate" : "Opnieuw opstarten & update installeren",
10 "infobar.buttonReloadServices" : "Laad services opnieuw", 10 "infobar.buttonReloadServices" : "Services opnieuw laden",
11 "infobar.requiredRequestsFailed" : "Kan de services en gebruikersinformatie niet laden", 11 "infobar.requiredRequestsFailed" : "Kan de services en gebruikersinformatie niet laden",
12 "infobar.servicesUpdated" : "Je services zijn bijgewerkt.", 12 "infobar.servicesUpdated" : "Je services zijn bijgewerkt.",
13 "infobar.updateAvailable" : "Er is een nieuwe update voor Franz beschikbaar.", 13 "infobar.updateAvailable" : "Er is een nieuwe update voor Franz beschikbaar.",
@@ -26,39 +26,39 @@
26 "login.serverLogout" : "De sessie is verlopen, log alsjeblieft opnieuw in.", 26 "login.serverLogout" : "De sessie is verlopen, log alsjeblieft opnieuw in.",
27 "login.submit.label" : "Inloggen", 27 "login.submit.label" : "Inloggen",
28 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.", 28 "login.tokenExpired" : "De sessie is verlopen, log opnieuw in alsjeblieft.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Over Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Verbergen",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Andere verbergen",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Afsluiten",
33 "menu.app.settings" : "Instellingen", 33 "menu.app.settings" : "Instellingen",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Tonen",
35 "menu.edit" : "Bewerk", 35 "menu.edit" : "Bewerk",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Kopiëren",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Knippen",
38 "menu.edit.delete" : "Verwijderen", 38 "menu.edit.delete" : "Verwijderen",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji's en symbolen",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Plakken",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Plakken en stijl overeen laten komen",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Opnieuw doen",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Selecteer alles",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Spraak",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Beginnen met dicteren",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Beginnen met praten",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Stoppen met spreken",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Ongedaan maken",
49 "menu.file" : "File", 49 "menu.file" : "Bestand",
50 "menu.help" : "Help", 50 "menu.help" : "Hulp",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Wijzigingenlogboek",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Meer informatie",
53 "menu.help.privacy" : "Privacy Voorwaarden", 53 "menu.help.privacy" : "Privacy Voorwaarden",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Ondersteuning",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Servicevoorwaarden",
56 "menu.services" : "Services", 56 "menu.services" : "Diensten",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Nieuwe dienst toevoegen",
58 "menu.view" : "View", 58 "menu.view" : "Weergave",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Gebruik volledig scherm",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Volledig scherm verlaten",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Herlaad Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Reload Service",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Actual Size",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Toggle Developer Tools",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond", 116 "settings.app.form.autoLaunchInBackground" : "Open op de achtergrond",
117 "settings.app.form.autoLaunchOnStart" : "Open Franz bij opstarten", 117 "settings.app.form.autoLaunchOnStart" : "Open Franz bij opstarten",
118 "settings.app.form.beta" : "Inclusief bètaversies", 118 "settings.app.form.beta" : "Inclusief bètaversies",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Toon Franz in menubalk", 120 "settings.app.form.enableMenuBar" : "Toon Franz in menubalk",
120 "settings.app.form.enableSpellchecking" : "Zet spellingcontrole aan", 121 "settings.app.form.enableSpellchecking" : "Zet spellingcontrole aan",
121 "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk", 122 "settings.app.form.enableSystemTray" : "Toon Franz in de systeembalk",
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
index 74ffbe231..9fb72b9c9 100644
--- a/src/i18n/locales/pl.json
+++ b/src/i18n/locales/pl.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "Twoja sesja wygasła, zaloguj się ponownie.", 26 "login.serverLogout" : "Twoja sesja wygasła, zaloguj się ponownie.",
27 "login.submit.label" : "Zaloguj siÄ™", 27 "login.submit.label" : "Zaloguj siÄ™",
28 "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.", 28 "login.tokenExpired" : "Twoja sesja wygasła, zaloguj się ponownie.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "O Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Ukryj",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Hide Others",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Quit",
33 "menu.app.settings" : "Ustawienia", 33 "menu.app.settings" : "Ustawienia",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Pokaż",
35 "menu.edit" : "Edytuj", 35 "menu.edit" : "Edytuj",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Skopiuj",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Wytnij",
38 "menu.edit.delete" : "Usuń", 38 "menu.edit.delete" : "Usuń",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji & Symbols",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Wklej",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Wklej i dopasuj styl",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Ponów",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Zaznacz wszystko",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Speech",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Zacznij dyktować",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Zacznij mówić",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Przestań mówić",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Cofnij",
49 "menu.file" : "File", 49 "menu.file" : "Plik",
50 "menu.help" : "Help", 50 "menu.help" : "Pomoc",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Lista zmian",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Dowiedz się więcej",
53 "menu.help.privacy" : "Polityka prywatności", 53 "menu.help.privacy" : "Polityka prywatności",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Wsparcie",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Terms of Service",
56 "menu.services" : "Services", 56 "menu.services" : "Usługi",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Dodaj nową usługę...",
58 "menu.view" : "View", 58 "menu.view" : "Widok",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Włącz tryb pełnoekranowy",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Zakończ tryb pełnoekranowy",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Przeładuj Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Przeładuj usługę",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Domyślny rozmiar",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Toggle Developer Tools",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Przełącz tryb pełnoekranowy",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Powiększ",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Pomniejsz",
69 "menu.window" : "Window", 69 "menu.window" : "Okno",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Zamknij",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Zminimalizuj",
72 "password.email.label" : "Adres email", 72 "password.email.label" : "Adres email",
73 "password.headline" : "Wyzeruj hasło", 73 "password.headline" : "Wyzeruj hasło",
74 "password.link.login" : "Zaloguj siÄ™ na swoje konto", 74 "password.link.login" : "Zaloguj siÄ™ na swoje konto",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Otwórz w tle", 116 "settings.app.form.autoLaunchInBackground" : "Otwórz w tle",
117 "settings.app.form.autoLaunchOnStart" : "Uruchom Franz na poczÄ…tku", 117 "settings.app.form.autoLaunchOnStart" : "Uruchom Franz na poczÄ…tku",
118 "settings.app.form.beta" : "Uwzględnij wersje beta", 118 "settings.app.form.beta" : "Uwzględnij wersje beta",
119 "settings.app.form.enableGPUAcceleration" : "WÅ‚Ä…cz akceleracjÄ™ GPU",
119 "settings.app.form.enableMenuBar" : "Pokaż Franz na pasku menu", 120 "settings.app.form.enableMenuBar" : "Pokaż Franz na pasku menu",
120 "settings.app.form.enableSpellchecking" : "WÅ‚Ä…cz sprawdzanie pisowni", 121 "settings.app.form.enableSpellchecking" : "WÅ‚Ä…cz sprawdzanie pisowni",
121 "settings.app.form.enableSystemTray" : "Pokaż Franza w tacy systemowej", 122 "settings.app.form.enableSystemTray" : "Pokaż Franza w tacy systemowej",
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index 6ba448999..ceb35ce30 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "Sua sessão expirou, faça o login novamente.", 26 "login.serverLogout" : "Sua sessão expirou, faça o login novamente.",
27 "login.submit.label" : "Entrar", 27 "login.submit.label" : "Entrar",
28 "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.", 28 "login.tokenExpired" : "Sua sessão expirou, faça o login novamente.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Sobre Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Ocultar",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Ocultar os demais",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Sair",
33 "menu.app.settings" : "Ajustes", 33 "menu.app.settings" : "Ajustes",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Exibir",
35 "menu.edit" : "Editar", 35 "menu.edit" : "Editar",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Copiar",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Cortar",
38 "menu.edit.delete" : "Excluir", 38 "menu.edit.delete" : "Excluir",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji & Símbolos ",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Colar",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Colar e corresponder ao estilo",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Refazer",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Selecionar tudo",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Discurso",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "iniciar digitação por voz",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "começar a falar",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Parar de falar",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Desfazer",
49 "menu.file" : "File", 49 "menu.file" : "Arquivo",
50 "menu.help" : "Help", 50 "menu.help" : "Ajuda",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Registro de alterações",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Saiba Mais",
53 "menu.help.privacy" : "Declaração de privacidade", 53 "menu.help.privacy" : "Declaração de privacidade",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Suporte",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Termos de Serviço",
56 "menu.services" : "Services", 56 "menu.services" : "Serviços",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Adicionar Novo Serviço",
58 "menu.view" : "View", 58 "menu.view" : "Visualizar",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Entrar na tela cheia",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Sair da tela cheia",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Recarregar Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Reiniciar o serviço",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Tamanho real",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "alternar ferramentas de desenvolvedor",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "tela cheia",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "habilitar ferramentas de serviços de desenvolvedor",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Ampliar",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "reduzir",
69 "menu.window" : "Window", 69 "menu.window" : "Janela",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Fechar",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Minimizar",
72 "password.email.label" : "Endereço de e-mail", 72 "password.email.label" : "Endereço de e-mail",
73 "password.headline" : "Trocar a senha", 73 "password.headline" : "Trocar a senha",
74 "password.link.login" : "Fazer login na sua conta", 74 "password.link.login" : "Fazer login na sua conta",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano", 116 "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano",
117 "settings.app.form.autoLaunchOnStart" : "Abrir o Franz ao iniciar o sistema", 117 "settings.app.form.autoLaunchOnStart" : "Abrir o Franz ao iniciar o sistema",
118 "settings.app.form.beta" : "Incluir versões beta", 118 "settings.app.form.beta" : "Incluir versões beta",
119 "settings.app.form.enableGPUAcceleration" : "Ativar Aceleração de GPU (Unidade de Processamento Gráfico)",
119 "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu", 120 "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu",
120 "settings.app.form.enableSpellchecking" : "Ativar correção ortográfica", 121 "settings.app.form.enableSpellchecking" : "Ativar correção ortográfica",
121 "settings.app.form.enableSystemTray" : "Exibir o Franz na área de notificações", 122 "settings.app.form.enableSystemTray" : "Exibir o Franz na área de notificações",
@@ -125,7 +126,7 @@
125 "settings.app.form.runInBackground" : "Manter o Franz no fundo quando fechar a janela", 126 "settings.app.form.runInBackground" : "Manter o Franz no fundo quando fechar a janela",
126 "settings.app.form.showDisabledServices" : "Mostrar abas de serviços desativados", 127 "settings.app.form.showDisabledServices" : "Mostrar abas de serviços desativados",
127 "settings.app.form.showMessagesBadgesWhenMuted" : "Mostrar ícone de mensagem não lida quando as notificações estiverem desativadas", 128 "settings.app.form.showMessagesBadgesWhenMuted" : "Mostrar ícone de mensagem não lida quando as notificações estiverem desativadas",
128 "settings.app.headline" : "Ajustes", 129 "settings.app.headline" : "Configurações",
129 "settings.app.headlineAdvanced" : "Avançado", 130 "settings.app.headlineAdvanced" : "Avançado",
130 "settings.app.headlineAppearance" : "Aparência", 131 "settings.app.headlineAppearance" : "Aparência",
131 "settings.app.headlineGeneral" : "Geral", 132 "settings.app.headlineGeneral" : "Geral",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Ativar notificações", 241 "tabs.item.enableNotification" : "Ativar notificações",
241 "tabs.item.enableService" : "Ativar serviço", 242 "tabs.item.enableService" : "Ativar serviço",
242 "tabs.item.reload" : "Recarregar", 243 "tabs.item.reload" : "Recarregar",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "inválido",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{campo} deve ser pelo menos {comprimento} mais caracteres ",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{campo} obrigatório",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{campo} essa URL não é válida",
247 "welcome.loginButton" : "Entrar na sua conta", 248 "welcome.loginButton" : "Entrar na sua conta",
248 "welcome.signupButton" : "Criar uma conta grátis", 249 "welcome.signupButton" : "Criar uma conta grátis",
249 "welcome.slogan" : "Mensagens que funcionam para você" 250 "welcome.slogan" : "Mensagens que funcionam para você"
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
index 9e6d6ac94..44048e505 100644
--- a/src/i18n/locales/pt.json
+++ b/src/i18n/locales/pt.json
@@ -26,15 +26,15 @@
26 "login.serverLogout" : "A sua sessão expirou, inicie sessão novamente.", 26 "login.serverLogout" : "A sua sessão expirou, inicie sessão novamente.",
27 "login.submit.label" : "Iniciar sessão", 27 "login.submit.label" : "Iniciar sessão",
28 "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.", 28 "login.tokenExpired" : "A sua sessão expirou, inicie sessão novamente.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Sobre Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Ocultar",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Ocultar Outros",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Sair",
33 "menu.app.settings" : "Definições", 33 "menu.app.settings" : "Definições",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Mostrar",
35 "menu.edit" : "Editar", 35 "menu.edit" : "Editar",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Copiar",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Cortar",
38 "menu.edit.delete" : "Apagar", 38 "menu.edit.delete" : "Apagar",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji & Symbols",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Paste",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano", 116 "settings.app.form.autoLaunchInBackground" : "Abrir em segundo plano",
117 "settings.app.form.autoLaunchOnStart" : "Iniciar o Franz com o início de sessão", 117 "settings.app.form.autoLaunchOnStart" : "Iniciar o Franz com o início de sessão",
118 "settings.app.form.beta" : "Incluir versões instáveis (beta)", 118 "settings.app.form.beta" : "Incluir versões instáveis (beta)",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu", 120 "settings.app.form.enableMenuBar" : "Mostrar Franz na Barra de Menu",
120 "settings.app.form.enableSpellchecking" : "Ativar verificação ortográfica", 121 "settings.app.form.enableSpellchecking" : "Ativar verificação ortográfica",
121 "settings.app.form.enableSystemTray" : "Mostrar o Franz na barra do sistema", 122 "settings.app.form.enableSystemTray" : "Mostrar o Franz na barra do sistema",
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index 4d9f7f274..ecebc46ee 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.", 26 "login.serverLogout" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.",
27 "login.submit.label" : "Вход", 27 "login.submit.label" : "Вход",
28 "login.tokenExpired" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.", 28 "login.tokenExpired" : "СеÑÑÐ¸Ñ ÑƒÑтарела, пожалуйÑта, войдите Ñнова.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "О Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Скрыть",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "Скрыть оÑтальные",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Выйти",
33 "menu.app.settings" : "ÐаÑтройки", 33 "menu.app.settings" : "ÐаÑтройки",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Показать",
35 "menu.edit" : "Редактировать", 35 "menu.edit" : "Редактировать",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Копировать",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Вырезать",
38 "menu.edit.delete" : "Удалить", 38 "menu.edit.delete" : "Удалить",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Эмодзи и Ñимволы",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Ð’Ñтавить",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Вернуть",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Выделить вÑÑ‘",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "Speech",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Start Dictation",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Start Speaking",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Stop Speaking",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Отменить",
49 "menu.file" : "File", 49 "menu.file" : "Файл",
50 "menu.help" : "Help", 50 "menu.help" : "Справка",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Журнал изменений",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Подробнее",
53 "menu.help.privacy" : "Политика конфиденциальноÑти", 53 "menu.help.privacy" : "Политика конфиденциальноÑти",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Поддержка",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ",
56 "menu.services" : "Services", 56 "menu.services" : "Services",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Добавить ÑервиÑ...",
58 "menu.view" : "View", 58 "menu.view" : "Вид",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Ðа веÑÑŒ Ñкран",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "В окне",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Перезагрузить Franz",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "ПерезапуÑтить ÑервиÑ",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "ФактичеÑкий размер",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Toggle Developer Tools",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Toggle Full Screen",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Увеличить маÑштаб",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Уменьшить маÑштаб",
69 "menu.window" : "Window", 69 "menu.window" : "Окно",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Закрыть",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Свернуть",
72 "password.email.label" : "Email адреÑ", 72 "password.email.label" : "Email адреÑ",
73 "password.headline" : "СброÑить пароль", 73 "password.headline" : "СброÑить пароль",
74 "password.link.login" : "Вход", 74 "password.link.login" : "Вход",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Открывать в фоне", 116 "settings.app.form.autoLaunchInBackground" : "Открывать в фоне",
117 "settings.app.form.autoLaunchOnStart" : "ЗапуÑкать Franz при Ñтарте", 117 "settings.app.form.autoLaunchOnStart" : "ЗапуÑкать Franz при Ñтарте",
118 "settings.app.form.beta" : "Ð’ÐºÐ»ÑŽÑ‡Ð°Ñ Ð±ÐµÑ‚Ð° верÑии", 118 "settings.app.form.beta" : "Ð’ÐºÐ»ÑŽÑ‡Ð°Ñ Ð±ÐµÑ‚Ð° верÑии",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", 120 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar",
120 "settings.app.form.enableSpellchecking" : "Включить проверку правопиÑаниÑ", 121 "settings.app.form.enableSpellchecking" : "Включить проверку правопиÑаниÑ",
121 "settings.app.form.enableSystemTray" : "Показывать Franz в ÑиÑтемном трее", 122 "settings.app.form.enableSystemTray" : "Показывать Franz в ÑиÑтемном трее",
@@ -170,9 +171,9 @@
170 "settings.service.form.headlineBadges" : "Значки непрочитанных Ñообщений", 171 "settings.service.form.headlineBadges" : "Значки непрочитанных Ñообщений",
171 "settings.service.form.headlineGeneral" : "Общие", 172 "settings.service.form.headlineGeneral" : "Общие",
172 "settings.service.form.headlineNotifications" : "УведомлениÑ", 173 "settings.service.form.headlineNotifications" : "УведомлениÑ",
173 "settings.service.form.icon" : "Ðначок пользователÑ", 174 "settings.service.form.icon" : "ÐеÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð¸ÐºÐ¾Ð½ÐºÐ°",
174 "settings.service.form.iconDelete" : "Удалить", 175 "settings.service.form.iconDelete" : "Удалить",
175 "settings.service.form.iconUpload" : "Перетащите картинку или наÐмите Ñюда", 176 "settings.service.form.iconUpload" : "Перетащите картинку или кликните здеÑÑŒ",
176 "settings.service.form.indirectMessageInfo" : "Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñех Ñообщений, не только Ð´Ð»Ñ @username, @channel, @here, ...", 177 "settings.service.form.indirectMessageInfo" : "Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñех Ñообщений, не только Ð´Ð»Ñ @username, @channel, @here, ...",
177 "settings.service.form.indirectMessages" : "Показывать значок уведомлений Ð´Ð»Ñ Ð²Ñех новых Ñообщений", 178 "settings.service.form.indirectMessages" : "Показывать значок уведомлений Ð´Ð»Ñ Ð²Ñех новых Ñообщений",
178 "settings.service.form.isMutedInfo" : "Когда выключено, вÑе звуковые ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ отключены", 179 "settings.service.form.isMutedInfo" : "Когда выключено, вÑе звуковые ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ отключены",
@@ -235,7 +236,7 @@
235 "tabs.item.disableAudio" : "Отключить звук", 236 "tabs.item.disableAudio" : "Отключить звук",
236 "tabs.item.disableNotifications" : "Отключить уведомлениÑ", 237 "tabs.item.disableNotifications" : "Отключить уведомлениÑ",
237 "tabs.item.disableService" : "Отключить ÑервиÑ", 238 "tabs.item.disableService" : "Отключить ÑервиÑ",
238 "tabs.item.edit" : "Редактировать", 239 "tabs.item.edit" : "Правка",
239 "tabs.item.enableAudio" : "Включить аудио", 240 "tabs.item.enableAudio" : "Включить аудио",
240 "tabs.item.enableNotification" : "Включить уведомлениÑ", 241 "tabs.item.enableNotification" : "Включить уведомлениÑ",
241 "tabs.item.enableService" : "Включить Ñлужбу", 242 "tabs.item.enableService" : "Включить Ñлужбу",
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json
index 87c1acebc..c43e998a4 100644
--- a/src/i18n/locales/sk.json
+++ b/src/i18n/locales/sk.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Otvoriť na pozadí", 116 "settings.app.form.autoLaunchInBackground" : "Otvoriť na pozadí",
117 "settings.app.form.autoLaunchOnStart" : "Spustiť Franz pri štarte", 117 "settings.app.form.autoLaunchOnStart" : "Spustiť Franz pri štarte",
118 "settings.app.form.beta" : "Vrátane beta verzií", 118 "settings.app.form.beta" : "Vrátane beta verzií",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Zobraz Franz v Menu bare", 120 "settings.app.form.enableMenuBar" : "Zobraz Franz v Menu bare",
120 "settings.app.form.enableSpellchecking" : "Povoliť zvýraznenie preklepov", 121 "settings.app.form.enableSpellchecking" : "Povoliť zvýraznenie preklepov",
121 "settings.app.form.enableSystemTray" : "Zobrazovať Franz v systémovej lište", 122 "settings.app.form.enableSystemTray" : "Zobrazovať Franz v systémovej lište",
diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json
index d93712d88..1f31bc834 100644
--- a/src/i18n/locales/sr.json
+++ b/src/i18n/locales/sr.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini", 116 "settings.app.form.autoLaunchInBackground" : "Otvori u pozadini",
117 "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom", 117 "settings.app.form.autoLaunchOnStart" : "Pokreni Franz sa sistemom",
118 "settings.app.form.beta" : "Obuhvati i beta verzije", 118 "settings.app.form.beta" : "Obuhvati i beta verzije",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", 120 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar",
120 "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa", 121 "settings.app.form.enableSpellchecking" : "Omogući provjeru pravopisa",
121 "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci", 122 "settings.app.form.enableSystemTray" : "Prikaži aplikaciju u sustavskoj traci",
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json
index 96738d462..d03077d8d 100644
--- a/src/i18n/locales/tr.json
+++ b/src/i18n/locales/tr.json
@@ -26,49 +26,49 @@
26 "login.serverLogout" : "Oturum süreniz dolmuş, lütfen tekrar giriş yapın.", 26 "login.serverLogout" : "Oturum süreniz dolmuş, lütfen tekrar giriş yapın.",
27 "login.submit.label" : "Oturum Aç", 27 "login.submit.label" : "Oturum Aç",
28 "login.tokenExpired" : "Oturum zaman aşımına uğradı, lütfen tekrar giriş yapın.", 28 "login.tokenExpired" : "Oturum zaman aşımına uğradı, lütfen tekrar giriş yapın.",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "Franz Hakkında",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "Gizle",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "DiÄŸerlerini Gizle",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "Çıkış",
33 "menu.app.settings" : "Ayarlar", 33 "menu.app.settings" : "Ayarlar",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "Göster",
35 "menu.edit" : "Düzenle", 35 "menu.edit" : "Düzenle",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "Kopyala",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "Kes",
38 "menu.edit.delete" : "Sil", 38 "menu.edit.delete" : "Sil",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "Emoji & Semboller",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "Yapıştır",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "Yapıştır ve Stili Eşleştir",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "Yeniden Yap",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "Hepsini Seç",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "KonuÅŸma",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "Ä°mlaya BaÅŸla",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "KonuÅŸmaya BaÅŸla",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Konuşmayı Bırak\/Durdur",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Geri al",
49 "menu.file" : "File", 49 "menu.file" : "Dosya",
50 "menu.help" : "Help", 50 "menu.help" : "Yardım",
51 "menu.help.changelog" : "Changelog", 51 "menu.help.changelog" : "Değişim Günlüğü",
52 "menu.help.learnMore" : "Learn More", 52 "menu.help.learnMore" : "Daha Fazlasını Öğrenin",
53 "menu.help.privacy" : "Gizlilik Sözleşmesi", 53 "menu.help.privacy" : "Gizlilik Sözleşmesi",
54 "menu.help.support" : "Support", 54 "menu.help.support" : "Destek",
55 "menu.help.tos" : "Terms of Service", 55 "menu.help.tos" : "Kullanım Şartları",
56 "menu.services" : "Services", 56 "menu.services" : "Hizmetler",
57 "menu.services.addNewService" : "Add New Service...", 57 "menu.services.addNewService" : "Yeni Servis Ekle",
58 "menu.view" : "View", 58 "menu.view" : "Görünüm",
59 "menu.view.enterFullScreen" : "Enter Full Screen", 59 "menu.view.enterFullScreen" : "Tam Ekrana Geç",
60 "menu.view.exitFullScreen" : "Exit Full Screen", 60 "menu.view.exitFullScreen" : "Tam Ekrandan Çık",
61 "menu.view.reloadFranz" : "Reload Franz", 61 "menu.view.reloadFranz" : "Franz'ı Yeniden Yükle",
62 "menu.view.reloadService" : "Reload Service", 62 "menu.view.reloadService" : "Servisi Tekrar Yükle",
63 "menu.view.resetZoom" : "Actual Size", 63 "menu.view.resetZoom" : "Orijinal Boyut",
64 "menu.view.toggleDevTools" : "Toggle Developer Tools", 64 "menu.view.toggleDevTools" : "Geliştirici Araçlarına Geç",
65 "menu.view.toggleFullScreen" : "Toggle Full Screen", 65 "menu.view.toggleFullScreen" : "Tam Ekrana Geç",
66 "menu.view.toggleServiceDevTools" : "Toggle Service Developer Tools", 66 "menu.view.toggleServiceDevTools" : "Hizmet Geliştirici Araçlarını Değiştir",
67 "menu.view.zoomIn" : "Zoom In", 67 "menu.view.zoomIn" : "Yakınlaştır",
68 "menu.view.zoomOut" : "Zoom Out", 68 "menu.view.zoomOut" : "Uzaklaştır",
69 "menu.window" : "Window", 69 "menu.window" : "Pencere",
70 "menu.window.close" : "Close", 70 "menu.window.close" : "Kapat",
71 "menu.window.minimize" : "Minimize", 71 "menu.window.minimize" : "Simge Durumuna Küçült",
72 "password.email.label" : "E-posta adresi", 72 "password.email.label" : "E-posta adresi",
73 "password.headline" : "Parola sıfırla", 73 "password.headline" : "Parola sıfırla",
74 "password.link.login" : "Hesabına giriş yap", 74 "password.link.login" : "Hesabına giriş yap",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Arka planda aç", 116 "settings.app.form.autoLaunchInBackground" : "Arka planda aç",
117 "settings.app.form.autoLaunchOnStart" : "Franz'ı başlangıçta aç", 117 "settings.app.form.autoLaunchOnStart" : "Franz'ı başlangıçta aç",
118 "settings.app.form.beta" : "Beta versiyonları dahil et", 118 "settings.app.form.beta" : "Beta versiyonları dahil et",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Menü çubuğunda Franz'ı göster", 120 "settings.app.form.enableMenuBar" : "Menü çubuğunda Franz'ı göster",
120 "settings.app.form.enableSpellchecking" : "Yazım denetimini etkinleştir", 121 "settings.app.form.enableSpellchecking" : "Yazım denetimini etkinleştir",
121 "settings.app.form.enableSystemTray" : "Franz'ı sistem tepsisinde göster", 122 "settings.app.form.enableSystemTray" : "Franz'ı sistem tepsisinde göster",
@@ -240,10 +241,10 @@
240 "tabs.item.enableNotification" : "Bildirimleri etkinleÅŸtir", 241 "tabs.item.enableNotification" : "Bildirimleri etkinleÅŸtir",
241 "tabs.item.enableService" : "Servisi etkinleÅŸtir", 242 "tabs.item.enableService" : "Servisi etkinleÅŸtir",
242 "tabs.item.reload" : "Yeniden Yükle", 243 "tabs.item.reload" : "Yeniden Yükle",
243 "validation.email" : "{field} is not valid", 244 "validation.email" : "{alan} geçerli değil",
244 "validation.minLength" : "{field} should be at least {length} characters long", 245 "validation.minLength" : "{field} en az {length} karakter uzunluğunda olmalı",
245 "validation.required" : "{field} is required", 246 "validation.required" : "{field} gereklidir",
246 "validation.url" : "{field} is not a valid URL", 247 "validation.url" : "{field} geçerli bir URL değil",
247 "welcome.loginButton" : "Hesabına giriş yap", 248 "welcome.loginButton" : "Hesabına giriş yap",
248 "welcome.signupButton" : "Ãœcretsiz hesap oluÅŸtur", 249 "welcome.signupButton" : "Ãœcretsiz hesap oluÅŸtur",
249 "welcome.slogan" : "Sizin için çalışan mesajlaşma" 250 "welcome.slogan" : "Sizin için çalışan mesajlaşma"
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json
index f7c946436..3f732b896 100644
--- a/src/i18n/locales/uk.json
+++ b/src/i18n/locales/uk.json
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "Відкрити у фоновому режимі", 116 "settings.app.form.autoLaunchInBackground" : "Відкрити у фоновому режимі",
117 "settings.app.form.autoLaunchOnStart" : "ЗапуÑкати Franz на початку", 117 "settings.app.form.autoLaunchOnStart" : "ЗапуÑкати Franz на початку",
118 "settings.app.form.beta" : "Включити бета-верÑÑ–Ñ—", 118 "settings.app.form.beta" : "Включити бета-верÑÑ–Ñ—",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Відображати Franz в панелі головного меню", 120 "settings.app.form.enableMenuBar" : "Відображати Franz в панелі головного меню",
120 "settings.app.form.enableSpellchecking" : "Увімкнути перевірку орфографії", 121 "settings.app.form.enableSpellchecking" : "Увімкнути перевірку орфографії",
121 "settings.app.form.enableSystemTray" : "Показувати Franz у ÑиÑтемному лотку", 122 "settings.app.form.enableSystemTray" : "Показувати Franz у ÑиÑтемному лотку",
diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json
index 71e6d65bc..3bbcc8288 100644
--- a/src/i18n/locales/zh-TW.json
+++ b/src/i18n/locales/zh-TW.json
@@ -16,7 +16,7 @@
16 "invite.name.label" : "å稱", 16 "invite.name.label" : "å稱",
17 "invite.skip.label" : "我想ç¨å¾Œå†åš", 17 "invite.skip.label" : "我想ç¨å¾Œå†åš",
18 "invite.submit.label" : "é€å‡ºé‚€è«‹", 18 "invite.submit.label" : "é€å‡ºé‚€è«‹",
19 "invite.successInfo" : "Invitations sent successfully", 19 "invite.successInfo" : "註冊請求已é€å‡º",
20 "login.email.label" : "é›»å­éƒµä»¶åœ°å€", 20 "login.email.label" : "é›»å­éƒµä»¶åœ°å€",
21 "login.headline" : "登入", 21 "login.headline" : "登入",
22 "login.invalidCredentials" : "é›»å­éƒµä»¶æˆ–密碼有誤", 22 "login.invalidCredentials" : "é›»å­éƒµä»¶æˆ–密碼有誤",
@@ -26,23 +26,23 @@
26 "login.serverLogout" : "您的登入期間已éŽæœŸï¼Œè«‹é‡æ–°ç™»éŒ„", 26 "login.serverLogout" : "您的登入期間已éŽæœŸï¼Œè«‹é‡æ–°ç™»éŒ„",
27 "login.submit.label" : "登入", 27 "login.submit.label" : "登入",
28 "login.tokenExpired" : "您的登入已éŽæœŸï¼Œè«‹é‡æ–°ç™»å…¥ã€‚", 28 "login.tokenExpired" : "您的登入已éŽæœŸï¼Œè«‹é‡æ–°ç™»å…¥ã€‚",
29 "menu.app.about" : "About Franz", 29 "menu.app.about" : "關於Franz",
30 "menu.app.hide" : "Hide", 30 "menu.app.hide" : "éš±è—",
31 "menu.app.hideOthers" : "Hide Others", 31 "menu.app.hideOthers" : "éš±è—其他",
32 "menu.app.quit" : "Quit", 32 "menu.app.quit" : "çµæŸ",
33 "menu.app.settings" : "設定", 33 "menu.app.settings" : "設定",
34 "menu.app.unhide" : "Unhide", 34 "menu.app.unhide" : "顯示",
35 "menu.edit" : "編輯", 35 "menu.edit" : "編輯",
36 "menu.edit.copy" : "Copy", 36 "menu.edit.copy" : "æ‹·è²",
37 "menu.edit.cut" : "Cut", 37 "menu.edit.cut" : "剪下",
38 "menu.edit.delete" : "Delete", 38 "menu.edit.delete" : "刪除",
39 "menu.edit.emojiSymbols" : "Emoji & Symbols", 39 "menu.edit.emojiSymbols" : "貼紙和表情包",
40 "menu.edit.paste" : "Paste", 40 "menu.edit.paste" : "貼上",
41 "menu.edit.pasteAndMatchStyle" : "Paste And Match Style", 41 "menu.edit.pasteAndMatchStyle" : "貼上并匹é…樣å¼",
42 "menu.edit.redo" : "Redo", 42 "menu.edit.redo" : "é‡ä¾†",
43 "menu.edit.selectAll" : "Select All", 43 "menu.edit.selectAll" : "é¸æ“‡æ‰€æœ‰",
44 "menu.edit.speech" : "Speech", 44 "menu.edit.speech" : "朗讀",
45 "menu.edit.startDictation" : "Start Dictation", 45 "menu.edit.startDictation" : "開始è½å¯«",
46 "menu.edit.startSpeaking" : "Start Speaking", 46 "menu.edit.startSpeaking" : "Start Speaking",
47 "menu.edit.stopSpeaking" : "Stop Speaking", 47 "menu.edit.stopSpeaking" : "Stop Speaking",
48 "menu.edit.undo" : "Undo", 48 "menu.edit.undo" : "Undo",
@@ -116,6 +116,7 @@
116 "settings.app.form.autoLaunchInBackground" : "在背景開啟", 116 "settings.app.form.autoLaunchInBackground" : "在背景開啟",
117 "settings.app.form.autoLaunchOnStart" : "開機時啟動Franz", 117 "settings.app.form.autoLaunchOnStart" : "開機時啟動Franz",
118 "settings.app.form.beta" : "包å«æ¸¬è©¦ç‰ˆ", 118 "settings.app.form.beta" : "包å«æ¸¬è©¦ç‰ˆ",
119 "settings.app.form.enableGPUAcceleration" : "Enable GPU Acceleration",
119 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar", 120 "settings.app.form.enableMenuBar" : "Show Franz in Menu Bar",
120 "settings.app.form.enableSpellchecking" : "啟用拼字檢查", 121 "settings.app.form.enableSpellchecking" : "啟用拼字檢查",
121 "settings.app.form.enableSystemTray" : "顯示Franz在系統列", 122 "settings.app.form.enableSystemTray" : "顯示Franz在系統列",
@@ -171,7 +172,7 @@
171 "settings.service.form.headlineGeneral" : "一般", 172 "settings.service.form.headlineGeneral" : "一般",
172 "settings.service.form.headlineNotifications" : "Notifications", 173 "settings.service.form.headlineNotifications" : "Notifications",
173 "settings.service.form.icon" : "Custom icon", 174 "settings.service.form.icon" : "Custom icon",
174 "settings.service.form.iconDelete" : "Delete", 175 "settings.service.form.iconDelete" : "刪除",
175 "settings.service.form.iconUpload" : "Drop your image, or click here", 176 "settings.service.form.iconUpload" : "Drop your image, or click here",
176 "settings.service.form.indirectMessageInfo" : "您將收到有關頻é“中所有新消æ¯çš„通知,而ä¸åƒ…僅是@username,@channel,@here,...", 177 "settings.service.form.indirectMessageInfo" : "您將收到有關頻é“中所有新消æ¯çš„通知,而ä¸åƒ…僅是@username,@channel,@here,...",
177 "settings.service.form.indirectMessages" : "顯示所有新消æ¯çš„消æ¯æ¨™èªŒ", 178 "settings.service.form.indirectMessages" : "顯示所有新消æ¯çš„消æ¯æ¨™èªŒ",
diff --git a/src/index.js b/src/index.js
index 897943a85..5ba901b89 100644
--- a/src/index.js
+++ b/src/index.js
@@ -12,6 +12,8 @@ import handleDeepLink from './electron/deepLinking';
12import { appId } from './package.json'; // eslint-disable-line import/no-unresolved 12import { appId } from './package.json'; // eslint-disable-line import/no-unresolved
13import './electron/exception'; 13import './electron/exception';
14 14
15const debug = require('debug')('App');
16
15// Keep a global reference of the window object, if you don't, the window will 17// Keep a global reference of the window object, if you don't, the window will
16// be closed automatically when the JavaScript object is garbage collected. 18// be closed automatically when the JavaScript object is garbage collected.
17let mainWindow; 19let mainWindow;
@@ -57,6 +59,12 @@ if (isLinux && ['Pantheon', 'Unity:Unity7'].indexOf(process.env.XDG_CURRENT_DESK
57// Initialize Settings 59// Initialize Settings
58const settings = new Settings(); 60const settings = new Settings();
59 61
62// Disable GPU acceleration
63if (!settings.get('enableGPUAcceleration')) {
64 debug('Disable GPU Acceleration');
65 app.disableHardwareAcceleration();
66}
67
60const createWindow = () => { 68const createWindow = () => {
61 // Remember window size 69 // Remember window size
62 const mainWindowState = windowStateKeeper({ 70 const mainWindowState = windowStateKeeper({
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index 5a05e47b3..19b8d5b15 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -415,7 +415,7 @@ const _titleBarTemplateFactory = intl => [
415 label: app.mainWindow.isFullScreen() // label doesn't work, gets overridden by Electron 415 label: app.mainWindow.isFullScreen() // label doesn't work, gets overridden by Electron
416 ? intl.formatMessage(menuItems.exitFullScreen) 416 ? intl.formatMessage(menuItems.exitFullScreen)
417 : intl.formatMessage(menuItems.enterFullScreen), 417 : intl.formatMessage(menuItems.enterFullScreen),
418 accelerator: `${ctrlKey}+F`, 418 accelerator: 'F11',
419 click(menuItem, browserWindow) { 419 click(menuItem, browserWindow) {
420 browserWindow.setFullScreen(!browserWindow.isFullScreen()); 420 browserWindow.setFullScreen(!browserWindow.isFullScreen());
421 }, 421 },
@@ -431,14 +431,14 @@ const _titleBarTemplateFactory = intl => [
431 submenu: [ 431 submenu: [
432 { 432 {
433 label: intl.formatMessage(menuItems.minimize), 433 label: intl.formatMessage(menuItems.minimize),
434 accelerator: 'Alt+M', 434 accelerator: 'Ctrl+M',
435 click(menuItem, browserWindow) { 435 click(menuItem, browserWindow) {
436 browserWindow.minimize(); 436 browserWindow.minimize();
437 }, 437 },
438 }, 438 },
439 { 439 {
440 label: intl.formatMessage(menuItems.close), 440 label: intl.formatMessage(menuItems.close),
441 accelerator: 'Alt+W', 441 accelerator: 'Ctrl+W',
442 click(menuItem, browserWindow) { 442 click(menuItem, browserWindow) {
443 browserWindow.close(); 443 browserWindow.close();
444 }, 444 },
@@ -450,7 +450,7 @@ const _titleBarTemplateFactory = intl => [
450 submenu: [ 450 submenu: [
451 { 451 {
452 label: intl.formatMessage(menuItems.learnMore), 452 label: intl.formatMessage(menuItems.learnMore),
453 click() { shell.openExternal('http://meetfranz.com'); }, 453 click() { shell.openExternal('https://meetfranz.com'); },
454 }, 454 },
455 { 455 {
456 label: intl.formatMessage(menuItems.changelog), 456 label: intl.formatMessage(menuItems.changelog),
@@ -461,7 +461,7 @@ const _titleBarTemplateFactory = intl => [
461 }, 461 },
462 { 462 {
463 label: intl.formatMessage(menuItems.support), 463 label: intl.formatMessage(menuItems.support),
464 click() { shell.openExternal('http://meetfranz.com/support'); }, 464 click() { shell.openExternal('https://meetfranz.com/support'); },
465 }, 465 },
466 { 466 {
467 type: 'separator', 467 type: 'separator',
@@ -643,10 +643,7 @@ export default class FranzMenu {
643 }, 643 },
644 { 644 {
645 label: intl.formatMessage(menuItems.quit), 645 label: intl.formatMessage(menuItems.quit),
646 accelerator: 'Alt+F4', 646 role: 'quit',
647 click: () => {
648 app.quit();
649 },
650 }, 647 },
651 ]; 648 ];
652 649
diff --git a/src/models/Settings.js b/src/models/Settings.js
index e39b63087..0e4c59057 100644
--- a/src/models/Settings.js
+++ b/src/models/Settings.js
@@ -2,19 +2,29 @@ import { observable, extendObservable } from 'mobx';
2import { DEFAULT_APP_SETTINGS } from '../config'; 2import { DEFAULT_APP_SETTINGS } from '../config';
3 3
4export default class Settings { 4export default class Settings {
5 @observable autoLaunchInBackground = DEFAULT_APP_SETTINGS.autoLaunchInBackground; 5 @observable app = DEFAULT_APP_SETTINGS
6 @observable runInBackground = DEFAULT_APP_SETTINGS.runInBackground;
7 @observable enableSystemTray = DEFAULT_APP_SETTINGS.enableSystemTray;
8 @observable minimizeToSystemTray = DEFAULT_APP_SETTINGS.minimizeToSystemTray;
9 @observable showDisabledServices = DEFAULT_APP_SETTINGS.showDisabledServices;
10 @observable showMessageBadgeWhenMuted = DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted;
11 @observable enableSpellchecking = DEFAULT_APP_SETTINGS.enableSpellchecking;
12 @observable locale = DEFAULT_APP_SETTINGS.locale;
13 @observable beta = DEFAULT_APP_SETTINGS.beta;
14 @observable isAppMuted = DEFAULT_APP_SETTINGS.isAppMuted;
15 6
16 constructor(data) { 7 @observable service = {
17 Object.assign(this, data); 8 activeService: '',
9 }
10
11 @observable group = {
12 collapsed: [],
13 disabled: [],
14 }
15
16 @observable stats = {
17 appStarts: 0,
18 }
19
20 @observable migration = {}
21
22 constructor({ app, service, group, stats, migration }) {
23 Object.assign(this.app, app);
24 Object.assign(this.service, service);
25 Object.assign(this.group, group);
26 Object.assign(this.stats, stats);
27 Object.assign(this.migration, migration);
18 } 28 }
19 29
20 update(data) { 30 update(data) {
diff --git a/src/models/User.js b/src/models/User.js
index 2e5df4795..3e4aa187d 100644
--- a/src/models/User.js
+++ b/src/models/User.js
@@ -15,6 +15,7 @@ export default class User {
15 @observable donor = {}; 15 @observable donor = {};
16 @observable isDonor = false; 16 @observable isDonor = false;
17 @observable isMiner = false; 17 @observable isMiner = false;
18 @observable locale = false;
18 19
19 constructor(data) { 20 constructor(data) {
20 if (!data.id) { 21 if (!data.id) {
@@ -33,5 +34,6 @@ export default class User {
33 this.isDonor = data.isDonor || this.isDonor; 34 this.isDonor = data.isDonor || this.isDonor;
34 this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner; 35 this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner;
35 this.isMiner = data.isMiner || this.isMiner; 36 this.isMiner = data.isMiner || this.isMiner;
37 this.locale = data.locale || this.locale;
36 } 38 }
37} 39}
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 4ac8325d4..38edff1b4 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -15,8 +15,12 @@ import { gaEvent } from '../lib/analytics';
15 15
16import { getServiceIdsFromPartitions, removeServicePartitionDirectory } from '../helpers/service-helpers.js'; 16import { getServiceIdsFromPartitions, removeServicePartitionDirectory } from '../helpers/service-helpers.js';
17 17
18const debug = require('debug')('AppStore');
19
18const { app } = remote; 20const { app } = remote;
19 21
22const mainWindow = remote.getCurrentWindow();
23
20const defaultLocale = DEFAULT_APP_SETTINGS.locale; 24const defaultLocale = DEFAULT_APP_SETTINGS.locale;
21const autoLauncher = new AutoLaunch({ 25const autoLauncher = new AutoLaunch({
22 name: 'Franz', 26 name: 'Franz',
@@ -48,6 +52,8 @@ export default class AppStore extends Store {
48 52
49 @observable isClearingAllCache = false; 53 @observable isClearingAllCache = false;
50 54
55 @observable isFullScreen = mainWindow.isFullScreen();
56
51 constructor(...args) { 57 constructor(...args) {
52 super(...args); 58 super(...args);
53 59
@@ -80,6 +86,10 @@ export default class AppStore extends Store {
80 window.addEventListener('online', () => { this.isOnline = true; }); 86 window.addEventListener('online', () => { this.isOnline = true; });
81 window.addEventListener('offline', () => { this.isOnline = false; }); 87 window.addEventListener('offline', () => { this.isOnline = false; });
82 88
89 mainWindow.on('enter-full-screen', () => { this.isFullScreen = true; });
90 mainWindow.on('leave-full-screen', () => { this.isFullScreen = false; });
91
92
83 this.isOnline = navigator.onLine; 93 this.isOnline = navigator.onLine;
84 94
85 // Check if Franz should launch on start 95 // Check if Franz should launch on start
@@ -157,7 +167,7 @@ export default class AppStore extends Store {
157 167
158 // Actions 168 // Actions
159 @action _notify({ title, options, notificationId, serviceId = null }) { 169 @action _notify({ title, options, notificationId, serviceId = null }) {
160 if (this.stores.settings.all.isAppMuted) return; 170 if (this.stores.settings.all.app.isAppMuted) return;
161 171
162 const notification = new window.Notification(title, options); 172 const notification = new window.Notification(title, options);
163 notification.onclick = (e) => { 173 notification.onclick = (e) => {
@@ -170,8 +180,6 @@ export default class AppStore extends Store {
170 180
171 this.actions.service.setActive({ serviceId }); 181 this.actions.service.setActive({ serviceId });
172 182
173 const mainWindow = remote.getCurrentWindow();
174
175 if (isWindows) { 183 if (isWindows) {
176 mainWindow.restore(); 184 mainWindow.restore();
177 } else if (isLinux) { 185 } else if (isLinux) {
@@ -238,14 +246,15 @@ export default class AppStore extends Store {
238 this.isSystemMuteOverridden = overrideSystemMute; 246 this.isSystemMuteOverridden = overrideSystemMute;
239 247
240 this.actions.settings.update({ 248 this.actions.settings.update({
241 settings: { 249 type: 'app',
250 data: {
242 isAppMuted: isMuted, 251 isAppMuted: isMuted,
243 }, 252 },
244 }); 253 });
245 } 254 }
246 255
247 @action _toggleMuteApp() { 256 @action _toggleMuteApp() {
248 this._muteApp({ isMuted: !this.stores.settings.all.isAppMuted }); 257 this._muteApp({ isMuted: !this.stores.settings.all.app.isAppMuted });
249 } 258 }
250 259
251 @action async _clearAllCache() { 260 @action async _clearAllCache() {
@@ -279,13 +288,19 @@ export default class AppStore extends Store {
279 } 288 }
280 289
281 _setLocale() { 290 _setLocale() {
282 const locale = this.stores.settings.all.locale; 291 let locale;
292 if (this.stores.user.isLoggedIn) {
293 locale = this.stores.user.data.locale;
294 }
295
283 296
284 if (locale && Object.prototype.hasOwnProperty.call(locales, locale) && locale !== this.locale) { 297 if (locale && Object.prototype.hasOwnProperty.call(locales, locale) && locale !== this.locale) {
285 this.locale = locale; 298 this.locale = locale;
286 } else if (!locale) { 299 } else if (!locale) {
287 this.locale = this._getDefaultLocale(); 300 this.locale = this._getDefaultLocale();
288 } 301 }
302
303 debug(`Set locale to "${this.locale}"`);
289 } 304 }
290 305
291 _getDefaultLocale() { 306 _getDefaultLocale() {
@@ -327,8 +342,9 @@ export default class AppStore extends Store {
327 // Helpers 342 // Helpers
328 _appStartsCounter() { 343 _appStartsCounter() {
329 this.actions.settings.update({ 344 this.actions.settings.update({
330 settings: { 345 type: 'stats',
331 appStarts: (this.stores.settings.all.appStarts || 0) + 1, 346 data: {
347 appStarts: (this.stores.settings.all.stats.appStarts || 0) + 1,
332 }, 348 },
333 }); 349 });
334 } 350 }
@@ -336,7 +352,8 @@ export default class AppStore extends Store {
336 async _autoStart() { 352 async _autoStart() {
337 this.autoLaunchOnStart = await this._checkAutoStart(); 353 this.autoLaunchOnStart = await this._checkAutoStart();
338 354
339 if (this.stores.settings.all.appStarts === 1) { 355 if (this.stores.settings.all.stats.appStarts === 1) {
356 debug('Set app to launch on start');
340 this.actions.app.launchOnStartup({ 357 this.actions.app.launchOnStartup({
341 enable: true, 358 enable: true,
342 }); 359 });
@@ -349,7 +366,7 @@ export default class AppStore extends Store {
349 366
350 _systemDND() { 367 _systemDND() {
351 const dnd = getDoNotDisturb(); 368 const dnd = getDoNotDisturb();
352 if (dnd !== this.stores.settings.all.isAppMuted && !this.isSystemMuteOverridden) { 369 if (dnd !== this.stores.settings.all.app.isAppMuted && !this.isSystemMuteOverridden) {
353 this.actions.app.muteApp({ 370 this.actions.app.muteApp({
354 isMuted: dnd, 371 isMuted: dnd,
355 overrideSystemMute: false, 372 overrideSystemMute: false,
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index f7d92b1ff..ccb85421a 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -1,8 +1,5 @@
1// import { remote } from 'electron'; 1import { action, reaction, computed, observable } from 'mobx';
2import { action, computed, observable } from 'mobx';
3import { debounce, remove } from 'lodash'; 2import { debounce, remove } from 'lodash';
4// import path from 'path';
5// import fs from 'fs-extra';
6 3
7import Store from './lib/Store'; 4import Store from './lib/Store';
8import Request from './lib/Request'; 5import Request from './lib/Request';
@@ -63,13 +60,20 @@ export default class ServicesStore extends Store {
63 this._mapActiveServiceToServiceModelReaction.bind(this), 60 this._mapActiveServiceToServiceModelReaction.bind(this),
64 this._saveActiveService.bind(this), 61 this._saveActiveService.bind(this),
65 this._logoutReaction.bind(this), 62 this._logoutReaction.bind(this),
66 this._shareSettingsWithServiceProcess.bind(this),
67 ]); 63 ]);
68 64
69 // Just bind this 65 // Just bind this
70 this._initializeServiceRecipeInWebview.bind(this); 66 this._initializeServiceRecipeInWebview.bind(this);
71 } 67 }
72 68
69 setup() {
70 // Single key reactions
71 reaction(
72 () => this.stores.settings.all.app.enableSpellchecking,
73 () => this._shareSettingsWithServiceProcess(),
74 );
75 }
76
73 @computed get all() { 77 @computed get all() {
74 if (this.stores.user.isLoggedIn) { 78 if (this.stores.user.isLoggedIn) {
75 const services = this.allServicesRequest.execute().result; 79 const services = this.allServicesRequest.execute().result;
@@ -86,13 +90,13 @@ export default class ServicesStore extends Store {
86 } 90 }
87 91
88 @computed get allDisplayed() { 92 @computed get allDisplayed() {
89 return this.stores.settings.all.showDisabledServices ? this.all : this.enabled; 93 return this.stores.settings.all.app.showDisabledServices ? this.all : this.enabled;
90 } 94 }
91 95
92 // This is just used to avoid unnecessary rerendering of resource-heavy webviews 96 // This is just used to avoid unnecessary rerendering of resource-heavy webviews
93 @computed get allDisplayedUnordered() { 97 @computed get allDisplayedUnordered() {
94 const services = this.allServicesRequest.execute().result || []; 98 const services = this.allServicesRequest.execute().result || [];
95 return this.stores.settings.all.showDisabledServices ? services : services.filter(service => service.isEnabled); 99 return this.stores.settings.all.app.showDisabledServices ? services : services.filter(service => service.isEnabled);
96 } 100 }
97 101
98 @computed get filtered() { 102 @computed get filtered() {
@@ -334,7 +338,7 @@ export default class ServicesStore extends Store {
334 }); 338 });
335 } else if (channel === 'notification') { 339 } else if (channel === 'notification') {
336 const options = args[0].options; 340 const options = args[0].options;
337 if (service.recipe.hasNotificationSound || service.isMuted || this.stores.settings.all.isAppMuted) { 341 if (service.recipe.hasNotificationSound || service.isMuted || this.stores.settings.all.app.isAppMuted) {
338 Object.assign(options, { 342 Object.assign(options, {
339 silent: true, 343 silent: true,
340 }); 344 });
@@ -434,7 +438,7 @@ export default class ServicesStore extends Store {
434 } 438 }
435 439
436 @action _reorder({ oldIndex, newIndex }) { 440 @action _reorder({ oldIndex, newIndex }) {
437 const showDisabledServices = this.stores.settings.all.showDisabledServices; 441 const showDisabledServices = this.stores.settings.all.app.showDisabledServices;
438 const oldEnabledSortIndex = showDisabledServices ? oldIndex : this.all.indexOf(this.enabled[oldIndex]); 442 const oldEnabledSortIndex = showDisabledServices ? oldIndex : this.all.indexOf(this.enabled[oldIndex]);
439 const newEnabledSortIndex = showDisabledServices ? newIndex : this.all.indexOf(this.enabled[newIndex]); 443 const newEnabledSortIndex = showDisabledServices ? newIndex : this.all.indexOf(this.enabled[newIndex]);
440 444
@@ -512,7 +516,8 @@ export default class ServicesStore extends Store {
512 516
513 if (service) { 517 if (service) {
514 this.actions.settings.update({ 518 this.actions.settings.update({
515 settings: { 519 type: 'service',
520 data: {
516 activeService: service.id, 521 activeService: service.id,
517 }, 522 },
518 }); 523 });
@@ -520,7 +525,7 @@ export default class ServicesStore extends Store {
520 } 525 }
521 526
522 _mapActiveServiceToServiceModelReaction() { 527 _mapActiveServiceToServiceModelReaction() {
523 const { activeService } = this.stores.settings.all; 528 const { activeService } = this.stores.settings.all.service;
524 if (this.allDisplayed.length) { 529 if (this.allDisplayed.length) {
525 this.allDisplayed.map(service => Object.assign(service, { 530 this.allDisplayed.map(service => Object.assign(service, {
526 isActive: activeService ? activeService === service.id : this.allDisplayed[0].id === service.id, 531 isActive: activeService ? activeService === service.id : this.allDisplayed[0].id === service.id,
@@ -529,7 +534,7 @@ export default class ServicesStore extends Store {
529 } 534 }
530 535
531 _getUnreadMessageCountReaction() { 536 _getUnreadMessageCountReaction() {
532 const showMessageBadgeWhenMuted = this.stores.settings.all.showMessageBadgeWhenMuted; 537 const showMessageBadgeWhenMuted = this.stores.settings.all.app.showMessageBadgeWhenMuted;
533 const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted; 538 const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted;
534 539
535 const unreadDirectMessageCount = this.allDisplayed 540 const unreadDirectMessageCount = this.allDisplayed
@@ -553,7 +558,10 @@ export default class ServicesStore extends Store {
553 558
554 _logoutReaction() { 559 _logoutReaction() {
555 if (!this.stores.user.isLoggedIn) { 560 if (!this.stores.user.isLoggedIn) {
556 this.actions.settings.remove({ key: 'activeService' }); 561 this.actions.settings.remove({
562 type: 'service',
563 key: 'activeService',
564 });
557 this.allServicesRequest.invalidate().reset(); 565 this.allServicesRequest.invalidate().reset();
558 } 566 }
559 } 567 }
@@ -561,7 +569,7 @@ export default class ServicesStore extends Store {
561 _shareSettingsWithServiceProcess() { 569 _shareSettingsWithServiceProcess() {
562 this.actions.service.sendIPCMessageToAllServices({ 570 this.actions.service.sendIPCMessageToAllServices({
563 channel: 'settings-update', 571 channel: 'settings-update',
564 args: this.stores.settings.all, 572 args: this.stores.settings.all.app,
565 }); 573 });
566 } 574 }
567 575
diff --git a/src/stores/SettingsStore.js b/src/stores/SettingsStore.js
index b7d803398..d8519c609 100644
--- a/src/stores/SettingsStore.js
+++ b/src/stores/SettingsStore.js
@@ -1,12 +1,17 @@
1import { ipcRenderer } from 'electron'; 1import { action, computed, observable } from 'mobx';
2import { action, computed } from 'mobx';
3import localStorage from 'mobx-localstorage'; 2import localStorage from 'mobx-localstorage';
4 3
5import Store from './lib/Store'; 4import Store from './lib/Store';
6import { gaEvent } from '../lib/analytics';
7import SettingsModel from '../models/Settings'; 5import SettingsModel from '../models/Settings';
6import Request from './lib/Request';
7import CachedRequest from './lib/CachedRequest';
8
9const debug = require('debug')('SettingsStore');
8 10
9export default class SettingsStore extends Store { 11export default class SettingsStore extends Store {
12 @observable appSettingsRequest = new CachedRequest(this.api.local, 'getAppSettings');
13 @observable updateAppSettingsRequest = new Request(this.api.local, 'updateAppSettings');
14
10 constructor(...args) { 15 constructor(...args) {
11 super(...args); 16 super(...args);
12 17
@@ -15,36 +20,89 @@ export default class SettingsStore extends Store {
15 this.actions.settings.remove.listen(this._remove.bind(this)); 20 this.actions.settings.remove.listen(this._remove.bind(this));
16 } 21 }
17 22
18 setup() { 23 async setup() {
19 this._shareSettingsWithMainProcess(); 24 // We need to wait until `appSettingsRequest` has been executed once, otherwise we can't patch the result. If we don't wait we'd run into an issue with mobx not reacting to changes of previously not existing keys
25 await this.appSettingsRequest._promise;
26 this._migrate();
20 } 27 }
21 28
22 @computed get all() { 29 @computed get all() {
23 return new SettingsModel(localStorage.getItem('app') || {}); 30 return new SettingsModel({
31 app: this.appSettingsRequest.execute().result || {},
32 service: localStorage.getItem('service') || {},
33 group: localStorage.getItem('group') || {},
34 stats: localStorage.getItem('stats') || {},
35 migration: localStorage.getItem('migration') || {},
36 });
24 } 37 }
25 38
26 @action async _update({ settings }) { 39 @action async _update({ type, data }) {
27 const appSettings = this.all; 40 const appSettings = this.all;
28 localStorage.setItem('app', Object.assign(appSettings, settings)); 41 if (type !== 'app') {
42 debug('Update settings', type, data, this.all);
43 localStorage.setItem(type, Object.assign(appSettings[type], data));
44 } else {
45 debug('Update settings on file system', type, data);
46 this.updateAppSettingsRequest.execute(data);
29 47
30 // We need a little hack to wait until everything is patched 48 this.appSettingsRequest.patch((result) => {
31 setTimeout(() => this._shareSettingsWithMainProcess(), 0); 49 if (!result) return;
32 50 Object.assign(result, data);
33 gaEvent('Settings', 'update'); 51 });
52 }
34 } 53 }
35 54
36 @action async _remove({ key }) { 55 @action async _remove({ type, key }) {
37 const appSettings = this.all; 56 if (type === 'app') return; // app keys can't be deleted
57
58 const appSettings = this.all[type];
38 if (Object.hasOwnProperty.call(appSettings, key)) { 59 if (Object.hasOwnProperty.call(appSettings, key)) {
39 delete appSettings[key]; 60 delete appSettings[key];
40 localStorage.setItem('app', appSettings);
41 }
42 61
43 this._shareSettingsWithMainProcess(); 62 this.actions.settings.update({
63 type,
64 data: appSettings,
65 });
66 }
44 } 67 }
45 68
46 // Reactions 69 // Helper
47 _shareSettingsWithMainProcess() { 70 _migrate() {
48 ipcRenderer.send('settings', this.all); 71 const legacySettings = localStorage.getItem('app');
72
73 if (!this.all.migration['5.0.0-beta.17-settings']) {
74 this.actions.settings.update({
75 type: 'app',
76 data: {
77 autoLaunchInBackground: legacySettings.autoLaunchInBackground,
78 runInBackground: legacySettings.runInBackground,
79 enableSystemTray: legacySettings.enableSystemTray,
80 minimizeToSystemTray: legacySettings.minimizeToSystemTray,
81 isAppMuted: legacySettings.isAppMuted,
82 enableGPUAcceleration: legacySettings.enableGPUAcceleration,
83 showMessageBadgeWhenMuted: legacySettings.showMessageBadgeWhenMuted,
84 showDisabledServices: legacySettings.showDisabledServices,
85 enableSpellchecking: legacySettings.enableSpellchecking,
86 },
87 });
88
89 this.actions.settings.update({
90 type: 'service',
91 data: {
92 activeService: legacySettings.activeService,
93 },
94 });
95
96 this.actions.settings.update({
97 type: 'migration',
98 data: {
99 '5.0.0-beta.17-settings': true,
100 },
101 });
102
103 localStorage.removeItem('app');
104
105 debug('Migrated settings to split stores');
106 }
49 } 107 }
50} 108}
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js
index 5e9cc9ba7..b391bdcae 100644
--- a/src/stores/UIStore.js
+++ b/src/stores/UIStore.js
@@ -17,7 +17,7 @@ export default class UIStore extends Store {
17 @computed get showMessageBadgesEvenWhenMuted() { 17 @computed get showMessageBadgesEvenWhenMuted() {
18 const settings = this.stores.settings.all; 18 const settings = this.stores.settings.all;
19 19
20 return (settings.isAppMuted && settings.showMessageBadgeWhenMuted) || !settings.isAppMuted; 20 return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.isAppMuted;
21 } 21 }
22 22
23 // Actions 23 // Actions
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index 7dbbd955b..574616925 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -9,6 +9,8 @@ import Request from './lib/Request';
9import CachedRequest from './lib/CachedRequest'; 9import CachedRequest from './lib/CachedRequest';
10import { gaEvent } from '../lib/analytics'; 10import { gaEvent } from '../lib/analytics';
11 11
12const debug = require('debug')('UserStore');
13
12// TODO: split stores into UserStore and AuthStore 14// TODO: split stores into UserStore and AuthStore
13export default class UserStore extends Store { 15export default class UserStore extends Store {
14 BASE_ROUTE = '/auth'; 16 BASE_ROUTE = '/auth';
@@ -69,6 +71,11 @@ export default class UserStore extends Store {
69 ]); 71 ]);
70 } 72 }
71 73
74 setup() {
75 // Data migration
76 this._migrateUserLocale();
77 }
78
72 // Routes 79 // Routes
73 get loginRoute() { 80 get loginRoute() {
74 return this.LOGIN_ROUTE; 81 return this.LOGIN_ROUTE;
@@ -256,8 +263,10 @@ export default class UserStore extends Store {
256 263
257 // We need to set the beta flag for the SettingsStore 264 // We need to set the beta flag for the SettingsStore
258 this.actions.settings.update({ 265 this.actions.settings.update({
259 settings: { 266 type: 'app',
267 data: {
260 beta: data.beta, 268 beta: data.beta,
269 locale: data.locale,
261 }, 270 },
262 }); 271 });
263 } 272 }
@@ -292,4 +301,17 @@ export default class UserStore extends Store {
292 this.id = null; 301 this.id = null;
293 } 302 }
294 } 303 }
304
305 async _migrateUserLocale() {
306 await this.getUserInfoRequest._promise;
307
308 if (!this.data.locale) {
309 debug('Migrate "locale" to user data');
310 this.actions.user.update({
311 userData: {
312 locale: this.stores.app.locale,
313 },
314 });
315 }
316 }
295} 317}
diff --git a/src/styles/title-bar.scss b/src/styles/title-bar.scss
index 492245e2f..5316f35b3 100644
--- a/src/styles/title-bar.scss
+++ b/src/styles/title-bar.scss
@@ -32,8 +32,7 @@
32 margin: 4px; 32 margin: 4px;
33 border-radius: $theme-border-radius-small; 33 border-radius: $theme-border-radius-small;
34 } 34 }
35 &.selected { 35 &.selected, &.selected:focus {
36 // background: $theme-brand-primary;
37 background: none; 36 background: none;
38 37
39 .menu-item { 38 .menu-item {
diff --git a/src/webview/plugin.js b/src/webview/plugin.js
index 52b19b3fd..c6530fef6 100644
--- a/src/webview/plugin.js
+++ b/src/webview/plugin.js
@@ -8,6 +8,8 @@ import RecipeWebview from './lib/RecipeWebview';
8import Spellchecker from './spellchecker'; 8import Spellchecker from './spellchecker';
9import './notifications'; 9import './notifications';
10 10
11const debug = require('debug')('Plugin');
12
11ipcRenderer.on('initializeRecipe', (e, data) => { 13ipcRenderer.on('initializeRecipe', (e, data) => {
12 const modulePath = path.join(data.recipe.path, 'webview.js'); 14 const modulePath = path.join(data.recipe.path, 'webview.js');
13 // Delete module from cache 15 // Delete module from cache
@@ -15,8 +17,9 @@ ipcRenderer.on('initializeRecipe', (e, data) => {
15 try { 17 try {
16 // eslint-disable-next-line 18 // eslint-disable-next-line
17 require(modulePath)(new RecipeWebview(), data); 19 require(modulePath)(new RecipeWebview(), data);
20 debug('Initialize Recipe');
18 } catch (err) { 21 } catch (err) {
19 console.error(err); 22 debug('Recipe initialization failed', err);
20 } 23 }
21}); 24});
22 25
@@ -31,6 +34,7 @@ new ContextMenuListener((info) => { // eslint-disable-line
31 34
32ipcRenderer.on('settings-update', (e, data) => { 35ipcRenderer.on('settings-update', (e, data) => {
33 spellchecker.toggleSpellchecker(data.enableSpellchecking); 36 spellchecker.toggleSpellchecker(data.enableSpellchecking);
37 debug('Settings update received', data);
34}); 38});
35 39
36// initSpellche 40// initSpellche