Angular 4 Ngx-translate 管道不工作

新手上路,请多包涵

我想制作一个多语言的 angular 4 应用程序。我遵循了 Angular 2 - Multilingual Support 上的答案,但它不起作用。

我在该页面上执行了从 1 到 5 的每一步,我的应用程序模块看起来都一样。

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

{ "TEST":"little test"}

在我的 HTML 中:

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

当我使用它时,我得到的是 TEST 而不是 little 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,
  ],

项目结构

原文由 fangio 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 567
2 个回答

你能这样试试吗?

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

原文由 k11k2 发布,翻译遵循 CC BY-SA 3.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';

如果您不知道如何安装全球化或为什么要使用,请参阅: 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);

但这里的最佳实践是将这些东西包含到共享模块中,并将该模块导入页面、组件等。

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

原文由 dgbt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题