翻译在离子模态中不起作用



我正在接管一个小应用程序 Ionic v2 的代码,我正在使用ng2-translate进行翻译。我仅在模态窗口中进行翻译有问题。它在任何地方都运行良好,除了在这个模态上,我只能看到转换键。

这是我的AppModule

@NgModule({
  declarations: [
    MyApp,
    // ...
    SearchPersonModal
  ],
  imports: [
    IonicModule.forRoot(MyApp),
    ChartModule,
    TranslateModule.forRoot({
      provide: TranslateLoader,
      useFactory: (createTranslateLoader),
      deps: [Http]
    })
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    // ...
    SearchPersonModal,
  ],
  providers: [
    ApiCaller
  ]
})
export class AppModule {}

模式在应用程序中用于搜索远程数据库中的用户。这是模态组件的代码:

@Component({
  selector: 'page-search-person',
  templateUrl: 'search-person.html',
})
export class SearchPersonModal {
  public caller : ApiCaller = null;
  public translate : TranslateService = null;
  // ..
  constructor(
    public viewCtrl: ViewController,
    public toastr: ToastController,
    params: NavParams
  ) {
    this.translate = params.get('translate');
    this.caller = params.get('caller');
  }
  // ...
}

以下是模态的呈现方式:

let modal = this.modalCtrl.create(SearchPersonModal, {
  caller: this.caller,
  translate : this.translate
});

我认为代码的作者将服务作为参数传递,因为依赖注入不起作用。事实上,当我尝试这样做时,使用此构造函数:

export class SearchPersonModal {
  //public caller : ApiCaller = null;
  //public translate : TranslateService = null;
  // ...
  constructor(
    public viewCtrl: ViewController,
    public toastr: ToastController,
    public caller: ApiCaller,
    public translate: TranslateService,
    params: NavParams
  ) {
    //this.translate = params.get('translate');
    //this.caller = params.get('caller');
  }
  // ...
}

翻译仍然不起作用,但ApiCaller服务按预期工作。为什么这个服务效果很好,但翻译器不好?

这似乎是 Ionic 2 当前已知的问题,并且已在其存储库中报告。解决方法是需要为模式重新初始化翻译服务,如问题日志中所述:

事物在页面上工作,但在模态中不起作用。就好像翻译服务在模态中不可用一样。如果在模态内部,我通过运行 this.translate.use('fr') 重新初始化翻译服务;然后事情进展顺利。例如,以下代码工作正常。

import { TranslateService } from 'ng2-translate/ng2-translate';
@Component({
  templateUrl: 'my-modal.html',
  selector: 'my-modal',
})
export class MyModal {
constructor(
    private translate: TranslateService
  ) {
    var self = this;
    this.translate.use('fr');  // Re-initializing the translate service inside a modal
    // Here on translation works fine
  }
}

因此,映射到当前实现的此解决方法应类似于以下内容:

import { TranslateService } from 'ng2-translate/ng2-translate';
export class SearchPersonModal {
  public caller : ApiCaller = null;
  public translate : TranslateService = null;
  // ...
  constructor(
    public viewCtrl: ViewController,
    public toastr: ToastController,
    public caller: ApiCaller,
    private translate: TranslateService
    params: NavParams
  ) {
    this.caller = params.get('caller');
    this.translate.use('en'); // Re-initialised rather than passed via navParams.
  }
  // ...
}

相关内容

  • 没有找到相关文章

最新更新