如何列出由angular-translate加载的所有语言

fis*_*tte 7 javascript angularjs

我无法在角度翻译的 docs或api中找到它.如何通过角度翻译检索所有加载的语言?

假设我有一个像这样的LanguageCtrl:

angular.module('myApp')
.controller('LanguageCtrl', ['$translate', '$scope',
    function ($translate, $scope) {
        $scope.switchLang = function (lang) {
            $translate.use(lang);
        };
        $scope.currentLang = function () {
            return  $translate.use();
        };
        $scope.isCurrentLang = function (lang) {
            return  $translate.use() === lang;
        };
        $scope.languages = function(){
            return $translate.IS_THERE_AN_API_FUNCTION_TO_GET_ALL_LANGUAGES();
        }
    }]);
Run Code Online (Sandbox Code Playgroud)

我加载这些语言:

angular.module('myApp', ['pascalprecht.translate'])
.config(['$translateProvider', function ($translateProvider) {
    $translateProvider.translations('de', de);
    $translateProvider.translations('fr', fr);
    $translateProvider.translations('en', en);
    $translateProvider.preferredLanguage('en');
}]);
Run Code Online (Sandbox Code Playgroud)

现在我想显示所有语言:

<ul ng-controller="LanguageCtrl">
    <li ng-repeat="lang in languages" ng-class="{active: isCurrentLang(lang)}">
            <a href="" ng-click="switchLang(lang)">lang</a>
     </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

Pas*_*cht 10

不幸的是,还没有API可以获得所有注册语言.因此,在短期:这是不可能的.

如果您愿意,可以在github上打开一个问题来提出该功能.但是,请记住,在使用异步加载器时,语言在加载之前不会注册.

  • 按照你的建议创建了ab问题[https://github.com/angular-translate/angular-translate/issues/566](https://github.com/angular-translate/angular-translate/issues/566) (3认同)

spo*_*rts 3

更新的答案:

/**
* @description
* This function simply returns the registered language keys being defined before in the config phase
* With this, an application can use the array to provide a language selection dropdown or similar
* without any additional effort
*
* @returns {object} returns the list of possibly registered language keys and mapping or null if not defined
*/

    $translate.getAvailableLanguageKeys();

/*
* To register language keys, use the following function in your configuration:
*/

    $translateProvider.registerAvailableLanguageKeys(['en', 'de']);
Run Code Online (Sandbox Code Playgroud)