0
我正在使用角动态语言环境(tmhDynamicLocale),但希望在应用程序启动时将所有语言环境预加载到缓存(tmhDynamicLocaleCache)中。这背后的动机是将我所有的资源捆绑到1个缩小的js文件中,而不是标准的延迟加载。这个地方有没有完整的例子?如何将所有语言环境预加载到角动态语言环境缓存中(tmhDynamicLocaleCache)
我正在使用角动态语言环境(tmhDynamicLocale),但希望在应用程序启动时将所有语言环境预加载到缓存(tmhDynamicLocaleCache)中。这背后的动机是将我所有的资源捆绑到1个缩小的js文件中,而不是标准的延迟加载。这个地方有没有完整的例子?如何将所有语言环境预加载到角动态语言环境缓存中(tmhDynamicLocaleCache)
解决了它。 我所做的就是把每个区域设置成一个模块,像这样:
angular.module("myapp.locale.en", [
'tmh.dynamicLocale'
])
.run(['tmhDynamicLocaleCache', function (tmhDynamicLocaleCache) {
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
function getDecimals(n) {
n = n + '';
var i = n.indexOf('.');
return (i == -1) ? 0 : n.length - i - 1;
};
function getVF(n, opt_precision) {
var v = opt_precision;
if (undefined === v) {
v = Math.min(getDecimals(n), 3);
}
var base = Math.pow(10, v);
var f = ((n * base) | 0) % base;
return {v: v, f: f};
};
tmhDynamicLocaleCache.put('en', {
"DATETIME_FORMATS": {
"AMPMS": [
"AM",
"PM"
],
"DAY": [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"FIRSTDAYOFWEEK": 6,
"MONTH": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"SHORTDAY": [
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"
],
"SHORTMONTH": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
],
"WEEKENDRANGE": [
5,
6
],
"fullDate": "EEEE, MMMM d, y",
"longDate": "MMMM d, y",
"medium": "MMM d, y h:mm:ss a",
"mediumDate": "MMM d, y",
"mediumTime": "h:mm:ss a",
"short": "M/d/yy h:mm a",
"shortDate": "M/d/yy",
"shortTime": "h:mm a"
},
"NUMBER_FORMATS": {
"CURRENCY_SYM": "$",
"DECIMAL_SEP": ".",
"GROUP_SEP": ",",
"PATTERNS": [
{
"gSize": 3,
"lgSize": 3,
"maxFrac": 3,
"minFrac": 0,
"minInt": 1,
"negPre": "-",
"negSuf": "",
"posPre": "",
"posSuf": ""
},
{
"gSize": 3,
"lgSize": 3,
"maxFrac": 2,
"minFrac": 2,
"minInt": 1,
"negPre": "\u00a4-",
"negSuf": "",
"posPre": "\u00a4",
"posSuf": ""
}
]
},
"id": "en",
"pluralCat": function (n, opt_precision) {
var i = n | 0;
var vf = getVF(n, opt_precision);
if (i == 1 && vf.v === 0) {
return PLURAL_CATEGORY.ONE;
}
return PLURAL_CATEGORY.OTHER;
}
});
}])
;
创建一个模块,这样每个区域设置使用,只需更改“恩”为“PT”或“他”等(3处在上面的代码中)。
下一页加载这些模块到您的app.js ...
angular.module('myapp', [
'myapp.locale.en',
'myapp.locale.pt',
'myapp.locale.de',
'myapp.locale.he'
])
这样.RUN时()调用这些模块就会把Locale对象到tmhDynamicLocaleCache的。然后当你以后使用tmhDynamicLocale.set('en')时,它会在缓存中找到locale对象并使用它。
由于我们的代码在加载到'angular-locale - {{locale}}。js'文件中的异步调用之前加载了英文短语,日期和数字,我们必须将其应用。证明是非常多的解决方案。但是,我们必须让我们的'i18nLanguageService'模块将这些新创建的语言环境模块(在您的情况下为'myapp.locale.en')视为依赖关系,这将强制tmhDynamicLocaleCache在使用之前填充。感谢您领导解决方案! –