3

在我的应用程序中,我使用了 AngularJS 模块 Pascal Precht(翻译模块)。我来找你是因为我无法获得翻译键的方法myApp.Runapp.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(最后一个稳定版本)。谢谢

4

4 回答 4

8

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

角度翻译版本 1.1.1 及以下

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

我还建议您升级到最新版本的 Pascal Precht 的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'));
}]);

请参阅此有用的迁移指南

于 2014-06-01T23:37:24.607 回答
0

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

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

这里的问题是,在加载翻译时,将执行“运行”。所以不能保证你会在那个时候加载翻译。

于 2014-05-28T14:52:52.780 回答
0

好吧,显然由于声誉问题我无法发表评论,我们遇到了一些可能是您正在经历的事情 - 因为语言环境文件仅在 angular 的配置部分中下载,所以当您调用时它可能不可用(还)翻译。

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

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

于 2014-05-28T12:16:46.407 回答
0

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

console.log($translate('MY_KEY'));
于 2014-05-27T10:04:12.857 回答