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

时间:2014-05-23 09:57:06

标签: javascript angularjs angular-translate

在我的应用程序中,我使用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

4 个答案:

答案 0 :(得分:8)

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

angular-translate版本1.1.1及以下

myApp.run(['$rootScope', '$translate', '$log', function ($rootScope, $translate, $log) {
    $log.debug($translate('MY_KEY'));
}]);

我还建议您升级到最新版本的Pascal Precht angular-translatechanges中有一些new version

angular-translate 2.0.0及以上版本

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'));
}]);

请参阅此有用的migration guide

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

嗯,显然由于声誉问题我无法发表评论,我们遇到了一些您可能正在经历的事情 - 因为语言环境文件仅在角度的配置部分下载,它可能无法使用(当你打电话给翻译时。

我们通过预先添加所有区域设置文件解决了这个问题(我们没有很多,而且它们很小),在初始化中我们只选择正确的文件,这样我们就可以避免这个问题。

(这应该更像是一个评论,然后是一个答案,但我无法发表评论......)

答案 3 :(得分:0)

这不是解决您问题的方法,但如果您在“运行”中尝试以下代码,您就会明白为什么翻译在初始化状态下无效。

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

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