Reputation: 7217
I'm building an application using the latest Angular5 and what I need is for a user to be able to switch languages. I've never had to implement this in an Angular2+ (actually I'm using Angular5).
I need to set translations in two places:
I was looking at ngx-translation and it looks to do everything I need, as in it allows you to change language without rebuilding your code, see here. However I read it was probably going to be deprecated due to the main developer moving to the angular team to develop their i18n code.
I also understand that the current i18n doesn't support everything I need right now, see here.
My question - what is the state of play for translations in the latest version of Angular? Are there other libraries people would recommend instead, if indeed, Angular itself hasn't got full support as of yet (for changing language without recompiling)? Is ngx-translate good for the future?
Any guidance in this area is greatly appreciated!
Upvotes: 47
Views: 30304
Reputation: 2430
Instead of using ng-translate you can use config file and language json files for that the you can place that json file in your server location and access it easily from angular
in config.json
u can defile language type
{
"LANGUAGE": "fr.json"
}
in en/fr.json
file
{
"TITLE": "Bonjour Angular avec translate !",
"SELECT": "Changer la langue"
}
hear is the sample code
App.component
export class AppComponent {
name = LAN_CONFIG['TITLE'];
// name = APP_CONFIG['LANGUAGE'];
}
OR
You Can Use config.js file
add this code segment to index.html header section
<script>
var xhrObj = new XMLHttpRequest();
var url = '/assets/config/config.js';
xhrObj.open('GET', url, false);
xhrObj.send('');
var se = document.createElement('script');
se.type = "text/javascript";
se.text = xhrObj.responseText;
document.getElementsByTagName('head')[0].appendChild(se);
</script>
config.js file
window.config= {};
window.config['LANGUAGE'] = 'er.js';
you can access that variable to access value using
@Injectable()
export class LanguageService {
appConfig:AppConfigService;
lanTypePath ='../../assets/i18n/'+ window['config'].LANGUAGE;
constructor(private http: HttpClient)
{
console.log(APP_CONFIG['LANGUAGE']);
}
public load()
{
return new Promise((resolve, reject) => {
this.http.get(this.lanTypePath).catch((error: any): any => {
reject(true);
return Observable.throw('Server error');
}).subscribe((envResponse :any) => {
let t = new LanConfig();
//Modify envResponse here if needed (e.g. to ajust parameters for https,...)
LAN_CONFIG = Object.assign(t, envResponse);
resolve(true);
});
});
}
}
think this method better than previous for your situation
Hope this will helps..!
Upvotes: 4
Reputation: 7217
After spending time looking into this, I thought I'd post the main differences I found between ngx-translate and Angular-i18n:
Ocombe (developer of ngx): @josersleal that's exactly what they did, the angular team hired me to improve i18n for everyone But there is no way to integrate my lib directly into the core, after working for 3 months for the core team I can tell you that Angular i18n is much more complex and elaborate than my lib. It handles a lot of more complex stuff, and it does it without all the bugs and shortcomings that my lib has. I understand that it's frustrating that the core doesn't evolve as fast as what a library can do, but there are reasons for that, and the first one is that you cannot implement something and change it whenever you see that you forgot to include a use case. Everything has to be thoroughly planned and thought. Still, you will have most of the things that this lib can do in the core in the future, but it might take a year before we get there unfortunately. The good news is that it's going to be much better than my naive implementation.
This is a good article to discuss the main differences between ngx-translate and Angular’s i18n: https://github.com/ngx-translate/core/issues/495
The changes for i18n are due in version 6 of angular. Today, we are currently on version 5:
It won't be for 5.0, it should be before 6.0 (so before march 2018). Unfortunately I don't have a more precise date
The developer of ngx-translate (and now a main contributor to angular-i18n) has posted this 12 days ago: https://github.com/angular/angular/issues/20193
Here’s the design document for i18n (the Prior Art section is interesting): https://docs.google.com/document/d/1LH7lJ1GjRgpGUjzNb6Eg4xrPooRdi80QOTYYh8z_JyY/edit#
Some thoughts…
I am also going to have a look at the Angular-l10n library as it looks very good:
Upvotes: 57
Reputation: 8156
Yes. ngx-translate is good till now, and I hope it will be in future as well.
I am using ngx-translate in my current Angular 5 project with 5+ languages.
It is working fine for me so far. I did not have to make any custom changes, it worked like plug and play thing.
I used this plugin https://github.com/ngx-translate/core
Upvotes: 6