我有一个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”。这是应用语言设置的另一种方式吗?
答案 0 :(得分:0)
有一些经过实践检验的框架可以做到这一点。您可以(也可能应该)使用像ngx-translate这样的库。它们提供了一种从JSON插入翻译的相对简单的方法。
关于其他问题,如果您要翻译自己的翻译:
1)使用这样的本地化是一个好主意还是有更好的方法?
使用这种方法,您必须一次性加载所有支持语言的翻译。如果您只想要英语翻译,您仍然可以获得所有其他语言。这也意味着你必须有逻辑来获得正确的语言。
一个常见的方法是将翻译按语言分开。 前 -
'en': {
"LOGOUT": "Logout",
"LOGIN" : "Login",
}
"ru": {
"LOGOUT": "Выйти"
"LOGIN": "Войти",
}
这样,当语言发生变化时,您可以轻松地更改整个对象。
2)我怎样才能访问例如在en登录?我试过* .html
{{ (localisation | async).login.en }}
这种方法应该有效,因为你只从firebase响应中获得localisation
个对象。
但是使用这种翻译方法,您必须在语言发生变化时更改模板。