Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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
Javascript AngularJS:在app.js中获取翻译密钥_Javascript_Angularjs_Angular Translate - Fatal编程技术网

Javascript AngularJS:在app.js中获取翻译密钥

Javascript AngularJS:在app.js中获取翻译密钥,javascript,angularjs,angular-translate,Javascript,Angularjs,Angular Translate,在我的应用程序中,我使用AngularJS模块Pascal Precht(翻译模块)。我来找你是因为我无法进入我的方法myApp.Run的app.js翻译键。 我可以在控制器或视图中执行。但不可能在项目初始化时得到它。它给我的是钥匙,不是信件 你有解决办法吗 这是我的密码: var myApp = angular.module('myApp', ['ngRoute', 'ngAnimate', 'myApp.filters', 'myApp.services', 'myApp.directive

在我的应用程序中,我使用AngularJS模块Pascal Precht(翻译模块)。我来找你是因为我无法进入我的方法
myApp.Run
app.js
翻译键。 我可以在控制器或视图中执行。但不可能在项目初始化时得到它。它给我的是钥匙,不是信件

你有解决办法吗

这是我的密码:

var myApp = angular.module('myApp', ['ngRoute', 'ngAnimate', 'myApp.filters', 'myApp.services', 'myApp.directives', 'pascalprecht.translate']);

// Declare routeProvider
myApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', {templateUrl:'partials/connectView.html', controller:'ConnectController'});
    $routeProvider.when('/homeView', {templateUrl:'partials/homeView.html', controller:'HomeController'});
}]);

// Declare translateProvider
myApp.config(['$translateProvider', function($translateProvider) {        
    $translateProvider.useStaticFilesLoader({
        prefix: 'res/localization/lang-',
        suffix: '.json'
    });

    $translateProvider.preferredLanguage('fr_FR');
    //$translateProvider.preferredLanguage('en_US');
}]);

// Declare Global variables
myApp.run(['$rootScope', '$filter', function($rootScope, $filter) {
    $rootScope.list = false;
    etc....

    //I'm trying to get translate Key but it doesn't work
    console.log($filter('translate')('MY_KEY'));
}]);

我的AngularJS版本是1.2.16(最新稳定版本)。Thx

为什么不在run部分注入$translate服务呢 然后调用它而不是使用过滤器

console.log($translate('MY_KEY'));

很显然,由于声誉问题,我无法发表评论,我们遇到了一些可能是您正在经历的事情-由于区域设置文件仅在angular的配置部分下载,因此在调用translate时可能(尚未)不可用

我们通过预先添加所有语言环境文件(我们没有很多,而且它们很小)来解决这个问题,在初始化过程中,我们只选择正确的一个,这样我们就避免了问题


(同样,这可能更像是一个评论,而不是一个答案,但我不能评论…

这不是解决您的问题的方法,但是如果您在“运行”中尝试以下代码,您将了解到,为什么在初始化状态下翻译不可用

myApp.run(['$rootScope', '$filter','$timeout', function($rootScope, $filter,$timeout) {
    $timeout(function(){
      alert($filter('translate')('MY_KEY'));
    },5000)
}]);

这里的问题是,在加载翻译时,“运行”将被执行。因此无法保证您将在那时加载翻译。

尝试在
app.run()
中注入
$translate
服务

角度平移版本1.1.1及以下版本 我还建议您升级到Pascal Precht的最新版本。这里面有一些

角度平移版本2.0.0及更高版本
看到这一点很有帮助。

我试过了,因为我把AngularJS的v1.2.16
$translate('my_key')
放进去了,它就不再工作了。结果是
console.log($translate('my_key'))={}
While
console.log($filter('translate')('my_key'))=my_key
(结果是键而不是值)。小心,$translate-return值是一个承诺,必须从AngularJS 2.0:-)开始注意。我也得到了一个{}而不是键的翻译。我也在run部分注入了$translate服务。我不知道我需要为这个承诺付出什么样的努力。我现在正在运行AngularJs 1.2.24。明白了$translate('DATEPICKER_CURRENT'))。然后(函数(值){datepickerPopupConfig.currentText=value;});用小提琴来演示这个问题怎么样?
myApp.run(['$rootScope', '$translate', '$log', function ($rootScope, $translate, $log) {
    $log.debug($translate('MY_KEY'));
}]);
myApp.run(['$rootScope', '$translate', '$log', function ($rootScope, $translate, $log) {
    // translate via promises (recommended way)
    $translate(['MY_KEY', 'MY_OTHER_KEY'])
            .then(function (translation) {
                $log.debug(translation.MY_KEY);
            });
    // translate instantly from the internal state of loaded translation
    $log.debug($translate.instant('MY_KEY'));
}]);