diff --git a/config/sidebar.php b/config/sidebar.php
index c160ef7..d043b3b 100644
--- a/config/sidebar.php
+++ b/config/sidebar.php
@@ -77,7 +77,7 @@ return [
'permission' => 'core.users.view',
],
[
- 'label' => 'sidebar.core.sites',
+ 'label' => 'sidebar.sites.admin',
'to' => '/admin/sites',
'icon' => 'mdi:domain',
'module' => 'sites',
diff --git a/frontend/i18n/locales/fr.json b/frontend/i18n/locales/fr.json
index 5e308e9..eb0f5a4 100644
--- a/frontend/i18n/locales/fr.json
+++ b/frontend/i18n/locales/fr.json
@@ -28,8 +28,10 @@
"core": {
"roles": "Gestion des rôles",
"users": "Utilisateurs",
- "sites": "Sites",
"audit_log": "Journal d'audit"
+ },
+ "sites": {
+ "admin": "Sites"
}
},
"dashboard": {
@@ -76,7 +78,10 @@
"delete": "Suppression"
},
"entity": {
- "user": "Utilisateur"
+ "core_user": "Utilisateur",
+ "core_role": "Rôle",
+ "core_permission": "Permission",
+ "sites_site": "Site"
},
"empty": "Aucune activité enregistrée",
"no_results": "Aucun résultat pour ces filtres",
diff --git a/frontend/modules/core/pages/admin/audit-log.vue b/frontend/modules/core/pages/admin/audit-log.vue
index 0a88032..57770ec 100644
--- a/frontend/modules/core/pages/admin/audit-log.vue
+++ b/frontend/modules/core/pages/admin/audit-log.vue
@@ -115,7 +115,10 @@
- {{ item.entityType }}
+ {{ formatEntityType(item.entityType as string) }}
{{ item.entityId }}
@@ -134,8 +137,11 @@
-
- {{ selectedEntry.entityType }} #{{ selectedEntry.entityId }}
+
+ {{ formatEntityType(selectedEntry.entityType) }} #{{ selectedEntry.entityId }}
_`. Si aucune
+// traduction n'existe, on retombe sur l'identifiant brut pour rester debug-friendly.
+function formatEntityType(type: string): string {
+ const key = `audit.entity.${type.toLowerCase().replace(/\./g, '_')}`
+ return te(key) ? t(key) : type
+}
+
// Protection cote UI : le middleware `modules.global.ts` filtre deja les
// routes desactivees, mais si quelqu'un atterit ici sans la permission on
// renvoie une 403 plutot que de flasher un ecran vide.
@@ -180,8 +194,10 @@ const filters = reactive({
// Attention : les composants Malio attendent `{ label, value }` (pas `{ text }`).
const selectedEntityTypes = ref<(string | number)[]>([])
const entityTypes = ref([])
+// On garde l'identifiant technique comme `value` pour l'envoi API, mais on
+// affiche le libelle traduit quand il existe (fallback: identifiant brut).
const entityTypeOptions = computed(() =>
- entityTypes.value.map(t => ({ value: t, label: t })),
+ entityTypes.value.map(type => ({ value: type, label: formatEntityType(type) })),
)
// Bind champ performedBy : MalioInputText attend `string | null`, on ne peut
@@ -230,7 +246,7 @@ const rows = computed(() =>
const drawerTitle = computed(() =>
selectedEntry.value
- ? `${selectedEntry.value.entityType} #${selectedEntry.value.entityId}`
+ ? `${formatEntityType(selectedEntry.value.entityType)} #${selectedEntry.value.entityId}`
: t('audit.detail_title'),
)