ngx-translate-multi-http-loader加载翻译文件报Database not created错误如何解决?
报错修复方案
这个报错是ngx-translate-multi-http-loader初始化时序和TranslateModule默认语言加载逻辑冲突导致的,翻译文件加载触发时,对应的存储数据库实例还未完成初始化。可以按以下步骤修复:
步骤1:调整TranslateModule配置
删除TranslateModule.forRoot()中的defaultLanguage配置项,将默认语言设置操作延后到框架初始化完成后执行。参考配置如下:
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; import { MultiTranslateHttpLoader } from 'ngx-translate-multi-http-loader'; import { HttpClient } from '@angular/common/http'; export function HttpLoaderFactory(http: HttpClient) { return new MultiTranslateHttpLoader(http, [ {prefix: './assets/i18n/', suffix: '.json'} // 有其他多语言文件路径可以在此处追加 ]); } @NgModule({ imports: [ BrowserModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] } // 此处删除defaultLanguage配置 }) ] }) export class AppModule { }
步骤2:延后默认语言初始化逻辑
在根组件中等待Ionic平台完全就绪、存储实例初始化完成后,再设置默认语言。参考代码如下:
import { Component } from '@angular/core'; import { Platform } from '@ionic/angular'; import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-root', templateUrl: 'app.component.html' }) export class AppComponent { constructor( private platform: Platform, private translate: TranslateService ) { this.initializeApp(); } initializeApp() { this.platform.ready().then(() => { // 如果有自定义存储逻辑,先执行存储实例的create()方法完成初始化 // 再设置默认语言 this.translate.setDefaultLang('en'); this.translate.use('en'); }); } }
步骤3:校验基础配置
- 确认
src/assets/i18n/en.json文件存在,且JSON格式无语法错误 - 确认依赖版本匹配:Ionic5场景下推荐使用
ngx-translate-multi-http-loader@7.x,对应匹配@ngx-translate/core@13.x - 若开启了翻译文件缓存功能,必须先完成缓存数据库的初始化,再触发翻译文件加载操作
内容的提问来源于stack exchange,提问作者Raphaël Balet
相关产品推荐
相关产品推荐

