【问题标题】:Get current language with angular-translate使用 angular-translate 获取当前语言
【发布时间】:2013-12-07 17:53:46
【问题描述】:

有没有办法在控制器中获取当前使用的语言(没有$translateProvider)?

$translate 服务中找不到任何内容。

【问题讨论】:

  • 如果出于某种上帝遗弃的原因,您需要在全局视图中直接使用它,可能最省力的方法是在您的翻译提供程序中定义语言代码(即在实际翻译文件中) 例如{ "LANG_CODE": "en" } 并像往常一样在视图中使用 translate 过滤器,例如:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
  • 为什么不用$window.navigator

标签: angularjs angular-translate


【解决方案1】:

$translate.use() 是一个 getter 和 setter。

请参阅文档链接中的此演示:

http://jsfiddle.net/PascalPrecht/eUGWJ/7/

【讨论】:

  • 我是否应该将此服务仅用于该单一功能以获取当前浏览器语言?即使我不打算做翻译
  • 这并没有给我当前的语言,而是默认的。 $translate.proposedLanguage() 根据问题为我提供了控制器中当前使用的语言
【解决方案2】:

$translate.use() 是要走的路。此外,当执行异步加载器时,您可能想使用$translate.proposedLanguage(),它返回当前加载但尚未完成加载的语言的语言键。

【讨论】:

  • 我试图在加载翻译之前确定语言,但未设置 $translate.use()$translate.proposedLanguage() 给了我正确的语言。
  • 可以在 app.config 中使用这个$translate.proposedLanguage() 吗?我只有 $translateProvider,我需要在配置中找到这个函数的结果,而不是稍后在控制器中。你有想法吗 ?非常感谢
  • + for proposedLanguage()
【解决方案3】:

当使用 angular-translate-loader-static-files 时,我注意到 $translate.proposedLanguage() 在使用默认语言时返回 undefined,而 $translate.use() 总是返回建议的语言。

因此我使用以下方法修复它:

var currentLang = $translate.proposedLanguage() || $translate.use();

【讨论】:

  • 这是我在所有情况下获得当前语言的唯一方法。
【解决方案4】:

$translate.use() 似乎不适用于应用程序的初始加载,以从存储中获取最后选择的语言:$translate.storage().get( $translate.storageKey() ) 要不就 $translate.proposedLanguage();

【讨论】:

    【解决方案5】:

    $translate 服务有一个名为preferredLanguage() 的方法,可以返回您想要的内容。这个函数的返回是语言的字符串,比如'en'。

    这里我给你写了一个例子:

    angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
       $scope.changeLanguage = function (langKey) {
          $translate.use(langKey);
       };
       $scope.getCurrentLanguage = function () {
           $translate.preferredLanguage();
       };
    }])
    

    【讨论】:

    • 这将为您提供“首选”语言,而不一定是所选的“当前”语言。如果您在语言之间切换,我的理解是这不会同样发生。
    • var currentLanguage = $translate.use();根据 charlietfl 的回答,确实打开了变化
    【解决方案6】:

    translate.currentLang 用于检查 i18n 中当前选择的语言

    【讨论】:

      【解决方案7】:

      我认为这是确定语言的更好方法 -

      $window.navigator.language || $window.navigator.userLanguage
      

      【讨论】:

        【解决方案8】:

        也许不相关,但可能有用。在angular2+中访问当前语言的方式是

        ...
        import { TranslateService } from '@ngx-translate/core';
        
        export class MyComponent implements OnInit {
          constructor(private translate: TranslateService) {}
        
          ngOnInit() {
           translate.use('it');
           const currentLang = this.translate.currentLang;
          }
         }
        

        【讨论】:

          猜你喜欢
          • 2017-07-30
          • 2021-01-09
          • 1970-01-01
          • 2020-09-26
          • 1970-01-01
          • 1970-01-01
          • 2017-04-11
          • 2011-05-11
          • 1970-01-01
          相关资源
          最近更新 更多