feat(tableau): traduire les libellés de filtre AG Grid en français (#41)

Menu de filtre de colonne (Contient, Égal à, Vide, ET/OU, etc.) traduit
via l'option native AG Grid localeText, exposée par dashGridOptions.
N'affecte pas l'apparence de base conservée au Lot 1 (aucun thème/CSS
custom) — uniquement le texte des libellés.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-07-10 19:42:51 +02:00
parent cb205a89f3
commit 4e07c69a85
2 changed files with 58 additions and 1 deletions
+37 -1
View File
@@ -1069,10 +1069,45 @@ def get_top_org_table(data, org_type: str, extra_columns: list, filters: bool =
)
# Libellés du menu de filtre AG Grid, traduits en français (option native
# AG Grid localeText, exposée via dashGridOptions — n'affecte pas l'apparence
# de base conservée au Lot 1, seulement le texte).
AG_GRID_LOCALE_FR = {
# Filtres texte / nombre / date
"contains": "Contient",
"notContains": "Ne contient pas",
"equals": "Égal à",
"notEqual": "Différent de",
"startsWith": "Commence par",
"endsWith": "Se termine par",
"blank": "Vide",
"notBlank": "Non vide",
"empty": "Choisir une option",
"lessThan": "Inférieur à",
"lessThanOrEqual": "Inférieur ou égal à",
"greaterThan": "Supérieur à",
"greaterThanOrEqual": "Supérieur ou égal à",
"inRange": "Entre",
"inRangeStart": "de",
"inRangeEnd": "à",
# Chrome du menu de filtre
"filterOoo": "Filtrer...",
"applyFilter": "Appliquer",
"resetFilter": "Réinitialiser",
"clearFilter": "Effacer",
"cancelFilter": "Annuler",
"andCondition": "ET",
"orCondition": "OU",
"noRowsToShow": "Aucune ligne à afficher",
"loadingOoo": "Chargement...",
}
def ag_grid(grid_id: str, column_defs: list[dict]) -> "dag.AgGrid":
"""Grille AG Grid server-side (infinite) pour la page Tableau.
Apparence de base d'AG Grid (aucun thème custom au Lot 1).
Apparence de base d'AG Grid (aucun thème custom au Lot 1) ; libellés
de filtre traduits en français via localeText.
"""
return dag.AgGrid(
id=grid_id,
@@ -1086,6 +1121,7 @@ def ag_grid(grid_id: str, column_defs: list[dict]) -> "dag.AgGrid":
"rowBuffer": 0,
"infiniteInitialRowCount": 100,
"suppressCellFocus": True,
"localeText": AG_GRID_LOCALE_FR,
},
columnSize="responsiveSizeToFit",
style={"height": "70vh", "width": "100%"},
+21
View File
@@ -349,3 +349,24 @@ def test_bounds_to_center_zoom_center_is_bbox_midpoint():
center, _ = bounds_to_center_zoom(40.0, 0.0, 50.0, 4.0)
assert center == [45.0, 2.0]
def test_ag_grid_locale_text_translates_common_filter_labels():
from src.figures import ag_grid
grid = ag_grid("tableau_grid", [])
locale_text = grid.dashGridOptions["localeText"]
assert locale_text["equals"] == "Égal à"
assert locale_text["contains"] == "Contient"
assert locale_text["blank"] == "Vide"
assert locale_text["notBlank"] == "Non vide"
def test_ag_grid_keeps_base_appearance():
"""Pas de thème/className custom au Lot 1 (spec de design)."""
from src.figures import ag_grid
grid = ag_grid("tableau_grid", [])
assert getattr(grid, "className", None) in (None, "")