【问题标题】:Pipe 'translate' could not be found Ionic 4找不到管道“翻译” Ionic 4
【发布时间】:2019-09-02 14:40:09
【问题描述】:

我正在制作一个可以使用 Ionic4 更改语言的移动应用程序。我基本上遵循了这个教程:https://www.freakyjolly.com/ionic-4-adding-multi-language-translation-feature-in-ionic-application-using-ngx-translate/.

我收到了这个错误: ERROR 错误:未捕获(承诺中):错误:模板解析错误: 找不到管道“翻译”(“

[错误->] {{ '文本' |翻译 }} 默认”): ng:///ConfigurePageModule/ConfigurePage.html@16:2

我一直在阅读其他人有类似问题但仍然无法解决的其他帖子。

我的 app.module.ts

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

    export function LanguageLoader(http: HttpClient) {
return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
    }
    @NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
    BrowserModule, AngularFireModule.initializeApp(environment.firebase), IonicRatingModule, IonicSelectableModule, IonicStorageModule.forRoot(), 
    IonicModule.forRoot(),
    AppRoutingModule,
    HttpClientModule,
    TranslateModule.forRoot({
        loader: {
            provide: TranslateLoader,
            useFactory: (LanguageLoader),
            deps: [HttpClient]
        }
    })
        ],
        providers: [
    StatusBar, Firebase, PhotoViewer, HTTP, Toast,
    AngularFireDatabase,
    CallNumber,
    EmailComposer,
    AngularFireAuth, AngularFirestore,
    SplashScreen, InAppBrowser, TranslateConfigService,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
    SocialSharing,
    File
        ],
        bootstrap: [AppComponent]
    })
    export class AppModule { }

我的翻译-config.service.ts

    import { Injectable } from '@angular/core';
    import { TranslateService } from '@ngx-translate/core';

    @Injectable({
providedIn: 'root'
    })
export class TranslateConfigService {

constructor(
    private translate: TranslateService
) { }

getDefaultLanguage() {
    let language = this.translate.getBrowserLang();
    this.translate.setDefaultLang(language);
    return language;
}

setLanguage(setLang) {
    this.translate.use(setLang);
}

}

我的 configure.page.ts

    import { Component, OnInit, NgModule } from '@angular/core';
    import { ThemeService } from '../theme.service';
    import { TranslateConfigService } from '../translate-config.service';
    import { TranslateModule } from '@ngx-translate/core';

    @Component({
      selector: 'app-configure',
      templateUrl: './configure.page.html',
      styleUrls: ['./configure.page.scss'],
            })
    @NgModule({

    imports: [TranslateModule]
    })
    export class ConfigurePage implements OnInit {
selectedLanguage: string;
constructor(private theme: ThemeService, private translateConfigService: TranslateConfigService) {
    this.selectedLanguage = this.translateConfigService.getDefaultLanguage();
}


      ngOnInit() {
      }
        languageChanged() {
    this.translateConfigService.setLanguage(this.selectedLanguage);
    console.log(this.selectedLanguage);
        }
    }

我的configure.page.html

    <ion-content>
{{ 'text' | translate }}
<div style="padding:10px;">
    <h5 style="">Configure sus preferencias</h5>
    <ion-list>
        <ion-item>
            <ion-label>Select Language</ion-label>
            <ion-select placeholder="Select One" [(ngModel)]="selectedLanguage" (ionChange)="languageChanged()">
                <ion-select-option value="es">Español</ion-select-option>
                <ion-select-option value="en">English</ion-select-option>
            </ion-select>
        </ion-item>
    </ion-list>
</div>
    </ion-content>

我的 en.json {"title": "Ionic 4 多语言翻译","text": "这是在应用程序中显示翻译的随机文本"
} 我的 es.json {"title": "Esta en ESpañoool", "text": "Texto aleatorio"}

json 文件在 assets/i18n 中,但我没有那个文件夹,所以我手动创建了。会不会是这个问题?

【问题讨论】:

    标签: pipe ionic4 translate


    【解决方案1】:

    我没有看到你也将它放入页面级模块文件中。

    如果您查看 Ionic Academy 上的 Simon's tutorial for this,您会看到“使用 ngx translate 服务、管道和指令”下有一个额外的部分。

    对于您的项目,您需要打开configure.module.ts 并添加TranslateModule,如下所示:

    import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    import { IonicModule } from '@ionic/angular';
    import { FormsModule } from '@angular/forms';
    import { RouterModule } from '@angular/router';
    
    import { ConfigurePage } from './home.page';
    import { TranslateModule } from '@ngx-translate/core';
    
    @NgModule({</ul>
    
    
      imports: [
        CommonModule,
        FormsModule,
        IonicModule,
        RouterModule.forChild([
          {
            path: '',
            component: ConfigurePage
          }
        ]),
        TranslateModule
      ],
      declarations: [ConfigurePage]
    })
    export class ConfigurePageModule {}
    

    我在 JollyFreaky 的教程底部也看到了 first comment 的可能变体,所以如果这不起作用,请尝试像这样导入它:

      imports: [
        CommonModule,
        FormsModule,
        IonicModule,
        RouterModule.forChild([
          {
            path: '',
            component: ConfigurePage
          }
        ]),
        TranslateModule.forChild()
      // etc
    

    【讨论】:

    • 我尝试了您的解决方案,但仍然遇到同样的问题。我也跟着教程 ionicacademy.com/localise-ionic-ngx-translate ,同样的结果。可能是因为我手动创建了 i18n 文件夹?
    • 不,文件夹没什么特别的,我不明白这可能是什么问题,即使你把它放在错误的地方,因为它抱怨管道不存在。我认为你一定有另一个问题。您是否在不止一页中使用过翻译管道? -- 它需要添加到每个页面,就像我上面描述的那样使用它。
    • 不,我只在配置页面中使用它(它将在每个页面中实现,但仅用于启动该页面)
    • 你仍然看到那个错误ERROR Error: Uncaught (in promise): Error: Template parse errors: The pipe 'translate' could not be found ("
    • 在这一点上,感觉就像是某个地方出现了一个小错误,而不是缺少了一些重大的错误。我会尝试在一个独立的新测试应用程序上按照教程进行操作,以完全确定它确实有效。然后将每个步骤与实际项目进行比较。您的应用是否可以通过 repo 或我们可以查看的任何内容访问?
    【解决方案2】:

    我也有类似的情况,我建议在你的 ts 页面的模块代码中添加以下最小值。

    import { TranslateModule } from '@ngx-translate/core';
    

    那么,

    imports: [ 
        TranslateModule
      ],
    

    【讨论】:

      【解决方案3】:

      如果来源具有每个页面特定的模具,则解决方案可能有效。您必须将管道模块添加到每个页面特定的模块才能使其工作。

       import { NgModule } from '@angular/core';
       import { IonicPageModule } from 'ionic-angular';
       import { RegisterOnePage } from "./register-one";
       import { PipesModule } from '../../../pipes/pipes.module';
      
       @NgModule({
        declarations: [RegisterPage],
        imports: [
          IonicPageModule.forChild(RegisterPage),
          PipesModule
        ]
      })
      export class RegisterPageModule {}
      

      【讨论】:

        【解决方案4】:

        请参考https://ionicframework.com/docs/v3/developer-resources/ng2-translate/#lazy-loading-pages

        延迟加载页面

        如果您想将 Ionics 延迟加载页面与 ngx-translate 一起使用,您必须配置您的 component.module.ts 文件。

        import { NgModule } from '@angular/core';
        import { IonicPageModule } from 'ionic-angular';
        import { TranslateModule } from '@ngx-translate/core';//<- add this
        import { HelloPage } from './hello-page';
        
        @NgModule({
          declarations: [
            HelloPage,
          ],
          imports: [
            IonicPageModule.forChild(HelloPage),
            TranslateModule.forChild()//<- and this
          ],
          exports: [
            HelloPage
          ]
        })
        export class HelloPageModule {}
        

        【讨论】:

          猜你喜欢
          • 2019-05-31
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 2020-12-04
          • 2021-05-11
          • 2017-01-28
          • 2017-09-04
          • 2017-12-08
          相关资源
          最近更新 更多