Textes, localisation et mise à jour
Pipeline
flowchart LR
S[Google Sheets] --> I[importUploadTexts.js]
I --> JSON[shared_texts / gameUid_texts]
JSON --> UNITY[TextsManager]
JSON --> WEB[Upload serveur web]
WEB --> API[/getTexts/gameUid/lang/timestamp]
API --> UNITY
UNITY --> TL[TextLoader / UI]
Fichiers générés
- partagés :
Assets/Resources/data/shared_texts_fr.jsonetshared_texts_en.json; - jeu :
Assets/GameSpecific/<gameUid>/Resources/data_<gameUid>/<gameUid>_texts_fr.jsonet EN.
Import Node
exports/importUploadTexts.js associe chaque GameUid à ses feuilles Google et appelle importer.importTexts(). Les commandes exposées permettent l'import game-specific, shared, ou l'import suivi de l'upload.
Pour Accounting, le script traite Acc1 et Acc2 ensemble via accountingTextGameUids = ["acc1", "acc2"], afin d'éviter de mettre à jour une seule variante.
Chargement Unity
TextsManager.Initialize() charge les textes shared. Game.SetGameUid() appelle LoadGameSpecificTexts(). SetLang() recharge les deux couches puis appelle TextLoader.ReloadAll(). Un UID absent retourne [uid].
Mise à jour sans rebuild
UpdateTextsFromWebServer() interroge /getTexts/<gameUid>/<locale>/<timestamp>. Le client garde timestamp/hash et peut donc recevoir des textes plus récents que ceux embarqués dans le build.
Modifier un texte
- Trouver l'UID utilisé par
TextLoaderouGame.Texts.GetText(). - Modifier la source Google Sheets appropriée.
- Lancer l'import.
- Vérifier FR + EN.
- Publier si le changement doit être disponible sans rebuild.
- Sinon inclure les JSON générés dans le prochain build Unity.
Procédure exacte pour ajouter ou modifier un texte
- Choisir un UID stable; ne pas utiliser la phrase FR elle-même comme identifiant.
- Ajouter/modifier FR et EN dans la Google Sheet de textes appropriée.
- Depuis
node.js/exports/, lancerimportTexts.batet entrer le GameUid, ousharedpour les textes communs. - Inspecter les JSON générés.
- Si le texte doit être disponible sans rebuild, lancer
importThenUploadTextsToUniksimServer.bat. - Tester le changement de langue dans un client déjà ouvert via
TextsManager.SetLang().
Commandes directes équivalentes
node importUploadTexts.js shared
node importUploadTexts.js game_specific mk1
node importUploadTexts.js uploadTexts mk1
Cas Accounting
getGameUidsToImport() traite Accounting comme une paire : un import de textes Acc1/Acc2 met à jour les deux jeux concernés. Ne pas maintenir deux traductions divergentes par erreur.
Choisir shared ou game-specific
- texte réutilisé par plusieurs jeux/UI commune → shared;
- vocabulaire/règle propre à un jeu → game-specific;
- ne pas copier un même UID dans plusieurs couches juste pour contourner un problème de chargement.
Debug d'un UID affiché comme [my_uid]
- Vérifier que l'UID exact existe dans la Sheet.
- Vérifier que le JSON correspondant a été regénéré.
- Vérifier shared vs
data_<gameUid>. - Vérifier la locale courante.
- Si le serveur web doit fournir la mise à jour, vérifier l'upload et le timestamp/hash.
- Si le texte est dans Resources seulement, rebuilder Unity.
No comments to display
No comments to display