Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 69da7086

Přidáno uživatelem castic96 před asi 4 roky(ů)

Re #7905: Lokalizace FE
- vytvořeny překlady cz a en
- překlady definovány v JSON souborech

Zobrazit rozdíly:

fe/fulltextsearch/package-lock.json
1770 1770
        "webpack-sources": "1.4.3"
1771 1771
      }
1772 1772
    },
1773
    "@ngx-translate/core": {
1774
      "version": "12.1.2",
1775
      "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-12.1.2.tgz",
1776
      "integrity": "sha512-ZudJsqIxTKlLmPoqK8gJY3UpMGujR0Xm7HfXL6AR79yGRS23QqpjAhMfx4v5qUCcHMmQ9/78bW8QJLfp31c7vQ=="
1777
    },
1778
    "@ngx-translate/http-loader": {
1779
      "version": "4.0.0",
1780
      "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-4.0.0.tgz",
1781
      "integrity": "sha512-x8LumqydWD7eX9yQTAVeoCM9gFUIGVTUjZqbxdAUavAA3qVnk9wCQux7iHLPXpydl8vyQmLoPQR+fFU+DUDOMA==",
1782
      "requires": {
1783
        "tslib": "^1.9.0"
1784
      }
1785
    },
1773 1786
    "@npmcli/ci-detect": {
1774 1787
      "version": "1.2.0",
1775 1788
      "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.2.0.tgz",
......
2239 2252
      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
2240 2253
      "dev": true
2241 2254
    },
2242
    "angular-x-image-viewer": {
2243
      "version": "2.0.1",
2244
      "resolved": "https://registry.npmjs.org/angular-x-image-viewer/-/angular-x-image-viewer-2.0.1.tgz",
2245
      "integrity": "sha512-wt+wVwBOYqDlsJb8yqVKf5RyuZZmG0oZCG4w98ChQqBkZ3IyuuyrwP9lcsf1vOKs/0nfWrTob3YqfEppVlOLAA=="
2246
    },
2247 2255
    "ansi-colors": {
2248 2256
      "version": "3.2.4",
2249 2257
      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
fe/fulltextsearch/package.json
24 24
    "@fortawesome/angular-fontawesome": "^0.6.1",
25 25
    "@fortawesome/fontawesome-svg-core": "^1.2.28",
26 26
    "@fortawesome/free-solid-svg-icons": "^5.13.0",
27
    "@ngx-translate/core": "^12.1.2",
28
    "@ngx-translate/http-loader": "^4.0.0",
27 29
    "bootstrap": "^4.4.1",
28 30
    "jquery": "^3.4.1",
29 31
    "ngx-image-viewer": "^1.0.13",
fe/fulltextsearch/src/app/app.component.ts
1 1
import { Component } from '@angular/core';
2
import { TranslateService } from '@ngx-translate/core';
2 3

  
3 4
@Component({
4 5
  selector: 'app-root',
......
6 7
  styleUrls: ['./app.component.css']
7 8
})
8 9
export class AppComponent {
10
  constructor(translate: TranslateService) {
11
    translate.addLangs(['en', 'de', 'cz']);
12
    translate.setDefaultLang('en');
13

  
14
    const browserLang = translate.getBrowserLang();
15
    translate.use(browserLang.match(/en|de|cz/) ? browserLang : 'en');
16
  }
9 17
}
fe/fulltextsearch/src/app/app.module.ts
1 1
import { BrowserModule } from '@angular/platform-browser';
2 2
import { NgModule } from '@angular/core';
3
import { HttpClientModule } from '@angular/common/http';
3
import { HttpClient, HttpClientModule } from '@angular/common/http';
4 4

  
5 5
import { AppRoutingModule } from './app-routing.module';
6 6
import { AppComponent } from './app.component';
......
33 33
import { BrowseDetailsComponent } from './components/pages/browse/browse-details/browse-details.component';
34 34
import { ImageViewerModule } from 'ngx-image-viewer';
35 35
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
36
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
37
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
38

  
39
export function HttpLoaderFactory(httpClient: HttpClient) {
40
  return new TranslateHttpLoader(httpClient, '../assets/i18n/', '-lang.json');
41
}
36 42

  
37 43
@NgModule({
38 44
  declarations: [
......
68 74
    MatSidenavModule,
69 75
    MatListModule,
70 76
    ImageViewerModule.forRoot(),
71
    FontAwesomeModule
77
    FontAwesomeModule,
78
    TranslateModule.forRoot({
79
      loader: {
80
        provide: TranslateLoader,
81
        useFactory: HttpLoaderFactory,
82
        deps: [HttpClient]
83
      }
84
    })
72 85
  ],
73 86
  providers: [DataHolderService, DatePipe],
74 87
  bootstrap: [AppComponent]
fe/fulltextsearch/src/app/components/layout/main-nav/main-nav.component.html
8 8
    <mat-nav-list (click)="drawer.close()">
9 9
      <a mat-list-item routerLink="">
10 10
        <mat-icon>home</mat-icon>
11
        Home</a>
11
        {{'app-main-nav.home' | translate}}</a>
12 12
      <a mat-list-item routerLink="search">
13 13
        <mat-icon>search</mat-icon>
14
        Search</a>
14
        {{'app-main-nav.search' | translate}}</a>
15 15
      <a mat-list-item routerLink="browse">
16 16
        <mat-icon>list</mat-icon>
17
        Browse</a>
17
        {{'app-main-nav.browse' | translate}}</a>
18 18
      <a mat-list-item routerLink="upload">
19 19
        <mat-icon>backup</mat-icon>
20
        Upload</a>
20
        {{'app-main-nav.upload' | translate}}</a>
21 21
      <a mat-list-item (click)="openAboutDialog()">
22 22
        <mat-icon>info</mat-icon>
23
        About</a>
23
        {{'app-main-nav.about' | translate}}</a>
24 24
      <a mat-list-item routerLink="help">
25 25
        <mat-icon>help</mat-icon>
26
        Help</a>
26
        {{'app-main-nav.help' | translate}}</a>
27 27
    </mat-nav-list>
28 28
  </mat-sidenav>
29 29
  <mat-sidenav-content>
......
40 40
      <div class="app-logo" routerLink="" style="outline: none">
41 41
        <span style="display: flex;">
42 42
        <mat-icon>search</mat-icon>
43
        <div>FULL TEXT SEARCH<br> APPLICATION</div>
43
        <div>{{'app-main-nav.title1' | translate}}<br> {{'app-main-nav.title2' | translate}}</div>
44 44
      </span>
45 45
      </div>
46 46
      <!-- left navigation items -->
47
      <a mat-button class="noHover active" routerLink="search" *ngIf="!(isHandset$ | async)">Search</a>
48
      <a mat-button routerLink="browse" *ngIf="!(isHandset$ | async)">Browse</a>
49
      <a mat-button routerLink="upload" *ngIf="!(isHandset$ | async)">Upload</a>
47
      <a mat-button class="noHover active" routerLink="search" *ngIf="!(isHandset$ | async)">{{'app-main-nav.search' | translate}}</a>
48
      <a mat-button routerLink="browse" *ngIf="!(isHandset$ | async)">{{'app-main-nav.browse' | translate}}</a>
49
      <a mat-button routerLink="upload" *ngIf="!(isHandset$ | async)">{{'app-main-nav.upload' | translate}}</a>
50 50
      <!-- navigation items space -->
51 51
      <div class="space"></div>
52 52
      <!-- right navigation items -->
53
      <a mat-button (click)="openAboutDialog()" *ngIf="!(isHandset$ | async)">About</a>
54
      <a mat-button routerLink="help" *ngIf="!(isHandset$ | async)">Help</a>
55
      <select (change)="onLanguageSelect($event)">
56
        <option *ngFor="let language of languages">{{language}}</option>
53
      <a mat-button (click)="openAboutDialog()" *ngIf="!(isHandset$ | async)">{{'app-main-nav.about' | translate}}</a>
54
      <a mat-button routerLink="help" *ngIf="!(isHandset$ | async)">{{'app-main-nav.help' | translate}}</a>
55
      <select #langSelect (change)="onLanguageSelect($event, langSelect)">
56
        <option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{lang | uppercase}}</option>
57 57
      </select>
58 58
    </mat-toolbar>
59 59
    <ng-content></ng-content>
fe/fulltextsearch/src/app/components/layout/main-nav/main-nav.component.ts
3 3
import { Observable } from 'rxjs';
4 4
import { map, shareReplay } from 'rxjs/operators';
5 5
import { AboutDialogComponent } from '../../shared-components/about-dialog/about-dialog.component';
6
import {MatDialog} from '@angular/material/dialog';
7
import {LoggerService} from '../../../services/logger/logger.service';
6
import { MatDialog } from '@angular/material/dialog';
7
import { LoggerService } from '../../../services/logger/logger.service';
8
import { TranslateService } from '@ngx-translate/core';
8 9

  
9 10
@Component({
10 11
  selector: 'app-main-nav',
......
13 14
})
14 15
export class MainNavComponent {
15 16

  
16
  languages: string[] = ['EN', 'DE', 'CZ'];
17

  
18 17
  isHandset$: Observable<boolean> = this.breakpointObserver.observe(Breakpoints.Handset)
19 18
    .pipe(
20 19
      map(result => result.matches),
......
23 22

  
24 23
  constructor(private breakpointObserver: BreakpointObserver,
25 24
              public dialog: MatDialog,
26
              private LOGGER: LoggerService) {}
25
              private LOGGER: LoggerService,
26
              public translate: TranslateService ) {}
27 27

  
28 28
  openAboutDialog() {
29 29
    this.dialog.open(AboutDialogComponent, { panelClass: 'custom-dialog-container' });
30 30
  }
31 31

  
32
  onLanguageSelect(event) {
33
    console.log(event.target.value);
34
    this.LOGGER.error('Selected language ' + event.target.value);
32
  onLanguageSelect(event, langSelect) {
33
    this.translate.use(langSelect.value);
34
    this.LOGGER.info('Selected language: ' + event.target.value);
35 35
  }
36 36

  
37 37
}
fe/fulltextsearch/src/app/components/pages/browse/browse.component.html
1 1
<div class="page-top-margin">
2 2
  <div class="text-box mat-elevation-z8">
3 3
    <div class="card">
4
      <h1 class="card-header">All documents</h1>
4
      <h1 class="card-header">{{'app-browse.card-header' | translate}}</h1>
5 5
      <div>
6 6
        <app-table-browse></app-table-browse>
7 7
      </div>
fe/fulltextsearch/src/app/components/pages/browse/table/table.component.html
2 2
  <table mat-table class="full-width-table" matSort aria-label="Elements">
3 3
    <!-- Id Column -->
4 4
    <ng-container matColumnDef="id">
5
      <th mat-header-cell *matHeaderCellDef mat-sort-header>Id</th>
5
      <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.id' | translate}}</th>
6 6
      <td mat-cell *matCellDef="let row">{{row.id}}</td>
7 7
    </ng-container>
8 8

  
9 9
    <!-- Name Column -->
10 10
    <ng-container matColumnDef="documentName">
11
      <th mat-header-cell *matHeaderCellDef mat-sort-header>Document name</th>
11
      <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.document-name' | translate}}</th>
12 12
      <td mat-cell *matCellDef="let row">
13 13
        <a routerLink="/browse/{{row.documentName}}">
14 14
        {{row.documentName}}
......
18 18

  
19 19
    <!-- Test Column -->
20 20
    <ng-container matColumnDef="originDate">
21
      <th mat-header-cell *matHeaderCellDef mat-sort-header>Origin date</th>
21
      <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.origin-date' | translate}}</th>
22 22
      <td mat-cell *matCellDef="let row">{{row.originDate | date:'d. M. yyyy'}}</td>
23 23
    </ng-container>
24 24

  
25 25
    <!-- Test Column -->
26 26
    <ng-container matColumnDef="uploadedDate">
27
      <th mat-header-cell *matHeaderCellDef mat-sort-header>Uploaded date</th>
27
      <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.uploaded-date' | translate}}</th>
28 28
      <td mat-cell *matCellDef="let row">{{row.uploadedDate | date:'d. M. yyyy'}}</td>
29 29
    </ng-container>
30 30

  
fe/fulltextsearch/src/app/components/pages/help/help.component.html
1 1
<div class="page-top-margin">
2 2
  <div class="text-box">
3 3
    <div class="card">
4
      <h1 class="card-header">Help</h1>
4
      <h1 class="card-header">{{'app-help.card-header' | translate}}</h1>
5 5
      <div class="card-body">
6
        <h2 class="card-title">How it is works</h2>
7
        <p class="card-text">Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,
8
          dolor nunc faucibus
9
          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque
10
          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at
11
          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et
12
          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi
13
          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam
14
          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
15
          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.
16
          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio
17
          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.</p>
18
        <h2 class="card-title">Manual</h2>
19
        <p class="card-text">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Et harum quidem rerum facilis est et expedita
20
          distinctio. Aenean id metus id velit ullamcorper pulvinar. Curabitur bibendum justo non orci. Etiam egestas
21
          wisi a erat. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Nulla non arcu lacinia neque faucibus
22
          fringilla. Etiam dui sem, fermentum vitae, sagittis id, malesuada in, quam. Quis autem vel eum iure reprehenderit
23
          qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas
24
          nulla pariatur? Aliquam erat volutpat. Aliquam id dolor.</p>
25
        <h2 class="card-title">FAQ</h2>
26
        <p class="card-text">Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,
27
          dolor nunc faucibus
28
          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque
29
          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at
30
          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et
31
          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi
32
          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam
33
          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
34
          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.
35
          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio
36
          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.</p>
37
        <h2 class="card-title">Support</h2>
38
        <p class="card-text">Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,
39
          dolor nunc faucibus
40
          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque
41
          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at
42
          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et
43
          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi
44
          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam
45
          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
46
          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.
47
          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio
48
          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.</p>
49
        <h2>Contact admin</h2>
6
        <h2 class="card-title">{{'app-help.how-it-works-title' | translate}}</h2>
7
        <p class="card-text">{{'app-help.how-it-works-text' | translate}}</p>
8
        <h2 class="card-title">{{'app-help.manual-title' | translate}}</h2>
9
        <p class="card-text">{{'app-help.manual-text' | translate}}</p>
10
        <h2 class="card-title">{{'app-help.faq-title' | translate}}</h2>
11
        <p class="card-text">{{'app-help.faq-text' | translate}}</p>
12
        <h2 class="card-title">{{'app-help.support-title' | translate}}</h2>
13
        <p class="card-text">{{'app-help.support-text' | translate}}</p>
14
        <h2>{{'app-help.contact-admin-title' | translate}}</h2>
50 15
        <address>
51 16
          <a href="mailto:jim@rock.com">jim@rock.com</a><br>
52 17
          <a href="tel:+13115552368">(311) 555-2368</a>
fe/fulltextsearch/src/app/components/pages/search/search-paginator/search-paginator.component.html
14 14
                 class="image" src="data:image/jpg;base64,{{row.imageCut}}"
15 15
                 (load)="draw(row,row.randomId + 'Img' , row.randomId + 'Canvas' )"/>
16 16
            <canvas id="{{row.randomId + 'Canvas'}}" style="position: absolute;" title="Result">
17
              Your browser does not support the HTML5 canvas tag.
17
              {{'app-search-paginator.canvas-error' | translate}}
18 18
            </canvas>
19 19
          </div>
20 20
        </div>
fe/fulltextsearch/src/app/components/pages/search/search-paginator/search-paginator.component.ts
1
import { Component, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
1
import {Component, Input, OnChanges, SimpleChanges, ViewChild} from '@angular/core';
2 2
import { MatPaginator } from '@angular/material/paginator';
3 3
import { MatTableDataSource } from '@angular/material/table';
4 4
import { TextRegion } from '../../../../model/parts/TextRegion';
5 5
import { SearchResponse } from '../../../../model/SearchResponse';
6
import Utils from '../../../../../Utils';
7
import {DrawerService} from '../../../../services/drawer/drawer.service';
8
import {LoggerService} from '../../../../services/logger/logger.service';
6
import { DrawerService } from '../../../../services/drawer/drawer.service';
7
import { LoggerService } from '../../../../services/logger/logger.service';
8
import { TranslateService } from '@ngx-translate/core';
9 9

  
10 10
@Component({
11 11
  selector: 'app-search-paginator',
......
20 20
  /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */
21 21
  displayedColumns = ['image'];
22 22

  
23
  constructor(private LOGGER: LoggerService, private drawer: DrawerService) {}
23
  constructor(private LOGGER: LoggerService, private drawer: DrawerService, private translate: TranslateService) {
24

  
25
  }
24 26

  
25 27
  ngOnChanges(changes: SimpleChanges): void {
26 28
    this.tableDataSource = new MatTableDataSource<TextRegion>(this.inputData.textRegions);
29
    // this.tableDataSource.paginator._intl.itemsPerPageLabel = this.translate.instant('app-search-paginator.items-per-page');
27 30
    this.tableDataSource.paginator = this.paginator;
28 31
  }
29 32

  
fe/fulltextsearch/src/app/components/pages/search/search.component.html
8 8
    </div>-->
9 9
    <div class="row" *ngIf="data">
10 10
      <p class="card-header">
11
        <span>Searching expression: </span><b>{{data.expression}}</b><br>
12
        <span>Documents found: </span><b>{{data.textRegions.length}}</b>
11
        <span>{{'app-search.expression' | translate}}</span><b>{{data.expression}}</b><br>
12
        <span>{{'app-search.found' | translate}}</span><b>{{data.textRegions.length}}</b>
13 13
      </p>
14 14
    </div>
15 15
    <div class="row">
fe/fulltextsearch/src/app/components/pages/upload/upload.component.html
1 1
<div class="page-top-margin">
2 2
  <div class="text-box">
3 3
    <div class="card">
4
      <h1 class="card-header">Upload files</h1>
4
      <h1 class="card-header">{{'app-upload.card-header' | translate}}</h1>
5 5
      <div class="card-body">
6 6
        <div class="row justify-content-center align-items-center">
7 7
          <input type="file" (change)="onFilesSelected($event)" multiple #fileInput accept="image/jpeg, image/png, application/xml, text/xml">
8
          <button class="btn btn-outline-secondary" type="button" (click)="fileInput.click()">Pick files</button>
9
          <button class="btn btn-outline-secondary" type="button" (click)="onUpload()">Upload</button>
8
          <button class="btn btn-outline-secondary" type="button" (click)="fileInput.click()">{{'app-upload.pick-files' | translate}}</button>
9
          <button class="btn btn-outline-secondary" type="button" (click)="onUpload()">{{'app-upload.upload' | translate}}</button>
10 10
        </div>
11 11
        <mat-progress-bar mode="determinate" [value]="progress" color="warn"></mat-progress-bar>
12 12
        <div class="row justify-content-center align-items-center">
fe/fulltextsearch/src/app/components/shared-components/about-dialog/about-dialog.component.html
1 1
<div class="dialog-header">
2
  <h1 mat-dialog-title>About</h1>
2
  <h1 mat-dialog-title>{{'app-about-dialog.title' | translate}}</h1>
3 3
  <span class="clickable" mat-dialog-close>
4 4
        <mat-icon>clear</mat-icon>
5 5
  </span>
......
7 7

  
8 8
<mat-dialog-content>
9 9

  
10
  <span><b>App version(FE):</b> </span> {{appVersionFE}}<br>
11
  <span><b>App version(BE):</b></span> {{appVersionBE}}<br>
12
  <span><b>Solr version:</b></span> {{solrVersion}}<br>
13
  <h3><b>Project made by ASWI team ANONYMOUS(2020)</b></h3>
14
  <p>
15
    Lorem Ipsum is simply dummy text of the printing and
16
    typesetting industry. Lorem Ipsum has been the industry's
17
    standard dummy text ever since the 1500s, when an unknown
18
    printer took a galley of type and scrambled it to make a
19
    type specimen book.
20
  </p>
10
  <span><b>{{'app-about-dialog.fe-version' | translate}}</b> </span> {{appVersionFE}}<br>
11
  <span><b>{{'app-about-dialog.be-version' | translate}}</b></span> {{appVersionBE}}<br>
12
  <span><b>{{'app-about-dialog.solr-version' | translate}}</b></span> {{solrVersion}}<br>
13
  <h3><b>{{'app-about-dialog.header3' | translate}}</b></h3>
14
  <p>{{'app-about-dialog.paragraph' | translate}}</p>
21 15

  
22 16
</mat-dialog-content>
fe/fulltextsearch/src/app/components/shared-components/search-box/search-box.component.html
5 5
    <mat-icon>search</mat-icon>
6 6
  </span>
7 7
    </div>
8
    <input type="text" class="form-control" [(ngModel)]="expression" (keyup.enter) = "onSubmit()" placeholder="Enter text to search..." aria-label="Search" aria-describedby="basic-addon2">
8
    <input type="text" class="form-control" [(ngModel)]="expression" (keyup.enter) = "onSubmit()" placeholder="{{'app-search-box.placeholder' | translate}}" aria-label="Search" aria-describedby="basic-addon2">
9 9
    <div class="input-group-append">
10 10
      <span class="input-group-text clickable" id="clear-icon">
11 11
        <mat-icon *ngIf="expression" matSuffix aria-label="Clear" (click)="expression=''">clear</mat-icon>
12 12
      </span>
13
      <button class="btn btn-outline-secondary" type="button" (click)="onSubmit()">Search</button>
13
      <button class="btn btn-outline-secondary" type="button" (click)="onSubmit()">{{'app-search-box.search' | translate}}</button>
14 14
    </div>
15 15
  </div>
16 16
</div>
fe/fulltextsearch/src/app/components/shared-components/search-box/search-box.component.ts
3 3
import { QueryService } from '../../../services/query/query.service';
4 4
import { Router } from '@angular/router';
5 5
import { DataHolderService } from '../../../services/data-holder/data-holder.service';
6
import {SearchComponent} from '../../pages/search/search.component';
7 6
import {Subscription} from 'rxjs';
8 7

  
9 8
@Component({
fe/fulltextsearch/src/assets/i18n/cz-lang.json
1
{
2
  "app-title": "Fulltext search app",
3
  "app-main-nav": {
4
    "title1": "FULLTEXT SEARCH",
5
    "title2": "APPLICATION",
6
    "home": "Domů",
7
    "search": "Vyhledat",
8
    "browse": "Procházet",
9
    "upload": "Nahrát",
10
    "about": "O nás",
11
    "help": "Pomoc"
12
  },
13
  "app-search-box": {
14
    "search": "Vyhledat",
15
    "placeholder": "Zadejte text k vyhledání..."
16
  },
17
  "app-search": {
18
    "expression": "Hledaný výraz: ",
19
    "found": "Nalezeno dokumentů: "
20
  },
21
  "app-search-paginator": {
22
    "canvas-error": "Váš prohlížeč nepodporuje HTML5 canvas tag.",
23
    "items-per-page": "Položek na stránku:"
24
  },
25
  "app-browse": {
26
    "card-header": "Všechny dokumenty"
27
  },
28
  "app-table-browse": {
29
    "id": "Id",
30
    "document-name": "Název dokumentu",
31
    "origin-date": "Datum vytvoření",
32
    "uploaded-date": "Datum nahrání"
33
  },
34
  "app-upload": {
35
    "card-header": "Nahrát soubory",
36
    "pick-files": "Vybrat soubory",
37
    "upload": "Nahrát"
38
  },
39
  "app-about-dialog": {
40
    "title": "O nás",
41
    "fe-version": "Verze aplikace (FE):",
42
    "be-version": "Verze aplikace (BE):",
43
    "solr-version": "Verze Solr:",
44
    "header3": "Projekt vytvořen týmem ANONYMOUS v rámci projektu ASWI (2020)",
45
    "paragraph": "    Lorem Ipsum is simply dummy text of the printing and\n    typesetting industry. Lorem Ipsum has been the industry's\n    standard dummy text ever since the 1500s, when an unknown\n    printer took a galley of type and scrambled it to make a\n    type specimen book."
46
  },
47
  "app-help": {
48
    "card-header": "Pomoc",
49
    "how-it-works-title": "Jak to funguje",
50
    "how-it-works-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n          dolor nunc faucibus\n          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.",
51
    "manual-title": "Návod",
52
    "manual-text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Et harum quidem rerum facilis est et expedita\n          distinctio. Aenean id metus id velit ullamcorper pulvinar. Curabitur bibendum justo non orci. Etiam egestas\n          wisi a erat. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Nulla non arcu lacinia neque faucibus\n          fringilla. Etiam dui sem, fermentum vitae, sagittis id, malesuada in, quam. Quis autem vel eum iure reprehenderit\n          qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas\n          nulla pariatur? Aliquam erat volutpat. Aliquam id dolor.",
53
    "faq-title": "Nejčastější dotazy",
54
    "faq-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n          dolor nunc faucibus\n          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.",
55
    "support-title": "Podpora",
56
    "support-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n          dolor nunc faucibus\n          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.",
57
    "contact-admin-title": "Kontakt na administrátora"
58
  }
59
}
fe/fulltextsearch/src/assets/i18n/en-lang.json
1
{
2
  "app-title": "Fulltext search app",
3
  "app-main-nav": {
4
    "title1": "FULLTEXT SEARCH",
5
    "title2": "APPLICATION",
6
    "home": "Home",
7
    "search": "Search",
8
    "browse": "Browse",
9
    "upload": "Upload",
10
    "about": "About",
11
    "help": "Help"
12
  },
13
  "app-search-box": {
14
    "search": "Search",
15
    "placeholder": "Enter text to search..."
16
  },
17
  "app-search": {
18
    "expression": "Searching expression: ",
19
    "found": "Documents found: "
20
  },
21
  "app-search-paginator": {
22
    "canvas-error": "Your browser does not support the HTML5 canvas tag.",
23
    "items-per-page": "Items per page:"
24
  },
25
  "app-browse": {
26
    "card-header": "All documents"
27
  },
28
  "app-table-browse": {
29
    "id": "Id",
30
    "document-name": "Document name",
31
    "origin-date": "Origin date",
32
    "uploaded-date": "Uploaded date"
33
  },
34
  "app-upload": {
35
    "card-header": "Upload files",
36
    "pick-files": "Pick files",
37
    "upload": "Upload"
38
  },
39
  "app-about-dialog": {
40
    "title": "About",
41
    "fe-version": "App version (FE):",
42
    "be-version": "App version (BE):",
43
    "solr-version": "Solr version:",
44
    "header3": "Project made by ASWI team ANONYMOUS (2020)",
45
    "paragraph": "    Lorem Ipsum is simply dummy text of the printing and\n    typesetting industry. Lorem Ipsum has been the industry's\n    standard dummy text ever since the 1500s, when an unknown\n    printer took a galley of type and scrambled it to make a\n    type specimen book."
46
  },
47
  "app-help": {
48
    "card-header": "Help",
49
    "how-it-works-title": "How it is works",
50
    "how-it-works-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n          dolor nunc faucibus\n          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.",
51
    "manual-title": "Manual",
52
    "manual-text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Et harum quidem rerum facilis est et expedita\n          distinctio. Aenean id metus id velit ullamcorper pulvinar. Curabitur bibendum justo non orci. Etiam egestas\n          wisi a erat. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Nulla non arcu lacinia neque faucibus\n          fringilla. Etiam dui sem, fermentum vitae, sagittis id, malesuada in, quam. Quis autem vel eum iure reprehenderit\n          qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas\n          nulla pariatur? Aliquam erat volutpat. Aliquam id dolor.",
53
    "faq-title": "FAQ",
54
    "faq-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n          dolor nunc faucibus\n          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.",
55
    "support-title": "Support",
56
    "support-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n          dolor nunc faucibus\n          libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n          quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n          felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n          magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n          tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n          est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n          incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n          In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n          a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.",
57
    "contact-admin-title": "Contact admin"
58
  }
59
}

Také k dispozici: Unified diff