我正在try 创建一个方法,通过使用translate接受字符串键并返回翻译后的字符串值.瞬时(参数).问题是它返回键(参数).通常,如果找不到翻译,就会返回.我认为问题在于方法在加载程序加载翻译之前被调用.

我的apply.单元ts进口:

    TranslateModule.forRoot({
  loader: {
    provide: TranslateLoader,
    useFactory: (createTranslateLoader),
    deps: [HttpClient]
  }
})

createTranslateLoader函数:

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

在我的应用程序中.组成部分:

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

当我用管道翻译html时,效果很好.

推荐答案

您使用的是TranslateHttpLoader,当请求翻译时,它会发出HTTP请求——translate.use('en').如果在HTTP调用返回之前调用instant(messageKey)方法,ngx translate将返回密钥,因为它还没有翻译.因此,您应该使用get(messageKey)方法来获取翻译-它是异步的,并返回Observable:

this.translateService.get('hello.world').subscribe((translated: string) => {
    console.log(res);
    //=> 'Hello world'

    // You can call instant() here
    const translation = this.translateService.instant('something.else');
    //=> 'Something else'
});

只有在确定翻译已经加载(如代码示例中所示)或者可以编写自定义同步翻译加载程序并在任何地方使用instant时,才能使用instant方法.

Typescript相关问答推荐

TypScript在对象上强制执行值类型时推断对象文字类型?

角形标题大小写所有单词除外

当我点击外部按钮时,如何打开Html Select 选项菜单?

为什么TypeScript失go 了类型推断,默认为any?''

webpack错误:模块找不到.当使用我的其他库时,

返回同时具有固定键和变量键的对象的函数的返回类型

rxjs forkJoin在错误后不会停止后续请求

创建一个根据布尔参数返回类型的异步函数

在数据加载后,如何使用NgFor在使用异步管道的可观测对象上生成子组件?

如何使用模板继承从子组件填充基础组件的画布

使用动态输出类型和泛型可重用接口提取对象属性

如何在省略一个参数的情况下从函数类型中提取参数类型?

React router 6(数据路由)使用数据重定向

类型推断对React.ForwardRef()的引用参数无效

接受字符串或数字的排序函数

TypeScript:如何使用泛型和子类型创建泛型默认函数?

为什么类方法参数可以比接口参数窄

我应该使用服务方法(依赖于可观察的)在组件中进行计算吗?

React router - 如何处理嵌套路由?

使用 TypeScript 在 SolidJS 中绘制 D3 力图