From 9c45082524278c5af8435ccd66d53a6528baa7eb Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Mon, 13 Aug 2018 23:48:13 +0900 Subject: [PATCH] refs #151 Switch language in preferences --- src/config/locales/en/translation.json | 4 + src/config/locales/ja/translation.json | 4 + src/constants/language.js | 10 +++ src/main/index.js | 31 ++++++++ src/main/preferences.js | 4 + src/renderer/App.vue | 3 + src/renderer/components/Preferences.vue | 7 ++ .../components/Preferences/Language.vue | 75 +++++++++++++++++++ src/renderer/router/index.js | 5 ++ src/renderer/store/App.js | 22 +++--- src/renderer/store/Preferences.js | 4 +- src/renderer/store/Preferences/Language.js | 41 ++++++++++ 12 files changed, 200 insertions(+), 10 deletions(-) create mode 100644 src/constants/language.js create mode 100644 src/renderer/components/Preferences/Language.vue create mode 100644 src/renderer/store/Preferences/Language.js diff --git a/src/config/locales/en/translation.json b/src/config/locales/en/translation.json index 4c594c95..95076e83 100644 --- a/src/config/locales/en/translation.json +++ b/src/config/locales/en/translation.json @@ -102,6 +102,10 @@ "confirm": "Confirm", "cancel": "Cancel", "confirm_message": "Are you sure to remove all associations?" + }, + "language": { + "title": "Language", + "display_language": "language" } }, "modals": { diff --git a/src/config/locales/ja/translation.json b/src/config/locales/ja/translation.json index 66656ccc..36b9be78 100644 --- a/src/config/locales/ja/translation.json +++ b/src/config/locales/ja/translation.json @@ -102,6 +102,10 @@ "confirm": "確認", "cancel": "キャンセル", "confirm_message": "本当に全ての連携を削除しますか?" + }, + "language": { + "title": "言語", + "display_language": "表示言語" } }, "modals": { diff --git a/src/constants/language.js b/src/constants/language.js new file mode 100644 index 00000000..a658d67f --- /dev/null +++ b/src/constants/language.js @@ -0,0 +1,10 @@ +export default { + en: { + name: 'English', + key: 'en' + }, + ja: { + name: '日本語', + key: 'ja' + } +} diff --git a/src/main/index.js b/src/main/index.js index 6fa7c10b..5473c480 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -17,6 +17,7 @@ import Streaming from './streaming' import Preferences from './preferences' import Hashtags from './hashtags' import i18n from '../config/i18n' +import Language from '../constants/language' /** * Context menu @@ -96,6 +97,16 @@ async function changeAccount (account, index) { } } +async function getLanguage () { + try { + const preferences = new Preferences(preferencesDBPath) + const conf = await preferences.load() + return conf.language.language + } catch (err) { + return Language.en.key + } +} + async function createWindow () { /** * List accounts @@ -109,6 +120,12 @@ async function createWindow () { } }) + /** + * Get language + */ + const language = await getLanguage() + i18n.changeLanguage(language) + /** * Set application menu */ @@ -593,6 +610,20 @@ ipcMain.on('get-collapse', (event, _) => { }) }) +ipcMain.on('change-language', (event, value) => { + const preferences = new Preferences(preferencesDBPath) + preferences.update( + { + language: { + language: value + } + }) + .then((conf) => { + i18n.changeLanguage(conf.language.language) + event.sender.send('response-change-language', conf.language.language) + }) +}) + // hashtag ipcMain.on('save-hashtag', (event, tag) => { const hashtags = new Hashtags(hashtagsDB) diff --git a/src/main/preferences.js b/src/main/preferences.js index e6e9fba2..cde25d33 100644 --- a/src/main/preferences.js +++ b/src/main/preferences.js @@ -3,6 +3,7 @@ import objectAssignDeep from 'object-assign-deep' import Visibility from '../constants/visibility' import DisplayStyle from '../constants/displayStyle' import Theme from '../constants/theme' +import Language from '../constants/language' const Base = { general: { @@ -17,6 +18,9 @@ const Base = { }, state: { collapse: false + }, + language: { + language: Language.en.key } } diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 5eae1d5b..9d18baaf 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -31,6 +31,9 @@ export default { created () { this.$store.dispatch('App/watchShortcutsEvents') this.$store.dispatch('App/loadPreferences') + .then((conf) => { + this.$i18n.i18next.changeLanguage(conf.language.language) + }) }, destroyed () { this.$store.dispatch('App/removeShortcutsEvents') diff --git a/src/renderer/components/Preferences.vue b/src/renderer/components/Preferences.vue index 383b8cab..d271d35b 100644 --- a/src/renderer/components/Preferences.vue +++ b/src/renderer/components/Preferences.vue @@ -26,6 +26,10 @@ {{ $t('preferences.account.title') }} + + + {{ $t('preferences.language.title') }} + @@ -56,6 +60,9 @@ export default { }, account () { this.$router.push('/preferences/account') + }, + language () { + this.$router.push('/preferences/language') } } } diff --git a/src/renderer/components/Preferences/Language.vue b/src/renderer/components/Preferences/Language.vue new file mode 100644 index 00000000..1696d4a6 --- /dev/null +++ b/src/renderer/components/Preferences/Language.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/renderer/router/index.js b/src/renderer/router/index.js index 1c3c345e..332db7ac 100644 --- a/src/renderer/router/index.js +++ b/src/renderer/router/index.js @@ -30,6 +30,11 @@ export default new Router({ path: 'account', name: 'account', component: require('@/components/Preferences/Account').default + }, + { + path: 'language', + name: 'language', + component: require('@/components/Preferences/Language').default } ] }, diff --git a/src/renderer/store/App.js b/src/renderer/store/App.js index bf32e74b..1ea357d6 100644 --- a/src/renderer/store/App.js +++ b/src/renderer/store/App.js @@ -44,15 +44,19 @@ const App = { ipcRenderer.removeAllListeners('open-preferences') }, loadPreferences ({ commit }) { - ipcRenderer.send('get-preferences') - ipcRenderer.once('error-get-preferences', (event, err) => { - ipcRenderer.removeAllListeners('response-get-preferences') - }) - ipcRenderer.once('response-get-preferences', (event, conf) => { - ipcRenderer.removeAllListeners('error-get-preferences') - commit('updateTheme', conf.general.theme) - commit('updateDisplayNameStyle', conf.general.displayNameStyle) - commit('updateFontSize', conf.general.fontSize) + return new Promise((resolve, reject) => { + ipcRenderer.send('get-preferences') + ipcRenderer.once('error-get-preferences', (event, err) => { + ipcRenderer.removeAllListeners('response-get-preferences') + reject(err) + }) + ipcRenderer.once('response-get-preferences', (event, conf) => { + ipcRenderer.removeAllListeners('error-get-preferences') + commit('updateTheme', conf.general.theme) + commit('updateDisplayNameStyle', conf.general.displayNameStyle) + commit('updateFontSize', conf.general.fontSize) + resolve(conf) + }) }) } } diff --git a/src/renderer/store/Preferences.js b/src/renderer/store/Preferences.js index c9936a7c..3f11027a 100644 --- a/src/renderer/store/Preferences.js +++ b/src/renderer/store/Preferences.js @@ -1,11 +1,13 @@ import General from './Preferences/General' import Account from './Preferences/Account' +import Language from './Preferences/Language' const Preferences = { namespaced: true, modules: { General, - Account + Account, + Language }, state: { defaultActive: '1' diff --git a/src/renderer/store/Preferences/Language.js b/src/renderer/store/Preferences/Language.js new file mode 100644 index 00000000..e3e04a59 --- /dev/null +++ b/src/renderer/store/Preferences/Language.js @@ -0,0 +1,41 @@ +import { ipcRenderer } from 'electron' +import Language from '~/src/constants/language' + +export default { + namespaced: true, + state: { + language: { + language: Language.en.key + } + }, + mutations: { + updateLanguage (state, conf) { + state.language = conf + }, + changeLanguage (state, key) { + state.language.language = key + } + }, + actions: { + loadLanguage ({ commit }) { + return new Promise((resolve, reject) => { + ipcRenderer.send('get-preferences') + ipcRenderer.once('error-get-preferences', (event, err) => { + ipcRenderer.removeAllListeners('response-get-preferences') + reject(err) + }) + ipcRenderer.once('response-get-preferences', (event, conf) => { + ipcRenderer.removeAllListeners('error-get-preferences') + commit('updateLanguage', conf.language) + resolve(conf) + }) + }) + }, + changeLanguage ({ commit }, key) { + ipcRenderer.send('change-language', key) + ipcRenderer.once('response-change-language', (event, value) => { + commit('changeLanguage', value) + }) + } + } +}