切换语言时如何实现所有组件的翻译内容自动更新?
解决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
相关产品推荐
相关产品推荐

