Angular 4 Ngx-translate管不起作用

问题描述 投票:2回答:3

我想制作一个多语言的角度4应用程序。我已经按照Angular 2 - Multilingual Support的答案,但它不起作用。

我做了每一步,在该页面上从1到5,我的appmodule看起来一样。

我在一个文件夹i18n中有一个文件en.json,位于我的assets文件夹中。该文件包含

{ "TEST":"little test"}

在我的HTML中:

 <a [routerLink]="['/home']" class="tile waves-effect waves-light btn-large">
  <span> {{ "TEST" | translate }}</span>
 </a>

当我使用它时,我得到TEST而不是小测试。这真的很烦人,因为我想添加多种语言。

编辑 我已将此代码添加到我的appmodule.ts(仅需添加)

import {HttpClientModule, HttpClient} from '@angular/common/http';
import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}

@NgModule({
  imports: [
    BrowserModule,
    HttpModule,
    HttpClientModule,
    MaterializeModule.forRoot(),
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    }),
    FormsModule,
    JsonpModule,
    routing,
    BrowserAnimationsModule,
  ],

ProjectStructure

html angular typescript internationalization ngx-translate
3个回答
4
投票

你能这样试试吗?

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


0
投票

首先导入特色模块的traslate服务。内部模块构造函数使用:

constructor(private translate:TranslateService){
    translate.setDefaultLang('en');
}

0
投票

你必须正确设置i18n。这意味着在最好的情况下,这些导入在你的app.module.ts中为ionic4:

// i18n and globalization
import { Globalization } from '@ionic-native/globalization/ngx';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

如果您不知道如何安装Globalization或使用的原因请参阅:https://ionicframework.com/docs/native/globalization

您应该创建此默认加载器方法:

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

并导入翻译模块

imports: [
..., // other stuff above
TranslateModule.forRoot({
            loader: {
                provide: TranslateLoader,
                useFactory: HttpLoaderFactory,
                deps: [HttpClient]
            }
        }),
... // other stuff beyond
]

现在,您可以使用全球化来获取有关设备的信息,如果在cordova系统上:

this.globalization.getPreferredLanguage()

或者使用预定义字符串设置硬编码所需模块中的语言。

this.translate.setDefaultLang(locale);
this.translate.use(locale);

但这里的最佳做法是将这些内容包含在共享模块中,并在页面,组件等上导入此模块。

注意:不要忘记,如果您没有告诉翻译服务使用哪种语言,它将在模板中显示您尝试使用翻译管道转换的字符串,并且在大多数情况下您不会看到任何错误。

© www.soinside.com 2019 - 2024. All rights reserved.