Search code examples
angularjsangular-translate

AngularJs default language AngularTranslation


I want to set default language by user country, but i cannot set preferredLanguage in $.get. I am using "http://ipinfo.io". Is there any other way to set default language?

var app = angular.module('test', ['pascalprecht.translate'])
.config(function config($translateProvider, $translatePartialLoaderProvider) {
    $translateProvider
        .translations('en', {
            TRANLATION : 'Translation',
            BUTTON_LANG_EN : 'English',
            BUTTON_LANG_SK : 'Slovak',
            HOME: 'Home',
        })
        .translations('sk', {
            TRANLATION : 'Preklad',
            BUTTON_LANG_EN : 'Anglicky',
            BUTTON_LANG_SK : 'Slovensky',
            HOME: 'Zakladne informacie',
        });

    $.get("http://ipinfo.io", function(response) {
        if(response.country == 'SK'){
            $translateProvider.preferredLanguage('sk');
            }else{
                $translateProvider.preferredLanguage('en');
            }
        }, "jsonp");
});

Solution

  • You are probably running in an async issue, so, when the ajax call $.get (assuming is jQuery) is resolved you are out from the config phase of angular js...

    Try something like that:

    in app.js 
    var app = angular.module('langTest', ['pascalprecht.translate','calsethTranslate'])
      .config(function($injector, $translateProvider){
        jQuery
        .when({})
                .then(function() {
                    return $.get('http://ipinfo.io', function(response) {
                        return response;
                    },'jsonp')
                })
                .then(function(response) {
                    var lang = response.country === 'SK' ? 'SK' : 'EN';
                    var _$injector = angular.element(document.body).injector();
                    console.log(lang);
                    if (_$injector.has('$translate')) {
                        console.log("has "+lang);
                      return _$injector.get('$translate').use(lang);
                    }
                })
            });