0

我正在尝试根据我网站的可用语言(英语、西班牙语、葡萄牙语)格式化 Bootstrap UI 日期选择器。

我的观点是这样的:

<div class="row">
    <div class="col-md-5">
        <div class="form-group">
            <label class="control-label" translate="verificar.form.fechanac" for="field_fechanac">Fecha de Nacimiento</label>
            <p class="input-group">
            <input type="text" class="form-control" id="field_fechanac" name="field_fechanac"
            uib-datepicker-popup="{{formatoFecha}}" ng-model="vm.form.fechanac" is-open="data.isOpen" datepicker-options="{showWeeks: false, startingDay: 1, startWeek: 1}" ng-required="true" readonly />
            <span class="input-group-btn">
                <button type="button" class="btn btn-default" ng-click="data.isOpen = true"><i class="glyphicon glyphicon-calendar"></i></button>
                </span>
            </p>
            <div ng-show="verificarForm.fechanac.$invalid">
                <p class="help-block"
                   ng-show="verificarForm.fechanac.$error.required"
                   translate="entity.validation.required">This field is
                    required.</p>
            </div>
        </div>
    </div>
</div>

我的控制器:

angular.module('webclientesApp')
    .controller('ValidateController', ValidateController);

ValidateController.$inject = ['$scope', 'Principal', 'ValidateService', '$state', '$window'];

function ValidateController($scope, Principal, ValidateService,  $state, $window) {

$scope.dt = new Date();
var vm = this;
vm.formData = {};
vm.data = {};

vm.formatoFecha = (function formatearFecha(){   
   vm.lenguaje = $window.navigator.language || $window.navigator.userLanguage;
   console.log (vm.lenguaje);
   if (vm.lenguaje === "es"){
      vm.formatoFecha= "dd/MM/yyyy";    
   }else if (vm.lenguaje === "pt-pt"){
      vm.formatoFecha= "MM/dd/yyyy";
       }
    return vm.formatoFecha;

})();

所需的行为是日期表单以正确的格式显示日期。事实证明,这并不像预期的那样:

在此处输入图像描述

我错过了什么吗?抱歉,如果问题在某个地方得到了回答,我已经检查了很多很多关于这个问题的问题,但似乎并不完全符合我的需求。


@Martijn Welker 回复后编辑的问题

我已经(事实上,我已经)将 angular-dynamic-locale 注入到控制器中,并像这样调用 $locale:

vm.formatoFecha = (function formatearFecha(){   
vm.lenguaje = $locale;
console.log (vm.lenguaje);
vm.formatoFecha = vm.lenguaje.DATETIME_FORMATS.mediumDate;

return vm.formatoFecha
})();

然后我像这样使用 uib-datepicker-popup(这应该使用“MMM d, y”格式):

<div class="row">
    <div class="col-md-5">
      <div class="form-group">
            <label class="control-label" translate="verificar.form.fechanac" for="field_fechanac">Fecha de Nacimiento</label>
            <p class="input-group">
            <input type="text" class="form-control" id="field_fechanac" name="field_fechanac"
            uib-datepicker-popup="{{formatoFecha}}" ng-model="vm.form.fechanac" is-open="data.isOpen" datepicker-options="{showWeeks: false, startingDay: 1, startWeek: 1}" ng-required="true" readonly />
            <span class="input-group-btn">
              <button type="button" class="btn btn-default" ng-click="data.isOpen = true"><i class="glyphicon glyphicon-calendar"></i></button>
              </span>
            </p>
            <div ng-show="verificarForm.fechanac.$invalid">
                <p class="help-block"
                   ng-show="verificarForm.fechanac.$error.required"
                   translate="entity.validation.required">This field is
                    required.</p>
            </div>
        </div>
    </div>
</div>     

但仍然没有。我不知道我是否错误地调用了控制器或其他东西。

4

1 回答 1

0

您必须包含正确的Angular 语言环境。您可以将这些包含在您的索引中,或者使用插件在语言切换时动态加载它们,就像这样

通过在提供程序中指定 localeLocationPattern,您还可以从 CDN 加载文件:

tmhDynamicLocaleProvider.localeLocationPattern(
     'https://cdnjs.cloudflare.com/ajax/libs/angular-i18n/' + angular.version.full + '/angular-locale_{{locale}}.js'
);

locale将被插入到您当前设置的语言环境(由 设置tmhDynamicLocale.set()

于 2017-04-24T12:53:04.763 回答