feat: add mobile asset views and templates with localization updates

This commit is contained in:
kdeterme 2026-09-13 09:24:55 +02:00
parent 429eb27e2d
commit 6d2de3a7c8
100 changed files with 38647 additions and 30207 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -344,7 +344,7 @@
</td>
<td>{{ eq.next_control_date|date:"d/m/Y"|default:"-" }}</td>
<td class="text-end pe-3">
<a href="{{ eq.get_absolute_url }}" class="btn btn-sm btn-outline-info py-0 px-2 small text-nowrap" title="{% translate \"Détail de l'asset\" %}">
<a href="{{ eq.get_absolute_url }}" class="btn btn-sm btn-outline-info py-0 px-2 small text-nowrap" title="{% translate 'Détail de l’asset' %}">
<i class="bi bi-eye me-1"></i>{% translate "Détail" %}
</a>
</td>

View file

@ -93,6 +93,47 @@
#asset-detail-container .table td {
border-color: #e2e8f0;
}
/* Styles pour la barre d'édition et mode édition mobile */
#asset-cms-edit-bar.mobile-edit-bar {
position: sticky;
top: 4.5rem;
z-index: 1020;
background-color: #ffffff;
border: 1px solid #b8c5d3;
box-shadow: 0 4px 6px -1px rgba(15, 23, 42, 0.08);
}
#asset-cms-edit-bar .mode-editing-label {
display: none;
}
#asset-cms-edit-bar .mode-viewing-label {
display: inline-flex;
align-items: center;
}
body.asset-cms-edit-mode #asset-cms-edit-bar .mode-editing-label {
display: inline-flex;
align-items: center;
}
body.asset-cms-edit-mode #asset-cms-edit-bar .mode-viewing-label {
display: none;
}
body.asset-cms-edit-mode #asset-edit-mode-badge {
background-color: #fef08a !important;
color: #854d0e !important;
border-color: #fde047 !important;
}
@media (max-width: 767.98px) {
.asset-editable-field .field-edit input,
.asset-editable-field .field-edit select,
.asset-editable-field .field-edit textarea {
min-height: 42px;
font-size: 1rem;
}
#asset-map {
height: 280px !important;
}
}
</style>
{% endblock head %}
@ -138,7 +179,7 @@
{% block content %}
<div id="asset-detail-container"
class="{% if mobile_view %}px-3 pb-3{% else %}container-fluid mt-4{% endif %}"
class="{% if mobile_view %}px-2 px-sm-3 pb-3{% else %}container-fluid mt-4{% endif %}"
data-asset-model="{{ asset_model }}"
data-asset-id="{{ asset.id }}"
data-thematic-code="{{ thematic_code }}"
@ -151,58 +192,97 @@
data-radar-icon-url="{% static 'assets/radar_preventif_icon.svg' %}?v=20260710"
{% endif %}>
<!-- CMS-style Edit Bar (Desktop only) -->
{% if allowed_update_fields and not mobile_view %}
<div id="asset-cms-edit-bar" class="px-3 py-2 mb-3 shadow-sm d-flex align-items-center justify-content-between border-bottom bg-light">
<div class="d-flex align-items-center gap-2">
{% block asset_header_title %}
<div>
<h2 class="mb-0" style="color: var(--brand-color); font-size: 1.25rem;">
{% translate "Asset" %} : {{ asset.code }}
</h2>
<div class="d-flex align-items-center gap-2 mt-1" style="font-size: 0.8rem; color: #6c757d;">
{% if thematic.icon %}
<i class="bi {{ thematic.icon }}"></i>
{% endif %}
{% if thematic.name %}
<span>{{ thematic.name }}</span>
<span>&mdash;</span>
{% endif %}
<span>{{ asset_verbose_name }}</span>
</div>
<!-- CMS-style Edit Bar (Desktop & Mobile) -->
{% if mobile_view %}
{% if allowed_update_fields %}
<div id="asset-cms-edit-bar" class="mobile-edit-bar rounded-3 p-2 mb-3 d-flex align-items-center justify-content-between flex-wrap gap-2">
<div class="d-flex align-items-center gap-2">
<span id="asset-edit-mode-badge" class="badge bg-secondary-subtle text-secondary border">
<span class="mode-viewing-label"><i class="bi bi-eye me-1"></i>{% translate "Consultation" %}</span>
<span class="mode-editing-label"><i class="bi bi-pencil-fill me-1"></i>{% translate "Édition en cours" %}</span>
</span>
<span class="fw-bold small text-truncate" style="max-width: 140px;" title="{{ asset.code }}">
{{ asset.code }}
</span>
</div>
<div class="d-flex align-items-center gap-1 ms-auto">
{% if 'archive' in allowed_actions %}
<button id="asset-archive-btn" class="btn btn-outline-secondary btn-sm asset-normal-action px-2" title="{% translate 'Archiver' %}">
<i class="bi bi-archive"></i>
</button>
{% endif %}
{% if 'replace' in allowed_actions %}
<button id="asset-replace-btn" class="btn btn-outline-secondary btn-sm asset-normal-action px-2" title="{% translate 'Remplacer' %}">
<i class="bi bi-arrow-repeat"></i>
</button>
{% endif %}
<button id="asset-cms-edit-btn" class="btn btn-primary btn-sm px-3 fw-semibold">
<i class="bi bi-pencil me-1"></i>{% translate "Éditer" %}
</button>
<button id="asset-cms-save-btn" class="btn btn-success btn-sm px-3 fw-semibold d-none">
<i class="bi bi-check-circle me-1"></i>{% translate "Sauvegarder" %}
</button>
<button id="asset-cms-cancel-btn" class="btn btn-outline-danger btn-sm px-2 d-none">
<i class="bi bi-x-circle me-1"></i>{% translate "Annuler" %}
</button>
</div>
{% endblock asset_header_title %}
</div>
<div class="d-flex gap-2">
{% if 'archive' in allowed_actions %}
<button id="asset-archive-btn" class="btn btn-light btn-sm" title="{% translate 'Archiver' %}">
<i class="bi bi-archive"></i> {% translate "Archiver" %}
</button>
{% endif %}
{% if 'replace' in allowed_actions %}
<button id="asset-replace-btn" class="btn btn-light btn-sm" title="{% translate 'Remplacer' %}">
<i class="bi bi-arrow-repeat"></i> {% translate "Remplacer" %}
</button>
{% endif %}
<button id="asset-cms-edit-btn" class="btn btn-light btn-sm">
<i class="bi bi-pencil"></i> {% translate "Éditer" %}
</button>
<button id="asset-cms-save-btn" class="btn btn-success btn-sm d-none">
<i class="bi bi-check-circle"></i> {% translate "Sauvegarder" %}
</button>
<button id="asset-cms-cancel-btn" class="btn btn-outline-danger btn-sm d-none">
<i class="bi bi-x-circle"></i> {% translate "Annuler" %}
</button>
</div>
</div>
{% endif %}
{% else %}
<div class="{% if mobile_view %}d-none{% else %}d-block{% endif %} mb-3">
{% if allowed_update_fields %}
<div id="asset-cms-edit-bar" class="px-3 py-2 mb-3 shadow-sm d-flex align-items-center justify-content-between border-bottom bg-light">
<div class="d-flex align-items-center gap-2">
{% block asset_header_title %}
<div>
<h2 class="mb-0" style="color: var(--brand-color); font-size: 1.25rem;">
{% translate "Asset" %} : {{ asset.code }}
</h2>
<div class="d-flex align-items-center gap-2 mt-1" style="font-size: 0.8rem; color: #6c757d;">
{% if thematic.icon %}
<i class="bi {{ thematic.icon }}"></i>
{% endif %}
{% if thematic.name %}
<span>{{ thematic.name }}</span>
<span>&mdash;</span>
{% endif %}
<span>{{ asset_verbose_name }}</span>
</div>
</div>
{% endblock asset_header_title %}
</div>
<div class="d-flex gap-2">
{% if 'archive' in allowed_actions %}
<button id="asset-archive-btn" class="btn btn-light btn-sm asset-normal-action" title="{% translate 'Archiver' %}">
<i class="bi bi-archive"></i> {% translate "Archiver" %}
</button>
{% endif %}
{% if 'replace' in allowed_actions %}
<button id="asset-replace-btn" class="btn btn-light btn-sm asset-normal-action" title="{% translate 'Remplacer' %}">
<i class="bi bi-arrow-repeat"></i> {% translate "Remplacer" %}
</button>
{% endif %}
<button id="asset-cms-edit-btn" class="btn btn-light btn-sm">
<i class="bi bi-pencil"></i> {% translate "Éditer" %}
</button>
<button id="asset-cms-save-btn" class="btn btn-success btn-sm d-none">
<i class="bi bi-check-circle"></i> {% translate "Sauvegarder" %}
</button>
<button id="asset-cms-cancel-btn" class="btn btn-outline-danger btn-sm d-none">
<i class="bi bi-x-circle"></i> {% translate "Annuler" %}
</button>
</div>
</div>
{% endif %}
{% endif %}
{% if mobile_view or not allowed_update_fields %}
<div class="mb-3">
{% block asset_header_title_readonly %}
<h2 class="mb-0" style="color: var(--brand-color);">
<h2 class="mb-0" style="color: var(--brand-color); font-size: 1.25rem;">
{% if thematic.icon %}
<i class="bi {{ thematic.icon }} me-2"></i>
{% endif %}
{% translate "Asset" %} : {{ asset }}
{% translate "Asset" %} : {{ asset.code }}
</h2>
<div class="d-flex align-items-center gap-2 mt-1" style="font-size: 0.85rem; color: #6c757d;">
{% if thematic.icon %}
@ -218,30 +298,6 @@
</div>
{% endif %}
{% if mobile_view and allowed_update_fields %}
<div class="d-flex gap-2 mb-3 flex-wrap justify-content-center">
{% if 'archive' in allowed_actions %}
<button id="asset-archive-btn" class="btn btn-outline-secondary btn-sm asset-normal-action" title="{% translate 'Archiver' %}">
<i class="bi bi-archive me-1"></i>{% translate "Archiver" %}
</button>
{% endif %}
{% if 'replace' in allowed_actions %}
<button id="asset-replace-btn" class="btn btn-outline-secondary btn-sm asset-normal-action" title="{% translate 'Remplacer' %}">
<i class="bi bi-arrow-repeat me-1"></i>{% translate "Remplacer" %}
</button>
{% endif %}
<button id="asset-cms-edit-btn" class="btn btn-outline-secondary btn-sm asset-normal-action">
<i class="bi bi-pencil me-1"></i>{% translate "Éditer" %}
</button>
<button id="asset-cms-save-btn" class="btn btn-success btn-sm d-none asset-edit-action">
<i class="bi bi-check-circle me-1"></i>{% translate "Sauvegarder" %}
</button>
<button id="asset-cms-cancel-btn" class="btn btn-outline-danger btn-sm d-none asset-edit-action">
<i class="bi bi-x-circle me-1"></i>{% translate "Annuler" %}
</button>
</div>
{% endif %}
<div class="row {% if not mobile_view %}mt-4{% endif %}">
<!-- Colonne principale : informations de base -->
<div class="{% if mobile_view %}col-12{% else %}col-md-8{% endif %}">

View file

@ -0,0 +1,289 @@
{% extends "assets/detail_generic.html" %}
{% load i18n %}
{% load static %}
{% load asset_tags %}
{% block head %}
{{ block.super }}
<style>
/* Adaptations mobiles avancées pour le template générique d'asset */
@media (max-width: 767.98px) {
#asset-detail-container {
padding-left: 0.5rem !important;
padding-right: 0.5rem !important;
}
/* En-tête mobile compact */
.generic-asset-mobile-header {
background-color: #ffffff;
border: 1px solid #cbd5e1;
border-radius: 0.85rem;
padding: 0.85rem;
box-shadow: 0 1px 4px rgba(15, 23, 42, 0.05);
margin-bottom: 0.75rem;
}
.generic-asset-mobile-header .asset-thematic-avatar {
width: 44px;
height: 44px;
border-radius: 0.75rem;
background-color: rgba(47, 62, 139, 0.1);
color: var(--brand-color, #2f3e8b);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.4rem;
flex-shrink: 0;
}
/* Barre d'onglets de navigation segmentée */
.mobile-asset-tabs-nav {
position: sticky;
top: 3.5rem;
z-index: 1015;
background: #ffffff;
border: 1px solid #cbd5e1;
border-radius: 0.75rem;
padding: 0.3rem;
display: flex;
gap: 0.35rem;
overflow-x: auto;
white-space: nowrap;
scrollbar-width: none;
-webkit-overflow-scrolling: touch;
box-shadow: 0 2px 6px rgba(15, 23, 42, 0.06);
margin-bottom: 0.85rem;
}
.mobile-asset-tabs-nav::-webkit-scrollbar {
display: none;
}
.mobile-tab-btn {
font-size: 0.82rem;
font-weight: 600;
padding: 0.4rem 0.75rem;
border-radius: 0.55rem;
border: none;
background: transparent;
color: #64748b;
transition: all 0.15s ease-in-out;
flex-shrink: 0;
display: inline-flex;
align-items: center;
gap: 0.35rem;
}
.mobile-tab-btn.active {
background-color: var(--brand-color, #2f3e8b);
color: #ffffff;
box-shadow: 0 2px 4px rgba(47, 62, 139, 0.25);
}
/* Cartes et sections sur mobile */
#asset-detail-container .card {
border-radius: 0.85rem !important;
border: 1px solid #cbd5e1 !important;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.05);
margin-bottom: 0.75rem !important;
}
#asset-detail-container .card-header {
padding: 0.65rem 0.85rem;
border-top-left-radius: 0.85rem !important;
border-top-right-radius: 0.85rem !important;
}
#asset-detail-container .card-header h5 {
font-size: 0.95rem !important;
font-weight: 600;
}
#asset-detail-container .card-body {
padding: 0.75rem 0.85rem;
}
/* Tableaux tactiles */
#asset-detail-container .table th {
font-size: 0.84rem;
padding: 0.5rem 0.4rem;
width: 38% !important;
}
#asset-detail-container .table td {
font-size: 0.86rem;
padding: 0.5rem 0.4rem;
}
/* Barre d'édition CMS mobile */
#asset-cms-edit-bar.mobile-edit-bar {
top: 3.5rem;
z-index: 1020;
border-radius: 0.75rem;
border: 1px solid #b8c5d3;
}
/* Carte MapLibre sur mobile */
#asset-map {
height: 320px !important;
border-radius: 0 0 0.85rem 0.85rem;
}
}
</style>
{% endblock head %}
{# ── En-tête mobile readonly avec icône, thématique et badges ── #}
{% block asset_header_title_readonly %}
<div class="generic-asset-mobile-header">
<div class="d-flex align-items-center gap-2.5">
<div class="asset-thematic-avatar" {% if thematic.color %}style="background-color: {{ thematic.color }}18; color: {{ thematic.color }};"{% endif %}>
{% if thematic.icon %}
<i class="bi {{ thematic.icon }}"></i>
{% else %}
<i class="bi bi-pin-map"></i>
{% endif %}
</div>
<div class="flex-grow-1 text-truncate">
<div class="d-flex align-items-center gap-1.5 flex-wrap">
<span class="fw-bold text-dark fs-6" style="color: var(--brand-color);">{{ asset.code }}</span>
{% if asset.status == 'active' %}
<span class="badge bg-success">{{ asset.get_status_display }}</span>
{% elif asset.status == 'damaged' or asset.status == 'to_replace' %}
<span class="badge bg-warning text-dark">{{ asset.get_status_display }}</span>
{% else %}
<span class="badge bg-secondary">{{ asset.get_status_display|default:asset.status }}</span>
{% endif %}
</div>
<div class="small text-secondary text-truncate">
{% if thematic.name_fr %}
<span>{{ thematic.name_fr }}</span> &bull;
{% endif %}
<span>{{ asset_verbose_name }}</span>
{% if asset.name_fr %}
&mdash; <span class="fw-semibold text-dark">{{ asset.name_fr }}</span>
{% elif asset.model %}
&mdash; <span class="fw-semibold text-dark">{{ asset.model.get_name }}</span>
{% endif %}
</div>
</div>
</div>
</div>
{# Barre de navigation par onglets segmentés (Infos, Carte, Documents, Liens) #}
<div class="mobile-asset-tabs-nav" id="mobileAssetTabsNav">
<button type="button" class="mobile-tab-btn active" data-target-tab="tab-infos">
<i class="bi bi-card-checklist"></i>{% translate "Informations" %}
</button>
<button type="button" class="mobile-tab-btn" data-target-tab="tab-geo">
<i class="bi bi-geo-alt"></i>{% translate "Carte & Localisation" %}
</button>
<button type="button" class="mobile-tab-btn" data-target-tab="tab-docs">
<i class="bi bi-paperclip"></i>{% translate "Documents & Photos" %}
</button>
<button type="button" class="mobile-tab-btn" data-target-tab="tab-links">
<i class="bi bi-link-45deg"></i>{% translate "Assets Liés" %}
</button>
</div>
{% endblock asset_header_title_readonly %}
{# ── Script pour la gestion des onglets mobiles ── #}
{% block extra_scripts %}
{{ block.super }}
<script>
(function() {
function initMobileAssetTabs() {
const tabButtons = document.querySelectorAll('.mobile-tab-btn');
const container = document.getElementById('asset-detail-container');
if (!tabButtons.length || !container) return;
// Identification des cartes par catégorie
const mainCol = container.querySelector('.col-12, .col-md-8');
const sideCol = container.querySelector('.col-md-4, .col-12:last-child');
// Assigner les classes de section aux cartes
// 1. Informations
const infoCards = [
container.querySelector('.card:has(table)'),
document.getElementById('model-card'),
container.querySelector('.card:has(#observations-card)'),
].filter(Boolean);
// 2. Géolocalisation & Carte
const geoCards = [
container.querySelector('.card:has(#asset-map)'),
container.querySelector('.card:has(.asset-location-link)'),
].filter(Boolean);
// 3. Documents
const docCards = [
document.getElementById('documents-card') || container.querySelector('.card:has(#documents-list)') || container.querySelector('.card:has(.document-item)')
].filter(Boolean);
// 4. Assets Liés & Remplacements
const linkCards = [
container.querySelector('.card:has(.replacement-chain)'),
container.querySelector('.card:has(#associated-assets-list)'),
container.querySelector('.card:has(#linked-interventions-list)'),
].filter(Boolean);
// Initialiser les groupes
infoCards.forEach(c => c && c.classList.add('mobile-section-infos'));
geoCards.forEach(c => c && c.classList.add('mobile-section-geo'));
docCards.forEach(c => c && c.classList.add('mobile-section-docs'));
linkCards.forEach(c => c && c.classList.add('mobile-section-links'));
function showSection(targetTab) {
tabButtons.forEach(btn => {
if (btn.dataset.targetTab === targetTab) {
btn.classList.add('active');
} else {
btn.classList.remove('active');
}
});
const allCustomSections = container.querySelectorAll(
'.mobile-section-infos, .mobile-section-geo, .mobile-section-docs, .mobile-section-links'
);
if (targetTab === 'tab-infos') {
allCustomSections.forEach(c => c.style.display = 'none');
infoCards.forEach(c => c.style.display = '');
// Si aucune carte taguée infos, tout afficher
if (!infoCards.length) allCustomSections.forEach(c => c.style.display = '');
} else if (targetTab === 'tab-geo') {
allCustomSections.forEach(c => c.style.display = 'none');
geoCards.forEach(c => c.style.display = '');
// Redimensionner la carte MapLibre pour s'adapter au conteneur
setTimeout(() => {
window.dispatchEvent(new Event('resize'));
}, 100);
} else if (targetTab === 'tab-docs') {
allCustomSections.forEach(c => c.style.display = 'none');
docCards.forEach(c => c.style.display = '');
} else if (targetTab === 'tab-links') {
allCustomSections.forEach(c => c.style.display = 'none');
linkCards.forEach(c => c.style.display = '');
}
}
tabButtons.forEach(btn => {
btn.addEventListener('click', () => {
showSection(btn.dataset.targetTab);
});
});
// Par défaut, afficher les infos
showSection('tab-infos');
// Si on active le mode édition, s'assurer que les champs éditables restent interactifs
document.addEventListener('assetEditModeChanged', (e) => {
if (e.detail && e.detail.editing) {
// En mode édition, toutes les cartes peuvent être consultées via les onglets
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initMobileAssetTabs);
} else {
initMobileAssetTabs();
}
})();
</script>
{% endblock extra_scripts %}
{% block script %}
{{ block.super }}
{% endblock script %}

View file

@ -3,12 +3,42 @@
{% load static %}
{% load asset_tags %}
{% block head %}
{{ block.super }}
<style>
/* Adaptations spécifiques pour la vue Arbre sur mobile */
@media (max-width: 767.98px) {
.tree-header-icon {
width: 38px !important;
height: 38px !important;
min-width: 38px;
}
.tree-header-icon i {
font-size: 1.3rem !important;
}
.tree-metric-widget {
padding: 0.35rem !important;
}
.tree-metric-widget .metric-title {
font-size: 0.72rem;
letter-spacing: -0.2px;
}
.tree-metric-widget .metric-value {
font-size: 1.05rem;
}
.card-header h5 {
font-size: 0.95rem !important;
}
}
</style>
{% endblock head %}
{# ══════════════════════════════════════════════════════════════════════════════ #}
{# EN-TÊTE SPÉCIFIQUE ARBRE #}
{# ══════════════════════════════════════════════════════════════════════════════ #}
{% block asset_header_title %}
<div class="d-flex align-items-center gap-3">
<div class="rounded-circle bg-success-subtle p-2 d-flex align-items-center justify-content-center" style="width: 46px; height: 46px;">
<div class="rounded-circle bg-success-subtle p-2 d-flex align-items-center justify-content-center tree-header-icon" style="width: 46px; height: 46px;">
<i class="bi bi-tree-fill text-success" style="font-size: 1.6rem;"></i>
</div>
<div>
@ -79,7 +109,7 @@
{% block asset_header_title_readonly %}
<div class="d-flex align-items-center gap-3">
<div class="rounded-circle bg-success-subtle p-2 d-flex align-items-center justify-content-center" style="width: 46px; height: 46px;">
<div class="rounded-circle bg-success-subtle p-2 d-flex align-items-center justify-content-center tree-header-icon" style="width: 46px; height: 46px;">
<i class="bi bi-tree-fill text-success" style="font-size: 1.6rem;"></i>
</div>
<div>
@ -362,25 +392,25 @@
{# Mini-widgets d'indicateurs visuels #}
<div class="row g-2 mb-3">
<div class="col-4">
<div class="p-2 border rounded text-center bg-light-subtle">
<div class="small text-muted mb-1"><i class="bi bi-arrow-up-down text-success me-1"></i>{% translate "Hauteur" %}</div>
<div class="fs-5 fw-bold text-success">
<div class="p-2 border rounded text-center bg-light-subtle tree-metric-widget">
<div class="small text-muted mb-1 metric-title text-truncate"><i class="bi bi-arrow-up-down text-success me-1"></i>{% translate "Hauteur" %}</div>
<div class="fs-5 fw-bold text-success metric-value">
{% if asset.height %}{{ asset.height }} <small class="text-muted fw-normal" style="font-size: 0.75rem;">m</small>{% else %}<span class="text-muted fs-6">&mdash;</span>{% endif %}
</div>
</div>
</div>
<div class="col-4">
<div class="p-2 border rounded text-center bg-light-subtle">
<div class="small text-muted mb-1"><i class="bi bi-circle text-primary me-1"></i>{% translate "Circonférence" %}</div>
<div class="fs-5 fw-bold text-primary">
<div class="p-2 border rounded text-center bg-light-subtle tree-metric-widget">
<div class="small text-muted mb-1 metric-title text-truncate"><i class="bi bi-circle text-primary me-1"></i>{% translate "Circonférence" %}</div>
<div class="fs-5 fw-bold text-primary metric-value">
{% if asset.circumference %}{{ asset.circumference }} <small class="text-muted fw-normal" style="font-size: 0.75rem;">cm</small>{% else %}<span class="text-muted fs-6">&mdash;</span>{% endif %}
</div>
</div>
</div>
<div class="col-4">
<div class="p-2 border rounded text-center bg-light-subtle">
<div class="small text-muted mb-1"><i class="bi bi-arrows-expand text-info me-1"></i>{% translate "Houppier" %}</div>
<div class="fs-5 fw-bold text-info-emphasis">
<div class="p-2 border rounded text-center bg-light-subtle tree-metric-widget">
<div class="small text-muted mb-1 metric-title text-truncate"><i class="bi bi-arrows-expand text-info me-1"></i>{% translate "Houppier" %}</div>
<div class="fs-5 fw-bold text-info-emphasis metric-value">
{% if asset.crown_diameter %}{{ asset.crown_diameter }} <small class="text-muted fw-normal" style="font-size: 0.75rem;">m</small>{% else %}<span class="text-muted fs-6">&mdash;</span>{% endif %}
</div>
</div>
@ -391,11 +421,11 @@
<tbody>
<!-- Hauteur totale -->
<tr class="asset-editable-field" data-field="height" data-can-edit="{% if 'height' in allowed_update_fields %}true{% else %}false{% endif %}">
<th style="width: 32%;">{% translate "Hauteur totale (m)" %}</th>
<th style="width: 35%;">{% translate "Hauteur totale (m)" %}</th>
<td>
<div class="field-display"><span class="field-value">{% if asset.height %}{{ asset.height }} m{% else %}-{% endif %}</span></div>
<div class="field-edit d-none">
<input type="number" step="0.1" class="form-control form-control-sm" value="{{ asset.height|default:'' }}">
<input type="number" step="0.1" inputmode="decimal" class="form-control form-control-sm" value="{{ asset.height|default:'' }}">
</div>
</td>
</tr>
@ -406,7 +436,7 @@
<td>
<div class="field-display"><span class="field-value">{% if asset.circumference %}{{ asset.circumference }} cm{% else %}-{% endif %}</span></div>
<div class="field-edit d-none">
<input type="number" step="1" class="form-control form-control-sm" value="{{ asset.circumference|default:'' }}" placeholder="{% translate 'En cm' %}">
<input type="number" step="1" inputmode="numeric" class="form-control form-control-sm" value="{{ asset.circumference|default:'' }}" placeholder="{% translate 'En cm' %}">
</div>
</td>
</tr>
@ -417,7 +447,7 @@
<td>
<div class="field-display"><span class="field-value">{% if asset.crown_diameter %}{{ asset.crown_diameter }} m{% else %}-{% endif %}</span></div>
<div class="field-edit d-none">
<input type="number" step="0.5" class="form-control form-control-sm" value="{{ asset.crown_diameter|default:'' }}">
<input type="number" step="0.5" inputmode="decimal" class="form-control form-control-sm" value="{{ asset.crown_diameter|default:'' }}">
</div>
</td>
</tr>
@ -432,7 +462,7 @@
</span>
</div>
<div class="field-edit d-none">
<input type="number" step="0.1" class="form-control form-control-sm" value="{{ asset.crown_clearance|default:'' }}" placeholder="{% translate 'Ex: 4.5' %}">
<input type="number" step="0.1" inputmode="decimal" class="form-control form-control-sm" value="{{ asset.crown_clearance|default:'' }}" placeholder="{% translate 'Ex: 4.5' %}">
</div>
</td>
</tr>
@ -467,7 +497,7 @@
<td>
<div class="field-display"><span class="field-value">{% if asset.protection_buffer %}{{ asset.protection_buffer }} m{% else %}-{% endif %}</span></div>
<div class="field-edit d-none">
<input type="number" step="0.5" class="form-control form-control-sm" value="{{ asset.protection_buffer|default:'' }}">
<input type="number" step="0.5" inputmode="decimal" class="form-control form-control-sm" value="{{ asset.protection_buffer|default:'' }}">
</div>
</td>
</tr>
@ -478,7 +508,7 @@
<td>
<div class="field-display"><span class="field-value">{% if asset.depth %}{{ asset.depth }} m{% else %}-{% endif %}</span></div>
<div class="field-edit d-none">
<input type="number" step="0.1" class="form-control form-control-sm" value="{{ asset.depth|default:'' }}">
<input type="number" step="0.1" inputmode="decimal" class="form-control form-control-sm" value="{{ asset.depth|default:'' }}">
</div>
</td>
</tr>
@ -764,7 +794,7 @@
</span>
</div>
<div class="field-edit d-none">
<input type="number" step="1" min="1" max="20" class="form-control form-control-sm" value="{{ asset.pruning_frequency_years|default:'' }}" placeholder="{% translate 'Nombre d années' %}">
<input type="number" step="1" min="1" max="20" inputmode="numeric" class="form-control form-control-sm" value="{{ asset.pruning_frequency_years|default:'' }}" placeholder="{% translate 'Nombre d années' %}">
</div>
</td>
</tr>

View file

@ -161,7 +161,7 @@ def get_asset_edit_context(request, asset, content_type):
pass
# Get thematic code for URL construction
# Priority: asset.category > asset.model.category > None
# Priority: asset.category > asset.model.category > _get_asset_thematic > None
thematic_code = None
thematic = None
_thematic_source = None
@ -169,6 +169,9 @@ def get_asset_edit_context(request, asset, content_type):
_thematic_source = asset.category.thematic
elif hasattr(asset, 'model') and asset.model and getattr(asset.model, 'category', None) and asset.model.category.thematic:
_thematic_source = asset.model.category.thematic
else:
from assets.permissions import _get_asset_thematic
_thematic_source = _get_asset_thematic(asset)
if _thematic_source:
thematic_code = _thematic_source.code
thematic = _thematic_source
@ -246,8 +249,28 @@ def locations_geojson(request):
pass
def mobile_asset_detail(request, thematic_code, asset_model, asset_id):
"""Mobile-friendly asset detail using the generic template with the mobile base."""
def mobile_asset_detail(request, *args, **kwargs):
"""
Mobile-friendly asset detail using specific or generic template with the mobile base.
Aligns permissions strictly with desktop criteria (can_view_asset, thematic access).
"""
from assets.permissions import can_view_asset, _get_asset_thematic
from django.core.exceptions import PermissionDenied
# Handle both keyword arguments and positional arguments
thematic_code = kwargs.get('thematic_code')
asset_model = kwargs.get('asset_model')
asset_id = kwargs.get('asset_id')
if not asset_model and len(args) >= 2:
if len(args) >= 3:
thematic_code = args[0]
asset_model = args[1]
asset_id = args[2]
else:
asset_model = args[0]
asset_id = args[1]
try:
model_name = asset_model.lower().replace('_', '')
content_type = ContentType.objects.get(app_label='assets', model=model_name)
@ -257,14 +280,26 @@ def mobile_asset_detail(request, thematic_code, asset_model, asset_id):
asset = get_object_or_404(model_class, id=asset_id)
# Permission gate based on the provided thematic code
permission_check = check_thematic_access(thematic_code)
result = permission_check(lambda req, *a, **kw: None)(request)
if result is not None:
return result
# Permission check: identical criteria to desktop (roles, instances, contracts)
if not can_view_asset(request.user, asset):
raise PermissionDenied(_("Vous n'avez pas la permission de consulter cet asset."))
# Deduce thematic if omitted
if not thematic_code:
thematic = _get_asset_thematic(asset)
thematic_code = thematic.code if thematic else None
# Permission gate based on the thematic code
if thematic_code:
permission_check = check_thematic_access(thematic_code)
result = permission_check(lambda req, *a, **kw: None)(request)
if result is not None:
return result
template = select_template([
f"assets/{asset_model}_detail_mobile.html",
f"assets/{asset_model}_detail.html",
"assets/detail_generic_mobile.html",
"assets/detail_generic.html",
])
@ -279,15 +314,28 @@ def mobile_asset_detail(request, thematic_code, asset_model, asset_id):
match = re.search(r'/interventions/(\d+)', referer)
if match:
back_url = reverse('mobile:intervention_detail_mobile', args=[match.group(1)])
elif '/mobile/assets/' in referer:
back_url = reverse('mobile:mobile_assets_index')
if not back_url:
try:
back_url = reverse('mobile:mobile_assets_index')
except Exception:
back_url = '/mobile/'
context = {
context = get_asset_edit_context(request, asset, content_type)
context.update({
"asset": asset,
"content_type": content_type,
"base_template": "mobile/mobile_base.html",
"mobile_view": True,
"is_mobile": True,
"back_url": back_url,
}
context.update(get_asset_edit_context(request, asset, content_type))
"thematic_code": thematic_code or context.get("thematic_code"),
"asset_model": asset_model,
})
if thematic_code and not context.get("thematic"):
from common.models import Thematic
context["thematic"] = Thematic.objects.filter(code=thematic_code).first()
return render(request, template.template.name, context)

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -20,7 +20,7 @@ msgstr ""
#: authorizations/admin.py:28
#: authorizations/templates/authorizations/authorization_detail.html:73
#: authorizations/templates/authorizations/authorization_list.html:73
#: authorizations/templates/authorizations/authorization_list.html:139
#: authorizations/templates/authorizations/authorization_list.html:178
msgid "Type"
msgstr "Type"
@ -53,10 +53,18 @@ msgstr "Include archives (> 2 years)"
msgid "Type d'autorisation"
msgstr "Authorisation type"
#: authorizations/forms.py:140
#: authorizations/forms.py:138 authorizations/models.py:64
msgid "Agent traitant"
msgstr "Handling agent"
#: authorizations/forms.py:145
msgid "Recherche…"
msgstr "Search…"
#: authorizations/forms.py:163
msgid "Non assigné"
msgstr ""
#: authorizations/models.py:17
msgid "Affichage (panneau, ...)"
msgstr "Display (panel, ...)"
@ -158,10 +166,6 @@ msgstr "Address"
msgid "Entreprise"
msgstr "Company"
#: authorizations/models.py:64
msgid "Agent traitant"
msgstr "Handling agent"
#: authorizations/models.py:66
msgid "Commentaire"
msgstr "Comment"
@ -173,7 +177,7 @@ msgstr "Location – Address"
#: authorizations/models.py:68
#: authorizations/templates/authorizations/authorization_detail.html:95
#: authorizations/templates/authorizations/authorization_detail.html:228
#: authorizations/templates/authorizations/authorization_list.html:142
#: authorizations/templates/authorizations/authorization_list.html:182
msgid "Localisation"
msgstr "Location"
@ -254,12 +258,12 @@ msgid "Informations générales"
msgstr "General information"
#: authorizations/templates/authorizations/authorization_detail.html:55
#: authorizations/templates/authorizations/authorization_list.html:138
#: authorizations/templates/authorizations/authorization_list.html:177
msgid "Code"
msgstr "Code"
#: authorizations/templates/authorizations/authorization_detail.html:58
#: authorizations/templates/authorizations/authorization_list.html:140
#: authorizations/templates/authorizations/authorization_list.html:179
msgid "Statut"
msgstr "Status"
@ -272,11 +276,13 @@ msgid "Mis à jour"
msgstr "Updated"
#: authorizations/templates/authorizations/authorization_detail.html:83
#: authorizations/templates/authorizations/authorization_list.html:112
#: authorizations/templates/authorizations/authorization_list.html:181
msgid "Agent"
msgstr "Agent"
#: authorizations/templates/authorizations/authorization_detail.html:102
#: authorizations/templates/authorizations/authorization_list.html:141
#: authorizations/templates/authorizations/authorization_list.html:180
msgid "Demandeur"
msgstr "Applicant"
@ -347,7 +353,7 @@ msgid "Recherche"
msgstr "Search"
#: authorizations/templates/authorizations/authorization_list.html:82
#: authorizations/templates/authorizations/authorization_list.html:207
#: authorizations/templates/authorizations/authorization_list.html:249
msgid "Tous les types"
msgstr "All types"
@ -356,7 +362,8 @@ msgid "Rechercher un type..."
msgstr "Search"
#: authorizations/templates/authorizations/authorization_list.html:92
#: authorizations/templates/authorizations/new_authorization_default.html:226
#: authorizations/templates/authorizations/authorization_list.html:131
#: authorizations/templates/authorizations/new_authorization_default.html:223
msgid "Effacer"
msgstr "Clear"
@ -365,21 +372,38 @@ msgid "Aucun type correspondant"
msgstr "Aucun type correspondant"
#: authorizations/templates/authorizations/authorization_list.html:121
#: authorizations/templates/authorizations/authorization_list.html:326
msgid "Tous les agents"
msgstr "All agents"
#: authorizations/templates/authorizations/authorization_list.html:128
msgid "Rechercher un agent..."
msgstr "Search an agent..."
#: authorizations/templates/authorizations/authorization_list.html:145
msgid "Aucun agent correspondant"
msgstr "No matching agent"
#: authorizations/templates/authorizations/authorization_list.html:160
msgid "Filtrer"
msgstr "Filter"
#: authorizations/templates/authorizations/authorization_list.html:143
#: authorizations/templates/authorizations/authorization_list.html:183
msgid "Date de création"
msgstr "Creation date"
#: authorizations/templates/authorizations/authorization_list.html:177
#: authorizations/templates/authorizations/authorization_list.html:218
msgid "Aucune demande trouvée."
msgstr "No request found."
#: authorizations/templates/authorizations/authorization_list.html:215
#: authorizations/templates/authorizations/authorization_list.html:257
msgid "types sélectionnés"
msgstr ""
#: authorizations/templates/authorizations/authorization_list.html:334
msgid "agents sélectionnés"
msgstr ""
#: authorizations/templates/authorizations/authorization_success.html:9
#: authorizations/templates/authorizations/authorization_success.html:37
msgid "Demande enregistrée"
@ -391,7 +415,7 @@ msgstr "Request saved"
#: authorizations/templates/authorizations/email_verify_code.html:35
#: authorizations/templates/authorizations/new_authorization_default.html:9
#: authorizations/templates/authorizations/new_authorization_default.html:99
#: authorizations/templates/authorizations/new_authorization_default.html:376
#: authorizations/templates/authorizations/new_authorization_default.html:373
msgid "Demande d'occupation de l'espace public"
msgstr "Public space occupation request"
@ -579,11 +603,8 @@ msgstr "Location (draw a polygon to indicate the area concerned)"
msgid "Dessiner un polygone"
msgstr "Draw a polygon"
#: authorizations/templates/authorizations/new_authorization_default.html:223
msgid "Terminer"
msgstr "Finish"
#: authorizations/templates/authorizations/new_authorization_default.html:231
#: authorizations/templates/authorizations/new_authorization_default.html:228
#: authorizations/templates/authorizations/new_authorization_default.html:578
msgid ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets. Cliquez sur le premier sommet pour fermer le polygone."
@ -591,87 +612,87 @@ msgstr ""
"Click « Draw a polygon » then click on the map to add vertices. Click on the"
" first vertex to close the polygon."
#: authorizations/templates/authorizations/new_authorization_default.html:245
#: authorizations/templates/authorizations/new_authorization_default.html:242
msgid "Vos coordonnées"
msgstr "Your contact details"
#: authorizations/templates/authorizations/new_authorization_default.html:278
#: authorizations/templates/authorizations/new_authorization_default.html:317
#: authorizations/templates/authorizations/new_authorization_default.html:337
#: authorizations/templates/authorizations/new_authorization_default.html:275
#: authorizations/templates/authorizations/new_authorization_default.html:314
#: authorizations/templates/authorizations/new_authorization_default.html:334
msgid "optionnel"
msgstr "optional"
#: authorizations/templates/authorizations/new_authorization_default.html:292
#: authorizations/templates/authorizations/new_authorization_default.html:289
msgid "Date(s) d'occupation"
msgstr "Occupation date(s)"
#: authorizations/templates/authorizations/new_authorization_default.html:298
#: authorizations/templates/authorizations/new_authorization_default.html:295
msgid "Veuillez indiquer au moins une date de début d'occupation."
msgstr "Please provide at least one occupation start date."
#: authorizations/templates/authorizations/new_authorization_default.html:328
#: authorizations/templates/authorizations/new_authorization_default.html:325
msgid "Ajouter une date"
msgstr "Add a date"
#: authorizations/templates/authorizations/new_authorization_default.html:336
#: authorizations/templates/authorizations/new_authorization_default.html:333
msgid "Document(s) à joindre"
msgstr "Document(s) to attach"
#: authorizations/templates/authorizations/new_authorization_default.html:360
#: authorizations/templates/authorizations/new_authorization_default.html:357
msgid "Ajouter un document"
msgstr "Add a document"
#: authorizations/templates/authorizations/new_authorization_default.html:367
#: authorizations/templates/authorizations/new_authorization_default.html:364
msgid "Envoyer la demande"
msgstr "Submit the request"
#: authorizations/templates/authorizations/new_authorization_default.html:385
#: authorizations/templates/authorizations/new_authorization_default.html:382
msgid ""
"Veillez à joindre en annexe l'attestation d'assurance couvrant tous les "
"risques."
msgstr "Please attach the insurance certificate covering all risks."
#: authorizations/templates/authorizations/new_authorization_default.html:386
msgid "Veillez à joindre en annexe l'autorisation de la commune."
msgstr "Please attach the municipal authorisation."
#: authorizations/templates/authorizations/new_authorization_default.html:472
#: authorizations/templates/authorizations/new_authorization_default.html:521
#: authorizations/templates/authorizations/new_authorization_default.html:468
#: authorizations/templates/authorizations/new_authorization_default.html:576
msgid "Polygone enregistré. Cliquez sur « Dessiner » pour le redessiner."
msgstr "Polygon saved. Click « Draw » to redraw it."
#: authorizations/templates/authorizations/new_authorization_default.html:492
#: authorizations/templates/authorizations/new_authorization_default.html:496
msgid "Cliquer pour fermer le polygone"
msgstr "Click to close the polygon"
#: authorizations/templates/authorizations/new_authorization_default.html:536
msgid ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets."
msgstr "Click « Draw a polygon » then click on the map to add vertices."
#: authorizations/templates/authorizations/new_authorization_default.html:584
msgid "Cliquez sur la carte pour ajouter des sommets."
msgstr "Click on the map to add vertices."
#: authorizations/templates/authorizations/new_authorization_default.html:559
#: authorizations/templates/authorizations/new_authorization_default.html:586
msgid ""
"Cliquez sur la carte pour ajouter des sommets. Cliquez sur le premier sommet"
" pour fermer le polygone."
msgstr ""
#: authorizations/views.py:326 authorizations/views.py:375
#: authorizations/views.py:326 authorizations/views.py:390
msgid "Vous n'avez pas accès à cette vue."
msgstr ""
#: authorizations/views.py:392
#: authorizations/views.py:407
msgid "La demande a été mise à jour avec succès."
msgstr ""
#: authorizations/views.py:409
#: authorizations/views.py:424
msgid "Le document a été ajouté avec succès."
msgstr ""
#: authorizations/views.py:413
#: authorizations/views.py:428
msgid "Veuillez fournir une description et un fichier."
msgstr "Veuillez fournir une description et un fichier."
#~ msgid "Terminer"
#~ msgstr "Finish"
#~ msgid "Veillez à joindre en annexe l'autorisation de la commune."
#~ msgstr "Please attach the municipal authorisation."
#~ msgid "Autorisation de voirie"
#~ msgstr "Road authorisation"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -20,7 +20,7 @@ msgstr ""
#: authorizations/admin.py:28
#: authorizations/templates/authorizations/authorization_detail.html:73
#: authorizations/templates/authorizations/authorization_list.html:73
#: authorizations/templates/authorizations/authorization_list.html:139
#: authorizations/templates/authorizations/authorization_list.html:178
msgid "Type"
msgstr "Type"
@ -53,10 +53,18 @@ msgstr "Inclure les archives (> 2 ans)"
msgid "Type d'autorisation"
msgstr "Type d'autorisation"
#: authorizations/forms.py:140
#: authorizations/forms.py:138 authorizations/models.py:64
msgid "Agent traitant"
msgstr "Agent traitant"
#: authorizations/forms.py:145
msgid "Recherche…"
msgstr "Recherche…"
#: authorizations/forms.py:163
msgid "Non assigné"
msgstr ""
#: authorizations/models.py:17
msgid "Affichage (panneau, ...)"
msgstr "Affichage (panneau, ...)"
@ -158,10 +166,6 @@ msgstr "Adresse"
msgid "Entreprise"
msgstr "Entreprise"
#: authorizations/models.py:64
msgid "Agent traitant"
msgstr "Agent traitant"
#: authorizations/models.py:66
msgid "Commentaire"
msgstr "Commentaire"
@ -173,7 +177,7 @@ msgstr "Localisation – Adresse"
#: authorizations/models.py:68
#: authorizations/templates/authorizations/authorization_detail.html:95
#: authorizations/templates/authorizations/authorization_detail.html:228
#: authorizations/templates/authorizations/authorization_list.html:142
#: authorizations/templates/authorizations/authorization_list.html:182
msgid "Localisation"
msgstr "Localisation"
@ -254,12 +258,12 @@ msgid "Informations générales"
msgstr "Informations générales"
#: authorizations/templates/authorizations/authorization_detail.html:55
#: authorizations/templates/authorizations/authorization_list.html:138
#: authorizations/templates/authorizations/authorization_list.html:177
msgid "Code"
msgstr "Code"
#: authorizations/templates/authorizations/authorization_detail.html:58
#: authorizations/templates/authorizations/authorization_list.html:140
#: authorizations/templates/authorizations/authorization_list.html:179
msgid "Statut"
msgstr "Statut"
@ -272,11 +276,13 @@ msgid "Mis à jour"
msgstr "Mis à jour"
#: authorizations/templates/authorizations/authorization_detail.html:83
#: authorizations/templates/authorizations/authorization_list.html:112
#: authorizations/templates/authorizations/authorization_list.html:181
msgid "Agent"
msgstr "Agent"
#: authorizations/templates/authorizations/authorization_detail.html:102
#: authorizations/templates/authorizations/authorization_list.html:141
#: authorizations/templates/authorizations/authorization_list.html:180
msgid "Demandeur"
msgstr "Demandeur"
@ -347,7 +353,7 @@ msgid "Recherche"
msgstr "Recherche"
#: authorizations/templates/authorizations/authorization_list.html:82
#: authorizations/templates/authorizations/authorization_list.html:207
#: authorizations/templates/authorizations/authorization_list.html:249
msgid "Tous les types"
msgstr "Tous les types"
@ -356,7 +362,8 @@ msgid "Rechercher un type..."
msgstr "Rechercher un type..."
#: authorizations/templates/authorizations/authorization_list.html:92
#: authorizations/templates/authorizations/new_authorization_default.html:226
#: authorizations/templates/authorizations/authorization_list.html:131
#: authorizations/templates/authorizations/new_authorization_default.html:223
msgid "Effacer"
msgstr "Effacer"
@ -365,21 +372,38 @@ msgid "Aucun type correspondant"
msgstr "Aucun type correspondant"
#: authorizations/templates/authorizations/authorization_list.html:121
#: authorizations/templates/authorizations/authorization_list.html:326
msgid "Tous les agents"
msgstr "Tous les agents"
#: authorizations/templates/authorizations/authorization_list.html:128
msgid "Rechercher un agent..."
msgstr "Rechercher un agent..."
#: authorizations/templates/authorizations/authorization_list.html:145
msgid "Aucun agent correspondant"
msgstr "Aucun agent correspondant"
#: authorizations/templates/authorizations/authorization_list.html:160
msgid "Filtrer"
msgstr "Filtrer"
#: authorizations/templates/authorizations/authorization_list.html:143
#: authorizations/templates/authorizations/authorization_list.html:183
msgid "Date de création"
msgstr "Date de création"
#: authorizations/templates/authorizations/authorization_list.html:177
#: authorizations/templates/authorizations/authorization_list.html:218
msgid "Aucune demande trouvée."
msgstr "Aucune demande trouvée."
#: authorizations/templates/authorizations/authorization_list.html:215
#: authorizations/templates/authorizations/authorization_list.html:257
msgid "types sélectionnés"
msgstr "types sélectionnés"
#: authorizations/templates/authorizations/authorization_list.html:334
msgid "agents sélectionnés"
msgstr "agents sélectionnés"
#: authorizations/templates/authorizations/authorization_success.html:9
#: authorizations/templates/authorizations/authorization_success.html:37
msgid "Demande enregistrée"
@ -391,7 +415,7 @@ msgstr "Demande enregistrée"
#: authorizations/templates/authorizations/email_verify_code.html:35
#: authorizations/templates/authorizations/new_authorization_default.html:9
#: authorizations/templates/authorizations/new_authorization_default.html:99
#: authorizations/templates/authorizations/new_authorization_default.html:376
#: authorizations/templates/authorizations/new_authorization_default.html:373
msgid "Demande d'occupation de l'espace public"
msgstr "Demande d'occupation de l'espace public"
@ -591,11 +615,8 @@ msgstr "Localisation (dessiner un polygone pour indiquer la zone concernée)"
msgid "Dessiner un polygone"
msgstr "Dessiner un polygone"
#: authorizations/templates/authorizations/new_authorization_default.html:223
msgid "Terminer"
msgstr "Terminer"
#: authorizations/templates/authorizations/new_authorization_default.html:231
#: authorizations/templates/authorizations/new_authorization_default.html:228
#: authorizations/templates/authorizations/new_authorization_default.html:578
msgid ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets. Cliquez sur le premier sommet pour fermer le polygone."
@ -603,41 +624,41 @@ msgstr ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets. Cliquez sur le premier sommet pour fermer le polygone."
#: authorizations/templates/authorizations/new_authorization_default.html:245
#: authorizations/templates/authorizations/new_authorization_default.html:242
msgid "Vos coordonnées"
msgstr "Vos coordonnées"
#: authorizations/templates/authorizations/new_authorization_default.html:278
#: authorizations/templates/authorizations/new_authorization_default.html:317
#: authorizations/templates/authorizations/new_authorization_default.html:337
#: authorizations/templates/authorizations/new_authorization_default.html:275
#: authorizations/templates/authorizations/new_authorization_default.html:314
#: authorizations/templates/authorizations/new_authorization_default.html:334
msgid "optionnel"
msgstr "optionnel"
#: authorizations/templates/authorizations/new_authorization_default.html:292
#: authorizations/templates/authorizations/new_authorization_default.html:289
msgid "Date(s) d'occupation"
msgstr "Date(s) d'occupation"
#: authorizations/templates/authorizations/new_authorization_default.html:298
#: authorizations/templates/authorizations/new_authorization_default.html:295
msgid "Veuillez indiquer au moins une date de début d'occupation."
msgstr "Veuillez indiquer au moins une date de début d'occupation."
#: authorizations/templates/authorizations/new_authorization_default.html:328
#: authorizations/templates/authorizations/new_authorization_default.html:325
msgid "Ajouter une date"
msgstr "Ajouter une date"
#: authorizations/templates/authorizations/new_authorization_default.html:336
#: authorizations/templates/authorizations/new_authorization_default.html:333
msgid "Document(s) à joindre"
msgstr "Document(s) à joindre"
#: authorizations/templates/authorizations/new_authorization_default.html:360
#: authorizations/templates/authorizations/new_authorization_default.html:357
msgid "Ajouter un document"
msgstr "Ajouter un document"
#: authorizations/templates/authorizations/new_authorization_default.html:367
#: authorizations/templates/authorizations/new_authorization_default.html:364
msgid "Envoyer la demande"
msgstr "Envoyer la demande"
#: authorizations/templates/authorizations/new_authorization_default.html:385
#: authorizations/templates/authorizations/new_authorization_default.html:382
msgid ""
"Veillez à joindre en annexe l'attestation d'assurance couvrant tous les "
"risques."
@ -645,28 +666,20 @@ msgstr ""
"Veillez à joindre en annexe l'attestation d'assurance couvrant tous les "
"risques."
#: authorizations/templates/authorizations/new_authorization_default.html:386
msgid "Veillez à joindre en annexe l'autorisation de la commune."
msgstr "Veillez à joindre en annexe l'autorisation de la commune."
#: authorizations/templates/authorizations/new_authorization_default.html:472
#: authorizations/templates/authorizations/new_authorization_default.html:521
#: authorizations/templates/authorizations/new_authorization_default.html:468
#: authorizations/templates/authorizations/new_authorization_default.html:576
msgid "Polygone enregistré. Cliquez sur « Dessiner » pour le redessiner."
msgstr "Polygone enregistré. Cliquez sur « Dessiner » pour le redessiner."
#: authorizations/templates/authorizations/new_authorization_default.html:492
#: authorizations/templates/authorizations/new_authorization_default.html:496
msgid "Cliquer pour fermer le polygone"
msgstr "Cliquer pour fermer le polygone"
#: authorizations/templates/authorizations/new_authorization_default.html:536
msgid ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets."
msgstr ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets."
#: authorizations/templates/authorizations/new_authorization_default.html:584
msgid "Cliquez sur la carte pour ajouter des sommets."
msgstr "Cliquez sur la carte pour ajouter des sommets."
#: authorizations/templates/authorizations/new_authorization_default.html:559
#: authorizations/templates/authorizations/new_authorization_default.html:586
msgid ""
"Cliquez sur la carte pour ajouter des sommets. Cliquez sur le premier sommet"
" pour fermer le polygone."
@ -674,22 +687,28 @@ msgstr ""
"Cliquez sur la carte pour ajouter des sommets. Cliquez sur le premier sommet"
" pour fermer le polygone."
#: authorizations/views.py:326 authorizations/views.py:375
#: authorizations/views.py:326 authorizations/views.py:390
msgid "Vous n'avez pas accès à cette vue."
msgstr "Vous n'avez pas accès à cette vue."
#: authorizations/views.py:392
#: authorizations/views.py:407
msgid "La demande a été mise à jour avec succès."
msgstr "La demande a été mise à jour avec succès."
#: authorizations/views.py:409
#: authorizations/views.py:424
msgid "Le document a été ajouté avec succès."
msgstr "Le document a été ajouté avec succès."
#: authorizations/views.py:413
#: authorizations/views.py:428
msgid "Veuillez fournir une description et un fichier."
msgstr "Veuillez fournir une description et un fichier."
#~ msgid "Terminer"
#~ msgstr "Terminer"
#~ msgid "Veillez à joindre en annexe l'autorisation de la commune."
#~ msgstr "Veillez à joindre en annexe l'autorisation de la commune."
#~ msgid "Autorisation de voirie"
#~ msgstr "Autorisation de voirie"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -20,7 +20,7 @@ msgstr ""
#: authorizations/admin.py:28
#: authorizations/templates/authorizations/authorization_detail.html:73
#: authorizations/templates/authorizations/authorization_list.html:73
#: authorizations/templates/authorizations/authorization_list.html:139
#: authorizations/templates/authorizations/authorization_list.html:178
msgid "Type"
msgstr "Type"
@ -53,10 +53,18 @@ msgstr "Archieven weergeven (> 2 jaar)"
msgid "Type d'autorisation"
msgstr "Type vergunning"
#: authorizations/forms.py:140
#: authorizations/forms.py:138 authorizations/models.py:64
msgid "Agent traitant"
msgstr "Behandelende ambtenaar"
#: authorizations/forms.py:145
msgid "Recherche…"
msgstr "Zoeken…"
#: authorizations/forms.py:163
msgid "Non assigné"
msgstr ""
#: authorizations/models.py:17
msgid "Affichage (panneau, ...)"
msgstr "Affichage (bord…)"
@ -158,10 +166,6 @@ msgstr "Adres"
msgid "Entreprise"
msgstr "Onderneming"
#: authorizations/models.py:64
msgid "Agent traitant"
msgstr "Behandelende ambtenaar"
#: authorizations/models.py:66
msgid "Commentaire"
msgstr "Opmerking"
@ -173,7 +177,7 @@ msgstr "Locatie – Adres"
#: authorizations/models.py:68
#: authorizations/templates/authorizations/authorization_detail.html:95
#: authorizations/templates/authorizations/authorization_detail.html:228
#: authorizations/templates/authorizations/authorization_list.html:142
#: authorizations/templates/authorizations/authorization_list.html:182
msgid "Localisation"
msgstr "Locatie"
@ -254,12 +258,12 @@ msgid "Informations générales"
msgstr "Algemene informatie"
#: authorizations/templates/authorizations/authorization_detail.html:55
#: authorizations/templates/authorizations/authorization_list.html:138
#: authorizations/templates/authorizations/authorization_list.html:177
msgid "Code"
msgstr "Code"
#: authorizations/templates/authorizations/authorization_detail.html:58
#: authorizations/templates/authorizations/authorization_list.html:140
#: authorizations/templates/authorizations/authorization_list.html:179
msgid "Statut"
msgstr "Status"
@ -272,11 +276,13 @@ msgid "Mis à jour"
msgstr "Bijgewerkt"
#: authorizations/templates/authorizations/authorization_detail.html:83
#: authorizations/templates/authorizations/authorization_list.html:112
#: authorizations/templates/authorizations/authorization_list.html:181
msgid "Agent"
msgstr "Ambtenaar"
#: authorizations/templates/authorizations/authorization_detail.html:102
#: authorizations/templates/authorizations/authorization_list.html:141
#: authorizations/templates/authorizations/authorization_list.html:180
msgid "Demandeur"
msgstr "Aanvrager"
@ -348,7 +354,7 @@ msgid "Recherche"
msgstr "Zoeken"
#: authorizations/templates/authorizations/authorization_list.html:82
#: authorizations/templates/authorizations/authorization_list.html:207
#: authorizations/templates/authorizations/authorization_list.html:249
msgid "Tous les types"
msgstr "Alle types"
@ -357,7 +363,8 @@ msgid "Rechercher un type..."
msgstr "Zoeken"
#: authorizations/templates/authorizations/authorization_list.html:92
#: authorizations/templates/authorizations/new_authorization_default.html:226
#: authorizations/templates/authorizations/authorization_list.html:131
#: authorizations/templates/authorizations/new_authorization_default.html:223
msgid "Effacer"
msgstr "Wissen"
@ -366,21 +373,38 @@ msgid "Aucun type correspondant"
msgstr ""
#: authorizations/templates/authorizations/authorization_list.html:121
#: authorizations/templates/authorizations/authorization_list.html:326
msgid "Tous les agents"
msgstr "Alle agenten"
#: authorizations/templates/authorizations/authorization_list.html:128
msgid "Rechercher un agent..."
msgstr "Zoek een agent..."
#: authorizations/templates/authorizations/authorization_list.html:145
msgid "Aucun agent correspondant"
msgstr ""
#: authorizations/templates/authorizations/authorization_list.html:160
msgid "Filtrer"
msgstr "Filteren"
#: authorizations/templates/authorizations/authorization_list.html:143
#: authorizations/templates/authorizations/authorization_list.html:183
msgid "Date de création"
msgstr "Aanmaakdatum"
#: authorizations/templates/authorizations/authorization_list.html:177
#: authorizations/templates/authorizations/authorization_list.html:218
msgid "Aucune demande trouvée."
msgstr "Geen aanvraag gevonden."
#: authorizations/templates/authorizations/authorization_list.html:215
#: authorizations/templates/authorizations/authorization_list.html:257
msgid "types sélectionnés"
msgstr ""
#: authorizations/templates/authorizations/authorization_list.html:334
msgid "agents sélectionnés"
msgstr ""
#: authorizations/templates/authorizations/authorization_success.html:9
#: authorizations/templates/authorizations/authorization_success.html:37
msgid "Demande enregistrée"
@ -392,7 +416,7 @@ msgstr "Aanvraag opgeslagen"
#: authorizations/templates/authorizations/email_verify_code.html:35
#: authorizations/templates/authorizations/new_authorization_default.html:9
#: authorizations/templates/authorizations/new_authorization_default.html:99
#: authorizations/templates/authorizations/new_authorization_default.html:376
#: authorizations/templates/authorizations/new_authorization_default.html:373
msgid "Demande d'occupation de l'espace public"
msgstr "Aanvraag ingebruikneming openbare ruimte"
@ -583,11 +607,8 @@ msgstr "Locatie (teken een veelhoek om de betrokken zone aan te geven)"
msgid "Dessiner un polygone"
msgstr "Veelhoek tekenen"
#: authorizations/templates/authorizations/new_authorization_default.html:223
msgid "Terminer"
msgstr "Voltooien"
#: authorizations/templates/authorizations/new_authorization_default.html:231
#: authorizations/templates/authorizations/new_authorization_default.html:228
#: authorizations/templates/authorizations/new_authorization_default.html:578
msgid ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets. Cliquez sur le premier sommet pour fermer le polygone."
@ -595,89 +616,87 @@ msgstr ""
"Klik op « Veelhoek tekenen » en klik vervolgens op de kaart om hoekpunten "
"toe te voegen. Klik op het eerste hoekpunt om de veelhoek te sluiten."
#: authorizations/templates/authorizations/new_authorization_default.html:245
#: authorizations/templates/authorizations/new_authorization_default.html:242
msgid "Vos coordonnées"
msgstr "Uw contactgegevens"
#: authorizations/templates/authorizations/new_authorization_default.html:278
#: authorizations/templates/authorizations/new_authorization_default.html:317
#: authorizations/templates/authorizations/new_authorization_default.html:337
#: authorizations/templates/authorizations/new_authorization_default.html:275
#: authorizations/templates/authorizations/new_authorization_default.html:314
#: authorizations/templates/authorizations/new_authorization_default.html:334
msgid "optionnel"
msgstr "optioneel"
#: authorizations/templates/authorizations/new_authorization_default.html:292
#: authorizations/templates/authorizations/new_authorization_default.html:289
msgid "Date(s) d'occupation"
msgstr "Bezettingsdatum(-data)"
#: authorizations/templates/authorizations/new_authorization_default.html:298
#: authorizations/templates/authorizations/new_authorization_default.html:295
msgid "Veuillez indiquer au moins une date de début d'occupation."
msgstr "Geef ten minste één begindatum van de bezetting op."
#: authorizations/templates/authorizations/new_authorization_default.html:328
#: authorizations/templates/authorizations/new_authorization_default.html:325
msgid "Ajouter une date"
msgstr "Een datum toevoegen"
#: authorizations/templates/authorizations/new_authorization_default.html:336
#: authorizations/templates/authorizations/new_authorization_default.html:333
msgid "Document(s) à joindre"
msgstr "Bij te voegen document(en)"
#: authorizations/templates/authorizations/new_authorization_default.html:360
#: authorizations/templates/authorizations/new_authorization_default.html:357
msgid "Ajouter un document"
msgstr "Een document toevoegen"
#: authorizations/templates/authorizations/new_authorization_default.html:367
#: authorizations/templates/authorizations/new_authorization_default.html:364
msgid "Envoyer la demande"
msgstr "De aanvraag verzenden"
#: authorizations/templates/authorizations/new_authorization_default.html:385
#: authorizations/templates/authorizations/new_authorization_default.html:382
msgid ""
"Veillez à joindre en annexe l'attestation d'assurance couvrant tous les "
"risques."
msgstr "Voeg als bijlage het verzekeringsbewijs bij dat alle risico's dekt."
#: authorizations/templates/authorizations/new_authorization_default.html:386
msgid "Veillez à joindre en annexe l'autorisation de la commune."
msgstr "Voeg als bijlage de gemeentelijke toestemming bij."
#: authorizations/templates/authorizations/new_authorization_default.html:472
#: authorizations/templates/authorizations/new_authorization_default.html:521
#: authorizations/templates/authorizations/new_authorization_default.html:468
#: authorizations/templates/authorizations/new_authorization_default.html:576
msgid "Polygone enregistré. Cliquez sur « Dessiner » pour le redessiner."
msgstr "Veelhoek opgeslagen. Klik op « Tekenen » om hem opnieuw te tekenen."
#: authorizations/templates/authorizations/new_authorization_default.html:492
#: authorizations/templates/authorizations/new_authorization_default.html:496
msgid "Cliquer pour fermer le polygone"
msgstr "Klik om de veelhoek te sluiten"
#: authorizations/templates/authorizations/new_authorization_default.html:536
msgid ""
"Cliquez sur « Dessiner un polygone » puis cliquez sur la carte pour ajouter "
"des sommets."
msgstr ""
"Klik op « Veelhoek tekenen » en klik vervolgens op de kaart om hoekpunten "
"toe te voegen."
#: authorizations/templates/authorizations/new_authorization_default.html:584
msgid "Cliquez sur la carte pour ajouter des sommets."
msgstr "Klik op de kaart om hoekpunten toe te voegen."
#: authorizations/templates/authorizations/new_authorization_default.html:559
#: authorizations/templates/authorizations/new_authorization_default.html:586
msgid ""
"Cliquez sur la carte pour ajouter des sommets. Cliquez sur le premier sommet"
" pour fermer le polygone."
msgstr ""
#: authorizations/views.py:326 authorizations/views.py:375
#: authorizations/views.py:326 authorizations/views.py:390
msgid "Vous n'avez pas accès à cette vue."
msgstr ""
#: authorizations/views.py:392
#: authorizations/views.py:407
msgid "La demande a été mise à jour avec succès."
msgstr ""
#: authorizations/views.py:409
#: authorizations/views.py:424
msgid "Le document a été ajouté avec succès."
msgstr ""
#: authorizations/views.py:413
#: authorizations/views.py:428
msgid "Veuillez fournir une description et un fichier."
msgstr ""
#~ msgid "Terminer"
#~ msgstr "Voltooien"
#~ msgid "Veillez à joindre en annexe l'autorisation de la commune."
#~ msgstr "Voeg als bijlage de gemeentelijke toestemming bij."
#~ msgid "Autorisation de voirie"
#~ msgstr "Wegvergunning"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -135,7 +135,7 @@ msgstr "Choose language"
#: common/templates/common/account_info.html:42
#: common/templates/common/account_info.html:88
#: common/templates/common/components/document_viewer.html:201
#: common/templates/common/components/document_viewer.html:204
msgid "Fermer"
msgstr "Close"
@ -161,56 +161,56 @@ msgstr "Sign out"
msgid "Retour"
msgstr "Back"
#: common/templates/common/components/document_viewer.html:40
#: common/templates/common/components/document_viewer.html:50
#: common/templates/common/components/document_viewer.html:61
#: common/templates/common/components/document_viewer.html:41
#: common/templates/common/components/document_viewer.html:51
#: common/templates/common/components/document_viewer.html:62
msgid "Supprimer"
msgstr "Delete"
#: common/templates/common/components/document_viewer.html:75
#: common/templates/common/components/document_viewer.html:76
msgid "Copier vers une localisation ou un asset"
msgstr "Copy to a location or an asset"
#: common/templates/common/components/document_viewer.html:99
#: common/templates/common/components/document_viewer.html:154
#: common/templates/common/components/document_viewer.html:100
#: common/templates/common/components/document_viewer.html:155
msgid "Historique des versions"
msgstr "Version history"
#: common/templates/common/components/document_viewer.html:156
#: common/templates/common/components/document_viewer.html:157
msgid "Historique"
msgstr "History"
#: common/templates/common/components/document_viewer.html:180
#: common/templates/common/components/document_viewer.html:183
msgid "Visionneuse de documents"
msgstr "Document viewer"
#: common/templates/common/components/document_viewer.html:188
#: common/templates/common/components/document_viewer.html:191
msgid "Ouvrir en pleine page"
msgstr "Open in full screen"
#: common/templates/common/components/document_viewer.html:195
#: common/templates/common/components/document_viewer.html:196
#: common/templates/common/components/document_viewer.html:261
#: common/templates/common/components/document_viewer.html:198
#: common/templates/common/components/document_viewer.html:199
#: common/templates/common/components/document_viewer.html:264
msgid "Télécharger"
msgstr "Download"
#: common/templates/common/components/document_viewer.html:229
#: common/templates/common/components/document_viewer.html:232
msgid "File truncated to the first 50 000 characters."
msgstr "File truncated to the first 50,000 characters."
#: common/templates/common/components/document_viewer.html:245
#: common/templates/common/components/document_viewer.html:248
msgid "Only the first 200 rows are shown."
msgstr "Only the first 200 rows are shown."
#: common/templates/common/components/document_viewer.html:301
#: common/templates/common/components/document_viewer.html:309
msgid "Précédent"
msgstr "Previous"
#: common/templates/common/components/document_viewer.html:309
#: common/templates/common/components/document_viewer.html:317
msgid "Suivant"
msgstr "Next"
#: common/templates/common/components/document_viewer.html:432
#: common/templates/common/components/document_viewer.html:442
msgid "Aucun document associé"
msgstr "No associated document"
@ -310,128 +310,128 @@ msgstr ""
msgid "Réduire en panneau latéral"
msgstr ""
#: common/tests.py:48 common/tests.py:80 common/views.py:265
#: common/tests.py:49 common/tests.py:81 common/views.py:265
#: common/views.py:269 common/views.py:280
msgid "Vous ne pouvez pas accéder à ce compte."
msgstr "You cannot access this account."
#: common/utils.py:133
#: common/utils.py:169
msgid "Belgique (PEB / Maison Communale / Sécurité PMR)"
msgstr "Belgium (PEB / Town Hall / PRM Safety)"
#: common/utils.py:134
#: common/utils.py:170
msgid "Hôtel de Ville / Maison Communale"
msgstr "Town Hall / Municipal Building"
#: common/utils.py:135
#: common/utils.py:171
msgid "PEB"
msgstr "PEB"
#: common/utils.py:136
#: common/utils.py:172
msgid "Performance Énergétique des Bâtiments (PEB)"
msgstr "Building Energy Performance (PEB)"
#: common/utils.py:137
#: common/utils.py:173
msgid "Bilan Carbone"
msgstr "Carbon Footprint"
#: common/utils.py:138
#: common/utils.py:174
msgid "Émissions de Carbone / Bilan Énergétique"
msgstr "Carbon Emissions / Energy Audit"
#: common/utils.py:139
#: common/utils.py:175
msgid "Accès public & PMR"
msgstr "Public & PRM Access"
#: common/utils.py:140
#: common/utils.py:176
msgid "Accueil & Sécurité du Public (Normes PMR)"
msgstr "Public Reception & Safety (PRM Standards)"
#: common/utils.py:141
#: common/utils.py:177
msgid "Catégorie d'accueil"
msgstr "Reception Category"
#: common/utils.py:142
#: common/utils.py:178
msgid "Type d'affectation"
msgstr "Assignment Type"
#: common/utils.py:145
#: common/utils.py:181
msgid "France (DPE / GES / Mairie / ERP)"
msgstr "France (DPE / GHG / Town Hall / ERP)"
#: common/utils.py:146
#: common/utils.py:182
msgid "Mairie / Hôtel de Ville"
msgstr "Town Hall / City Hall"
#: common/utils.py:147
#: common/utils.py:183
msgid "DPE"
msgstr "DPE"
#: common/utils.py:148
#: common/utils.py:184
msgid "Diagnostic de Performance Énergétique (DPE)"
msgstr "Energy Performance Certificate (DPE)"
#: common/utils.py:149
#: common/utils.py:185
msgid "GES"
msgstr "GHG"
#: common/utils.py:150
#: common/utils.py:186
msgid "Émissions de Gaz à Effet de Serre (GES)"
msgstr "Greenhouse Gas Emissions (GHG)"
#: common/utils.py:151
#: common/utils.py:187
msgid "ERP"
msgstr "ERP"
#: common/utils.py:152
#: common/utils.py:188
msgid "Établissement Recevant du Public (ERP)"
msgstr "Public Reception Facility (ERP)"
#: common/utils.py:153
#: common/utils.py:189
msgid "Catégorie ERP"
msgstr "ERP Category"
#: common/utils.py:154
#: common/utils.py:190
msgid "Type ERP"
msgstr "ERP Type"
#: common/utils.py:157
#: common/utils.py:193
msgid "International / Générique"
msgstr "International / Generic"
#: common/utils.py:158
#: common/utils.py:194
msgid "Bâtiment Administratif / Hôtel de Ville"
msgstr "Administrative Building / Town Hall"
#: common/utils.py:159
#: common/utils.py:195
msgid "PEB / DPE"
msgstr "EPC / Energy Diag"
#: common/utils.py:160
#: common/utils.py:196
msgid "Performance Énergétique (PEB / DPE / EPC)"
msgstr "Energy Performance (PEB / DPE / EPC)"
#: common/utils.py:161
#: common/utils.py:197
msgid "Émissions Carbone"
msgstr "Carbon Emissions"
#: common/utils.py:162
#: common/utils.py:198
msgid "Bilan Carbone & Émissions"
msgstr "Carbon Footprint & Emissions"
#: common/utils.py:163
#: common/utils.py:199
msgid "Accès Public"
msgstr "Public Access"
#: common/utils.py:164
#: common/utils.py:200
msgid "Bâtiment d'Accueil du Public (ERP / PMR)"
msgstr "Public Reception Building (ERP / PRM)"
#: common/utils.py:165
#: common/utils.py:201
msgid "Capacité d'accueil"
msgstr "Reception Capacity"
#: common/utils.py:166
#: common/utils.py:202
msgid "Type d'établissement"
msgstr "Establishment Type"
@ -464,8 +464,8 @@ msgid "Changement de compte effectué."
msgstr "Account switch completed."
#: common/views.py:304 common/views.py:329 common/views.py:356
#: common/views.py:397 common/views.py:428 common/views.py:457
#: common/views.py:524 common/views.py:551
#: common/views.py:397 common/views.py:428 common/views.py:459
#: common/views.py:488 common/views.py:555 common/views.py:582
msgid "Données invalides"
msgstr "Invalid data"
@ -474,18 +474,19 @@ msgid "Layout invalide"
msgstr "Invalid layout"
#: common/views.py:316 common/views.py:341 common/views.py:383
#: common/views.py:414 common/views.py:445 common/views.py:511
#: common/views.py:537 common/views.py:568 common/views.py:586
#: common/views.py:414 common/views.py:445 common/views.py:476
#: common/views.py:542 common/views.py:568 common/views.py:599
#: common/views.py:617
msgid "Configuration utilisateur non trouvée"
msgstr "User configuration not found"
#: common/views.py:363 common/views.py:403 common/views.py:434
#: common/views.py:557
#: common/views.py:465 common/views.py:588
msgid "Format de filtres invalide"
msgstr "Invalid filter format"
#: common/views.py:367 common/views.py:406 common/views.py:437
#: common/views.py:560
#: common/views.py:468 common/views.py:591
msgid "Format de tri invalide"
msgstr "Invalid sort format"
@ -493,50 +494,50 @@ msgstr "Invalid sort format"
msgid "Format de colonnes invalide"
msgstr "Invalid column format"
#: common/views.py:472
#: common/views.py:503
msgid "Format de thématiques invalide"
msgstr "Invalid thematic format"
#: common/views.py:474
#: common/views.py:505
msgid "Format de catégories invalide"
msgstr "Invalid category format"
#: common/views.py:476
#: common/views.py:507
msgid "Format de modèles invalide"
msgstr "Invalid model format"
#: common/views.py:478
#: common/views.py:509
msgid "Format de filtres thématiques invalide"
msgstr "Invalid thematic filter format"
#: common/views.py:480
#: common/views.py:511
msgid "Format de colonnes visibles invalide"
msgstr "Invalid visible columns format"
#: common/views.py:482
#: common/views.py:513
msgid "Format de filtre type invalide"
msgstr "Invalid type filter format"
#: common/views.py:484
#: common/views.py:515
msgid "Format de filtres statut invalide"
msgstr "Invalid status filter format"
#: common/views.py:486
#: common/views.py:517
msgid "Format de filtres statut de validation invalide"
msgstr "Invalid validation status filter format"
#: common/views.py:530
#: common/views.py:561
msgid "Format de préférences invalide"
msgstr "Invalid filter format"
#: common/views.py:581 common/views.py:607
#: common/views.py:612 common/views.py:638
msgid "Document non trouvé"
msgstr "No street found"
#: common/views.py:591 common/views.py:595
#: common/views.py:622 common/views.py:626
msgid "Accès interdit"
msgstr ""
#: common/views.py:613
#: common/views.py:644
msgid "Erreur lors de la lecture du document"
msgstr "Erreur lors de la lecture du document"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,10 +18,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: common/middleware.py:154
msgid ""
"Votre session a expiré après le délai configuré. Veuillez vous reconnecter."
msgstr ""
"Votre session a expiré après le délai configuré. Veuillez vous reconnecter."
msgid "Votre session a expiré après le délai configuré. Veuillez vous reconnecter."
msgstr "Votre session a expiré après le délai configuré. Veuillez vous reconnecter."
#: common/models.py:162
msgid "Français"
@ -48,9 +46,7 @@ msgid "Activer les rappels par e-mail"
msgstr "Activer les rappels par e-mail"
#: common/models.py:176
msgid ""
"Recevoir un e-mail de rappel pour les notifications non lues après un "
"certain délai."
msgid "Recevoir un e-mail de rappel pour les notifications non lues après un certain délai."
msgstr ""
#: common/models.py:181
@ -58,9 +54,7 @@ msgid "E-mail(s) de réception des rappels"
msgstr "E-mail(s) de réception des rappels"
#: common/models.py:182
msgid ""
"Adresses e-mail séparées par des virgules. Si vide, l'adresse de votre "
"compte sera utilisée."
msgid "Adresses e-mail séparées par des virgules. Si vide, l'adresse de votre compte sera utilisée."
msgstr ""
#: common/models.py:186
@ -68,9 +62,7 @@ msgid "Délai avant rappel (en heures)"
msgstr "Délai avant rappel (en heures)"
#: common/models.py:187
msgid ""
"Nombre d'heures écoulées après la réception d'une notification avant l'envoi "
"d'un rappel par e-mail."
msgid "Nombre d'heures écoulées après la réception d'une notification avant l'envoi d'un rappel par e-mail."
msgstr ""
#: common/private_files/views.py:37
@ -135,7 +127,7 @@ msgstr "Choisir la langue"
#: common/templates/common/account_info.html:42
#: common/templates/common/account_info.html:88
#: common/templates/common/components/document_viewer.html:201
#: common/templates/common/components/document_viewer.html:204
msgid "Fermer"
msgstr "Fermer"
@ -161,56 +153,56 @@ msgstr "Se déconnecter"
msgid "Retour"
msgstr "Retour"
#: common/templates/common/components/document_viewer.html:40
#: common/templates/common/components/document_viewer.html:50
#: common/templates/common/components/document_viewer.html:61
#: common/templates/common/components/document_viewer.html:41
#: common/templates/common/components/document_viewer.html:51
#: common/templates/common/components/document_viewer.html:62
msgid "Supprimer"
msgstr "Supprimer"
#: common/templates/common/components/document_viewer.html:75
#: common/templates/common/components/document_viewer.html:76
msgid "Copier vers une localisation ou un asset"
msgstr "Copier vers une localisation ou un asset"
#: common/templates/common/components/document_viewer.html:99
#: common/templates/common/components/document_viewer.html:154
#: common/templates/common/components/document_viewer.html:100
#: common/templates/common/components/document_viewer.html:155
msgid "Historique des versions"
msgstr "Historique des versions"
#: common/templates/common/components/document_viewer.html:156
#: common/templates/common/components/document_viewer.html:157
msgid "Historique"
msgstr "Historique"
#: common/templates/common/components/document_viewer.html:180
#: common/templates/common/components/document_viewer.html:183
msgid "Visionneuse de documents"
msgstr "Visionneuse de documents"
#: common/templates/common/components/document_viewer.html:188
#: common/templates/common/components/document_viewer.html:191
msgid "Ouvrir en pleine page"
msgstr "Ouvrir en pleine page"
#: common/templates/common/components/document_viewer.html:195
#: common/templates/common/components/document_viewer.html:196
#: common/templates/common/components/document_viewer.html:261
#: common/templates/common/components/document_viewer.html:198
#: common/templates/common/components/document_viewer.html:199
#: common/templates/common/components/document_viewer.html:264
msgid "Télécharger"
msgstr "Télécharger"
#: common/templates/common/components/document_viewer.html:229
#: common/templates/common/components/document_viewer.html:232
msgid "File truncated to the first 50 000 characters."
msgstr "File truncated to the first 50 000 characters."
#: common/templates/common/components/document_viewer.html:245
#: common/templates/common/components/document_viewer.html:248
msgid "Only the first 200 rows are shown."
msgstr "Only the first 200 rows are shown."
#: common/templates/common/components/document_viewer.html:301
#: common/templates/common/components/document_viewer.html:309
msgid "Précédent"
msgstr "Précédent"
#: common/templates/common/components/document_viewer.html:309
#: common/templates/common/components/document_viewer.html:317
msgid "Suivant"
msgstr "Suivant"
#: common/templates/common/components/document_viewer.html:432
#: common/templates/common/components/document_viewer.html:442
msgid "Aucun document associé"
msgstr "Aucun document associé"
@ -252,9 +244,7 @@ msgid "Concepts et notions clés de StreetUp"
msgstr "Concepts et notions clés de StreetUp"
#: common/templates/common/components/help_panel.html:56
msgid ""
"Comprendre la différence entre Assets, Observations, Inspections, "
"Interventions et Contrôles."
msgid "Comprendre la différence entre Assets, Observations, Inspections, Interventions et Contrôles."
msgstr ""
#: common/templates/common/components/help_panel.html:64
@ -270,32 +260,24 @@ msgid "Statuts des interventions"
msgstr "Statuts des interventions"
#: common/templates/common/components/help_panel.html:74
msgid ""
"Comprendre le cycle de vie d'une intervention à travers ses différents "
"statuts."
msgstr ""
"Comprendre le cycle de vie d'une intervention à travers ses différents "
"statuts."
msgid "Comprendre le cycle de vie d'une intervention à travers ses différents statuts."
msgstr "Comprendre le cycle de vie d'une intervention à travers ses différents statuts."
#: common/templates/common/components/help_panel.html:83
msgid "Approuver des interventions"
msgstr "Approuver des interventions"
#: common/templates/common/components/help_panel.html:84
msgid ""
"Guide destiné aux gestionnaires pour valider et approuver les chantiers."
msgstr ""
"Guide destiné aux gestionnaires pour valider et approuver les chantiers."
msgid "Guide destiné aux gestionnaires pour valider et approuver les chantiers."
msgstr "Guide destiné aux gestionnaires pour valider et approuver les chantiers."
#: common/templates/common/components/help_panel.html:94
msgid "Gérer les projets"
msgstr "Gérer les projets"
#: common/templates/common/components/help_panel.html:95
msgid ""
"Comment regrouper les interventions et suivre la progression des chantiers."
msgstr ""
"Comment regrouper les interventions et suivre la progression des chantiers."
msgid "Comment regrouper les interventions et suivre la progression des chantiers."
msgstr "Comment regrouper les interventions et suivre la progression des chantiers."
#: common/templates/common/components/help_panel.html:105
msgid "Ajouter un contrôle"
@ -314,128 +296,128 @@ msgstr "Aucun guide ne correspond à votre recherche."
msgid "Réduire en panneau latéral"
msgstr "Réduire en panneau latéral"
#: common/tests.py:48 common/tests.py:80 common/views.py:265
#: common/tests.py:49 common/tests.py:81 common/views.py:265
#: common/views.py:269 common/views.py:280
msgid "Vous ne pouvez pas accéder à ce compte."
msgstr "Vous ne pouvez pas accéder à ce compte."
#: common/utils.py:133
#: common/utils.py:169
msgid "Belgique (PEB / Maison Communale / Sécurité PMR)"
msgstr "Belgique (PEB / Maison Communale / Sécurité PMR)"
#: common/utils.py:134
#: common/utils.py:170
msgid "Hôtel de Ville / Maison Communale"
msgstr "Hôtel de Ville / Maison Communale"
#: common/utils.py:135
#: common/utils.py:171
msgid "PEB"
msgstr "PEB"
#: common/utils.py:136
#: common/utils.py:172
msgid "Performance Énergétique des Bâtiments (PEB)"
msgstr "Performance Énergétique des Bâtiments (PEB)"
#: common/utils.py:137
#: common/utils.py:173
msgid "Bilan Carbone"
msgstr "Bilan Carbone"
#: common/utils.py:138
#: common/utils.py:174
msgid "Émissions de Carbone / Bilan Énergétique"
msgstr "Émissions de Carbone / Bilan Énergétique"
#: common/utils.py:139
#: common/utils.py:175
msgid "Accès public & PMR"
msgstr "Accès public & PMR"
#: common/utils.py:140
#: common/utils.py:176
msgid "Accueil & Sécurité du Public (Normes PMR)"
msgstr "Accueil & Sécurité du Public (Normes PMR)"
#: common/utils.py:141
#: common/utils.py:177
msgid "Catégorie d'accueil"
msgstr "Catégorie d'accueil"
#: common/utils.py:142
#: common/utils.py:178
msgid "Type d'affectation"
msgstr "Type d'affectation"
#: common/utils.py:145
#: common/utils.py:181
msgid "France (DPE / GES / Mairie / ERP)"
msgstr "France (DPE / GES / Mairie / ERP)"
#: common/utils.py:146
#: common/utils.py:182
msgid "Mairie / Hôtel de Ville"
msgstr "Mairie / Hôtel de Ville"
#: common/utils.py:147
#: common/utils.py:183
msgid "DPE"
msgstr "DPE"
#: common/utils.py:148
#: common/utils.py:184
msgid "Diagnostic de Performance Énergétique (DPE)"
msgstr "Diagnostic de Performance Énergétique (DPE)"
#: common/utils.py:149
#: common/utils.py:185
msgid "GES"
msgstr "GES"
#: common/utils.py:150
#: common/utils.py:186
msgid "Émissions de Gaz à Effet de Serre (GES)"
msgstr "Émissions de Gaz à Effet de Serre (GES)"
#: common/utils.py:151
#: common/utils.py:187
msgid "ERP"
msgstr "ERP"
#: common/utils.py:152
#: common/utils.py:188
msgid "Établissement Recevant du Public (ERP)"
msgstr "Établissement Recevant du Public (ERP)"
#: common/utils.py:153
#: common/utils.py:189
msgid "Catégorie ERP"
msgstr "Catégorie ERP"
#: common/utils.py:154
#: common/utils.py:190
msgid "Type ERP"
msgstr "Type ERP"
#: common/utils.py:157
#: common/utils.py:193
msgid "International / Générique"
msgstr "International / Générique"
#: common/utils.py:158
#: common/utils.py:194
msgid "Bâtiment Administratif / Hôtel de Ville"
msgstr "Bâtiment Administratif / Hôtel de Ville"
#: common/utils.py:159
#: common/utils.py:195
msgid "PEB / DPE"
msgstr "PEB / DPE"
#: common/utils.py:160
#: common/utils.py:196
msgid "Performance Énergétique (PEB / DPE / EPC)"
msgstr "Performance Énergétique (PEB / DPE / EPC)"
#: common/utils.py:161
#: common/utils.py:197
msgid "Émissions Carbone"
msgstr "Émissions Carbone"
#: common/utils.py:162
#: common/utils.py:198
msgid "Bilan Carbone & Émissions"
msgstr "Bilan Carbone & Émissions"
#: common/utils.py:163
#: common/utils.py:199
msgid "Accès Public"
msgstr "Accès Public"
#: common/utils.py:164
#: common/utils.py:200
msgid "Bâtiment d'Accueil du Public (ERP / PMR)"
msgstr "Bâtiment d'Accueil du Public (ERP / PMR)"
#: common/utils.py:165
#: common/utils.py:201
msgid "Capacité d'accueil"
msgstr "Capacité d'accueil"
#: common/utils.py:166
#: common/utils.py:202
msgid "Type d'établissement"
msgstr "Type d'établissement"
@ -468,8 +450,8 @@ msgid "Changement de compte effectué."
msgstr "Changement de compte effectué."
#: common/views.py:304 common/views.py:329 common/views.py:356
#: common/views.py:397 common/views.py:428 common/views.py:457
#: common/views.py:524 common/views.py:551
#: common/views.py:397 common/views.py:428 common/views.py:459
#: common/views.py:488 common/views.py:555 common/views.py:582
msgid "Données invalides"
msgstr "Données invalides"
@ -478,18 +460,19 @@ msgid "Layout invalide"
msgstr "Layout invalide"
#: common/views.py:316 common/views.py:341 common/views.py:383
#: common/views.py:414 common/views.py:445 common/views.py:511
#: common/views.py:537 common/views.py:568 common/views.py:586
#: common/views.py:414 common/views.py:445 common/views.py:476
#: common/views.py:542 common/views.py:568 common/views.py:599
#: common/views.py:617
msgid "Configuration utilisateur non trouvée"
msgstr "Configuration utilisateur non trouvée"
#: common/views.py:363 common/views.py:403 common/views.py:434
#: common/views.py:557
#: common/views.py:465 common/views.py:588
msgid "Format de filtres invalide"
msgstr "Format de filtres invalide"
#: common/views.py:367 common/views.py:406 common/views.py:437
#: common/views.py:560
#: common/views.py:468 common/views.py:591
msgid "Format de tri invalide"
msgstr "Format de tri invalide"
@ -497,50 +480,50 @@ msgstr "Format de tri invalide"
msgid "Format de colonnes invalide"
msgstr "Format de colonnes invalide"
#: common/views.py:472
#: common/views.py:503
msgid "Format de thématiques invalide"
msgstr "Format de thématiques invalide"
#: common/views.py:474
#: common/views.py:505
msgid "Format de catégories invalide"
msgstr "Format de catégories invalide"
#: common/views.py:476
#: common/views.py:507
msgid "Format de modèles invalide"
msgstr "Format de modèles invalide"
#: common/views.py:478
#: common/views.py:509
msgid "Format de filtres thématiques invalide"
msgstr "Format de filtres thématiques invalide"
#: common/views.py:480
#: common/views.py:511
msgid "Format de colonnes visibles invalide"
msgstr "Format de colonnes visibles invalide"
#: common/views.py:482
#: common/views.py:513
msgid "Format de filtre type invalide"
msgstr "Format de filtre type invalide"
#: common/views.py:484
#: common/views.py:515
msgid "Format de filtres statut invalide"
msgstr "Format de filtres statut invalide"
#: common/views.py:486
#: common/views.py:517
msgid "Format de filtres statut de validation invalide"
msgstr "Format de filtres statut de validation invalide"
#: common/views.py:530
#: common/views.py:561
msgid "Format de préférences invalide"
msgstr "Format de préférences invalide"
#: common/views.py:581 common/views.py:607
#: common/views.py:612 common/views.py:638
msgid "Document non trouvé"
msgstr "Document non trouvé"
#: common/views.py:591 common/views.py:595
#: common/views.py:622 common/views.py:626
msgid "Accès interdit"
msgstr "Accès interdit"
#: common/views.py:613
#: common/views.py:644
msgid "Erreur lors de la lecture du document"
msgstr "Erreur lors de la lecture du document"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,11 +18,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: common/middleware.py:154
msgid ""
"Votre session a expiré après le délai configuré. Veuillez vous reconnecter."
msgstr ""
"Uw sessie is verlopen na de ingestelde time-out. Gelieve opnieuw in te "
"loggen."
msgid "Votre session a expiré après le délai configuré. Veuillez vous reconnecter."
msgstr "Uw sessie is verlopen na de ingestelde time-out. Gelieve opnieuw in te loggen."
#: common/models.py:162
msgid "Français"
@ -49,9 +46,7 @@ msgid "Activer les rappels par e-mail"
msgstr "E-mailherinneringen inschakelen"
#: common/models.py:176
msgid ""
"Recevoir un e-mail de rappel pour les notifications non lues après un "
"certain délai."
msgid "Recevoir un e-mail de rappel pour les notifications non lues après un certain délai."
msgstr ""
#: common/models.py:181
@ -59,9 +54,7 @@ msgid "E-mail(s) de réception des rappels"
msgstr "E-mailadres(sen) voor herinneringen"
#: common/models.py:182
msgid ""
"Adresses e-mail séparées par des virgules. Si vide, l'adresse de votre "
"compte sera utilisée."
msgid "Adresses e-mail séparées par des virgules. Si vide, l'adresse de votre compte sera utilisée."
msgstr ""
#: common/models.py:186
@ -69,9 +62,7 @@ msgid "Délai avant rappel (en heures)"
msgstr "Wachttijd vóór herinnering (in uren)"
#: common/models.py:187
msgid ""
"Nombre d'heures écoulées après la réception d'une notification avant l'envoi "
"d'un rappel par e-mail."
msgid "Nombre d'heures écoulées après la réception d'une notification avant l'envoi d'un rappel par e-mail."
msgstr ""
#: common/private_files/views.py:37
@ -136,7 +127,7 @@ msgstr "Kies de taal"
#: common/templates/common/account_info.html:42
#: common/templates/common/account_info.html:88
#: common/templates/common/components/document_viewer.html:201
#: common/templates/common/components/document_viewer.html:204
msgid "Fermer"
msgstr "Sluiten"
@ -162,56 +153,56 @@ msgstr "Afmelden"
msgid "Retour"
msgstr "Terug"
#: common/templates/common/components/document_viewer.html:40
#: common/templates/common/components/document_viewer.html:50
#: common/templates/common/components/document_viewer.html:61
#: common/templates/common/components/document_viewer.html:41
#: common/templates/common/components/document_viewer.html:51
#: common/templates/common/components/document_viewer.html:62
msgid "Supprimer"
msgstr "Verwijderen"
#: common/templates/common/components/document_viewer.html:75
#: common/templates/common/components/document_viewer.html:76
msgid "Copier vers une localisation ou un asset"
msgstr "Kopiëren naar een locatie of asset"
#: common/templates/common/components/document_viewer.html:99
#: common/templates/common/components/document_viewer.html:154
#: common/templates/common/components/document_viewer.html:100
#: common/templates/common/components/document_viewer.html:155
msgid "Historique des versions"
msgstr "Versiegeschiedenis"
#: common/templates/common/components/document_viewer.html:156
#: common/templates/common/components/document_viewer.html:157
msgid "Historique"
msgstr "Geschiedenis"
#: common/templates/common/components/document_viewer.html:180
#: common/templates/common/components/document_viewer.html:183
msgid "Visionneuse de documents"
msgstr "Documentviewer"
#: common/templates/common/components/document_viewer.html:188
#: common/templates/common/components/document_viewer.html:191
msgid "Ouvrir en pleine page"
msgstr "Volledig scherm openen"
#: common/templates/common/components/document_viewer.html:195
#: common/templates/common/components/document_viewer.html:196
#: common/templates/common/components/document_viewer.html:261
#: common/templates/common/components/document_viewer.html:198
#: common/templates/common/components/document_viewer.html:199
#: common/templates/common/components/document_viewer.html:264
msgid "Télécharger"
msgstr "Downloaden"
#: common/templates/common/components/document_viewer.html:229
#: common/templates/common/components/document_viewer.html:232
msgid "File truncated to the first 50 000 characters."
msgstr "Bestand ingekort tot de eerste 50.000 tekens."
#: common/templates/common/components/document_viewer.html:245
#: common/templates/common/components/document_viewer.html:248
msgid "Only the first 200 rows are shown."
msgstr "Alleen de eerste 200 rijen worden weergegeven."
#: common/templates/common/components/document_viewer.html:301
#: common/templates/common/components/document_viewer.html:309
msgid "Précédent"
msgstr "Vorige"
#: common/templates/common/components/document_viewer.html:309
#: common/templates/common/components/document_viewer.html:317
msgid "Suivant"
msgstr "Volgende"
#: common/templates/common/components/document_viewer.html:432
#: common/templates/common/components/document_viewer.html:442
msgid "Aucun document associé"
msgstr "Geen gekoppeld document"
@ -253,9 +244,7 @@ msgid "Concepts et notions clés de StreetUp"
msgstr ""
#: common/templates/common/components/help_panel.html:56
msgid ""
"Comprendre la différence entre Assets, Observations, Inspections, "
"Interventions et Contrôles."
msgid "Comprendre la différence entre Assets, Observations, Inspections, Interventions et Contrôles."
msgstr ""
#: common/templates/common/components/help_panel.html:64
@ -271,9 +260,7 @@ msgid "Statuts des interventions"
msgstr ""
#: common/templates/common/components/help_panel.html:74
msgid ""
"Comprendre le cycle de vie d'une intervention à travers ses différents "
"statuts."
msgid "Comprendre le cycle de vie d'une intervention à travers ses différents statuts."
msgstr ""
#: common/templates/common/components/help_panel.html:83
@ -281,8 +268,7 @@ msgid "Approuver des interventions"
msgstr ""
#: common/templates/common/components/help_panel.html:84
msgid ""
"Guide destiné aux gestionnaires pour valider et approuver les chantiers."
msgid "Guide destiné aux gestionnaires pour valider et approuver les chantiers."
msgstr ""
#: common/templates/common/components/help_panel.html:94
@ -290,8 +276,7 @@ msgid "Gérer les projets"
msgstr ""
#: common/templates/common/components/help_panel.html:95
msgid ""
"Comment regrouper les interventions et suivre la progression des chantiers."
msgid "Comment regrouper les interventions et suivre la progression des chantiers."
msgstr ""
#: common/templates/common/components/help_panel.html:105
@ -311,128 +296,128 @@ msgstr ""
msgid "Réduire en panneau latéral"
msgstr ""
#: common/tests.py:48 common/tests.py:80 common/views.py:265
#: common/tests.py:49 common/tests.py:81 common/views.py:265
#: common/views.py:269 common/views.py:280
msgid "Vous ne pouvez pas accéder à ce compte."
msgstr "U hebt geen toegang tot dit account."
#: common/utils.py:133
#: common/utils.py:169
msgid "Belgique (PEB / Maison Communale / Sécurité PMR)"
msgstr "België (EPB / Gemeentehuis / PMR-veiligheid)"
#: common/utils.py:134
#: common/utils.py:170
msgid "Hôtel de Ville / Maison Communale"
msgstr "Stadhuis / Gemeentehuis"
#: common/utils.py:135
#: common/utils.py:171
msgid "PEB"
msgstr "EPB"
#: common/utils.py:136
#: common/utils.py:172
msgid "Performance Énergétique des Bâtiments (PEB)"
msgstr "Energieprestatie van Gebouwen (EPB)"
#: common/utils.py:137
#: common/utils.py:173
msgid "Bilan Carbone"
msgstr "Koolstofbalans"
#: common/utils.py:138
#: common/utils.py:174
msgid "Émissions de Carbone / Bilan Énergétique"
msgstr "Koolstofemissies / Energiebalans"
#: common/utils.py:139
#: common/utils.py:175
msgid "Accès public & PMR"
msgstr "Publiekstoegang & PMR"
#: common/utils.py:140
#: common/utils.py:176
msgid "Accueil & Sécurité du Public (Normes PMR)"
msgstr "Publieksontvangst & Veiligheid (PMR-normen)"
#: common/utils.py:141
#: common/utils.py:177
msgid "Catégorie d'accueil"
msgstr "Ontvangstcategorie"
#: common/utils.py:142
#: common/utils.py:178
msgid "Type d'affectation"
msgstr "Bestemmingstype"
#: common/utils.py:145
#: common/utils.py:181
msgid "France (DPE / GES / Mairie / ERP)"
msgstr "Frankrijk (DPE / BKG / Stadhuis / ERP)"
#: common/utils.py:146
#: common/utils.py:182
msgid "Mairie / Hôtel de Ville"
msgstr "Gemeentehuis / Stadhuis"
#: common/utils.py:147
#: common/utils.py:183
msgid "DPE"
msgstr "DPE"
#: common/utils.py:148
#: common/utils.py:184
msgid "Diagnostic de Performance Énergétique (DPE)"
msgstr "Energieprestatiediagnose (DPE)"
#: common/utils.py:149
#: common/utils.py:185
msgid "GES"
msgstr "BKG"
#: common/utils.py:150
#: common/utils.py:186
msgid "Émissions de Gaz à Effet de Serre (GES)"
msgstr "Broeikasgasemissies (BKG)"
#: common/utils.py:151
#: common/utils.py:187
msgid "ERP"
msgstr "ERP"
#: common/utils.py:152
#: common/utils.py:188
msgid "Établissement Recevant du Public (ERP)"
msgstr "Publiek Toegankelijke Inrichting (ERP)"
#: common/utils.py:153
#: common/utils.py:189
msgid "Catégorie ERP"
msgstr "ERP-categorie"
#: common/utils.py:154
#: common/utils.py:190
msgid "Type ERP"
msgstr "ERP-type"
#: common/utils.py:157
#: common/utils.py:193
msgid "International / Générique"
msgstr "Internationaal / Generiek"
#: common/utils.py:158
#: common/utils.py:194
msgid "Bâtiment Administratif / Hôtel de Ville"
msgstr "Administratief Gebouw / Stadhuis"
#: common/utils.py:159
#: common/utils.py:195
msgid "PEB / DPE"
msgstr "EPB / DPE"
#: common/utils.py:160
#: common/utils.py:196
msgid "Performance Énergétique (PEB / DPE / EPC)"
msgstr "Energieprestatie (EPB / DPE / EPC)"
#: common/utils.py:161
#: common/utils.py:197
msgid "Émissions Carbone"
msgstr "Koolstofemissies"
#: common/utils.py:162
#: common/utils.py:198
msgid "Bilan Carbone & Émissions"
msgstr "Koolstofbalans & Emissies"
#: common/utils.py:163
#: common/utils.py:199
msgid "Accès Public"
msgstr "Publiekstoegang"
#: common/utils.py:164
#: common/utils.py:200
msgid "Bâtiment d'Accueil du Public (ERP / PMR)"
msgstr "Publieksontvangstgebouw (ERP / PMR)"
#: common/utils.py:165
#: common/utils.py:201
msgid "Capacité d'accueil"
msgstr "Ontvangstcapaciteit"
#: common/utils.py:166
#: common/utils.py:202
msgid "Type d'établissement"
msgstr "Type inrichting"
@ -465,8 +450,8 @@ msgid "Changement de compte effectué."
msgstr "Accountwissel uitgevoerd."
#: common/views.py:304 common/views.py:329 common/views.py:356
#: common/views.py:397 common/views.py:428 common/views.py:457
#: common/views.py:524 common/views.py:551
#: common/views.py:397 common/views.py:428 common/views.py:459
#: common/views.py:488 common/views.py:555 common/views.py:582
msgid "Données invalides"
msgstr "Ongeldige gegevens"
@ -475,18 +460,19 @@ msgid "Layout invalide"
msgstr "Ongeldige lay-out"
#: common/views.py:316 common/views.py:341 common/views.py:383
#: common/views.py:414 common/views.py:445 common/views.py:511
#: common/views.py:537 common/views.py:568 common/views.py:586
#: common/views.py:414 common/views.py:445 common/views.py:476
#: common/views.py:542 common/views.py:568 common/views.py:599
#: common/views.py:617
msgid "Configuration utilisateur non trouvée"
msgstr "Gebruikersconfiguratie niet gevonden"
#: common/views.py:363 common/views.py:403 common/views.py:434
#: common/views.py:557
#: common/views.py:465 common/views.py:588
msgid "Format de filtres invalide"
msgstr "Ongeldig filterformaat"
#: common/views.py:367 common/views.py:406 common/views.py:437
#: common/views.py:560
#: common/views.py:468 common/views.py:591
msgid "Format de tri invalide"
msgstr "Ongeldig sorteervoorbeeld"
@ -494,50 +480,50 @@ msgstr "Ongeldig sorteervoorbeeld"
msgid "Format de colonnes invalide"
msgstr "Ongeldig kolomformaat"
#: common/views.py:472
#: common/views.py:503
msgid "Format de thématiques invalide"
msgstr "Ongeldig thematiekformaat"
#: common/views.py:474
#: common/views.py:505
msgid "Format de catégories invalide"
msgstr "Ongeldig categorieformaat"
#: common/views.py:476
#: common/views.py:507
msgid "Format de modèles invalide"
msgstr "Ongeldig modelformaat"
#: common/views.py:478
#: common/views.py:509
msgid "Format de filtres thématiques invalide"
msgstr "Ongeldig thematiekfilterformaat"
#: common/views.py:480
#: common/views.py:511
msgid "Format de colonnes visibles invalide"
msgstr "Ongeldig zichtbare kolommenformaat"
#: common/views.py:482
#: common/views.py:513
msgid "Format de filtre type invalide"
msgstr "Ongeldig type-filterformaat"
#: common/views.py:484
#: common/views.py:515
msgid "Format de filtres statut invalide"
msgstr "Ongeldig statusfilterformaat"
#: common/views.py:486
#: common/views.py:517
msgid "Format de filtres statut de validation invalide"
msgstr "Ongeldig validatiestatusfilterformaat"
#: common/views.py:530
#: common/views.py:561
msgid "Format de préférences invalide"
msgstr "Ongeldig filterformaat"
#: common/views.py:581 common/views.py:607
#: common/views.py:612 common/views.py:638
msgid "Document non trouvé"
msgstr "Geen straat gevonden"
#: common/views.py:591 common/views.py:595
#: common/views.py:622 common/views.py:626
msgid "Accès interdit"
msgstr ""
#: common/views.py:613
#: common/views.py:644
msgid "Erreur lors de la lecture du document"
msgstr ""

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-21 12:07+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: 2025-12-04 12:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: English <LL@li.org>\n"
@ -523,88 +523,90 @@ msgstr ""
"and crossing conditions"
#: home/templates/home/widgets/exceptional_transport.html:23
#| msgid "Ouvrages d'art"
msgid "ouvrages sur la carte"
msgstr "structures on the map"
#: home/templates/home/widgets/exceptional_transport.html:26
#: home/templates/home/widgets/exceptional_transport.html:25
msgid "Voir tous les ouvrages d'art"
msgstr "See all structures"
#: home/templates/home/widgets/exceptional_transport.html:27
msgid "Tous les ouvrages"
msgstr "All structures"
#: home/templates/home/widgets/exceptional_transport.html:44
#: home/templates/home/widgets/exceptional_transport.html:45
msgid "Rechercher (ex: OA120, pont, tunnel, passerelle, VNR...)"
msgstr "Search (e.g. OA120, bridge, tunnel, footbridge, VNR...)"
#: home/templates/home/widgets/exceptional_transport.html:46
#: home/templates/home/widgets/exceptional_transport.html:47
msgid "Effacer la recherche"
msgstr "Clear search"
#: home/templates/home/widgets/exceptional_transport.html:61
#: home/templates/home/widgets/exceptional_transport.html:62
msgid "Tous"
msgstr "All"
#: home/templates/home/widgets/exceptional_transport.html:64
#: home/templates/home/widgets/exceptional_transport.html:65
msgid "Autorisé"
msgstr "Authorized"
#: home/templates/home/widgets/exceptional_transport.html:67
#| msgid "Groupes de conditions"
#: home/templates/home/widgets/exceptional_transport.html:68
msgid "Sous conditions"
msgstr "Conditional"
#: home/templates/home/widgets/exceptional_transport.html:70
#: home/templates/home/widgets/exceptional_transport.html:71
msgid "Non évalué"
msgstr "Not evaluated"
#: home/templates/home/widgets/exceptional_transport.html:73
#: home/templates/home/widgets/exceptional_transport.html:74
msgid "Restreint/Interdit"
msgstr "Restricted/Forbidden"
#: home/templates/home/widgets/exceptional_transport.html:85
#: home/templates/home/widgets/exceptional_transport.html:86
msgid "Réinitialiser la vue"
msgstr "Reset view"
#: home/templates/home/widgets/exceptional_transport.html:94
#: home/templates/home/widgets/exceptional_transport.html:95
msgid "Statut de passage"
msgstr "Passage status"
#: home/templates/home/widgets/exceptional_transport.html:99
#: home/templates/home/widgets/exceptional_transport.html:100
msgid "Autorisé (standard / calculé)"
msgstr "Authorized (standard / calculated)"
#: home/templates/home/widgets/exceptional_transport.html:103
#: home/templates/home/widgets/exceptional_transport.html:104
msgid "Sous conditions / prescriptions"
msgstr "Conditional / prescriptions"
#: home/templates/home/widgets/exceptional_transport.html:107
#: home/templates/home/widgets/exceptional_transport.html:108
msgid "Non évalué (fiche à compléter)"
msgstr "Not evaluated (to be completed)"
#: home/templates/home/widgets/exceptional_transport.html:111
#: home/templates/home/widgets/exceptional_transport.html:112
msgid "Interdit / Étude requise"
msgstr "Forbidden / Study required"
#: home/templates/home/widgets/exceptional_transport.html:120
#: home/templates/home/widgets/exceptional_transport.html:121
msgid "Chargement..."
msgstr ""
#: home/templates/home/widgets/exceptional_transport.html:122
#: home/templates/home/widgets/exceptional_transport.html:123
msgid "Chargement du réseau d'ouvrages..."
msgstr "Loading structure network..."
#: home/templates/home/widgets/exceptional_transport.html:464
#: home/templates/home/widgets/exceptional_transport.html:465
msgid "Ouvrir la fiche de l'ouvrage"
msgstr "Open structure detail"
#: home/templates/home/widgets/exceptional_transport.html:490
#: home/templates/home/widgets/exceptional_transport.html:491
msgid "Détail"
msgstr "Detail"
#: home/templates/home/widgets/exceptional_transport.html:501
#: home/templates/home/widgets/exceptional_transport.html:502
msgid "ouvrages à cet endroit"
msgstr "structures at this location"
#: home/templates/home/widgets/exceptional_transport.html:575
#: home/templates/home/widgets/exceptional_transport.html:576
msgid "Aucun ouvrage correspondant trouvé"
msgstr "No matching structure found"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-21 12:07+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: 2025-12-04 12:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: French <LL@li.org>\n"
@ -532,88 +532,90 @@ msgstr ""
"passerelles) et conditions de passage"
#: home/templates/home/widgets/exceptional_transport.html:23
#| msgid "Ouvrages d'art"
msgid "ouvrages sur la carte"
msgstr "ouvrages sur la carte"
#: home/templates/home/widgets/exceptional_transport.html:26
#: home/templates/home/widgets/exceptional_transport.html:25
msgid "Voir tous les ouvrages d'art"
msgstr "Voir tous les ouvrages d'art"
#: home/templates/home/widgets/exceptional_transport.html:27
msgid "Tous les ouvrages"
msgstr "Tous les ouvrages"
#: home/templates/home/widgets/exceptional_transport.html:44
#: home/templates/home/widgets/exceptional_transport.html:45
msgid "Rechercher (ex: OA120, pont, tunnel, passerelle, VNR...)"
msgstr "Rechercher (ex: OA120, pont, tunnel, passerelle, VNR...)"
#: home/templates/home/widgets/exceptional_transport.html:46
#: home/templates/home/widgets/exceptional_transport.html:47
msgid "Effacer la recherche"
msgstr "Effacer la recherche"
#: home/templates/home/widgets/exceptional_transport.html:61
#: home/templates/home/widgets/exceptional_transport.html:62
msgid "Tous"
msgstr "Tous"
#: home/templates/home/widgets/exceptional_transport.html:64
#: home/templates/home/widgets/exceptional_transport.html:65
msgid "Autorisé"
msgstr "Autorisé"
#: home/templates/home/widgets/exceptional_transport.html:67
#| msgid "Groupes de conditions"
#: home/templates/home/widgets/exceptional_transport.html:68
msgid "Sous conditions"
msgstr "Sous conditions"
#: home/templates/home/widgets/exceptional_transport.html:70
#: home/templates/home/widgets/exceptional_transport.html:71
msgid "Non évalué"
msgstr "Non évalué"
#: home/templates/home/widgets/exceptional_transport.html:73
#: home/templates/home/widgets/exceptional_transport.html:74
msgid "Restreint/Interdit"
msgstr "Restreint/Interdit"
#: home/templates/home/widgets/exceptional_transport.html:85
#: home/templates/home/widgets/exceptional_transport.html:86
msgid "Réinitialiser la vue"
msgstr "Réinitialiser la vue"
#: home/templates/home/widgets/exceptional_transport.html:94
#: home/templates/home/widgets/exceptional_transport.html:95
msgid "Statut de passage"
msgstr "Statut de passage"
#: home/templates/home/widgets/exceptional_transport.html:99
#: home/templates/home/widgets/exceptional_transport.html:100
msgid "Autorisé (standard / calculé)"
msgstr "Autorisé (standard / calculé)"
#: home/templates/home/widgets/exceptional_transport.html:103
#: home/templates/home/widgets/exceptional_transport.html:104
msgid "Sous conditions / prescriptions"
msgstr "Sous conditions / prescriptions"
#: home/templates/home/widgets/exceptional_transport.html:107
#: home/templates/home/widgets/exceptional_transport.html:108
msgid "Non évalué (fiche à compléter)"
msgstr "Non évalué (fiche à compléter)"
#: home/templates/home/widgets/exceptional_transport.html:111
#: home/templates/home/widgets/exceptional_transport.html:112
msgid "Interdit / Étude requise"
msgstr "Interdit / Étude requise"
#: home/templates/home/widgets/exceptional_transport.html:120
#: home/templates/home/widgets/exceptional_transport.html:121
msgid "Chargement..."
msgstr ""
#: home/templates/home/widgets/exceptional_transport.html:122
#: home/templates/home/widgets/exceptional_transport.html:123
msgid "Chargement du réseau d'ouvrages..."
msgstr "Chargement du réseau d'ouvrages..."
#: home/templates/home/widgets/exceptional_transport.html:464
#: home/templates/home/widgets/exceptional_transport.html:465
msgid "Ouvrir la fiche de l'ouvrage"
msgstr "Ouvrir la fiche de l'ouvrage"
#: home/templates/home/widgets/exceptional_transport.html:490
#: home/templates/home/widgets/exceptional_transport.html:491
msgid "Détail"
msgstr "Détail"
#: home/templates/home/widgets/exceptional_transport.html:501
#: home/templates/home/widgets/exceptional_transport.html:502
msgid "ouvrages à cet endroit"
msgstr "ouvrages à cet endroit"
#: home/templates/home/widgets/exceptional_transport.html:575
#: home/templates/home/widgets/exceptional_transport.html:576
msgid "Aucun ouvrage correspondant trouvé"
msgstr "Aucun ouvrage correspondant trouvé"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-21 12:07+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: 2025-12-04 12:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Dutch <LL@li.org>\n"
@ -529,88 +529,90 @@ msgstr ""
"voetgangersbruggen) en doorgangsvoorwaarden"
#: home/templates/home/widgets/exceptional_transport.html:23
#| msgid "Ouvrages d'art"
msgid "ouvrages sur la carte"
msgstr "kunstwerken op de kaart"
#: home/templates/home/widgets/exceptional_transport.html:26
#: home/templates/home/widgets/exceptional_transport.html:25
msgid "Voir tous les ouvrages d'art"
msgstr "Bekijk alle kunstwerken"
#: home/templates/home/widgets/exceptional_transport.html:27
msgid "Tous les ouvrages"
msgstr "Alle kunstwerken"
#: home/templates/home/widgets/exceptional_transport.html:44
#: home/templates/home/widgets/exceptional_transport.html:45
msgid "Rechercher (ex: OA120, pont, tunnel, passerelle, VNR...)"
msgstr "Zoeken (bijv. OA120, brug, tunnel, voetgangersbrug, VNR...)"
#: home/templates/home/widgets/exceptional_transport.html:46
#: home/templates/home/widgets/exceptional_transport.html:47
msgid "Effacer la recherche"
msgstr "Zoekopdracht wissen"
#: home/templates/home/widgets/exceptional_transport.html:61
#: home/templates/home/widgets/exceptional_transport.html:62
msgid "Tous"
msgstr "Alle"
#: home/templates/home/widgets/exceptional_transport.html:64
#: home/templates/home/widgets/exceptional_transport.html:65
msgid "Autorisé"
msgstr "Toegestaan"
#: home/templates/home/widgets/exceptional_transport.html:67
#| msgid "Groupes de conditions"
#: home/templates/home/widgets/exceptional_transport.html:68
msgid "Sous conditions"
msgstr "Onder voorwaarden"
#: home/templates/home/widgets/exceptional_transport.html:70
#: home/templates/home/widgets/exceptional_transport.html:71
msgid "Non évalué"
msgstr "Niet geëvalueerd"
#: home/templates/home/widgets/exceptional_transport.html:73
#: home/templates/home/widgets/exceptional_transport.html:74
msgid "Restreint/Interdit"
msgstr "Beperkt/Verboden"
#: home/templates/home/widgets/exceptional_transport.html:85
#: home/templates/home/widgets/exceptional_transport.html:86
msgid "Réinitialiser la vue"
msgstr "Weergave herstellen"
#: home/templates/home/widgets/exceptional_transport.html:94
#: home/templates/home/widgets/exceptional_transport.html:95
msgid "Statut de passage"
msgstr "Doorgangsstatus"
#: home/templates/home/widgets/exceptional_transport.html:99
#: home/templates/home/widgets/exceptional_transport.html:100
msgid "Autorisé (standard / calculé)"
msgstr "Toegestaan (standaard / berekend)"
#: home/templates/home/widgets/exceptional_transport.html:103
#: home/templates/home/widgets/exceptional_transport.html:104
msgid "Sous conditions / prescriptions"
msgstr "Onder voorwaarden / voorschriften"
#: home/templates/home/widgets/exceptional_transport.html:107
#: home/templates/home/widgets/exceptional_transport.html:108
msgid "Non évalué (fiche à compléter)"
msgstr "Niet geëvalueerd (in te vullen)"
#: home/templates/home/widgets/exceptional_transport.html:111
#: home/templates/home/widgets/exceptional_transport.html:112
msgid "Interdit / Étude requise"
msgstr "Verboden / Studie vereist"
#: home/templates/home/widgets/exceptional_transport.html:120
#: home/templates/home/widgets/exceptional_transport.html:121
msgid "Chargement..."
msgstr ""
#: home/templates/home/widgets/exceptional_transport.html:122
#: home/templates/home/widgets/exceptional_transport.html:123
msgid "Chargement du réseau d'ouvrages..."
msgstr "Netwerk van kunstwerken laden..."
#: home/templates/home/widgets/exceptional_transport.html:464
#: home/templates/home/widgets/exceptional_transport.html:465
msgid "Ouvrir la fiche de l'ouvrage"
msgstr "Kunstwerkfiche openen"
#: home/templates/home/widgets/exceptional_transport.html:490
#: home/templates/home/widgets/exceptional_transport.html:491
msgid "Détail"
msgstr "Detail"
#: home/templates/home/widgets/exceptional_transport.html:501
#: home/templates/home/widgets/exceptional_transport.html:502
msgid "ouvrages à cet endroit"
msgstr "kunstwerken op deze locatie"
#: home/templates/home/widgets/exceptional_transport.html:575
#: home/templates/home/widgets/exceptional_transport.html:576
msgid "Aucun ouvrage correspondant trouvé"
msgstr "Geen overeenkomend kunstwerk gevonden"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -78,7 +78,7 @@
<div class="col-12 col-md-7">
<div class="input-group input-group-sm">
<span class="input-group-text bg-white"><i class="bi bi-search text-muted"></i></span>
<input type="text" id="giep_modal_search_input" class="form-control" placeholder="{% translate 'Filtrer par code ou type d\'ouvrage...' %}">
<input type="text" id="giep_modal_search_input" class="form-control" placeholder="{% translate "Filtrer par code ou type d'ouvrage..." %}">
</div>
</div>
<div class="col-12 col-md-5">

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-21 12:07+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: 2025-12-04 12:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: English <LL@li.org>\n"
@ -16,6 +16,124 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: mobile/templates/mobile/assets/assets_index_mobile.html:6
#: mobile/templates/mobile/mobile_index.html:145
msgid "Patrimoine & Assets"
msgstr "Assets & Heritage"
#: mobile/templates/mobile/assets/assets_index_mobile.html:302
msgid "Code, nom, modèle..."
msgstr "Code, name, model..."
#: mobile/templates/mobile/assets/assets_index_mobile.html:307
msgid "Effacer"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:316
msgid "Réinitialiser la recherche, les filtres et le zoom"
msgstr "Reset search, filters and zoom"
#: mobile/templates/mobile/assets/assets_index_mobile.html:318
msgid "Reset"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:322
msgid "Mode d'affichage"
msgstr "Display mode"
#: mobile/templates/mobile/assets/assets_index_mobile.html:324
msgid "Carte"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:327
msgid "Liste"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:337
msgid "Tous statuts"
msgstr "All statuses"
#: mobile/templates/mobile/assets/assets_index_mobile.html:362
msgid "Limite atteinte"
msgstr "Limit reached"
#: mobile/templates/mobile/assets/assets_index_mobile.html:362
msgid ""
"Plus de 500 assets correspondent. Veuillez zoomer sur la carte ou affiner "
"vos critères de recherche."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:369
msgid "asset(s) trouvé(s)"
msgstr "asset(s) found"
#: mobile/templates/mobile/assets/assets_index_mobile.html:371
msgid "500 affichés"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:373
msgid ""
"Filtré selon la zone visible sur la carte. Cliquez pour élargir à toute la "
"commune."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:374
msgid "Zone visible"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:377
msgid "Trié par distance"
msgstr "Sorted by distance"
#: mobile/templates/mobile/assets/assets_index_mobile.html:381
#: mobile/templates/mobile/mobile_base.html:220
msgid "Chargement..."
msgstr "Loading..."
#: mobile/templates/mobile/assets/assets_index_mobile.html:395
#: mobile/templates/mobile/assets/assets_index_mobile.html:416
msgid "Sélectionnez une thématique"
msgstr "Select a thematic"
#: mobile/templates/mobile/assets/assets_index_mobile.html:396
msgid ""
"Veuillez choisir une thématique ci-dessus pour afficher les assets sur la "
"carte."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:400
msgid "Ma position"
msgstr "My location"
#: mobile/templates/mobile/assets/assets_index_mobile.html:417
msgid ""
"Veuillez choisir une thématique ci-dessus pour afficher la liste des assets."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:424
msgid "Aucun asset trouvé"
msgstr "No assets found"
#: mobile/templates/mobile/assets/assets_index_mobile.html:425
msgid "Modifiez votre recherche ou zoomez sur une autre zone."
msgstr "Modify your search or zoom into another area."
#: mobile/templates/mobile/assets/assets_index_mobile.html:427
msgid "Réinitialiser les filtres"
msgstr "Reset filters"
#: mobile/templates/mobile/assets/assets_index_mobile.html:461
msgid "Consulter la fiche"
msgstr "View details"
#: mobile/templates/mobile/assets/assets_index_mobile.html:463
msgid "Itinéraire GPS"
msgstr "GPS Directions"
#: mobile/templates/mobile/assets/assets_index_mobile.html:996
msgid "La géolocalisation n'est pas supportée par votre navigateur."
msgstr "Geolocation is not supported by your browser."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:240
msgid "Espaces verts - V2"
msgstr "Green spaces - V2"
@ -34,7 +152,8 @@ msgstr "selected item(s)"
#: mobile/templates/mobile/green_surfaces_edit_v2.html:275
msgid ""
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments sélectionnés."
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments "
"sélectionnés."
msgstr "Select a template below to apply it to the selected elements."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:280
@ -197,7 +316,7 @@ msgid ""
msgstr "Draw a line to cut the polygon. Double-click to finish."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:1107
#: mobile/templates/mobile/mobile_index.html:146
#: mobile/templates/mobile/mobile_index.html:158
msgid "Espaces verts"
msgstr "Green spaces"
@ -222,19 +341,15 @@ msgstr "Active"
msgid "Quitter"
msgstr "Exit"
#: mobile/templates/mobile/mobile_base.html:218
msgid "Chargement..."
msgstr "Loading..."
#: mobile/templates/mobile/mobile_base.html:242
#: mobile/templates/mobile/mobile_base.html:244
msgid "Notifications"
msgstr "Notifications"
#: mobile/templates/mobile/mobile_base.html:248
#: mobile/templates/mobile/mobile_base.html:250
msgid "notifications non lues"
msgstr "unread notifications"
#: mobile/templates/mobile/mobile_base.html:254
#: mobile/templates/mobile/mobile_base.html:256
msgid "Scanner un QR Code"
msgstr "Scan a QR Code"
@ -246,13 +361,11 @@ msgstr "Unread notifications"
#, python-format
msgid ""
"\n"
" Vous avez <strong class=\"home-unread-"
"notifications-count\">%(count)s</strong> notification non lue.\n"
" Vous avez <strong class=\"home-unread-notifications-count\">%(count)s</strong> notification non lue.\n"
" "
msgid_plural ""
"\n"
" Vous avez <strong class=\"home-unread-"
"notifications-count\">%(count)s</strong> notifications non lues.\n"
" Vous avez <strong class=\"home-unread-notifications-count\">%(count)s</strong> notifications non lues.\n"
" "
msgstr[0] ""
msgstr[1] ""
@ -325,15 +438,19 @@ msgstr "Asset inspections"
msgid "Consulter la liste et l'historique des vérifications d'assets"
msgstr "View the list and history of asset verifications"
#: mobile/templates/mobile/mobile_index.html:147
#: mobile/templates/mobile/mobile_index.html:146
msgid "Consulter et localiser les assets sur le terrain"
msgstr "Browse and locate assets in the field"
#: mobile/templates/mobile/mobile_index.html:159
msgid "Éditer les espaces verts"
msgstr "Edit green spaces"
#: mobile/templates/mobile/mobile_index.html:158
#: mobile/templates/mobile/mobile_index.html:170
msgid "Stock"
msgstr "Stock"
#: mobile/templates/mobile/mobile_index.html:159
#: mobile/templates/mobile/mobile_index.html:171
msgid "Gérer les produits, commandes et mouvements de stock"
msgstr "Manage products, orders and stock movements"
@ -355,7 +472,8 @@ msgid "Télécharger l'APK Android"
msgstr "Download Android APK"
#: mobile/templates/mobile/mobile_install.html:77
msgid "Installez la version native (recommandé pour les appareils de terrain)."
msgid ""
"Installez la version native (recommandé pour les appareils de terrain)."
msgstr "Install the native version (recommended for field devices)."
#: mobile/templates/mobile/mobile_install.html:79
@ -398,7 +516,8 @@ msgid "Confirmez : l'icône apparaît comme une application."
msgstr "Confirm: the icon appears as an application."
#: mobile/templates/mobile/mobile_install.html:103
msgid "Assurez-vous d'accepter l'installation quand la bannière PWA s'affiche."
msgid ""
"Assurez-vous d'accepter l'installation quand la bannière PWA s'affiche."
msgstr "Make sure to accept the installation when the PWA banner appears."
#: mobile/templates/mobile/mobile_install.html:106
@ -490,7 +609,7 @@ msgstr "Point to a QR code…"
msgid "QR Code détecté, résolution…"
msgstr "QR Code detected, resolution…"
#: mobile/templates/mobile/qr_scanner.html:210 mobile/views.py:264
#: mobile/templates/mobile/qr_scanner.html:210 mobile/views.py:273
msgid "QR Code non reconnu."
msgstr "QR Code not recognized."
@ -498,85 +617,85 @@ msgstr "QR Code not recognized."
msgid "Erreur lors de la résolution."
msgstr "Error resolving QR code."
#: mobile/views.py:268
#: mobile/views.py:277
msgid "Format de QR Code invalide."
msgstr "Invalid QR Code format."
#: mobile/views.py:292
#: mobile/views.py:301
msgid "Commande introuvable."
msgstr "Order not found."
#: mobile/views.py:448
#: mobile/views.py:457
msgid "A traiter"
msgstr "To process"
#: mobile/views.py:449
#: mobile/views.py:458
msgid "En attente"
msgstr "On hold"
#: mobile/views.py:450
#: mobile/views.py:459
msgid "Traité"
msgstr "Processed"
#: mobile/views.py:451
#: mobile/views.py:460
msgid "Annulé"
msgstr "Cancelled"
#: mobile/views.py:454
#: mobile/views.py:463
msgid "Urgent"
msgstr "Urgent"
#: mobile/views.py:455
#: mobile/views.py:464
msgid "Elevé"
msgstr "High"
#: mobile/views.py:456
#: mobile/views.py:465
msgid "Normal"
msgstr "Normal"
#: mobile/views.py:457
#: mobile/views.py:466
msgid "Bas"
msgstr "Low"
#: mobile/views.py:607
#: mobile/views.py:616
msgid "Vous n'avez pas la permission d'accéder à cette page."
msgstr "You do not have permission to access this page."
#: mobile/views.py:637
#: mobile/views.py:646
#, python-brace-format
msgid "Issu de l'article {product} du bon de préparation #{order_number}"
msgstr "From the article {product} of the preparation order #{order_number}"
#: mobile/views.py:656
#: mobile/views.py:665
#, python-brace-format
msgid "Issu de l'item #{id} du bon de préparation #{order_number}: {desc}"
msgstr "From item #{id} of preparation order #{order_number}: {desc}"
#: mobile/views.py:685
#: mobile/views.py:694
msgid "Bon de confection créé avec succès."
msgstr "Crafting voucher successfully created."
#: mobile/views.py:745
#: mobile/views.py:754
msgid "Vous n'avez pas la permission d'ajouter une signature à ce lot."
msgstr "You do not have permission to add a signature to this batch."
#: mobile/views.py:761
#: mobile/views.py:770
msgid "Signature enregistrée avec succès."
msgstr "Signature registered successfully."
#: mobile/views.py:847
#: mobile/views.py:856
msgid "Veuillez sélectionner un emplacement."
msgstr "Please select a location."
#: mobile/views.py:854
#: mobile/views.py:863
msgid "Emplacement invalide ou non accessible."
msgstr "Invalid or inaccessible location."
#: mobile/views.py:875
#: mobile/views.py:884
msgid "Inventaire créé avec succès."
msgstr "Inventory created successfully."
#: mobile/views.py:976
#: mobile/views.py:985
msgid "Document(s) ajouté(s) avec succès."
msgstr "Document(s) added successfully."

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-21 12:07+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: 2025-12-04 12:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: French <LL@li.org>\n"
@ -16,6 +16,124 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: mobile/templates/mobile/assets/assets_index_mobile.html:6
#: mobile/templates/mobile/mobile_index.html:145
msgid "Patrimoine & Assets"
msgstr "Patrimoine & Assets"
#: mobile/templates/mobile/assets/assets_index_mobile.html:302
msgid "Code, nom, modèle..."
msgstr "Code, nom, modèle..."
#: mobile/templates/mobile/assets/assets_index_mobile.html:307
msgid "Effacer"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:316
msgid "Réinitialiser la recherche, les filtres et le zoom"
msgstr "Réinitialiser la recherche, les filtres et le zoom"
#: mobile/templates/mobile/assets/assets_index_mobile.html:318
msgid "Reset"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:322
msgid "Mode d'affichage"
msgstr "Mode d'affichage"
#: mobile/templates/mobile/assets/assets_index_mobile.html:324
msgid "Carte"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:327
msgid "Liste"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:337
msgid "Tous statuts"
msgstr "Tous statuts"
#: mobile/templates/mobile/assets/assets_index_mobile.html:362
msgid "Limite atteinte"
msgstr "Limite atteinte"
#: mobile/templates/mobile/assets/assets_index_mobile.html:362
msgid ""
"Plus de 500 assets correspondent. Veuillez zoomer sur la carte ou affiner "
"vos critères de recherche."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:369
msgid "asset(s) trouvé(s)"
msgstr "asset(s) trouvé(s)"
#: mobile/templates/mobile/assets/assets_index_mobile.html:371
msgid "500 affichés"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:373
msgid ""
"Filtré selon la zone visible sur la carte. Cliquez pour élargir à toute la "
"commune."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:374
msgid "Zone visible"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:377
msgid "Trié par distance"
msgstr "Trié par distance"
#: mobile/templates/mobile/assets/assets_index_mobile.html:381
#: mobile/templates/mobile/mobile_base.html:220
msgid "Chargement..."
msgstr "Chargement..."
#: mobile/templates/mobile/assets/assets_index_mobile.html:395
#: mobile/templates/mobile/assets/assets_index_mobile.html:416
msgid "Sélectionnez une thématique"
msgstr "Sélectionnez une thématique"
#: mobile/templates/mobile/assets/assets_index_mobile.html:396
msgid ""
"Veuillez choisir une thématique ci-dessus pour afficher les assets sur la "
"carte."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:400
msgid "Ma position"
msgstr "Ma position"
#: mobile/templates/mobile/assets/assets_index_mobile.html:417
msgid ""
"Veuillez choisir une thématique ci-dessus pour afficher la liste des assets."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:424
msgid "Aucun asset trouvé"
msgstr "Aucun asset trouvé"
#: mobile/templates/mobile/assets/assets_index_mobile.html:425
msgid "Modifiez votre recherche ou zoomez sur une autre zone."
msgstr "Modifiez votre recherche ou zoomez sur une autre zone."
#: mobile/templates/mobile/assets/assets_index_mobile.html:427
msgid "Réinitialiser les filtres"
msgstr "Réinitialiser les filtres"
#: mobile/templates/mobile/assets/assets_index_mobile.html:461
msgid "Consulter la fiche"
msgstr "Consulter la fiche"
#: mobile/templates/mobile/assets/assets_index_mobile.html:463
msgid "Itinéraire GPS"
msgstr "Itinéraire GPS"
#: mobile/templates/mobile/assets/assets_index_mobile.html:996
msgid "La géolocalisation n'est pas supportée par votre navigateur."
msgstr "La géolocalisation n'est pas supportée par votre navigateur."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:240
msgid "Espaces verts - V2"
msgstr "Espaces verts - V2"
@ -34,9 +152,11 @@ msgstr "élément(s) sélectionné(s)"
#: mobile/templates/mobile/green_surfaces_edit_v2.html:275
msgid ""
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments sélectionnés."
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments "
"sélectionnés."
msgstr ""
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments sélectionnés."
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments "
"sélectionnés."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:280
msgid "Édition des attributs"
@ -201,7 +321,7 @@ msgstr ""
"Tracez une ligne pour découper le polygone. Double-cliquez pour terminer."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:1107
#: mobile/templates/mobile/mobile_index.html:146
#: mobile/templates/mobile/mobile_index.html:158
msgid "Espaces verts"
msgstr "Espaces verts"
@ -226,19 +346,15 @@ msgstr "Actif"
msgid "Quitter"
msgstr "Quitter"
#: mobile/templates/mobile/mobile_base.html:218
msgid "Chargement..."
msgstr "Chargement..."
#: mobile/templates/mobile/mobile_base.html:242
#: mobile/templates/mobile/mobile_base.html:244
msgid "Notifications"
msgstr "Notifications"
#: mobile/templates/mobile/mobile_base.html:248
#: mobile/templates/mobile/mobile_base.html:250
msgid "notifications non lues"
msgstr "notifications non lues"
#: mobile/templates/mobile/mobile_base.html:254
#: mobile/templates/mobile/mobile_base.html:256
msgid "Scanner un QR Code"
msgstr "Scanner un QR Code"
@ -250,13 +366,11 @@ msgstr "Notifications non lues"
#, python-format
msgid ""
"\n"
" Vous avez <strong class=\"home-unread-"
"notifications-count\">%(count)s</strong> notification non lue.\n"
" Vous avez <strong class=\"home-unread-notifications-count\">%(count)s</strong> notification non lue.\n"
" "
msgid_plural ""
"\n"
" Vous avez <strong class=\"home-unread-"
"notifications-count\">%(count)s</strong> notifications non lues.\n"
" Vous avez <strong class=\"home-unread-notifications-count\">%(count)s</strong> notifications non lues.\n"
" "
msgstr[0] ""
msgstr[1] ""
@ -329,15 +443,19 @@ msgstr "Inspections d'assets"
msgid "Consulter la liste et l'historique des vérifications d'assets"
msgstr "Consulter la liste et l'historique des vérifications d'assets"
#: mobile/templates/mobile/mobile_index.html:147
#: mobile/templates/mobile/mobile_index.html:146
msgid "Consulter et localiser les assets sur le terrain"
msgstr "Consulter et localiser les assets sur le terrain"
#: mobile/templates/mobile/mobile_index.html:159
msgid "Éditer les espaces verts"
msgstr "Éditer les espaces verts"
#: mobile/templates/mobile/mobile_index.html:158
#: mobile/templates/mobile/mobile_index.html:170
msgid "Stock"
msgstr "Stock"
#: mobile/templates/mobile/mobile_index.html:159
#: mobile/templates/mobile/mobile_index.html:171
msgid "Gérer les produits, commandes et mouvements de stock"
msgstr "Gérer les produits, commandes et mouvements de stock"
@ -360,7 +478,8 @@ msgid "Télécharger l'APK Android"
msgstr "Télécharger l'APK Android"
#: mobile/templates/mobile/mobile_install.html:77
msgid "Installez la version native (recommandé pour les appareils de terrain)."
msgid ""
"Installez la version native (recommandé pour les appareils de terrain)."
msgstr ""
"Installez la version native (recommandé pour les appareils de "
"terrain).Installez la version native (recommandé pour les appareils de "
@ -407,7 +526,8 @@ msgid "Confirmez : l'icône apparaît comme une application."
msgstr "Confirmez : l'icône apparaît comme une application."
#: mobile/templates/mobile/mobile_install.html:103
msgid "Assurez-vous d'accepter l'installation quand la bannière PWA s'affiche."
msgid ""
"Assurez-vous d'accepter l'installation quand la bannière PWA s'affiche."
msgstr ""
"Assurez-vous d'accepter l'installation quand la bannière PWA "
"s'affiche.Assurez-vous d'accepter l'installation quand la bannière PWA "
@ -504,7 +624,7 @@ msgstr "Pointez vers un QR code…"
msgid "QR Code détecté, résolution…"
msgstr "QR Code détecté, résolution…"
#: mobile/templates/mobile/qr_scanner.html:210 mobile/views.py:264
#: mobile/templates/mobile/qr_scanner.html:210 mobile/views.py:273
msgid "QR Code non reconnu."
msgstr "QR Code non reconnu."
@ -512,88 +632,92 @@ msgstr "QR Code non reconnu."
msgid "Erreur lors de la résolution."
msgstr "Erreur lors de la résolution."
#: mobile/views.py:268
#: mobile/views.py:277
msgid "Format de QR Code invalide."
msgstr "Format de QR Code invalide."
#: mobile/views.py:292
#: mobile/views.py:301
msgid "Commande introuvable."
msgstr "Commande introuvable."
#: mobile/views.py:448
#: mobile/views.py:457
msgid "A traiter"
msgstr "A traiter"
#: mobile/views.py:449
#: mobile/views.py:458
msgid "En attente"
msgstr "En attente"
#: mobile/views.py:450
#: mobile/views.py:459
msgid "Traité"
msgstr "Traité"
#: mobile/views.py:451
#: mobile/views.py:460
msgid "Annulé"
msgstr "Annulé"
#: mobile/views.py:454
#: mobile/views.py:463
msgid "Urgent"
msgstr "Urgent"
#: mobile/views.py:455
#: mobile/views.py:464
msgid "Elevé"
msgstr "Elevé"
#: mobile/views.py:456
#: mobile/views.py:465
msgid "Normal"
msgstr "Normal"
#: mobile/views.py:457
#: mobile/views.py:466
msgid "Bas"
msgstr "Bas"
#: mobile/views.py:607
#: mobile/views.py:616
msgid "Vous n'avez pas la permission d'accéder à cette page."
msgstr "Vous n'avez pas la permission d'accéder à cette page."
#: mobile/views.py:637
#: mobile/views.py:646
#, python-brace-format
msgid "Issu de l'article {product} du bon de préparation #{order_number}"
msgstr "Issu de l'article {product} du bon de préparation #{order_number}"
#: mobile/views.py:656
#: mobile/views.py:665
#, python-brace-format
msgid "Issu de l'item #{id} du bon de préparation #{order_number}: {desc}"
msgstr "Issu de l'item #{id} du bon de préparation #{order_number}: {desc}"
#: mobile/views.py:685
#: mobile/views.py:694
msgid "Bon de confection créé avec succès."
msgstr "Bon de confection créé avec succès."
#: mobile/views.py:745
#: mobile/views.py:754
msgid "Vous n'avez pas la permission d'ajouter une signature à ce lot."
msgstr "Vous n'avez pas la permission d'ajouter une signature à ce lot."
#: mobile/views.py:761
#: mobile/views.py:770
msgid "Signature enregistrée avec succès."
msgstr "Signature enregistrée avec succès."
#: mobile/views.py:847
#: mobile/views.py:856
msgid "Veuillez sélectionner un emplacement."
msgstr "Veuillez sélectionner un emplacement."
#: mobile/views.py:854
#: mobile/views.py:863
msgid "Emplacement invalide ou non accessible."
msgstr "Emplacement invalide ou non accessible."
#: mobile/views.py:875
#: mobile/views.py:884
msgid "Inventaire créé avec succès."
msgstr "Inventaire créé avec succès."
#: mobile/views.py:976
#: mobile/views.py:985
msgid "Document(s) ajouté(s) avec succès."
msgstr "Document(s) ajouté(s) avec succès."
#, fuzzy
#~ msgid "Mode d\\"
#~ msgstr "Mode dessin"
#~ msgid "StreetUp"
#~ msgstr "StreetUp"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-21 12:07+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: 2025-12-04 12:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Dutch <LL@li.org>\n"
@ -16,6 +16,124 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: mobile/templates/mobile/assets/assets_index_mobile.html:6
#: mobile/templates/mobile/mobile_index.html:145
msgid "Patrimoine & Assets"
msgstr "Patrimonium & Assets"
#: mobile/templates/mobile/assets/assets_index_mobile.html:302
msgid "Code, nom, modèle..."
msgstr "Code, naam, model..."
#: mobile/templates/mobile/assets/assets_index_mobile.html:307
msgid "Effacer"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:316
msgid "Réinitialiser la recherche, les filtres et le zoom"
msgstr "Zoekopdracht, filters en zoom resetten"
#: mobile/templates/mobile/assets/assets_index_mobile.html:318
msgid "Reset"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:322
msgid "Mode d'affichage"
msgstr "Weergavemodus"
#: mobile/templates/mobile/assets/assets_index_mobile.html:324
msgid "Carte"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:327
msgid "Liste"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:337
msgid "Tous statuts"
msgstr "Alle statussen"
#: mobile/templates/mobile/assets/assets_index_mobile.html:362
msgid "Limite atteinte"
msgstr "Limiet bereikt"
#: mobile/templates/mobile/assets/assets_index_mobile.html:362
msgid ""
"Plus de 500 assets correspondent. Veuillez zoomer sur la carte ou affiner "
"vos critères de recherche."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:369
msgid "asset(s) trouvé(s)"
msgstr "asset(s) gevonden"
#: mobile/templates/mobile/assets/assets_index_mobile.html:371
msgid "500 affichés"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:373
msgid ""
"Filtré selon la zone visible sur la carte. Cliquez pour élargir à toute la "
"commune."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:374
msgid "Zone visible"
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:377
msgid "Trié par distance"
msgstr "Gesorteerd op afstand"
#: mobile/templates/mobile/assets/assets_index_mobile.html:381
#: mobile/templates/mobile/mobile_base.html:220
msgid "Chargement..."
msgstr "Laden..."
#: mobile/templates/mobile/assets/assets_index_mobile.html:395
#: mobile/templates/mobile/assets/assets_index_mobile.html:416
msgid "Sélectionnez une thématique"
msgstr "Selecteer een thema"
#: mobile/templates/mobile/assets/assets_index_mobile.html:396
msgid ""
"Veuillez choisir une thématique ci-dessus pour afficher les assets sur la "
"carte."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:400
msgid "Ma position"
msgstr "Mijn positie"
#: mobile/templates/mobile/assets/assets_index_mobile.html:417
msgid ""
"Veuillez choisir une thématique ci-dessus pour afficher la liste des assets."
msgstr ""
#: mobile/templates/mobile/assets/assets_index_mobile.html:424
msgid "Aucun asset trouvé"
msgstr "Geen assets gevonden"
#: mobile/templates/mobile/assets/assets_index_mobile.html:425
msgid "Modifiez votre recherche ou zoomez sur une autre zone."
msgstr "Pas uw zoekopdracht aan of zoom in op een andere zone."
#: mobile/templates/mobile/assets/assets_index_mobile.html:427
msgid "Réinitialiser les filtres"
msgstr "Filters resetten"
#: mobile/templates/mobile/assets/assets_index_mobile.html:461
msgid "Consulter la fiche"
msgstr "Fiche bekijken"
#: mobile/templates/mobile/assets/assets_index_mobile.html:463
msgid "Itinéraire GPS"
msgstr "GPS Routebeschrijving"
#: mobile/templates/mobile/assets/assets_index_mobile.html:996
msgid "La géolocalisation n'est pas supportée par votre navigateur."
msgstr "Geolocatie wordt niet ondersteund door uw browser."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:240
msgid "Espaces verts - V2"
msgstr "Groene ruimtes - V2"
@ -34,7 +152,8 @@ msgstr "geselecteerde elementen"
#: mobile/templates/mobile/green_surfaces_edit_v2.html:275
msgid ""
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments sélectionnés."
"Sélectionnez un modèle ci-dessous pour l'appliquer aux éléments "
"sélectionnés."
msgstr ""
"Selecteer een model hieronder om toe te passen op de geselecteerde items."
@ -200,7 +319,7 @@ msgid ""
msgstr "Teken een lijn om de polygoon te knippen. Dubbelklik om te voltooien."
#: mobile/templates/mobile/green_surfaces_edit_v2.html:1107
#: mobile/templates/mobile/mobile_index.html:146
#: mobile/templates/mobile/mobile_index.html:158
msgid "Espaces verts"
msgstr "Groene ruimtes"
@ -225,19 +344,15 @@ msgstr "Actief"
msgid "Quitter"
msgstr "Afsluiten"
#: mobile/templates/mobile/mobile_base.html:218
msgid "Chargement..."
msgstr "Laden..."
#: mobile/templates/mobile/mobile_base.html:242
#: mobile/templates/mobile/mobile_base.html:244
msgid "Notifications"
msgstr "Meldingen"
#: mobile/templates/mobile/mobile_base.html:248
#: mobile/templates/mobile/mobile_base.html:250
msgid "notifications non lues"
msgstr "ongelezen meldingen"
#: mobile/templates/mobile/mobile_base.html:254
#: mobile/templates/mobile/mobile_base.html:256
msgid "Scanner un QR Code"
msgstr "Scan een QR-code"
@ -249,13 +364,11 @@ msgstr "Ongelezen meldingen"
#, python-format
msgid ""
"\n"
" Vous avez <strong class=\"home-unread-"
"notifications-count\">%(count)s</strong> notification non lue.\n"
" Vous avez <strong class=\"home-unread-notifications-count\">%(count)s</strong> notification non lue.\n"
" "
msgid_plural ""
"\n"
" Vous avez <strong class=\"home-unread-"
"notifications-count\">%(count)s</strong> notifications non lues.\n"
" Vous avez <strong class=\"home-unread-notifications-count\">%(count)s</strong> notifications non lues.\n"
" "
msgstr[0] ""
msgstr[1] ""
@ -328,15 +441,19 @@ msgstr "Assetinspecties"
msgid "Consulter la liste et l'historique des vérifications d'assets"
msgstr "Bekijk de lijst en geschiedenis van assetcontroles"
#: mobile/templates/mobile/mobile_index.html:147
#: mobile/templates/mobile/mobile_index.html:146
msgid "Consulter et localiser les assets sur le terrain"
msgstr "Assets op het terrein raadplegen en lokaliseren"
#: mobile/templates/mobile/mobile_index.html:159
msgid "Éditer les espaces verts"
msgstr "Groene ruimtes bewerken"
#: mobile/templates/mobile/mobile_index.html:158
#: mobile/templates/mobile/mobile_index.html:170
msgid "Stock"
msgstr "Voorraad"
#: mobile/templates/mobile/mobile_index.html:159
#: mobile/templates/mobile/mobile_index.html:171
msgid "Gérer les produits, commandes et mouvements de stock"
msgstr "Beheer producten, bestellingen en voorraadbewegingen"
@ -358,7 +475,8 @@ msgid "Télécharger l'APK Android"
msgstr "Download Android APK"
#: mobile/templates/mobile/mobile_install.html:77
msgid "Installez la version native (recommandé pour les appareils de terrain)."
msgid ""
"Installez la version native (recommandé pour les appareils de terrain)."
msgstr "Installeer de native versie (aanbevolen voor veldapparaten)."
#: mobile/templates/mobile/mobile_install.html:79
@ -401,9 +519,11 @@ msgid "Confirmez : l'icône apparaît comme une application."
msgstr "Bevestig: het pictogram verschijnt als een applicatie."
#: mobile/templates/mobile/mobile_install.html:103
msgid "Assurez-vous d'accepter l'installation quand la bannière PWA s'affiche."
msgid ""
"Assurez-vous d'accepter l'installation quand la bannière PWA s'affiche."
msgstr ""
"Zorg ervoor dat u de installatie accepteert wanneer de PWA-banner verschijnt."
"Zorg ervoor dat u de installatie accepteert wanneer de PWA-banner "
"verschijnt."
#: mobile/templates/mobile/mobile_install.html:106
msgid "Ouvrir l'application"
@ -496,7 +616,7 @@ msgstr "Wijs een QR-code aan..."
msgid "QR Code détecté, résolution…"
msgstr "QR-code gedetecteerd, resolutie..."
#: mobile/templates/mobile/qr_scanner.html:210 mobile/views.py:264
#: mobile/templates/mobile/qr_scanner.html:210 mobile/views.py:273
msgid "QR Code non reconnu."
msgstr "QR-code niet herkend."
@ -504,90 +624,94 @@ msgstr "QR-code niet herkend."
msgid "Erreur lors de la résolution."
msgstr "Fout bij het verwerken van de QR-code."
#: mobile/views.py:268
#: mobile/views.py:277
msgid "Format de QR Code invalide."
msgstr "Ongeldig QR-codeformaat."
#: mobile/views.py:292
#: mobile/views.py:301
msgid "Commande introuvable."
msgstr "Bestelling niet gevonden."
#: mobile/views.py:448
#: mobile/views.py:457
msgid "A traiter"
msgstr "Te verwerken"
#: mobile/views.py:449
#: mobile/views.py:458
msgid "En attente"
msgstr "In afwachting"
#: mobile/views.py:450
#: mobile/views.py:459
msgid "Traité"
msgstr "Verwerkt"
#: mobile/views.py:451
#: mobile/views.py:460
msgid "Annulé"
msgstr "Geannuleerd"
#: mobile/views.py:454
#: mobile/views.py:463
msgid "Urgent"
msgstr "Dringend"
#: mobile/views.py:455
#: mobile/views.py:464
msgid "Elevé"
msgstr "Hoog"
#: mobile/views.py:456
#: mobile/views.py:465
msgid "Normal"
msgstr "Normaal"
#: mobile/views.py:457
#: mobile/views.py:466
msgid "Bas"
msgstr "Laag"
#: mobile/views.py:607
#: mobile/views.py:616
msgid "Vous n'avez pas la permission d'accéder à cette page."
msgstr "U heeft geen toestemming om deze pagina te bezoeken."
#: mobile/views.py:637
#: mobile/views.py:646
#, python-brace-format
msgid "Issu de l'article {product} du bon de préparation #{order_number}"
msgstr ""
"Uit het artikel {product} van de voorbereidingsbestelling #{order_number}"
#: mobile/views.py:656
#: mobile/views.py:665
#, python-brace-format
msgid "Issu de l'item #{id} du bon de préparation #{order_number}: {desc}"
msgstr "Van item #{id} van voorbereidingsorder #{order_number}: {desc}"
#: mobile/views.py:685
#: mobile/views.py:694
msgid "Bon de confection créé avec succès."
msgstr "Craftingvoucher succesvol aangemaakt."
#: mobile/views.py:745
#: mobile/views.py:754
msgid "Vous n'avez pas la permission d'ajouter une signature à ce lot."
msgstr ""
"U heeft geen toestemming om een ​​handtekening aan deze batch toe te voegen."
#: mobile/views.py:761
#: mobile/views.py:770
msgid "Signature enregistrée avec succès."
msgstr "Handtekening succesvol geregistreerd."
#: mobile/views.py:847
#: mobile/views.py:856
msgid "Veuillez sélectionner un emplacement."
msgstr "Selecteer een locatie."
#: mobile/views.py:854
#: mobile/views.py:863
msgid "Emplacement invalide ou non accessible."
msgstr "Ongeldige of ontoegankelijke locatie."
#: mobile/views.py:875
#: mobile/views.py:884
msgid "Inventaire créé avec succès."
msgstr "Inventaris succesvol aangemaakt."
#: mobile/views.py:976
#: mobile/views.py:985
msgid "Document(s) ajouté(s) avec succès."
msgstr "Document(en) succesvol toegevoegd."
#, fuzzy
#~ msgid "Mode d\\"
#~ msgstr "Tekenmodus"
#~ msgid "StreetUp"
#~ msgstr "StraatUp"

File diff suppressed because it is too large Load diff

View file

@ -207,6 +207,8 @@
})();
</script>
{% block head %}
{% endblock head %}
{% block extra_head %}
{% endblock extra_head %}
</head>
@ -404,6 +406,8 @@ if ('serviceWorker' in navigator) {
{% endblock extra_scripts %}
{% block extra_js %}
{% endblock extra_js %}
{% block script %}
{% endblock script %}
</body>
</html>

View file

@ -136,6 +136,18 @@
</div>
{% endif %}
{% if can_view_assets %}
<div class="col-12">
<a class="card-link d-block" href="{% url 'mobile:mobile_assets_index' %}">
<div class="icon-wrapper">
<i class="bi bi-pin-map"></i>
</div>
<h2 class="fw-semibold">{% translate "Patrimoine & Assets" %}</h2>
<p>{% translate "Consulter et localiser les assets sur le terrain" %}</p>
</a>
</div>
{% endif %}
<!-- If user has permission to edit green surfaces -->
{% if can_edit_green_surfaces %}
<div class="col-12">

View file

@ -0,0 +1,373 @@
from django.test import TestCase, Client
from django.urls import reverse
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType
from django.utils import translation
import json
from common.models import UserConfig, Role, Thematic, UserThematics
from assets.models import NatureTree, NatureLocation, NatureShrub
User = get_user_model()
class MobileAssetDetailTests(TestCase):
def setUp(self):
self.client = Client()
# Create or get thematic 'nature'
self.thematic, _ = Thematic.objects.get_or_create(
code="nature",
defaults={
"name_fr": "Espaces Verts & Nature",
"name_nl": "Groen & Natuur",
"icon": "bi-tree"
}
)
# Create Roles
self.admin_role, _ = Role.objects.get_or_create(name="admin")
self.editor_role, _ = Role.objects.get_or_create(name="editor")
self.viewer_role, _ = Role.objects.get_or_create(name="viewer")
self.observer_role, _ = Role.objects.get_or_create(name="observer")
# Create test tree asset
self.tree = NatureTree.objects.create(
code="ARB-TEST-001",
name_fr="Chêne pédonculé",
name_nl="Zomereik",
status="active",
height=15.5,
circumference=160.0,
crown_diameter=8.0,
crown_clearance=3.5,
development_stage="mature",
vitality="strong",
mechanical_state="good",
risk_level="low",
tag_number="TAG-48010",
)
# Create test shrub asset (generic asset without specific template)
self.shrub = NatureShrub.objects.create(
code="ARB-SHRUB-001",
name_fr="Rosier buisson",
name_nl="Struikroos",
status="active",
)
def test_anonymous_user_redirected_to_login(self):
"""Anonymous user trying to access mobile asset detail is redirected to login."""
url = reverse("mobile:mobile_asset_detail_direct", args=["naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 302)
self.assertIn("/login", response.url)
def test_unauthorized_user_forbidden(self):
"""User without view permissions on nature thematic receives HTTP 403."""
user = User.objects.create_user(username="forbidden_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.observer_role)
# Create UserThematics with can_view_assets=False
UserThematics.objects.create(
user_config=user_config,
thematic=self.thematic,
can_view_assets=False,
can_edit_assets=False
)
self.client.login(username="forbidden_user", password="password")
url = reverse("mobile:mobile_asset_detail_direct", args=["naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 403)
def test_authorized_user_can_view_tree_mobile(self):
"""User with view permission can view tree on mobile."""
user = User.objects.create_user(username="viewer_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.viewer_role)
UserThematics.objects.create(
user_config=user_config,
thematic=self.thematic,
can_view_assets=True,
can_edit_assets=False
)
self.client.login(username="viewer_user", password="password")
url = reverse("mobile:mobile_asset_detail_direct", args=["naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "assets/naturetree_detail.html")
self.assertContains(response, "ARB-TEST-001")
self.assertContains(response, "Chêne pédonculé")
self.assertTrue(response.context["mobile_view"])
self.assertTrue(response.context["is_mobile"])
def test_mobile_read_only_user_has_no_edit_bar(self):
"""Read-only user has no edit bar or buttons on mobile."""
user = User.objects.create_user(username="readonly_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.viewer_role)
UserThematics.objects.create(
user_config=user_config,
thematic=self.thematic,
can_view_assets=True,
can_edit_assets=False
)
self.client.login(username="readonly_user", password="password")
url = reverse("mobile:mobile_asset_detail_direct", args=["naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, 'id="asset-cms-edit-bar"')
self.assertNotContains(response, 'id="asset-cms-edit-btn"')
def test_mobile_editor_has_sticky_edit_bar_and_actions(self):
"""User with edit permission sees the mobile sticky edit bar and action buttons."""
user = User.objects.create_user(username="editor_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.admin_role)
self.client.login(username="editor_user", password="password")
url = reverse("mobile:mobile_asset_detail_direct", args=["naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'id="asset-cms-edit-bar"')
self.assertContains(response, 'mobile-edit-bar')
self.assertContains(response, 'id="asset-edit-mode-badge"')
self.assertContains(response, 'id="asset-cms-edit-btn"')
self.assertContains(response, 'id="asset-cms-save-btn"')
self.assertContains(response, 'id="asset-cms-cancel-btn"')
def test_tree_mobile_specific_elements(self):
"""NatureTree specific mobile design: dendrometric widgets, icons and input attributes."""
user = User.objects.create_user(username="tree_admin", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.admin_role)
self.client.login(username="tree_admin", password="password")
url = reverse("mobile:mobile_asset_detail_direct", args=["naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
# Responsive dendrometric widgets
self.assertContains(response, "tree-metric-widget")
self.assertContains(response, "tree-header-icon")
# Touch friendly input attributes
self.assertContains(response, 'inputmode="decimal"')
self.assertContains(response, 'inputmode="numeric"')
def test_thematic_url_route(self):
"""Route with thematic prefix /mobile/assets/nature/naturetree/<id>/ works properly."""
user = User.objects.create_user(username="thematic_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.admin_role)
self.client.login(username="thematic_user", password="password")
url = reverse("mobile:mobile_asset_detail", args=["nature", "naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context["thematic_code"], "nature")
self.assertEqual(response.context["asset"].id, self.tree.id)
def test_update_tree_via_ajax_endpoint(self):
"""Saving updated fields via update_asset AJAX endpoint updates tree in database."""
user = User.objects.create_user(username="update_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.admin_role)
self.client.login(username="update_user", password="password")
update_url = reverse("assets:update_asset", args=["naturetree", self.tree.id])
payload = {
"height": 18.2,
"circumference": 175.0,
"vitality": "strong",
"tag_number": "TAG-99999"
}
response = self.client.post(
update_url,
data=json.dumps(payload),
content_type="application/json"
)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertTrue(data.get("success"))
# Verify database update
self.tree.refresh_from_db()
self.assertEqual(self.tree.height, 18.2)
self.assertEqual(self.tree.circumference, 175.0)
self.assertEqual(self.tree.vitality, "strong")
self.assertEqual(self.tree.tag_number, "TAG-99999")
def test_mobile_index_shows_assets_card_when_authorized(self):
"""User with asset view rights sees 'Patrimoine & Assets' card on mobile home."""
user = User.objects.create_user(username="asset_viewer", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.viewer_role)
UserThematics.objects.create(
user_config=user_config,
thematic=self.thematic,
can_view_assets=True
)
self.client.login(username="asset_viewer", password="password")
response = self.client.get(reverse("mobile:mobile_index"))
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context["can_view_assets"])
self.assertContains(response, reverse("mobile:mobile_assets_index"))
content = response.content.decode()
self.assertTrue(
"Patrimoine & Assets" in content or
"Assets & Heritage" in content or
"Patrimoine &amp; Assets" in content or
"Assets &amp; Heritage" in content
)
def test_mobile_index_hides_assets_card_when_unauthorized(self):
"""User without asset view rights does NOT see 'Patrimoine & Assets' card on mobile home."""
user = User.objects.create_user(username="no_asset_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.viewer_role)
UserThematics.objects.create(
user_config=user_config,
thematic=self.thematic,
can_view_assets=False
)
self.client.login(username="no_asset_user", password="password")
response = self.client.get(reverse("mobile:mobile_index"))
self.assertEqual(response.status_code, 200)
self.assertFalse(response.context["can_view_assets"])
self.assertNotContains(response, reverse("mobile:mobile_assets_index"))
def test_mobile_assets_index_view_permissions(self):
"""Test access controls on mobile_assets_index."""
# Anonymous -> 302
response = self.client.get(reverse("mobile:mobile_assets_index"))
self.assertEqual(response.status_code, 302)
# Unauthorized user -> 403
user_forbidden = User.objects.create_user(username="index_forbidden", password="password")
user_config = UserConfig.objects.create(user=user_forbidden, is_intern=True)
user_config.roles.add(self.viewer_role)
self.client.login(username="index_forbidden", password="password")
response = self.client.get(reverse("mobile:mobile_assets_index"))
self.assertEqual(response.status_code, 403)
# Authorized user -> 200 with template and context
UserThematics.objects.create(
user_config=user_config,
thematic=self.thematic,
can_view_assets=True
)
response = self.client.get(reverse("mobile:mobile_assets_index"))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "mobile/assets/assets_index_mobile.html")
self.assertIn("accessible_thematics", response.context)
self.assertIn("thematic_config_json", response.context)
self.assertIn("asset_status_choices", response.context)
# Assert JS script block is rendered and loaded
self.assertContains(response, "initMap")
self.assertContains(response, "maplibre-gl.js")
def test_mobile_assets_search_api(self):
"""Test mobile_assets_search JSON endpoint with filters and search queries."""
user = User.objects.create_user(username="search_user", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.viewer_role)
UserThematics.objects.create(
user_config=user_config,
thematic=self.thematic,
can_view_assets=True
)
self.client.login(username="search_user", password="password")
search_url = reverse("mobile:mobile_assets_search")
# 1. Search without thematic returns empty results (thematic required)
response = self.client.get(search_url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data["count"], 0)
self.assertEqual(data["results"], [])
self.assertFalse(data["limit_reached"])
# 2. Search with mandatory thematic 'nature'
response = self.client.get(search_url, {"thematic": "nature"})
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertIn("results", data)
self.assertIn("geojson", data)
self.assertEqual(data["limit"], 500)
self.assertFalse(data["limit_reached"])
codes = [item["code"] for item in data["results"]]
self.assertIn("ARB-TEST-001", codes)
self.assertIn("ARB-SHRUB-001", codes)
# 3. Test limit reached logic with limit=1
response = self.client.get(search_url, {"thematic": "nature", "limit": "1"})
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data["count"], 1)
self.assertEqual(data["limit"], 1)
self.assertTrue(data["limit_reached"])
self.assertGreater(data["total_count"], 1)
# 4. Search with keyword 'Chêne'
response = self.client.get(search_url, {"thematic": "nature", "q": "Chêne"})
self.assertEqual(response.status_code, 200)
data = response.json()
codes = [item["code"] for item in data["results"]]
self.assertIn("ARB-TEST-001", codes)
self.assertNotIn("ARB-SHRUB-001", codes)
# 5. Filter by status 'active'
response = self.client.get(search_url, {"thematic": "nature", "status": "active"})
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertGreaterEqual(data["count"], 1)
def test_generic_asset_uses_mobile_generic_template(self):
"""An asset model without specific template (NatureShrub) uses detail_generic_mobile.html."""
user = User.objects.create_user(username="shrub_viewer", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.admin_role)
self.client.login(username="shrub_viewer", password="password")
url = reverse("mobile:mobile_asset_detail_direct", args=["natureshrub", self.shrub.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "assets/detail_generic_mobile.html")
self.assertContains(response, "ARB-SHRUB-001")
self.assertContains(response, "Rosier buisson")
# Assert mobile navigation tabs and scripts are present
self.assertContains(response, "mobile-asset-tabs-nav")
self.assertContains(response, 'data-target-tab="tab-infos"')
self.assertContains(response, 'data-target-tab="tab-geo"')
self.assertContains(response, 'data-target-tab="tab-docs"')
self.assertContains(response, 'data-target-tab="tab-links"')
self.assertContains(response, "asset_cms_edit_mode.js")
self.assertContains(response, "initMobileAssetTabs")
def test_specific_asset_retains_specific_template(self):
"""NatureTree continues to use its specific template naturetree_detail.html."""
user = User.objects.create_user(username="tree_viewer", password="password")
user_config = UserConfig.objects.create(user=user, is_intern=True)
user_config.roles.add(self.admin_role)
self.client.login(username="tree_viewer", password="password")
url = reverse("mobile:mobile_asset_detail_direct", args=["naturetree", self.tree.id])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "assets/naturetree_detail.html")

View file

@ -37,7 +37,10 @@ urlpatterns = [
path("nature/green-surfaces/", views.green_surfaces_edit_mobile, name='green_surfaces_edit_mobile'),
path("nature/green-surfaces-custom-draw/", views.green_surfaces_edit_custom_draw, name='green_surfaces_edit_custom_draw'),
path("nature/green-surfaces-standalone/", views.green_surfaces_edit_standalone, name='green_surfaces_edit_standalone'),
path('assets/', views.mobile_assets_index, name='mobile_assets_index'),
path('assets/search/', views.mobile_assets_search, name='mobile_assets_search'),
path('assets/<str:thematic_code>/<str:asset_model>/<int:asset_id>/', mobile_asset_detail, name='mobile_asset_detail'),
path('assets/<str:asset_model>/<int:asset_id>/', mobile_asset_detail, name='mobile_asset_detail_direct'),
path('inspections/', inspections.inspections_list, name='inspections_list_mobile'),
path('inspections/new/', inspections.quick_inspection_map, name='quick_inspection_map_mobile'),
# Stock mobile

View file

@ -113,6 +113,12 @@ def index(request):
can_inspect = user_config.get_inspectable_thematics().exists()
can_view_inspections = can_inspect or user_config.has_role('viewer')
# Check if user has permission to view assets across any thematic
can_view_assets = request.user.is_superuser or UserThematics.objects.filter(
user_config=user_config,
can_view_assets=True
).exists()
return render(request, "mobile/mobile_index.html", {
'can_edit_green_surfaces': can_edit_green_surfaces,
'can_access_stock': can_access_stock,
@ -122,6 +128,7 @@ def index(request):
'inspection_configs': inspection_configs,
'can_inspect': can_inspect,
'can_view_inspections': can_view_inspections,
'can_view_assets': can_view_assets,
})
@login_not_required
@ -1116,3 +1123,369 @@ def green_surfaces_edit_standalone(request):
context = {}
return render(request, "mobile/green_surfaces_edit_standalone.html", context)
@login_required
def mobile_assets_index(request):
"""
Dedicated mobile assets index page with MapLibre interactive map,
thematic and status filters, and switchable map/list view.
"""
import json
from common.models import Thematic, UserThematics, UserConfig
from assets.views.core import build_thematic_config, ASSET_STATUS_CHOICES
lang = get_language() or 'fr'
user_config = getattr(request.user, 'config', None)
if not user_config:
try:
user_config = UserConfig.objects.get(user=request.user)
except UserConfig.DoesNotExist:
user_config = None
if getattr(request.user, 'is_superuser', False):
accessible_thematics = list(Thematic.objects.order_by(f'{"name_nl" if lang == "nl" else "name_fr"}'))
elif user_config:
thematic_qs = (
UserThematics.objects
.filter(user_config=user_config, can_view_assets=True)
.select_related('thematic')
.order_by(f'thematic__{"name_nl" if lang == "nl" else "name_fr"}')
)
accessible_thematics = [tc.thematic for tc in thematic_qs]
else:
accessible_thematics = []
if not accessible_thematics and not getattr(request.user, 'is_superuser', False):
return render(request, "403.html", status=403)
thematic_config = build_thematic_config(accessible_thematics)
selected_thematic = request.GET.get('thematic', '')
if not selected_thematic and user_config and user_config.default_thematic and user_config.default_thematic in accessible_thematics:
selected_thematic = user_config.default_thematic.code
context = {
'accessible_thematics': accessible_thematics,
'thematic_config_json': json.dumps(thematic_config),
'asset_status_choices': list(ASSET_STATUS_CHOICES.items()),
'selected_thematic': selected_thematic,
'initial_query': request.GET.get('q', '').strip(),
'initial_view': request.GET.get('view', 'map'),
}
return render(request, "mobile/assets/assets_index_mobile.html", context)
@login_required
def mobile_assets_search(request):
"""
Search and filter endpoint for mobile assets.
Returns JSON results for list view and GeoJSON FeatureCollection for MapLibre map.
Supports proximity sorting if lat/lon parameters are provided.
"""
import math
from urllib.parse import quote
from django.urls import reverse
from django.db.models import Q
from common.models import Thematic, UserThematics, UserConfig
from assets.models import (
NatureTree, NatureGreenSurface, NatureShrub, NatureBench,
SignPanel, SignPole,
TrafficLightPole, TrafficLightLantern, TrafficLightElectricalCabinet,
PublicLightingPole, PublicLightingLightFixture, PublicLightingElectricalCabinet,
Roadway, RoadSidewalk, RoadFurniture,
CleanLitterBin, CleanGlassContainer,
ArtworkMonument, ArtworkFountain,
StructureGeoAsset, ControlCenterGeoAsset, ITSGeoAsset,
OutdoorAsset, ParkingSpot,
)
from assets.views.core import get_element_type_label
lang = get_language() or 'fr'
user_config = getattr(request.user, 'config', None)
if not user_config:
try:
user_config = UserConfig.objects.get(user=request.user)
except UserConfig.DoesNotExist:
user_config = None
if getattr(request.user, 'is_superuser', False):
accessible_thematics = list(Thematic.objects.all())
elif user_config:
thematic_qs = (
UserThematics.objects
.filter(user_config=user_config, can_view_assets=True)
.select_related('thematic')
)
accessible_thematics = [tc.thematic for tc in thematic_qs]
else:
accessible_thematics = []
accessible_codes = {t.code for t in accessible_thematics}
thematic_map = {t.code: t for t in accessible_thematics}
q = (request.GET.get('q') or '').strip()
thematic_filter = (request.GET.get('thematic') or '').strip()
status_filter = (request.GET.get('status') or '').strip()
MAX_MOBILE_ASSETS = 500
try:
limit = min(int(request.GET.get('limit', MAX_MOBILE_ASSETS)), MAX_MOBILE_ASSETS)
except (TypeError, ValueError):
limit = MAX_MOBILE_ASSETS
# L'utilisateur doit choisir au minimum une thématique pour voir quelque chose
if not thematic_filter or thematic_filter not in accessible_codes:
return JsonResponse({
'count': 0,
'total_count': 0,
'limit': limit,
'limit_reached': False,
'thematic': '',
'results': [],
'geojson': {
'type': 'FeatureCollection',
'features': [],
}
})
try:
user_lat = float(request.GET.get('lat'))
user_lon = float(request.GET.get('lon'))
except (TypeError, ValueError):
user_lat = None
user_lon = None
# Filtrage spatial par bounding box (bbox) sur la carte MapLibre
bbox_str = (request.GET.get('bbox') or '').strip()
bbox_poly_3812 = None
min_lon, min_lat, max_lon, max_lat = None, None, None, None
if bbox_str:
try:
parts = [float(x.strip()) for x in bbox_str.split(',')]
if len(parts) == 4:
min_lon, min_lat, max_lon, max_lat = parts
from django.contrib.gis.geos import Polygon
bbox_poly_4326 = Polygon.from_bbox((min_lon, min_lat, max_lon, max_lat))
bbox_poly_4326.srid = 4326
bbox_poly_3812 = bbox_poly_4326.clone()
bbox_poly_3812.transform(3812)
except Exception:
bbox_poly_3812 = None
min_lon, min_lat, max_lon, max_lat = None, None, None, None
thematic_models_registry = {
'nature': [
('naturetree', NatureTree),
('naturegreensurface', NatureGreenSurface),
('natureshrub', NatureShrub),
('naturebench', NatureBench),
],
'sign': [
('signpanel', SignPanel),
('signpole', SignPole),
],
'trafficlights': [
('trafficlightpole', TrafficLightPole),
('trafficlightlantern', TrafficLightLantern),
('trafficlightelectricalcabinet', TrafficLightElectricalCabinet),
],
'publiclighting': [
('publiclightingpole', PublicLightingPole),
('publiclightinglightfixture', PublicLightingLightFixture),
('publiclightingelectricalcabinet', PublicLightingElectricalCabinet),
],
'roads': [
('roadway', Roadway),
('roadsidewalk', RoadSidewalk),
('roadfurniture', RoadFurniture),
],
'clean': [
('cleanlitterbin', CleanLitterBin),
('cleanglasscontainer', CleanGlassContainer),
],
'artworks': [
('artworkmonument', ArtworkMonument),
('artworkfountain', ArtworkFountain),
],
'structures': [
('structuregeoasset', StructureGeoAsset),
],
'controlcenters': [
('controlcentergeoasset', ControlCenterGeoAsset),
],
'its': [
('itsgeoasset', ITSGeoAsset),
],
'outdoorfacilities': [
('outdoorasset', OutdoorAsset),
],
'outdoor': [
('outdoorasset', OutdoorAsset),
],
'parking': [
('parkingspot', ParkingSpot),
],
}
def _haversine(lat1, lon1, lat2, lon2):
R = 6371000
phi1 = math.radians(lat1)
phi2 = math.radians(lat2)
delta_phi = math.radians(lat2 - lat1)
delta_lambda = math.radians(lon2 - lon1)
a = math.sin(delta_phi / 2.0) ** 2 + math.cos(phi1) * math.cos(phi2) * math.sin(delta_lambda / 2.0) ** 2
c = 2.0 * math.atan2(math.sqrt(a), math.sqrt(max(0.0, 1.0 - a)))
return R * c
results = []
features = []
total_count = 0
t_code = thematic_filter
thematic_obj = thematic_map.get(t_code)
thematic_name = (getattr(thematic_obj, f'name_{lang}', None) or getattr(thematic_obj, 'name_fr', None) or t_code) if thematic_obj else t_code
thematic_icon = getattr(thematic_obj, 'icon', '') if thematic_obj else ''
models_list = thematic_models_registry.get(t_code, [])
for model_key, model_class in models_list:
qs = model_class.objects.all()
# Filtrage par boîte englobante (bbox / zoom de la carte)
if bbox_poly_3812:
if hasattr(model_class, 'geom'):
qs = qs.filter(geom__bboverlaps=bbox_poly_3812)
elif min_lon is not None and hasattr(model_class, 'lon') and hasattr(model_class, 'lat'):
qs = qs.filter(lon__gte=min_lon, lon__lte=max_lon, lat__gte=min_lat, lat__lte=max_lat)
if status_filter:
if hasattr(model_class, 'status'):
qs = qs.filter(status=status_filter)
else:
if hasattr(model_class, 'status'):
qs = qs.exclude(status='removed')
if q:
search_q = Q(code__icontains=q)
if hasattr(model_class, 'name_fr'):
search_q |= Q(name_fr__icontains=q)
if hasattr(model_class, 'name_nl'):
search_q |= Q(name_nl__icontains=q)
qs = qs.filter(search_q)
# Nombre total d'assets correspondants (pour savoir si limite atteinte)
count_for_model = qs.count()
total_count += count_for_model
remaining_slots = limit - len(results)
if remaining_slots > 0:
items = list(qs[:remaining_slots])
for item in items:
lat = None
lon = None
if hasattr(item, 'lat') and item.lat is not None and hasattr(item, 'lon') and item.lon is not None:
try:
lat = float(str(item.lat).replace(',', '.'))
lon = float(str(item.lon).replace(',', '.'))
except (ValueError, TypeError):
pass
elif hasattr(item, 'geom') and item.geom:
try:
g = item.geom.clone()
g.transform(4326)
centroid = g.centroid
lon = float(centroid.x)
lat = float(centroid.y)
except Exception:
pass
elif hasattr(item, 'location') and item.location:
loc = item.location
if hasattr(loc, 'lat') and loc.lat and hasattr(loc, 'lon') and loc.lon:
try:
lat = float(str(loc.lat).replace(',', '.'))
lon = float(str(loc.lon).replace(',', '.'))
except (ValueError, TypeError):
pass
distance_m = None
if user_lat is not None and user_lon is not None and lat is not None and lon is not None:
try:
distance_m = round(_haversine(user_lat, user_lon, lat, lon))
except Exception:
distance_m = None
item_name = (
getattr(item, f'name_{lang}', None) or
getattr(item, 'name_fr', None) or
(getattr(item.model, f'name_{lang}', None) or getattr(item.model, 'name_fr', None) if getattr(item, 'model', None) else '') or
''
)
status_val = getattr(item, 'status', 'active')
status_display = item.get_status_display() if hasattr(item, 'get_status_display') else status_val
element_type = get_element_type_label(model_key)
detail_url = reverse('mobile:mobile_asset_detail_direct', kwargs={'asset_model': model_key, 'asset_id': item.id})
res_item = {
'id': item.id,
'code': getattr(item, 'code', f'#{item.id}'),
'name': item_name,
'thematic': t_code,
'thematic_name': thematic_name,
'thematic_icon': thematic_icon,
'model_key': model_key,
'element_type': element_type,
'status': status_val,
'status_display': status_display,
'lat': lat,
'lon': lon,
'distance_m': distance_m,
'detail_url': detail_url,
}
results.append(res_item)
if lon is not None and lat is not None:
features.append({
'type': 'Feature',
'id': f"{model_key}_{item.id}",
'geometry': {
'type': 'Point',
'coordinates': [lon, lat],
},
'properties': {
'id': item.id,
'code': getattr(item, 'code', f'#{item.id}'),
'name': item_name,
'thematic': t_code,
'thematic_name': thematic_name,
'thematic_icon': thematic_icon,
'model_key': model_key,
'element_type': element_type,
'status': status_val,
'status_display': status_display,
'distance_m': distance_m,
'detail_url': detail_url,
}
})
if user_lat is not None and user_lon is not None:
results.sort(key=lambda x: (x['distance_m'] if x['distance_m'] is not None else 999999999, x['code']))
else:
results.sort(key=lambda x: x['code'])
results = results[:limit]
limit_reached = total_count > limit
return JsonResponse({
'count': len(results),
'total_count': total_count,
'limit': limit,
'limit_reached': limit_reached,
'thematic': t_code,
'results': results,
'geojson': {
'type': 'FeatureCollection',
'features': features[:limit],
}
})

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,7 +23,7 @@ msgid "Titre"
msgstr "Title"
#: notifications/forms.py:40 notifications/models.py:72
#: notifications/models.py:455
#: notifications/models.py:529
msgid "Contenu"
msgstr "Content"
@ -45,7 +45,7 @@ msgid "Expire le"
msgstr "Expires on"
#: notifications/forms.py:68 notifications/models.py:284
#: notifications/templates/notifications/_new_discussion_modal.html:41
#: notifications/templates/notifications/_new_discussion_modal.html:69
msgid "Pièces jointes"
msgstr "Attachments"
@ -57,7 +57,7 @@ msgstr "Photos or documents (multiple files allowed)."
msgid "Destinataires individuels"
msgstr "Individual recipients"
#: notifications/forms.py:82 notifications/models.py:553
#: notifications/forms.py:82 notifications/models.py:632
msgid "Équipes destinataires"
msgstr "Recipient teams"
@ -94,6 +94,7 @@ msgstr ""
"hour(s) ago:"
#: notifications/management/commands/send_unread_notification_reminders.py:118
#: notifications/services.py:479
msgid "Système"
msgstr "System"
@ -168,8 +169,8 @@ msgstr "Team"
msgid "Équipes"
msgstr "Teams"
#: notifications/models.py:49 notifications/models.py:464
#: notifications/models.py:593
#: notifications/models.py:49 notifications/models.py:543
#: notifications/models.py:672
msgid "Message"
msgstr "Message"
@ -221,7 +222,7 @@ msgstr "System notification"
msgid "Générée automatiquement par le système."
msgstr "Generated automatically by the system."
#: notifications/models.py:114 notifications/models.py:566
#: notifications/models.py:114 notifications/models.py:645
msgid "Prise en charge unique"
msgstr "Single claim"
@ -283,11 +284,11 @@ msgstr "Team notification"
msgid "Notifications d'équipe"
msgstr "Team notifications"
#: notifications/models.py:250 notifications/models.py:597
#: notifications/models.py:250 notifications/models.py:676
msgid "Fichier"
msgstr "File"
#: notifications/models.py:255 notifications/models.py:599
#: notifications/models.py:255 notifications/models.py:678
msgid "Nom du fichier"
msgstr "File name"
@ -295,7 +296,7 @@ msgstr "File name"
msgid "Ajouté par"
msgstr "Added by"
#: notifications/models.py:265 notifications/models.py:600
#: notifications/models.py:265 notifications/models.py:679
msgid "Ajouté le"
msgstr "Added on"
@ -303,7 +304,7 @@ msgstr "Added on"
msgid "Pièce jointe"
msgstr "Attachment"
#: notifications/models.py:301
#: notifications/models.py:301 notifications/models.py:713
msgid "Utilisateur"
msgstr "User"
@ -315,22 +316,22 @@ msgstr "Team notification read"
msgid "Lectures de notifications d'équipe"
msgstr "Team notification reads"
#: notifications/models.py:331
#: notifications/models.py:331 notifications/models.py:751
msgid "Mis à jour le"
msgstr "Updated on"
#: notifications/models.py:336
#: notifications/templates/notifications/discussion_detail.html:105
#: notifications/templates/notifications/discussion_list.html:144
#: notifications/templates/notifications/inbox.html:421
#: notifications/templates/notifications/discussion_detail.html:164
#: notifications/templates/notifications/discussion_list.html:155
#: notifications/templates/notifications/inbox.html:460
msgid "Participants"
msgstr "Participants"
#: notifications/models.py:338
#: notifications/templates/notifications/discussion_detail.html:97
#: notifications/templates/notifications/discussion_list.html:120
#: notifications/templates/notifications/inbox.html:397
#: notifications/templates/notifications/inbox_mobile.html:338
#: notifications/templates/notifications/discussion_detail.html:98
#: notifications/templates/notifications/discussion_list.html:127
#: notifications/templates/notifications/inbox.html:432
#: notifications/templates/notifications/inbox_mobile.html:360
msgid "Clôturée"
msgstr "Closed"
@ -342,106 +343,164 @@ msgstr "Linked object type"
msgid "ID objet lié"
msgstr "Linked object ID"
#: notifications/models.py:355
#: notifications/models.py:360
msgid "Aucun"
msgstr ""
#: notifications/models.py:361 notifications/models.py:368
#: notifications/templates/notifications/_new_discussion_modal.html:34
#: notifications/templates/notifications/discussion_detail.html:132
msgid "Important / À traiter"
msgstr ""
#: notifications/models.py:362 notifications/models.py:377
#: notifications/models.py:378
#: notifications/templates/notifications/_new_discussion_modal.html:39
#: notifications/templates/notifications/discussion_detail.html:139
#: notifications/templates/notifications/inbox.html:374
#: notifications/templates/notifications/inbox_mobile.html:306
msgid "En cours"
msgstr ""
#: notifications/models.py:363 notifications/models.py:386
#: notifications/templates/notifications/_new_discussion_modal.html:44
#: notifications/templates/notifications/discussion_detail.html:146
msgid "Traité / Fait"
msgstr ""
#: notifications/models.py:369
#: notifications/templates/notifications/inbox.html:371
#: notifications/templates/notifications/inbox_mobile.html:303
msgid "Important"
msgstr ""
#: notifications/models.py:387
#: notifications/templates/notifications/inbox.html:377
#: notifications/templates/notifications/inbox_mobile.html:309
msgid "Traité"
msgstr ""
#: notifications/models.py:401
msgid "Flag"
msgstr ""
#: notifications/models.py:409
msgid "Flag défini par"
msgstr ""
#: notifications/models.py:414
msgid "Flag défini le"
msgstr ""
#: notifications/models.py:419
msgid "URL objet lié"
msgstr "Linked object URL"
#: notifications/models.py:358
#: notifications/models.py:422
msgid "Libellé objet lié"
msgstr "Linked object label"
#: notifications/models.py:392
#: notifications/models.py:466
msgid "Intervention"
msgstr "Intervention"
#: notifications/models.py:400
#: notifications/models.py:474
msgid "Observation"
msgstr "Observation"
#: notifications/models.py:408
#: notifications/models.py:482
msgid "Ordre de préparation"
msgstr "Preparation order"
#: notifications/models.py:416
#: notifications/models.py:490
msgid "Projet"
msgstr "Project"
#: notifications/models.py:424
#: notifications/models.py:498
msgid "Générale"
msgstr "General"
#: notifications/models.py:429 notifications/models.py:445
#: notifications/models.py:503 notifications/models.py:519
msgid "Discussion"
msgstr "Discussion"
#: notifications/models.py:430
#: notifications/models.py:504
#: notifications/templates/notifications/discussion_list.html:70
#: notifications/templates/notifications/inbox.html:133
#: notifications/templates/notifications/inbox_mobile.html:152
msgid "Discussions"
msgstr "Discussions"
#: notifications/models.py:453
#: notifications/models.py:527
msgid "Auteur"
msgstr "Author"
#: notifications/models.py:456
#: notifications/models.py:530
msgid "Envoyé le"
msgstr "Sent on"
#: notifications/models.py:457
#: notifications/models.py:531
msgid "Supprimé"
msgstr "Deleted"
#: notifications/models.py:465
#: notifications/models.py:534
msgid "Message système"
msgstr "System message"
#: notifications/models.py:535
msgid "Indique si le message a été généré automatiquement par le système."
msgstr ""
"Indicates whether the message was automatically generated by the system."
#: notifications/models.py:544
msgid "Messages"
msgstr "Messages"
#: notifications/models.py:490
#: notifications/models.py:569
msgid "Intervention annulée"
msgstr "Intervention cancelled"
#: notifications/models.py:495
#: notifications/models.py:574
msgid "Tous (pas de filtre)"
msgstr "All (no filter)"
#: notifications/models.py:496
#: notifications/models.py:575
msgid "Doublon"
msgstr "Duplicate"
#: notifications/models.py:497
#: notifications/models.py:576
msgid "A rediriger"
msgstr "To redirect"
#: notifications/models.py:498
#: notifications/models.py:577
msgid "Pas sous notre gestion"
msgstr "Not under our management"
#: notifications/models.py:499
#: notifications/models.py:578
msgid "Non-relevant"
msgstr "Not relevant"
#: notifications/models.py:500
#: notifications/models.py:579
msgid "Autre"
msgstr "Other"
#: notifications/models.py:504
#: notifications/models.py:583
msgid "Nom de la règle"
msgstr "Rule name"
#: notifications/models.py:505
#: notifications/models.py:584
msgid "Active"
msgstr "Active"
#: notifications/models.py:511
#: notifications/models.py:590
msgid "Événement déclencheur"
msgstr "Trigger event"
#: notifications/models.py:517
#: notifications/models.py:596
msgid "Filtre : type d'annulation"
msgstr "Filter: cancellation type"
#: notifications/models.py:519
#: notifications/models.py:598
msgid ""
"Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une "
"valeur pour n'agir que sur ce type précis."
@ -449,15 +508,15 @@ msgstr ""
"Leave blank to trigger on all cancellation types. Select a value to trigger "
"only on that type."
#: notifications/models.py:529
#: notifications/models.py:608
msgid "Type de notification"
msgstr "Notification type"
#: notifications/models.py:533
#: notifications/models.py:612
msgid "Modèle de titre"
msgstr "Title template"
#: notifications/models.py:535
#: notifications/models.py:614
#, python-brace-format
msgid ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
@ -466,11 +525,11 @@ msgstr ""
"Available variables: {intervention_code}, {intervention_title}, "
"{cancellation_type_label}"
#: notifications/models.py:541
#: notifications/models.py:620
msgid "Modèle de contenu"
msgstr "Content template"
#: notifications/models.py:543
#: notifications/models.py:622
#, python-brace-format
msgid ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
@ -479,50 +538,119 @@ msgstr ""
"Available variables: {intervention_code}, {intervention_title}, "
"{cancellation_type_label}, {cancellation_reason}"
#: notifications/models.py:554
#: notifications/models.py:633
msgid ""
"Les notifications seront envoyées à tous les membres (CompanyMember) de ces "
"équipes."
msgstr ""
"Notifications will be sent to all members (CompanyMember) of these teams."
#: notifications/models.py:560
#: notifications/models.py:639
msgid "Utilisateurs destinataires supplémentaires"
msgstr "Additional individual recipients"
#: notifications/models.py:568
#: notifications/models.py:647
msgid ""
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en "
"charge), elle est automatiquement archivée pour tous les autres "
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en"
" charge), elle est automatiquement archivée pour tous les autres "
"destinataires."
msgstr ""
"If enabled, as soon as one recipient claims the notification, it is "
"automatically archived for all other recipients."
#: notifications/models.py:574
#: notifications/models.py:653
msgid "Créée le"
msgstr "Created on"
#: notifications/models.py:575
#: notifications/models.py:654
msgid "Mise à jour le"
msgstr "Updated on"
#: notifications/models.py:581
#: notifications/models.py:660
msgid "Règle de notification"
msgstr "Notification rule"
#: notifications/models.py:582
#: notifications/models.py:661
msgid "Règles de notification"
msgstr "Notification rules"
#: notifications/models.py:618
#: notifications/models.py:697
msgid "Pièce jointe de message"
msgstr "Message attachment"
#: notifications/models.py:619
#: notifications/models.py:698
msgid "Pièces jointes de messages"
msgstr "Message attachments"
#: notifications/models.py:717
msgid "Endpoint Push"
msgstr ""
#: notifications/models.py:718
msgid "URL unique de réception push fournie par le navigateur."
msgstr ""
#: notifications/models.py:722
msgid "Clé p256dh"
msgstr ""
#: notifications/models.py:723
msgid "Clé publique du client."
msgstr ""
#: notifications/models.py:727
msgid "Secret auth"
msgstr ""
#: notifications/models.py:728
msgid "Secret d'authentification pour le chiffrement."
msgstr ""
#: notifications/models.py:733
msgid "User Agent"
msgstr ""
#: notifications/models.py:738
msgid "Navigateur"
msgstr ""
#: notifications/models.py:743
msgid "Système d'exploitation"
msgstr ""
#: notifications/models.py:748
msgid "Nom de l'appareil"
msgstr "Device name"
#: notifications/models.py:750
#: notifications/templates/notifications/notification_settings.html:96
msgid "Enregistré le"
msgstr "Saved on"
#: notifications/models.py:754
msgid "Appareil inconnu"
msgstr ""
#: notifications/models.py:758
msgid "Abonnement Web Push"
msgstr ""
#: notifications/models.py:759
msgid "Abonnements Web Push"
msgstr ""
#: notifications/services.py:498
#, python-brace-format
msgid "{icon} {user} a défini le statut : {label}"
msgstr ""
#: notifications/services.py:504
#, python-brace-format
msgid ""
"<i class=\"bi bi-flag text-muted me-1\"></i> {user} a retiré le drapeau de "
"suivi."
msgstr ""
#: notifications/templates/notifications/_new_discussion_modal.html:8
#: notifications/templates/notifications/discussion_list.html:74
#: notifications/templates/notifications/inbox.html:165
@ -534,40 +662,50 @@ msgstr "New discussion"
msgid "Fermer"
msgstr "Close"
#: notifications/templates/notifications/_new_discussion_modal.html:17
#: notifications/templates/notifications/_new_discussion_modal.html:18
msgid "Sujet / Titre (optionnel)"
msgstr "Subject / Title (optional)"
#: notifications/templates/notifications/_new_discussion_modal.html:20
#: notifications/templates/notifications/_new_discussion_modal.html:21
msgid "Ex: Question sur le dossier..."
msgstr "E.g.: Question about the file..."
#: notifications/templates/notifications/_new_discussion_modal.html:25
#: notifications/templates/notifications/_new_discussion_modal.html:27
msgid "Statut initial"
msgstr ""
#: notifications/templates/notifications/_new_discussion_modal.html:29
#: notifications/templates/notifications/discussion_detail.html:154
msgid "Aucun drapeau"
msgstr "No flag"
#: notifications/templates/notifications/_new_discussion_modal.html:53
msgid "Message *"
msgstr "Message *"
#: notifications/templates/notifications/_new_discussion_modal.html:28
#: notifications/templates/notifications/_new_discussion_modal.html:56
msgid "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes."
msgstr "Type @ to mention/tag users or teams."
#: notifications/templates/notifications/_new_discussion_modal.html:32
#: notifications/templates/notifications/_new_discussion_modal.html:60
msgid "Rédigez votre message... (@ pour tagger quelqu'un)"
msgstr "Write your message... (@ to tag someone)"
#: notifications/templates/notifications/_new_discussion_modal.html:44
#: notifications/templates/notifications/_new_discussion_modal.html:72
msgid "Joindre des fichiers"
msgstr "Attach files"
#: notifications/templates/notifications/_new_discussion_modal.html:52
#: notifications/templates/notifications/_new_discussion_modal.html:80
#: notifications/templates/notifications/create.html:82
#: notifications/templates/notifications/notification_settings.html:104
#: notifications/templates/notifications/notification_settings.html:200
#: notifications/templates/notifications/team_form.html:39
msgid "Annuler"
msgstr "Cancel"
#: notifications/templates/notifications/_new_discussion_modal.html:55
#: notifications/templates/notifications/_new_discussion_modal.html:83
#: notifications/templates/notifications/create.html:85
#: notifications/templates/notifications/discussion_detail.html:194
#: notifications/templates/notifications/discussion_detail.html:268
msgid "Envoyer"
msgstr "Send"
@ -580,55 +718,68 @@ msgstr "Create notification"
msgid "Ctrl+clic pour sélectionner plusieurs"
msgstr "Ctrl+click to select multiple"
#: notifications/templates/notifications/discussion_detail.html:85
#: notifications/templates/notifications/discussion_detail.html:86
msgid "Retour aux discussions"
msgstr "Back to discussions"
#: notifications/templates/notifications/discussion_detail.html:120
#: notifications/templates/notifications/discussion_detail.html:123
#: notifications/templates/notifications/discussion_detail.html:504
#: notifications/templates/notifications/inbox.html:366
msgid "Statut"
msgstr ""
#: notifications/templates/notifications/discussion_detail.html:128
msgid "Statut de suivi"
msgstr ""
#: notifications/templates/notifications/discussion_detail.html:179
msgid "Aucun message pour l'instant. Soyez le premier à écrire."
msgstr "No messages yet. Be the first to write."
#: notifications/templates/notifications/discussion_detail.html:184
#: notifications/templates/notifications/discussion_detail.html:254
msgid "Écrire un message... (@ pour mentionner)"
msgstr "Write a message... (@ to mention)"
#: notifications/templates/notifications/discussion_detail.html:187
#: notifications/templates/notifications/discussion_detail.html:261
msgid "Joindre"
msgstr "Attach"
#: notifications/templates/notifications/discussion_detail.html:202
#: notifications/templates/notifications/discussion_detail.html:276
msgid "Cette discussion est clôturée."
msgstr "This discussion is closed."
#: notifications/templates/notifications/discussion_detail.html:458
msgid "Le message ne peut pas être vide."
msgstr "The message cannot be empty."
#: notifications/templates/notifications/discussion_list.html:79
#: notifications/templates/notifications/discussion_list.html:80
#: notifications/templates/notifications/inbox.html:170
#: notifications/templates/notifications/inbox.html:171
#: notifications/templates/notifications/inbox_mobile.html:115
#: notifications/templates/notifications/notification_settings.html:4
msgid "Paramètres"
msgstr "Settings"
#: notifications/templates/notifications/discussion_list.html:89
#: notifications/templates/notifications/inbox.html:366
#: notifications/templates/notifications/inbox_mobile.html:301
#: notifications/templates/notifications/inbox.html:394
#: notifications/templates/notifications/inbox_mobile.html:317
msgid "Vous n'avez encore aucune discussion."
msgstr "You don't have any discussions yet."
#: notifications/templates/notifications/discussion_list.html:137
#: notifications/templates/notifications/inbox.html:414
#: notifications/templates/notifications/inbox_mobile.html:350
#: notifications/templates/notifications/discussion_list.html:148
#: notifications/templates/notifications/inbox.html:453
#: notifications/templates/notifications/inbox_mobile.html:376
msgid "Aucun message encore."
msgstr "No messages yet."
#: notifications/templates/notifications/discussion_list.html:160
#: notifications/templates/notifications/inbox.html:437
#: notifications/templates/notifications/discussion_list.html:171
#: notifications/templates/notifications/inbox.html:476
msgid "participants au total"
msgstr "participants in total"
#: notifications/templates/notifications/discussion_list.html:170
#: notifications/templates/notifications/inbox.html:447
#: notifications/templates/notifications/inbox_mobile.html:372
#: notifications/templates/notifications/discussion_list.html:181
#: notifications/templates/notifications/inbox.html:486
#: notifications/templates/notifications/inbox_mobile.html:398
msgid "non lu(s)"
msgstr "unread"
@ -652,6 +803,7 @@ msgid "Archivées"
msgstr "Archived"
#: notifications/templates/notifications/inbox.html:210
#: notifications/templates/notifications/inbox.html:383
#: notifications/templates/notifications/inbox_mobile.html:194
msgid "Réinitialiser"
msgstr "Reset"
@ -686,6 +838,11 @@ msgstr "No archived notifications."
msgid "Vous n'avez aucune notification."
msgstr "You have no notifications."
#: notifications/templates/notifications/inbox.html:368
#: notifications/templates/notifications/inbox_mobile.html:300
msgid "Tous"
msgstr ""
#: notifications/templates/notifications/inbox_mobile.html:119
msgid "Accueil"
msgstr "Home"
@ -698,40 +855,112 @@ msgstr "Take"
msgid "Lu"
msgstr "Read"
#: notifications/templates/notifications/notification_settings.html:4
#: notifications/templates/notifications/notification_settings.html:17
msgid "Paramètres des notifications"
msgstr "Notification settings"
#: notifications/templates/notifications/notification_settings.html:12
#: notifications/templates/notifications/team_list.html:18
msgid "Retour aux notifications"
msgstr "Back to notifications"
#: notifications/templates/notifications/notification_settings.html:17
msgid "Paramètres des notifications"
msgstr "Notification settings"
#: notifications/templates/notifications/notification_settings.html:19
msgid ""
"Gérez vos préférences de rappel par e-mail pour les notifications non lues."
msgstr "Manage your email reminder preferences for unread notifications."
"Gérez vos alertes instantanées sur cet appareil et vos rappels par e-mail."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:28
msgid "Notifications sur cet appareil (Alertes système / Push)"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:31
msgid "Vérification..."
msgstr "Verifying..."
#: notifications/templates/notifications/notification_settings.html:36
msgid ""
"Recevez des alertes instantanées sur votre écran (ordinateur ou smartphone) "
"dès qu'une tâche, intervention ou mention vous concerne, même si le site est"
" en arrière-plan."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:42
msgid ""
"Votre navigateur ou appareil actuel ne prend pas en charge les notifications"
" Web Push. (Sur iPhone/iPad, installez l'application via le menu Partager > "
"'Sur l'écran d'accueil')."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:48
msgid ""
"Les notifications sont bloquées dans les paramètres de votre navigateur pour"
" ce site. Veuillez modifier vos permissions de site pour les autoriser."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:55
msgid "Activer les notifications sur cet appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:58
msgid "Cliquez pour autoriser et enregistrer cet appareil."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:64
msgid "Activer sur cet appareil"
msgstr "Enable on this device"
#: notifications/templates/notifications/notification_settings.html:66
msgid "Envoyer une notification test"
msgstr "Send test notification"
#: notifications/templates/notifications/notification_settings.html:68
msgid "Tester"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:76
msgid "Appareils enregistrés pour votre compte"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:93
#: notifications/views.py:986
msgid "Appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:103
msgid "Retirer cet appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:103
msgid "Voulez-vous retirer cet appareil des notifications push ?"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:112
msgid ""
"Aucun appareil n'est actuellement enregistré pour recevoir des notifications"
" push."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:124
msgid "Rappels par e-mail"
msgstr "Email reminders"
#: notifications/templates/notifications/notification_settings.html:41
#: notifications/templates/notifications/notification_settings.html:137
msgid "Langue préférée pour les e-mails et notifications"
msgstr "Preferred language for emails and notifications"
#: notifications/templates/notifications/notification_settings.html:50
#: notifications/templates/notifications/notification_settings.html:146
msgid ""
"Les e-mails de rappel et les notifications automatiques vous seront envoyés "
"dans cette langue."
msgstr ""
"Reminder emails and automatic notifications will be sent in this language."
#: notifications/templates/notifications/notification_settings.html:58
#: notifications/templates/notifications/notification_settings.html:154
msgid "Activer les rappels par e-mail"
msgstr "Enable email reminders"
#: notifications/templates/notifications/notification_settings.html:61
#: notifications/templates/notifications/notification_settings.html:157
msgid ""
"Recevoir un récapitulatif par e-mail si des notifications restent non lues "
"au-delà du délai spécifié."
@ -739,27 +968,27 @@ msgstr ""
"Receive an email summary if notifications remain unread past the specified "
"delay."
#: notifications/templates/notifications/notification_settings.html:72
#: notifications/templates/notifications/notification_settings.html:168
msgid "Adresse(s) e-mail de réception"
msgstr "Recipient email address(es)"
#: notifications/templates/notifications/notification_settings.html:80
#: notifications/templates/notifications/notification_settings.html:176
msgid "Laissez vide pour utiliser l'e-mail principal de votre compte"
msgstr "Leave blank to use your account's primary email"
#: notifications/templates/notifications/notification_settings.html:81
#: notifications/templates/notifications/notification_settings.html:177
msgid "Pour plusieurs destinataires, séparez les adresses par des virgules."
msgstr "For multiple recipients, separate addresses with commas."
#: notifications/templates/notifications/notification_settings.html:88
#: notifications/templates/notifications/notification_settings.html:184
msgid "Délai avant l'envoi du rappel (en heures)"
msgstr "Delay before sending reminder (in hours)"
#: notifications/templates/notifications/notification_settings.html:92
#: notifications/templates/notifications/notification_settings.html:188
msgid "heures"
msgstr "hours"
#: notifications/templates/notifications/notification_settings.html:98
#: notifications/templates/notifications/notification_settings.html:194
msgid ""
"Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au "
"bout de 24 heures."
@ -767,7 +996,7 @@ msgstr ""
"Example: 24h = a reminder will be sent if a notification is unread after 24 "
"hours."
#: notifications/templates/notifications/notification_settings.html:107
#: notifications/templates/notifications/notification_settings.html:203
msgid "Enregistrer mes préférences"
msgstr "Save my preferences"
@ -788,7 +1017,7 @@ msgid "Nouvelle équipe"
msgstr "New team"
#: notifications/templates/notifications/team_list.html:46
#: notifications/views.py:498
#: notifications/views.py:533
msgid "Modifier"
msgstr "Edit"
@ -820,63 +1049,124 @@ msgstr "No teams defined."
msgid "Créer une équipe"
msgstr "Create team"
#: notifications/views.py:390
#: notifications/tests.py:319
msgid "Alerte Intervention"
msgstr "Intervention Alert"
#: notifications/tests.py:320
msgid "Nouvelle intervention assignée"
msgstr "New intervention assigned"
#: notifications/views.py:425
msgid "Vous n'avez pas les droits pour créer une notification."
msgstr "You do not have permission to create a notification."
#: notifications/views.py:423
#: notifications/views.py:458
msgid "Notification envoyée avec succès."
msgstr "Notification sent successfully."
#: notifications/views.py:460
#: notifications/views.py:495
msgid "Vous n'avez pas les droits pour créer une équipe."
msgstr "You do not have permission to create a team."
#: notifications/views.py:470
#: notifications/views.py:505
msgid "Équipe créée avec succès."
msgstr "Team created successfully."
#: notifications/views.py:475
#: notifications/views.py:510
msgid "Créer"
msgstr "Create"
#: notifications/views.py:486
#: notifications/views.py:521
msgid "Vous n'avez pas les droits pour modifier une équipe."
msgstr "You do not have permission to edit a team."
#: notifications/views.py:493
#: notifications/views.py:528
msgid "Équipe mise à jour."
msgstr "Team updated."
#: notifications/views.py:508
#: notifications/views.py:543
msgid "Vous n'avez pas les droits pour supprimer une équipe."
msgstr "You do not have permission to delete a team."
#: notifications/views.py:511
#: notifications/views.py:546
msgid "Équipe supprimée."
msgstr "Team deleted."
#: notifications/views.py:561
#: notifications/views.py:604
msgid "Vous n'êtes pas participant de cette discussion."
msgstr "You are not a participant in this discussion."
#: notifications/views.py:574
#: notifications/views.py:620
msgid "Message envoyé."
msgstr "Message sent."
#: notifications/views.py:602
#: notifications/views.py:648
msgid "Vous n'avez pas accès à cette discussion."
msgstr "You do not have access to this discussion."
#: notifications/views.py:699
msgid "Statut de la discussion mis à jour."
msgstr "Discussion status updated."
#: notifications/views.py:722
#, python-format
msgid "Discussion de %(name)s"
msgstr "Discussion from %(name)s"
#: notifications/views.py:613
#: notifications/views.py:736
msgid "Discussion créée avec succès."
msgstr "Discussion created successfully."
#: notifications/views.py:616
#: notifications/views.py:739
msgid "Le contenu du message ne peut pas être vide."
msgstr "Message content cannot be empty."
#: notifications/views.py:640
#: notifications/views.py:763
msgid "Vos préférences de rappel par e-mail ont été enregistrées."
msgstr "Your email reminder preferences have been saved."
#: notifications/views.py:896
msgid "Requête invalide"
msgstr ""
#: notifications/views.py:904
msgid "Paramètres d'abonnement push incomplets"
msgstr ""
#: notifications/views.py:954
msgid "Aucun appareil actif n'est enregistré pour votre compte."
msgstr ""
#: notifications/views.py:959
msgid "Test de notification Loko"
msgstr "Loko notification test"
#: notifications/views.py:960
msgid ""
"Les notifications instantanées sur votre appareil fonctionnent correctement "
"!"
msgstr ""
#: notifications/views.py:968
#, python-format
msgid "Notification de test envoyée avec succès sur %(count)d appareil(s) !"
msgstr "Test notification sent successfully to %(count)d device(s)!"
#: notifications/views.py:972
msgid "Impossible de délivrer la notification au service push."
msgstr ""
#: notifications/views.py:974
#, python-format
msgid "Échec de distribution : %(error)s"
msgstr ""
#: notifications/views.py:988
#, python-format
msgid "L'appareil « %(name)s » a été retiré."
msgstr ""
#~ msgid ""
#~ "Gérez vos préférences de rappel par e-mail pour les notifications non lues."
#~ msgstr "Manage your email reminder preferences for unread notifications."

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,7 +23,7 @@ msgid "Titre"
msgstr "Titre"
#: notifications/forms.py:40 notifications/models.py:72
#: notifications/models.py:455
#: notifications/models.py:529
msgid "Contenu"
msgstr "Contenu"
@ -45,7 +45,7 @@ msgid "Expire le"
msgstr "Expire le"
#: notifications/forms.py:68 notifications/models.py:284
#: notifications/templates/notifications/_new_discussion_modal.html:41
#: notifications/templates/notifications/_new_discussion_modal.html:69
msgid "Pièces jointes"
msgstr "Pièces jointes"
@ -57,7 +57,7 @@ msgstr "Photos ou documents (plusieurs fichiers possibles)."
msgid "Destinataires individuels"
msgstr "Destinataires individuels"
#: notifications/forms.py:82 notifications/models.py:553
#: notifications/forms.py:82 notifications/models.py:632
msgid "Équipes destinataires"
msgstr "Équipes destinataires"
@ -94,6 +94,7 @@ msgstr ""
"%(delay)d heure(s) :"
#: notifications/management/commands/send_unread_notification_reminders.py:118
#: notifications/services.py:479
msgid "Système"
msgstr "Système"
@ -168,8 +169,8 @@ msgstr "Équipe"
msgid "Équipes"
msgstr "Équipes"
#: notifications/models.py:49 notifications/models.py:464
#: notifications/models.py:593
#: notifications/models.py:49 notifications/models.py:543
#: notifications/models.py:672
msgid "Message"
msgstr "Message"
@ -221,7 +222,7 @@ msgstr "Notification système"
msgid "Générée automatiquement par le système."
msgstr "Générée automatiquement par le système."
#: notifications/models.py:114 notifications/models.py:566
#: notifications/models.py:114 notifications/models.py:645
msgid "Prise en charge unique"
msgstr "Prise en charge unique"
@ -283,11 +284,11 @@ msgstr "Notification d'équipe"
msgid "Notifications d'équipe"
msgstr "Notifications d'équipe"
#: notifications/models.py:250 notifications/models.py:597
#: notifications/models.py:250 notifications/models.py:676
msgid "Fichier"
msgstr "Fichier"
#: notifications/models.py:255 notifications/models.py:599
#: notifications/models.py:255 notifications/models.py:678
msgid "Nom du fichier"
msgstr "Nom du fichier"
@ -295,7 +296,7 @@ msgstr "Nom du fichier"
msgid "Ajouté par"
msgstr "Ajouté par"
#: notifications/models.py:265 notifications/models.py:600
#: notifications/models.py:265 notifications/models.py:679
msgid "Ajouté le"
msgstr "Ajouté le"
@ -303,7 +304,7 @@ msgstr "Ajouté le"
msgid "Pièce jointe"
msgstr "Pièce jointe"
#: notifications/models.py:301
#: notifications/models.py:301 notifications/models.py:713
msgid "Utilisateur"
msgstr "Utilisateur"
@ -315,22 +316,22 @@ msgstr "Lecture de notification d'équipe"
msgid "Lectures de notifications d'équipe"
msgstr "Lectures de notifications d'équipe"
#: notifications/models.py:331
#: notifications/models.py:331 notifications/models.py:751
msgid "Mis à jour le"
msgstr "Mis à jour le"
#: notifications/models.py:336
#: notifications/templates/notifications/discussion_detail.html:105
#: notifications/templates/notifications/discussion_list.html:144
#: notifications/templates/notifications/inbox.html:421
#: notifications/templates/notifications/discussion_detail.html:164
#: notifications/templates/notifications/discussion_list.html:155
#: notifications/templates/notifications/inbox.html:460
msgid "Participants"
msgstr "Participants"
#: notifications/models.py:338
#: notifications/templates/notifications/discussion_detail.html:97
#: notifications/templates/notifications/discussion_list.html:120
#: notifications/templates/notifications/inbox.html:397
#: notifications/templates/notifications/inbox_mobile.html:338
#: notifications/templates/notifications/discussion_detail.html:98
#: notifications/templates/notifications/discussion_list.html:127
#: notifications/templates/notifications/inbox.html:432
#: notifications/templates/notifications/inbox_mobile.html:360
msgid "Clôturée"
msgstr "Clôturée"
@ -342,106 +343,163 @@ msgstr "Type d'objet lié"
msgid "ID objet lié"
msgstr "ID objet lié"
#: notifications/models.py:355
#: notifications/models.py:360
msgid "Aucun"
msgstr ""
#: notifications/models.py:361 notifications/models.py:368
#: notifications/templates/notifications/_new_discussion_modal.html:34
#: notifications/templates/notifications/discussion_detail.html:132
msgid "Important / À traiter"
msgstr ""
#: notifications/models.py:362 notifications/models.py:377
#: notifications/models.py:378
#: notifications/templates/notifications/_new_discussion_modal.html:39
#: notifications/templates/notifications/discussion_detail.html:139
#: notifications/templates/notifications/inbox.html:374
#: notifications/templates/notifications/inbox_mobile.html:306
msgid "En cours"
msgstr ""
#: notifications/models.py:363 notifications/models.py:386
#: notifications/templates/notifications/_new_discussion_modal.html:44
#: notifications/templates/notifications/discussion_detail.html:146
msgid "Traité / Fait"
msgstr ""
#: notifications/models.py:369
#: notifications/templates/notifications/inbox.html:371
#: notifications/templates/notifications/inbox_mobile.html:303
msgid "Important"
msgstr ""
#: notifications/models.py:387
#: notifications/templates/notifications/inbox.html:377
#: notifications/templates/notifications/inbox_mobile.html:309
msgid "Traité"
msgstr ""
#: notifications/models.py:401
msgid "Flag"
msgstr ""
#: notifications/models.py:409
msgid "Flag défini par"
msgstr ""
#: notifications/models.py:414
msgid "Flag défini le"
msgstr ""
#: notifications/models.py:419
msgid "URL objet lié"
msgstr "URL objet lié"
#: notifications/models.py:358
#: notifications/models.py:422
msgid "Libellé objet lié"
msgstr "Libellé objet lié"
#: notifications/models.py:392
#: notifications/models.py:466
msgid "Intervention"
msgstr "Intervention"
#: notifications/models.py:400
#: notifications/models.py:474
msgid "Observation"
msgstr "Observation"
#: notifications/models.py:408
#: notifications/models.py:482
msgid "Ordre de préparation"
msgstr "Ordre de préparation"
#: notifications/models.py:416
#: notifications/models.py:490
msgid "Projet"
msgstr "Projet"
#: notifications/models.py:424
#: notifications/models.py:498
msgid "Générale"
msgstr "Générale"
#: notifications/models.py:429 notifications/models.py:445
#: notifications/models.py:503 notifications/models.py:519
msgid "Discussion"
msgstr "Discussion"
#: notifications/models.py:430
#: notifications/models.py:504
#: notifications/templates/notifications/discussion_list.html:70
#: notifications/templates/notifications/inbox.html:133
#: notifications/templates/notifications/inbox_mobile.html:152
msgid "Discussions"
msgstr "Discussions"
#: notifications/models.py:453
#: notifications/models.py:527
msgid "Auteur"
msgstr "Auteur"
#: notifications/models.py:456
#: notifications/models.py:530
msgid "Envoyé le"
msgstr "Envoyé le"
#: notifications/models.py:457
#: notifications/models.py:531
msgid "Supprimé"
msgstr "Supprimé"
#: notifications/models.py:465
#: notifications/models.py:534
msgid "Message système"
msgstr "Message système"
#: notifications/models.py:535
msgid "Indique si le message a été généré automatiquement par le système."
msgstr "Indique si le message a été généré automatiquement par le système."
#: notifications/models.py:544
msgid "Messages"
msgstr "Messages"
#: notifications/models.py:490
#: notifications/models.py:569
msgid "Intervention annulée"
msgstr "Intervention annulée"
#: notifications/models.py:495
#: notifications/models.py:574
msgid "Tous (pas de filtre)"
msgstr "Tous (pas de filtre)"
#: notifications/models.py:496
#: notifications/models.py:575
msgid "Doublon"
msgstr "Doublon"
#: notifications/models.py:497
#: notifications/models.py:576
msgid "A rediriger"
msgstr "A rediriger"
#: notifications/models.py:498
#: notifications/models.py:577
msgid "Pas sous notre gestion"
msgstr "Pas sous notre gestion"
#: notifications/models.py:499
#: notifications/models.py:578
msgid "Non-relevant"
msgstr "Non-relevant"
#: notifications/models.py:500
#: notifications/models.py:579
msgid "Autre"
msgstr "Autre"
#: notifications/models.py:504
#: notifications/models.py:583
msgid "Nom de la règle"
msgstr "Nom de la règle"
#: notifications/models.py:505
#: notifications/models.py:584
msgid "Active"
msgstr "Active"
#: notifications/models.py:511
#: notifications/models.py:590
msgid "Événement déclencheur"
msgstr "Événement déclencheur"
#: notifications/models.py:517
#: notifications/models.py:596
msgid "Filtre : type d'annulation"
msgstr "Filtre : type d'annulation"
#: notifications/models.py:519
#: notifications/models.py:598
msgid ""
"Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une "
"valeur pour n'agir que sur ce type précis."
@ -449,15 +507,15 @@ msgstr ""
"Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une "
"valeur pour n'agir que sur ce type précis."
#: notifications/models.py:529
#: notifications/models.py:608
msgid "Type de notification"
msgstr "Type de notification"
#: notifications/models.py:533
#: notifications/models.py:612
msgid "Modèle de titre"
msgstr "Modèle de titre"
#: notifications/models.py:535
#: notifications/models.py:614
#, python-brace-format
msgid ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
@ -466,11 +524,11 @@ msgstr ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
"{cancellation_type_label}"
#: notifications/models.py:541
#: notifications/models.py:620
msgid "Modèle de contenu"
msgstr "Modèle de contenu"
#: notifications/models.py:543
#: notifications/models.py:622
#, python-brace-format
msgid ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
@ -479,7 +537,7 @@ msgstr ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
"{cancellation_type_label}, {cancellation_reason}"
#: notifications/models.py:554
#: notifications/models.py:633
msgid ""
"Les notifications seront envoyées à tous les membres (CompanyMember) de ces "
"équipes."
@ -487,44 +545,113 @@ msgstr ""
"Les notifications seront envoyées à tous les membres (CompanyMember) de ces "
"équipes."
#: notifications/models.py:560
#: notifications/models.py:639
msgid "Utilisateurs destinataires supplémentaires"
msgstr "Utilisateurs destinataires supplémentaires"
#: notifications/models.py:568
#: notifications/models.py:647
msgid ""
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en "
"charge), elle est automatiquement archivée pour tous les autres "
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en"
" charge), elle est automatiquement archivée pour tous les autres "
"destinataires."
msgstr ""
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en "
"charge), elle est automatiquement archivée pour tous les autres "
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en"
" charge), elle est automatiquement archivée pour tous les autres "
"destinataires."
#: notifications/models.py:574
#: notifications/models.py:653
msgid "Créée le"
msgstr "Créée le"
#: notifications/models.py:575
#: notifications/models.py:654
msgid "Mise à jour le"
msgstr "Mise à jour le"
#: notifications/models.py:581
#: notifications/models.py:660
msgid "Règle de notification"
msgstr "Règle de notification"
#: notifications/models.py:582
#: notifications/models.py:661
msgid "Règles de notification"
msgstr "Règles de notification"
#: notifications/models.py:618
#: notifications/models.py:697
msgid "Pièce jointe de message"
msgstr "Pièce jointe de message"
#: notifications/models.py:619
#: notifications/models.py:698
msgid "Pièces jointes de messages"
msgstr "Pièces jointes de messages"
#: notifications/models.py:717
msgid "Endpoint Push"
msgstr ""
#: notifications/models.py:718
msgid "URL unique de réception push fournie par le navigateur."
msgstr ""
#: notifications/models.py:722
msgid "Clé p256dh"
msgstr ""
#: notifications/models.py:723
msgid "Clé publique du client."
msgstr ""
#: notifications/models.py:727
msgid "Secret auth"
msgstr ""
#: notifications/models.py:728
msgid "Secret d'authentification pour le chiffrement."
msgstr ""
#: notifications/models.py:733
msgid "User Agent"
msgstr ""
#: notifications/models.py:738
msgid "Navigateur"
msgstr ""
#: notifications/models.py:743
msgid "Système d'exploitation"
msgstr ""
#: notifications/models.py:748
msgid "Nom de l'appareil"
msgstr "Nom de l'appareil"
#: notifications/models.py:750
#: notifications/templates/notifications/notification_settings.html:96
msgid "Enregistré le"
msgstr "Enregistré le"
#: notifications/models.py:754
msgid "Appareil inconnu"
msgstr ""
#: notifications/models.py:758
msgid "Abonnement Web Push"
msgstr ""
#: notifications/models.py:759
msgid "Abonnements Web Push"
msgstr ""
#: notifications/services.py:498
#, python-brace-format
msgid "{icon} {user} a défini le statut : {label}"
msgstr ""
#: notifications/services.py:504
#, python-brace-format
msgid ""
"<i class=\"bi bi-flag text-muted me-1\"></i> {user} a retiré le drapeau de "
"suivi."
msgstr ""
#: notifications/templates/notifications/_new_discussion_modal.html:8
#: notifications/templates/notifications/discussion_list.html:74
#: notifications/templates/notifications/inbox.html:165
@ -536,40 +663,50 @@ msgstr "Nouvelle discussion"
msgid "Fermer"
msgstr "Fermer"
#: notifications/templates/notifications/_new_discussion_modal.html:17
#: notifications/templates/notifications/_new_discussion_modal.html:18
msgid "Sujet / Titre (optionnel)"
msgstr "Sujet / Titre (optionnel)"
#: notifications/templates/notifications/_new_discussion_modal.html:20
#: notifications/templates/notifications/_new_discussion_modal.html:21
msgid "Ex: Question sur le dossier..."
msgstr "Ex: Question sur le dossier..."
#: notifications/templates/notifications/_new_discussion_modal.html:25
#: notifications/templates/notifications/_new_discussion_modal.html:27
msgid "Statut initial"
msgstr ""
#: notifications/templates/notifications/_new_discussion_modal.html:29
#: notifications/templates/notifications/discussion_detail.html:154
msgid "Aucun drapeau"
msgstr "Aucun drapeau"
#: notifications/templates/notifications/_new_discussion_modal.html:53
msgid "Message *"
msgstr "Message *"
#: notifications/templates/notifications/_new_discussion_modal.html:28
#: notifications/templates/notifications/_new_discussion_modal.html:56
msgid "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes."
msgstr "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes."
#: notifications/templates/notifications/_new_discussion_modal.html:32
#: notifications/templates/notifications/_new_discussion_modal.html:60
msgid "Rédigez votre message... (@ pour tagger quelqu'un)"
msgstr "Rédigez votre message... (@ pour tagger quelqu'un)"
#: notifications/templates/notifications/_new_discussion_modal.html:44
#: notifications/templates/notifications/_new_discussion_modal.html:72
msgid "Joindre des fichiers"
msgstr "Joindre des fichiers"
#: notifications/templates/notifications/_new_discussion_modal.html:52
#: notifications/templates/notifications/_new_discussion_modal.html:80
#: notifications/templates/notifications/create.html:82
#: notifications/templates/notifications/notification_settings.html:104
#: notifications/templates/notifications/notification_settings.html:200
#: notifications/templates/notifications/team_form.html:39
msgid "Annuler"
msgstr "Annuler"
#: notifications/templates/notifications/_new_discussion_modal.html:55
#: notifications/templates/notifications/_new_discussion_modal.html:83
#: notifications/templates/notifications/create.html:85
#: notifications/templates/notifications/discussion_detail.html:194
#: notifications/templates/notifications/discussion_detail.html:268
msgid "Envoyer"
msgstr "Envoyer"
@ -582,55 +719,68 @@ msgstr "Créer une notification"
msgid "Ctrl+clic pour sélectionner plusieurs"
msgstr "Ctrl+clic pour sélectionner plusieurs"
#: notifications/templates/notifications/discussion_detail.html:85
#: notifications/templates/notifications/discussion_detail.html:86
msgid "Retour aux discussions"
msgstr "Retour aux discussions"
#: notifications/templates/notifications/discussion_detail.html:120
#: notifications/templates/notifications/discussion_detail.html:123
#: notifications/templates/notifications/discussion_detail.html:504
#: notifications/templates/notifications/inbox.html:366
msgid "Statut"
msgstr ""
#: notifications/templates/notifications/discussion_detail.html:128
msgid "Statut de suivi"
msgstr ""
#: notifications/templates/notifications/discussion_detail.html:179
msgid "Aucun message pour l'instant. Soyez le premier à écrire."
msgstr "Aucun message pour l'instant. Soyez le premier à écrire."
#: notifications/templates/notifications/discussion_detail.html:184
#: notifications/templates/notifications/discussion_detail.html:254
msgid "Écrire un message... (@ pour mentionner)"
msgstr "Écrire un message... (@ pour mentionner)"
#: notifications/templates/notifications/discussion_detail.html:187
#: notifications/templates/notifications/discussion_detail.html:261
msgid "Joindre"
msgstr "Joindre"
#: notifications/templates/notifications/discussion_detail.html:202
#: notifications/templates/notifications/discussion_detail.html:276
msgid "Cette discussion est clôturée."
msgstr "Cette discussion est clôturée."
#: notifications/templates/notifications/discussion_detail.html:458
msgid "Le message ne peut pas être vide."
msgstr "Le message ne peut pas être vide."
#: notifications/templates/notifications/discussion_list.html:79
#: notifications/templates/notifications/discussion_list.html:80
#: notifications/templates/notifications/inbox.html:170
#: notifications/templates/notifications/inbox.html:171
#: notifications/templates/notifications/inbox_mobile.html:115
#: notifications/templates/notifications/notification_settings.html:4
msgid "Paramètres"
msgstr "Paramètres"
#: notifications/templates/notifications/discussion_list.html:89
#: notifications/templates/notifications/inbox.html:366
#: notifications/templates/notifications/inbox_mobile.html:301
#: notifications/templates/notifications/inbox.html:394
#: notifications/templates/notifications/inbox_mobile.html:317
msgid "Vous n'avez encore aucune discussion."
msgstr "Vous n'avez encore aucune discussion."
#: notifications/templates/notifications/discussion_list.html:137
#: notifications/templates/notifications/inbox.html:414
#: notifications/templates/notifications/inbox_mobile.html:350
#: notifications/templates/notifications/discussion_list.html:148
#: notifications/templates/notifications/inbox.html:453
#: notifications/templates/notifications/inbox_mobile.html:376
msgid "Aucun message encore."
msgstr "Aucun message encore."
#: notifications/templates/notifications/discussion_list.html:160
#: notifications/templates/notifications/inbox.html:437
#: notifications/templates/notifications/discussion_list.html:171
#: notifications/templates/notifications/inbox.html:476
msgid "participants au total"
msgstr "participants au total"
#: notifications/templates/notifications/discussion_list.html:170
#: notifications/templates/notifications/inbox.html:447
#: notifications/templates/notifications/inbox_mobile.html:372
#: notifications/templates/notifications/discussion_list.html:181
#: notifications/templates/notifications/inbox.html:486
#: notifications/templates/notifications/inbox_mobile.html:398
msgid "non lu(s)"
msgstr "non lu(s)"
@ -654,6 +804,7 @@ msgid "Archivées"
msgstr "Archivées"
#: notifications/templates/notifications/inbox.html:210
#: notifications/templates/notifications/inbox.html:383
#: notifications/templates/notifications/inbox_mobile.html:194
msgid "Réinitialiser"
msgstr "Réinitialiser"
@ -688,6 +839,11 @@ msgstr "Aucune notification archivée."
msgid "Vous n'avez aucune notification."
msgstr "Vous n'avez aucune notification."
#: notifications/templates/notifications/inbox.html:368
#: notifications/templates/notifications/inbox_mobile.html:300
msgid "Tous"
msgstr ""
#: notifications/templates/notifications/inbox_mobile.html:119
msgid "Accueil"
msgstr "Accueil"
@ -700,30 +856,101 @@ msgstr "Prendre"
msgid "Lu"
msgstr "Lu"
#: notifications/templates/notifications/notification_settings.html:4
#: notifications/templates/notifications/notification_settings.html:17
msgid "Paramètres des notifications"
msgstr "Paramètres des notifications"
#: notifications/templates/notifications/notification_settings.html:12
#: notifications/templates/notifications/team_list.html:18
msgid "Retour aux notifications"
msgstr "Retour aux notifications"
#: notifications/templates/notifications/notification_settings.html:17
msgid "Paramètres des notifications"
msgstr "Paramètres des notifications"
#: notifications/templates/notifications/notification_settings.html:19
msgid ""
"Gérez vos préférences de rappel par e-mail pour les notifications non lues."
"Gérez vos alertes instantanées sur cet appareil et vos rappels par e-mail."
msgstr ""
"Gérez vos préférences de rappel par e-mail pour les notifications non lues."
#: notifications/templates/notifications/notification_settings.html:28
msgid "Notifications sur cet appareil (Alertes système / Push)"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:31
msgid "Vérification..."
msgstr "Vérification..."
#: notifications/templates/notifications/notification_settings.html:36
msgid ""
"Recevez des alertes instantanées sur votre écran (ordinateur ou smartphone) "
"dès qu'une tâche, intervention ou mention vous concerne, même si le site est"
" en arrière-plan."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:42
msgid ""
"Votre navigateur ou appareil actuel ne prend pas en charge les notifications"
" Web Push. (Sur iPhone/iPad, installez l'application via le menu Partager > "
"'Sur l'écran d'accueil')."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:48
msgid ""
"Les notifications sont bloquées dans les paramètres de votre navigateur pour"
" ce site. Veuillez modifier vos permissions de site pour les autoriser."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:55
msgid "Activer les notifications sur cet appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:58
msgid "Cliquez pour autoriser et enregistrer cet appareil."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:64
msgid "Activer sur cet appareil"
msgstr "Activer sur cet appareil"
#: notifications/templates/notifications/notification_settings.html:66
msgid "Envoyer une notification test"
msgstr "Envoyer une notification test"
#: notifications/templates/notifications/notification_settings.html:68
msgid "Tester"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:76
msgid "Appareils enregistrés pour votre compte"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:93
#: notifications/views.py:986
msgid "Appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:103
msgid "Retirer cet appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:103
msgid "Voulez-vous retirer cet appareil des notifications push ?"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:112
msgid ""
"Aucun appareil n'est actuellement enregistré pour recevoir des notifications"
" push."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:124
msgid "Rappels par e-mail"
msgstr "Rappels par e-mail"
#: notifications/templates/notifications/notification_settings.html:41
#: notifications/templates/notifications/notification_settings.html:137
msgid "Langue préférée pour les e-mails et notifications"
msgstr "Langue préférée pour les e-mails et notifications"
#: notifications/templates/notifications/notification_settings.html:50
#: notifications/templates/notifications/notification_settings.html:146
msgid ""
"Les e-mails de rappel et les notifications automatiques vous seront envoyés "
"dans cette langue."
@ -731,11 +958,11 @@ msgstr ""
"Les e-mails de rappel et les notifications automatiques vous seront envoyés "
"dans cette langue."
#: notifications/templates/notifications/notification_settings.html:58
#: notifications/templates/notifications/notification_settings.html:154
msgid "Activer les rappels par e-mail"
msgstr "Activer les rappels par e-mail"
#: notifications/templates/notifications/notification_settings.html:61
#: notifications/templates/notifications/notification_settings.html:157
msgid ""
"Recevoir un récapitulatif par e-mail si des notifications restent non lues "
"au-delà du délai spécifié."
@ -743,27 +970,27 @@ msgstr ""
"Recevoir un récapitulatif par e-mail si des notifications restent non lues "
"au-delà du délai spécifié."
#: notifications/templates/notifications/notification_settings.html:72
#: notifications/templates/notifications/notification_settings.html:168
msgid "Adresse(s) e-mail de réception"
msgstr "Adresse(s) e-mail de réception"
#: notifications/templates/notifications/notification_settings.html:80
#: notifications/templates/notifications/notification_settings.html:176
msgid "Laissez vide pour utiliser l'e-mail principal de votre compte"
msgstr "Laissez vide pour utiliser l'e-mail principal de votre compte"
#: notifications/templates/notifications/notification_settings.html:81
#: notifications/templates/notifications/notification_settings.html:177
msgid "Pour plusieurs destinataires, séparez les adresses par des virgules."
msgstr "Pour plusieurs destinataires, séparez les adresses par des virgules."
#: notifications/templates/notifications/notification_settings.html:88
#: notifications/templates/notifications/notification_settings.html:184
msgid "Délai avant l'envoi du rappel (en heures)"
msgstr "Délai avant l'envoi du rappel (en heures)"
#: notifications/templates/notifications/notification_settings.html:92
#: notifications/templates/notifications/notification_settings.html:188
msgid "heures"
msgstr "heures"
#: notifications/templates/notifications/notification_settings.html:98
#: notifications/templates/notifications/notification_settings.html:194
msgid ""
"Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au "
"bout de 24 heures."
@ -771,7 +998,7 @@ msgstr ""
"Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au "
"bout de 24 heures."
#: notifications/templates/notifications/notification_settings.html:107
#: notifications/templates/notifications/notification_settings.html:203
msgid "Enregistrer mes préférences"
msgstr "Enregistrer mes préférences"
@ -792,7 +1019,7 @@ msgid "Nouvelle équipe"
msgstr "Nouvelle équipe"
#: notifications/templates/notifications/team_list.html:46
#: notifications/views.py:498
#: notifications/views.py:533
msgid "Modifier"
msgstr "Modifier"
@ -824,63 +1051,125 @@ msgstr "Aucune équipe définie."
msgid "Créer une équipe"
msgstr "Créer une équipe"
#: notifications/views.py:390
#: notifications/tests.py:319
msgid "Alerte Intervention"
msgstr "Alerte Intervention"
#: notifications/tests.py:320
msgid "Nouvelle intervention assignée"
msgstr "Nouvelle intervention assignée"
#: notifications/views.py:425
msgid "Vous n'avez pas les droits pour créer une notification."
msgstr "Vous n'avez pas les droits pour créer une notification."
#: notifications/views.py:423
#: notifications/views.py:458
msgid "Notification envoyée avec succès."
msgstr "Notification envoyée avec succès."
#: notifications/views.py:460
#: notifications/views.py:495
msgid "Vous n'avez pas les droits pour créer une équipe."
msgstr "Vous n'avez pas les droits pour créer une équipe."
#: notifications/views.py:470
#: notifications/views.py:505
msgid "Équipe créée avec succès."
msgstr "Équipe créée avec succès."
#: notifications/views.py:475
#: notifications/views.py:510
msgid "Créer"
msgstr "Créer"
#: notifications/views.py:486
#: notifications/views.py:521
msgid "Vous n'avez pas les droits pour modifier une équipe."
msgstr "Vous n'avez pas les droits pour modifier une équipe."
#: notifications/views.py:493
#: notifications/views.py:528
msgid "Équipe mise à jour."
msgstr "Équipe mise à jour."
#: notifications/views.py:508
#: notifications/views.py:543
msgid "Vous n'avez pas les droits pour supprimer une équipe."
msgstr "Vous n'avez pas les droits pour supprimer une équipe."
#: notifications/views.py:511
#: notifications/views.py:546
msgid "Équipe supprimée."
msgstr "Équipe supprimée."
#: notifications/views.py:561
#: notifications/views.py:604
msgid "Vous n'êtes pas participant de cette discussion."
msgstr "Vous n'êtes pas participant de cette discussion."
#: notifications/views.py:574
#: notifications/views.py:620
msgid "Message envoyé."
msgstr "Message envoyé."
#: notifications/views.py:602
#: notifications/views.py:648
msgid "Vous n'avez pas accès à cette discussion."
msgstr "Vous n'avez pas accès à cette discussion."
#: notifications/views.py:699
msgid "Statut de la discussion mis à jour."
msgstr "Statut de la discussion mis à jour."
#: notifications/views.py:722
#, python-format
msgid "Discussion de %(name)s"
msgstr "Discussion de %(name)s"
#: notifications/views.py:613
#: notifications/views.py:736
msgid "Discussion créée avec succès."
msgstr "Discussion créée avec succès."
#: notifications/views.py:616
#: notifications/views.py:739
msgid "Le contenu du message ne peut pas être vide."
msgstr "Le contenu du message ne peut pas être vide."
#: notifications/views.py:640
#: notifications/views.py:763
msgid "Vos préférences de rappel par e-mail ont été enregistrées."
msgstr "Vos préférences de rappel par e-mail ont été enregistrées."
#: notifications/views.py:896
msgid "Requête invalide"
msgstr ""
#: notifications/views.py:904
msgid "Paramètres d'abonnement push incomplets"
msgstr ""
#: notifications/views.py:954
msgid "Aucun appareil actif n'est enregistré pour votre compte."
msgstr ""
#: notifications/views.py:959
msgid "Test de notification Loko"
msgstr "Test de notification Loko"
#: notifications/views.py:960
msgid ""
"Les notifications instantanées sur votre appareil fonctionnent correctement "
"!"
msgstr ""
#: notifications/views.py:968
#, python-format
msgid "Notification de test envoyée avec succès sur %(count)d appareil(s) !"
msgstr "Notification de test envoyée avec succès sur %(count)d appareil(s) !"
#: notifications/views.py:972
msgid "Impossible de délivrer la notification au service push."
msgstr ""
#: notifications/views.py:974
#, python-format
msgid "Échec de distribution : %(error)s"
msgstr ""
#: notifications/views.py:988
#, python-format
msgid "L'appareil « %(name)s » a été retiré."
msgstr ""
#~ msgid ""
#~ "Gérez vos préférences de rappel par e-mail pour les notifications non lues."
#~ msgstr ""
#~ "Gérez vos préférences de rappel par e-mail pour les notifications non lues."

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -23,7 +23,7 @@ msgid "Titre"
msgstr "Titel"
#: notifications/forms.py:40 notifications/models.py:72
#: notifications/models.py:455
#: notifications/models.py:529
msgid "Contenu"
msgstr "Inhoud"
@ -45,7 +45,7 @@ msgid "Expire le"
msgstr "Vervalt op"
#: notifications/forms.py:68 notifications/models.py:284
#: notifications/templates/notifications/_new_discussion_modal.html:41
#: notifications/templates/notifications/_new_discussion_modal.html:69
msgid "Pièces jointes"
msgstr "Bijlagen"
@ -57,7 +57,7 @@ msgstr "Foto's of documenten (meerdere bestanden mogelijk)."
msgid "Destinataires individuels"
msgstr "Individuele ontvangers"
#: notifications/forms.py:82 notifications/models.py:553
#: notifications/forms.py:82 notifications/models.py:632
msgid "Équipes destinataires"
msgstr "Ontvangende teams"
@ -94,6 +94,7 @@ msgstr ""
"zijn ontvangen:"
#: notifications/management/commands/send_unread_notification_reminders.py:118
#: notifications/services.py:479
msgid "Système"
msgstr "Systeem"
@ -168,8 +169,8 @@ msgstr "Team"
msgid "Équipes"
msgstr "Teams"
#: notifications/models.py:49 notifications/models.py:464
#: notifications/models.py:593
#: notifications/models.py:49 notifications/models.py:543
#: notifications/models.py:672
msgid "Message"
msgstr "Bericht"
@ -221,7 +222,7 @@ msgstr "Systeemmelding"
msgid "Générée automatiquement par le système."
msgstr "Automatisch gegenereerd door het systeem."
#: notifications/models.py:114 notifications/models.py:566
#: notifications/models.py:114 notifications/models.py:645
msgid "Prise en charge unique"
msgstr "Enkele overname"
@ -283,11 +284,11 @@ msgstr "Teammelding"
msgid "Notifications d'équipe"
msgstr "Teammeldingen"
#: notifications/models.py:250 notifications/models.py:597
#: notifications/models.py:250 notifications/models.py:676
msgid "Fichier"
msgstr "Bestand"
#: notifications/models.py:255 notifications/models.py:599
#: notifications/models.py:255 notifications/models.py:678
msgid "Nom du fichier"
msgstr "Bestandsnaam"
@ -295,7 +296,7 @@ msgstr "Bestandsnaam"
msgid "Ajouté par"
msgstr "Toegevoegd door"
#: notifications/models.py:265 notifications/models.py:600
#: notifications/models.py:265 notifications/models.py:679
msgid "Ajouté le"
msgstr "Toegevoegd op"
@ -303,7 +304,7 @@ msgstr "Toegevoegd op"
msgid "Pièce jointe"
msgstr "Bijlage"
#: notifications/models.py:301
#: notifications/models.py:301 notifications/models.py:713
msgid "Utilisateur"
msgstr "Gebruiker"
@ -315,22 +316,22 @@ msgstr "Teammelding gelezen"
msgid "Lectures de notifications d'équipe"
msgstr "Teammeldingen gelezen"
#: notifications/models.py:331
#: notifications/models.py:331 notifications/models.py:751
msgid "Mis à jour le"
msgstr "Bijgewerkt op"
#: notifications/models.py:336
#: notifications/templates/notifications/discussion_detail.html:105
#: notifications/templates/notifications/discussion_list.html:144
#: notifications/templates/notifications/inbox.html:421
#: notifications/templates/notifications/discussion_detail.html:164
#: notifications/templates/notifications/discussion_list.html:155
#: notifications/templates/notifications/inbox.html:460
msgid "Participants"
msgstr "Deelnemers"
#: notifications/models.py:338
#: notifications/templates/notifications/discussion_detail.html:97
#: notifications/templates/notifications/discussion_list.html:120
#: notifications/templates/notifications/inbox.html:397
#: notifications/templates/notifications/inbox_mobile.html:338
#: notifications/templates/notifications/discussion_detail.html:98
#: notifications/templates/notifications/discussion_list.html:127
#: notifications/templates/notifications/inbox.html:432
#: notifications/templates/notifications/inbox_mobile.html:360
msgid "Clôturée"
msgstr "Gesloten"
@ -342,106 +343,164 @@ msgstr "Type gekoppeld object"
msgid "ID objet lié"
msgstr "ID gekoppeld object"
#: notifications/models.py:355
#: notifications/models.py:360
msgid "Aucun"
msgstr ""
#: notifications/models.py:361 notifications/models.py:368
#: notifications/templates/notifications/_new_discussion_modal.html:34
#: notifications/templates/notifications/discussion_detail.html:132
msgid "Important / À traiter"
msgstr ""
#: notifications/models.py:362 notifications/models.py:377
#: notifications/models.py:378
#: notifications/templates/notifications/_new_discussion_modal.html:39
#: notifications/templates/notifications/discussion_detail.html:139
#: notifications/templates/notifications/inbox.html:374
#: notifications/templates/notifications/inbox_mobile.html:306
msgid "En cours"
msgstr ""
#: notifications/models.py:363 notifications/models.py:386
#: notifications/templates/notifications/_new_discussion_modal.html:44
#: notifications/templates/notifications/discussion_detail.html:146
msgid "Traité / Fait"
msgstr ""
#: notifications/models.py:369
#: notifications/templates/notifications/inbox.html:371
#: notifications/templates/notifications/inbox_mobile.html:303
msgid "Important"
msgstr ""
#: notifications/models.py:387
#: notifications/templates/notifications/inbox.html:377
#: notifications/templates/notifications/inbox_mobile.html:309
msgid "Traité"
msgstr ""
#: notifications/models.py:401
msgid "Flag"
msgstr ""
#: notifications/models.py:409
msgid "Flag défini par"
msgstr ""
#: notifications/models.py:414
msgid "Flag défini le"
msgstr ""
#: notifications/models.py:419
msgid "URL objet lié"
msgstr "URL gekoppeld object"
#: notifications/models.py:358
#: notifications/models.py:422
msgid "Libellé objet lié"
msgstr "Label gekoppeld object"
#: notifications/models.py:392
#: notifications/models.py:466
msgid "Intervention"
msgstr "Interventie"
#: notifications/models.py:400
#: notifications/models.py:474
msgid "Observation"
msgstr "Observatie"
#: notifications/models.py:408
#: notifications/models.py:482
msgid "Ordre de préparation"
msgstr "Voorbereidingsopdracht"
#: notifications/models.py:416
#: notifications/models.py:490
msgid "Projet"
msgstr "Project"
#: notifications/models.py:424
#: notifications/models.py:498
msgid "Générale"
msgstr "Algemeen"
#: notifications/models.py:429 notifications/models.py:445
#: notifications/models.py:503 notifications/models.py:519
msgid "Discussion"
msgstr "Discussie"
#: notifications/models.py:430
#: notifications/models.py:504
#: notifications/templates/notifications/discussion_list.html:70
#: notifications/templates/notifications/inbox.html:133
#: notifications/templates/notifications/inbox_mobile.html:152
msgid "Discussions"
msgstr "Gesprekken"
#: notifications/models.py:453
#: notifications/models.py:527
msgid "Auteur"
msgstr "Auteur"
#: notifications/models.py:456
#: notifications/models.py:530
msgid "Envoyé le"
msgstr "Verzonden op"
#: notifications/models.py:457
#: notifications/models.py:531
msgid "Supprimé"
msgstr "Verwijderd"
#: notifications/models.py:465
#: notifications/models.py:534
msgid "Message système"
msgstr "Systeembericht"
#: notifications/models.py:535
msgid "Indique si le message a été généré automatiquement par le système."
msgstr ""
"Geeft aan of het bericht automatisch door het systeem werd gegenereerd."
#: notifications/models.py:544
msgid "Messages"
msgstr "Berichten"
#: notifications/models.py:490
#: notifications/models.py:569
msgid "Intervention annulée"
msgstr "Interventie geannuleerd"
#: notifications/models.py:495
#: notifications/models.py:574
msgid "Tous (pas de filtre)"
msgstr "Alle (geen filter)"
#: notifications/models.py:496
#: notifications/models.py:575
msgid "Doublon"
msgstr "Duplicaat"
#: notifications/models.py:497
#: notifications/models.py:576
msgid "A rediriger"
msgstr "Door te sturen"
#: notifications/models.py:498
#: notifications/models.py:577
msgid "Pas sous notre gestion"
msgstr "Niet onder ons beheer"
#: notifications/models.py:499
#: notifications/models.py:578
msgid "Non-relevant"
msgstr "Niet relevant"
#: notifications/models.py:500
#: notifications/models.py:579
msgid "Autre"
msgstr "Overige"
#: notifications/models.py:504
#: notifications/models.py:583
msgid "Nom de la règle"
msgstr "Regelnaam"
#: notifications/models.py:505
#: notifications/models.py:584
msgid "Active"
msgstr "Actief"
#: notifications/models.py:511
#: notifications/models.py:590
msgid "Événement déclencheur"
msgstr "Triggergebeurtenis"
#: notifications/models.py:517
#: notifications/models.py:596
msgid "Filtre : type d'annulation"
msgstr "Filter: annuleringstype"
#: notifications/models.py:519
#: notifications/models.py:598
msgid ""
"Laisser vide pour déclencher sur tout type d'annulation. Sélectionner une "
"valeur pour n'agir que sur ce type précis."
@ -449,15 +508,15 @@ msgstr ""
"Leeg laten om te triggeren op elk type annulering. Selecteer een waarde om "
"alleen op dit specifieke type te reageren."
#: notifications/models.py:529
#: notifications/models.py:608
msgid "Type de notification"
msgstr "Type melding"
#: notifications/models.py:533
#: notifications/models.py:612
msgid "Modèle de titre"
msgstr "Titelsjabloon"
#: notifications/models.py:535
#: notifications/models.py:614
#, python-brace-format
msgid ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
@ -466,11 +525,11 @@ msgstr ""
"Beschikbare variabelen: {intervention_code}, {intervention_title}, "
"{cancellation_type_label}"
#: notifications/models.py:541
#: notifications/models.py:620
msgid "Modèle de contenu"
msgstr "Inhoudssjabloon"
#: notifications/models.py:543
#: notifications/models.py:622
#, python-brace-format
msgid ""
"Variables disponibles : {intervention_code}, {intervention_title}, "
@ -479,50 +538,119 @@ msgstr ""
"Beschikbare variabelen: {intervention_code}, {intervention_title}, "
"{cancellation_type_label}, {cancellation_reason}"
#: notifications/models.py:554
#: notifications/models.py:633
msgid ""
"Les notifications seront envoyées à tous les membres (CompanyMember) de ces "
"équipes."
msgstr ""
"Meldingen worden verzonden naar alle leden (CompanyMember) van deze teams."
#: notifications/models.py:560
#: notifications/models.py:639
msgid "Utilisateurs destinataires supplémentaires"
msgstr "Extra individuele ontvangers"
#: notifications/models.py:568
#: notifications/models.py:647
msgid ""
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en "
"charge), elle est automatiquement archivée pour tous les autres "
"Si activé, dès qu'un destinataire marque la notification comme lue (prise en"
" charge), elle est automatiquement archivée pour tous les autres "
"destinataires."
msgstr ""
"Indien ingeschakeld, zodra een ontvanger de melding als gelezen markeert "
"(overname), wordt deze automatisch gearchiveerd voor alle andere ontvangers."
#: notifications/models.py:574
#: notifications/models.py:653
msgid "Créée le"
msgstr "Aangemaakt op"
#: notifications/models.py:575
#: notifications/models.py:654
msgid "Mise à jour le"
msgstr "Bijgewerkt op"
#: notifications/models.py:581
#: notifications/models.py:660
msgid "Règle de notification"
msgstr "Meldingsregel"
#: notifications/models.py:582
#: notifications/models.py:661
msgid "Règles de notification"
msgstr "Meldingsregels"
#: notifications/models.py:618
#: notifications/models.py:697
msgid "Pièce jointe de message"
msgstr "Berichtbijlage"
#: notifications/models.py:619
#: notifications/models.py:698
msgid "Pièces jointes de messages"
msgstr "Berichtbijlagen"
#: notifications/models.py:717
msgid "Endpoint Push"
msgstr ""
#: notifications/models.py:718
msgid "URL unique de réception push fournie par le navigateur."
msgstr ""
#: notifications/models.py:722
msgid "Clé p256dh"
msgstr ""
#: notifications/models.py:723
msgid "Clé publique du client."
msgstr ""
#: notifications/models.py:727
msgid "Secret auth"
msgstr ""
#: notifications/models.py:728
msgid "Secret d'authentification pour le chiffrement."
msgstr ""
#: notifications/models.py:733
msgid "User Agent"
msgstr ""
#: notifications/models.py:738
msgid "Navigateur"
msgstr ""
#: notifications/models.py:743
msgid "Système d'exploitation"
msgstr ""
#: notifications/models.py:748
msgid "Nom de l'appareil"
msgstr "Apparaatnaam"
#: notifications/models.py:750
#: notifications/templates/notifications/notification_settings.html:96
msgid "Enregistré le"
msgstr "Opgeslagen op"
#: notifications/models.py:754
msgid "Appareil inconnu"
msgstr ""
#: notifications/models.py:758
msgid "Abonnement Web Push"
msgstr ""
#: notifications/models.py:759
msgid "Abonnements Web Push"
msgstr ""
#: notifications/services.py:498
#, python-brace-format
msgid "{icon} {user} a défini le statut : {label}"
msgstr ""
#: notifications/services.py:504
#, python-brace-format
msgid ""
"<i class=\"bi bi-flag text-muted me-1\"></i> {user} a retiré le drapeau de "
"suivi."
msgstr ""
#: notifications/templates/notifications/_new_discussion_modal.html:8
#: notifications/templates/notifications/discussion_list.html:74
#: notifications/templates/notifications/inbox.html:165
@ -534,40 +662,50 @@ msgstr "Nieuw gesprek"
msgid "Fermer"
msgstr "Sluiten"
#: notifications/templates/notifications/_new_discussion_modal.html:17
#: notifications/templates/notifications/_new_discussion_modal.html:18
msgid "Sujet / Titre (optionnel)"
msgstr "Onderwerp / Titel (optioneel)"
#: notifications/templates/notifications/_new_discussion_modal.html:20
#: notifications/templates/notifications/_new_discussion_modal.html:21
msgid "Ex: Question sur le dossier..."
msgstr "Bijv: Vraag over het dossier..."
#: notifications/templates/notifications/_new_discussion_modal.html:25
#: notifications/templates/notifications/_new_discussion_modal.html:27
msgid "Statut initial"
msgstr ""
#: notifications/templates/notifications/_new_discussion_modal.html:29
#: notifications/templates/notifications/discussion_detail.html:154
msgid "Aucun drapeau"
msgstr "Geen vlag"
#: notifications/templates/notifications/_new_discussion_modal.html:53
msgid "Message *"
msgstr "Bericht *"
#: notifications/templates/notifications/_new_discussion_modal.html:28
#: notifications/templates/notifications/_new_discussion_modal.html:56
msgid "Tapez @ pour mentionner/tagger des utilisateurs ou des équipes."
msgstr "Typ @ om gebruikers of teams te vermelden."
#: notifications/templates/notifications/_new_discussion_modal.html:32
#: notifications/templates/notifications/_new_discussion_modal.html:60
msgid "Rédigez votre message... (@ pour tagger quelqu'un)"
msgstr "Schrijf uw bericht... (@ om iemand te taggen)"
#: notifications/templates/notifications/_new_discussion_modal.html:44
#: notifications/templates/notifications/_new_discussion_modal.html:72
msgid "Joindre des fichiers"
msgstr "Bestanden bijvoegen"
#: notifications/templates/notifications/_new_discussion_modal.html:52
#: notifications/templates/notifications/_new_discussion_modal.html:80
#: notifications/templates/notifications/create.html:82
#: notifications/templates/notifications/notification_settings.html:104
#: notifications/templates/notifications/notification_settings.html:200
#: notifications/templates/notifications/team_form.html:39
msgid "Annuler"
msgstr "Annuleren"
#: notifications/templates/notifications/_new_discussion_modal.html:55
#: notifications/templates/notifications/_new_discussion_modal.html:83
#: notifications/templates/notifications/create.html:85
#: notifications/templates/notifications/discussion_detail.html:194
#: notifications/templates/notifications/discussion_detail.html:268
msgid "Envoyer"
msgstr "Verzenden"
@ -580,55 +718,68 @@ msgstr "Melding aanmaken"
msgid "Ctrl+clic pour sélectionner plusieurs"
msgstr "Ctrl+klik om meerdere te selecteren"
#: notifications/templates/notifications/discussion_detail.html:85
#: notifications/templates/notifications/discussion_detail.html:86
msgid "Retour aux discussions"
msgstr "Terug naar gesprekken"
#: notifications/templates/notifications/discussion_detail.html:120
#: notifications/templates/notifications/discussion_detail.html:123
#: notifications/templates/notifications/discussion_detail.html:504
#: notifications/templates/notifications/inbox.html:366
msgid "Statut"
msgstr ""
#: notifications/templates/notifications/discussion_detail.html:128
msgid "Statut de suivi"
msgstr ""
#: notifications/templates/notifications/discussion_detail.html:179
msgid "Aucun message pour l'instant. Soyez le premier à écrire."
msgstr "Nog geen berichten. Wees de eerste om te schrijven."
#: notifications/templates/notifications/discussion_detail.html:184
#: notifications/templates/notifications/discussion_detail.html:254
msgid "Écrire un message... (@ pour mentionner)"
msgstr "Schrijf een bericht... (@ om te vermelden)"
#: notifications/templates/notifications/discussion_detail.html:187
#: notifications/templates/notifications/discussion_detail.html:261
msgid "Joindre"
msgstr "Bijvoegen"
#: notifications/templates/notifications/discussion_detail.html:202
#: notifications/templates/notifications/discussion_detail.html:276
msgid "Cette discussion est clôturée."
msgstr "Dit gesprek is gesloten."
#: notifications/templates/notifications/discussion_detail.html:458
msgid "Le message ne peut pas être vide."
msgstr "Het bericht mag niet leeg zijn."
#: notifications/templates/notifications/discussion_list.html:79
#: notifications/templates/notifications/discussion_list.html:80
#: notifications/templates/notifications/inbox.html:170
#: notifications/templates/notifications/inbox.html:171
#: notifications/templates/notifications/inbox_mobile.html:115
#: notifications/templates/notifications/notification_settings.html:4
msgid "Paramètres"
msgstr "Instellingen"
#: notifications/templates/notifications/discussion_list.html:89
#: notifications/templates/notifications/inbox.html:366
#: notifications/templates/notifications/inbox_mobile.html:301
#: notifications/templates/notifications/inbox.html:394
#: notifications/templates/notifications/inbox_mobile.html:317
msgid "Vous n'avez encore aucune discussion."
msgstr "U heeft nog geen gesprekken."
#: notifications/templates/notifications/discussion_list.html:137
#: notifications/templates/notifications/inbox.html:414
#: notifications/templates/notifications/inbox_mobile.html:350
#: notifications/templates/notifications/discussion_list.html:148
#: notifications/templates/notifications/inbox.html:453
#: notifications/templates/notifications/inbox_mobile.html:376
msgid "Aucun message encore."
msgstr "Nog geen bericht."
#: notifications/templates/notifications/discussion_list.html:160
#: notifications/templates/notifications/inbox.html:437
#: notifications/templates/notifications/discussion_list.html:171
#: notifications/templates/notifications/inbox.html:476
msgid "participants au total"
msgstr "deelnemers in totaal"
#: notifications/templates/notifications/discussion_list.html:170
#: notifications/templates/notifications/inbox.html:447
#: notifications/templates/notifications/inbox_mobile.html:372
#: notifications/templates/notifications/discussion_list.html:181
#: notifications/templates/notifications/inbox.html:486
#: notifications/templates/notifications/inbox_mobile.html:398
msgid "non lu(s)"
msgstr "ongelezen"
@ -652,6 +803,7 @@ msgid "Archivées"
msgstr "Gearchiveerd"
#: notifications/templates/notifications/inbox.html:210
#: notifications/templates/notifications/inbox.html:383
#: notifications/templates/notifications/inbox_mobile.html:194
msgid "Réinitialiser"
msgstr "Opnieuw instellen"
@ -686,6 +838,11 @@ msgstr "Geen gearchiveerde meldingen."
msgid "Vous n'avez aucune notification."
msgstr "U heeft geen meldingen."
#: notifications/templates/notifications/inbox.html:368
#: notifications/templates/notifications/inbox_mobile.html:300
msgid "Tous"
msgstr ""
#: notifications/templates/notifications/inbox_mobile.html:119
msgid "Accueil"
msgstr "Startpagina"
@ -698,40 +855,112 @@ msgstr "Nemen"
msgid "Lu"
msgstr "Gelezen"
#: notifications/templates/notifications/notification_settings.html:4
#: notifications/templates/notifications/notification_settings.html:17
msgid "Paramètres des notifications"
msgstr "Meldingsinstellingen"
#: notifications/templates/notifications/notification_settings.html:12
#: notifications/templates/notifications/team_list.html:18
msgid "Retour aux notifications"
msgstr "Terug naar meldingen"
#: notifications/templates/notifications/notification_settings.html:17
msgid "Paramètres des notifications"
msgstr "Meldingsinstellingen"
#: notifications/templates/notifications/notification_settings.html:19
msgid ""
"Gérez vos préférences de rappel par e-mail pour les notifications non lues."
msgstr "Beheer uw e-mailherinneringsvoorkeuren voor ongelezen meldingen."
"Gérez vos alertes instantanées sur cet appareil et vos rappels par e-mail."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:28
msgid "Notifications sur cet appareil (Alertes système / Push)"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:31
msgid "Vérification..."
msgstr "Verifiëren..."
#: notifications/templates/notifications/notification_settings.html:36
msgid ""
"Recevez des alertes instantanées sur votre écran (ordinateur ou smartphone) "
"dès qu'une tâche, intervention ou mention vous concerne, même si le site est"
" en arrière-plan."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:42
msgid ""
"Votre navigateur ou appareil actuel ne prend pas en charge les notifications"
" Web Push. (Sur iPhone/iPad, installez l'application via le menu Partager > "
"'Sur l'écran d'accueil')."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:48
msgid ""
"Les notifications sont bloquées dans les paramètres de votre navigateur pour"
" ce site. Veuillez modifier vos permissions de site pour les autoriser."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:55
msgid "Activer les notifications sur cet appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:58
msgid "Cliquez pour autoriser et enregistrer cet appareil."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:64
msgid "Activer sur cet appareil"
msgstr "Inschakelen op dit apparaat"
#: notifications/templates/notifications/notification_settings.html:66
msgid "Envoyer une notification test"
msgstr "Testmelding verzenden"
#: notifications/templates/notifications/notification_settings.html:68
msgid "Tester"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:76
msgid "Appareils enregistrés pour votre compte"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:93
#: notifications/views.py:986
msgid "Appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:103
msgid "Retirer cet appareil"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:103
msgid "Voulez-vous retirer cet appareil des notifications push ?"
msgstr ""
#: notifications/templates/notifications/notification_settings.html:112
msgid ""
"Aucun appareil n'est actuellement enregistré pour recevoir des notifications"
" push."
msgstr ""
#: notifications/templates/notifications/notification_settings.html:124
msgid "Rappels par e-mail"
msgstr "E-mailherinneringen"
#: notifications/templates/notifications/notification_settings.html:41
#: notifications/templates/notifications/notification_settings.html:137
msgid "Langue préférée pour les e-mails et notifications"
msgstr "Voorkeurstaal voor e-mails en meldingen"
#: notifications/templates/notifications/notification_settings.html:50
#: notifications/templates/notifications/notification_settings.html:146
msgid ""
"Les e-mails de rappel et les notifications automatiques vous seront envoyés "
"dans cette langue."
msgstr ""
"Herinneringsmails en automatische meldingen worden in deze taal verzonden."
#: notifications/templates/notifications/notification_settings.html:58
#: notifications/templates/notifications/notification_settings.html:154
msgid "Activer les rappels par e-mail"
msgstr "E-mailherinneringen inschakelen"
#: notifications/templates/notifications/notification_settings.html:61
#: notifications/templates/notifications/notification_settings.html:157
msgid ""
"Recevoir un récapitulatif par e-mail si des notifications restent non lues "
"au-delà du délai spécifié."
@ -739,35 +968,35 @@ msgstr ""
"Ontvang een samenvatting per e-mail als meldingen langer dan de opgegeven "
"tijd ongelezen blijven."
#: notifications/templates/notifications/notification_settings.html:72
#: notifications/templates/notifications/notification_settings.html:168
msgid "Adresse(s) e-mail de réception"
msgstr "E-mailadres(sen) voor ontvangst"
#: notifications/templates/notifications/notification_settings.html:80
#: notifications/templates/notifications/notification_settings.html:176
msgid "Laissez vide pour utiliser l'e-mail principal de votre compte"
msgstr "Leeg laten om het primaire e-mailadres van uw account te gebruiken"
#: notifications/templates/notifications/notification_settings.html:81
#: notifications/templates/notifications/notification_settings.html:177
msgid "Pour plusieurs destinataires, séparez les adresses par des virgules."
msgstr "Voor meerdere ontvangers, scheid de adressen met komma's."
#: notifications/templates/notifications/notification_settings.html:88
#: notifications/templates/notifications/notification_settings.html:184
msgid "Délai avant l'envoi du rappel (en heures)"
msgstr "Vertraging voor verzending herinnering (in uren)"
#: notifications/templates/notifications/notification_settings.html:92
#: notifications/templates/notifications/notification_settings.html:188
msgid "heures"
msgstr "uur"
#: notifications/templates/notifications/notification_settings.html:98
#: notifications/templates/notifications/notification_settings.html:194
msgid ""
"Exemple: 24h = un rappel sera envoyé si une notification n'a pas été lue au "
"bout de 24 heures."
msgstr ""
"Voorbeeld: 24u = er wordt een herinnering gestuurd als een melding na 24 uur "
"niet is gelezen."
"Voorbeeld: 24u = er wordt een herinnering gestuurd als een melding na 24 uur"
" niet is gelezen."
#: notifications/templates/notifications/notification_settings.html:107
#: notifications/templates/notifications/notification_settings.html:203
msgid "Enregistrer mes préférences"
msgstr "Mijn voorkeuren opslaan"
@ -788,7 +1017,7 @@ msgid "Nouvelle équipe"
msgstr "Nieuw team"
#: notifications/templates/notifications/team_list.html:46
#: notifications/views.py:498
#: notifications/views.py:533
msgid "Modifier"
msgstr "Bewerken"
@ -820,63 +1049,124 @@ msgstr "Geen teams gedefinieerd."
msgid "Créer une équipe"
msgstr "Team aanmaken"
#: notifications/views.py:390
#: notifications/tests.py:319
msgid "Alerte Intervention"
msgstr "Interventiewaarschuwing"
#: notifications/tests.py:320
msgid "Nouvelle intervention assignée"
msgstr "Nieuwe interventie toegewezen"
#: notifications/views.py:425
msgid "Vous n'avez pas les droits pour créer une notification."
msgstr "U heeft geen rechten om een melding aan te maken."
#: notifications/views.py:423
#: notifications/views.py:458
msgid "Notification envoyée avec succès."
msgstr "Melding succesvol verzonden."
#: notifications/views.py:460
#: notifications/views.py:495
msgid "Vous n'avez pas les droits pour créer une équipe."
msgstr "U heeft geen rechten om een team aan te maken."
#: notifications/views.py:470
#: notifications/views.py:505
msgid "Équipe créée avec succès."
msgstr "Team succesvol aangemaakt."
#: notifications/views.py:475
#: notifications/views.py:510
msgid "Créer"
msgstr "Aanmaken"
#: notifications/views.py:486
#: notifications/views.py:521
msgid "Vous n'avez pas les droits pour modifier une équipe."
msgstr "U heeft geen rechten om een team te bewerken."
#: notifications/views.py:493
#: notifications/views.py:528
msgid "Équipe mise à jour."
msgstr "Team bijgewerkt."
#: notifications/views.py:508
#: notifications/views.py:543
msgid "Vous n'avez pas les droits pour supprimer une équipe."
msgstr "U heeft geen rechten om een team te verwijderen."
#: notifications/views.py:511
#: notifications/views.py:546
msgid "Équipe supprimée."
msgstr "Team verwijderd."
#: notifications/views.py:561
#: notifications/views.py:604
msgid "Vous n'êtes pas participant de cette discussion."
msgstr "U bent geen deelnemer aan dit gesprek."
#: notifications/views.py:574
#: notifications/views.py:620
msgid "Message envoyé."
msgstr "Bericht verzonden."
#: notifications/views.py:602
#: notifications/views.py:648
msgid "Vous n'avez pas accès à cette discussion."
msgstr "U hebt geen toegang tot dit gesprek."
#: notifications/views.py:699
msgid "Statut de la discussion mis à jour."
msgstr "Status van het gesprek bijgewerkt."
#: notifications/views.py:722
#, python-format
msgid "Discussion de %(name)s"
msgstr "Gesprek van %(name)s"
#: notifications/views.py:613
#: notifications/views.py:736
msgid "Discussion créée avec succès."
msgstr "Gesprek succesvol aangemaakt."
#: notifications/views.py:616
#: notifications/views.py:739
msgid "Le contenu du message ne peut pas être vide."
msgstr "De inhoud van het bericht mag niet leeg zijn."
#: notifications/views.py:640
#: notifications/views.py:763
msgid "Vos préférences de rappel par e-mail ont été enregistrées."
msgstr "Uw e-mailherinneringsvoorkeuren zijn opgeslagen."
#: notifications/views.py:896
msgid "Requête invalide"
msgstr ""
#: notifications/views.py:904
msgid "Paramètres d'abonnement push incomplets"
msgstr ""
#: notifications/views.py:954
msgid "Aucun appareil actif n'est enregistré pour votre compte."
msgstr ""
#: notifications/views.py:959
msgid "Test de notification Loko"
msgstr "Loko-meldingstest"
#: notifications/views.py:960
msgid ""
"Les notifications instantanées sur votre appareil fonctionnent correctement "
"!"
msgstr ""
#: notifications/views.py:968
#, python-format
msgid "Notification de test envoyée avec succès sur %(count)d appareil(s) !"
msgstr "Testmelding succesvol verzonden naar %(count)d apparaat/apparaten!"
#: notifications/views.py:972
msgid "Impossible de délivrer la notification au service push."
msgstr ""
#: notifications/views.py:974
#, python-format
msgid "Échec de distribution : %(error)s"
msgstr ""
#: notifications/views.py:988
#, python-format
msgid "L'appareil « %(name)s » a été retiré."
msgstr ""
#~ msgid ""
#~ "Gérez vos préférences de rappel par e-mail pour les notifications non lues."
#~ msgstr "Beheer uw e-mailherinneringsvoorkeuren voor ongelezen meldingen."

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: 2025-12-04 12:30+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: English <LL@li.org>\n"
@ -402,6 +402,7 @@ msgstr "To be processed"
#: observations/models.py:428
#: observations/templates/observations/_observations_list_mobile.html:71
#: observations/templates/observations/observation_detail.html:876
msgid "En cours"
msgstr "In progress"
@ -493,7 +494,7 @@ msgid "Modifier"
msgstr "Edit"
#: observations/templates/observations/observation_detail.html:146
#: observations/templates/observations/observation_detail.html:968
#: observations/templates/observations/observation_detail.html:1005
#: observations/templates/observations/observation_detail_mobile.html:213
#: observations/templates/observations/observation_detail_mobile.html:735
msgid "Supprimer"
@ -591,7 +592,7 @@ msgstr "Add a comment..."
#: observations/templates/observations/observation_detail.html:537
#: observations/templates/observations/observation_detail.html:805
#: observations/templates/observations/observation_detail.html:836
#: observations/templates/observations/observation_detail.html:965
#: observations/templates/observations/observation_detail.html:1002
#: observations/templates/observations/observation_detail_mobile.html:659
#: observations/templates/observations/observation_detail_mobile.html:732
#: observations/templates/observations/observation_detail_mobile.html:765
@ -642,7 +643,7 @@ msgid "Marquer comme traitée"
msgstr "Mark as processed"
#: observations/templates/observations/observation_detail.html:651
#: observations/templates/observations/observation_detail.html:931
#: observations/templates/observations/observation_detail.html:968
#: observations/templates/observations/observation_detail_mobile.html:176
#: observations/templates/observations/observation_detail_mobile.html:590
#: observations/templates/observations/observation_form.html:1894
@ -727,7 +728,7 @@ msgstr "Code or title…"
#: observations/templates/observations/observation_detail.html:807
#: observations/templates/observations/observation_detail.html:838
#: observations/templates/observations/observation_detail.html:1083
#: observations/templates/observations/observation_detail.html:1120
#: observations/templates/observations/observation_detail_mobile.html:767
#: observations/templates/observations/observation_detail_mobile.html:798
#: observations/templates/observations/observation_detail_mobile.html:925
@ -749,27 +750,50 @@ msgstr "Code or name…"
msgid "Messages"
msgstr "Messages"
#: observations/templates/observations/observation_detail.html:906
#: observations/templates/observations/observation_detail.html:870
#: observations/templates/observations/observation_detail.html:1916
#: observations/templates/observations/observations_index.html:257
#: observations/views.py:579
msgid "Statut"
msgstr "Status"
#: observations/templates/observations/observation_detail.html:874
msgid "Statut de suivi"
msgstr "Tracking status"
#: observations/templates/observations/observation_detail.html:875
msgid "Important / À traiter"
msgstr "Important / To process"
#: observations/templates/observations/observation_detail.html:877
msgid "Traité / Fait"
msgstr "Processed / Done"
#: observations/templates/observations/observation_detail.html:879
msgid "Aucun drapeau"
msgstr ""
#: observations/templates/observations/observation_detail.html:943
#: observations/templates/observations/observation_detail_mobile.html:569
msgid "Aucun message."
msgstr "No message."
#: observations/templates/observations/observation_detail.html:923
#: observations/templates/observations/observation_detail.html:960
#: observations/templates/observations/observation_detail_mobile.html:583
msgid "Écrire un message… (@ pour mentionner)"
msgstr "Write a message… (@ to mention)"
#: observations/templates/observations/observation_detail.html:934
#: observations/templates/observations/observation_detail.html:971
#: observations/templates/observations/observation_detail_mobile.html:593
msgid "Joindre un fichier"
msgstr "Attach a file"
#: observations/templates/observations/observation_detail.html:958
#: observations/templates/observations/observation_detail.html:995
#: observations/templates/observations/observation_detail_mobile.html:725
msgid "Supprimer l'observation"
msgstr "Delete observation"
#: observations/templates/observations/observation_detail.html:962
#: observations/templates/observations/observation_detail.html:999
#: observations/templates/observations/observation_detail_mobile.html:729
#, python-format
msgid ""
@ -779,65 +803,65 @@ msgstr ""
"Are you sure you want to delete observation <strong>%(code)s</strong>? This "
"action is irreversible."
#: observations/templates/observations/observation_detail.html:1107
#: observations/templates/observations/observation_detail.html:1144
msgid "Aucune localisation disponible"
msgstr "No location available"
#: observations/templates/observations/observation_detail.html:1259
#: observations/templates/observations/observation_detail.html:1296
#: observations/templates/observations/observation_form.html:2321
msgid "Voir le détail"
msgstr "See details"
#: observations/templates/observations/observation_detail.html:1288
#: observations/templates/observations/observation_detail.html:1325
msgid "observations à proximité"
msgstr "sightings nearby"
#: observations/templates/observations/observation_detail.html:1289
#: observations/templates/observations/observation_detail.html:1326
msgid "Aucune observation similaire à proximité"
msgstr "No similar sightings nearby"
#: observations/templates/observations/observation_detail.html:1407
#: observations/templates/observations/observation_detail.html:1444
#: observations/templates/observations/observation_form.html:2556
msgid "Voir l'intervention"
msgstr "View intervention"
#: observations/templates/observations/observation_detail.html:1437
#: observations/templates/observations/observation_detail.html:1474
#: observations/templates/observations/observation_form.html:2594
msgid "intervention(s) proche(s) dans les 3 derniers mois"
msgstr "close intervention(s) in the last 3 months"
#: observations/templates/observations/observation_detail.html:1438
#: observations/templates/observations/observation_detail.html:1475
msgid "Aucune intervention récente pour cette catégorie"
msgstr "No recent intervention for this category"
#: observations/templates/observations/observation_detail.html:1529
#: observations/templates/observations/observation_detail.html:1566
#: observations/templates/observations/observation_detail_mobile.html:1027
#: observations/templates/observations/observations_index.html:384
#: observations/templates/observations/observations_index_mobile.html:460
msgid "Chargement..."
msgstr "Loading..."
#: observations/templates/observations/observation_detail.html:1535
#: observations/templates/observations/observation_detail.html:1572
#: observations/templates/observations/observation_detail_mobile.html:1033
msgid "URL de résumé manquante"
msgstr "Summary URL missing"
#: observations/templates/observations/observation_detail.html:1551
#: observations/templates/observations/observation_detail.html:1588
#: observations/templates/observations/observation_detail_mobile.html:1049
msgid "Erreur lors du chargement du résumé"
msgstr "Error loading summary"
#: observations/templates/observations/observation_detail.html:1614
#: observations/templates/observations/observation_detail.html:1651
#: observations/templates/observations/observation_detail_mobile.html:1187
msgid "Retirer"
msgstr "Remove"
#: observations/templates/observations/observation_detail.html:1791
#: observations/templates/observations/observation_detail.html:1828
#: observations/views.py:1926
msgid "Le message ne peut pas être vide."
msgstr "The message cannot be empty."
#: observations/templates/observations/observation_detail.html:1870
#: observations/templates/observations/observation_detail.html:1961
#: observations/templates/observations/observation_detail_mobile.html:1079
msgid "Aucun résultat"
msgstr "No results"
@ -1166,11 +1190,6 @@ msgstr "All"
msgid "Aucun"
msgstr "None"
#: observations/templates/observations/observations_index.html:257
#: observations/views.py:579
msgid "Statut"
msgstr "Status"
#: observations/templates/observations/observations_index.html:276
msgid "Période"
msgstr "Period"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: 2025-12-04 12:30+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: French <LL@li.org>\n"
@ -407,6 +407,7 @@ msgstr "À traiter"
#: observations/models.py:428
#: observations/templates/observations/_observations_list_mobile.html:71
#: observations/templates/observations/observation_detail.html:876
msgid "En cours"
msgstr "En cours"
@ -498,7 +499,7 @@ msgid "Modifier"
msgstr "Modifier"
#: observations/templates/observations/observation_detail.html:146
#: observations/templates/observations/observation_detail.html:968
#: observations/templates/observations/observation_detail.html:1005
#: observations/templates/observations/observation_detail_mobile.html:213
#: observations/templates/observations/observation_detail_mobile.html:735
msgid "Supprimer"
@ -596,7 +597,7 @@ msgstr "Ajoutez un commentaire..."
#: observations/templates/observations/observation_detail.html:537
#: observations/templates/observations/observation_detail.html:805
#: observations/templates/observations/observation_detail.html:836
#: observations/templates/observations/observation_detail.html:965
#: observations/templates/observations/observation_detail.html:1002
#: observations/templates/observations/observation_detail_mobile.html:659
#: observations/templates/observations/observation_detail_mobile.html:732
#: observations/templates/observations/observation_detail_mobile.html:765
@ -647,7 +648,7 @@ msgid "Marquer comme traitée"
msgstr "Marquer comme traitée"
#: observations/templates/observations/observation_detail.html:651
#: observations/templates/observations/observation_detail.html:931
#: observations/templates/observations/observation_detail.html:968
#: observations/templates/observations/observation_detail_mobile.html:176
#: observations/templates/observations/observation_detail_mobile.html:590
#: observations/templates/observations/observation_form.html:1894
@ -733,7 +734,7 @@ msgstr "Code ou titre…"
#: observations/templates/observations/observation_detail.html:807
#: observations/templates/observations/observation_detail.html:838
#: observations/templates/observations/observation_detail.html:1083
#: observations/templates/observations/observation_detail.html:1120
#: observations/templates/observations/observation_detail_mobile.html:767
#: observations/templates/observations/observation_detail_mobile.html:798
#: observations/templates/observations/observation_detail_mobile.html:925
@ -755,27 +756,50 @@ msgstr "Code ou nom…"
msgid "Messages"
msgstr "Messages"
#: observations/templates/observations/observation_detail.html:906
#: observations/templates/observations/observation_detail.html:870
#: observations/templates/observations/observation_detail.html:1916
#: observations/templates/observations/observations_index.html:257
#: observations/views.py:579
msgid "Statut"
msgstr "Statut"
#: observations/templates/observations/observation_detail.html:874
msgid "Statut de suivi"
msgstr "Statut de suivi"
#: observations/templates/observations/observation_detail.html:875
msgid "Important / À traiter"
msgstr "Important / À traiter"
#: observations/templates/observations/observation_detail.html:877
msgid "Traité / Fait"
msgstr "Traité / Fait"
#: observations/templates/observations/observation_detail.html:879
msgid "Aucun drapeau"
msgstr ""
#: observations/templates/observations/observation_detail.html:943
#: observations/templates/observations/observation_detail_mobile.html:569
msgid "Aucun message."
msgstr "Aucun message."
#: observations/templates/observations/observation_detail.html:923
#: observations/templates/observations/observation_detail.html:960
#: observations/templates/observations/observation_detail_mobile.html:583
msgid "Écrire un message… (@ pour mentionner)"
msgstr "Écrire un message… (@ pour mentionner)"
#: observations/templates/observations/observation_detail.html:934
#: observations/templates/observations/observation_detail.html:971
#: observations/templates/observations/observation_detail_mobile.html:593
msgid "Joindre un fichier"
msgstr "Joindre un fichier"
#: observations/templates/observations/observation_detail.html:958
#: observations/templates/observations/observation_detail.html:995
#: observations/templates/observations/observation_detail_mobile.html:725
msgid "Supprimer l'observation"
msgstr "Supprimer l'observation"
#: observations/templates/observations/observation_detail.html:962
#: observations/templates/observations/observation_detail.html:999
#: observations/templates/observations/observation_detail_mobile.html:729
#, python-format
msgid ""
@ -786,65 +810,65 @@ msgstr ""
"Cette action est irréversible.Voulez-vous vraiment supprimer l'observation "
"<strong>%(code)s</strong> ? Cette action est irréversible."
#: observations/templates/observations/observation_detail.html:1107
#: observations/templates/observations/observation_detail.html:1144
msgid "Aucune localisation disponible"
msgstr "Aucune localisation disponible"
#: observations/templates/observations/observation_detail.html:1259
#: observations/templates/observations/observation_detail.html:1296
#: observations/templates/observations/observation_form.html:2321
msgid "Voir le détail"
msgstr "Voir le détail"
#: observations/templates/observations/observation_detail.html:1288
#: observations/templates/observations/observation_detail.html:1325
msgid "observations à proximité"
msgstr "observations à proximité"
#: observations/templates/observations/observation_detail.html:1289
#: observations/templates/observations/observation_detail.html:1326
msgid "Aucune observation similaire à proximité"
msgstr "Aucune observation similaire à proximité"
#: observations/templates/observations/observation_detail.html:1407
#: observations/templates/observations/observation_detail.html:1444
#: observations/templates/observations/observation_form.html:2556
msgid "Voir l'intervention"
msgstr "Voir l'intervention"
#: observations/templates/observations/observation_detail.html:1437
#: observations/templates/observations/observation_detail.html:1474
#: observations/templates/observations/observation_form.html:2594
msgid "intervention(s) proche(s) dans les 3 derniers mois"
msgstr "intervention(s) proche(s) dans les 3 derniers mois"
#: observations/templates/observations/observation_detail.html:1438
#: observations/templates/observations/observation_detail.html:1475
msgid "Aucune intervention récente pour cette catégorie"
msgstr "Aucune intervention récente pour cette catégorie"
#: observations/templates/observations/observation_detail.html:1529
#: observations/templates/observations/observation_detail.html:1566
#: observations/templates/observations/observation_detail_mobile.html:1027
#: observations/templates/observations/observations_index.html:384
#: observations/templates/observations/observations_index_mobile.html:460
msgid "Chargement..."
msgstr "Chargement..."
#: observations/templates/observations/observation_detail.html:1535
#: observations/templates/observations/observation_detail.html:1572
#: observations/templates/observations/observation_detail_mobile.html:1033
msgid "URL de résumé manquante"
msgstr "URL de résumé manquante"
#: observations/templates/observations/observation_detail.html:1551
#: observations/templates/observations/observation_detail.html:1588
#: observations/templates/observations/observation_detail_mobile.html:1049
msgid "Erreur lors du chargement du résumé"
msgstr "Erreur lors du chargement du résumé"
#: observations/templates/observations/observation_detail.html:1614
#: observations/templates/observations/observation_detail.html:1651
#: observations/templates/observations/observation_detail_mobile.html:1187
msgid "Retirer"
msgstr "Retirer"
#: observations/templates/observations/observation_detail.html:1791
#: observations/templates/observations/observation_detail.html:1828
#: observations/views.py:1926
msgid "Le message ne peut pas être vide."
msgstr "Le message ne peut pas être vide."
#: observations/templates/observations/observation_detail.html:1870
#: observations/templates/observations/observation_detail.html:1961
#: observations/templates/observations/observation_detail_mobile.html:1079
msgid "Aucun résultat"
msgstr "Aucun résultat"
@ -1175,11 +1199,6 @@ msgstr "Tous"
msgid "Aucun"
msgstr "Aucun"
#: observations/templates/observations/observations_index.html:257
#: observations/views.py:579
msgid "Statut"
msgstr "Statut"
#: observations/templates/observations/observations_index.html:276
msgid "Période"
msgstr "Période"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: 2025-12-04 12:30+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Dutch <LL@li.org>\n"
@ -406,6 +406,7 @@ msgstr "Te behandelen"
#: observations/models.py:428
#: observations/templates/observations/_observations_list_mobile.html:71
#: observations/templates/observations/observation_detail.html:876
msgid "En cours"
msgstr "In behandeling"
@ -497,7 +498,7 @@ msgid "Modifier"
msgstr "Bewerken"
#: observations/templates/observations/observation_detail.html:146
#: observations/templates/observations/observation_detail.html:968
#: observations/templates/observations/observation_detail.html:1005
#: observations/templates/observations/observation_detail_mobile.html:213
#: observations/templates/observations/observation_detail_mobile.html:735
msgid "Supprimer"
@ -595,7 +596,7 @@ msgstr "Voeg een opmerking toe..."
#: observations/templates/observations/observation_detail.html:537
#: observations/templates/observations/observation_detail.html:805
#: observations/templates/observations/observation_detail.html:836
#: observations/templates/observations/observation_detail.html:965
#: observations/templates/observations/observation_detail.html:1002
#: observations/templates/observations/observation_detail_mobile.html:659
#: observations/templates/observations/observation_detail_mobile.html:732
#: observations/templates/observations/observation_detail_mobile.html:765
@ -646,7 +647,7 @@ msgid "Marquer comme traitée"
msgstr "Markeer als verwerkt"
#: observations/templates/observations/observation_detail.html:651
#: observations/templates/observations/observation_detail.html:931
#: observations/templates/observations/observation_detail.html:968
#: observations/templates/observations/observation_detail_mobile.html:176
#: observations/templates/observations/observation_detail_mobile.html:590
#: observations/templates/observations/observation_form.html:1894
@ -730,7 +731,7 @@ msgstr "Code of titel…"
#: observations/templates/observations/observation_detail.html:807
#: observations/templates/observations/observation_detail.html:838
#: observations/templates/observations/observation_detail.html:1083
#: observations/templates/observations/observation_detail.html:1120
#: observations/templates/observations/observation_detail_mobile.html:767
#: observations/templates/observations/observation_detail_mobile.html:798
#: observations/templates/observations/observation_detail_mobile.html:925
@ -752,27 +753,50 @@ msgstr "Code of naam…"
msgid "Messages"
msgstr "Berichten"
#: observations/templates/observations/observation_detail.html:906
#: observations/templates/observations/observation_detail.html:870
#: observations/templates/observations/observation_detail.html:1916
#: observations/templates/observations/observations_index.html:257
#: observations/views.py:579
msgid "Statut"
msgstr "Status"
#: observations/templates/observations/observation_detail.html:874
msgid "Statut de suivi"
msgstr "Opvolgingsstatus"
#: observations/templates/observations/observation_detail.html:875
msgid "Important / À traiter"
msgstr "Belangrijk / Te behandelen"
#: observations/templates/observations/observation_detail.html:877
msgid "Traité / Fait"
msgstr "Verwerkt / Gedaan"
#: observations/templates/observations/observation_detail.html:879
msgid "Aucun drapeau"
msgstr ""
#: observations/templates/observations/observation_detail.html:943
#: observations/templates/observations/observation_detail_mobile.html:569
msgid "Aucun message."
msgstr "Geen bericht."
#: observations/templates/observations/observation_detail.html:923
#: observations/templates/observations/observation_detail.html:960
#: observations/templates/observations/observation_detail_mobile.html:583
msgid "Écrire un message… (@ pour mentionner)"
msgstr "Schrijf een bericht… (@ om te vermelden)"
#: observations/templates/observations/observation_detail.html:934
#: observations/templates/observations/observation_detail.html:971
#: observations/templates/observations/observation_detail_mobile.html:593
msgid "Joindre un fichier"
msgstr "Bestand bijvoegen"
#: observations/templates/observations/observation_detail.html:958
#: observations/templates/observations/observation_detail.html:995
#: observations/templates/observations/observation_detail_mobile.html:725
msgid "Supprimer l'observation"
msgstr "Waarneming verwijderen"
#: observations/templates/observations/observation_detail.html:962
#: observations/templates/observations/observation_detail.html:999
#: observations/templates/observations/observation_detail_mobile.html:729
#, python-format
msgid ""
@ -782,65 +806,65 @@ msgstr ""
"Weet u zeker dat u observatie <strong>%(code)s</strong> wilt verwijderen? "
"Deze actie is onomkeerbaar."
#: observations/templates/observations/observation_detail.html:1107
#: observations/templates/observations/observation_detail.html:1144
msgid "Aucune localisation disponible"
msgstr "Geen locatie beschikbaar"
#: observations/templates/observations/observation_detail.html:1259
#: observations/templates/observations/observation_detail.html:1296
#: observations/templates/observations/observation_form.html:2321
msgid "Voir le détail"
msgstr "Zie details"
#: observations/templates/observations/observation_detail.html:1288
#: observations/templates/observations/observation_detail.html:1325
msgid "observations à proximité"
msgstr "waarnemingen in de buurt"
#: observations/templates/observations/observation_detail.html:1289
#: observations/templates/observations/observation_detail.html:1326
msgid "Aucune observation similaire à proximité"
msgstr "Geen soortgelijke waarnemingen in de buurt"
#: observations/templates/observations/observation_detail.html:1407
#: observations/templates/observations/observation_detail.html:1444
#: observations/templates/observations/observation_form.html:2556
msgid "Voir l'intervention"
msgstr "Interventie bekijken"
#: observations/templates/observations/observation_detail.html:1437
#: observations/templates/observations/observation_detail.html:1474
#: observations/templates/observations/observation_form.html:2594
msgid "intervention(s) proche(s) dans les 3 derniers mois"
msgstr "nauwe interventie(s) in de afgelopen 3 maanden"
#: observations/templates/observations/observation_detail.html:1438
#: observations/templates/observations/observation_detail.html:1475
msgid "Aucune intervention récente pour cette catégorie"
msgstr "Geen recente interventie voor deze categorie"
#: observations/templates/observations/observation_detail.html:1529
#: observations/templates/observations/observation_detail.html:1566
#: observations/templates/observations/observation_detail_mobile.html:1027
#: observations/templates/observations/observations_index.html:384
#: observations/templates/observations/observations_index_mobile.html:460
msgid "Chargement..."
msgstr "Laden..."
#: observations/templates/observations/observation_detail.html:1535
#: observations/templates/observations/observation_detail.html:1572
#: observations/templates/observations/observation_detail_mobile.html:1033
msgid "URL de résumé manquante"
msgstr "Samenvattings-URL ontbreekt"
#: observations/templates/observations/observation_detail.html:1551
#: observations/templates/observations/observation_detail.html:1588
#: observations/templates/observations/observation_detail_mobile.html:1049
msgid "Erreur lors du chargement du résumé"
msgstr "Fout bij het laden van de samenvatting"
#: observations/templates/observations/observation_detail.html:1614
#: observations/templates/observations/observation_detail.html:1651
#: observations/templates/observations/observation_detail_mobile.html:1187
msgid "Retirer"
msgstr "Verwijderen"
#: observations/templates/observations/observation_detail.html:1791
#: observations/templates/observations/observation_detail.html:1828
#: observations/views.py:1926
msgid "Le message ne peut pas être vide."
msgstr "Het bericht mag niet leeg zijn."
#: observations/templates/observations/observation_detail.html:1870
#: observations/templates/observations/observation_detail.html:1961
#: observations/templates/observations/observation_detail_mobile.html:1079
msgid "Aucun résultat"
msgstr "Geen resultaten"
@ -1170,11 +1194,6 @@ msgstr "Alle"
msgid "Aucun"
msgstr "Geen"
#: observations/templates/observations/observations_index.html:257
#: observations/views.py:579
msgid "Statut"
msgstr "Status"
#: observations/templates/observations/observations_index.html:276
msgid "Période"
msgstr "Periode"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: 2025-12-04 13:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: English <LL@li.org>\n"
@ -161,8 +161,8 @@ msgstr "Strict access"
#: projects/models.py:92
msgid ""
"Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent"
" accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
"Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent "
"accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
msgstr ""
"If checked, only explicitly mentioned users and teams can access this "
"project. Thematic permissions do not apply."
@ -585,8 +585,8 @@ msgstr "Search for a team..."
#: projects/templates/projects/projects_detail.html:894
msgid ""
"Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet"
" (les permissions thématiques ne s'appliquent pas)."
"Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet "
"(les permissions thématiques ne s'appliquent pas)."
msgstr ""
"If checked, only listed users and teams can access the project (thematic "
"permissions do not apply)."
@ -672,11 +672,13 @@ msgstr "Create project"
#: projects/templates/projects/projects_form.html:46
msgid ""
"\n"
" Les champs avec une <span style=\"border-bottom: 1px dashed #6c757d;\">bordure en pointillés</span> sont facultatifs.\n"
" Les champs avec une <span style=\"border-bottom: 1px dashed #6c757d;"
"\">bordure en pointillés</span> sont facultatifs.\n"
" "
msgstr ""
"\n"
" Fields with a <span style=\"border-bottom: 1px dashed #6c757d;\">dashed border</span> are optional.\n"
" Fields with a <span style=\"border-bottom: 1px dashed #6c757d;"
"\">dashed border</span> are optional.\n"
" "
#: projects/templates/projects/projects_form.html:176
@ -745,8 +747,8 @@ msgstr "Filter on this area"
msgid "Accès introuvable"
msgstr "Access not found"
#: projects/views.py:524 projects/views.py:536 projects/views.py:972
#: projects/views.py:991 projects/views.py:1010
#: projects/views.py:524 projects/views.py:536 projects/views.py:990
#: projects/views.py:1009 projects/views.py:1028
msgid "Vous n'avez pas la permission de modifier ce projet."
msgstr "You do not have permission to modify this project."
@ -754,111 +756,110 @@ msgstr "You do not have permission to modify this project."
msgid "Vous n'avez pas la permission d'ajouter des documents."
msgstr "You do not have permission to add documents."
#: projects/views.py:603 projects/views.py:610 projects/views.py:616
#: projects/views.py:617 projects/views.py:624 projects/views.py:630
msgid "Document(s) sauvegardé(s) avec succès !"
msgstr "Document(s) saved successfully!"
#: projects/views.py:618
#: projects/views.py:632
msgid "Erreur lors de la sauvegarde des documents."
msgstr "Error saving documents."
#: projects/views.py:644
#: projects/views.py:658
msgid "Impossible d'ajouter une intervention à un projet terminé ou clôturé."
msgstr "Unable to add an intervention to a completed or closed project."
#: projects/views.py:649
#: projects/views.py:663
msgid "Vous n'avez pas de configuration utilisateur."
msgstr "You do not have a user configuration."
#: projects/views.py:670
#: projects/views.py:684
msgid ""
"Vous n'avez pas la permission de créer des interventions pour les "
"thématiques de ce projet."
msgstr ""
"You do not have permission to create interventions for this project's "
"themes."
"You do not have permission to create interventions for this project's themes."
#: projects/views.py:718
#: projects/views.py:732
msgid "Seuls les administrateurs ou managers peuvent associer une commande."
msgstr "Only administrators or managers can associate an order."
#: projects/views.py:725
#: projects/views.py:739
msgid "Commande associée au projet avec succès !"
msgstr "Order associated with project successfully!"
#: projects/views.py:727
#: projects/views.py:741
msgid "Erreur lors de l'association de la commande."
msgstr "Error associating order."
#: projects/views.py:745
#: projects/views.py:759
msgid "Cette commande n'est pas associée à ce projet."
msgstr "This order is not associated with this project."
#: projects/views.py:756
#: projects/views.py:770
msgid "Seuls les administrateurs ou managers peuvent créer une commande."
msgstr "Only administrators or managers can create an order."
#: projects/views.py:781
#: projects/views.py:795
msgid "Phase ajoutée avec succès !"
msgstr "Phase added successfully!"
#: projects/views.py:783
#: projects/views.py:797
msgid "Erreur lors de l'ajout de la phase."
msgstr "Error adding phase."
#: projects/views.py:924
#: projects/views.py:942
msgid "Vous n'avez pas la permission de modifier le statut."
msgstr "You do not have permission to modify the status."
#: projects/views.py:930
#: projects/views.py:948
msgid "Aucun statut fourni."
msgstr "No status provided."
#: projects/views.py:933
#: projects/views.py:951
msgid "Statut invalide."
msgstr "Invalid status."
#: projects/views.py:936
#: projects/views.py:954
msgid "Statut non autorisé pour ce projet."
msgstr "Status not allowed for this project."
#: projects/views.py:939
#: projects/views.py:957
msgid "Le statut du projet est déjà défini."
msgstr "The project status is already set."
#: projects/views.py:947
#: projects/views.py:965
msgid "Statut mis à jour avec succès."
msgstr "Status updated successfully."
#: projects/views.py:1016
#: projects/views.py:1034
msgid "Données invalides."
msgstr "Invalid data."
#: projects/views.py:1026
#: projects/views.py:1044
#, python-format
msgid "Attribut %(id)s introuvable."
msgstr "%(id)s attribute not found."
#: projects/views.py:1034
#: projects/views.py:1052
#, python-format
msgid "Le champ « %(name)s » est obligatoire."
msgstr "The “%(name)s” field is mandatory."
#: projects/views.py:1053
#: projects/views.py:1071
#, python-format
msgid "Valeur numérique invalide pour « %(name)s »."
msgstr "Invalid numeric value for “%(name)s”."
#: projects/views.py:1063
#: projects/views.py:1081
#, python-format
msgid "Valeur booléenne invalide pour « %(name)s »."
msgstr "Invalid boolean value for “%(name)s”."
#: projects/views.py:1078
#: projects/views.py:1096
#, python-format
msgid "Date invalide pour « %(name)s ». Format attendu : AAAA-MM-JJ."
msgstr "Invalid date for “%(name)s”. "
#: projects/views.py:1086
#: projects/views.py:1104
msgid "Valeurs sauvegardées avec succès."
msgstr "Values ​​saved successfully."

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: 2025-12-04 13:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: French <LL@li.org>\n"
@ -160,12 +160,8 @@ msgid "Accès strict"
msgstr "Accès strict"
#: projects/models.py:92
msgid ""
"Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent"
" accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
msgstr ""
"Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent"
" accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
msgid "Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
msgstr "Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
#: projects/models.py:203 projects/models.py:235
#: projects/templates/projects/projects_detail.html:46
@ -584,12 +580,8 @@ msgid "Rechercher une équipe..."
msgstr "Rechercher une équipe..."
#: projects/templates/projects/projects_detail.html:894
msgid ""
"Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet"
" (les permissions thématiques ne s'appliquent pas)."
msgstr ""
"Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet"
" (les permissions thématiques ne s'appliquent pas)."
msgid "Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet (les permissions thématiques ne s'appliquent pas)."
msgstr "Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet (les permissions thématiques ne s'appliquent pas)."
#: projects/templates/projects/projects_detail.html:918
msgid "Voulez-vous vraiment supprimer ce membre du projet ?"
@ -745,8 +737,8 @@ msgstr "Filtrer sur cette zone"
msgid "Accès introuvable"
msgstr "Accès introuvable"
#: projects/views.py:524 projects/views.py:536 projects/views.py:972
#: projects/views.py:991 projects/views.py:1010
#: projects/views.py:524 projects/views.py:536 projects/views.py:990
#: projects/views.py:1009 projects/views.py:1028
msgid "Vous n'avez pas la permission de modifier ce projet."
msgstr "Vous n'avez pas la permission de modifier ce projet."
@ -754,111 +746,107 @@ msgstr "Vous n'avez pas la permission de modifier ce projet."
msgid "Vous n'avez pas la permission d'ajouter des documents."
msgstr "Vous n'avez pas la permission d'ajouter des documents."
#: projects/views.py:603 projects/views.py:610 projects/views.py:616
#: projects/views.py:617 projects/views.py:624 projects/views.py:630
msgid "Document(s) sauvegardé(s) avec succès !"
msgstr "Document(s) sauvegardé(s) avec succès !"
#: projects/views.py:618
#: projects/views.py:632
msgid "Erreur lors de la sauvegarde des documents."
msgstr "Erreur lors de la sauvegarde des documents."
#: projects/views.py:644
#: projects/views.py:658
msgid "Impossible d'ajouter une intervention à un projet terminé ou clôturé."
msgstr "Impossible d'ajouter une intervention à un projet terminé ou clôturé."
#: projects/views.py:649
#: projects/views.py:663
msgid "Vous n'avez pas de configuration utilisateur."
msgstr "Vous n'avez pas de configuration utilisateur."
#: projects/views.py:670
msgid ""
"Vous n'avez pas la permission de créer des interventions pour les "
"thématiques de ce projet."
msgstr ""
"Vous n'avez pas la permission de créer des interventions pour les "
"thématiques de ce projet."
#: projects/views.py:684
msgid "Vous n'avez pas la permission de créer des interventions pour les thématiques de ce projet."
msgstr "Vous n'avez pas la permission de créer des interventions pour les thématiques de ce projet."
#: projects/views.py:718
#: projects/views.py:732
msgid "Seuls les administrateurs ou managers peuvent associer une commande."
msgstr "Seuls les administrateurs ou managers peuvent associer une commande."
#: projects/views.py:725
#: projects/views.py:739
msgid "Commande associée au projet avec succès !"
msgstr "Commande associée au projet avec succès !"
#: projects/views.py:727
#: projects/views.py:741
msgid "Erreur lors de l'association de la commande."
msgstr "Erreur lors de l'association de la commande."
#: projects/views.py:745
#: projects/views.py:759
msgid "Cette commande n'est pas associée à ce projet."
msgstr "Cette commande n'est pas associée à ce projet."
#: projects/views.py:756
#: projects/views.py:770
msgid "Seuls les administrateurs ou managers peuvent créer une commande."
msgstr "Seuls les administrateurs ou managers peuvent créer une commande."
#: projects/views.py:781
#: projects/views.py:795
msgid "Phase ajoutée avec succès !"
msgstr "Phase ajoutée avec succès !"
#: projects/views.py:783
#: projects/views.py:797
msgid "Erreur lors de l'ajout de la phase."
msgstr "Erreur lors de l'ajout de la phase."
#: projects/views.py:924
#: projects/views.py:942
msgid "Vous n'avez pas la permission de modifier le statut."
msgstr "Vous n'avez pas la permission de modifier le statut."
#: projects/views.py:930
#: projects/views.py:948
msgid "Aucun statut fourni."
msgstr "Aucun statut fourni."
#: projects/views.py:933
#: projects/views.py:951
msgid "Statut invalide."
msgstr "Statut invalide."
#: projects/views.py:936
#: projects/views.py:954
msgid "Statut non autorisé pour ce projet."
msgstr "Statut non autorisé pour ce projet."
#: projects/views.py:939
#: projects/views.py:957
msgid "Le statut du projet est déjà défini."
msgstr "Le statut du projet est déjà défini."
#: projects/views.py:947
#: projects/views.py:965
msgid "Statut mis à jour avec succès."
msgstr "Statut mis à jour avec succès."
#: projects/views.py:1016
#: projects/views.py:1034
msgid "Données invalides."
msgstr "Données invalides."
#: projects/views.py:1026
#: projects/views.py:1044
#, python-format
msgid "Attribut %(id)s introuvable."
msgstr "Attribut %(id)s introuvable."
#: projects/views.py:1034
#: projects/views.py:1052
#, python-format
msgid "Le champ « %(name)s » est obligatoire."
msgstr "Le champ « %(name)s » est obligatoire."
#: projects/views.py:1053
#: projects/views.py:1071
#, python-format
msgid "Valeur numérique invalide pour « %(name)s »."
msgstr "Valeur numérique invalide pour « %(name)s »."
#: projects/views.py:1063
#: projects/views.py:1081
#, python-format
msgid "Valeur booléenne invalide pour « %(name)s »."
msgstr "Valeur booléenne invalide pour « %(name)s »."
#: projects/views.py:1078
#: projects/views.py:1096
#, python-format
msgid "Date invalide pour « %(name)s ». Format attendu : AAAA-MM-JJ."
msgstr "Date invalide pour « %(name)s ». Format attendu : AAAA-MM-JJ."
#: projects/views.py:1086
#: projects/views.py:1104
msgid "Valeurs sauvegardées avec succès."
msgstr "Valeurs sauvegardées avec succès."

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: 2025-12-04 13:00+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Dutch <LL@li.org>\n"
@ -160,12 +160,8 @@ msgid "Accès strict"
msgstr "Strikte toegang"
#: projects/models.py:92
msgid ""
"Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent"
" accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
msgstr ""
"Indien aangevinkt, hebben alleen expliciet vermelde gebruikers en teams "
"toegang tot dit project. Thema-machtigingen zijn niet van toepassing."
msgid "Si coché, seuls les utilisateurs et équipes explicitement mentionnés peuvent accéder à ce projet. Les permissions par thématique ne s'appliquent pas."
msgstr "Indien aangevinkt, hebben alleen expliciet vermelde gebruikers en teams toegang tot dit project. Thema-machtigingen zijn niet van toepassing."
#: projects/models.py:203 projects/models.py:235
#: projects/templates/projects/projects_detail.html:46
@ -584,12 +580,8 @@ msgid "Rechercher une équipe..."
msgstr "Zoek een team..."
#: projects/templates/projects/projects_detail.html:894
msgid ""
"Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet"
" (les permissions thématiques ne s'appliquent pas)."
msgstr ""
"Indien aangevinkt, hebben alleen vermelde gebruikers en teams toegang tot "
"het project (thema-machtigingen zijn niet van toepassing)."
msgid "Si coché, seuls les utilisateurs et équipes listés peuvent accéder au projet (les permissions thématiques ne s'appliquent pas)."
msgstr "Indien aangevinkt, hebben alleen vermelde gebruikers en teams toegang tot het project (thema-machtigingen zijn niet van toepassing)."
#: projects/templates/projects/projects_detail.html:918
msgid "Voulez-vous vraiment supprimer ce membre du projet ?"
@ -745,8 +737,8 @@ msgstr "Filteren op dit gebied"
msgid "Accès introuvable"
msgstr "Toegang niet gevonden"
#: projects/views.py:524 projects/views.py:536 projects/views.py:972
#: projects/views.py:991 projects/views.py:1010
#: projects/views.py:524 projects/views.py:536 projects/views.py:990
#: projects/views.py:1009 projects/views.py:1028
msgid "Vous n'avez pas la permission de modifier ce projet."
msgstr "U heeft geen toestemming om dit project te wijzigen."
@ -754,112 +746,107 @@ msgstr "U heeft geen toestemming om dit project te wijzigen."
msgid "Vous n'avez pas la permission d'ajouter des documents."
msgstr "U hebt geen toestemming om documenten toe te voegen."
#: projects/views.py:603 projects/views.py:610 projects/views.py:616
#: projects/views.py:617 projects/views.py:624 projects/views.py:630
msgid "Document(s) sauvegardé(s) avec succès !"
msgstr "Document(en) succesvol opgeslagen!"
#: projects/views.py:618
#: projects/views.py:632
msgid "Erreur lors de la sauvegarde des documents."
msgstr "Fout bij het opslaan van de documenten."
#: projects/views.py:644
#: projects/views.py:658
msgid "Impossible d'ajouter une intervention à un projet terminé ou clôturé."
msgstr ""
"Kan geen interventie toevoegen aan een voltooid of afgesloten project."
msgstr "Kan geen interventie toevoegen aan een voltooid of afgesloten project."
#: projects/views.py:649
#: projects/views.py:663
msgid "Vous n'avez pas de configuration utilisateur."
msgstr "U hebt geen gebruikersconfiguratie."
#: projects/views.py:670
msgid ""
"Vous n'avez pas la permission de créer des interventions pour les "
"thématiques de ce projet."
msgstr ""
"U hebt geen toestemming om interventies te creëren voor de thema's van dit "
"project."
#: projects/views.py:684
msgid "Vous n'avez pas la permission de créer des interventions pour les thématiques de ce projet."
msgstr "U hebt geen toestemming om interventies te creëren voor de thema's van dit project."
#: projects/views.py:718
#: projects/views.py:732
msgid "Seuls les administrateurs ou managers peuvent associer une commande."
msgstr "Alleen beheerders of managers kunnen een bestelling koppelen."
#: projects/views.py:725
#: projects/views.py:739
msgid "Commande associée au projet avec succès !"
msgstr "Bestelling succesvol aan project gekoppeld!"
#: projects/views.py:727
#: projects/views.py:741
msgid "Erreur lors de l'association de la commande."
msgstr "Fout bij het koppelen van de bestelling."
#: projects/views.py:745
#: projects/views.py:759
msgid "Cette commande n'est pas associée à ce projet."
msgstr "Deze bestelling is niet gekoppeld aan dit project."
#: projects/views.py:756
#: projects/views.py:770
msgid "Seuls les administrateurs ou managers peuvent créer une commande."
msgstr "Alleen beheerders of managers kunnen een bestelling creëren."
#: projects/views.py:781
#: projects/views.py:795
msgid "Phase ajoutée avec succès !"
msgstr "Fase succesvol toegevoegd!"
#: projects/views.py:783
#: projects/views.py:797
msgid "Erreur lors de l'ajout de la phase."
msgstr "Fout bij het toevoegen van de fase."
#: projects/views.py:924
#: projects/views.py:942
msgid "Vous n'avez pas la permission de modifier le statut."
msgstr "U hebt geen toestemming om de status te wijzigen."
#: projects/views.py:930
#: projects/views.py:948
msgid "Aucun statut fourni."
msgstr "Geen status opgegeven."
#: projects/views.py:933
#: projects/views.py:951
msgid "Statut invalide."
msgstr "Ongeldige status."
#: projects/views.py:936
#: projects/views.py:954
msgid "Statut non autorisé pour ce projet."
msgstr "Status niet toegestaan voor dit project."
#: projects/views.py:939
#: projects/views.py:957
msgid "Le statut du projet est déjà défini."
msgstr "De status van het project is al gedefinieerd."
#: projects/views.py:947
#: projects/views.py:965
msgid "Statut mis à jour avec succès."
msgstr "Status succesvol bijgewerkt!"
#: projects/views.py:1016
#: projects/views.py:1034
msgid "Données invalides."
msgstr "Ongeldige gegevens."
#: projects/views.py:1026
#: projects/views.py:1044
#, python-format
msgid "Attribut %(id)s introuvable."
msgstr "%(id)s attribuut niet gevonden."
#: projects/views.py:1034
#: projects/views.py:1052
#, python-format
msgid "Le champ « %(name)s » est obligatoire."
msgstr "Het veld “%(name)s” is verplicht."
#: projects/views.py:1053
#: projects/views.py:1071
#, python-format
msgid "Valeur numérique invalide pour « %(name)s »."
msgstr "Ongeldige numerieke waarde voor “%(name)s”."
#: projects/views.py:1063
#: projects/views.py:1081
#, python-format
msgid "Valeur booléenne invalide pour « %(name)s »."
msgstr "Ongeldige Booleaanse waarde voor “%(name)s”."
#: projects/views.py:1078
#: projects/views.py:1096
#, python-format
msgid "Date invalide pour « %(name)s ». Format attendu : AAAA-MM-JJ."
msgstr "Ongeldige datum voor “%(name)s”. Verwacht formaat: JJJJ-MM-DD."
#: projects/views.py:1086
#: projects/views.py:1104
msgid "Valeurs sauvegardées avec succès."
msgstr "Waarden succesvol opgeslagen."

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-13 09:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -22,6 +22,7 @@ msgid "Reporting"
msgstr "Reporting"
#: reporting/models.py:19 reporting/templates/reporting/dashboard.html:150
#: reporting/templates/reporting/pending_dashboard.html:484
#: reporting/templates/reporting/volume_dashboard.html:96
#: reporting/templates/reporting/volume_dashboard.html:243
msgid "Contrat"
@ -68,6 +69,16 @@ msgstr "Observations"
msgid "Nombre d'observations"
msgstr "Number of observations"
#: reporting/templates/reporting/base.html:67
#: reporting/templates/reporting/base.html:70
msgid "Encours & Blocages"
msgstr ""
#: reporting/templates/reporting/base.html:81
#: reporting/templates/reporting/base.html:82
msgid "Tableau de bord encours"
msgstr ""
#: reporting/templates/reporting/dashboard.html:28
msgid "Évolution du temps de traitement"
msgstr "Evolution of processing time"
@ -185,6 +196,8 @@ msgstr "View in app"
#: reporting/templates/reporting/dashboard.html:145
#: reporting/templates/reporting/observations_dashboard.html:274
#: reporting/templates/reporting/pending_dashboard.html:417
#: reporting/templates/reporting/pending_dashboard.html:439
#: reporting/templates/reporting/volume_dashboard.html:238
msgid "Code"
msgstr "Code"
@ -202,6 +215,8 @@ msgstr "Creation date"
#: reporting/templates/reporting/dashboard.html:148
#: reporting/templates/reporting/observations_dashboard.html:278
#: reporting/templates/reporting/pending_dashboard.html:420
#: reporting/templates/reporting/pending_dashboard.html:464
#: reporting/templates/reporting/volume_dashboard.html:241
msgid "Statut"
msgstr "Status"
@ -352,6 +367,11 @@ msgid "Type"
msgstr "Type"
#: reporting/templates/reporting/observations_dashboard.html:279
#: reporting/templates/reporting/pending_dashboard.html:203
#: reporting/templates/reporting/pending_dashboard.html:348
#: reporting/templates/reporting/pending_dashboard.html:419
#: reporting/templates/reporting/pending_dashboard.html:441
#: reporting/templates/reporting/pending_dashboard.html:462
#: reporting/templates/reporting/volume_dashboard.html:93
msgid "Thématique"
msgstr "Thematic"
@ -395,6 +415,284 @@ msgstr "No sightings found."
msgid "Erreur lors du chargement des observations."
msgstr "Error loading data."
#: reporting/templates/reporting/pending_dashboard.html:165
msgid "Tableau de bord des encours & blocages"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:168
msgid ""
"Suivi des interventions non terminées (< 'finished') et observations "
"ouvertes sur les 24 derniers mois"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:174
msgid "Exporter en Excel (.xlsx)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:185
msgid "Horizon temporel"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:205
msgid "Toutes les thématiques"
msgstr "All thematics"
#: reporting/templates/reporting/pending_dashboard.html:214
msgid "Contrat / Prestataire"
msgstr "Contract / Contractor"
#: reporting/templates/reporting/pending_dashboard.html:216
msgid "Tous les contrats et prestataires"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:226
msgid "Filtrer"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:228
msgid "Réinitialiser"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:240
msgid "Interventions en cours"
msgstr "Ongoing interventions"
#: reporting/templates/reporting/pending_dashboard.html:248
msgid "Observations ouvertes"
msgstr "Open observations"
#: reporting/templates/reporting/pending_dashboard.html:256
msgid "En retard SLA"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:264
#: reporting/templates/reporting/pending_dashboard.html:355
msgid "En pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:266
msgid "Attente matériel / tiers"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:272
#: reporting/templates/reporting/pending_dashboard.html:361
msgid "Obs. Orphelines"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:274
msgid "À traiter sans intervention"
msgstr "To process without intervention"
#: reporting/templates/reporting/pending_dashboard.html:280
msgid "Obs. Désynchronisées"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:282
msgid "Intervention déjà close"
msgstr "Intervention already closed"
#: reporting/templates/reporting/pending_dashboard.html:294
msgid "Répartition par Statut d'Intervention"
msgstr "Distribution by Intervention Status"
#: reporting/templates/reporting/pending_dashboard.html:308
msgid "Pyramide des Âges"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:322
msgid "Motifs de Pause (on_pause)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:338
msgid "Tableau Croisé Dynamique : Analyse par Thématique"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:340
msgid ""
"Ventilation croisée des statuts, retards, motifs de pause et observations "
"par domaine métier"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:349
msgid "En prép."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:350
msgid "À approuver"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:351
msgid "À planifier"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:352
msgid "À traiter"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:353
msgid "Pris en charge"
msgstr "Taken in charge"
#: reporting/templates/reporting/pending_dashboard.html:354
msgid "Démarré"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:356
msgid "À corriger"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:357
msgid "Total Itv"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:358
#: reporting/templates/reporting/pending_dashboard.html:487
msgid "En Retard"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:359
#: reporting/templates/reporting/pending_dashboard.html:488
#, python-format
msgid "%% Retard"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:360
msgid "Obs. Ouvertes"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:362
msgid "Âge moy. (j)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:368
msgid "Chargement des données..."
msgstr "Loading data..."
#: reporting/templates/reporting/pending_dashboard.html:384
msgid "Interventions en retard & à corriger"
msgstr "Overdue & to correct interventions"
#: reporting/templates/reporting/pending_dashboard.html:390
msgid "Interventions en pause"
msgstr "Paused interventions"
#: reporting/templates/reporting/pending_dashboard.html:396
msgid "Observations orphelines & désynchronisées"
msgstr "Orphaned & desynchronized observations"
#: reporting/templates/reporting/pending_dashboard.html:402
msgid "Synthèse Prestataires & Contrats"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:418
#: reporting/templates/reporting/pending_dashboard.html:440
msgid "Titre / Objet"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:421
msgid "Prestataire / Contrat"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:422
msgid "Retard SLA"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:423
msgid "Diagnostic / Cause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:427
#: reporting/templates/reporting/pending_dashboard.html:789
msgid "Aucune intervention en retard."
msgstr "No overdue interventions."
#: reporting/templates/reporting/pending_dashboard.html:442
msgid "Motif de Pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:443
#: reporting/templates/reporting/pending_dashboard.html:483
msgid "Prestataire"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:444
msgid "Jours en Pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:445
msgid "Diagnostic"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:449
#: reporting/templates/reporting/pending_dashboard.html:808
msgid "Aucune intervention en pause."
msgstr "No paused interventions."
#: reporting/templates/reporting/pending_dashboard.html:461
msgid "Code Obs."
msgstr "Obs. Code"
#: reporting/templates/reporting/pending_dashboard.html:463
msgid "Symptôme"
msgstr "Symptom"
#: reporting/templates/reporting/pending_dashboard.html:465
msgid "Âge"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:466
msgid "Itv Liée"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:467
msgid "Anomalie / Diagnostic"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:471
#: reporting/templates/reporting/pending_dashboard.html:827
msgid "Aucune observation problématique détectée."
msgstr "No problematic observations detected."
#: reporting/templates/reporting/pending_dashboard.html:485
msgid "Gestionnaire"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:486
msgid "Total en cours"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:489
msgid "Âge Moyen (j)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:493
msgid "Aucune donnée de prestataire."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:553
msgid "Calcul des indicateurs..."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:576
msgid "Impossible de charger les données d'analyse."
msgstr "Unable to load analysis data."
#: reporting/templates/reporting/pending_dashboard.html:591
msgid "de l'encours"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:696
msgid "Aucune en pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:764
msgid "Total général"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:847
msgid "Aucun prestataire avec encours."
msgstr ""
#: reporting/templates/reporting/volume_dashboard.html:79
msgid "Nombre et répartition des interventions"
msgstr "Number and distribution of interventions"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -22,6 +22,7 @@ msgid "Reporting"
msgstr "Reporting"
#: reporting/models.py:19 reporting/templates/reporting/dashboard.html:150
#: reporting/templates/reporting/pending_dashboard.html:484
#: reporting/templates/reporting/volume_dashboard.html:96
#: reporting/templates/reporting/volume_dashboard.html:243
msgid "Contrat"
@ -68,6 +69,16 @@ msgstr "Observations"
msgid "Nombre d'observations"
msgstr "Nombre d'observations"
#: reporting/templates/reporting/base.html:67
#: reporting/templates/reporting/base.html:70
msgid "Encours & Blocages"
msgstr ""
#: reporting/templates/reporting/base.html:81
#: reporting/templates/reporting/base.html:82
msgid "Tableau de bord encours"
msgstr ""
#: reporting/templates/reporting/dashboard.html:28
msgid "Évolution du temps de traitement"
msgstr "Évolution du temps de traitement"
@ -185,6 +196,8 @@ msgstr "Voir dans l'application"
#: reporting/templates/reporting/dashboard.html:145
#: reporting/templates/reporting/observations_dashboard.html:274
#: reporting/templates/reporting/pending_dashboard.html:417
#: reporting/templates/reporting/pending_dashboard.html:439
#: reporting/templates/reporting/volume_dashboard.html:238
msgid "Code"
msgstr "Code"
@ -202,6 +215,8 @@ msgstr "Date de création"
#: reporting/templates/reporting/dashboard.html:148
#: reporting/templates/reporting/observations_dashboard.html:278
#: reporting/templates/reporting/pending_dashboard.html:420
#: reporting/templates/reporting/pending_dashboard.html:464
#: reporting/templates/reporting/volume_dashboard.html:241
msgid "Statut"
msgstr "Statut"
@ -352,6 +367,11 @@ msgid "Type"
msgstr "Type"
#: reporting/templates/reporting/observations_dashboard.html:279
#: reporting/templates/reporting/pending_dashboard.html:203
#: reporting/templates/reporting/pending_dashboard.html:348
#: reporting/templates/reporting/pending_dashboard.html:419
#: reporting/templates/reporting/pending_dashboard.html:441
#: reporting/templates/reporting/pending_dashboard.html:462
#: reporting/templates/reporting/volume_dashboard.html:93
msgid "Thématique"
msgstr "Thématique"
@ -395,6 +415,284 @@ msgstr "Aucune observation trouvée."
msgid "Erreur lors du chargement des observations."
msgstr "Erreur lors du chargement des observations."
#: reporting/templates/reporting/pending_dashboard.html:165
msgid "Tableau de bord des encours & blocages"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:168
msgid ""
"Suivi des interventions non terminées (< 'finished') et observations "
"ouvertes sur les 24 derniers mois"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:174
msgid "Exporter en Excel (.xlsx)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:185
msgid "Horizon temporel"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:205
msgid "Toutes les thématiques"
msgstr "Toutes les thématiques"
#: reporting/templates/reporting/pending_dashboard.html:214
msgid "Contrat / Prestataire"
msgstr "Contrat / Prestataire"
#: reporting/templates/reporting/pending_dashboard.html:216
msgid "Tous les contrats et prestataires"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:226
msgid "Filtrer"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:228
msgid "Réinitialiser"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:240
msgid "Interventions en cours"
msgstr "Interventions en cours"
#: reporting/templates/reporting/pending_dashboard.html:248
msgid "Observations ouvertes"
msgstr "Observations ouvertes"
#: reporting/templates/reporting/pending_dashboard.html:256
msgid "En retard SLA"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:264
#: reporting/templates/reporting/pending_dashboard.html:355
msgid "En pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:266
msgid "Attente matériel / tiers"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:272
#: reporting/templates/reporting/pending_dashboard.html:361
msgid "Obs. Orphelines"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:274
msgid "À traiter sans intervention"
msgstr "À traiter sans intervention"
#: reporting/templates/reporting/pending_dashboard.html:280
msgid "Obs. Désynchronisées"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:282
msgid "Intervention déjà close"
msgstr "Intervention déjà close"
#: reporting/templates/reporting/pending_dashboard.html:294
msgid "Répartition par Statut d'Intervention"
msgstr "Répartition par Statut d'Intervention"
#: reporting/templates/reporting/pending_dashboard.html:308
msgid "Pyramide des Âges"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:322
msgid "Motifs de Pause (on_pause)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:338
msgid "Tableau Croisé Dynamique : Analyse par Thématique"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:340
msgid ""
"Ventilation croisée des statuts, retards, motifs de pause et observations "
"par domaine métier"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:349
msgid "En prép."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:350
msgid "À approuver"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:351
msgid "À planifier"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:352
msgid "À traiter"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:353
msgid "Pris en charge"
msgstr "Pris en charge"
#: reporting/templates/reporting/pending_dashboard.html:354
msgid "Démarré"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:356
msgid "À corriger"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:357
msgid "Total Itv"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:358
#: reporting/templates/reporting/pending_dashboard.html:487
msgid "En Retard"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:359
#: reporting/templates/reporting/pending_dashboard.html:488
#, python-format
msgid "%% Retard"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:360
msgid "Obs. Ouvertes"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:362
msgid "Âge moy. (j)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:368
msgid "Chargement des données..."
msgstr "Chargement des données..."
#: reporting/templates/reporting/pending_dashboard.html:384
msgid "Interventions en retard & à corriger"
msgstr "Interventions en retard & à corriger"
#: reporting/templates/reporting/pending_dashboard.html:390
msgid "Interventions en pause"
msgstr "Interventions en pause"
#: reporting/templates/reporting/pending_dashboard.html:396
msgid "Observations orphelines & désynchronisées"
msgstr "Observations orphelines & désynchronisées"
#: reporting/templates/reporting/pending_dashboard.html:402
msgid "Synthèse Prestataires & Contrats"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:418
#: reporting/templates/reporting/pending_dashboard.html:440
msgid "Titre / Objet"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:421
msgid "Prestataire / Contrat"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:422
msgid "Retard SLA"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:423
msgid "Diagnostic / Cause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:427
#: reporting/templates/reporting/pending_dashboard.html:789
msgid "Aucune intervention en retard."
msgstr "Aucune intervention en retard."
#: reporting/templates/reporting/pending_dashboard.html:442
msgid "Motif de Pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:443
#: reporting/templates/reporting/pending_dashboard.html:483
msgid "Prestataire"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:444
msgid "Jours en Pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:445
msgid "Diagnostic"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:449
#: reporting/templates/reporting/pending_dashboard.html:808
msgid "Aucune intervention en pause."
msgstr "Aucune intervention en pause."
#: reporting/templates/reporting/pending_dashboard.html:461
msgid "Code Obs."
msgstr "Code Obs."
#: reporting/templates/reporting/pending_dashboard.html:463
msgid "Symptôme"
msgstr "Symptôme"
#: reporting/templates/reporting/pending_dashboard.html:465
msgid "Âge"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:466
msgid "Itv Liée"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:467
msgid "Anomalie / Diagnostic"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:471
#: reporting/templates/reporting/pending_dashboard.html:827
msgid "Aucune observation problématique détectée."
msgstr "Aucune observation problématique détectée."
#: reporting/templates/reporting/pending_dashboard.html:485
msgid "Gestionnaire"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:486
msgid "Total en cours"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:489
msgid "Âge Moyen (j)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:493
msgid "Aucune donnée de prestataire."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:553
msgid "Calcul des indicateurs..."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:576
msgid "Impossible de charger les données d'analyse."
msgstr "Impossible de charger les données d'analyse."
#: reporting/templates/reporting/pending_dashboard.html:591
msgid "de l'encours"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:696
msgid "Aucune en pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:764
msgid "Total général"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:847
msgid "Aucun prestataire avec encours."
msgstr ""
#: reporting/templates/reporting/volume_dashboard.html:79
msgid "Nombre et répartition des interventions"
msgstr "Nombre et répartition des interventions"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-19 09:47+0200\n"
"POT-Creation-Date: 2026-09-12 15:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -22,6 +22,7 @@ msgid "Reporting"
msgstr "Rapportering"
#: reporting/models.py:19 reporting/templates/reporting/dashboard.html:150
#: reporting/templates/reporting/pending_dashboard.html:484
#: reporting/templates/reporting/volume_dashboard.html:96
#: reporting/templates/reporting/volume_dashboard.html:243
msgid "Contrat"
@ -69,6 +70,16 @@ msgstr "Interventies"
msgid "Nombre d'observations"
msgstr "Aantal observaties"
#: reporting/templates/reporting/base.html:67
#: reporting/templates/reporting/base.html:70
msgid "Encours & Blocages"
msgstr ""
#: reporting/templates/reporting/base.html:81
#: reporting/templates/reporting/base.html:82
msgid "Tableau de bord encours"
msgstr ""
#: reporting/templates/reporting/dashboard.html:28
msgid "Évolution du temps de traitement"
msgstr "Evolutie van de verwerkingstijd"
@ -186,6 +197,8 @@ msgstr "Bekijk in app"
#: reporting/templates/reporting/dashboard.html:145
#: reporting/templates/reporting/observations_dashboard.html:274
#: reporting/templates/reporting/pending_dashboard.html:417
#: reporting/templates/reporting/pending_dashboard.html:439
#: reporting/templates/reporting/volume_dashboard.html:238
msgid "Code"
msgstr "Code"
@ -203,6 +216,8 @@ msgstr "Aanmaakdatum"
#: reporting/templates/reporting/dashboard.html:148
#: reporting/templates/reporting/observations_dashboard.html:278
#: reporting/templates/reporting/pending_dashboard.html:420
#: reporting/templates/reporting/pending_dashboard.html:464
#: reporting/templates/reporting/volume_dashboard.html:241
msgid "Statut"
msgstr "Status"
@ -353,6 +368,11 @@ msgid "Type"
msgstr "Type"
#: reporting/templates/reporting/observations_dashboard.html:279
#: reporting/templates/reporting/pending_dashboard.html:203
#: reporting/templates/reporting/pending_dashboard.html:348
#: reporting/templates/reporting/pending_dashboard.html:419
#: reporting/templates/reporting/pending_dashboard.html:441
#: reporting/templates/reporting/pending_dashboard.html:462
#: reporting/templates/reporting/volume_dashboard.html:93
msgid "Thématique"
msgstr "Thema"
@ -396,6 +416,284 @@ msgstr "Geen waarnemingen gevonden."
msgid "Erreur lors du chargement des observations."
msgstr "Fout bij het laden van de gegevens."
#: reporting/templates/reporting/pending_dashboard.html:165
msgid "Tableau de bord des encours & blocages"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:168
msgid ""
"Suivi des interventions non terminées (< 'finished') et observations "
"ouvertes sur les 24 derniers mois"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:174
msgid "Exporter en Excel (.xlsx)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:185
msgid "Horizon temporel"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:205
msgid "Toutes les thématiques"
msgstr "Alle thema's"
#: reporting/templates/reporting/pending_dashboard.html:214
msgid "Contrat / Prestataire"
msgstr "Contract / Dienstverlener"
#: reporting/templates/reporting/pending_dashboard.html:216
msgid "Tous les contrats et prestataires"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:226
msgid "Filtrer"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:228
msgid "Réinitialiser"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:240
msgid "Interventions en cours"
msgstr "Lopende interventies"
#: reporting/templates/reporting/pending_dashboard.html:248
msgid "Observations ouvertes"
msgstr "Openstaande waarnemingen"
#: reporting/templates/reporting/pending_dashboard.html:256
msgid "En retard SLA"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:264
#: reporting/templates/reporting/pending_dashboard.html:355
msgid "En pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:266
msgid "Attente matériel / tiers"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:272
#: reporting/templates/reporting/pending_dashboard.html:361
msgid "Obs. Orphelines"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:274
msgid "À traiter sans intervention"
msgstr "Te behandelen zonder interventie"
#: reporting/templates/reporting/pending_dashboard.html:280
msgid "Obs. Désynchronisées"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:282
msgid "Intervention déjà close"
msgstr "Interventie reeds gesloten"
#: reporting/templates/reporting/pending_dashboard.html:294
msgid "Répartition par Statut d'Intervention"
msgstr "Verdeling per interventiestatus"
#: reporting/templates/reporting/pending_dashboard.html:308
msgid "Pyramide des Âges"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:322
msgid "Motifs de Pause (on_pause)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:338
msgid "Tableau Croisé Dynamique : Analyse par Thématique"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:340
msgid ""
"Ventilation croisée des statuts, retards, motifs de pause et observations "
"par domaine métier"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:349
msgid "En prép."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:350
msgid "À approuver"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:351
msgid "À planifier"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:352
msgid "À traiter"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:353
msgid "Pris en charge"
msgstr "In behandeling genomen"
#: reporting/templates/reporting/pending_dashboard.html:354
msgid "Démarré"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:356
msgid "À corriger"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:357
msgid "Total Itv"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:358
#: reporting/templates/reporting/pending_dashboard.html:487
msgid "En Retard"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:359
#: reporting/templates/reporting/pending_dashboard.html:488
#, python-format
msgid "%% Retard"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:360
msgid "Obs. Ouvertes"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:362
msgid "Âge moy. (j)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:368
msgid "Chargement des données..."
msgstr "Gegevens laden..."
#: reporting/templates/reporting/pending_dashboard.html:384
msgid "Interventions en retard & à corriger"
msgstr "Laattijdige en te corrigeren interventies"
#: reporting/templates/reporting/pending_dashboard.html:390
msgid "Interventions en pause"
msgstr "Onderbroken interventies"
#: reporting/templates/reporting/pending_dashboard.html:396
msgid "Observations orphelines & désynchronisées"
msgstr "Verweesde & niet-gesynchroniseerde waarnemingen"
#: reporting/templates/reporting/pending_dashboard.html:402
msgid "Synthèse Prestataires & Contrats"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:418
#: reporting/templates/reporting/pending_dashboard.html:440
msgid "Titre / Objet"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:421
msgid "Prestataire / Contrat"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:422
msgid "Retard SLA"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:423
msgid "Diagnostic / Cause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:427
#: reporting/templates/reporting/pending_dashboard.html:789
msgid "Aucune intervention en retard."
msgstr "Geen laattijdige interventies."
#: reporting/templates/reporting/pending_dashboard.html:442
msgid "Motif de Pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:443
#: reporting/templates/reporting/pending_dashboard.html:483
msgid "Prestataire"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:444
msgid "Jours en Pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:445
msgid "Diagnostic"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:449
#: reporting/templates/reporting/pending_dashboard.html:808
msgid "Aucune intervention en pause."
msgstr "Geen onderbroken interventies."
#: reporting/templates/reporting/pending_dashboard.html:461
msgid "Code Obs."
msgstr "Waarnemingscode"
#: reporting/templates/reporting/pending_dashboard.html:463
msgid "Symptôme"
msgstr "Symptoom"
#: reporting/templates/reporting/pending_dashboard.html:465
msgid "Âge"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:466
msgid "Itv Liée"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:467
msgid "Anomalie / Diagnostic"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:471
#: reporting/templates/reporting/pending_dashboard.html:827
msgid "Aucune observation problématique détectée."
msgstr "Geen problematische waarnemingen gedetecteerd."
#: reporting/templates/reporting/pending_dashboard.html:485
msgid "Gestionnaire"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:486
msgid "Total en cours"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:489
msgid "Âge Moyen (j)"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:493
msgid "Aucune donnée de prestataire."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:553
msgid "Calcul des indicateurs..."
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:576
msgid "Impossible de charger les données d'analyse."
msgstr "Kan analysegegevens niet laden."
#: reporting/templates/reporting/pending_dashboard.html:591
msgid "de l'encours"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:696
msgid "Aucune en pause"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:764
msgid "Total général"
msgstr ""
#: reporting/templates/reporting/pending_dashboard.html:847
msgid "Aucun prestataire avec encours."
msgstr ""
#: reporting/templates/reporting/volume_dashboard.html:79
msgid "Nombre et répartition des interventions"
msgstr "Aantal en verdeling van interventies"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1823,11 +1823,11 @@ loadAssetsForCurrentView = async function() {
alert('{% translate "Règlement enregistré avec succès" %}');
loadRegulationDetail(reg.id, true, { fitBounds: false });
} else {
alert("{% translate 'Erreur lors de l\'enregistrement' %}");
alert('{% translate "Erreur lors de l\'enregistrement" %}');
}
} catch (error) {
console.error('Error saving regulation:', error);
alert("{% translate 'Erreur lors de l\'enregistrement' %}");
alert('{% translate "Erreur lors de l\'enregistrement" %}');
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff