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 @@
+
+
+
{{ $t('preferences.language.title') }}
+
+
+
+
+ {{ $t('preferences.language.display_language') }} |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
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)
+ })
+ }
+ }
+}