在我的控制器内使用翻译之前,我如何才能将其翻译预付

  • 本文关键字:翻译 控制器 angularjs
  • 更新时间 :
  • 英文 :


我正在尝试Angular翻译,我需要使用控制器内的翻译,但是控制器甚至加载了我的翻译之前运行代码。P>

var myApp = angular.module('myApp', ['pascalprecht.translate']);
angular.module('myApp').config(function ($translateProvider) {
  $translateProvider.useStaticFilesLoader({
    prefix: 'locales/validation-',
    suffix: '.json'
  });
  // load 'en' table on startup
    $translateProvider.preferredLanguage('en');
});
angular.module('myApp').controller('Ctrl', ['$scope', '$translate', function ($scope, $translate) {
  console.debug($translate('INVALID_INTEGER'));
  $scope.switchLanguage = function (key) {
    $translate.uses(key);
    console.debug($translate('INVALID_INTEGER'));
  };
}]);

调用console.debug($translate('INVALID_INTEGER'));时,它总是显示INVALID_INTEGER而不是真实的翻译,因此我得出结论,我的翻译尚未加载。我是Angular和Angular-Translate的新手,所以我不确定下一步该怎么做吗?我是否必须使用promise,我更喜欢angular-translate中的内置功能。我想要每种语言的外部和单独json文件的简单语言语言语言。
编辑
我真正的问题是我所有的翻译都直接在控制器内而不是视图中。angular-translate似乎适用于视图中显示的任何内容,但是在控制器中,它不会刷新控制器本身内部的代码。
请注意,我现在在github上有一个工作的beta项目,这是我使用翻译的地方...

angular-validation (表单验证变得容易)。<<

我的项目是一个角指令,并使用Locales语言,如果您运行项目并在加载模板之前选择语言,则可以使用该语言,但是在调用$scope.switchLanguage()之后视图上的任何翻译都可以工作。

好的,从上方的github项目中,现在很明显,由于以下原因,翻译不起作用:

  1. ngxvalidation指令的链接代码仅在页面加载上运行一次,并且将字符串转换为当前语言所设置的任何内容。除非您完全刷新页面,否则该代码再也不会运行,因此即使您使用$ translate.uses()指令已翻译和缓存的字符串,甚至不会再次尝试翻译它们。
  2. 当您单击"负载测试"表格多次时,任何事情都不会发生 - 视图未重新加载(并且指令未重新创建,doh!)。这并不奇怪,因为它是相同的观点!为什么Angular重新加载已经加载的东西 - 它不知道您更改了翻译,而您实际上是在这种特殊的特殊情况下重新加载的。

因此,您将拥有一些解决方案,我认为最简单的解决方案不是缓存翻译的字符串,仅在及时翻译 - 内部验证器()。那应该永远工作。如果您想对缓存保持聪明,而不是要找到一种方法来确保缓存始终有效:)并且众所周知,计算机科学中只有两个难题,一个是缓存无效的,另一个是[insert_hatewhate_youre_working_on_right_now_here]


详细:

在您正在执行的指令中:

messages[i] = $translate('INVALID_URL');

用:

替换所有这样的作业
messages[i] = 'INVALID_URL';

然后在验证器函数内部进行:

if(!isValid) {
  isFieldValid = false;
  message += $translate(messages[j]);
}

最新更新