Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:从控制器或服务设置角度翻译语言_Angularjs_Angular Translate - Fatal编程技术网

AngularJS:从控制器或服务设置角度翻译语言

AngularJS:从控制器或服务设置角度翻译语言,angularjs,angular-translate,Angularjs,Angular Translate,我对使用角度平移感兴趣 由于启动时会发生很多设置调用,我无法在配置期间提供json语言。也不可能使用异步加载程序。 我需要能够在以后从控制器或服务中指定语言 $translateProvider.translations(…)是使用的调用,但是$translateProvider在控制器或服务中不可用,但似乎仅在配置中可用 $translate似乎无法加载JSON语言 有什么解决办法吗?请检查以下内容: 在“运行时切换语言”下 首先将$translate注入控制器 app.controller

我对使用角度平移感兴趣

由于启动时会发生很多设置调用,我无法在配置期间提供json语言。也不可能使用异步加载程序。 我需要能够在以后从控制器或服务中指定语言

$translateProvider.translations(…)
是使用的调用,但是
$translateProvider
在控制器或服务中不可用,但似乎仅在配置中可用

$translate
似乎无法加载JSON语言

有什么解决办法吗?

请检查以下内容:

在“运行时切换语言”下


首先将
$translate
注入控制器

app.controller('MainCtrl', function($scope, $state, $translate) {});
然后,您可以使用
$translate.use()
获取并设置当前语言

如果需要在配置之后添加新的翻译,那么可以使用部分加载程序

// config example
app.config(function($translateProvider, $translatePartialLoaderProvider){
  // "known" translations here, in {lang}.main.json, if any
  $translatePartialLoaderProvider.addPart('main'); 
  $translateProvider.useLoader('$translatePartialLoader', {
    urlTemplate: '/path/to/files/{lang}.{part}.json'
  });
});

// controller
app.controller('MainCtrl', function($scope, $translate, $translatePartialLoader){
  $translatePartialLoader.addPart('translation');
  $translate.refresh();
  $translate.use('en');
});

// en.translation.json
{ "KEY" : "Value", ... }

如果这不够动态,那么您可以随时进行翻译

// config
app.config(function($translateProvider, $translatePartialLoaderProvider){
    $translateProvider.preferredLanguage('en');
    $translateProvider.translations('en',{
      'TITLE': '{{ title }}',
      'SUBTITLE': '{{ subtitle }}',
      'STATIC': 'This is static'
    });
});

// controller
app.controller('MainCtrl', function($scope, $translate){
  $scope.dynamic = {
    'title': 'This is my header',
    'subtitle': 'My subtitle'
  };
});

// template
<pre>{{ 'TITLE' | translate:dynamic }}</pre>
<pre>{{ 'SUBTITLE' | translate:dynamic }}</pre>
<pre>{{ 'STATIC' | translate }}</pre>
//配置
app.config(函数($translateProvider,$translatePartialLoadProvider){
$translateProvider.preferredLanguage('en');
$translateProvider.translations('en'{
“TITLE”:“{{TITLE}}”,
“SUBTITLE”:“{{SUBTITLE}}”,
“静态”:“这是静态的”
});
});
//控制器
应用程序控制器('MainCtrl',函数($scope,$translate){
$scope.dynamic={
'标题':'这是我的标题',
“字幕”:“我的字幕”
};
});
//模板
{{'TITLE'| translate:dynamic}}
{{‘SUBTITLE’| translate:dynamic}
{{‘STATIC’| translate}
这会吐出类似的东西

最终到达了那里

在.config文件中

angular.module('myApp').run(['$rootScope', 'StorageService', function($rootScope, StorageService) {
    $rootScope.currentLanguage = StorageService.local.get('NG_TRANSLATE_LANG_KEY') || 'en'; 
}]);


<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1" ng-controller="TranslateController" ng-init="changeLanguage(currentLanguage)">
    <li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:;" ng-click="changeLanguage('tr')">TR</a></li>
    <li role="presentation" class="divider"></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:;" ng-click="changeLanguage('en')">EN</a></li>
</ul>
自定义加载程序

resolve: {
    translatePartialLoader:  function loadPartialLoader($translate,$translatePartialLoader) {
        $translatePartialLoader.addPart('home');
        return $translate.refresh();
    }
}
然后是TranslationService来共享数据


这个有效。storageService具有本地存储,在本地存储中设置“NG_TRANSLATE_LANG_KEY”后。你可以这样称呼它

angular.module('myApp')。运行(['$rootScope','StorageService',函数($rootScope,StorageService){
$rootScope.currentLanguage=StorageService.local.get('NG_TRANSLATE_LANG_KEY')||en';
}]);

我认为动态管理加载的最佳方法是 在解析配置路由器块中,如


设置当前语言,而不是翻译。我需要提供控制器或服务的翻译。是否要实时更改语言?为什么不加载所有语言,然后再决定呢?因为我没有启动时可用的语言,也没有通过简单的$http.get可用的语言。我需要在稍后阶段从控制器或
$translateProvider.useLoader('customLoader');
angular.module('myapp').factory('customLoader', function ($q, TranslationService) {

    return function (options) {
        var deferred = $q.defer();

          deferred.resolve(TranslationService.getLanguages().filter(function(lang){
                return lang.key == options.key
          })[0].values);

        return deferred.promise;
    };

});
angular.module('myapp').factory('TranslationService', function () {
    var languages = [];

    return {
        setLanguages: function (data) {
            languages = data;
        },

        getLanguages: function () {
            return languages;
        }
    }
});
angular.module('myApp').run(['$rootScope', 'StorageService', function($rootScope, StorageService) {
    $rootScope.currentLanguage = StorageService.local.get('NG_TRANSLATE_LANG_KEY') || 'en'; 
}]);


<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1" ng-controller="TranslateController" ng-init="changeLanguage(currentLanguage)">
    <li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:;" ng-click="changeLanguage('tr')">TR</a></li>
    <li role="presentation" class="divider"></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:;" ng-click="changeLanguage('en')">EN</a></li>
</ul>
resolve: {
    translatePartialLoader:  function loadPartialLoader($translate,$translatePartialLoader) {
        $translatePartialLoader.addPart('home');
        return $translate.refresh();
    }
}