# Statuts de commande traduits pour une marketplace artisanale multi-vendeurs

> Comment afficher les statuts de commande dans la langue de chaque vendeur d'une marketplace artisanale, sans toucher au code des autres boutiques du réseau.

- Auteur : Clément Hadrot
- Publié le : 2025-08-19
- Mis à jour le : 2025-08-19
- Catégorie : Multilingue
- URL : https://wpmoderne.dev.wordpress-developpement.fr/multilingue/statuts-commande-traduits-marketplace-artisanale-multi-vendeurs/

## L’essentiel

- Traduire les libellés sans modifier le code des vendeurs
- Utiliser un filtre de statut plutôt qu'un fork
- Tester avec un vendeur par langue avant le déploiement

`wp wc order_status list` : cette commande liste les statuts de commande enregistrés dans une base WooCommerce. Sur la marketplace de poterie et de tissage Argilane, cette liste sert de point de départ à un problème précis : chaque atelier vendeur doit voir ses commandes dans sa propre langue, sans que personne n'ait à toucher au thème ou au code des autres vendeurs.

La marketplace regroupe des artisans francophones, néerlandophones et anglophones qui vendent sur la même installation WordPress, avec WooCommerce et une extension de marketplace multi-vendeurs. L'objectif n'est pas de traduire la boutique dans son ensemble, mais uniquement les statuts de commande visibles par chaque vendeur dans son tableau de bord.

## Pourquoi ce cas ne se résout pas comme un site multilingue classique

Sur un site multilingue classique, un visiteur choisit sa langue et voit tout le site dans cette langue. Ici, la langue à afficher dépend du vendeur connecté, pas d'un choix de visiteur : un même statut de commande, « en cours de préparation », doit s'afficher en néerlandais pour un vendeur et en anglais pour un autre, au même instant, sur la même commande consultée depuis deux tableaux de bord différents.

## Étape 1 : attacher une langue à chaque compte vendeur

> L'essentiel à retenir : Traduire les libellés sans modifier le code des vendeurs ; Utiliser un filtre de statut plutôt qu'un fork ; Tester avec un vendeur par langue avant le déploiement

La première étape consiste à stocker la langue préférée de chaque vendeur comme métadonnée utilisateur, via `update_user_meta( $vendor_id, 'vendor_locale', 'nl_NL' )`. Cette métadonnée sert de référence unique : elle ne dépend ni du réglage général du site, ni de la langue du navigateur du vendeur, ce qui évite les incohérences si un vendeur consulte son tableau de bord depuis un ordinateur mal configuré.

## Étape 2 : intercepter le libellé du statut à l'affichage

Plutôt que de dupliquer les fichiers de statuts, on intercepte l'affichage avec le filtre `woocommerce_order_status_name` côté tableau de bord vendeur, en résolvant la langue à afficher à partir de la métadonnée du vendeur connecté :

```
add_filter( 'woocommerce_order_status_name', function( $label, $status, $order ) {
    if ( ! is_admin() || ! function_exists( 'get_current_screen' ) ) {
        return $label;
    }
    $vendor_id = get_current_user_id();
    $locale    = get_user_meta( $vendor_id, 'vendor_locale', true );
    if ( ! $locale ) {
        return $label;
    }
    switch_to_locale( $locale );
    $translated = translate_with_gettext_context( $label, 'Order status', 'woocommerce' );
    restore_current_locale();
    return $translated;
}, 10, 3 );
```

La fonction `switch_to_locale()` change temporairement la locale active pour la durée du filtre, puis `restore_current_locale()` la remet en place. Cette bascule évite tout effet de bord sur le reste de la requête, y compris pour les autres vendeurs connectés sur le même serveur au même moment.

## Étape 3 : ne pas oublier les notifications automatiques

Les statuts affichés dans l'interface ne sont qu'une partie du problème : les courriels de notification envoyés par WooCommerce à chaque changement de statut doivent suivre la même logique. Le hook `woocommerce_email_headers` ne suffit pas seul, il faut combiner un changement de locale au moment de la génération du courriel avec `add_filter( 'determine_locale', ... )` pour les fonctions de traduction appelées pendant l'envoi.

- Vérifier que chaque courriel transactionnel respecte la langue du vendeur destinataire
- Ne jamais modifier les fichiers de traduction globaux de WooCommerce pour un seul vendeur
- Documenter la métadonnée `vendor_locale` dans le guide d'intégration de nouveaux vendeurs

## Étape 4 : tester avec un vendeur réel par langue

Avant tout déploiement, créez un compte de test par langue supportée et passez une commande complète sur chacun, du panier jusqu'au remboursement partiel. Cette étape révèle souvent un statut personnalisé oublié, ajouté par une extension tierce sans traduction correspondante dans la locale visée.

> Un statut personnalisé non traduit se repère toujours au même endroit : dans le courriel de confirmation, jamais dans l'interface d'administration qu'on a l'habitude de tester.

## En résumé

Traduire des statuts de commande pour une marketplace multi-vendeurs ne demande ni fork du code des vendeurs, ni extension multilingue complète. Une métadonnée utilisateur, un filtre ciblé et une bascule de locale contrôlée suffisent à couvrir le cas, à condition de tester chaque langue avec une commande réelle avant de considérer le sujet clos.
