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。 这是我的结果:
- angular-translate( http://angular-translate.github.io )是本地化您的内容 (自定义string)的完美方式。 但它不会转换angular度的date,货币或数字filter。
- Angular有一个内置的机制来定位date,货币或数字filter。 支持语言环境的翻译可以在这里findhttps://github.com/angular/angular.js/tree/master/src/ngLocale ,angular度指南位于https://docs.angularjs.org/guide/i18n
- angular内置机制的问题: 在运行时改变locale并不是那么容易! 这是https://github.com/lgalfaso/angular-dynamic-locale进场的地方。; 它允许你很容易地在运行时改变语言。
所以解决scheme是同时使用项目, angular度翻译和angulardynamic语言环境 。
我发现一些有趣的事情 这不是angular度,但它是jQuery所以集成应该没问题。 我将testing演出,并获得信息。
包括这个脚本: https : //github.com/lgalfaso/angular-dynamic-locale/blob/master/src/tmhDynamicLocale.js可以在运行时设置语言环境。
- 从https://github.com/angular/angular.js/tree/master/src/ngLocale下载所需的所有语言环境;
- 将语言环境存储在Web服务器上的目录中,例如
/assets/js/locales/filename-LOCALE.js
– 注意: 在文件名中 作为 LOCALE 编写 的内容非常重要 – 所需的任何语言环境都将dynamic下载。 - 在你的模块中,包括
tmhDynamicLocale
作为'tmh.DynamicLocale'
例如var app = angular.module('app',['tmh.DynamicLocale'])
; - 在你的configuration中,传入提供程序即'
tmhDynamicLocaleProvider
'并设置你的语言环境文件的位置,例如tmhLocaleProvider.localeLocationPattern('/assets/js/locales/angular-locale-{{locale}}.js');
{{locale}}
将被换出在运行时设置的语言环境。 - 在
app.run()
设置应用程序的语言环境,传入'tmhDynamicLocale'
服务,例如app.run(['tmhDynamicLocale',function(tmhDynamicLocale){}]);
- 在你的运行callback中,像这样设置语言环境,
tmhDynamicLocale.set('en-gb');
。 另外,由于tmhDynamicLocale
是一个服务,你可以在不同的地方设置语言环境服务注入是允许的,例如,控制器,虽然记住,服务是单身人士,设置在控制器的语言环境将设置跨应用程序。
您现在应该有正确的区域设置运行。 有关更多信息,请使用tmhDynamicLocale
的README : 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 。
阅读要安装的每个库的文档。 这是我的离子项目的一个例子:
-
在我的index.html中:
... <!-- angular-dynamic-locale--> <script src="lib/angular-dynamic-locale/tmhDynamicLocale.min.js"></script> ...
-
在我的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); } } ...