如何使用 angular-translate 动态翻译输入文本(日期选择器)值?
How to translate the input text (datepicker) value dynamically using angular-translate?
我正在使用 angular-translate 为我的应用程序提供 i18n,我能够正确翻译标签、按钮文本等。
我面临的问题是当我试图根据所选语言区域设置更改日期时。日期是从日期选择器中选择的。
日期被选入输入元素:
<input type="text" class="form-control" required="" ng-model="date" placeholder="{{ 'DATE_PLACEHOLDER' | translate }}" translate="{{ 'select_date'|translate:{date:date} }}"/>
占位符翻译完美无缺,但当我更改语言时,日期格式没有发生任何变化。
我创建了一个 plunkr 描述当前场景。
请建议我可以翻译插入的值或表单中的文本的方法。
另外,我想知道如何克服页面加载前键值的闪烁。
添加意大利语言环境,我从 http://forum.html.it/forum/showthread/t-2912577.html:
复制了它
$.fn.datepicker.dates['it'] = {
days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"],
daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"],
daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"],
months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
today: "Oggi",
clear: "Cancella",
weekStart: 1,
format: "dd/mm/yyyy"
};
将语言代码的转换映射从 en_EN
格式添加到 en
:
// language codes convertor map
var convertorMap = {
'en_US': 'en',
'it_IT': 'it'
};
在您的语言切换器功能中,删除当前的日期选择器并使用新语言初始化一个新的日期选择器,并确保以新格式更新日期:
$scope.switchLanguage = function (key) {
var dp = $('#datePicker');
// get current date
var currentDate = dp.datepicker('getDate');
// update datepicker with new locale
dp.datepicker('remove');
dp.datepicker({
autoclose: true,
language: convertorMap[key]
});
// restore current date according to the new locale
dp.datepicker('update', currentDate);
$translate.use(key);
};
要仅在翻译准备就绪时显示视图,请将包装元素(我使用 <body>
)更改为:
<body ng-controller="Ctrl" class="ng-hide" ng-show="showView">
.....
</body>
在你的控制器中:
// will be fired when the service is "ready" to translate (i.e. loading 1st language)
$translate.onReady(function () {
$scope.showView = true;
});
ng-model jQuery 日期选择器上的指令什么都不做,所以我删除了它,并添加了 ng-model 将代码更新为初始日期选择器函数:
$('#datePicker').datepicker({
autoclose: true
})
// update ng model
.on('changeDate', function(e) {
$timeout(function () {
$scope.date = $('#datePicker').datepicker('getUTCDate');
});
});
如果您在控制台中看到如下消息:
pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications.
据说会在下一个版本中修复:https://github.com/taigaio/taiga-front/issues/778
我正在使用 angular-translate 为我的应用程序提供 i18n,我能够正确翻译标签、按钮文本等。 我面临的问题是当我试图根据所选语言区域设置更改日期时。日期是从日期选择器中选择的。
日期被选入输入元素:
<input type="text" class="form-control" required="" ng-model="date" placeholder="{{ 'DATE_PLACEHOLDER' | translate }}" translate="{{ 'select_date'|translate:{date:date} }}"/>
占位符翻译完美无缺,但当我更改语言时,日期格式没有发生任何变化。 我创建了一个 plunkr 描述当前场景。
请建议我可以翻译插入的值或表单中的文本的方法。 另外,我想知道如何克服页面加载前键值的闪烁。
添加意大利语言环境,我从 http://forum.html.it/forum/showthread/t-2912577.html:
复制了它$.fn.datepicker.dates['it'] = { days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"], daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], today: "Oggi", clear: "Cancella", weekStart: 1, format: "dd/mm/yyyy" };
将语言代码的转换映射从
en_EN
格式添加到en
:// language codes convertor map var convertorMap = { 'en_US': 'en', 'it_IT': 'it' };
在您的语言切换器功能中,删除当前的日期选择器并使用新语言初始化一个新的日期选择器,并确保以新格式更新日期:
$scope.switchLanguage = function (key) { var dp = $('#datePicker'); // get current date var currentDate = dp.datepicker('getDate'); // update datepicker with new locale dp.datepicker('remove'); dp.datepicker({ autoclose: true, language: convertorMap[key] }); // restore current date according to the new locale dp.datepicker('update', currentDate); $translate.use(key); };
要仅在翻译准备就绪时显示视图,请将包装元素(我使用
<body>
)更改为:<body ng-controller="Ctrl" class="ng-hide" ng-show="showView"> ..... </body>
在你的控制器中:
// will be fired when the service is "ready" to translate (i.e. loading 1st language) $translate.onReady(function () { $scope.showView = true; });
ng-model jQuery 日期选择器上的指令什么都不做,所以我删除了它,并添加了 ng-model 将代码更新为初始日期选择器函数:
$('#datePicker').datepicker({ autoclose: true }) // update ng model .on('changeDate', function(e) { $timeout(function () { $scope.date = $('#datePicker').datepicker('getUTCDate'); }); });
如果您在控制台中看到如下消息:
pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications.
据说会在下一个版本中修复:https://github.com/taigaio/taiga-front/issues/778