Многоязычная поддержка без плагина в ионном приложении - PullRequest
0 голосов
/ 04 сентября 2018

Ниже приведен мой постоянный файл, в котором я устанавливаю язык ионного приложения.

@Injectable()
export class Constant {
  public static selectedLang :string = 'EN';

  static setLanguage(languageCode : string){
    Constant.selectedLang = languageCode;

  }
  readonly data: any = {
    "EN": {
      //declared English variables used to be all over the application
             FORGOT_PASSWORD : "Forgot Password",
          }
    "MR": {
             //marathi variables
             FORGOT_PASSWORD : "पासवर्ड विसरलात",
           }
    "HI":{
             //Hindi variables
             FORGOT_PASSWORD : "पासवर्ड भूल गए",
         }
   LANG: any = this.data[Constant.selectedLang];
 }

Я использую эти переменные в HTML следующим образом:

<div>
   <h2>{{CON.LANG.FORGOT_PASSWORD}}</h2>
   <p>{{CON.LANG.FORGOT_PASSWORD}}</p>
</div>

TS файл, в котором я установил язык:

import {Constant} from "../../../../constants";
class ForgotPassword {
    constructor(public CON: Constant){}

    setLanguage(languageCode : string){
       Constant.setLanguage(languageCode);
    }
 }

Здесь я хочу оставить английский язык своим языком по умолчанию. Когда пользователь явно изменяет язык, вызывая функцию, то следует изменить только язык. Но проблема в том, что даже если пользователь вызывает функцию для изменения языка, она не изменяется. Приложение всегда показывает английские переменные.

Ваша помощь приветствуется.

1 Ответ

0 голосов
/ 04 сентября 2018

Я понял, что делал неправильно раньше. Я сделал переменные data и LANG файла Constant нормальными, а не статическими. И изменил функцию setLanguage следующим образом.

 setLanguage(languageCode : string){
    this.selectedLang = languageCode;
    this.LANG = this.data[this.selectedLang]; //line added
  }

Кроме того, я сохранил свою переменную selectedLanguage из компонента в хранилище сеансов, чтобы после закрытия и повторного открытия приложения язык не менялся.

 setLanguage(languageCode : string){
    this.CON.setLanguage(languageCode);
    this.sessionProvider.setLanguage(languageCode);
  }
...