如何在 Angular 8 中的 select 选项列表中本地化 WeekDay 枚举
How to Localized WeekDay enums in select option list in Angular 8
我想在 Angular 中创建一个包含工作日的简单下拉列表并将其本地化。
我找到了 WeekDay 枚举,它似乎非常适合这项工作。
public weekDays: WeekDay[] = [WeekDay.Monday, WeekDay.Tuesday, WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday, WeekDay.Saturday, WeekDay.Sunday];
App.Component.Ts
import { Component } from '@angular/core';
import { WeekDay } from '@angular/common';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
public weekDays: WeekDay[] = [WeekDay.Monday, WeekDay.Tuesday, WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday, WeekDay.Saturday, WeekDay.Sunday];
public selectedWeekDay: WeekDay;
constructor(
public translateService: TranslateService) { }
}
然后我在 html 文件中创建一个 Select 选项
App.Component.Html
<select>
<option *ngFor="let day of weekDays" value="day">{{day}} {{day | date: 'EEEE' : '' : translateService.currentLang}}</option>
</select>
因为我来自丹麦,所以我想用丹麦语显示日期,所以我添加了翻译服务。这给了我一个星期四的列表,我知道这一定是因为 {{day}} 不是 date 类型,但我可以' 似乎找不到 WeekDays 的管道。但我无法想象 Angular?
中不应该已经内置了一些东西
最后我想将选定的 WeekDay 绑定到 属性
public selectedWeekDay: WeekDay;
我在这里创建了一个完整的示例。
这是我结束创建的解决方案。
app.component.html
<select>
<option *ngFor="let day of weekDays" value="day">{{ 'weekday.' + day | translate}}</option>
</select>
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { HelloComponent } from './hello.component';
import { HttpClient, HttpClientModule } from '@angular/common/http';
// ngx-translate
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
//Add Danish language
import { registerLocaleData } from '@angular/common';
import localeDanish from '@angular/common/locales/da';
registerLocaleData(localeDanish, 'dk');
@NgModule({
imports: [ BrowserModule, FormsModule,
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
}) ],
declarations: [ AppComponent, HelloComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
// The HttpLoaderFactory is required for AOT (ahead of time) compilation.
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
app.component.ts
import { Component } from '@angular/core';
import { WeekDay } from '@angular/common';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
public weekDays: WeekDay[] = [WeekDay.Monday, WeekDay.Tuesday, WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday, WeekDay.Saturday, WeekDay.Sunday];
public selectedWeekDay: WeekDay;
constructor(
public translateService: TranslateService) {
translateService.addLangs(['dk', 'se']);
translateService.setDefaultLang('dk');
translateService.use('dk');
}
}
assets/i18n/dk.json
{
"weekday": {
"1": "Mandag",
"2": "Tirsdag",
"3": "Onsdag",
"4": "Torsdag",
"5": "Fredag",
"6": "Lørdag",
"0": "Søndag"
}
}
可以在此处找到一个 运行 示例
https://stackblitz.com/edit/angular-slpqpy
我想在 Angular 中创建一个包含工作日的简单下拉列表并将其本地化。
我找到了 WeekDay 枚举,它似乎非常适合这项工作。
public weekDays: WeekDay[] = [WeekDay.Monday, WeekDay.Tuesday, WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday, WeekDay.Saturday, WeekDay.Sunday];
App.Component.Ts
import { Component } from '@angular/core';
import { WeekDay } from '@angular/common';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
public weekDays: WeekDay[] = [WeekDay.Monday, WeekDay.Tuesday, WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday, WeekDay.Saturday, WeekDay.Sunday];
public selectedWeekDay: WeekDay;
constructor(
public translateService: TranslateService) { }
}
然后我在 html 文件中创建一个 Select 选项
App.Component.Html
<select>
<option *ngFor="let day of weekDays" value="day">{{day}} {{day | date: 'EEEE' : '' : translateService.currentLang}}</option>
</select>
因为我来自丹麦,所以我想用丹麦语显示日期,所以我添加了翻译服务。这给了我一个星期四的列表,我知道这一定是因为 {{day}} 不是 date 类型,但我可以' 似乎找不到 WeekDays 的管道。但我无法想象 Angular?
中不应该已经内置了一些东西最后我想将选定的 WeekDay 绑定到 属性
public selectedWeekDay: WeekDay;
我在这里创建了一个完整的示例。
这是我结束创建的解决方案。
app.component.html
<select>
<option *ngFor="let day of weekDays" value="day">{{ 'weekday.' + day | translate}}</option>
</select>
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { HelloComponent } from './hello.component';
import { HttpClient, HttpClientModule } from '@angular/common/http';
// ngx-translate
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
//Add Danish language
import { registerLocaleData } from '@angular/common';
import localeDanish from '@angular/common/locales/da';
registerLocaleData(localeDanish, 'dk');
@NgModule({
imports: [ BrowserModule, FormsModule,
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
}) ],
declarations: [ AppComponent, HelloComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
// The HttpLoaderFactory is required for AOT (ahead of time) compilation.
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
app.component.ts
import { Component } from '@angular/core';
import { WeekDay } from '@angular/common';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
public weekDays: WeekDay[] = [WeekDay.Monday, WeekDay.Tuesday, WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday, WeekDay.Saturday, WeekDay.Sunday];
public selectedWeekDay: WeekDay;
constructor(
public translateService: TranslateService) {
translateService.addLangs(['dk', 'se']);
translateService.setDefaultLang('dk');
translateService.use('dk');
}
}
assets/i18n/dk.json
{
"weekday": {
"1": "Mandag",
"2": "Tirsdag",
"3": "Onsdag",
"4": "Torsdag",
"5": "Fredag",
"6": "Lørdag",
"0": "Søndag"
}
}
可以在此处找到一个 运行 示例 https://stackblitz.com/edit/angular-slpqpy