|
@@ -11,12 +11,12 @@
|
|
|
<span class="title">多语言</span>
|
|
|
<ul class="lang-list">
|
|
|
<li
|
|
|
- v-for="{ code } in selectedLangList"
|
|
|
- :key="code"
|
|
|
- :class="['lang-item', { active: curLang === code }]"
|
|
|
- @click="curLang = code"
|
|
|
+ v-for="{ type } in selectedLangList"
|
|
|
+ :key="type"
|
|
|
+ :class="['lang-item', { active: curLang === type }]"
|
|
|
+ @click="curLang = type"
|
|
|
>
|
|
|
- {{ langList.find((item) => item.code === code).name }}
|
|
|
+ {{ langList.find((item) => item.type === type).name }}
|
|
|
</li>
|
|
|
<li class="lang-item" @click="showAddLang">
|
|
|
<i class="el-icon-plus"></i>
|
|
@@ -44,8 +44,8 @@
|
|
|
<div v-show="isShowOriginal" class="original-text" v-html="sanitizeHTML(text)"></div>
|
|
|
<el-input
|
|
|
v-for="lang in selectedLangList"
|
|
|
- v-show="curLang === lang.code"
|
|
|
- :key="lang.code"
|
|
|
+ v-show="curLang === lang.type"
|
|
|
+ :key="lang.type"
|
|
|
v-model="lang.translation"
|
|
|
type="textarea"
|
|
|
:rows="27"
|
|
@@ -63,7 +63,6 @@
|
|
|
<script>
|
|
|
import UpdateLang from './UpdateLang.vue';
|
|
|
|
|
|
-import { langList } from '@/views/book/courseware/data/common';
|
|
|
import { sanitizeHTML } from '@/utils/common';
|
|
|
|
|
|
export default {
|
|
@@ -71,6 +70,7 @@ export default {
|
|
|
components: {
|
|
|
UpdateLang,
|
|
|
},
|
|
|
+ inject: ['getLangList'],
|
|
|
props: {
|
|
|
visible: {
|
|
|
type: Boolean,
|
|
@@ -87,20 +87,11 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- langList,
|
|
|
+ langList: [],
|
|
|
sanitizeHTML,
|
|
|
- selectedLangList: [
|
|
|
- { code: 'en', translation: '' },
|
|
|
- { code: 'fr', translation: '' },
|
|
|
- { code: 'de', translation: '' },
|
|
|
- { code: 'es', translation: '' },
|
|
|
- { code: 'it', translation: '' },
|
|
|
- { code: 'pt', translation: '' },
|
|
|
- { code: 'ko', translation: '' },
|
|
|
- { code: 'ja', translation: '' },
|
|
|
- ],
|
|
|
- noSelectedLangList: ['ru', 'ar', 'tr', 'nl', 'pl', 'sv', 'el'],
|
|
|
- curLang: 'en',
|
|
|
+ selectedLangList: [],
|
|
|
+ noSelectedLangList: [],
|
|
|
+ curLang: 'EN',
|
|
|
isShowOriginal: true, // 是否显示原文
|
|
|
langVisible: false,
|
|
|
};
|
|
@@ -109,8 +100,8 @@ export default {
|
|
|
translations: {
|
|
|
handler(newVal) {
|
|
|
if (!newVal || !Array.isArray(newVal) || newVal.length === 0) return;
|
|
|
- this.selectedLangList = newVal.map(({ code, translation }) => ({
|
|
|
- code,
|
|
|
+ this.selectedLangList = newVal.map(({ type, translation }) => ({
|
|
|
+ type,
|
|
|
translation,
|
|
|
}));
|
|
|
},
|
|
@@ -120,13 +111,16 @@ export default {
|
|
|
handler(newVal) {
|
|
|
if (!newVal && this.selectedLangList.length > 0) {
|
|
|
this.selectedLangList = this.selectedLangList.map((item) => ({
|
|
|
- code: item.code,
|
|
|
+ type: item.type,
|
|
|
translation: '',
|
|
|
}));
|
|
|
}
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
+ created() {
|
|
|
+ this.init();
|
|
|
+ },
|
|
|
methods: {
|
|
|
closeDialog() {
|
|
|
this.$emit('update:visible', false);
|
|
@@ -134,17 +128,28 @@ export default {
|
|
|
showAddLang() {
|
|
|
this.langVisible = true;
|
|
|
},
|
|
|
+ init() {
|
|
|
+ this.langList = this.getLangList();
|
|
|
+ if (this.translations.length === 0) {
|
|
|
+ this.selectedLangList = this.langList
|
|
|
+ .filter((item) => item.type !== 'ZH')
|
|
|
+ .map((item) => ({ type: item.type, translation: '' }));
|
|
|
+ }
|
|
|
+ if (this.selectedLangList.length > 0) {
|
|
|
+ this.curLang = this.selectedLangList[0]?.type || 'EN';
|
|
|
+ }
|
|
|
+ },
|
|
|
/**
|
|
|
* 处理语言更新
|
|
|
* @param {Array} langs
|
|
|
*/
|
|
|
handleUpdateLangs(langs) {
|
|
|
- const newLangs = langs.filter((item) => !this.selectedLangList.map((i) => i.code).includes(item));
|
|
|
- const removedLangs = this.selectedLangList.map((i) => i.code).filter((item) => !langs.includes(item));
|
|
|
+ const newLangs = langs.filter((item) => !this.selectedLangList.map((i) => i.type).includes(item));
|
|
|
+ const removedLangs = this.selectedLangList.map((i) => i.type).filter((item) => !langs.includes(item));
|
|
|
|
|
|
this.selectedLangList = [
|
|
|
- ...this.selectedLangList.filter((item) => !removedLangs.includes(item.code)),
|
|
|
- ...newLangs.map((item) => ({ code: item, translation: '' })),
|
|
|
+ ...this.selectedLangList.filter((item) => !removedLangs.includes(item.type)),
|
|
|
+ ...newLangs.map((item) => ({ type: item, translation: '' })),
|
|
|
];
|
|
|
},
|
|
|
submitTranslation() {
|