0

我在 Ionic 2 项目中使用 nxg-translate。

在我的app.module.ts,我使用translateHttpLoader

...
imports: [
    BrowserModule,
    HttpModule,
    IonicImageViewerModule,
    IonicModule.forRoot(MyApp, AppOptions),
    IonicAudioModule.forRoot(),
    TranslateModule.forRoot({
        loader: {
            provide: TranslateLoader,
            useFactory: createTranslateLoader,
           deps: [Http]
        }
    })
  ],
...


export function createTranslateLoader(http: Http,) {
    return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
}

在我的应用程序中,我必须从外部 zip 下载 lang 文件,因为客户希望有可能在不重新发布应用程序的情况下更改 traductions,并且语言文件包含可能更改的特定元素(地图标记等)

所以我下载并解压缩文件,当我有 lang (= data) 的 json 内容时,我用方法将它添加到翻译工具中setTranslate

this.translate.setTranslation(lang,data);

但是,当我使用 getTranslation 方法检查语言是否正确添加时,我遇到了错误,因为它找不到文件。(http 请求错误)。这很正常,我的文件夹assets/i18n/是空的,但是使用该setTranslation方法,我认为我通常应该找到我之前添加的内容?或者我没有按预期使用模块?

我试图在 assets/in18n 文件夹中放置一个空文件(例如 fr.json),看看它是否可以工作,但它不会改变任何东西。

如果我更改 translateHttpLoader 中文件夹的 url,以获得准确下载的 zip 内容文件夹,它可以工作,但问题是我可以更改平台(ios/android)的功能,因为 zip 的文件夹不一样在操作系统的功能。

我的问题是: - 我可以在我的createTranslateLoader功能中(或在应用程序初始化后)更改平台功能中的资产文件夹 - setTranslation 方法如何工作:它是否需要文件i18n夹中的最小文件才能工作?- 你有想法改进我对 ngx-translate 的使用吗?

谢谢 !

大卫

4

1 回答 1

0

//我试图在assets/in18n文件夹中放一个空文件(例如fr.json),看看它是否可以工作,但它并没有改变任何东西。//

如果你有相同的架构

| src 
   | app
   | assets
      | i18n
         | fr.json
         | en.json

你可以试试下面的代码

export function createTranslateLoader(http: Http,) {
    return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}

默认情况下,没有可用的加载程序。您可以使用手动添加翻译,setTranslation但最好使用加载器。您可以编写自己的加载器,或导入现有的加载器。

于 2017-05-29T12:03:29.003 回答