Skip to content

Localisation francaise

SylvaniaCore deploy edited this page Aug 31, 2026 · 1 revision

Localisation française

Cette page dit ce qui est atteignable et ce qui ne l'est pas. Les sources ont été écartées une par une : ne refaites pas ces recherches.


🔴 Le constat central

Les entrées broadcast_text de l'ère Legion (identifiants > ~90 000) n'ont AUCUNE ligne de traduction, dans AUCUNE langue. Les entrées classiques en ont dix.

Il n'existe pas de source pour ce contenu. Ce qui est traduit en français sur ce serveur pour le contenu Legion a été rédigé, pas relevé.

Sources écartées

Source Verdict
BroadcastText.db2 du client N'en contient que 3 869 pour des identifiants allant jusqu'à 146 482 — Blizzard livre le reste par son propre système de hotfix, hors de portée. Extraction faite (mapextractor -e 2 -l frFR) : +907 entrées nettes seulement.
wago.tools Sert le même fichier. Sur les builds récents, zéro identifiant Legion — Blizzard purge.
Wowhead broadcast-text=<id> renvoie 404. L'API nether.wowhead.com/tooltip/quest/<id>?locale=2 donne titre et objectifs en français, mais pas les descriptions ni les textes de remise (rendus en JavaScript). Et le site renvoie 403 aux requêtes curl simples.
AshamaneCore (branche legion 7.3.5.26972) et ArgusCore Mêmes 280 conversations que nous, zéro quest_conversation.

Ce qui se répare tout seul

sql/sylvania/pont_traductions_broadcast.sqlrejouable. Il propage broadcast_text_locale vers creature_text_locale et gossip_menu_option_locale via les BroadcastTextId.

Ne fonctionne que si l'identifiant est renseigné et que la traduction existe. C'est-à-dire : bien pour le contenu classique, rien pour Legion.


⚠️ Le piège du cache client

Il explique la plupart des « j'ai traduit et ça reste en anglais ».

Le corps des dialogues (gossip) n'est pas envoyé par le serveur. HandleNpcTextQueryOpcode n'envoie que l'identifiant ; le client réclame ensuite l'enregistrement, et HandleDBQueryBulk le sérialise via store->WriteRecord(id, GetSessionDbcLocale(), ...).

Deux conséquences :

  1. Les chaînes localisées sont chargées au bootredémarrage du serveur obligatoire.
  2. Le client met en cache la version reçue → il faut vider le dossier Cache/ du client, sinon l'anglais persiste.

C'est ce qui expliquait le vieux mystère du dialogue de Ji Patte-de-Feu.

Locale servie

Le serveur ne sert que enUS (DBC.Locale = 0, seul dbc/enUS présent) : GetSessionDbcLocale() retombe donc sur enUS pour tous les clients.

👉 Mettez le texte français directement dans la colonne de base (Name, Text…), pas dans la table _locale correspondante.

C'est la même règle que pour le titre « Mercenaire » — voir Hotfixes DB2.


Ce qui est rechargeable à chaud

reload locales_creature_text
reload locales_gossip_menu_option
reload locales_quest

Les chaînes servies par les DB2 (gossip, titres, noms d'aires) ne le sont pas : redémarrage.


État des lieux

✅ Fait

Campagne Chasseur de démons intégralement traduite — 42/42 quêtes, 142/142 répliques, 15/15 options, 57 textes diffusés. Les 174 chaînes sont rédigées par nous, faute de source.

SQL : sql/sylvania/mardum_fr_broadcast.sql, sql/sylvania/mardum_fr_creature_text.sql, sql/sylvania/quest_38669_fr.sql, sql/sylvania/playerchoice_234_fr.sql, sql/sylvania/mari_dialogues.sql, sql/sylvania/monk_campaign_intro.sql.

⬜ Le gros chantier restant

Contenu Total Traduits
Textes de remise de quête 11 978 138
Textes d'attente 7 213 17

C'est très visible partout sur le serveur. Wowhead les possède, mais en JavaScript : il faudrait un navigateur piloté pour les extraire — même approche que pour l'audit du butin.


Écrire une traduction

Quand il n'existe pas de source officielle, la traduction est une rédaction. Le registre du royaume : français de Blizzard (vouvoiement des PNJ importants, tutoiement entre compagnons d'armes), pas de calque de l'anglais, pas d'anglicisme évitable.

Vérifiez toujours qu'un texte n'existe pas déjà côté français avant de le réécrire :

SELECT bt.ID, bt.Text, btl.Text_lang
FROM   dc_hotfixes.broadcast_text bt
LEFT   JOIN dc_hotfixes.broadcast_text_locale btl
       ON btl.ID = bt.ID AND btl.locale = 'frFR'
WHERE  bt.ID IN (...);

Clone this wiki locally