diff --git a/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.html b/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.html index 943dab7b50..3bc2976030 100644 --- a/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.html +++ b/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.html @@ -4,7 +4,7 @@ class="py-[37px] pl-[47px] rounded-lg border bg-white mb-5 card-shadow cursor-pointer" [figure]="recordsCount$ | async" [icon]="'folder_open'" - [title]="'catalog.figures.datasets'" + title="catalog.figures.datasets" [color]="'secondary'" > @@ -13,7 +13,7 @@ class="py-[37px] pl-[47px] rounded-lg bg-white border card-shadow cursor-pointer" [figure]="orgsCount$ | async" [icon]="'corporate_fare'" - [title]="'catalog.figures.organisations'" + title="catalog.figures.organisations" [color]="'secondary'" > diff --git a/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.ts b/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.ts index a732d66ac9..bee90f8cfe 100644 --- a/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.ts +++ b/apps/datahub/src/app/home/news-page/key-figures/key-figures.component.ts @@ -4,6 +4,10 @@ import { RecordsService } from '@geonetwork-ui/feature/catalog' import { ROUTER_ROUTE_SEARCH } from '@geonetwork-ui/feature/router' import { ROUTER_ROUTE_ORGANISATIONS } from '../../../router/constants' import { OrganizationsServiceInterface } from '@geonetwork-ui/common/domain/organizations.service.interface' +import { marker } from '@biesbjerg/ngx-translate-extract-marker' + +marker('catalog.figures.datasets') +marker('catalog.figures.organisations') @Component({ selector: 'datahub-key-figures', diff --git a/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts b/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts index 14c73492f0..e0ffeb5b02 100644 --- a/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +++ b/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts @@ -7,6 +7,7 @@ import { Injectable } from '@angular/core' import { AvatarServiceInterface } from '../auth/avatar.service.interface' import { map } from 'rxjs/operators' import { Observable, of } from 'rxjs' +import { ThesaurusModel } from '@geonetwork-ui/common/domain/model/thesaurus/thesaurus.model' @Injectable() export class Gn4PlatformMapper { @@ -43,4 +44,14 @@ export class Gn4PlatformMapper { } = apiUser return { ...apiUser, id: id + '' } as UserModel } + + thesaurusFromApi(thesaurus: any[]): ThesaurusModel { + return thesaurus.map((keyword) => { + const { uri, value } = keyword + return { + key: uri, + label: value, + } + }) + } } diff --git a/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.spec.ts b/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.spec.ts index 804b7698e5..1a0909150a 100644 --- a/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.spec.ts +++ b/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.spec.ts @@ -1,6 +1,8 @@ import { MeApiService, + RegistriesApiService, SiteApiService, + ToolsApiService, UsersApiService, } from '@geonetwork-ui/data-access/gn4' import { TestBed } from '@angular/core/testing' @@ -63,9 +65,62 @@ class UsersApiServiceMock { } } +class ToolsApiServiceMock { + getTranslationsPackage1 = jest.fn(() => + of({ + 'First value': 'Translated first value', + 'Second value': 'Hello', + 'Third value': 'Bla', + }) + ) +} + +class RegistriesApiServiceMock { + searchKeywords = jest.fn(() => + of([ + { + values: { + fre: 'Adresses', + }, + definitions: { + fre: 'Localisation des propriétés fondée sur les identifiants des adresses, habituellement le nom de la rue, le numéro de la maison et le code postal.', + }, + coordEast: '', + coordWest: '', + coordSouth: '', + coordNorth: '', + thesaurusKey: 'external.theme.httpinspireeceuropaeutheme-theme', + uri: 'http://inspire.ec.europa.eu/theme/ad', + definition: + 'Localisation des propriétés fondée sur les identifiants des adresses, habituellement le nom de la rue, le numéro de la maison et le code postal.', + value: 'Adresses', + }, + { + values: { + fre: 'Altitude', + }, + definitions: { + fre: "Modèles numériques pour l'altitude des surfaces terrestres, glaciaires et océaniques. Comprend l'altitude terrestre, la bathymétrie et la ligne de rivage.", + }, + coordEast: '', + coordWest: '', + coordSouth: '', + coordNorth: '', + thesaurusKey: 'external.theme.httpinspireeceuropaeutheme-theme', + uri: 'http://inspire.ec.europa.eu/theme/el', + definition: + "Modèles numériques pour l'altitude des surfaces terrestres, glaciaires et océaniques. Comprend l'altitude terrestre, la bathymétrie et la ligne de rivage.", + value: 'Altitude', + }, + ]) + ) +} + describe('Gn4PlatformService', () => { let service: Gn4PlatformService let meApiService: MeApiService + let toolsApiService: ToolsApiService + let registriesApiService: RegistriesApiService beforeEach(() => { TestBed.configureTestingModule({ @@ -88,10 +143,20 @@ describe('Gn4PlatformService', () => { provide: AvatarServiceInterface, useClass: AvatarServiceInterfaceMock, }, + { + provide: ToolsApiService, + useClass: ToolsApiServiceMock, + }, + { + provide: RegistriesApiService, + useClass: RegistriesApiServiceMock, + }, ], }) service = TestBed.inject(Gn4PlatformService) meApiService = TestBed.inject(MeApiService) + toolsApiService = TestBed.inject(ToolsApiService) + registriesApiService = TestBed.inject(RegistriesApiService) }) it('creates', () => { @@ -161,4 +226,39 @@ describe('Gn4PlatformService', () => { }) }) }) + describe('#translateKey', () => { + it('returns translation ', async () => { + const translation = await lastValueFrom( + service.translateKey('First value') + ) + expect(translation).toEqual('Translated first value') + }) + it('fetch api translations once ', async () => { + await lastValueFrom(service.translateKey('First value')) + await lastValueFrom(service.translateKey('Second value')) + expect(toolsApiService.getTranslationsPackage1).toHaveBeenCalledTimes(1) + }) + }) + describe('#getThesaurusByLang', () => { + it('calls api service ', async () => { + service.getThesaurusByLang('inspire', 'fre') + expect(registriesApiService.searchKeywords).toHaveBeenCalledWith( + null, + 'fre', + 1000, + 0, + null, + ['inspire'] + ) + }) + it('returns mapped thesaurus ', async () => { + const thesaurusDomain = await lastValueFrom( + service.getThesaurusByLang('inspire', 'fre') + ) + expect(thesaurusDomain).toEqual([ + { key: 'http://inspire.ec.europa.eu/theme/ad', label: 'Adresses' }, + { key: 'http://inspire.ec.europa.eu/theme/el', label: 'Altitude' }, + ]) + }) + }) }) diff --git a/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts b/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts index e90c04759f..d002901764 100644 --- a/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +++ b/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts @@ -1,15 +1,18 @@ import { Injectable } from '@angular/core' import { Observable, of, switchMap } from 'rxjs' -import { map, shareReplay, tap } from 'rxjs/operators' +import { catchError, map, shareReplay, tap } from 'rxjs/operators' import { MeApiService, + RegistriesApiService, SiteApiService, + ToolsApiService, UsersApiService, } from '@geonetwork-ui/data-access/gn4' import { PlatformServiceInterface } from '@geonetwork-ui/common/domain/platform.service.interface' import { UserModel } from '@geonetwork-ui/common/domain/model/user/user.model' import { Organization } from '@geonetwork-ui/common/domain/model/record' import { Gn4PlatformMapper } from './gn4-platform.mapper' +import { ThesaurusModel } from '@geonetwork-ui/common/domain/model/thesaurus/thesaurus.model' const minApiVersion = '4.2.0' @Injectable() @@ -17,7 +20,17 @@ export class Gn4PlatformService implements PlatformServiceInterface { private readonly type = 'GeoNetwork' private me$: Observable private users$: Observable - isAnonymous$: Observable + private isAnonymous$: Observable + + private keyTranslations$ = this.toolsApiService + .getTranslationsPackage1('gnui') + .pipe( + catchError(() => { + console.warn('Error while loading gnui language package') + return of({}) + }), + shareReplay(1) + ) private settings$ = of(true).pipe( switchMap(() => this.siteApiService.getSiteOrPortalDescription()), @@ -42,7 +55,9 @@ export class Gn4PlatformService implements PlatformServiceInterface { private siteApiService: SiteApiService, private meApi: MeApiService, private usersApi: UsersApiService, - private mapper: Gn4PlatformMapper + private mapper: Gn4PlatformMapper, + private toolsApiService: ToolsApiService, + private registriesApiService: RegistriesApiService ) { this.me$ = this.meApi.getMe().pipe( switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), @@ -85,4 +100,19 @@ export class Gn4PlatformService implements PlatformServiceInterface { getUsers(): Observable { return this.users$ } + + translateKey(key: string): Observable { + return this.keyTranslations$.pipe(map((translations) => translations[key])) + } + + getThesaurusByLang( + thesaurusName: string, + lang: string + ): Observable { + return this.registriesApiService + .searchKeywords(null, lang, 1000, 0, null, [thesaurusName]) + .pipe( + map((thesaurus) => this.mapper.thesaurusFromApi(thesaurus as any[])) + ) + } } diff --git a/libs/common/domain/src/lib/model/thesaurus/index.ts b/libs/common/domain/src/lib/model/thesaurus/index.ts new file mode 100644 index 0000000000..de433d542c --- /dev/null +++ b/libs/common/domain/src/lib/model/thesaurus/index.ts @@ -0,0 +1 @@ +export * from './thesaurus.model' diff --git a/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts b/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts new file mode 100644 index 0000000000..48aa153751 --- /dev/null +++ b/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts @@ -0,0 +1,6 @@ +export interface ThesaurusItemModel { + key: string + label: string +} + +export type ThesaurusModel = ThesaurusItemModel[] diff --git a/libs/common/domain/src/lib/platform.service.interface.ts b/libs/common/domain/src/lib/platform.service.interface.ts index 7872c2d052..4d9e0579dc 100644 --- a/libs/common/domain/src/lib/platform.service.interface.ts +++ b/libs/common/domain/src/lib/platform.service.interface.ts @@ -1,6 +1,7 @@ -import { Observable } from 'rxjs' -import { UserModel } from './model/user/user.model' -import { Organization } from './model/record/organization.model' +import type { Observable } from 'rxjs' +import type { UserModel } from './model/user/user.model' +import type { Organization } from './model/record/organization.model' +import type { ThesaurusModel } from './model/thesaurus/' export abstract class PlatformServiceInterface { abstract getType(): string @@ -14,4 +15,9 @@ export abstract class PlatformServiceInterface { organisation: Organization ): Observable abstract getOrganizations(): Observable + abstract translateKey(key: string): Observable + abstract getThesaurusByLang( + thesaurusName: string, + lang: string + ): Observable } diff --git a/libs/feature/catalog/src/lib/sources/sources.service.spec.ts b/libs/feature/catalog/src/lib/sources/sources.service.spec.ts index a71da69906..287defed53 100644 --- a/libs/feature/catalog/src/lib/sources/sources.service.spec.ts +++ b/libs/feature/catalog/src/lib/sources/sources.service.spec.ts @@ -8,7 +8,7 @@ import { Observable } from 'rxjs' import { LangService } from '@geonetwork-ui/util/i18n' class SourcesApiServiceMock { - getSourcesByType = jest.fn(function () { + getSubPortals1 = jest.fn(function () { return new Observable((observer) => { observer.next(SOURCES_FIXTURE) }) diff --git a/libs/feature/catalog/src/lib/sources/sources.service.ts b/libs/feature/catalog/src/lib/sources/sources.service.ts index 0bffe71fa8..490423e514 100644 --- a/libs/feature/catalog/src/lib/sources/sources.service.ts +++ b/libs/feature/catalog/src/lib/sources/sources.service.ts @@ -10,9 +10,7 @@ import { CatalogSource } from './sources.model' }) export class SourcesService { sources$: Observable = ( - this.sourcesApiService.getSourcesByType('harvester') as Observable< - CatalogSource[] - > + this.sourcesApiService.getSubPortals1() as Observable ).pipe(shareReplay()) constructor( diff --git a/libs/feature/search/src/lib/utils/service/fields.service.spec.ts b/libs/feature/search/src/lib/utils/service/fields.service.spec.ts index 138965ffba..ef0cb50883 100644 --- a/libs/feature/search/src/lib/utils/service/fields.service.spec.ts +++ b/libs/feature/search/src/lib/utils/service/fields.service.spec.ts @@ -6,6 +6,7 @@ import { TranslateModule } from '@ngx-translate/core' import { OrganizationsServiceInterface } from '@geonetwork-ui/common/domain/organizations.service.interface' import { RecordsRepositoryInterface } from '@geonetwork-ui/common/domain/repository/records-repository.interface' import { ElasticsearchService } from '@geonetwork-ui/api/repository/gn4' +import { PlatformServiceInterface } from '@geonetwork-ui/common/domain/platform.service.interface' class RecordsRepositoryMock { aggregate = jest.fn(() => EMPTY) @@ -27,6 +28,28 @@ class OrganisationsServiceMock { ) } +class PlatformServiceInterfaceMock { + translateKey = jest.fn((key) => { + switch (key) { + case 'First value': + return of('Translated first value') + case 'Second value': + return of('Hello') + case 'Third value': + return of('Bla') + default: + return of(null) + } + }) + getThesaurusByLang = jest.fn((thesaurusName: string, lang: string) => + of([ + { key: 'First value', label: 'Rivière' }, + { key: 'Second value', label: 'Forêt' }, + { key: 'Third value', label: 'Planète' }, + ]) + ) +} + describe('FieldsService', () => { let service: FieldsService @@ -50,6 +73,10 @@ describe('FieldsService', () => { provide: OrganizationsServiceInterface, useClass: OrganisationsServiceMock, }, + { + provide: PlatformServiceInterface, + useClass: PlatformServiceInterfaceMock, + }, ], }) }) diff --git a/libs/feature/search/src/lib/utils/service/fields.service.ts b/libs/feature/search/src/lib/utils/service/fields.service.ts index 8ef7ae172e..a99ddfa0db 100644 --- a/libs/feature/search/src/lib/utils/service/fields.service.ts +++ b/libs/feature/search/src/lib/utils/service/fields.service.ts @@ -1,14 +1,15 @@ import { Injectable, Injector } from '@angular/core' import { AbstractSearchField, - GnUiTranslationSearchField, FieldValue, FullTextSearchField, IsSpatialSearchField, + KeySearchField, LicenseSearchField, OrganizationSearchField, OwnerSearchField, SimpleSearchField, + ThesaurusField, } from './fields' import { forkJoin, Observable, of } from 'rxjs' import { map } from 'rxjs/operators' @@ -28,6 +29,7 @@ marker('search.filters.representationType') marker('search.filters.resourceType') marker('search.filters.standard') marker('search.filters.topic') +marker('search.filters.contact') @Injectable({ providedIn: 'root', @@ -36,12 +38,8 @@ export class FieldsService { private fields = { publisher: new OrganizationSearchField(this.injector), format: new SimpleSearchField('format', 'asc', this.injector), - resourceType: new GnUiTranslationSearchField( - 'resourceType', - 'asc', - this.injector - ), - representationType: new GnUiTranslationSearchField( + resourceType: new KeySearchField('resourceType', 'asc', this.injector), + representationType: new KeySearchField( 'cl_spatialRepresentationType.key', 'asc', this.injector @@ -51,9 +49,10 @@ export class FieldsService { 'desc', this.injector ), - topic: new GnUiTranslationSearchField('cl_topic.key', 'asc', this.injector), - inspireKeyword: new SimpleSearchField( - 'th_httpinspireeceuropaeutheme-theme_tree.default', + topic: new KeySearchField('cl_topic.key', 'asc', this.injector), + inspireKeyword: new ThesaurusField( + 'th_httpinspireeceuropaeutheme-theme.link', + 'external.theme.httpinspireeceuropaeutheme-theme', 'asc', this.injector ), diff --git a/libs/feature/search/src/lib/utils/service/fields.spec.ts b/libs/feature/search/src/lib/utils/service/fields.spec.ts index 01b5259af5..4eb951fb92 100644 --- a/libs/feature/search/src/lib/utils/service/fields.spec.ts +++ b/libs/feature/search/src/lib/utils/service/fields.spec.ts @@ -1,13 +1,13 @@ -import { ToolsApiService } from '@geonetwork-ui/data-access/gn4' import { lastValueFrom, of } from 'rxjs' import { AbstractSearchField, FullTextSearchField, - GnUiTranslationSearchField, IsSpatialSearchField, + KeySearchField, LicenseSearchField, OrganizationSearchField, SimpleSearchField, + ThesaurusField, } from './fields' import { TestBed } from '@angular/core/testing' import { Injector } from '@angular/core' @@ -16,6 +16,7 @@ import { OrganizationsServiceInterface } from '@geonetwork-ui/common/domain/orga import { Organization } from '@geonetwork-ui/common/domain/model/record' import { ElasticsearchService } from '@geonetwork-ui/api/repository/gn4' import { RecordsRepositoryInterface } from '@geonetwork-ui/common/domain/repository/records-repository.interface' +import { PlatformServiceInterface } from '@geonetwork-ui/common/domain/platform.service.interface' class ElasticsearchServiceMock { registerRuntimeField = jest.fn() @@ -118,13 +119,25 @@ class RecordsRepositoryMock { }) } -class ToolsApiServiceMock { - getTranslationsPackage1 = jest.fn(() => - of({ - 'First value': 'Translated first value', - 'Second value': 'Hello', - 'Third value': 'Bla', - }) +class PlatformInterfaceMock { + translateKey = jest.fn((key) => { + switch (key) { + case 'First value': + return of('Translated first value') + case 'Second value': + return of('Hello') + case 'Third value': + return of('Bla') + default: + return of(null) + } + }) + getThesaurusByLang = jest.fn((thesaurusName: string, lang: string) => + of([ + { key: 'First value', label: 'Rivière' }, + { key: 'Second value', label: 'Forêt' }, + { key: 'Third value', label: 'Planète' }, + ]) ) } @@ -164,7 +177,7 @@ describe('search fields implementations', () => { let searchField: AbstractSearchField let esService: ElasticsearchService let repository: RecordsRepositoryInterface - let toolsService: ToolsApiService + let platformService: PlatformServiceInterface let injector: Injector beforeEach(() => { @@ -180,8 +193,8 @@ describe('search fields implementations', () => { useClass: ElasticsearchServiceMock, }, { - provide: ToolsApiService, - useClass: ToolsApiServiceMock, + provide: PlatformServiceInterface, + useClass: PlatformInterfaceMock, }, { provide: TranslateService, @@ -195,7 +208,7 @@ describe('search fields implementations', () => { }) esService = TestBed.inject(ElasticsearchService) repository = TestBed.inject(RecordsRepositoryInterface) - toolsService = TestBed.inject(ToolsApiService) + platformService = TestBed.inject(PlatformServiceInterface) injector = TestBed.inject(Injector) }) @@ -290,13 +303,9 @@ describe('search fields implementations', () => { }) }) - describe('TopicSearchField', () => { + describe('KeySearchField', () => { beforeEach(() => { - searchField = new GnUiTranslationSearchField( - 'cl_topic.key', - 'asc', - injector - ) + searchField = new KeySearchField('cl_topic.key', 'asc', injector) }) describe('#getAvailableValues', () => { let values @@ -321,8 +330,38 @@ describe('search fields implementations', () => { { label: 'Translated first value (5)', value: 'First value' }, ]) }) - it('only calls the translations service once', () => { - expect(toolsService.getTranslationsPackage1).toHaveBeenCalledTimes(1) + it('calls translations 4 times', () => { + expect(platformService.translateKey).toHaveBeenCalledTimes(4) + }) + }) + }) + describe('ThesaurusField', () => { + beforeEach(() => { + searchField = new ThesaurusField( + 'th_inspire.link', + 'inspire', + 'asc', + injector + ) + }) + describe('#getAvailableValues', () => { + let values + beforeEach(async () => { + values = await lastValueFrom(searchField.getAvailableValues()) + }) + it('calls search with a simple unsorted terms', () => { + expect(platformService.getThesaurusByLang).toHaveBeenCalledWith( + 'inspire', + 'fre' + ) + }) + it('returns a list of values sorted by translated labels', () => { + expect(values).toEqual([ + { label: 'Forêt (3)', value: 'Second value' }, + { label: 'Fourth value (1)', value: 'Fourth value' }, + { label: 'Planète (12)', value: 'Third value' }, + { label: 'Rivière (5)', value: 'First value' }, + ]) }) }) }) diff --git a/libs/feature/search/src/lib/utils/service/fields.ts b/libs/feature/search/src/lib/utils/service/fields.ts index 41949fe408..620816003d 100644 --- a/libs/feature/search/src/lib/utils/service/fields.ts +++ b/libs/feature/search/src/lib/utils/service/fields.ts @@ -1,10 +1,11 @@ -import { firstValueFrom, Observable, of, switchMap } from 'rxjs' -import { ToolsApiService } from '@geonetwork-ui/data-access/gn4' +import { firstValueFrom, Observable, of, switchMap, tap } from 'rxjs' import { catchError, map, shareReplay } from 'rxjs/operators' import { Injector } from '@angular/core' import { TranslateService } from '@ngx-translate/core' import { marker } from '@biesbjerg/ngx-translate-extract-marker' import { OrganizationsServiceInterface } from '@geonetwork-ui/common/domain/organizations.service.interface' +import { RecordsRepositoryInterface } from '@geonetwork-ui/common/domain/repository/records-repository.interface' +import { PlatformServiceInterface } from '@geonetwork-ui/common/domain/platform.service.interface' import { AggregationBuckets, AggregationsParams, @@ -12,8 +13,8 @@ import { FieldFilters, TermBucket, } from '@geonetwork-ui/common/domain/model/search' -import { RecordsRepositoryInterface } from '@geonetwork-ui/common/domain/repository/records-repository.interface' import { ElasticsearchService } from '@geonetwork-ui/api/repository/gn4' +import { LangService } from '@geonetwork-ui/util/i18n' export type FieldValue = string | number export interface FieldAvailableValue { @@ -87,28 +88,11 @@ export class SimpleSearchField implements AbstractSearchField { } } -export class GnUiTranslationSearchField extends SimpleSearchField { - private toolsApiService = this.injector.get(ToolsApiService) - allTranslations = this.toolsApiService.getTranslationsPackage1('gnui').pipe( - catchError(() => { - console.warn('Error while loading gnui language package') - return of({}) - }), - shareReplay(1) - ) - - constructor( - esFieldName: string, - order: 'asc' | 'desc' = 'asc', - injector: Injector - ) { - super(esFieldName, order, injector) - } +export class KeySearchField extends SimpleSearchField { + protected platformService = this.injector.get(PlatformServiceInterface) - private async getTranslation(topicKey: string) { - return firstValueFrom( - this.allTranslations.pipe(map((translations) => translations[topicKey])) - ) + protected async getTranslation(key: string) { + return firstValueFrom(this.platformService.translateKey(key)) } protected async getBucketLabel(bucket: TermBucket) { @@ -127,6 +111,37 @@ export class GnUiTranslationSearchField extends SimpleSearchField { } } +export class ThesaurusField extends KeySearchField { + private langService = this.injector.get(LangService) + private thesaurus$ = this.platformService + .getThesaurusByLang(this.thesaurusName, this.langService.iso3) + .pipe( + catchError(() => { + console.warn('Error while loading thesaurus language package') + return of([]) + }), + shareReplay(1) + ) + + constructor( + esFieldName: string, + protected thesaurusName: string, + order: 'asc' | 'desc' = 'asc', + injector: Injector + ) { + super(esFieldName, order, injector) + } + protected async getTranslation(key: string) { + return firstValueFrom( + this.thesaurus$.pipe( + map( + (thesaurus) => thesaurus.find((keyword) => keyword.key === key)?.label + ) + ) + ) + } +} + export class FullTextSearchField implements AbstractSearchField { getAvailableValues(): Observable { return of([]) diff --git a/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts b/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts index 0f0e1d60d7..57c75a1bb0 100644 --- a/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +++ b/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts @@ -1,4 +1,22 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core' +import { marker } from '@biesbjerg/ngx-translate-extract-marker' + +marker('record.metadata.quality.title.success') +marker('record.metadata.quality.title.failed') +marker('record.metadata.quality.description.success') +marker('record.metadata.quality.description.failed') +marker('record.metadata.quality.topic.success') +marker('record.metadata.quality.topic.failed') +marker('record.metadata.quality.keywords.success') +marker('record.metadata.quality.keywords.failed') +marker('record.metadata.quality.legalConstraints.success') +marker('record.metadata.quality.legalConstraints.failed') +marker('record.metadata.quality.contact.success') +marker('record.metadata.quality.contact.failed') +marker('record.metadata.quality.updateFrequency.success') +marker('record.metadata.quality.updateFrequency.failed') +marker('record.metadata.quality.organisation.success') +marker('record.metadata.quality.organisation.failed') export interface MetadataQualityItem { name: string diff --git a/translations/de.json b/translations/de.json index 8755763492..b1cb3219cc 100644 --- a/translations/de.json +++ b/translations/de.json @@ -26,10 +26,10 @@ "dashboard.records.noUser": "", "dashboard.records.publishedRecords": "", "dashboard.records.search": "", - "dashboard.records.users": "", - "dashboard.records.username": "", "dashboard.records.userDetail": "", "dashboard.records.userEmail": "", + "dashboard.records.username": "", + "dashboard.records.users": "", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen", "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl", @@ -207,6 +207,24 @@ "record.metadata.origin": "Über die Daten", "record.metadata.preview": "Vorschau", "record.metadata.publications": "Veröffentlichungen", + "record.metadata.quality": "", + "record.metadata.quality.contact.failed": "", + "record.metadata.quality.contact.success": "", + "record.metadata.quality.description.failed": "", + "record.metadata.quality.description.success": "", + "record.metadata.quality.details": "", + "record.metadata.quality.keywords.failed": "", + "record.metadata.quality.keywords.success": "", + "record.metadata.quality.legalConstraints.failed": "", + "record.metadata.quality.legalConstraints.success": "", + "record.metadata.quality.organisation.failed": "", + "record.metadata.quality.organisation.success": "", + "record.metadata.quality.title.failed": "", + "record.metadata.quality.title.success": "", + "record.metadata.quality.topic.failed": "", + "record.metadata.quality.topic.success": "", + "record.metadata.quality.updateFrequency.failed": "", + "record.metadata.quality.updateFrequency.success": "", "record.metadata.related": "Ähnliche Datensätze", "record.metadata.sheet": "Weitere Informationen erhalten Sie unter :", "record.metadata.title": "Titel", @@ -228,6 +246,7 @@ "results.showMore": "Mehr Ergebnisse anzeigen...", "results.sortBy.dateStamp": "Letzte Aktualisierungen", "results.sortBy.popularity": "Beliebtheit", + "results.sortBy.qualityScore": "", "results.sortBy.relevancy": "Relevanz", "search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:", "search.error.couldNotReachApi": "Die API konnte nicht erreicht werden", @@ -236,6 +255,7 @@ "search.field.any.placeholder": "Suche nach Datensätzen ...", "search.field.sortBy": "Sortieren nach:", "search.filters.clear": "Zurücksetzen", + "search.filters.contact": "Kontakt", "search.filters.format": "Formate", "search.filters.inspireKeyword": "INSPIRE-Schlüsselwort", "search.filters.isSpatial": "Ist räumliche Daten", @@ -253,10 +273,10 @@ "search.filters.license.unknown": "Unbekannt oder nicht vorhanden", "search.filters.maximize": "Erweitern", "search.filters.minimize": "Minimieren", - "search.filters.publicationYear": "Veröffentlichungsjahr", "search.filters.myRecords": "", "search.filters.myRecordsHelp": "", "search.filters.otherRecords": "", + "search.filters.publicationYear": "Veröffentlichungsjahr", "search.filters.publisher": "Organisationen", "search.filters.representationType": "", "search.filters.resourceType": "", diff --git a/translations/en.json b/translations/en.json index 19c040d9d0..d6aaeb0b89 100644 --- a/translations/en.json +++ b/translations/en.json @@ -26,10 +26,10 @@ "dashboard.records.noUser": "No users for this organization", "dashboard.records.publishedRecords": "published records", "dashboard.records.search": "Search for \"{searchText}\"", - "dashboard.records.users": "users", - "dashboard.records.username": "Username", "dashboard.records.userDetail": "Name", "dashboard.records.userEmail": "Email", + "dashboard.records.username": "Username", + "dashboard.records.users": "users", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information", "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data", @@ -207,6 +207,24 @@ "record.metadata.origin": "About the data", "record.metadata.preview": "Preview", "record.metadata.publications": "publications", + "record.metadata.quality": "Metadata Quality", + "record.metadata.quality.contact.failed": "Contact is not completed", + "record.metadata.quality.contact.success": "Contact is completed", + "record.metadata.quality.description.failed": "Description is not completed", + "record.metadata.quality.description.success": "Description is completed", + "record.metadata.quality.details": "Details", + "record.metadata.quality.keywords.failed": "Keywords are not completed", + "record.metadata.quality.keywords.success": "Keywords are completed", + "record.metadata.quality.legalConstraints.failed": "Legal constraints are not completed", + "record.metadata.quality.legalConstraints.success": "Legal constraints are completed", + "record.metadata.quality.organisation.failed": "Organisation is not completed", + "record.metadata.quality.organisation.success": "Organisation is completed", + "record.metadata.quality.title.failed": "Title is not completed", + "record.metadata.quality.title.success": "Title is completed", + "record.metadata.quality.topic.failed": "Topic is not completed", + "record.metadata.quality.topic.success": "Topic is completed", + "record.metadata.quality.updateFrequency.failed": "Update frequency is not completed", + "record.metadata.quality.updateFrequency.success": "Update frequency is completed", "record.metadata.related": "Related records", "record.metadata.sheet": "More information available from:", "record.metadata.title": "Title", @@ -214,24 +232,6 @@ "record.metadata.updateStatus": "Data Update Status", "record.metadata.updatedOn": "Last Data Information Update", "record.metadata.usage": "Usage & constraints", - "record.metadata.quality": "Metadata Quality", - "record.metadata.quality.details": "Details", - "record.metadata.quality.title.success": "Title is completed", - "record.metadata.quality.title.failed": "Title is not completed", - "record.metadata.quality.description.success": "Description is completed", - "record.metadata.quality.description.failed": "Description is not completed", - "record.metadata.quality.topic.success": "Topic is completed", - "record.metadata.quality.topic.failed": "Topic is not completed", - "record.metadata.quality.keywords.success": "Keywords are completed", - "record.metadata.quality.keywords.failed": "Keywords are not completed", - "record.metadata.quality.legalConstraints.success": "Legal constraints are completed", - "record.metadata.quality.legalConstraints.failed": "Legal constraints are not completed", - "record.metadata.quality.contact.success": "Contact is completed", - "record.metadata.quality.contact.failed": "Contact is not completed", - "record.metadata.quality.updateFrequency.success": "Update frequency is completed", - "record.metadata.quality.updateFrequency.failed": "Update frequency is not completed", - "record.metadata.quality.organisation.success": "Organisation is completed", - "record.metadata.quality.organisation.failed": "Organisation is not completed", "record.more.details": "Read more", "record.tab.chart": "Chart", "record.tab.data": "Table", @@ -246,8 +246,8 @@ "results.showMore": "Show more results...", "results.sortBy.dateStamp": "Most recent", "results.sortBy.popularity": "Popularity", - "results.sortBy.relevancy": "Relevancy", "results.sortBy.qualityScore": "Quality score", + "results.sortBy.relevancy": "Relevancy", "search.autocomplete.error": "Suggestions could not be fetched:", "search.error.couldNotReachApi": "The API could not be reached", "search.error.receivedError": "An error was received", @@ -255,6 +255,7 @@ "search.field.any.placeholder": "Search datasets ...", "search.field.sortBy": "Sort by:", "search.filters.clear": "Reset", + "search.filters.contact": "Contacts", "search.filters.format": "Formats", "search.filters.inspireKeyword": "INSPIRE keyword", "search.filters.isSpatial": "Is spatial data", @@ -272,10 +273,10 @@ "search.filters.license.unknown": "Unknown or absent", "search.filters.maximize": "Expand", "search.filters.minimize": "Minimize", - "search.filters.publicationYear": "Publication year", "search.filters.myRecords": "Show only my records", "search.filters.myRecordsHelp": "When this is enabled, records only created by myself are shown; records created by others will not show up.", "search.filters.otherRecords": "Showing records from another person", + "search.filters.publicationYear": "Publication year", "search.filters.publisher": "Organizations", "search.filters.representationType": "Representation type", "search.filters.resourceType": "Resource type", diff --git a/translations/es.json b/translations/es.json index d35079a512..a9be25643d 100644 --- a/translations/es.json +++ b/translations/es.json @@ -26,10 +26,10 @@ "dashboard.records.noUser": "", "dashboard.records.publishedRecords": "", "dashboard.records.search": "Buscar \"{searchText}\"", - "dashboard.records.users": "", - "dashboard.records.username": "", "dashboard.records.userDetail": "", "dashboard.records.userEmail": "", + "dashboard.records.username": "", + "dashboard.records.users": "", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "", "datafeeder.analysisProgressBar.illustration.samplingData": "", @@ -207,6 +207,24 @@ "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", + "record.metadata.quality": "", + "record.metadata.quality.contact.failed": "", + "record.metadata.quality.contact.success": "", + "record.metadata.quality.description.failed": "", + "record.metadata.quality.description.success": "", + "record.metadata.quality.details": "", + "record.metadata.quality.keywords.failed": "", + "record.metadata.quality.keywords.success": "", + "record.metadata.quality.legalConstraints.failed": "", + "record.metadata.quality.legalConstraints.success": "", + "record.metadata.quality.organisation.failed": "", + "record.metadata.quality.organisation.success": "", + "record.metadata.quality.title.failed": "", + "record.metadata.quality.title.success": "", + "record.metadata.quality.topic.failed": "", + "record.metadata.quality.topic.success": "", + "record.metadata.quality.updateFrequency.failed": "", + "record.metadata.quality.updateFrequency.success": "", "record.metadata.related": "", "record.metadata.sheet": "", "record.metadata.title": "", @@ -214,24 +232,6 @@ "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.quality": "", - "record.metadata.quality.details": "", - "record.metadata.quality.title.success": "", - "record.metadata.quality.title.failed": "", - "record.metadata.quality.description.success": "", - "record.metadata.quality.description.failed": "", - "record.metadata.quality.topic.success": "", - "record.metadata.quality.topic.failed": "", - "record.metadata.quality.keywords.success": "", - "record.metadata.quality.keywords.failed": "", - "record.metadata.quality.legalConstraints.success": "", - "record.metadata.quality.legalConstraints.failed": "", - "record.metadata.quality.contact.success": "", - "record.metadata.quality.contact.failed": "", - "record.metadata.quality.updateFrequency.success": "", - "record.metadata.quality.updateFrequency.failed": "", - "record.metadata.quality.organisation.success": "", - "record.metadata.quality.organisation.failed": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -246,8 +246,8 @@ "results.showMore": "", "results.sortBy.dateStamp": "", "results.sortBy.popularity": "", - "results.sortBy.relevancy": "", "results.sortBy.qualityScore": "", + "results.sortBy.relevancy": "", "search.autocomplete.error": "", "search.error.couldNotReachApi": "", "search.error.receivedError": "", @@ -255,6 +255,7 @@ "search.field.any.placeholder": "", "search.field.sortBy": "", "search.filters.clear": "", + "search.filters.contact": "", "search.filters.format": "", "search.filters.inspireKeyword": "", "search.filters.isSpatial": "", @@ -272,10 +273,10 @@ "search.filters.license.unknown": "", "search.filters.maximize": "", "search.filters.minimize": "", - "search.filters.publicationYear": "", "search.filters.myRecords": "", "search.filters.myRecordsHelp": "", "search.filters.otherRecords": "", + "search.filters.publicationYear": "", "search.filters.publisher": "", "search.filters.representationType": "", "search.filters.resourceType": "", diff --git a/translations/fr.json b/translations/fr.json index c32b0b18d1..88bf7fa157 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -26,10 +26,10 @@ "dashboard.records.noUser": "Aucun utilisateur pour cette organisation", "dashboard.records.publishedRecords": "données publiées", "dashboard.records.search": "Résultats pour \"{searchText}\"", - "dashboard.records.users": "utilisateurs", - "dashboard.records.username": "Nom d'utilisateur", "dashboard.records.userDetail": "Nom", "dashboard.records.userEmail": "Email", + "dashboard.records.username": "Nom d'utilisateur", + "dashboard.records.users": "utilisateurs", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données", "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données", @@ -207,6 +207,24 @@ "record.metadata.origin": "À propos des données", "record.metadata.preview": "Aperçu", "record.metadata.publications": "données", + "record.metadata.quality": "Qualité des métadonnées", + "record.metadata.quality.contact.failed": "Contact n'est pas renseigné", + "record.metadata.quality.contact.success": "Contact est renseigné", + "record.metadata.quality.description.failed": "Description n'est pas renseignée", + "record.metadata.quality.description.success": "Description est renseignée", + "record.metadata.quality.details": "Détails", + "record.metadata.quality.keywords.failed": "Mots clés ne sont pas renseignés", + "record.metadata.quality.keywords.success": "Mots clés sont renseignés", + "record.metadata.quality.legalConstraints.failed": "Contraintes légales ne sont pas renseignées", + "record.metadata.quality.legalConstraints.success": "Contraintes légales sont renseignées", + "record.metadata.quality.organisation.failed": "Producteur n'est pas renseigné", + "record.metadata.quality.organisation.success": "Producteur est renseigné", + "record.metadata.quality.title.failed": "Titre n'est pas renseigné", + "record.metadata.quality.title.success": "Titre est renseigné", + "record.metadata.quality.topic.failed": "Thème n'est pas renseigné", + "record.metadata.quality.topic.success": "Thème est renseigné", + "record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée", + "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée", "record.metadata.related": "Voir aussi", "record.metadata.sheet": "Plus d'informations à l'adresse suivante :", "record.metadata.title": "Titre", @@ -214,24 +232,6 @@ "record.metadata.updateStatus": "Statut de mise à jour des données", "record.metadata.updatedOn": "Dernière mise à jour des informations sur les données", "record.metadata.usage": "Conditions d'utilisation", - "record.metadata.quality": "Qualité des métadonnées", - "record.metadata.quality.details": "Détails", - "record.metadata.quality.title.success": "Titre est renseigné", - "record.metadata.quality.title.failed": "Titre n'est pas renseigné", - "record.metadata.quality.description.success": "Description est renseignée", - "record.metadata.quality.description.failed": "Description n'est pas renseignée", - "record.metadata.quality.topic.success": "Thème est renseigné", - "record.metadata.quality.topic.failed": "Thème n'est pas renseigné", - "record.metadata.quality.keywords.success": "Mots clés sont renseignés", - "record.metadata.quality.keywords.failed": "Mots clés ne sont pas renseignés", - "record.metadata.quality.legalConstraints.success": "Contraintes légales sont renseignées", - "record.metadata.quality.legalConstraints.failed": "Contraintes légales ne sont pas renseignées", - "record.metadata.quality.contact.success": "Contact est renseigné", - "record.metadata.quality.contact.failed": "Contact n'est pas renseigné", - "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée", - "record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée", - "record.metadata.quality.organisation.success": "Producteur est renseigné", - "record.metadata.quality.organisation.failed": "Producteur n'est pas renseigné", "record.more.details": "Détails", "record.tab.chart": "Graphique", "record.tab.data": "Tableau", @@ -246,8 +246,8 @@ "results.showMore": "Plus de résultats...", "results.sortBy.dateStamp": "Plus récent", "results.sortBy.popularity": "Popularité", - "results.sortBy.relevancy": "Pertinence", "results.sortBy.qualityScore": "Indicateur de qualité", + "results.sortBy.relevancy": "Pertinence", "search.autocomplete.error": "Les suggestions ne peuvent pas être récupérées", "search.error.couldNotReachApi": "Problème de connexion à l'API", "search.error.receivedError": "Erreur retournée", @@ -255,6 +255,7 @@ "search.field.any.placeholder": "Rechercher une donnée...", "search.field.sortBy": "Trier par :", "search.filters.clear": "Réinitialiser", + "search.filters.contact": "Contacts", "search.filters.format": "Formats", "search.filters.inspireKeyword": "Mot-clé INSPIRE", "search.filters.isSpatial": "Données spatiales", @@ -272,10 +273,10 @@ "search.filters.license.unknown": "Non-reconnue ou absente", "search.filters.maximize": "Agrandir", "search.filters.minimize": "Réduire", - "search.filters.publicationYear": "Année de publication", "search.filters.myRecords": "Voir mes données", "search.filters.myRecordsHelp": "Quand activé, n'affiche que les données créées avec mon utilisateur. Les données créées par les autres utilisateurs ne sont pas affichées.", "search.filters.otherRecords": "Affichage des données d'un autre utilisateur", + "search.filters.publicationYear": "Année de publication", "search.filters.publisher": "Organisations", "search.filters.representationType": "Type de représentation", "search.filters.resourceType": "Type de ressource", diff --git a/translations/it.json b/translations/it.json index 73c62af3af..83caee58a4 100644 --- a/translations/it.json +++ b/translations/it.json @@ -26,10 +26,10 @@ "dashboard.records.noUser": "", "dashboard.records.publishedRecords": "", "dashboard.records.search": "Cerca \"{searchText}\"", - "dashboard.records.users": "", - "dashboard.records.username": "", "dashboard.records.userDetail": "", "dashboard.records.userEmail": "", + "dashboard.records.username": "", + "dashboard.records.users": "", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "", "datafeeder.analysisProgressBar.illustration.samplingData": "", @@ -207,6 +207,24 @@ "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", + "record.metadata.quality": "", + "record.metadata.quality.contact.failed": "", + "record.metadata.quality.contact.success": "", + "record.metadata.quality.description.failed": "", + "record.metadata.quality.description.success": "", + "record.metadata.quality.details": "", + "record.metadata.quality.keywords.failed": "", + "record.metadata.quality.keywords.success": "", + "record.metadata.quality.legalConstraints.failed": "", + "record.metadata.quality.legalConstraints.success": "", + "record.metadata.quality.organisation.failed": "", + "record.metadata.quality.organisation.success": "", + "record.metadata.quality.title.failed": "", + "record.metadata.quality.title.success": "", + "record.metadata.quality.topic.failed": "", + "record.metadata.quality.topic.success": "", + "record.metadata.quality.updateFrequency.failed": "", + "record.metadata.quality.updateFrequency.success": "", "record.metadata.related": "", "record.metadata.sheet": "", "record.metadata.title": "", @@ -214,24 +232,6 @@ "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.quality": "", - "record.metadata.quality.details": "", - "record.metadata.quality.title.success": "", - "record.metadata.quality.title.failed": "", - "record.metadata.quality.description.success": "", - "record.metadata.quality.description.failed": "", - "record.metadata.quality.topic.success": "", - "record.metadata.quality.topic.failed": "", - "record.metadata.quality.keywords.success": "", - "record.metadata.quality.keywords.failed": "", - "record.metadata.quality.legalConstraints.success": "", - "record.metadata.quality.legalConstraints.failed": "", - "record.metadata.quality.contact.success": "", - "record.metadata.quality.contact.failed": "", - "record.metadata.quality.updateFrequency.success": "", - "record.metadata.quality.updateFrequency.failed": "", - "record.metadata.quality.organisation.success": "", - "record.metadata.quality.organisation.failed": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -246,8 +246,8 @@ "results.showMore": "", "results.sortBy.dateStamp": "", "results.sortBy.popularity": "", - "results.sortBy.relevancy": "", "results.sortBy.qualityScore": "", + "results.sortBy.relevancy": "", "search.autocomplete.error": "", "search.error.couldNotReachApi": "", "search.error.receivedError": "", @@ -255,6 +255,7 @@ "search.field.any.placeholder": "", "search.field.sortBy": "", "search.filters.clear": "", + "search.filters.contact": "", "search.filters.format": "", "search.filters.inspireKeyword": "", "search.filters.isSpatial": "", @@ -272,10 +273,10 @@ "search.filters.license.unknown": "", "search.filters.maximize": "", "search.filters.minimize": "", - "search.filters.publicationYear": "", "search.filters.myRecords": "", "search.filters.myRecordsHelp": "", "search.filters.otherRecords": "", + "search.filters.publicationYear": "", "search.filters.publisher": "", "search.filters.representationType": "", "search.filters.resourceType": "", diff --git a/translations/nl.json b/translations/nl.json index 00087862f2..bf47237a21 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -26,10 +26,10 @@ "dashboard.records.noUser": "", "dashboard.records.publishedRecords": "", "dashboard.records.search": "Zoeken naar \"{searchText}\"", - "dashboard.records.users": "", - "dashboard.records.username": "", "dashboard.records.userDetail": "", "dashboard.records.userEmail": "", + "dashboard.records.username": "", + "dashboard.records.users": "", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "", "datafeeder.analysisProgressBar.illustration.samplingData": "", @@ -207,6 +207,24 @@ "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", + "record.metadata.quality": "", + "record.metadata.quality.contact.failed": "", + "record.metadata.quality.contact.success": "", + "record.metadata.quality.description.failed": "", + "record.metadata.quality.description.success": "", + "record.metadata.quality.details": "", + "record.metadata.quality.keywords.failed": "", + "record.metadata.quality.keywords.success": "", + "record.metadata.quality.legalConstraints.failed": "", + "record.metadata.quality.legalConstraints.success": "", + "record.metadata.quality.organisation.failed": "", + "record.metadata.quality.organisation.success": "", + "record.metadata.quality.title.failed": "", + "record.metadata.quality.title.success": "", + "record.metadata.quality.topic.failed": "", + "record.metadata.quality.topic.success": "", + "record.metadata.quality.updateFrequency.failed": "", + "record.metadata.quality.updateFrequency.success": "", "record.metadata.related": "", "record.metadata.sheet": "", "record.metadata.title": "", @@ -214,24 +232,6 @@ "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.quality": "", - "record.metadata.quality.details": "", - "record.metadata.quality.title.success": "", - "record.metadata.quality.title.failed": "", - "record.metadata.quality.description.success": "", - "record.metadata.quality.description.failed": "", - "record.metadata.quality.topic.success": "", - "record.metadata.quality.topic.failed": "", - "record.metadata.quality.keywords.success": "", - "record.metadata.quality.keywords.failed": "", - "record.metadata.quality.legalConstraints.success": "", - "record.metadata.quality.legalConstraints.failed": "", - "record.metadata.quality.contact.success": "", - "record.metadata.quality.contact.failed": "", - "record.metadata.quality.updateFrequency.success": "", - "record.metadata.quality.updateFrequency.failed": "", - "record.metadata.quality.organisation.success": "", - "record.metadata.quality.organisation.failed": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -246,8 +246,8 @@ "results.showMore": "", "results.sortBy.dateStamp": "", "results.sortBy.popularity": "", - "results.sortBy.relevancy": "", "results.sortBy.qualityScore": "", + "results.sortBy.relevancy": "", "search.autocomplete.error": "", "search.error.couldNotReachApi": "", "search.error.receivedError": "", @@ -255,6 +255,7 @@ "search.field.any.placeholder": "", "search.field.sortBy": "", "search.filters.clear": "", + "search.filters.contact": "", "search.filters.format": "", "search.filters.inspireKeyword": "", "search.filters.isSpatial": "", @@ -272,10 +273,10 @@ "search.filters.license.unknown": "", "search.filters.maximize": "", "search.filters.minimize": "", - "search.filters.publicationYear": "", "search.filters.myRecords": "", "search.filters.myRecordsHelp": "", "search.filters.otherRecords": "", + "search.filters.publicationYear": "", "search.filters.publisher": "", "search.filters.representationType": "", "search.filters.resourceType": "", diff --git a/translations/pt.json b/translations/pt.json index 83a73859c8..6156d65526 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -26,10 +26,10 @@ "dashboard.records.noUser": "", "dashboard.records.publishedRecords": "", "dashboard.records.search": "Buscar por \"{searchText}\"", - "dashboard.records.users": "", - "dashboard.records.username": "", "dashboard.records.userDetail": "", "dashboard.records.userEmail": "", + "dashboard.records.username": "", + "dashboard.records.users": "", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "", "datafeeder.analysisProgressBar.illustration.samplingData": "", @@ -207,6 +207,24 @@ "record.metadata.origin": "", "record.metadata.preview": "", "record.metadata.publications": "", + "record.metadata.quality": "", + "record.metadata.quality.contact.failed": "", + "record.metadata.quality.contact.success": "", + "record.metadata.quality.description.failed": "", + "record.metadata.quality.description.success": "", + "record.metadata.quality.details": "", + "record.metadata.quality.keywords.failed": "", + "record.metadata.quality.keywords.success": "", + "record.metadata.quality.legalConstraints.failed": "", + "record.metadata.quality.legalConstraints.success": "", + "record.metadata.quality.organisation.failed": "", + "record.metadata.quality.organisation.success": "", + "record.metadata.quality.title.failed": "", + "record.metadata.quality.title.success": "", + "record.metadata.quality.topic.failed": "", + "record.metadata.quality.topic.success": "", + "record.metadata.quality.updateFrequency.failed": "", + "record.metadata.quality.updateFrequency.success": "", "record.metadata.related": "", "record.metadata.sheet": "", "record.metadata.title": "", @@ -214,24 +232,6 @@ "record.metadata.updateStatus": "", "record.metadata.updatedOn": "", "record.metadata.usage": "", - "record.metadata.quality": "", - "record.metadata.quality.details": "", - "record.metadata.quality.title.success": "", - "record.metadata.quality.title.failed": "", - "record.metadata.quality.description.success": "", - "record.metadata.quality.description.failed": "", - "record.metadata.quality.topic.success": "", - "record.metadata.quality.topic.failed": "", - "record.metadata.quality.keywords.success": "", - "record.metadata.quality.keywords.failed": "", - "record.metadata.quality.legalConstraints.success": "", - "record.metadata.quality.legalConstraints.failed": "", - "record.metadata.quality.contact.success": "", - "record.metadata.quality.contact.failed": "", - "record.metadata.quality.updateFrequency.success": "", - "record.metadata.quality.updateFrequency.failed": "", - "record.metadata.quality.organisation.success": "", - "record.metadata.quality.organisation.failed": "", "record.more.details": "", "record.tab.chart": "", "record.tab.data": "", @@ -246,8 +246,8 @@ "results.showMore": "", "results.sortBy.dateStamp": "", "results.sortBy.popularity": "", - "results.sortBy.relevancy": "", "results.sortBy.qualityScore": "", + "results.sortBy.relevancy": "", "search.autocomplete.error": "", "search.error.couldNotReachApi": "", "search.error.receivedError": "", @@ -255,6 +255,7 @@ "search.field.any.placeholder": "", "search.field.sortBy": "", "search.filters.clear": "", + "search.filters.contact": "", "search.filters.format": "", "search.filters.inspireKeyword": "", "search.filters.isSpatial": "", @@ -272,10 +273,10 @@ "search.filters.license.unknown": "", "search.filters.maximize": "", "search.filters.minimize": "", - "search.filters.publicationYear": "", "search.filters.myRecords": "", "search.filters.myRecordsHelp": "", "search.filters.otherRecords": "", + "search.filters.publicationYear": "", "search.filters.publisher": "", "search.filters.representationType": "", "search.filters.resourceType": "", diff --git a/translations/sk.json b/translations/sk.json index 55a57fd795..1128d73bba 100644 --- a/translations/sk.json +++ b/translations/sk.json @@ -22,7 +22,14 @@ "dashboard.records.myLibrary": "Moja knižnica", "dashboard.records.myOrg": "Organizácia", "dashboard.records.myRecords": "Moje záznamy", + "dashboard.records.noRecord": "", + "dashboard.records.noUser": "", + "dashboard.records.publishedRecords": "", "dashboard.records.search": "Hľadať \"{searchText}\"", + "dashboard.records.userDetail": "", + "dashboard.records.userEmail": "", + "dashboard.records.username": "", + "dashboard.records.users": "", "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Detekcia formátu súboru", "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Zbieranie informácií o datasete", "datafeeder.analysisProgressBar.illustration.samplingData": "Vzorkovanie dát", @@ -201,7 +208,23 @@ "record.metadata.preview": "Náhľad", "record.metadata.publications": "publikácie", "record.metadata.quality": "Kvalita metadát", + "record.metadata.quality.contact.failed": "", + "record.metadata.quality.contact.success": "", + "record.metadata.quality.description.failed": "", + "record.metadata.quality.description.success": "", "record.metadata.quality.details": "Detaily", + "record.metadata.quality.keywords.failed": "", + "record.metadata.quality.keywords.success": "", + "record.metadata.quality.legalConstraints.failed": "", + "record.metadata.quality.legalConstraints.success": "", + "record.metadata.quality.organisation.failed": "", + "record.metadata.quality.organisation.success": "", + "record.metadata.quality.title.failed": "", + "record.metadata.quality.title.success": "", + "record.metadata.quality.topic.failed": "", + "record.metadata.quality.topic.success": "", + "record.metadata.quality.updateFrequency.failed": "", + "record.metadata.quality.updateFrequency.success": "", "record.metadata.related": "Súvisiace záznamy", "record.metadata.sheet": "Ďalšie metadáta sú k dispozícii na:", "record.metadata.title": "Názov", @@ -219,6 +242,7 @@ "results.records.hits.displayedOn": "{displayed, plural, =0{Žiadny záznam.} one{1 záznam} other{{displayed} záznamov }} {hits, plural, other{zobrazených z {hits} celkovo.}}", "results.records.hits.empty.help.html": "Návrhy:
  • Vyskúšajte iné slová
  • Uveďte menej slov
", "results.records.hits.found": "{hits, plural, =0{Žiadne dokumenty nezodpovedajú zadanému vyhľadávaniu.} one{1 záznam nájdený.} other{{hits} záznamov nájdených.}}", + "results.records.hits.selected": "", "results.showMore": "Zobraziť viac výsledkov...", "results.sortBy.dateStamp": "Najnovšie", "results.sortBy.popularity": "Popularita", @@ -231,6 +255,7 @@ "search.field.any.placeholder": "Hľadať datasety ...", "search.field.sortBy": "Zoradiť podľa:", "search.filters.clear": "Obnoviť", + "search.filters.contact": "", "search.filters.format": "Formáty", "search.filters.inspireKeyword": "Kľúčové slová INSPIRE", "search.filters.isSpatial": "Je priestorový údaj", @@ -244,5 +269,33 @@ "search.filters.license.etalab-v2": "Open Licence v2.0 (Etalab)", "search.filters.license.odbl": "Open Data Commons ODbL", "search.filters.license.odc-by": "Open Data Commons ODC-By", - "search.filters.license.pddl": "Open Data Commons" + "search.filters.license.pddl": "Open Data Commons", + "search.filters.license.unknown": "", + "search.filters.maximize": "", + "search.filters.minimize": "", + "search.filters.myRecords": "", + "search.filters.myRecordsHelp": "", + "search.filters.otherRecords": "", + "search.filters.publicationYear": "", + "search.filters.publisher": "", + "search.filters.representationType": "", + "search.filters.resourceType": "", + "search.filters.standard": "", + "search.filters.title": "", + "search.filters.topic": "", + "search.filters.useSpatialFilter": "", + "search.filters.useSpatialFilterHelp": "", + "share.tab.permalink": "", + "share.tab.webComponent": "", + "table.loading.data": "", + "table.object.count": "", + "table.select.data": "", + "tooltip.html.copy": "", + "tooltip.url.copy": "", + "tooltip.url.open": "", + "wfs.featuretype.notfound": "", + "wfs.geojsongml.notsupported": "", + "wfs.unreachable.cors": "", + "wfs.unreachable.http": "", + "wfs.unreachable.unknown": "" }