|
@@ -6,7 +6,7 @@
|
|
|
{{ ' ' }}
|
|
|
<Select
|
|
|
id="interface-language-switcher"
|
|
|
- v-model="language"
|
|
|
+ v-model="controlledLanguage"
|
|
|
>
|
|
|
<option
|
|
|
v-for="lang in languages"
|
|
@@ -20,39 +20,33 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import languagesObject from '../../i18n/messages'
|
|
|
import localeService from '../../services/locale/locale.service.js'
|
|
|
-import ISO6391 from 'iso-639-1'
|
|
|
-import _ from 'lodash'
|
|
|
import Select from '../select/select.vue'
|
|
|
|
|
|
export default {
|
|
|
components: {
|
|
|
Select
|
|
|
},
|
|
|
+ props: {
|
|
|
+ language: String,
|
|
|
+ setLanguage: Function
|
|
|
+ },
|
|
|
computed: {
|
|
|
languages () {
|
|
|
- return _.map(languagesObject.languages, (code) => ({ code: code, name: this.getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name))
|
|
|
+ return localeService.languages
|
|
|
},
|
|
|
|
|
|
- language: {
|
|
|
- get: function () { return this.$store.getters.mergedConfig.interfaceLanguage },
|
|
|
+ controlledLanguage: {
|
|
|
+ get: function () { return this.language },
|
|
|
set: function (val) {
|
|
|
- this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })
|
|
|
+ this.setLanguage(val)
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
getLanguageName (code) {
|
|
|
- const specialLanguageNames = {
|
|
|
- 'ja_easy': 'やさしいにほんご',
|
|
|
- 'zh': '简体中文',
|
|
|
- 'zh_Hant': '繁體中文'
|
|
|
- }
|
|
|
- const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code)
|
|
|
- const browserLocale = localeService.internalToBrowserLocale(code)
|
|
|
- return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1)
|
|
|
+ return localeService.getLanguageName(code)
|
|
|
}
|
|
|
}
|
|
|
}
|