在我的应用程序中,我使用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
答案 0 :(得分:8)
尝试在$translate
注入app.run()
服务。
myApp.run(['$rootScope', '$translate', '$log', function ($rootScope, $translate, $log) {
$log.debug($translate('MY_KEY'));
}]);
我还建议您升级到最新版本的Pascal Precht angular-translate。 changes中有一些new version。
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)
}]);
这里的问题是,在加载翻译时,'运行'将被执行。因此,无法保证您将在当时加载翻译。