86
votes

Is there a way to get the current used language in a controller (without $translateProvider)?

Couldn't find anything in the $translate service.

8
If for some god forsaken reason you need to use it straight in the view somewhat globally, probably the method of least effort is to define the language code in your translation provider (ie. in the actual translation file) e.g. { "LANG_CODE": "en" } and use the translate filter in the view as usual, like: <video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>Jari Keinänen
Why don't use $window.navigatorAleksandr Golovatyi

8 Answers

156
votes

$translate.use() is a getter and setter.

See this demo found in links of docs:

http://jsfiddle.net/PascalPrecht/eUGWJ/7/

41
votes

$translate.use() is the way to go. Also, when an asynchronous loader is executed, you might wanna use $translate.proposedLanguage() which returns the language key of the language that is currently loaded but not finished loaded yet.

38
votes

When using angular-translate-loader-static-files I have noticed that $translate.proposedLanguage() returned undefined when using the default language while $translate.use() always returned the proposed language.

Therefore I fixed it by using:

var currentLang = $translate.proposedLanguage() || $translate.use();
8
votes

$translate.use() seems not to work on initial load of the app, to get last selected language from storage: $translate.storage().get( $translate.storageKey() ) or just $translate.proposedLanguage();

8
votes

The $translate service has a method called preferredLanguage() that return what you want. The return of this function is the string of the language, like 'en'.

Here i wrote you an example:

angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
   $scope.changeLanguage = function (langKey) {
      $translate.use(langKey);
   };
   $scope.getCurrentLanguage = function () {
       $translate.preferredLanguage();
   };
}])
1
votes

translate.currentLang is used to check the current selected language in i18n

0
votes

I think this is the better way to determine the language -

$window.navigator.language || $window.navigator.userLanguage
0
votes

Maybe is not related but could be useful. In angular2+ the way to access to the current language is

...
import { TranslateService } from '@ngx-translate/core';

export class MyComponent implements OnInit {
  constructor(private translate: TranslateService) {}

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }