datai-vue/docs/api-docs/2026-01-26-002-03-api.md

9.3 KiB
Raw Permalink Blame History

API 文档:前端国际化-动态资源

元数据

  • 需求编号2026-01-26-002-03
  • 需求名称:前端国际化-动态资源
  • 创建时间2026-01-26
  • 创建人SSOT 架构师
  • 状态:已完成

API 概述

本文档描述了前端国际化-动态资源功能涉及的 API 接口,包括查询语言列表、获取当前语言偏好、更新用户语言偏好、查询国际化资源列表等接口。这些接口用于实现前端与后端国际化接口的深度对接,包括动态获取系统支持的语言列表、登录后自动同步并应用用户的语言偏好、实现远程翻译资源的加载、合并与缓存策略,以及实现动态菜单国际化。

接口列表

接口 1查询语言列表

功能描述

查询系统支持的语言列表,用于动态生成语言选择器的下拉选项。

请求方式

GET

请求路径

/system/language/list

请求参数

参数名 类型 必填 说明
pageNum Number 页码,默认 1
pageSize Number 每页条数,默认 10
langCode String 语言代码(后端格式,如 zh_CN
langName String 语言名称(如 简体中文)
status String 状态0 正常1 停用)

响应参数

参数名 类型 说明
code Number 状态码200 成功,其他失败)
msg String 提示信息
rows Array 语言列表数据
rows[].id Number 语言 ID
rows[].langCode String 语言代码(后端格式,如 zh_CN
rows[].langName String 语言名称(如 简体中文)
rows[].status String 状态0 正常1 停用)
rows[].createTime String 创建时间
rows[].updateTime String 更新时间
total Number 总记录数

成功示例

{
  "code": 200,
  "msg": "查询成功",
  "rows": [
    {
      "id": 1,
      "langCode": "zh_CN",
      "langName": "简体中文",
      "status": "0",
      "createTime": "2026-01-26 10:00:00",
      "updateTime": "2026-01-26 10:00:00"
    },
    {
      "id": 2,
      "langCode": "en_US",
      "langName": "English",
      "status": "0",
      "createTime": "2026-01-26 10:00:00",
      "updateTime": "2026-01-26 10:00:00"
    }
  ],
  "total": 2
}

失败示例

{
  "code": 500,
  "msg": "查询失败"
}

错误码

错误码 说明
500 查询失败

接口 2获取当前语言偏好

功能描述

获取当前登录用户的语言偏好,用于登录后自动同步并应用用户的语言偏好。

请求方式

GET

请求路径

/system/i18n/currentLocale

请求参数

响应参数

参数名 类型 说明
code Number 状态码200 成功,其他失败)
msg String 提示信息
data Object 语言偏好数据
data.langCode String 语言代码(后端格式,如 zh_CN

成功示例

{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "langCode": "zh_CN"
  }
}

失败示例

{
  "code": 500,
  "msg": "查询失败"
}

错误码

错误码 说明
401 用户未登录
500 查询失败

接口 3更新用户语言偏好

功能描述

更新当前登录用户的语言偏好,用于用户切换语言时同步到后端。

请求方式

PUT

请求路径

/system/i18n/updateLocale

请求参数

参数名 类型 必填 说明
langCode String 语言代码(后端格式,如 zh_CN

请求示例

{
  "langCode": "zh_CN"
}

响应参数

参数名 类型 说明
code Number 状态码200 成功,其他失败)
msg String 提示信息

成功示例

{
  "code": 200,
  "msg": "更新成功"
}

失败示例

{
  "code": 500,
  "msg": "更新失败"
}

错误码

错误码 说明
401 用户未登录
500 更新失败

接口 4查询国际化资源列表

功能描述

查询指定语言的国际化资源列表,用于远程加载翻译资源。

请求方式

GET

请求路径

/system/i18nresource/list

请求参数

参数名 类型 必填 说明
pageNum Number 页码,默认 1
pageSize Number 每页条数,默认 10
langCode String 语言代码(后端格式,如 zh_CN
moduleName String 模块名称(如 common、layout、login
resourceKey String 资源键(如 login.button.login
resourceValue String 资源值(如 登录)

响应参数

参数名 类型 说明
code Number 状态码200 成功,其他失败)
msg String 提示信息
rows Array 国际化资源列表数据
rows[].id Number 资源 ID
rows[].langCode String 语言代码(后端格式,如 zh_CN
rows[].moduleName String 模块名称(如 common、layout、login
rows[].resourceKey String 资源键(如 login.button.login
rows[].resourceValue String 资源值(如 登录)
rows[].createTime String 创建时间
rows[].updateTime String 更新时间
total Number 总记录数

成功示例

{
  "code": 200,
  "msg": "查询成功",
  "rows": [
    {
      "id": 1,
      "langCode": "zh_CN",
      "moduleName": "common",
      "resourceKey": "common.ok",
      "resourceValue": "确定",
      "createTime": "2026-01-26 10:00:00",
      "updateTime": "2026-01-26 10:00:00"
    },
    {
      "id": 2,
      "langCode": "zh_CN",
      "moduleName": "login",
      "resourceKey": "login.button.login",
      "resourceValue": "登录",
      "createTime": "2026-01-26 10:00:00",
      "updateTime": "2026-01-26 10:00:00"
    }
  ],
  "total": 2
}

失败示例

{
  "code": 500,
  "msg": "查询失败"
}

错误码

错误码 说明
500 查询失败

错误码汇总

错误码 说明 处理建议
200 操作成功
401 用户未登录 跳转到登录页面
500 操作失败 显示错误提示,联系管理员

使用示例

示例 1动态获取语言列表

import { listLanguage } from '@/api/system/language'

async function loadLanguageList() {
  try {
    const response = await listLanguage({ status: '0' })
    const languageOptions = response.rows
      .filter(item => item.status === '0')
      .map(item => ({
        label: item.langName,
        value: item.langCode.replace('_', '-')
      }))
    console.log('语言列表:', languageOptions)
  } catch (error) {
    console.error('加载语言列表失败:', error)
  }
}

示例 2获取用户语言偏好

import { getCurrentLocale } from '@/api/system/language'
import { toFrontend } from '@/utils/langFormat'

async function syncUserLanguagePreference() {
  try {
    const response = await getCurrentLocale()
    const remoteLang = toFrontend(response.data.langCode)
    console.log('用户语言偏好:', remoteLang)
    // 应用用户语言偏好
    appStore.setLanguage(remoteLang)
  } catch (error) {
    console.error('获取用户语言偏好失败:', error)
  }
}

示例 3更新用户语言偏好

import { updateLocale } from '@/api/system/language'
import { toBackend } from '@/utils/langFormat'

async function updateUserLanguagePreference(lang) {
  try {
    await updateLocale({ langCode: toBackend(lang) })
    console.log('更新用户语言偏好成功')
  } catch (error) {
    console.error('更新用户语言偏好失败:', error)
  }
}

示例 4加载远程翻译资源

import { listI18nResource } from '@/api/system/language'

async function loadRemoteMessages(lang) {
  try {
    const response = await listI18nResource({
      pageNum: 1,
      pageSize: 9999,
      langCode: lang
    })
    const messages = transformToNestedObject(response.rows)
    console.log('远程翻译资源:', messages)
    return messages
  } catch (error) {
    console.error('加载远程翻译资源失败:', error)
    return {}
  }
}

function transformToNestedObject(rows) {
  const result = {}
  rows.forEach(row => {
    const keys = row.resourceKey.split('.')
    let current = result
    keys.forEach((key, index) => {
      if (index === keys.length - 1) {
        current[key] = row.resourceValue
      } else {
        if (!current[key]) {
          current[key] = {}
        }
        current = current[key]
      }
    })
  })
  return result
}

相关文档