diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/app/common/views/components/language-settings.vue | 54 | ||||
| -rw-r--r-- | src/client/app/desktop/views/components/settings.vue | 36 | ||||
| -rw-r--r-- | src/client/app/mobile/views/pages/settings.vue | 38 |
3 files changed, 62 insertions, 66 deletions
diff --git a/src/client/app/common/views/components/language-settings.vue b/src/client/app/common/views/components/language-settings.vue new file mode 100644 index 0000000000..aa3f290511 --- /dev/null +++ b/src/client/app/common/views/components/language-settings.vue @@ -0,0 +1,54 @@ +<template> +<ui-card> + <div slot="title"><fa icon="language"/> {{ $t('title') }}</div> + + <section class="fit-top"> + <ui-select v-model="lang" :placeholder="$t('pick-language')"> + <optgroup :label="$t('recommended')"> + <option value="">{{ $t('auto') }}</option> + </optgroup> + + <optgroup :label="$t('specify-language')"> + <option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option> + </optgroup> + </ui-select> + <ui-info>Current: <i>{{ currentLanguage }}</i></ui-info> + <ui-info warn>{{ $t('info') }}</ui-info> + </section> +</ui-card> +</template> + +<script lang="ts"> +import Vue from 'vue'; +import i18n from '../../../i18n'; +import { langs } from '../../../config'; + +export default Vue.extend({ + i18n: i18n('common/views/components/language-settings.vue'), + + data() { + return { + langs, + currentLanguage: 'Unknown', + }; + }, + + computed: { + lang: { + get() { return this.$store.state.device.lang; }, + set(value) { this.$store.commit('device/set', { key: 'lang', value }); } + }, + }, + + created() { + try { + const locale = JSON.parse(localStorage.getItem('locale') || "{}"); + const localeKey = localStorage.getItem('localeKey'); + this.currentLanguage = `${locale.meta.lang} (${localeKey})`; + } catch { } + }, + + methods: { + } +}); +</script> diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue index 39145bdb04..a89982eea4 100644 --- a/src/client/app/desktop/views/components/settings.vue +++ b/src/client/app/desktop/views/components/settings.vue @@ -169,24 +169,7 @@ </section> </ui-card> - <ui-card class="web" v-show="page == 'web'"> - <div slot="title"><fa icon="language"/> {{ $t('language') }}</div> - <section class="fit-top"> - <ui-select v-model="lang" :placeholder="$t('pick-language')"> - <optgroup :label="$t('recommended')"> - <option value="">{{ $t('auto') }}</option> - </optgroup> - - <optgroup :label="$t('specify-language')"> - <option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option> - </optgroup> - </ui-select> - <div class="none ui info"> - <div>Current: <i>{{ this.currentLanguage }}</i></div> - <p><fa icon="info-circle"/>{{ $t('language-desc') }}</p> - </div> - </section> - </ui-card> + <x-language-settings/> <ui-card class="web" v-show="page == 'web'"> <div slot="title"><fa :icon="['far', 'trash-alt']"/> {{ $t('cache') }}</div> @@ -318,8 +301,9 @@ import XMuteAndBlock from '../../../common/views/components/mute-and-block.vue'; import XPasswordSettings from '../../../common/views/components/password-settings.vue'; import XProfileEditor from '../../../common/views/components/profile-editor.vue'; import XApiSettings from '../../../common/views/components/api-settings.vue'; +import XLanguageSettings from '../../../common/views/components/language-settings.vue'; -import { url, langs, clientVersion as version } from '../../../config'; +import { url, clientVersion as version } from '../../../config'; import checkForUpdate from '../../../common/scripts/check-for-update'; export default Vue.extend({ @@ -338,6 +322,7 @@ export default Vue.extend({ XPasswordSettings, XProfileEditor, XApiSettings, + XLanguageSettings, }, props: { initialPage: { @@ -350,8 +335,6 @@ export default Vue.extend({ page: this.initialPage || 'profile', meta: null, version, - langs, - currentLanguage: 'Unknown', latestVersion: undefined, checkingForUpdate: false }; @@ -412,11 +395,6 @@ export default Vue.extend({ set(value) { this.$store.commit('device/set', { key: 'soundVolume', value }); } }, - lang: { - get() { return this.$store.state.device.lang; }, - set(value) { this.$store.commit('device/set', { key: 'lang', value }); } - }, - preventUpdate: { get() { return this.$store.state.device.preventUpdate; }, set(value) { this.$store.commit('device/set', { key: 'preventUpdate', value }); } @@ -556,12 +534,6 @@ export default Vue.extend({ this.$root.getMeta().then(meta => { this.meta = meta; }); - - try { - const locale = JSON.parse(localStorage.getItem('locale') || "{}"); - const localeKey = localStorage.getItem('localeKey'); - this.currentLanguage = `${locale.meta.lang} (${localeKey})`; - } catch { } }, methods: { readAllUnreadNotes() { diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue index ff4475242e..de881af3ba 100644 --- a/src/client/app/mobile/views/pages/settings.vue +++ b/src/client/app/mobile/views/pages/settings.vue @@ -105,23 +105,7 @@ </section> </ui-card> - <ui-card> - <div slot="title"><fa icon="language"/> {{ $t('lang') }}</div> - - <section class="fit-top"> - <ui-select v-model="lang" :placeholder="$t('auto')"> - <optgroup :label="$t('recommended')"> - <option value="">{{ $t('auto') }}</option> - </optgroup> - - <optgroup :label="$t('specify-language')"> - <option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option> - </optgroup> - </ui-select> - <div>Current: <i>{{ this.currentLanguage }}</i></div> - <p><fa icon="info-circle"/> {{ $t('lang-tip') }}</p> - </section> - </ui-card> + <x-language-settings/> <ui-card> <div slot="title"><fa :icon="['fab', 'twitter']"/> {{ $t('twitter') }}</div> @@ -199,7 +183,7 @@ <script lang="ts"> import Vue from 'vue'; import i18n from '../../../i18n'; -import { apiUrl, clientVersion as version, codename, langs } from '../../../config'; +import { apiUrl, clientVersion as version, codename } from '../../../config'; import checkForUpdate from '../../../common/scripts/check-for-update'; import XTheme from '../../../common/views/components/theme.vue'; import XDriveSettings from '../../../common/views/components/drive-settings.vue'; @@ -207,6 +191,7 @@ import XMuteAndBlock from '../../../common/views/components/mute-and-block.vue'; import XPasswordSettings from '../../../common/views/components/password-settings.vue'; import XProfileEditor from '../../../common/views/components/profile-editor.vue'; import XApiSettings from '../../../common/views/components/api-settings.vue'; +import XLanguageSettings from '../../../common/views/components/language-settings.vue'; export default Vue.extend({ i18n: i18n('mobile/views/pages/settings.vue'), @@ -218,6 +203,7 @@ export default Vue.extend({ XPasswordSettings, XProfileEditor, XApiSettings, + XLanguageSettings, }, data() { @@ -225,8 +211,6 @@ export default Vue.extend({ apiUrl, version, codename, - langs, - currentLanguage: 'Unknown', latestVersion: undefined, checkingForUpdate: false }; @@ -277,11 +261,6 @@ export default Vue.extend({ set(value) { this.$store.commit('device/set', { key: 'loadRawImages', value }); } }, - lang: { - get() { return this.$store.state.device.lang; }, - set(value) { this.$store.commit('device/set', { key: 'lang', value }); } - }, - enableSounds: { get() { return this.$store.state.device.enableSounds; }, set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); } @@ -327,7 +306,6 @@ export default Vue.extend({ set(value) { this.$store.dispatch('settings/set', { key: 'showVia', value }); } }, - iLikeSushi: { get() { return this.$store.state.settings.iLikeSushi; }, set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); } @@ -379,14 +357,6 @@ export default Vue.extend({ }, }, - created() { - try { - const locale = JSON.parse(localStorage.getItem('locale') || "{}"); - const localeKey = localStorage.getItem('localeKey'); - this.currentLanguage = `${locale.meta.lang} (${localeKey})`; - } catch { } - }, - mounted() { document.title = this.$t('settings'); }, |