国际化扩展使用

# 国际化扩展使用

# 说明

i18n基础上扩展了国际化的使用,可结合系统设置中多平台语言功能,动态配置切换语言,不在受限于单一的本地配置

# 注意事项

  • 动态配置的语言一般是和页面对应, 所以页面上也需要把 ThPageLangMixin.js 挂载到组件mixin中,且当前页需要在data中定义pageLangKeys属性,值为多语言平台中模板代码的值
  • 请不要使用el. sys. 开头,el为element-ui组件插件, sys为系统预设

# $lang(key: string, params: object, defaultText: string) 参数

  • 第1个参数为key,多层时通过获取, 例: $lang('sys.navbar.workbench')
  • 第2个参数为动态模板变量对应的值,可以把动态模板中配置的{?}替换为params值. 例: $lang('sys.navbar.workbench', {name: '王五', age: '18''}) ; sys.navbar.workbench假设配置为 '{name}今年{age}了',那显示文字为 王五今年18了
  • 第3个参数为模版变量未匹配到对应params中值时,将会使用defaultText当做默认值,如不填则为空字符串

# 示例 (示例中使用的key需要本地或动态配置已存在)

<template>
  <div class="p20">
    <th-filter>
      <template #left>
        <el-button type="primary" @click="onClickBtn('add')">{{ $lang('sys.common.add') }}</el-button>
      </template>

      <template #right>
        <el-input v-model="queryParam.promptKey" :placeholder="$lang('promptKey.common.param1')" maxlength="100" @keyup.enter.native="loadData(1)" />
        <el-input v-model="queryParam.promptCode" :placeholder="$lang('promptKey.common.param2')" maxlength="100" @keyup.enter.native="loadData(1)" />
        <el-input v-model="queryParam.description" :placeholder="$lang('promptKey.common.param3')" maxlength="120" @keyup.enter.native="loadData(1)" />
        <el-button class="ml10" type="primary" @click="searchQuery()">{{ $lang('sys.common.search') }}</el-button>
        <el-button @click="searchReset()">{{ $lang('sys.common.reset') }}</el-button>
      </template>
    </th-filter>

    <el-table
        v-loading="listLoading"
        :data="dataSource"
        border
        fit
        highlight-current-row
        header-row-class-name="base-table-header"
    >
      <el-table-column prop="promptKey" :label="$lang('promptKey.common.param4')" min-width="200" show-overflow-tooltip />
      <el-table-column prop="promptCode" :label="$lang('promptKey.common.param5')" min-width="300" show-overflow-tooltip />
      <el-table-column prop="description" :label="$lang('promptKey.common.param6')" min-width="300" show-overflow-tooltip />
      <el-table-column prop="origin" :label="$lang('promptKey.common.param7')" width="200" align="center">
        <template slot-scope="{row}">
          <el-tag :type="row.enableCustom === 1 ? 'success' : ''">{{ row.origin }}</el-tag>
        </template>
      </el-table-column>
      <el-table-column :label="c" width="200" align="center">
        <template slot-scope="{row}">
          <el-button type="text" @click="onClickBtn('edit', row)">{{ $lang('sys.common.edit') }}</el-button>
          <el-button type="text" @click="onClickBtn('del', row)">{{ $lang('sys.common.del') }}</el-button>
        </template>
      </el-table-column>
    </el-table>

    <th-pagination :total="ipagination.total" :current.sync="ipagination.current" :page-size.sync="ipagination.pageSize" @pagination="loadData" />
  </div>
</template>

<script>
import { thListMixin } from '@/mixins/ThListMixin'
import { thPageLangMixin } from '@/mixins/ThPageLangMixin'

export default {
  name: 'PlatformMultilingual',
  mixins: [thListMixin, thPageLangMixin],
  data() {
    return {
      pageLangKeys: 'sysParamsPlatform',
      url: {
        list: '/authen/sys/langue/page',
        del: '/authen/sys/langue/del'
      }
    }
  },
  methods: {
    onClickBtn (type, row) {
      switch (type) {
        case 'add':
        case 'edit':
          this.$refs.refEdit.show(type, row)
          break

        case 'del':
          this.delFn(row.promptId)
          break
      }
    },
    delFn (promptId) {
      //  this.$lang('sys.common.del.msg', {prefix: '再次'})
      //  '{prefix}提醒您,确定删除吗?'     {prefix: '再次'}
      //  '再次提醒您,确定删除吗?'          {prefix: '再次'}
      this.$api.confirm(this.$lang('sys.common.del.msg', {prefix: '再次'})).then(() => {
        return this.$http.post(this.url.del, { promptId })
      }).then((res) => {
        this.$api.toast(res.msg)
        this.loadData()
      })
    }
  }
}
</script>