Angular中的本地化和JSON

时间:2017-07-13 23:27:40

标签: json angular localization

我有一个JSON数据库,示例如下:

{
  "users" : {
    "-Kowtg5yyK-DTIz91cQ8" : {
      "language" : "en",
      "uid" : "kNyDJnktxyakL6owhGd1rruGACb2",
      "userName" : "admin"
    }
  },
  "localisation" : {
    "login" : {
      "en" : "Login",
      "ru" : "Войти",
      "uk" : "Увійти"
    },
    "logout" : {
      "en" : "Logout",
      "ru" : "Выйти",
      "uk" : "Вийти"
    }
  }
}

我正在写一个Angular4应用程序。该数据库位于Firebase中。为了访问它我使用了angularfire2:

export class AppComponent {
  localisation: FirebaseListObservable<any[]>;
  userProfile : FirebaseListObservable<any[]>;

  constructor(db: AngularFireDatabase, public afAuth: AngularFireAuth) {
    userProfile = db.list('/users/')
    this.localisation = db.list('/localisation/');
  }
}

1)使用这样的本地化是一个好主意还是有更好的方法?

2)我怎样才能访问例如在en登录?我试过* .html

{{ (localisation | async).login.en }}

我只能通过使用* ngFor

进行迭代来获得en
  <md-list-item *ngFor="let lang of localisation | async">
    {{ lang.en }}
  </md-list-item>

但我知道这非常不实用,特别是如果我为每种语言添加“if”。这是应用语言设置的另一种方式吗?

1 个答案:

答案 0 :(得分:0)

有一些经过实践检验的框架可以做到这一点。您可以(也可能应该)使用像ngx-translate这样的库。它们提供了一种从JSON插入翻译的相对简单的方法。

关于其他问题,如果您要翻译自己的翻译:

1)使用这样的本地化是一个好主意还是有更好的方法?

使用这种方法,您必须一次性加载所有支持语言的翻译。如果您只想要英语翻译,您仍然可以获得所有其他语言。这也意味着你必须有逻辑来获得正确的语言。

一个常见的方法是将翻译按语言分开。 前 -

'en': {
    "LOGOUT": "Logout",
    "LOGIN" : "Login",
}
"ru": {
    "LOGOUT": "Выйти"
    "LOGIN": "Войти",
}

这样,当语言发生变化时,您可以轻松地更改整个对象。

2)我怎样才能访问例如在en登录?我试过* .html

{{ (localisation | async).login.en }}

这种方法应该有效,因为你只从firebase响应中获得localisation个对象。

但是使用这种翻译方法,您必须在语言发生变化时更改模板。