You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换语言时如何实现所有组件的翻译内容自动更新?

解决JHipster中切换语言时自定义组件翻译不更新的问题

你的问题核心是翻译文件键名不匹配,导致自定义组件无法找到对应语言的翻译文本,而JHipster生成的组件因为键名统一所以能正常切换。以下是具体修复步骤:

1. 修复西班牙语翻译文件的键名错误

你的i18n/es/organization.json中,将英文里的"organization"键错误地写成了"Organización"(带重音和大写),这会导致翻译服务无法匹配到compassApp.organization.home.defaultText这个键。

修改后的i18n/es/organization.json需和英文文件的键结构完全一致:

{
  "compassApp": {
    "organization": {
      "home": {
        "title": "Organizaciones",
        "refreshListLabel": "Refrescar lista",
        "createLabel": "Crear nueva Organización",
        "createOrEditLabel": "Crear o editar Organización",
        "notFound": "No se encontraron Organizaciones",
        "defaultText": "Seleccione un nivel de organización para comenzar."
      },
      "created": "Se creó una nueva Organización con el identificador {{ param }}",
      "updated": "Se actualizó la Organización con el identificador {{ param }}",
      "deleted": "Se eliminó la Organización con el identificador {{ param }}",
      "delete": {
        "question": "¿Está seguro de que quiere eliminar la Organización {{ id }}?"
      },
      "detail": {
        "title": "Organización"
      },
      "id": "ID",
      "modId": "Mod Id",
      "name": "Nombre",
      "modTs": "Mod Ts",
      "contactEmail": "Correo de contacto",
      "address": "Dirección",
      "organizationAppOption": "Opción de aplicación de Organización",
      "organizationEntityName": "Nombre de entidad de Organización",
      "organizationLists": "Listas de Organización",
      "organizationHierarchy": "Jerarquía de Organización"
    }
  }
}

注意:翻译键(比如organization、home)是全局标识符,必须在所有语言文件中保持完全一致,不能翻译键本身。只有键对应的值才是翻译后的文本。

2. 确认翻译切换逻辑的正确性

你的changeLanguage方法逻辑是正确的:

changeLanguage(event : any ): void
{
  const languageKey: string = (event.target as HTMLInputElement).value;
  this.stateStorageService.storeLocale(languageKey);
  this.translateService.use(languageKey);
}

调用translateService.use()会触发翻译服务的语言变化事件,所有使用jhiTranslate指令或translate管道的组件都会自动更新文本——前提是翻译键能匹配到对应语言文件中的内容。

3. 验证自定义组件的翻译使用方式

你的自定义组件代码写法是正确的,两种方式都能正常响应语言切换:

<p><span jhiTranslate="compassApp.organization.home.defaultText">Select an organization level to begin.</span></p>
<p>{{ "compassApp.organization.home.defaultText" | translate }}</p>

修复翻译文件的键名后,切换语言时这两段文本都会自动更新为西班牙语内容。

为什么JHipster生成的组件能正常工作?

JHipster在生成CRUD组件时,会自动保证所有语言文件的键结构完全一致,因此翻译服务能正确匹配到对应语言的文本。而你手动添加西班牙语文件时,错误地翻译了键名,导致匹配失败。

内容的提问来源于stack exchange,提问作者Mark Wright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:54:52