问题描述
我的应用程序中确实有多语言支持,并希望为角度材料日期选择器实现翻译。我从物料中使用了dateAdapter类并设置了值,但这样做时我的显示格式发生了变化。
有人遇到过同样的问题吗?
export const MY_FORMATS = {
parse: {
dateInput: 'LL',},display: {
dateInput: 'ddd,MMM. D YYYY',monthYearLabel: 'MMM YYYY',dateA11yLabel: 'LL',monthYeara11yLabel: 'MMMM YYYY',};
@Component({
selector: 'test',templateUrl: './test.html',styleUrls: ['./test.scss'],providers: [{ provide: MAT_DATE_FORMATS,useValue: MY_FORMATS }],})
ngOnInit(): void {
//on language change
//change language
this.dateAdapter.setLocale('fr');
}
解决方法
对于多语言支持,建议您使用 MomentDateAdapter 。这是Angular文档中关于多语言支持和NativeDateAdapter(默认值)的一条注释:
MatNativeDateModule基于JavaScript的本机Date对象中可用的功能。因此,它不适用于许多区域。本机Date对象的最大缺点之一是无法设置解析格式。我们强烈建议使用MomentDateAdapter或与您选择的格式/解析库一起使用的自定义DateAdapter。
唯一的对应关系是,通过使用MomentDateAdapter
,您现在将moment
作为依赖项……但没什么大不了的,您可能已经在使用它了。
以下是一些示例代码(摘自Angular文档):
import {Component} from '@angular/core';
import {
MAT_MOMENT_DATE_FORMATS,MomentDateAdapter,MAT_MOMENT_DATE_ADAPTER_OPTIONS,} from '@angular/material-moment-adapter';
import {DateAdapter,MAT_DATE_FORMATS,MAT_DATE_LOCALE} from '@angular/material/core';
/** @title Datepicker with different locale */
@Component({
selector: 'test',templateUrl: 'test.html',styleUrls: ['test.css'],providers: [
// The locale would typically be provided on the root module of your application. We do it at
// the component level here,due to limitations of our example generation script.
{provide: MAT_DATE_LOCALE,useValue: 'fr'},// `MomentDateAdapter` and `MAT_MOMENT_DATE_FORMATS` can be automatically provided by importing
// `MatMomentDateModule` in your applications root module. We provide it at the component level
// here,due to limitations of our example generation script.
{
provide: DateAdapter,useClass: MomentDateAdapter,deps: [MAT_DATE_LOCALE,MAT_MOMENT_DATE_ADAPTER_OPTIONS]
},{provide: MAT_DATE_FORMATS,useValue: MAT_MOMENT_DATE_FORMATS},],})
export class DatepickerLocaleExample {
constructor(private _adapter: DateAdapter<any>) {}
// Change adapter language to japanese
japanese() {
this._adapter.setLocale('ja-JP');
}
}