Initial translation
This commit is contained in:
parent
2d681ecea1
commit
1576d33a2b
|
@ -20,6 +20,8 @@
|
|||
"@asymmetrik/ngx-leaflet": "^8.1.0",
|
||||
"@fortawesome/fontawesome-free": "^5.15.4",
|
||||
"@ng-bootstrap/ng-bootstrap": "11.0.0",
|
||||
"@ngx-translate/core": "^14.0.0",
|
||||
"@ngx-translate/http-loader": "^7.0.0",
|
||||
"bootstrap": "^5.1.3",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"leaflet": "^1.7.1",
|
||||
|
@ -2467,6 +2469,31 @@
|
|||
"webpack": "^5.30.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@ngx-translate/core": {
|
||||
"version": "14.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz",
|
||||
"integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/core": ">=13.0.0",
|
||||
"rxjs": "^6.5.3 || ^7.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@ngx-translate/http-loader": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz",
|
||||
"integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": ">=13.0.0",
|
||||
"@ngx-translate/core": ">=14.0.0",
|
||||
"rxjs": "^6.5.3 || ^7.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
|
@ -14331,6 +14358,22 @@
|
|||
"dev": true,
|
||||
"requires": {}
|
||||
},
|
||||
"@ngx-translate/core": {
|
||||
"version": "14.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz",
|
||||
"integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==",
|
||||
"requires": {
|
||||
"tslib": "^2.3.0"
|
||||
}
|
||||
},
|
||||
"@ngx-translate/http-loader": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz",
|
||||
"integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==",
|
||||
"requires": {
|
||||
"tslib": "^2.3.0"
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
|
@ -17752,7 +17795,9 @@
|
|||
"integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
|
||||
},
|
||||
"karma": {
|
||||
"version": "6.3.14",
|
||||
"version": "6.3.9",
|
||||
"resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz",
|
||||
"integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"body-parser": "^1.19.0",
|
||||
|
@ -21998,4 +22043,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
"@asymmetrik/ngx-leaflet": "^8.1.0",
|
||||
"@fortawesome/fontawesome-free": "^5.15.4",
|
||||
"@ng-bootstrap/ng-bootstrap": "11.0.0",
|
||||
"@ngx-translate/core": "^14.0.0",
|
||||
"@ngx-translate/http-loader": "^7.0.0",
|
||||
"bootstrap": "^5.1.3",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"leaflet": "^1.7.1",
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
<table *ngIf="sourceType === 'list'" id="table" class="table table-striped table-bordered dt-responsive nowrap">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nome</th>
|
||||
<th>Disponibile</th>
|
||||
<th>Autista</th>
|
||||
<th>{{ 'name'|translate|titlecase }}</th>
|
||||
<th>{{ 'available'|translate|titlecase }}</th>
|
||||
<th>{{ 'driver'|translate|titlecase }}</th>
|
||||
<ng-container *ngIf="auth.profile.hasRole('SUPER_EDITOR')">
|
||||
<th>Chiama</th>
|
||||
<th>{{ 'call'|translate|titlecase }}</th>
|
||||
</ng-container>
|
||||
<th>Interventi</th>
|
||||
<th>Minuti disponibilità</th>
|
||||
<th>{{ 'services'|translate|titlecase }}</th>
|
||||
<th>{{ 'availability_minutes'|translate|titlecase }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="table_body">
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
<div class="text-center">
|
||||
<h3 *ngIf="available !== undefined">Attualmente sei: <b>{{ available ? "Disponibile" : "Non disponibile" }}{{ manual_mode ? "" : " (programmato)" }}</b></h3>
|
||||
<h3 *ngIf="available !== undefined">{{ 'list.your_availability_is'|translate }} <b>{{ available ? ("available"|translate|uppercase) : ("unavailable"|translate|uppercase) }}{{ manual_mode ? "" : " ("+('programmed'|translate)+")" }}</b></h3>
|
||||
<div id="availability-btn-group">
|
||||
<button (click)="changeAvailibility(1)" type="button" [delay]="1000" tooltip="Cambia la tua disponibilità in 'attivo'" id="activate-btn" class="btn btn-lg btn-success me-1">Attiva</button>
|
||||
<button (click)="changeAvailibility(0)" type="button" [delay]="1000" tooltip="Cambia la tua disponibilità in 'non attivo'" id="deactivate-btn" class="btn btn-lg btn-danger">Disattiva</button>
|
||||
<button (click)="changeAvailibility(1)" type="button" [delay]="1000" tooltip="Cambia la tua disponibilità in 'attivo'" id="activate-btn" class="btn btn-lg btn-success me-1">{{ 'set_available'|translate|titlecase }}</button>
|
||||
<button (click)="changeAvailibility(0)" type="button" [delay]="1000" tooltip="Cambia la tua disponibilità in 'non attivo'" id="deactivate-btn" class="btn btn-lg btn-danger">{{ 'set_unavailable'|translate|titlecase }}</button>
|
||||
</div>
|
||||
<ng-container *ngIf="manual_mode !== undefined">
|
||||
<button type="button" class="btn btn-secondary" *ngIf="manual_mode" (click)="updateManualMode(0)">
|
||||
Attiva programmazione oraria
|
||||
{{ 'list.enable_schedules'|translate }}
|
||||
</button>
|
||||
<button type="button" class="btn btn-secondary" *ngIf="!manual_mode" (click)="updateManualMode(1)">
|
||||
Disattiva programmazione oraria
|
||||
{{ 'list.disable_schedules'|translate }}
|
||||
</button>
|
||||
<br>
|
||||
</ng-container>
|
||||
<button type="button" class="btn btn-lg" (click)="openScheduleModal()">
|
||||
Modifica orari disponibilità
|
||||
{{ 'list.update_schedules'|translate }}
|
||||
</button>
|
||||
</div>
|
||||
<owner-image></owner-image>
|
||||
<app-table [sourceType]="'list'" (changeAvailability)="changeAvailibility($event.newState, $event.user)" #table></app-table>
|
||||
<div class="text-center">
|
||||
<button (click)="requestTelegramToken()" class="btn btn-md btn-success mt-3">Collega l'account al bot Telegram</button>
|
||||
<button (click)="requestTelegramToken()" class="btn btn-md btn-success mt-3">{{ 'list.connect_telegram_bot'|translate }}</button>
|
||||
</div>
|
|
@ -1,9 +1,9 @@
|
|||
<div [className]="menuButtonClicked ? 'topnav responsive' : 'topnav'" id="topNavBar" *ngIf="auth.profile !== undefined">
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/list">Lista disponibilità</a>
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/services">Interventi</a>
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/trainings">Esercitazioni</a>
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/logs">Logs</a>
|
||||
<a style="float: right;" id="logout">Ciao, {{ auth.profile.name }}. <b id="logout-text" (click)="auth.logout()">Logout</b></a>
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/list" translate>menu.list</a>
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/services" translate>menu.services</a>
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/trainings" translate>menu.trainings</a>
|
||||
<a routerLinkActive="active" (click)="menuButtonClicked = false" routerLink="/logs" translate>menu.logs</a>
|
||||
<a style="float: right;" id="logout">Ciao, {{ auth.profile.name }}. <b id="logout-text" (click)="auth.logout()" translate>menu.logout</b></a>
|
||||
<a class="icon" id="menuButton" (click)="menuButtonClicked = !menuButtonClicked">☰</a>
|
||||
</div>
|
||||
|
||||
|
@ -14,6 +14,6 @@
|
|||
<router-outlet></router-outlet>
|
||||
|
||||
<div id="footer" class="footer text-center p-3">
|
||||
Allerta-VVF, software libero realizzato per i Vigili del Fuoco volontari.<br>
|
||||
<p>Revisione {{ versions.revision }} ({{ revision_datetime_string }})</p>
|
||||
{{ 'footer_text' | translate }}<br>
|
||||
<p>{{ 'revision' | translate | titlecase }} {{ versions.revision }} ({{ revision_datetime_string }})</p>
|
||||
</div>
|
||||
|
|
|
@ -3,6 +3,7 @@ import { AuthService } from './_services/auth.service';
|
|||
import { LocationBackService } from 'src/app/_services/locationBack.service';
|
||||
import { versions } from 'src/environments/versions';
|
||||
import { Router, RouteConfigLoadStart, RouteConfigLoadEnd } from '@angular/router';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
|
@ -18,9 +19,12 @@ export class AppComponent {
|
|||
constructor(
|
||||
public auth: AuthService,
|
||||
private locationBackService: LocationBackService,
|
||||
private router: Router
|
||||
private router: Router,
|
||||
private translate: TranslateService
|
||||
) {
|
||||
this.revision_datetime_string = new Date(versions.revision_timestamp).toLocaleString(undefined, { day: '2-digit', month: '2-digit', year: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric' });
|
||||
this.translate.setDefaultLang('en');
|
||||
this.translate.use("it");
|
||||
}
|
||||
|
||||
ngOnInit () {
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
|
||||
import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
||||
import { ToastrModule } from 'ngx-toastr';
|
||||
import { ModalModule } from 'ngx-bootstrap/modal';
|
||||
import { TooltipModule } from 'ngx-bootstrap/tooltip';
|
||||
|
@ -59,6 +61,13 @@ import { AuthInterceptor } from './_providers/auth-interceptor.provider';
|
|||
// Register the ServiceWorker as soon as the app is stable
|
||||
// or after 30 seconds (whichever comes first).
|
||||
registrationStrategy: 'registerWhenStable:30000'
|
||||
}),
|
||||
TranslateModule.forRoot({
|
||||
loader: {
|
||||
provide: TranslateLoader,
|
||||
useFactory: HttpLoaderFactory,
|
||||
deps: [HttpClient]
|
||||
}
|
||||
})
|
||||
],
|
||||
providers: [{
|
||||
|
@ -69,3 +78,7 @@ import { AuthInterceptor } from './_providers/auth-interceptor.provider';
|
|||
bootstrap: [AppComponent]
|
||||
})
|
||||
export class AppModule { }
|
||||
|
||||
export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
|
||||
return new TranslateHttpLoader(http);
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"menu": {
|
||||
"list": "List",
|
||||
"services": "Services",
|
||||
"trainings": "Trainings",
|
||||
"logs": "Logs",
|
||||
"logout": "Logout"
|
||||
},
|
||||
"list": {
|
||||
"your_availability_is": "You are:",
|
||||
"enable_schedules": "Enable hour schedules",
|
||||
"disable_schedules": "Disable hour schedules",
|
||||
"update_schedules": "Update availability schedules",
|
||||
"connect_telegram_bot": "Connect your account to the Telegram bot"
|
||||
},
|
||||
"programmed": "programmed",
|
||||
"available": "available",
|
||||
"unavailable": "unavailable",
|
||||
"set_available": "available",
|
||||
"set_unavailable": "unavailable",
|
||||
"name": "name",
|
||||
"driver": "driver",
|
||||
"call": "call",
|
||||
"services": "services",
|
||||
"availability_minutes": "availability_minutes",
|
||||
"footer_text": "Allerta-VVF, free software developed for volunteer firefighters brigades.",
|
||||
"revision": "revision"
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"menu": {
|
||||
"list": "Lista disponibilità",
|
||||
"services": "Interventi",
|
||||
"trainings": "Esercitazioni",
|
||||
"logs": "Logs",
|
||||
"logout": "Logout"
|
||||
},
|
||||
"list": {
|
||||
"your_availability_is": "Attualmente sei:",
|
||||
"enable_schedules": "Abilita programmazione oraria",
|
||||
"disable_schedules": "Disattiva programmazione oraria",
|
||||
"update_schedules": "Modifica orari disponibilità",
|
||||
"connect_telegram_bot": "Collega l'account al bot Telegram"
|
||||
},
|
||||
"programmed": "programmed",
|
||||
"available": "disponibile",
|
||||
"unavailable": "non disponibile",
|
||||
"set_available": "attiva",
|
||||
"set_unavailable": "disattiva",
|
||||
"name": "nome",
|
||||
"driver": "autista",
|
||||
"call": "chiama",
|
||||
"services": "interventi",
|
||||
"availability_minutes": "minuti di disponibilità",
|
||||
"footer_text": "Allerta-VVF, software libero realizzato per i Vigili del Fuoco volontari.",
|
||||
"revision": "revisione"
|
||||
}
|
Loading…
Reference in New Issue