离子应用程序中无插件的多语言支持

时间:2018-09-04 05:10:19

标签: angular ionic-framework ionic3 multilingual

以下是我的恒定文件,在其中设置离子应用程序的语言。

@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 :(得分:2)

我之前做错了什么。我将Constant文件的'data'和'LANG'变量设置为正常而非静态。并如下更改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);
  }