Angularjs和$ locale

我可以手动设置某些应用程序的$ locale吗?

是否有可能只支持当地人的方式是包括当前语言环境的angular度库本地化文件。 如果有多种文化呢? 在这种情况下,我必须dynamic加载本地化文件? 我错过了什么?

老实说,angular度的$ locale服务还是很原始的。 这真的很好,但在这方面似乎缺乏灵活性。 最大的问题是,即使通过dynamic重新加载正确的语言环境文件来切换语言环境,类似datefilter的事情也不会知道您已经更改了它,因为它们在设置时正在注册它们的语言环境信息。 因此,您目前有几个select:1.使用所选语言环境重新加载页面或2.编写您自己的使用它的语言环境提供程序和filter。

有可能创build一个服务,dynamic加载正确的脚本文件,重新初始化所有受影响的filter和服务,然后刷新视图,但我不确定在这一点上会涉及到什么。

您可以将所需的语言环境加载到localStorage ,然后刷新页面。 下面的脚本加载你需要的i18n文件。 dynamic更改语言环境尚不受支持。

 <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script> <script> var locale = JSON.parse(localStorage.getItem('locale')); if (locale) { document.write('<script src="scripts/i18n/angular-locale_'+locale+'.js"><\/script>'); } </script> 

我已经build立了一个关注i18n的angular度模块。 AngularJS对i18n的支持是相当原始的,如果你想拥有更多的控制权并且更加灵活,checkout angular-translate – http://angular-translate.github.io/

让我知道,如果我能帮忙!

对于任何正在寻找dynamic本地化的人来说, angular-dynamic-locale都是非常棒的工作。

我努力解决相同的问题,在这里阅读所有的答案,并在我的项目中介绍i18n / l10n。 这是我的结果:

所以解决scheme是同时使用项目, angular度翻译angulardynamic语言环境

我发现一些有趣的事情 这不是angular度,但它是jQuery所以集成应该没问题。 我将testing演出,并获得信息。

https://github.com/js-coder/x18n/wiki/Getting-started

https://github.com/js-coder/jQuery.x18n

包括这个脚本: https : //github.com/lgalfaso/angular-dynamic-locale/blob/master/src/tmhDynamicLocale.js可以在运行时设置语言环境。

  1. https://github.com/angular/angular.js/tree/master/src/ngLocale下载所需的所有语言环境;
  2. 将语言环境存储在Web服务器上的目录中,例如/assets/js/locales/filename-LOCALE.js注意: 在文件名中 作为 LOCALE 编写 的内容非常重要 – 所需的任何语言环境都将dynamic下载。
  3. 在你的模块中,包括tmhDynamicLocale作为'tmh.DynamicLocale'例如var app = angular.module('app',['tmh.DynamicLocale']) ;
  4. 在你的configuration中,传入提供程序即' tmhDynamicLocaleProvider '并设置你的语言环境文件的位置,例如tmhLocaleProvider.localeLocationPattern('/assets/js/locales/angular-locale-{{locale}}.js'); {{locale}}将被换出在运行时设置的语言环境。
  5. app.run()设置应用程序的语言环境,传入'tmhDynamicLocale'服务,例如app.run(['tmhDynamicLocale',function(tmhDynamicLocale){}]);
  6. 在你的运行callback中,像这样设置语言环境, tmhDynamicLocale.set('en-gb'); 。 另外,由于tmhDynamicLocale是一个服务,你可以在不同的地方设置语言环境服务注入是允许的,例如,控制器,虽然记住,服务是单身人士,设置在控制器的语言环境将设置跨应用程序。

您现在应该有正确的区域设置运行。 有关更多信息,请使用tmhDynamicLocaleREADME : https : //github.com/lgalfaso/angular-dynamic-locale/blob/master/README.md

信用: tmhDynamicLocale Lucas tmhDynamicLocale

如果你想加载浏览器的angularJS本地化, 请在你的项目中安装https://github.com/angular/bower-angular-i18n和https://github.com/lgalfaso/angular-dynamic-locale

阅读要安装的每个库的文档。 这是我的离子项目的一个例子:

  1. 在我的index.html中:

     ... <!-- angular-dynamic-locale--> <script src="lib/angular-dynamic-locale/tmhDynamicLocale.min.js"></script> ... 
  2. 在我的app.js

     var app = angular.module('project-name', ['ionic',..., 'tmh.dynamicLocale']); ... // tmhDynamicLocaleProvider app.config(function(tmhDynamicLocaleProvider) { // override the default path (angular/i18n/angular-locale_{{locale}}.js) to the stored Angular i18n locale files tmhDynamicLocaleProvider.localeLocationPattern('lib/angular-i18n/angular-locale_{{locale}}.js'); }) ... app.run(function($rootScope, $ionicPlatform, ..., tmhDynamicLocale){ // set locale for angular formats var inArray = function(needle, haystack) { var key = ''; for (key in haystack) { if (haystack[key] === needle) { return true; } } return false; }; var preferredLanguage = navigator.language || navigator.browserLanguage || navigator.systemLanguage || navigator.userLanguage; if (typeof preferredLanguage === 'string') { var code = preferredLanguage.substring(2, 0); if (inArray(code, PROPERTIES.LANGUAGES)) { tmhDynamicLocale.set(code); } } ...