2016-06-02 5 views
0

По какой-то причине приведенный ниже код не переводит мои строки, то есть отображает мой json KEY (например: MY_NEW_SITES). Надеюсь, вы увидите что-то неправильно на то, что я делаюJSON-ключ, отображаемый вместо строк перевода

Вот код

main.ts

// this import should be first in order to load some required settings (like globals and reflect-metadata) 
    import { nativeScriptBootstrap } from "nativescript-angular/application"; 
    import { AppComponent } from "./app.component"; 

    // angular 
    import { Component, provide } from '@angular/core'; 
    import { HTTP_PROVIDERS } from '@angular/http'; 

    // libs 
    import { TranslateLoader, TranslateService, TranslatePipe } from 'ng2-translate/ng2-translate'; 
    import { TNSTranslateLoader } from 'nativescript-ng2-translate/nativescript-ng2-translate'; 
    import { TNSFontIconService } from 'nativescript-ng2-fonticon'; 

    nativeScriptBootstrap(AppComponent, [ 
     HTTP_PROVIDERS, 
     provide(TranslateLoader, { 
     useFactory:() => { 
      // pass in the path to your locale files 
      return new TNSTranslateLoader('assets/i18n'); 
     } 
     }), 
     TranslateService, 
     provide(TNSFontIconService, { 
      useFactory:() => { 
      return new TNSFontIconService({ 
       'fa': 'font-awesome.css' 
      }); 
      } 
     }) 
    ]); 

site.ts

import { Component, OnInit, ViewChild } from "@angular/core"; 

import { TranslateService, TranslatePipe } from 'ng2-translate/ng2-translate'; 

import { TNSFontIconService, TNSFontIconPipe } from 'nativescript-ng2-fonticon'; 
import { TNSTranslateLoader } from 'nativescript-ng2-translate/nativescript-ng2-translate'; 

@Component({ 
    templateUrl: 'pages/sites/sites.html', 
    pipes: [TranslatePipe, TNSFontIconPipe] 
}) 

export class SitesPage { 
    public sites: ISiteInfo[]; 

    constructor(
       private fonticon: TNSFontIconService, 
       translate: TranslateService) { 

    this.sites = []; 
    } 
} 

sites.html

<ActionBar [title]="'MY_NEW_SITES' | translate"> 
    <ActionItem (tap)="settings()"> 
    <StackLayout> 
     <Label [text]="'fa-cog' | fonticon" class="fa"></Label> 
    </StackLayout> 
    </ActionItem> 
    <ActionItem (tap)="addSite()" 
     ios.position="right" 
     android.position="popactionBarup"> 
    <StackLayout> 
     <Label [text]="'fa-plus' | fonticon" class="fa"></Label> 
    </StackLayout> 
    </ActionItem> 
</ActionBar> 

    <StackLayout> 
     <Label [text]="'MY_NEW_SITES' | translate"></Label> 
    </StackLayout> 

Под приложением/активами/I18n, у меня есть мои 2 JSON файлы, т.е. en.json и fr.json

например:

en.json

{ 
    "MY_NEW_SITES": "My New Sites" 
} 

fr.json

{ 
    "MY_NEW_SITES": "Mes nouveaux sites" 
} 

ответ

1

Это потому что вы не проходите мимо вашей собственности MY_NEW_SITES, но строка 'MY_NEW_SITES'

Изменить t его

<StackLayout> 
     <Label [text]="'MY_NEW_SITES' | translate"></Label> 
    </StackLayout> 

к этому

<StackLayout> 
     <Label [text]="MY_NEW_SITES | translate"></Label> 
    </StackLayout> 

И ваша проблема решена (то же самое относится и к связывающему заголовку)

+0

Привет Ник, спасибо, чтобы поставить меня на пути. Теперь проблема в том, что она ничего не показывает! В ActionBar [текст] отображается мое имя проекта, а метка [текст] пуста. Что это звучит для вас? Кстати [здесь] (https://github.com/NathanWalker/nativescript-ng2-translate) он показывает, что моя строка должна быть между одинарной кавычкой. – David

+0

Нашел вопрос! Мне все равно нужно использовать одиночную кавычку И нужно, например, назначить язык в конструкторе. Таким образом, в конструкторе translate.use ('en') – David

+0

Пример от NathanWlaker делает то же самое .. в основном это говорит .. если у вас есть значение перевода, загрузите его .. иначе загрузите строку по умолчанию «HOME» (e .. g в вашем случае «MY_NEW_SITES» будет отображаться, если вы не набрали переводную ценность для загрузки ..) –