Localisation

Vue d'ensemble

rs-grid est livré avec 15 locales intégrées et supporte les traductions personnalisées. Toutes les chaînes visibles dans l'interface de la grille (menu contextuel, barre de recherche) sont pilotées par un struct Locale interchangeable à tout moment.

La grille peut aussi détecter automatiquement la langue du navigateur et sélectionner la locale correspondante.

Locales intégrées

CodeLangueConstructeur
enEnglishLocale::en()
frFrançaisLocale::fr()
deDeutschLocale::de()
esEspañolLocale::es()
itItalianoLocale::it()
ptPortuguêsLocale::pt()
nlNederlandsLocale::nl()
plPolskiLocale::pl()
trTürkçeLocale::tr()
ruРусскийLocale::ru()
ukУкраїнськаLocale::uk()
arالعربيةLocale::ar()
ja日本語Locale::ja()
zh中文Locale::zh()
ko한국어Locale::ko()

Détection de la langue du navigateur

Locale::from_browser() lit navigator.language et retourne la locale correspondante. Le matching se fait sur le sous-tag principal uniquement — "fr-FR", "fr-CA" et "fr" donnent tous Locale::fr(). Les langues non reconnues retombent sur l'anglais.

// Détection auto — la grille démarre dans la langue de l'utilisateur
let locale = Locale::from_browser();

Vous pouvez aussi matcher un tag BCP 47 manuellement :

let locale = Locale::from_language_tag("pt-BR"); // → Locale::pt()

Utilisation par framework

Leptos
Vanilla JS
Dioxus
Yew

Le composant <GridCanvas> accepte une prop réactive optionnelle locale. Quand le signal change, la grille met à jour ses textes sans se remonter.

use rs_grid_leptos::{GridCanvas, Locale};

// Détecte la langue au démarrage
let locale = RwSignal::new(Locale::from_browser());

view! {
    <GridCanvas
        model=model
        locale=Signal::derive(move || locale.get())
    />
}

Pour changer de langue à la volée :

locale.set(Locale::de());

Chaînes traduites

Le struct Locale contient toutes les chaînes de l'interface :

ChampValeur par défaut (EN)Utilisé dans
cutCutMenu contextuel
copyCopyMenu contextuel
copy_with_headersCopy with headersMenu contextuel
pastePasteMenu contextuel
pin_columnPin ColumnMenu d'en-tête
unpin_columnUnpin ColumnMenu d'en-tête
sort_ascendingSort AscendingMenu d'en-tête
sort_descendingSort DescendingMenu d'en-tête
clear_sortClear SortMenu d'en-tête
autosize_this_columnAutosize This ColumnMenu d'en-tête
autosize_all_columnsAutosize All ColumnsMenu d'en-tête
shortcut_cutCtrl+XRaccourci menu
shortcut_copyCtrl+CRaccourci menu
shortcut_pasteCtrl+VRaccourci menu
search_placeholderFind…Champ de recherche
Note

Les en-têtes de colonnes ne font pas partie du système de locale. Ils proviennent de ColumnDef.label et doivent être traduits par votre code applicatif.

Locale personnalisée

Vous pouvez construire une locale entièrement personnalisée :

let locale = Locale {
    cut: "カット".into(),
    copy: "コピー".into(),
    // ... remplir tous les champs
    ..Locale::en() // fallback pour les champs omis
};

Format des fichiers de locale

Les locales intégrées sont stockées dans des fichiers TOML plats dans le crate rs-grid-web sous src/locale/. Chaque fichier contient des paires clé = "valeur" :

# French — Français
cut                = "Couper"
copy               = "Copier"
copy_with_headers  = "Copier avec en-têtes"
paste              = "Coller"
pin_column         = "Épingler la colonne"
sort_ascending     = "Tri croissant"
search_placeholder = "Rechercher…"

Les fichiers sont embarqués à la compilation via include_str! — pas d'I/O au runtime.

Ajouter une nouvelle locale

  1. Copier un fichier .toml existant (ex : en.tomlxx.toml)
  2. Traduire toutes les valeurs
  3. Dans locale/mod.rs, ajouter :
    • Un constructeur pub fn xx() appelant parse_toml(include_str!("xx.toml"))
    • Une branche "xx" dans from_language_tag

Surcharges par item

Les labels du menu contextuel peuvent aussi être surchargés individuellement, indépendamment de la locale, via ContextMenuItem::with_label() :

let config = ContextMenuConfig {
    cell_items: Some(vec![
        ContextMenuItem::copy().with_label("📋 Copier"),
    ]),
    ..Default::default()
};
gc.set_context_menu(config);

Ces surcharges par item ont priorité sur la locale.