Ionic 2: используйте ng2-translate в файле ts

Я хочу использовать перевод в объекте, чтобы использовать тост на Ionic 2. Но я не понимаю, как использовать ng2-translate в файле .ts... Кто-нибудь может показать мне пример?

Я хочу иметь перевод в заголовке в моем меню. Я пытаюсь так, но это не работает:

constructor(public platform: Platform, public menu: MenuController, public translate : TranslateService) {
this.initializeApp();

translate.setDefaultLang('fr');
translate.use('fr');
let testTrad : string = 'Accueil';

translate.get('TEST').subscribe(res => {testTrad = res; console.log(testTrad)});
console.log(testTrad);

// Remplissage du tableau des pages.
this.pages= [
  {title: testTrad ,                  component: TabsPage},
  {title: 'Mon compte',               component: MyAccountPage},
  {title: 'Changer de mot de passe' , component: ChangePasswordPage},
  {title: 'Documents' ,               component: DocumentsPage}
]

В моем меню должен отображаться «тест», но он продолжает отображать «Accueil».


person V. Pivet    schedule 30.11.2016    source источник


Ответы (1)


Нет, это правильно,

translate.get('TEST').subscribe(res => {testTrad = res; console.log(testTrad)});
console.log(testTrad);

// Remplissage du tableau des pages.
this.pages= [
  {title: testTrad ,                  component: TabsPage},
  {title: 'Mon compte',               component: MyAccountPage},
  {title: 'Changer de mot de passe' , component: ChangePasswordPage},
  {title: 'Documents' ,               component: DocumentsPage}
]

.subscribe является асинхронным, поэтому значения, назначенные внутри subscribe, пока недоступны.

Пытаться

translate.get('TEST').subscribe(res => {
    testTrad = res; 
    console.log(testTrad);
    this.pages= [
       {title: testTrad ,                  component: TabsPage},
       {title: 'Mon compte',               component: MyAccountPage},
       {title: 'Changer de mot de passe' , component: ChangePasswordPage},
       {title: 'Documents' ,               component: DocumentsPage}
    ]
});
console.log(testTrad);

Или, если вы не хотите ждать асинхронного завершения, вы можете попробовать

this.pages= [
  {title: 'Mon compte',               component: MyAccountPage},
  {title: 'Changer de mot de passe' , component: ChangePasswordPage},
  {title: 'Documents' ,               component: DocumentsPage}
]
translate.get('TEST').subscribe(res => {
   testTrad = res;
   this.pages.push({title: testTrad, component: TabsPage});
 });
person Ivar Reukers    schedule 30.11.2016
comment
Это работает, но у меня есть другая проблема... Я не могу использовать перевод, потому что получаю асинхронный ответ. Я хочу вставить свою сделку в переменную и использовать ее напрямую. Я не знаю, понимаете ли вы, что я имею в виду? - person V. Pivet; 01.12.2016
comment
Нет, я не уверен, что вы имеете в виду. Вы говорите о translate.get().subscribe()? - person Ivar Reukers; 01.12.2016
comment
Да. Это делает асинхронный запрос. пусть testTrad : строка; translate.get('ТЕСТ').subscribe(res =› {testTrad = res;}); console.log(testTrad); В этой части кода мой console.log ничего не отображает, потому что я слишком поздно получаю разрешение. - person V. Pivet; 01.12.2016
comment
Хорошо для методов async, вы не можете использовать переменную вне ее. Что вы можете сделать, так это создать отдельную функцию setVariable, где вы можете делать все, что захотите, с вашим ответом. Я не понимаю, в чем ваша проблема и что вы пытаетесь создать, поэтому не могу предоставить вам код. - person Ivar Reukers; 01.12.2016
comment
Я обновил свой вопрос, чтобы показать вам, что я хочу сделать. :) - person V. Pivet; 01.12.2016
comment
Но просто говорю, что вы должны были превратить это в другой вопрос, просто потому, что кто-то другой мог создать ту же проблему, что и у вас раньше, и теперь он больше не сможет ее найти :) - person Ivar Reukers; 01.12.2016