geonetwork-ui 2.10.0-dev.984a9212e → 2.10.0-dev.a201a91b9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/geonetwork-ui.mjs +1474 -6127
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/index.d.ts +244 -172
- package/index.d.ts.map +1 -1
- package/material-styles.css +483 -0
- package/package.json +25 -35
- package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +9 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/eu.dcat-ap.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+ongules.ts +7 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+roilaye.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/metadata-for-i18n.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/opendataswiss.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/sextant.records.ts +2 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/vlaanderen.dcat-ap.records.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +48 -7
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +5 -4
- package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +7 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +8 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +11 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +33 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +33 -0
- package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +8 -4
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +2 -2
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +59 -37
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +1 -1
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +1 -1
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +48 -2
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +13 -5
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +2 -1
- package/src/libs/common/domain/src/lib/model/user/group.model.ts +8 -0
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +2 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +56 -0
- package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +5 -2
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +10 -1
- package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +26 -19
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +15 -2
- package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.ts +0 -2
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.html +67 -0
- package/src/libs/feature/editor/src/lib/components/contact-details/contact-details-form.component.ts +39 -0
- package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.html +18 -3
- package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.ts +33 -40
- package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +5 -5
- package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +2 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/field-focus.directive.ts +41 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +33 -34
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.html +13 -13
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +18 -4
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +8 -7
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +6 -6
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +1 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.html +5 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-single-link-resource/form-field-online-single-link-resource.component.ts +89 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +12 -5
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +4 -4
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +7 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-topics/form-field-topics.component.ts +2 -2
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +6 -2
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +3 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.css +3 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +21 -16
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +14 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.css +35 -0
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +18 -5
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +118 -5
- package/src/libs/feature/editor/src/lib/expressions.ts +380 -8
- package/src/libs/feature/editor/src/lib/fields.config.ts +310 -336
- package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +6 -3
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +9 -13
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +33 -0
- package/src/libs/feature/notify-reuse/src/index.ts +1 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.css +0 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.html +1 -0
- package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.ts +21 -0
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +9 -1
- package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +10 -5
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +2 -2
- package/src/libs/ui/dataviz/src/index.ts +0 -1
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/contact-details/contact-details.component.html +88 -0
- package/src/libs/ui/elements/src/lib/contact-details/contact-details.component.ts +45 -0
- package/src/libs/ui/elements/src/lib/contact-pill/contact-pill.component.html +41 -0
- package/src/libs/ui/elements/src/lib/contact-pill/contact-pill.component.ts +70 -0
- package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +2 -1
- package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +2 -2
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +13 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +13 -3
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +43 -6
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +1 -1
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +0 -1
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +2 -2
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +2 -5
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +0 -4
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +39 -68
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +59 -11
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +4 -5
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +4 -0
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +8 -0
- package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +2 -2
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +3 -3
- package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +2 -2
- package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +2 -1
- package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.html +5 -5
- package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +9 -1
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +1 -1
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +3 -8
- package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.html +7 -7
- package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.ts +14 -1
- package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +2 -1
- package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts +15 -64
- package/src/libs/ui/map/src/lib/map-utils.ts +48 -0
- package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.ts +1 -1
- package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +0 -1
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +12 -8
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +3 -1
- package/src/libs/ui/search/src/lib/results-table/results-table.component.html +1 -0
- package/src/libs/ui/widgets/src/lib/popover/popover.component.ts +7 -1
- package/src/libs/util/app-config/src/lib/app-config.ts +70 -9
- package/src/libs/util/app-config/src/lib/model.ts +7 -0
- package/src/libs/util/app-config/src/lib/parse-utils.ts +50 -1
- package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +1 -2
- package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +6 -3
- package/src/libs/util/i18n/src/index.ts +0 -1
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +17 -11
- package/src/libs/util/i18n/src/lib/i18n.interceptor.ts +2 -2
- package/src/libs/util/i18n/src/lib/i18n.providers.ts +14 -17
- package/src/libs/util/i18n/src/lib/test.translate.loader.ts +48 -0
- package/src/libs/util/shared/src/lib/links/link-utils.ts +23 -1
- package/src/libs/util/shared/src/lib/record/quality-score.util.ts +33 -18
- package/src/libs/util/shared/src/lib/services/date.service.ts +3 -3
- package/src/libs/util/shared/src/lib/utils/geojson.ts +58 -1
- package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
- package/src/libs/util/shared/src/lib/utils/user-display.ts +32 -0
- package/style.css +0 -1
- package/tailwind.base.css +19 -2
- package/translations/de.json +81 -48
- package/translations/en.json +86 -53
- package/translations/es.json +55 -22
- package/translations/fr.json +83 -50
- package/translations/it.json +81 -48
- package/translations/nl.json +54 -21
- package/translations/pt.json +55 -22
- package/translations/sk.json +55 -22
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { inject, Injectable, InjectionToken } from '@angular/core'
|
|
2
|
+
import {
|
|
3
|
+
provideTranslateService,
|
|
4
|
+
TranslateCompiler,
|
|
5
|
+
TranslateLoader,
|
|
6
|
+
TranslationObject,
|
|
7
|
+
} from '@ngx-translate/core'
|
|
8
|
+
import { Observable, of } from 'rxjs'
|
|
9
|
+
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This translate loader is used for testing purposes, it allows to provide translations directly in the test file without having to create JSON files
|
|
13
|
+
* Taken from https://github.com/mwootendev/ngx-translate-plugins/issues/87
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const TestTranslations = new InjectionToken<Record<string, TranslationObject>>(
|
|
17
|
+
'test-translations'
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
@Injectable()
|
|
21
|
+
class TestTranslateLoader implements TranslateLoader {
|
|
22
|
+
translations = inject(TestTranslations)
|
|
23
|
+
getTranslation(lang: string): Observable<TranslationObject> {
|
|
24
|
+
return of(this.translations[lang] as TranslationObject)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function provideTranslateTestingService(
|
|
29
|
+
translations: Record<string, TranslationObject>
|
|
30
|
+
) {
|
|
31
|
+
return provideTranslateService({
|
|
32
|
+
loader: [
|
|
33
|
+
{
|
|
34
|
+
provide: TestTranslations,
|
|
35
|
+
useValue: translations,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
provide: TranslateLoader,
|
|
39
|
+
useClass: TestTranslateLoader,
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
fallbackLang: 'en',
|
|
43
|
+
compiler: {
|
|
44
|
+
provide: TranslateCompiler,
|
|
45
|
+
useClass: TranslateMessageFormatCompiler,
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
}
|
|
@@ -171,6 +171,28 @@ export const FORMATS = {
|
|
|
171
171
|
},
|
|
172
172
|
} as const
|
|
173
173
|
|
|
174
|
+
marker('downloads.format.csv')
|
|
175
|
+
marker('downloads.format.excel')
|
|
176
|
+
marker('downloads.format.geojson')
|
|
177
|
+
marker('downloads.format.json')
|
|
178
|
+
marker('downloads.format.shp')
|
|
179
|
+
marker('downloads.format.gml')
|
|
180
|
+
marker('downloads.format.kml')
|
|
181
|
+
marker('downloads.format.gpkg')
|
|
182
|
+
marker('downloads.format.zip')
|
|
183
|
+
marker('downloads.format.pdf')
|
|
184
|
+
marker('downloads.format.jpg')
|
|
185
|
+
marker('downloads.format.png')
|
|
186
|
+
marker('downloads.format.tiff')
|
|
187
|
+
marker('downloads.format.svg')
|
|
188
|
+
marker('downloads.format.dxf')
|
|
189
|
+
marker('downloads.format.html')
|
|
190
|
+
marker('downloads.format.xml')
|
|
191
|
+
marker('downloads.format.fgb')
|
|
192
|
+
marker('downloads.format.jsonfg')
|
|
193
|
+
marker('downloads.format.webp')
|
|
194
|
+
marker('downloads.format.postgis')
|
|
195
|
+
|
|
174
196
|
export type FileFormat = keyof typeof FORMATS
|
|
175
197
|
|
|
176
198
|
export function getFormatPriority(linkFormat: FileFormat): number {
|
|
@@ -266,7 +288,7 @@ export function checkFileFormat(
|
|
|
266
288
|
new RegExp(`[./]${format}`, 'i').test(link.name.toLowerCase())) ||
|
|
267
289
|
('url' in link &&
|
|
268
290
|
new RegExp(`[./]${format}`, 'i').test(link.url.toString())) ||
|
|
269
|
-
('name' in link &&
|
|
291
|
+
('name' in link && new RegExp(`\\b${format}\\b`, 'i').test(link.name))
|
|
270
292
|
)
|
|
271
293
|
}
|
|
272
294
|
|
|
@@ -3,27 +3,41 @@ import {
|
|
|
3
3
|
RecordKind,
|
|
4
4
|
} from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
5
5
|
|
|
6
|
+
type TValidatorEntry = {
|
|
7
|
+
validator: (metadata: Partial<CatalogRecord>) => boolean
|
|
8
|
+
alias?: string
|
|
9
|
+
}
|
|
10
|
+
|
|
6
11
|
type TValidatorMapper = {
|
|
7
|
-
[key: string]:
|
|
12
|
+
[key: string]: TValidatorEntry
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
const ValidatorMapper: TValidatorMapper = {
|
|
11
|
-
title: (record) => !!record?.title,
|
|
12
|
-
abstract: (record) => !!record?.abstract,
|
|
13
|
-
keywords: (record) => (record?.keywords?.length ?? 0) > 0,
|
|
14
|
-
legalConstraints:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
title: { validator: (record) => !!record?.title },
|
|
17
|
+
abstract: { validator: (record) => !!record?.abstract },
|
|
18
|
+
keywords: { validator: (record) => (record?.keywords?.length ?? 0) > 0 },
|
|
19
|
+
legalConstraints: {
|
|
20
|
+
validator: (record) =>
|
|
21
|
+
!!(
|
|
22
|
+
record?.legalConstraints?.length &&
|
|
23
|
+
record.legalConstraints.some((c) => c?.text?.trim().length > 0)
|
|
24
|
+
),
|
|
25
|
+
},
|
|
26
|
+
contacts: {
|
|
27
|
+
validator: (record) =>
|
|
28
|
+
!!record?.contacts?.[0]?.email &&
|
|
29
|
+
record.contacts[0].email !== 'missing@missing.com',
|
|
30
|
+
},
|
|
31
|
+
updateFrequency: {
|
|
32
|
+
validator: (record) =>
|
|
33
|
+
!!record?.updateFrequency && record.updateFrequency !== 'unknown',
|
|
34
|
+
},
|
|
35
|
+
topics: { validator: (record) => (record?.topics?.length ?? 0) > 0 },
|
|
36
|
+
organisation: {
|
|
37
|
+
validator: (record) => !!record?.contacts?.[0]?.organization?.name,
|
|
38
|
+
alias: 'contacts',
|
|
39
|
+
},
|
|
40
|
+
source: { validator: (record) => !!record?.extras?.sourcesIdentifiers },
|
|
27
41
|
} as const
|
|
28
42
|
|
|
29
43
|
export type ValidatorMapperKeys = keyof typeof ValidatorMapper & string
|
|
@@ -67,6 +81,7 @@ export function getQualityValidators(
|
|
|
67
81
|
|
|
68
82
|
return filteredProps.map((name) => ({
|
|
69
83
|
name,
|
|
70
|
-
validator: () => ValidatorMapper[name](record),
|
|
84
|
+
validator: () => ValidatorMapper[name].validator(record),
|
|
85
|
+
alias: ValidatorMapper[name].alias,
|
|
71
86
|
}))
|
|
72
87
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { inject, Injectable } from '@angular/core'
|
|
2
2
|
import { TranslateService } from '@ngx-translate/core'
|
|
3
3
|
import { type Locale } from 'date-fns/locale'
|
|
4
4
|
import { formatDistance } from 'date-fns/formatDistance'
|
|
@@ -30,13 +30,13 @@ export class DateService {
|
|
|
30
30
|
locale: string
|
|
31
31
|
dateObj: Date
|
|
32
32
|
} {
|
|
33
|
-
const locale = this.translateService.
|
|
33
|
+
const locale = this.translateService.getCurrentLang() || DEFAULT_LANGUAGE
|
|
34
34
|
const dateObj = this.getDateObject(date)
|
|
35
35
|
return { locale, dateObj }
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
private async getDateLocale(): Promise<Locale> {
|
|
39
|
-
const lang = this.translateService.
|
|
39
|
+
const lang = this.translateService.getCurrentLang() || DEFAULT_LANGUAGE
|
|
40
40
|
const locales = await this.dateLocales
|
|
41
41
|
return locales[lang]
|
|
42
42
|
}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Feature,
|
|
3
|
+
FeatureCollection,
|
|
4
|
+
Geometry,
|
|
5
|
+
Polygon,
|
|
6
|
+
Position,
|
|
7
|
+
} from 'geojson'
|
|
8
|
+
import type { DatasetSpatialExtent } from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
2
9
|
|
|
3
10
|
/**
|
|
4
11
|
* @returns The geometry if available, otherwise null.
|
|
@@ -94,3 +101,53 @@ export function getGeometryBoundingBox(geometry: Geometry): BoundingBox {
|
|
|
94
101
|
return coordinatesReducer(emptyExtent, geometry.coordinates)
|
|
95
102
|
}
|
|
96
103
|
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Builds the closed GeoJSON Polygon matching the given bounding box.
|
|
107
|
+
*/
|
|
108
|
+
export function bboxToPolygon(bbox: BoundingBox): Polygon {
|
|
109
|
+
const [minX, minY, maxX, maxY] = bbox
|
|
110
|
+
return {
|
|
111
|
+
type: 'Polygon',
|
|
112
|
+
coordinates: [
|
|
113
|
+
[
|
|
114
|
+
[minX, minY],
|
|
115
|
+
[minX, maxY],
|
|
116
|
+
[maxX, maxY],
|
|
117
|
+
[maxX, minY],
|
|
118
|
+
[minX, minY],
|
|
119
|
+
],
|
|
120
|
+
],
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Returns the geometry carried by a spatial extent, falling back to the polygon
|
|
126
|
+
* derived from its bounding box. Returns null when the extent has neither.
|
|
127
|
+
*/
|
|
128
|
+
export function spatialExtentToGeometry(
|
|
129
|
+
extent: DatasetSpatialExtent
|
|
130
|
+
): Geometry | null {
|
|
131
|
+
if (extent.geometry) return extent.geometry
|
|
132
|
+
if (extent.bbox) return bboxToPolygon(extent.bbox)
|
|
133
|
+
return null
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Converts a list of dataset spatial extents into a GeoJSON FeatureCollection,
|
|
138
|
+
* e.g. to be used as the data source of a map layer.
|
|
139
|
+
*/
|
|
140
|
+
export function spatialExtentsToFeatureCollection(
|
|
141
|
+
extents: DatasetSpatialExtent[]
|
|
142
|
+
): FeatureCollection {
|
|
143
|
+
return {
|
|
144
|
+
type: 'FeatureCollection',
|
|
145
|
+
features: extents.reduce<Feature[]>((features, extent) => {
|
|
146
|
+
const geometry = spatialExtentToGeometry(extent)
|
|
147
|
+
if (geometry) {
|
|
148
|
+
features.push({ type: 'Feature', properties: {}, geometry })
|
|
149
|
+
}
|
|
150
|
+
return features
|
|
151
|
+
}, []),
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { UserModel } from '../../../../../../libs/common/domain/src/lib/model/user'
|
|
2
|
+
import { Individual } from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
3
|
+
|
|
4
|
+
export function getIndividualDisplayName(individual: Individual): string {
|
|
5
|
+
const nameParts = [individual.firstName, individual.lastName]
|
|
6
|
+
.filter(Boolean)
|
|
7
|
+
.join(' ')
|
|
8
|
+
const orgPart = individual.organization?.name
|
|
9
|
+
? ` (${individual.organization.name})`
|
|
10
|
+
: ''
|
|
11
|
+
if (nameParts) return `${nameParts}${orgPart}`
|
|
12
|
+
return individual.organization?.name ?? individual.email ?? ''
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getAddressLines(address: string | undefined): string[] {
|
|
16
|
+
return address
|
|
17
|
+
? address
|
|
18
|
+
.split(',')
|
|
19
|
+
.map((part) => part.trim())
|
|
20
|
+
.filter(Boolean)
|
|
21
|
+
: []
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function toIndividual(user: UserModel): Individual {
|
|
25
|
+
return {
|
|
26
|
+
firstName: user.name,
|
|
27
|
+
lastName: user.surname,
|
|
28
|
+
email: user.email,
|
|
29
|
+
role: 'unspecified',
|
|
30
|
+
organization: user.organisation ? { name: user.organisation } : undefined,
|
|
31
|
+
}
|
|
32
|
+
}
|
package/style.css
CHANGED
package/tailwind.base.css
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@import './material-styles.css';
|
|
2
|
+
|
|
1
3
|
@tailwind base;
|
|
2
4
|
@tailwind components;
|
|
3
5
|
@tailwind utilities;
|
|
@@ -74,7 +76,10 @@
|
|
|
74
76
|
--bg-hover: var(--gn-ui-button-bg-hover, var(--color-background));
|
|
75
77
|
--font-size: var(--gn-ui-button-font-size, 1em);
|
|
76
78
|
--color: var(--gn-ui-button-color, var(--color-main));
|
|
77
|
-
|
|
79
|
+
--disabled-opacity: var(--gn-ui-button-disabled-opacity, 0.5);
|
|
80
|
+
--justify: var(--gn-ui-button-justify, center);
|
|
81
|
+
justify-content: var(--justify);
|
|
82
|
+
@apply flex flex-row items-center
|
|
78
83
|
text-[length:--font-size] leading-none
|
|
79
84
|
text-[color:--color]
|
|
80
85
|
p-[--padding] rounded-[--rounded] w-[--width] h-[--height] overflow-hidden
|
|
@@ -82,7 +87,7 @@
|
|
|
82
87
|
hover:bg-[--bg-hover] focus:bg-[--bg-hover] active:bg-[--background]
|
|
83
88
|
outline-none
|
|
84
89
|
relative
|
|
85
|
-
disabled:opacity-
|
|
90
|
+
disabled:opacity-[--disabled-opacity] disabled:pointer-events-none
|
|
86
91
|
focus:z-10 active:z-10 hover:z-10;
|
|
87
92
|
}
|
|
88
93
|
/* makes sure icons will not make the buttons grow vertically */
|
|
@@ -116,6 +121,12 @@
|
|
|
116
121
|
border-gray-100 focus:ring-4 focus:ring-gray-50;
|
|
117
122
|
}
|
|
118
123
|
|
|
124
|
+
.gn-ui-btn-gray-light {
|
|
125
|
+
@apply gn-ui-btn text-black
|
|
126
|
+
bg-gray-50 hover:bg-gray-100 focus:bg-gray-100 active:bg-gray-200
|
|
127
|
+
border-gray-50 focus:ring-4 focus:ring-gray-100;
|
|
128
|
+
}
|
|
129
|
+
|
|
119
130
|
.gn-ui-btn-black {
|
|
120
131
|
@apply gn-ui-btn text-white
|
|
121
132
|
bg-black hover:bg-gray-950 focus:bg-gray-950 active:bg-gray-900
|
|
@@ -134,6 +145,12 @@
|
|
|
134
145
|
bg-white border-white focus:ring-4 focus:ring-gray-300;
|
|
135
146
|
}
|
|
136
147
|
|
|
148
|
+
.gn-ui-btn-primary-light {
|
|
149
|
+
@apply gn-ui-btn text-primary-darkest
|
|
150
|
+
bg-primary-white hover:bg-primary focus:bg-primary hover:text-white focus:text-white active:bg-primary-darker
|
|
151
|
+
border-transparent;
|
|
152
|
+
}
|
|
153
|
+
|
|
137
154
|
.gn-ui-card-s {
|
|
138
155
|
@apply min-h-[64px] w-full xs:min-w-[260px] xs:max-w-[280px] sm:min-w-[300px] sm:max-w-[500px] md:min-w-[230px];
|
|
139
156
|
}
|
package/translations/de.json
CHANGED
|
@@ -89,6 +89,10 @@
|
|
|
89
89
|
"domain.contact.role.stakeholder": "Beteiligter",
|
|
90
90
|
"domain.contact.role.unspecified": "Nicht angegeben",
|
|
91
91
|
"domain.contact.role.user": "Benutzer",
|
|
92
|
+
"domain.record.keywordType.other": "Stichworte",
|
|
93
|
+
"domain.record.keywordType.place": "Ort",
|
|
94
|
+
"domain.record.keywordType.temporal": "Zeitlich",
|
|
95
|
+
"domain.record.keywordType.theme": "Thema",
|
|
92
96
|
"domain.record.status.completed": "Abgeschlossen",
|
|
93
97
|
"domain.record.status.deprecated": "Veraltet",
|
|
94
98
|
"domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
|
|
@@ -115,18 +119,39 @@
|
|
|
115
119
|
"domain.record.updateFrequency.week": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Woche",
|
|
116
120
|
"domain.record.updateFrequency.weekly": "Daten werden wöchentlich aktualisiert",
|
|
117
121
|
"domain.record.updateFrequency.year": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Jahr",
|
|
122
|
+
"downloads.format.csv": "",
|
|
123
|
+
"downloads.format.dxf": "",
|
|
124
|
+
"downloads.format.excel": "",
|
|
125
|
+
"downloads.format.fgb": "",
|
|
126
|
+
"downloads.format.geojson": "",
|
|
127
|
+
"downloads.format.gml": "",
|
|
128
|
+
"downloads.format.gpkg": "",
|
|
129
|
+
"downloads.format.html": "",
|
|
130
|
+
"downloads.format.jpg": "",
|
|
131
|
+
"downloads.format.json": "",
|
|
132
|
+
"downloads.format.jsonfg": "",
|
|
133
|
+
"downloads.format.kml": "",
|
|
134
|
+
"downloads.format.pdf": "",
|
|
135
|
+
"downloads.format.png": "",
|
|
136
|
+
"downloads.format.postgis": "",
|
|
137
|
+
"downloads.format.shp": "",
|
|
138
|
+
"downloads.format.svg": "",
|
|
139
|
+
"downloads.format.tiff": "",
|
|
118
140
|
"downloads.format.unknown": "unbekannt",
|
|
141
|
+
"downloads.format.webp": "",
|
|
142
|
+
"downloads.format.xml": "",
|
|
143
|
+
"downloads.format.zip": "",
|
|
119
144
|
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
120
145
|
"dropFile": "Datei ablegen",
|
|
121
|
-
"editor.new.record.title": "Mein Datensatz",
|
|
146
|
+
"editor.new.record.title": "Mein {recordKind, select, dataset{Datensatz} service{Dienst} reuse{Wiederverwendung} other{Datensatz}}",
|
|
122
147
|
"editor.record.delete.confirmation.cancelText": "Stornieren",
|
|
123
148
|
"editor.record.delete.confirmation.confirmText": "Löschen",
|
|
124
|
-
"editor.record.delete.confirmation.message": "Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?",
|
|
125
|
-
"editor.record.delete.confirmation.title": "Datensatz löschen",
|
|
126
|
-
"editor.record.deleteError.body": "Der Datensatz konnte nicht gelöscht werden:",
|
|
149
|
+
"editor.record.delete.confirmation.message": "Sind Sie sicher, dass Sie {recordKind, select, dataset{diesen Datensatz} service{diesen Dienst} reuse{diese Wiederverwendung} other{diesen Datensatz}} löschen möchten?",
|
|
150
|
+
"editor.record.delete.confirmation.title": "{recordKind, select, dataset{Datensatz} service{Dienst} reuse{Wiederverwendung} other{Datensatz}} löschen?",
|
|
151
|
+
"editor.record.deleteError.body": "{recordKind, select, dataset{Der Datensatz} service{Der Dienst} reuse{Die Wiederverwendung} other{Der Datensatz}} konnte nicht gelöscht werden:",
|
|
127
152
|
"editor.record.deleteError.closeMessage": "Verstanden",
|
|
128
|
-
"editor.record.deleteError.title": "Fehler beim Löschen des Datensatzes",
|
|
129
|
-
"editor.record.deleteSuccess.body": "Der Datensatz wurde erfolgreich gelöscht.",
|
|
153
|
+
"editor.record.deleteError.title": "Fehler beim Löschen {recordKind, select, dataset{des Datensatzes} service{des Dienstes} reuse{der Wiederverwendung} other{des Datensatzes}}",
|
|
154
|
+
"editor.record.deleteSuccess.body": "{recordKind, select, dataset{Der Datensatz} service{Der Dienst} reuse{Die Wiederverwendung} other{Der Datensatz}} wurde erfolgreich gelöscht.",
|
|
130
155
|
"editor.record.deleteSuccess.title": "Erfolgreich gelöscht",
|
|
131
156
|
"editor.record.error.back": "Zurück zum Katalog",
|
|
132
157
|
"editor.record.error.explanation": "Möglicherweise haben Sie keinen Zugriff auf diese Datei,<br>oder dieser Link ist ungültig.",
|
|
@@ -147,9 +172,17 @@
|
|
|
147
172
|
"editor.record.form.constraint.not.known": "Die Bedingungen sind unbekannt.",
|
|
148
173
|
"editor.record.form.constraint.otherConstraints": "Sonstige Einschränkungen",
|
|
149
174
|
"editor.record.form.constraint.securityConstraints": "Sicherheitsauflagen",
|
|
150
|
-
"editor.record.form.draft.updateAlert": "Seit der Erstellung dieses Entwurfs wurde dieser Datensatz am { date } von { user } geändert. Durch das Veröffentlichen Ihrer Version können dessen Änderungen gelöscht werden. Um dies zu vermeiden, können Sie Ihre Änderungen rückgängig machen oder Ihre Version in voller Kenntnis der Sachlage veröffentlichen.",
|
|
175
|
+
"editor.record.form.draft.updateAlert": "Seit der Erstellung dieses Entwurfs wurde {recordKind, select, dataset{dieser Datensatz} service{dieser Dienst} reuse{diese Wiederverwendung} other{dieser Datensatz}} am { date } von { user } geändert. Durch das Veröffentlichen Ihrer Version können dessen Änderungen gelöscht werden. Um dies zu vermeiden, können Sie Ihre Änderungen rückgängig machen oder Ihre Version in voller Kenntnis der Sachlage veröffentlichen.",
|
|
151
176
|
"editor.record.form.field.abstract": "Kurzbeschreibung",
|
|
152
177
|
"editor.record.form.field.constraintsShortcuts": "",
|
|
178
|
+
"editor.record.form.field.contactDetails.email": "",
|
|
179
|
+
"editor.record.form.field.contactDetails.email.placeholder": "",
|
|
180
|
+
"editor.record.form.field.contactDetails.firstName": "",
|
|
181
|
+
"editor.record.form.field.contactDetails.firstName.placeholder": "",
|
|
182
|
+
"editor.record.form.field.contactDetails.lastName": "",
|
|
183
|
+
"editor.record.form.field.contactDetails.lastName.placeholder": "",
|
|
184
|
+
"editor.record.form.field.contactDetails.organization": "",
|
|
185
|
+
"editor.record.form.field.contactDetails.organization.placeholder": "",
|
|
153
186
|
"editor.record.form.field.contacts": "Ansprechpartner - Email",
|
|
154
187
|
"editor.record.form.field.contacts.noContact": "Bitte geben Sie mindestens einen Ansprechpartner an.",
|
|
155
188
|
"editor.record.form.field.contacts.placeholder": "Kontakt auswählen",
|
|
@@ -159,6 +192,7 @@
|
|
|
159
192
|
"editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
|
|
160
193
|
"editor.record.form.field.license": "Lizenz",
|
|
161
194
|
"editor.record.form.field.onlineLinkResources": "Beigefügte Ressourcen",
|
|
195
|
+
"editor.record.form.field.onlineLinkageResource.defaultName": "Link",
|
|
162
196
|
"editor.record.form.field.onlineResource.cancel": "Abbrechen",
|
|
163
197
|
"editor.record.form.field.onlineResource.confirm": "Bestätigen",
|
|
164
198
|
"editor.record.form.field.onlineResource.dialogTitle": "Vorschau des Datensatzes bearbeiten",
|
|
@@ -212,49 +246,49 @@
|
|
|
212
246
|
"editor.record.form.multilingual.title": "Übersetzungen",
|
|
213
247
|
"editor.record.form.multilingual.validate": "Bestätigen",
|
|
214
248
|
"editor.record.form.page.accessAndContact": "Informationen zur Nutzung",
|
|
215
|
-
"editor.record.form.page.description": "Beschreibung des Datensatzes",
|
|
249
|
+
"editor.record.form.page.description": "Beschreibung {recordKind, select, dataset{des Datensatzes} service{des Dienstes} reuse{der Wiederverwendung} other{des Datensatzes}}",
|
|
216
250
|
"editor.record.form.page.resources": "Ressourcen",
|
|
217
|
-
"editor.record.form.section.about.description": "Diese Informationen beziehen sich auf den Datensatz.",
|
|
218
|
-
"editor.record.form.section.about.label": "Über den Datensatz",
|
|
219
|
-
"editor.record.form.section.annexes.description": "Anhänge sind optionale Ressourcen. Sie sind dem Datensatz beigefügt und helfen, die Daten besser zu verstehen (Anleitung usw.).",
|
|
251
|
+
"editor.record.form.section.about.description": "Diese Informationen beziehen sich auf {recordKind, select, dataset{den Datensatz} service{den Dienst} reuse{die Wiederverwendung} other{den Datensatz}}.",
|
|
252
|
+
"editor.record.form.section.about.label": "Über {recordKind, select, dataset{den Datensatz} service{den Dienst} reuse{die Wiederverwendung} other{den Datensatz}}",
|
|
253
|
+
"editor.record.form.section.annexes.description": "Anhänge sind optionale Ressourcen. Sie sind {recordKind, select, dataset{dem Datensatz} service{dem Dienst} reuse{der Wiederverwendung} other{dem Datensatz}} beigefügt und helfen, die Daten besser zu verstehen (Anleitung usw.).",
|
|
220
254
|
"editor.record.form.section.annexes.label": "Anhänge",
|
|
221
255
|
"editor.record.form.section.associatedResources.description": "Angeben, wo sich die Ressource befindet.",
|
|
222
256
|
"editor.record.form.section.associatedResources.label": "Verwandte Ressourcen",
|
|
223
|
-
"editor.record.form.section.classification.description": "Geeignete Stichwörter helfen beim Auffinden des Datensatzes.",
|
|
257
|
+
"editor.record.form.section.classification.description": "Geeignete Stichwörter helfen beim Auffinden {recordKind, select, dataset{des Datensatzes} service{des Dienstes} reuse{der Wiederverwendung} other{des Datensatzes}}.",
|
|
224
258
|
"editor.record.form.section.classification.label": "Stichwörter",
|
|
225
259
|
"editor.record.form.section.dataManagers.description": "Diese Information betrifft die Daten.",
|
|
226
260
|
"editor.record.form.section.dataManagers.label": "Verantwortliche für die Daten",
|
|
227
261
|
"editor.record.form.section.geographicalCoverage.label": "Geografische Ausdehnung",
|
|
228
262
|
"editor.record.form.section.metadataPointOfContact.description": "Diese Information betrifft die Metadaten.",
|
|
229
263
|
"editor.record.form.section.metadataPointOfContact.label": "Kontaktstelle für Metadaten",
|
|
230
|
-
"editor.record.form.section.topics.description": "Themen erleichtern die Zusammenfassung von Datensätzen.",
|
|
264
|
+
"editor.record.form.section.topics.description": "Themen erleichtern die Zusammenfassung von {recordKind, select, dataset{Datensätzen} service{Diensten} reuse{Wiederverwendungen} other{Datensätzen}}.",
|
|
231
265
|
"editor.record.form.section.topics.label": "Themen",
|
|
232
266
|
"editor.record.form.section.useAndAccessConditions.label": "Zugangs- und Nutzungsbedingungen",
|
|
233
267
|
"editor.record.form.temporalExtents.addDate": "Zeitpunkt",
|
|
234
268
|
"editor.record.form.temporalExtents.addRange": "Zeitraum",
|
|
235
269
|
"editor.record.form.temporalExtents.date": "Datum",
|
|
236
270
|
"editor.record.form.temporalExtents.range": "Datumsbereich",
|
|
237
|
-
"editor.record.form.topics.
|
|
238
|
-
"editor.record.form.topics.
|
|
239
|
-
"editor.record.form.topics.
|
|
240
|
-
"editor.record.form.topics.
|
|
241
|
-
"editor.record.form.topics.
|
|
242
|
-
"editor.record.form.topics.
|
|
243
|
-
"editor.record.form.topics.
|
|
244
|
-
"editor.record.form.topics.
|
|
245
|
-
"editor.record.form.topics.
|
|
246
|
-
"editor.record.form.topics.
|
|
247
|
-
"editor.record.form.topics.
|
|
248
|
-
"editor.record.form.topics.
|
|
249
|
-
"editor.record.form.topics.
|
|
250
|
-
"editor.record.form.topics.
|
|
251
|
-
"editor.record.form.topics.
|
|
252
|
-
"editor.record.form.topics.
|
|
253
|
-
"editor.record.form.topics.
|
|
254
|
-
"editor.record.form.topics.
|
|
255
|
-
"editor.record.form.topics.
|
|
271
|
+
"editor.record.form.topics.iso.biota": "Biologie",
|
|
272
|
+
"editor.record.form.topics.iso.boundaries": "Grenzen",
|
|
273
|
+
"editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Klimatologie/Meteorologie/Atmosphäre",
|
|
274
|
+
"editor.record.form.topics.iso.economy": "Wirtschaft",
|
|
275
|
+
"editor.record.form.topics.iso.elevation": "Höhenangaben",
|
|
276
|
+
"editor.record.form.topics.iso.environment": "Umwelt",
|
|
277
|
+
"editor.record.form.topics.iso.farming": "Landwirtschaft",
|
|
278
|
+
"editor.record.form.topics.iso.geoscientificInformation": "Geowissenschaften",
|
|
279
|
+
"editor.record.form.topics.iso.health": "Gesundheitswesen",
|
|
280
|
+
"editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Bilddaten/Basiskarten/Landbedeckung",
|
|
281
|
+
"editor.record.form.topics.iso.inlandWaters": "Binnengewässer",
|
|
282
|
+
"editor.record.form.topics.iso.intelligenceMilitary": "Aufklärung/Militär",
|
|
283
|
+
"editor.record.form.topics.iso.location": "Ortsangaben",
|
|
284
|
+
"editor.record.form.topics.iso.oceans": "Meere",
|
|
285
|
+
"editor.record.form.topics.iso.planningCadastre": "Planungsunterlagen/Kataster",
|
|
286
|
+
"editor.record.form.topics.iso.society": "Gesellschaft",
|
|
287
|
+
"editor.record.form.topics.iso.structure": "Bauwerke",
|
|
288
|
+
"editor.record.form.topics.iso.transportation": "Verkehrswesen",
|
|
289
|
+
"editor.record.form.topics.iso.utilitiesCommunication": "Ver- und Entsorgung/Nachrichtenwesen",
|
|
256
290
|
"editor.record.form.topics.placeholder": "Ein oder mehrere Themen auswählen",
|
|
257
|
-
"editor.record.form.updateFrequency.planned": "
|
|
291
|
+
"editor.record.form.updateFrequency.planned": "{recordKind, select, dataset{Dieser Datensatz} service{Dieser Dienst} reuse{Diese Wiederverwendung} other{Dieser Datensatz}} wird regelmäßig aktualisiert.",
|
|
258
292
|
"editor.record.importFromExternalFile.failure.body": "Beim Importieren des Datensatzes ist ein Fehler aufgetreten:",
|
|
259
293
|
"editor.record.importFromExternalFile.failure.title": "Fehler",
|
|
260
294
|
"editor.record.importFromExternalFile.success.body": "Der Import des Datensatzes wurde erfolgreich durchgeführt.",
|
|
@@ -262,9 +296,8 @@
|
|
|
262
296
|
"editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
|
|
263
297
|
"editor.record.loadError.closeMessage": "Verstanden",
|
|
264
298
|
"editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
|
|
265
|
-
"editor.record.lock.harvested": "Die gesammelten Datensätze sind nicht bearbeitbar.",
|
|
299
|
+
"editor.record.lock.harvested": "Die gesammelten {recordKind, select, dataset{Datensätze} service{Dienste} reuse{Wiederverwendungen} other{Datensätze}} sind nicht bearbeitbar.",
|
|
266
300
|
"editor.record.lock.owner": "Sie sind kein Herausgeber einer der zugelassenen Gruppen.",
|
|
267
|
-
"editor.record.lock.resourceType": "Datenblätter, die nicht vom Typ „Datensatz“ sind, können nicht bearbeitet werden.",
|
|
268
301
|
"editor.record.multilingual.confirmation.cancelText": "Die Sprache(n) beibehalten",
|
|
269
302
|
"editor.record.multilingual.confirmation.confirmText": "Sprache(n) löschen",
|
|
270
303
|
"editor.record.multilingual.confirmation.message": "Sie werden eine oder mehrere Sprachen löschen, wodurch alle damit verbundenen Übersetzungen gelöscht werden. Möchten Sie fortfahren?",
|
|
@@ -274,31 +307,31 @@
|
|
|
274
307
|
"editor.record.onlineResourceError.closeMessage": "Verstanden",
|
|
275
308
|
"editor.record.onlineResourceError.title": "Fehler beim Hinzufügen einer Ressource",
|
|
276
309
|
"editor.record.placeKeywordWithoutLabel": "Standort ohne Namen",
|
|
277
|
-
"editor.record.publish": "Diesen Datensatz veröffentlichen",
|
|
310
|
+
"editor.record.publish": "{recordKind, select, dataset{Diesen Datensatz} service{Diesen Dienst} reuse{Diese Wiederverwendung} other{Diesen Datensatz}} veröffentlichen",
|
|
278
311
|
"editor.record.publish.confirmation.cancelText": "Abbrechen",
|
|
279
312
|
"editor.record.publish.confirmation.confirmText": "Veröffentlichen",
|
|
280
|
-
"editor.record.publish.confirmation.message": "Seit der Erstellung Ihres Entwurfs wurde dieser Datensatz am { date } von { user } geändert. Durch das Veröffentlichen Ihrer Version könnten dessen Änderungen gelöscht werden. Möchten Sie fortfahren?",
|
|
281
|
-
"editor.record.publishError.body": "Der Datensatz konnte nicht veröffentlicht werden:",
|
|
313
|
+
"editor.record.publish.confirmation.message": "Seit der Erstellung Ihres Entwurfs wurde {recordKind, select, dataset{dieser Datensatz} service{dieser Dienst} reuse{diese Wiederverwendung} other{dieser Datensatz}} am { date } von { user } geändert. Durch das Veröffentlichen Ihrer Version könnten dessen Änderungen gelöscht werden. Möchten Sie fortfahren?",
|
|
314
|
+
"editor.record.publishError.body": "{recordKind, select, dataset{Der Datensatz} service{Der Dienst} reuse{Die Wiederverwendung} other{Der Datensatz}} konnte nicht veröffentlicht werden:",
|
|
282
315
|
"editor.record.publishError.closeMessage": "Verstanden",
|
|
283
|
-
"editor.record.publishError.title": "Fehler beim Veröffentlichen des Datensatzes",
|
|
284
|
-
"editor.record.publishSuccess.body": "Der Datensatz wurde erfolgreich veröffentlicht!",
|
|
316
|
+
"editor.record.publishError.title": "Fehler beim Veröffentlichen {recordKind, select, dataset{des Datensatzes} service{des Dienstes} reuse{der Wiederverwendung} other{des Datensatzes}}",
|
|
317
|
+
"editor.record.publishSuccess.body": "{recordKind, select, dataset{Der Datensatz} service{Der Dienst} reuse{Die Wiederverwendung} other{Der Datensatz}} wurde erfolgreich veröffentlicht!",
|
|
285
318
|
"editor.record.publishSuccess.title": "Veröffentlichung erfolgreich",
|
|
286
|
-
"editor.record.publishVersionError.body": "Der Datensatz kann nicht veröffentlicht werden, da eine inkompatible Version von GeoNetwork erkannt wurde. Bitte wenden Sie sich an einen Administrator der Plattform, um das Problem zu beheben
|
|
319
|
+
"editor.record.publishVersionError.body": "{recordKind, select, dataset{Der Datensatz} service{Der Dienst} reuse{Die Wiederverwendung} other{Der Datensatz}} kann nicht veröffentlicht werden, da eine inkompatible Version von GeoNetwork erkannt wurde. Bitte wenden Sie sich an einen Administrator der Plattform, um das Problem zu beheben.\nAktuelle Version: {currentVersion}\nMindestkompatible Version: 4.2.5",
|
|
287
320
|
"editor.record.publishVersionError.closeMessage": "Verstanden",
|
|
288
321
|
"editor.record.publishVersionError.title": "Ein kritischer Fehler ist aufgetreten",
|
|
289
|
-
"editor.record.resourceError.body": "Bei der Verwaltung der Anhänge ist ein Fehler aufgetreten:",
|
|
322
|
+
"editor.record.resourceError.body": "Bei der Verwaltung der Anhänge {recordKind, select, dataset{des Datensatzes} service{des Dienstes} reuse{der Wiederverwendung} other{des Datensatzes}} ist ein Fehler aufgetreten:",
|
|
290
323
|
"editor.record.resourceError.closeMessage": "Verstanden",
|
|
291
|
-
"editor.record.resourceError.title": "Fehler bei den Anhängen",
|
|
324
|
+
"editor.record.resourceError.title": "Fehler bei den Anhängen {recordKind, select, dataset{des Datensatzes} service{des Dienstes} reuse{der Wiederverwendung} other{des Datensatzes}}",
|
|
292
325
|
"editor.record.saveStatus.draftWithChangesPending": "Gespeichert - nicht publizierte Unterschiede",
|
|
293
326
|
"editor.record.saveStatus.recordNotPublished": "Gespeichert – nicht veröffentlicht",
|
|
294
327
|
"editor.record.saveStatus.recordUpToDate": "Gespeichert - auf dem neuesten Stand",
|
|
295
328
|
"editor.record.undo.confirmation.cancelText": "Änderungen speichern",
|
|
296
329
|
"editor.record.undo.confirmation.confirmText": "Änderungen zurücknehmen",
|
|
297
|
-
"editor.record.undo.confirmation.message": "Möchten Sie die Änderungen an diesem Datensatz wirklich rückgängig machen?",
|
|
330
|
+
"editor.record.undo.confirmation.message": "Möchten Sie die Änderungen an {recordKind, select, dataset{diesem Datensatz} service{diesem Dienst} reuse{dieser Wiederverwendung} other{diesem Datensatz}} wirklich rückgängig machen?",
|
|
298
331
|
"editor.record.undo.confirmation.title": "Änderungen rückgängig machen?",
|
|
299
|
-
"editor.record.undo.tooltip.disabled": "Es gibt keine laufenden Änderungen an diesem Datensatz.",
|
|
300
|
-
"editor.record.undo.tooltip.enabled": "Bitte klicken auf diese Schaltfläche, um die Änderungen an diesem Datensatz zu verwerfen.",
|
|
301
|
-
"editor.record.upToDate": "Dieser Datensatz ist auf dem neuesten Stand",
|
|
332
|
+
"editor.record.undo.tooltip.disabled": "Es gibt keine laufenden Änderungen an {recordKind, select, dataset{diesem Datensatz} service{diesem Dienst} reuse{dieser Wiederverwendung} other{diesem Datensatz}}.",
|
|
333
|
+
"editor.record.undo.tooltip.enabled": "Bitte klicken auf diese Schaltfläche, um die Änderungen an {recordKind, select, dataset{diesem Datensatz} service{diesem Dienst} reuse{dieser Wiederverwendung} other{diesem Datensatz}} zu verwerfen.",
|
|
334
|
+
"editor.record.upToDate": "{recordKind, select, dataset{Dieser Datensatz} service{Dieser Dienst} reuse{Diese Wiederverwendung} other{Dieser Datensatz}} ist auf dem neuesten Stand",
|
|
302
335
|
"editor.sidebar.logout": "Abmelden",
|
|
303
336
|
"editor.sidebar.menu.editor": "Herausgeber",
|
|
304
337
|
"editor.temporary.disabled": "Noch nicht implementiert",
|
|
@@ -494,7 +527,6 @@
|
|
|
494
527
|
"record.metadata.preview.config.idle": "Standardvorschau festlegen",
|
|
495
528
|
"record.metadata.preview.config.saved": "Gespeichert!",
|
|
496
529
|
"record.metadata.preview.config.saving": "Speichern...",
|
|
497
|
-
"record.metadata.producer": "Datenproduzent",
|
|
498
530
|
"record.metadata.publication": "Veröffentlichungsdatum",
|
|
499
531
|
"record.metadata.publications": "{count, plural, =0{Veröffentlichungsdatum} one{Veröffentlichungsdatum} other{Veröffentlichungen}}",
|
|
500
532
|
"record.metadata.quality": "Metadatenqualität",
|
|
@@ -520,6 +552,7 @@
|
|
|
520
552
|
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
521
553
|
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
522
554
|
"record.metadata.related": "Entdecken Sie den Katalog",
|
|
555
|
+
"record.metadata.resource.contacts": "Kontakte zur Ressource",
|
|
523
556
|
"record.metadata.resourceCreated": "Erstellt",
|
|
524
557
|
"record.metadata.resourcePublished": "Veröffentlicht",
|
|
525
558
|
"record.metadata.resourceUpdated": "Zuletzt aktualisiert",
|