aboutsummaryrefslogtreecommitdiff
path: root/src/components/interface_language_switcher/interface_language_switcher.vue
diff options
context:
space:
mode:
authorTusooa Zhu <tusooa@kazv.moe>2022-07-25 15:38:05 -0400
committertusooa <tusooa@kazv.moe>2022-12-23 22:45:55 -0500
commitb7e93739656d225ed0a8854f357746b5291b6857 (patch)
tree21f22ec2ae9cf2649e2a0c8039b5db3643dfcef6 /src/components/interface_language_switcher/interface_language_switcher.vue
parent25e628efe265db583797fe1c10fdcab2f0d9cc9d (diff)
Add support for multiple interface languages
Diffstat (limited to 'src/components/interface_language_switcher/interface_language_switcher.vue')
-rw-r--r--src/components/interface_language_switcher/interface_language_switcher.vue75
1 files changed, 59 insertions, 16 deletions
diff --git a/src/components/interface_language_switcher/interface_language_switcher.vue b/src/components/interface_language_switcher/interface_language_switcher.vue
index 6997f149..e18a2a12 100644
--- a/src/components/interface_language_switcher/interface_language_switcher.vue
+++ b/src/components/interface_language_switcher/interface_language_switcher.vue
@@ -1,21 +1,39 @@
<template>
- <div>
- <label for="interface-language-switcher">
+ <div class="interface-language-switcher">
+ <label>
{{ promptText }}
</label>
- {{ ' ' }}
- <Select
- id="interface-language-switcher"
- v-model="controlledLanguage"
- >
- <option
- v-for="lang in languages"
- :key="lang.code"
- :value="lang.code"
+ <ol>
+ <li
+ v-for="index of controlledLanguage.keys()"
+ :key="index"
>
- {{ lang.name }}
- </option>
- </Select>
+ <Select
+ class="language-select"
+ :model-value="controlledLanguage[index]"
+ @update:modelValue="val => setLanguageAt(index, val)"
+ >
+ <option
+ v-for="lang in languages"
+ :key="lang.code"
+ :value="lang.code"
+ >
+ {{ lang.name }}
+ </option>
+ </Select>
+ <button
+ v-if="controlledLanguage.length > 1"
+ class="button-default btn"
+ @click="() => removeLanguageAt(index)"
+ >{{ $t('settings.remove_language') }}</button>
+ </li>
+ <li>
+ <button
+ class="button-default btn"
+ @click="addLanguage"
+ >{{ $t('settings.add_language') }}</button>
+ </li>
+ </ol>
</div>
</template>
@@ -34,7 +52,7 @@ export default {
required: true
},
language: {
- type: String,
+ type: [Array, String],
required: true
},
setLanguage: {
@@ -48,7 +66,9 @@ export default {
},
controlledLanguage: {
- get: function () { return this.language },
+ get: function () {
+ return Array.isArray(this.language) ? this.language : [this.language]
+ },
set: function (val) {
this.setLanguage(val)
}
@@ -58,7 +78,30 @@ export default {
methods: {
getLanguageName (code) {
return localeService.getLanguageName(code)
+ },
+ addLanguage () {
+ this.controlledLanguage = [...this.controlledLanguage, '']
+ },
+ setLanguageAt (index, val) {
+ const lang = [...this.controlledLanguage]
+ lang[index] = val
+ this.controlledLanguage = lang
+ },
+ removeLanguageAt (index) {
+ const lang = [...this.controlledLanguage]
+ lang.splice(index, 1)
+ this.controlledLanguage = lang
}
}
}
</script>
+
+<style lang="scss">
+@import '../../_variables.scss';
+
+.interface-language-switcher {
+ .language-select {
+ margin-right: 1em;
+ }
+}
+</style>