geonetwork-ui 2.6.0-dev.9d3ad45e2 → 2.6.0-dev.a0bd52a21

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.
Files changed (183) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +39 -4
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -3
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
  7. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +2 -1
  8. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +3 -3
  9. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +75 -15
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -1
  11. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  12. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  13. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  14. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +266 -11
  15. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  16. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
  17. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -1
  18. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +3 -1
  19. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
  20. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
  21. package/esm2022/libs/feature/search/src/lib/constants.mjs +3 -2
  22. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +5 -3
  23. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  24. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +19 -34
  25. package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +59 -0
  26. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +35 -10
  27. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +5 -1
  28. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +50 -29
  29. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -3
  30. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  31. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  32. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  33. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +20 -10
  34. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +15 -49
  35. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +2 -2
  36. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  37. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +21 -12
  38. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +39 -18
  39. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +10 -4
  40. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
  41. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
  42. package/esm2022/translations/de.json +41 -6
  43. package/esm2022/translations/en.json +41 -6
  44. package/esm2022/translations/es.json +40 -5
  45. package/esm2022/translations/fr.json +41 -6
  46. package/esm2022/translations/it.json +40 -5
  47. package/esm2022/translations/nl.json +40 -5
  48. package/esm2022/translations/pt.json +40 -5
  49. package/fesm2022/geonetwork-ui.mjs +1591 -719
  50. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  51. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  52. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +0 -1
  53. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  54. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
  55. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  57. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  58. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  59. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  60. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
  61. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  62. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +13 -2
  63. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  64. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  65. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  66. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  67. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  68. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +20 -17
  69. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  70. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +6 -0
  71. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  72. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +48 -3
  73. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
  74. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +10 -0
  75. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  76. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +6 -0
  77. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  78. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +2 -0
  79. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  80. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +2 -0
  81. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  82. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  83. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  84. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  85. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  86. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  87. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  88. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  89. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +3 -6
  90. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  91. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
  92. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
  93. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +3 -0
  94. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  95. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  96. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +20 -9
  97. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -1
  98. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  99. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  100. package/libs/ui/layout/src/index.d.ts +1 -0
  101. package/libs/ui/layout/src/index.d.ts.map +1 -1
  102. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  103. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  104. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
  105. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  106. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +5 -10
  107. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
  108. package/libs/ui/search/src/index.d.ts +1 -0
  109. package/libs/ui/search/src/index.d.ts.map +1 -1
  110. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -3
  111. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  112. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +10 -4
  113. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  114. package/libs/ui/search/src/lib/ui-search.module.d.ts +2 -1
  115. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  116. package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
  117. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  118. package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
  119. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  120. package/package.json +1 -1
  121. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  122. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +61 -4
  123. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
  124. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
  125. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
  126. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -3
  127. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -1
  128. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +1 -0
  129. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +2 -2
  130. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +111 -15
  131. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +11 -0
  132. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  133. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -14
  134. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +6 -0
  135. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +63 -0
  136. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +117 -11
  137. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +316 -6
  138. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +10 -0
  139. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +22 -0
  140. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +4 -0
  141. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +12 -0
  142. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
  143. package/src/libs/feature/search/src/lib/constants.ts +2 -1
  144. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -1
  145. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
  146. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  147. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  148. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +7 -75
  149. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +20 -51
  150. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
  151. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
  152. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +48 -9
  153. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +4 -0
  154. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +96 -37
  155. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +60 -29
  156. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -0
  157. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  158. package/src/libs/ui/layout/src/index.ts +1 -0
  159. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  160. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  161. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +3 -2
  162. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +13 -6
  163. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +25 -42
  164. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +10 -49
  165. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +1 -1
  166. package/src/libs/ui/search/src/index.ts +1 -0
  167. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +16 -6
  168. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +15 -11
  169. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
  170. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +31 -27
  171. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +33 -15
  172. package/src/libs/ui/search/src/lib/ui-search.module.ts +3 -0
  173. package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
  174. package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
  175. package/tailwind.base.css +1 -1
  176. package/translations/de.json +41 -6
  177. package/translations/en.json +41 -6
  178. package/translations/es.json +40 -5
  179. package/translations/fr.json +41 -6
  180. package/translations/it.json +40 -5
  181. package/translations/nl.json +40 -5
  182. package/translations/pt.json +40 -5
  183. package/translations/sk.json +40 -5
@@ -30,13 +30,15 @@ type ActionMenuPage = 'mainMenu' | 'deleteMenu' | 'rollbackMenu'
30
30
  ],
31
31
  })
32
32
  export class ActionMenuComponent {
33
- @Input() canDuplicate: boolean
34
- @Input() canDelete: boolean
35
- @Input() isDraftPage: boolean
33
+ @Input() canDuplicate = true
34
+ @Input() isDuplicating: boolean
35
+ @Input() canDelete = true
36
+ @Input() page: 'draft' | 'main' | 'record'
36
37
  @Output() duplicate = new EventEmitter<void>()
37
38
  @Output() delete = new EventEmitter<void>()
38
39
  @Output() closeActionMenu = new EventEmitter<void>()
39
40
  @Output() rollback = new EventEmitter<void>()
41
+ @Output() switch = new EventEmitter<void>()
40
42
 
41
43
  @ViewChild(MatMenuTrigger) trigger: MatMenuTrigger
42
44
 
@@ -47,20 +49,22 @@ export class ActionMenuComponent {
47
49
  private cdr: ChangeDetectorRef
48
50
  ) {}
49
51
 
50
- openMenu() {
51
- this.trigger.openMenu()
52
- }
53
-
54
52
  displayMainMenu() {
55
53
  this.sectionDisplayed = 'mainMenu'
56
54
  this.cdr.markForCheck()
57
55
  }
58
56
 
59
57
  displayDeleteMenu() {
60
- if (this.isDraftPage) {
61
- this.sectionDisplayed = 'rollbackMenu'
62
- } else {
63
- this.sectionDisplayed = 'deleteMenu'
58
+ switch (this.page) {
59
+ case 'draft':
60
+ this.sectionDisplayed = 'rollbackMenu'
61
+ break
62
+ case 'record':
63
+ this.delete.emit()
64
+ break
65
+ case 'main':
66
+ default:
67
+ this.sectionDisplayed = 'deleteMenu'
64
68
  }
65
69
  this.cdr.markForCheck()
66
70
  }
@@ -0,0 +1,4 @@
1
+ :host {
2
+ --gn-ui-button-height: 40px;
3
+ --gn-ui-button-width: 40px;
4
+ }
@@ -1,5 +1,6 @@
1
1
  <gn-ui-interactive-table
2
2
  [items]="records"
3
+ [canEditItem]="canEdit"
3
4
  [isDraftPage]="isDraftPage"
4
5
  (itemClick)="handleRecordClick($event)"
5
6
  >
@@ -9,15 +10,16 @@
9
10
  <ng-icon
10
11
  name="iconoirLock"
11
12
  class="text-purple"
12
- *ngIf="(!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'"
13
+ *ngIf="(canEdit(item) | async) === false; else selectCheckbox"
13
14
  ></ng-icon>
14
- <gn-ui-checkbox
15
- *ngIf="(item.extras?.edit || isDraftPage) && item.kind === 'dataset'"
16
- [checked]="isChecked(item)"
17
- (changed)="handleRecordSelectedChange($event, item)"
18
- class="-m-2"
19
- type="default"
20
- ></gn-ui-checkbox>
15
+ <ng-template #selectCheckbox>
16
+ <gn-ui-checkbox
17
+ [checked]="isChecked(item)"
18
+ (changed)="handleRecordSelectedChange($event, item)"
19
+ class="-m-2"
20
+ type="default"
21
+ ></gn-ui-checkbox>
22
+ </ng-template>
21
23
  </ng-template>
22
24
  </gn-ui-interactive-table-column>
23
25
 
@@ -143,29 +145,31 @@
143
145
  <gn-ui-interactive-table-column>
144
146
  <ng-template #header> </ng-template>
145
147
  <ng-template #cell let-item>
146
- <gn-ui-button
147
- cdkOverlayOrigin
148
- #actionMenuButton
149
- (buttonClick)="openActionMenu(item, template)"
150
- type="light"
151
- data-test="record-menu-button"
152
- [disabled]="
153
- (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'
154
- "
155
- >
148
+ <div class="flex justify-end items-center gap-4 w-full">
149
+ <!-- IS MULTILINGUAL -->
156
150
  <ng-icon
157
- [ngClass]="{
158
- 'text-purple-light':
159
- (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset',
160
- }"
161
- name="matMoreVert"
151
+ *ngIf="isMultilingual(item)"
152
+ data-cy="multilingual-indicator"
153
+ name="iconoirTranslate"
154
+ [attr.title]="getTxtHoverMultilingual(item)"
162
155
  ></ng-icon>
163
- </gn-ui-button>
156
+ <!-- MORE ACTIONS MENU BUTTON -->
157
+ <gn-ui-button
158
+ cdkOverlayOrigin
159
+ #actionMenuButton
160
+ (buttonClick)="openActionMenu(item, template)"
161
+ type="light"
162
+ data-test="record-menu-button"
163
+ >
164
+ <ng-icon name="matMoreVert"></ng-icon>
165
+ </gn-ui-button>
166
+ </div>
164
167
  <ng-template #template>
165
168
  <gn-ui-action-menu
166
- [canDuplicate]="canDuplicate(item) && !isDuplicating"
167
- [canDelete]="canDelete(item)"
168
- [isDraftPage]="isDraftPage"
169
+ [canDuplicate]="canDuplicate(item)"
170
+ [isDuplicating]="isDuplicating"
171
+ [canDelete]="canDelete(item) | async"
172
+ [page]="isDraftPage ? 'draft' : 'main'"
169
173
  (duplicate)="handleDuplicate(item)"
170
174
  (delete)="handleDelete(item)"
171
175
  (closeActionMenu)="closeActionMenu()"
@@ -28,18 +28,14 @@ import {
28
28
  getFileFormat,
29
29
  getFormatPriority,
30
30
  } from '../../../../../../libs/util/shared/src'
31
- import { TranslateModule } from '@ngx-translate/core'
31
+ import { TranslateModule, TranslateService } from '@ngx-translate/core'
32
32
  import { ActionMenuComponent } from './action-menu/action-menu.component'
33
33
  import { NgIconComponent, provideIcons } from '@ng-icons/core'
34
- import { iconoirUser, iconoirLock } from '@ng-icons/iconoir'
35
- import {
36
- CdkConnectedOverlay,
37
- CdkOverlayOrigin,
38
- Overlay,
39
- OverlayRef,
40
- } from '@angular/cdk/overlay'
34
+ import { iconoirUser, iconoirLock, iconoirTranslate } from '@ng-icons/iconoir'
35
+ import { CdkOverlayOrigin, Overlay, OverlayRef } from '@angular/cdk/overlay'
41
36
  import { TemplatePortal } from '@angular/cdk/portal'
42
37
  import { matMoreVert } from '@ng-icons/material-icons/baseline'
38
+ import { Observable, of, take } from 'rxjs'
43
39
 
44
40
  @Component({
45
41
  selector: 'gn-ui-results-table',
@@ -57,7 +53,9 @@ import { matMoreVert } from '@ng-icons/material-icons/baseline'
57
53
  NgIconComponent,
58
54
  CdkOverlayOrigin,
59
55
  ],
60
- providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })],
56
+ providers: [
57
+ provideIcons({ iconoirUser, iconoirLock, iconoirTranslate, matMoreVert }),
58
+ ],
61
59
  })
62
60
  export class ResultsTableComponent {
63
61
  @Input() records: CatalogRecord[] = []
@@ -65,7 +63,10 @@ export class ResultsTableComponent {
65
63
  @Input() sortOrder: SortByField = null
66
64
  @Input() hasDraft: (record: CatalogRecord) => boolean = () => false
67
65
  @Input() canDuplicate: (record: CatalogRecord) => boolean = () => true
68
- @Input() canDelete: (record: CatalogRecord) => boolean = () => true
66
+ @Input() canDelete: (record: CatalogRecord) => Observable<boolean> = () =>
67
+ of(true)
68
+ @Input() canEdit: (record: CatalogRecord) => Observable<boolean> = () =>
69
+ of(true)
69
70
  @Input() isDraftPage = false
70
71
  @Input() isDuplicating = false
71
72
 
@@ -89,7 +90,8 @@ export class ResultsTableComponent {
89
90
  private overlay: Overlay,
90
91
  private viewContainerRef: ViewContainerRef,
91
92
  private cdr: ChangeDetectorRef,
92
- private dateService: DateService
93
+ private dateService: DateService,
94
+ private translateService: TranslateService
93
95
  ) {}
94
96
 
95
97
  openActionMenu(item, template) {
@@ -173,10 +175,14 @@ export class ResultsTableComponent {
173
175
  return getBadgeColor(format)
174
176
  }
175
177
 
176
- handleRecordClick(item: CatalogRecord) {
177
- if ((item?.extras?.edit || this.isDraftPage) && item.kind === 'dataset') {
178
- this.recordClick.emit(item as CatalogRecord)
179
- }
178
+ handleRecordClick(item: unknown) {
179
+ this.canEdit(item as CatalogRecord)
180
+ .pipe(take(1))
181
+ .subscribe((canEdit) => {
182
+ if (canEdit) {
183
+ this.recordClick.emit(item as CatalogRecord)
184
+ }
185
+ })
180
186
  }
181
187
 
182
188
  handleDuplicate(item: unknown) {
@@ -219,4 +225,16 @@ export class ResultsTableComponent {
219
225
  handleRecordSelectedChange(selected: boolean, record: CatalogRecord) {
220
226
  this.recordsSelectedChange.emit([[record], selected])
221
227
  }
228
+
229
+ isMultilingual(record: CatalogRecord): boolean {
230
+ return record.otherLanguages.length > 0
231
+ }
232
+
233
+ getTxtHoverMultilingual(record: CatalogRecord) {
234
+ return this.translateService.instant('dashboard.records.isMultilingual', {
235
+ languages: [...[record.defaultLanguage], ...record.otherLanguages].join(
236
+ ', '
237
+ ),
238
+ })
239
+ }
222
240
  }
@@ -39,6 +39,7 @@ import {
39
39
  matMapOutline,
40
40
  } from '@ng-icons/material-icons/outline'
41
41
  import { matFace } from '@ng-icons/material-icons/baseline'
42
+ import { ActionMenuComponent } from './results-table/action-menu/action-menu.component'
42
43
 
43
44
  @NgModule({
44
45
  declarations: [
@@ -79,6 +80,7 @@ import { matFace } from '@ng-icons/material-icons/baseline'
79
80
  }),
80
81
  KindBadgeComponent,
81
82
  MetadataQualityComponent,
83
+ ActionMenuComponent,
82
84
  ],
83
85
  exports: [
84
86
  RecordPreviewListComponent,
@@ -93,6 +95,7 @@ import { matFace } from '@ng-icons/material-icons/baseline'
93
95
  ResultsHitsSearchKindComponent,
94
96
  RecordPreviewFeedComponent,
95
97
  RecordPreviewRowComponent,
98
+ ActionMenuComponent,
96
99
  ],
97
100
  providers: [
98
101
  provideNgIconsConfig({
@@ -19,12 +19,54 @@ marker('language.pt')
19
19
  marker('language.ru')
20
20
  marker('language.zh')
21
21
  marker('language.sk')
22
+ marker('language.rm')
23
+ marker('language.ar')
24
+ marker('language.da')
25
+ marker('language.no')
26
+ marker('language.pl')
27
+ marker('language.sv')
28
+ marker('language.tr')
29
+ marker('language.hy')
30
+ marker('language.az')
31
+ marker('language.ka')
32
+ marker('language.uk')
33
+ marker('language.cy')
22
34
 
23
35
  export const DEFAULT_LANG = 'en'
24
36
 
25
37
  // Caution: changing this can break language selection from third parties!
26
38
  export const LANGUAGE_STORAGE_KEY = 'geonetwork-ui-language'
27
39
 
40
+ export const SUPPORTED_LANGUAGES = [
41
+ 'en',
42
+ 'nl',
43
+ 'fr',
44
+ 'de',
45
+ 'ko',
46
+ 'es',
47
+ 'cs',
48
+ 'ca',
49
+ 'fi',
50
+ 'is',
51
+ 'it',
52
+ 'pt',
53
+ 'ru',
54
+ 'zh',
55
+ 'sk',
56
+ 'rm',
57
+ 'ar',
58
+ 'da',
59
+ 'no',
60
+ 'pl',
61
+ 'sv',
62
+ 'tr',
63
+ 'hy',
64
+ 'az',
65
+ 'ka',
66
+ 'uk',
67
+ 'cy',
68
+ ]
69
+
28
70
  export function HttpLoaderFactory(http: HttpClient) {
29
71
  return new FileTranslateLoader(http, './assets/i18n/')
30
72
  }
@@ -15,6 +15,17 @@ export const LANG_3_TO_2_MAPPER = {
15
15
  chi: 'zh',
16
16
  slo: 'sk',
17
17
  roh: 'rm',
18
+ ara: 'ar',
19
+ dan: 'da',
20
+ nor: 'no',
21
+ pol: 'pl',
22
+ swe: 'sv',
23
+ tur: 'tr',
24
+ arm: 'hy',
25
+ aze: 'az',
26
+ geo: 'ka',
27
+ ukr: 'uk',
28
+ wel: 'cy',
18
29
  }
19
30
 
20
31
  export const LANGUAGE_NAMES = {
@@ -33,7 +44,18 @@ export const LANGUAGE_NAMES = {
33
44
  ru: 'Русский',
34
45
  zh: '中文',
35
46
  sk: 'Slovenčina',
36
- roh: 'Rumantsch',
47
+ rm: 'Rumantsch',
48
+ ar: 'العربية',
49
+ da: 'Dansk',
50
+ no: 'Norsk',
51
+ pl: 'Polski',
52
+ sv: 'Swedish',
53
+ tr: 'Türkçe',
54
+ hy: 'հայերեն',
55
+ az: 'Azərbaycan dili',
56
+ ka: 'ქართული',
57
+ uk: 'українська',
58
+ wel: 'Cymraeg',
37
59
  }
38
60
 
39
61
  export const LANG_2_TO_3_MAPPER = Object.entries(LANG_3_TO_2_MAPPER).reduce(
package/tailwind.base.css CHANGED
@@ -131,7 +131,7 @@
131
131
  .gn-ui-btn-light {
132
132
  @apply gn-ui-btn
133
133
  hover:bg-gray-50 focus:bg-gray-50 active:bg-gray-100
134
- border-white focus:ring-4 focus:ring-gray-300;
134
+ bg-white border-white focus:ring-4 focus:ring-gray-300;
135
135
  }
136
136
 
137
137
  .gn-ui-card-s {
@@ -30,6 +30,7 @@
30
30
  "dashboard.labels.mySpace": "Mein Bereich",
31
31
  "dashboard.records.all": "Metadatenkatalog",
32
32
  "dashboard.records.hasDraft": "",
33
+ "dashboard.records.isMultilingual": "Dieser Eintrag ist mehrsprachig ({languages})",
33
34
  "dashboard.records.myDraft": "Meine Entwürfe",
34
35
  "dashboard.records.myRecords": "Meine Datensätze",
35
36
  "dashboard.records.search": "Suche nach \"{searchText}\"",
@@ -204,9 +205,13 @@
204
205
  "editor.record.form.license.odc-by": "",
205
206
  "editor.record.form.license.pddl": "",
206
207
  "editor.record.form.license.unknown": "",
208
+ "editor.record.form.multilingual.activate": "",
209
+ "editor.record.form.multilingual.default": "",
207
210
  "editor.record.form.multilingual.enable": "",
211
+ "editor.record.form.multilingual.forbidden": "",
208
212
  "editor.record.form.multilingual.open": "",
209
213
  "editor.record.form.multilingual.title": "",
214
+ "editor.record.form.multilingual.validate": "",
210
215
  "editor.record.form.page.accessAndContact": "",
211
216
  "editor.record.form.page.description": "",
212
217
  "editor.record.form.page.resources": "",
@@ -236,8 +241,13 @@
236
241
  "editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
237
242
  "editor.record.loadError.closeMessage": "Verstanden",
238
243
  "editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
239
- "editor.record.lock.format": "",
240
- "editor.record.lock.reason": "",
244
+ "editor.record.lock.harvested": "",
245
+ "editor.record.lock.owner": "",
246
+ "editor.record.lock.resourceType": "",
247
+ "editor.record.multilingual.confirmation.cancelText": "",
248
+ "editor.record.multilingual.confirmation.confirmText": "",
249
+ "editor.record.multilingual.confirmation.message": "",
250
+ "editor.record.multilingual.confirmation.title": "",
241
251
  "editor.record.onlineResource.protocol.other": "",
242
252
  "editor.record.onlineResourceError.body": "",
243
253
  "editor.record.onlineResourceError.closeMessage": "",
@@ -284,6 +294,11 @@
284
294
  "facets.block.title.tag.default": "Stichwort",
285
295
  "facets.block.title.th_regions_tree.default": "Regionen",
286
296
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Anmelden</a>, um auf diese Funktion zuzugreifen</div>",
297
+ "feature.catalog.attribute.code": "Code",
298
+ "feature.catalog.attribute.definition": "Beschreibung",
299
+ "feature.catalog.attribute.name": "Name",
300
+ "feature.catalog.attribute.type": "Typ",
301
+ "feature.catalog.attribute.values": "Werte",
287
302
  "input.file.dropFileLabel": "",
288
303
  "input.file.orInputUrl": "",
289
304
  "input.file.selectFileLabel": "",
@@ -298,20 +313,32 @@
298
313
  "input.image.uploadErrorLabel": "",
299
314
  "input.image.uploadProgressCancel": "",
300
315
  "input.image.uploadProgressLabel": "",
316
+ "language.ar": "",
317
+ "language.az": "",
301
318
  "language.ca": "Katalanisch",
302
319
  "language.cs": "Tschechisch",
320
+ "language.cy": "",
321
+ "language.da": "",
303
322
  "language.de": "Deutsch",
304
323
  "language.en": "Englisch",
305
324
  "language.es": "Spanisch",
306
325
  "language.fi": "Finnisch",
307
326
  "language.fr": "Französisch",
327
+ "language.hy": "",
308
328
  "language.is": "Isländisch",
309
329
  "language.it": "Italienisch",
330
+ "language.ka": "",
310
331
  "language.ko": "Koreanisch",
311
332
  "language.nl": "Niederländisch",
333
+ "language.no": "",
334
+ "language.pl": "",
312
335
  "language.pt": "Portugiesisch",
336
+ "language.rm": "",
313
337
  "language.ru": "Russisch",
314
338
  "language.sk": "Slowakisch",
339
+ "language.sv": "",
340
+ "language.tr": "",
341
+ "language.uk": "",
315
342
  "language.zh": "Chinesisch",
316
343
  "map.add.layer": "Eine Ebene hinzufügen",
317
344
  "map.add.layer.catalog": "Aus dem Katalog",
@@ -358,6 +385,7 @@
358
385
  "record.action.duplicate": "",
359
386
  "record.action.duplicating": "",
360
387
  "record.action.rollback": "",
388
+ "record.action.switchLang": "",
361
389
  "record.action.view": "Anzeigen",
362
390
  "record.card.metadata.contact": "",
363
391
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
@@ -408,9 +436,15 @@
408
436
  "record.metadata.download": "Downloads",
409
437
  "record.metadata.feature.catalog": "",
410
438
  "record.metadata.formats": "Formate",
439
+ "record.metadata.isGeographical": "Geographischer Datensatz",
411
440
  "record.metadata.keywords": "Stichworte",
412
441
  "record.metadata.languages": "Sprachen",
413
442
  "record.metadata.lastUpdate": "Zuletzt aktualisiert am {date}",
443
+ "record.metadata.linked.datasets": "Verknüpfte Datensätze",
444
+ "record.metadata.linked.records": "Verknüpfte Inhalte",
445
+ "record.metadata.linked.reuses": "Verknüpfte Wiederverwendungen",
446
+ "record.metadata.linked.services": "Verknüpfte Dienste",
447
+ "record.metadata.linked.sourceDatasets": "Quelldatensätze",
414
448
  "record.metadata.links": "Links",
415
449
  "record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
416
450
  "record.metadata.otherConstraints": "Zusätzliche Bedingungen",
@@ -420,6 +454,8 @@
420
454
  "record.metadata.publication": "Veröffentlichungsdatum",
421
455
  "record.metadata.publications": "{count, plural, =0{Veröffentlichungsdatum} one{Veröffentlichungsdatum} other{Veröffentlichungen}}",
422
456
  "record.metadata.quality": "Metadatenqualität",
457
+ "record.metadata.quality.capabilities.failed": "",
458
+ "record.metadata.quality.capabilities.success": "",
423
459
  "record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
424
460
  "record.metadata.quality.contact.success": "Kontakt angegeben",
425
461
  "record.metadata.quality.description.failed": "Beschreibung nicht angegeben",
@@ -431,14 +467,15 @@
431
467
  "record.metadata.quality.legalConstraints.success": "Rechtliche Beschränkungen angegeben",
432
468
  "record.metadata.quality.organisation.failed": "Organisation nicht angegeben",
433
469
  "record.metadata.quality.organisation.success": "Organisation angegeben",
470
+ "record.metadata.quality.source.failed": "",
471
+ "record.metadata.quality.source.success": "",
434
472
  "record.metadata.quality.title.failed": "Titel nicht angegeben",
435
473
  "record.metadata.quality.title.success": "Titel angegeben",
436
474
  "record.metadata.quality.topic.failed": "Thema nicht angegeben",
437
475
  "record.metadata.quality.topic.success": "Thema angegeben",
438
476
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
439
477
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
440
- "record.metadata.related": "Ähnliche Datensätze",
441
- "record.metadata.related.contents": "",
478
+ "record.metadata.related": "Entdecken Sie den Katalog",
442
479
  "record.metadata.ressources.and.links": "Ressourcen und Links",
443
480
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
444
481
  "record.metadata.status": "Status",
@@ -450,7 +487,6 @@
450
487
  "record.metadata.temporalExtent.untilDate": "Bis {end}",
451
488
  "record.metadata.title": "Titel",
452
489
  "record.metadata.topics": "Kategorien",
453
- "record.metadata.isGeographical": "Geographischer Datensatz",
454
490
  "record.metadata.uniqueId": "Eindeutige Kennung",
455
491
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
456
492
  "record.metadata.updatedOn": "Geändert am",
@@ -570,7 +606,6 @@
570
606
  "tooltip.html.copy": "HTML kopieren",
571
607
  "tooltip.id.copy": "Eindeutige Kennung kopieren",
572
608
  "tooltip.url.copy": "URL kopieren",
573
- "tooltip.url.open": "URL öffnen",
574
609
  "ui.readLess": "Weniger lesen",
575
610
  "ui.readMore": "Weiterlesen",
576
611
  "wfs.feature.limit": "Zu viele Features, um den WFS-Layer anzuzeigen!",
@@ -30,6 +30,7 @@
30
30
  "dashboard.labels.mySpace": "My space",
31
31
  "dashboard.records.all": "Datasets",
32
32
  "dashboard.records.hasDraft": "draft",
33
+ "dashboard.records.isMultilingual": "This record is multilingual ({languages})",
33
34
  "dashboard.records.myDraft": "My drafts",
34
35
  "dashboard.records.myRecords": "My datasets",
35
36
  "dashboard.records.search": "Search for \"{searchText}\"",
@@ -204,9 +205,13 @@
204
205
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
205
206
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
206
207
  "editor.record.form.license.unknown": "Unknown or absent",
208
+ "editor.record.form.multilingual.activate": "Activate the languages",
209
+ "editor.record.form.multilingual.default": "Default",
207
210
  "editor.record.form.multilingual.enable": "Multilingual Mode",
211
+ "editor.record.form.multilingual.forbidden": "You are not allowed to remove the default language",
208
212
  "editor.record.form.multilingual.open": "Open the multilingual panel",
209
213
  "editor.record.form.multilingual.title": "Translations",
214
+ "editor.record.form.multilingual.validate": "Validate",
210
215
  "editor.record.form.page.accessAndContact": "Information for use",
211
216
  "editor.record.form.page.description": "Dataset description",
212
217
  "editor.record.form.page.resources": "Resources",
@@ -236,8 +241,13 @@
236
241
  "editor.record.loadError.body": "The dataset could not be loaded:",
237
242
  "editor.record.loadError.closeMessage": "Understood",
238
243
  "editor.record.loadError.title": "Error loading dataset",
239
- "editor.record.lock.format": "Record with the format 'service' or 'reuse' are not editable",
240
- "editor.record.lock.reason": "You are not an editor of the allowed groups",
244
+ "editor.record.lock.harvested": "Datasets harvested from an external catalog are not editable",
245
+ "editor.record.lock.owner": "You are not an editor of the allowed groups",
246
+ "editor.record.lock.resourceType": "Records of a type other than dataset are not editable",
247
+ "editor.record.multilingual.confirmation.cancelText": "Keep the language(s)",
248
+ "editor.record.multilingual.confirmation.confirmText": "Remove the language(s)",
249
+ "editor.record.multilingual.confirmation.message": "You are about to remove one or several languages, which will delete all of the related translations and is irreversible. Do you want to proceed?",
250
+ "editor.record.multilingual.confirmation.title": "Remove languages",
241
251
  "editor.record.onlineResource.protocol.other": "Other",
242
252
  "editor.record.onlineResourceError.body": "An error happened while adding the resource:",
243
253
  "editor.record.onlineResourceError.closeMessage": "Understood",
@@ -284,6 +294,11 @@
284
294
  "facets.block.title.tag.default": "Tag",
285
295
  "facets.block.title.th_regions_tree.default": "Regions",
286
296
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> to access this feature</div>",
297
+ "feature.catalog.attribute.code": "Code",
298
+ "feature.catalog.attribute.definition": "Description",
299
+ "feature.catalog.attribute.name": "Name",
300
+ "feature.catalog.attribute.type": "Type",
301
+ "feature.catalog.attribute.values": "Values",
287
302
  "input.file.dropFileLabel": "or drop it here",
288
303
  "input.file.orInputUrl": "or create a link to an external resource",
289
304
  "input.file.selectFileLabel": "Select a file ({sizeMB} MB max.)",
@@ -298,20 +313,32 @@
298
313
  "input.image.uploadErrorLabel": "The image could not be uploaded",
299
314
  "input.image.uploadProgressCancel": "Cancel",
300
315
  "input.image.uploadProgressLabel": "Upload in progress...",
316
+ "language.ar": "Arabic",
317
+ "language.az": "Azerbaijani",
301
318
  "language.ca": "Catalan",
302
319
  "language.cs": "Czech",
320
+ "language.cy": "Welsh",
321
+ "language.da": "Danish",
303
322
  "language.de": "German",
304
323
  "language.en": "English",
305
324
  "language.es": "Spanish",
306
325
  "language.fi": "Finnish",
307
326
  "language.fr": "French",
327
+ "language.hy": "Armenian",
308
328
  "language.is": "Icelandic",
309
329
  "language.it": "Italian",
330
+ "language.ka": "Georgian",
310
331
  "language.ko": "Korean",
311
332
  "language.nl": "Dutch",
333
+ "language.no": "Norwegian",
334
+ "language.pl": "Polish",
312
335
  "language.pt": "Portuguese",
336
+ "language.rm": "Romansh",
313
337
  "language.ru": "Russian",
314
338
  "language.sk": "Slovak",
339
+ "language.sv": "Swedish",
340
+ "language.tr": "Turkish",
341
+ "language.uk": "Ukrainian",
315
342
  "language.zh": "Chinese",
316
343
  "map.add.layer": "Add a layer",
317
344
  "map.add.layer.catalog": "From the catalog",
@@ -358,6 +385,7 @@
358
385
  "record.action.duplicate": "Duplicate",
359
386
  "record.action.duplicating": "Duplicating...",
360
387
  "record.action.rollback": "Rollback",
388
+ "record.action.switchLang": "Switch to default",
361
389
  "record.action.view": "View",
362
390
  "record.card.metadata.contact": "Metadata Contact",
363
391
  "record.externalViewer.open": "Open in the external map viewer",
@@ -408,9 +436,15 @@
408
436
  "record.metadata.download": "Downloads",
409
437
  "record.metadata.feature.catalog": "Feature catalog",
410
438
  "record.metadata.formats": "Formats",
439
+ "record.metadata.isGeographical": "Geographical dataset",
411
440
  "record.metadata.keywords": "Keywords",
412
441
  "record.metadata.languages": "Languages",
413
442
  "record.metadata.lastUpdate": "Last updated on {date}",
443
+ "record.metadata.linked.datasets": "Associated datasets",
444
+ "record.metadata.linked.records": "Associated content",
445
+ "record.metadata.linked.reuses": "Associated reuses",
446
+ "record.metadata.linked.services": "Associated services",
447
+ "record.metadata.linked.sourceDatasets": "Source datasets",
414
448
  "record.metadata.links": "Links",
415
449
  "record.metadata.noUsage": "No usage conditions specified for this dataset.",
416
450
  "record.metadata.otherConstraints": "Additional Conditions",
@@ -420,6 +454,8 @@
420
454
  "record.metadata.publication": "Date of publication",
421
455
  "record.metadata.publications": "{count, plural, =0{publication} one{publication} other{publications}}",
422
456
  "record.metadata.quality": "Metadata Quality",
457
+ "record.metadata.quality.capabilities.failed": "Capabilities URL is not specified",
458
+ "record.metadata.quality.capabilities.success": "Capabilities URL is specified",
423
459
  "record.metadata.quality.contact.failed": "Contact is not specified",
424
460
  "record.metadata.quality.contact.success": "Contact is specified",
425
461
  "record.metadata.quality.description.failed": "Description is not specified",
@@ -431,14 +467,15 @@
431
467
  "record.metadata.quality.legalConstraints.success": "Legal constraints are specified",
432
468
  "record.metadata.quality.organisation.failed": "Organisation is not specified",
433
469
  "record.metadata.quality.organisation.success": "Organisation is specified",
470
+ "record.metadata.quality.source.failed": "No source dataset is specified",
471
+ "record.metadata.quality.source.success": "A source dataset is specified",
434
472
  "record.metadata.quality.title.failed": "Title is not specified",
435
473
  "record.metadata.quality.title.success": "Title is specified",
436
474
  "record.metadata.quality.topic.failed": "Topic is not specified",
437
475
  "record.metadata.quality.topic.success": "Topic is specified",
438
476
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
439
477
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
440
- "record.metadata.related": "Related records",
441
- "record.metadata.related.contents": "Related content",
478
+ "record.metadata.related": "Explore the catalog",
442
479
  "record.metadata.ressources.and.links": "Resources and links",
443
480
  "record.metadata.sheet": "Original metadata",
444
481
  "record.metadata.status": "Status",
@@ -450,7 +487,6 @@
450
487
  "record.metadata.temporalExtent.untilDate": "Until { end }",
451
488
  "record.metadata.title": "Title",
452
489
  "record.metadata.topics": "Categories",
453
- "record.metadata.isGeographical": "Geographical dataset",
454
490
  "record.metadata.uniqueId": "Unique Identifier",
455
491
  "record.metadata.updateFrequency": "Data Update Frequency",
456
492
  "record.metadata.updatedOn": "Updated on",
@@ -570,7 +606,6 @@
570
606
  "tooltip.html.copy": "Copy HTML",
571
607
  "tooltip.id.copy": "Copy unique identifier",
572
608
  "tooltip.url.copy": "Copy URL",
573
- "tooltip.url.open": "Open URL",
574
609
  "ui.readLess": "Read less",
575
610
  "ui.readMore": "Read more",
576
611
  "wfs.feature.limit": "Too many features to display the WFS layer!",