Repository navigation
FR Creer Traductions
English · Type : procédure + référence · Public : auteur · Contexte : dépôt du moteur, projet créé · Statut : prête · S'applique depuis : 4.3.0
Le contenu reste écrit dans une langue (lang dans game.ts, en en son absence). Traduire, c’est une table, pas des
clés dans le contenu : un fichier JSON par langue, { "<chemin>": "<texte>" }, créé et tenu à jour par l’outil i18n.
Cette page donne la marche à suivre, puis la référence des chemins et de la façon dont le joueur obtient une langue.
locales/<lang>.json à côté du jeu, chaque texte du jeu traduit, un jeu qui propose la langue dans ses Réglages et la
prend dans le navigateur, et i18n status à ✔ pour chaque langue.
Le dépôt du moteur comme un projet créé ; seuls la commande et le dossier changent. Vrai à partir de la 4.3.0 : depuis,
status vérifie les aiguillages de texte gardés par une traduction et i18n.same.
- Un jeu qui se charge (
validatepasse). - Des ids stables sur les répliques que vous doublerez ou réordonnerez :
ids --lines --write(voir Voix). Sans id, une réplique est repérée par sa position.
| Contexte | Dossier | Commande | Fichiers |
|---|---|---|---|
| Dépôt du moteur | sa racine |
npm run i18n -- <sous-commande> (le jeu : GAME=<id>, sinon celui choisi par npm run game, sinon config.game) |
games/<id>/locales/ |
| Projet créé | sa racine | npx quest-n-click i18n <sous-commande> |
game/locales/ |
-
Écrire le fichier de référence, chaque texte du jeu avec son chemin, dans la langue du jeu :
npm run i18n -- extract # games/<id>/locales/en.json : chaque texte avec son chemin (la référence) npm run i18n -- extract --lang fr # locales/fr.json : garde ce qui est traduit, suit les textes déplacés, ajoute les manquants npm run i18n -- status # couverture de chaque langue, chemins obsolètes, lignes longues
Ces trois commandes tournent dans le dépôt du moteur ; dans un projet créé, ce sont
npx quest-n-click i18n extract,npx quest-n-click i18n extract --lang fretnpx quest-n-click i18n status.
-
Créer ou mettre à jour le fichier de la langue avec
extract --lang fr. Les chemins manquants sont ajoutés avec le texte source, à traduire ; l’entrée_du fichier le dit. La commande affiche combien de textes sont à traduire, ont suivi un texte déplacé, sont revenus, ou ont été garés en_stale.
-
Traduire les valeurs, jamais les clés. Gardez les aiguillages de texte de la source (
{form?m=lui|f=elle}) : une traduction doit garder chaque choix que fait sa source, et peut ajouter les siens (un accord que l’anglais écrit pareil,Prêt{form?f=e|*=}). La syntaxe est dans Héros.
-
Vérifier avec
status. Pour chaque langue : traduits / total, manquants, obsolètes, longs (plus de 140 caractères), avec d’autres aiguillages, et les textes identiques à la source. La commande sort en 1 tant qu’une langue a un chemin manquant ou obsolète, un aiguillage abandonné, ou un texte identique quei18n.samene liste pas.
-
Publier. Le
index.tsdu jeu ramasse chaquelocales/*.json(celui du modèle et ceux des jeux d’exemple le font) ; construisez comme d’habitude. Commitez le fichier de référence avec les traductions.
Un chemin ressemble à room:house/look.pantry[1], item:key/name, char:grandma/refuse, ui/newGame,
rules/fallbacks.look[2], start/intro[0].say, credits[3], map/places.house.name, objectives/key.title. Une
ligne avec un id est indexée par lui : room:house/look.pantry.<id>, rules/fallbacks.look.<id> (les listes acceptent
des lignes { id, text } ; voir Notes de mise à jour v3). Le fichier est
{ "<chemin>": "<texte>" }.
Les chemins suivent la structure, donc un refactor les déplace ; extract --lang xx s’en sort. Il compare le jeu au
fichier de référence (rafraîchi en même temps) :
- un texte déplacé (une liste réordonnée, une règle remontée) garde sa traduction, parce que son texte source est le même ;
- un texte disparu est garé sous
_stale:<ancien chemin>: ignoré en jeu, listé parstatus, à supprimer à la main quand on est sûr ; il revient avec sa traduction si le chemin réapparaît ; - un texte dont la source a changé est proposé à nouveau à traduire.
Règle simple : lancer extract --lang xx après chaque refactor, avant de traduire du neuf, et commiter le fichier de
référence avec les traductions.
Garantie ·
i18n-moved-texts· référencée · portée vérifiée par son auteur (IA), pas relueextract --langgarde la traduction d’un texte déplacé, gare sous_stale:celui qui a disparu, et le ramène avec sa traduction quand son chemin revient.
La langue est choisie au chargement de la page, la première qui s’applique :
-
?lang=frdans l’adresse ; - le choix du joueur dans Réglages (gardé dans le navigateur sous
<id du jeu>.lang) : avecsettings: true, le menu Réglages montre une ligne Langue (ui.language) quand le jeu livre une autre langue ; chaque tap passe à la langue suivante et recharge la page ; - la langue du navigateur, quand le jeu la livre (
fr-CAprendfr) ; - sinon la langue du jeu.
Un texte absent d’un fichier reste comme écrit. Les voix suivent la langue : Voix.
Limite ·
lang-not-shipped?lang=xxpour une langue que le jeu ne livre pas montre les textes tels qu’écrits, sans message.
Un texte identique à la source est une ligne non traduite, et fait échouer status, sauf si i18n.same dans
game.ts liste son chemin : un nom, OK, ▲, un mot que le français a emprunté.
i18n: { same: ['char:hero/name', 'ui/ok'] },status liste aussi les clés ui que le jeu laisse aux textes anglais par défaut du moteur : le joueur les voit en
anglais dans toutes les langues.
npm run validate -- --report (npx quest-n-click validate --report) et l’onglet Check du Studio montrent la
couverture par langue. Dans un projet créé, verify, build et release lancent i18n status et s’arrêtent sur son
échec.
status affiche ✔ fr: <n>/<n> translated pour chaque langue et sort en 0 ; ?lang=fr montre le jeu en français.
| Symptôme | Cause | Correction |
|---|---|---|
… fr: 120/131 translated, 11 missing |
Des textes nouveaux depuis le dernier extract |
extract --lang fr, traduire |
stale room:house/look.pantry[3] |
Un texte qui n’existe plus | Le supprimer une fois sûr, ou le laisser revenir |
switch <chemin> (source: …; translation: …) |
La traduction abandonne un choix des aiguillages de la source | Remettre l’aiguillage dans la traduction |
same <chemin> (translate it, or list it in i18n.same) |
Un texte laissé comme la source | Le traduire, ou le lister dans i18n.same
|
[<id>] no locales |
Pas encore de fichier de langue | extract --lang <xx> |
| La page reste en anglais |
?lang= mal écrit, un choix gardé pour une autre langue, ou le fichier non livré |
Vérifier l’adresse et Réglages ; reconstruire |
locales/<base>.json (la référence) et locales/<lang>.json ; rien d’autre. ids --write (un prérequis) renomme les
clés des fichiers de langue vers les chemins fondés sur les ids.
Les deux fichiers sont dans Git : git checkout -- <fichier> annule un extract. extract ne perd rien : un texte
disparu va sous _stale:, il n’est jamais supprimé.
-
tools/i18n.ts,src/engine/tools/i18n.ts(textPaths,mergeLocale,localeStatus,switchesKept),src/engine/boot.ts(pickLanguage) - Voix, Héros, Les langues, côté joueur
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.4.0 r1, documentation revision · révision de la documentation 8dc717c69acb62c4742b69c54a7e7dfb620f75d8.
Earlier versions and permalinks · versions précédentes et liens permanents: https://wanoo.github.io/quest-n-click/docs/
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Démarrer (6)
Jouer (9)
Installer (17)
- Prérequis
- Installer depuis l'archive de la release
- Installer depuis npm, une fois publié
- Installer depuis le dépôt pour travailler sur le moteur
- doctor : vérifier sa machine
- Outils pour les images
- Outils audio : ffmpeg, fluidsynth, Furnace, uv
- Mettre à jour
- Notes de mise à jour : 4.4
- Notes de mise à jour : 4.3
- Notes de mise à jour : 4.2
- Notes de mise à jour : 4.1
- Notes de mise à jour : v3
- Notes de mise à jour : v2 vers v3
- Venir de web-scumm
- Référence du paquet
- Dépannage de l'installation
Créer un jeu (55)
- Votre premier jeu
- Organisation d'un projet créé et du dépôt du moteur
- La boucle de travail
- Principes du contenu et contrat d'identité
- Salles
- Géométrie : placement, zones de marche, masques, calques, caméra
- Un objet est visible mais inaccessible
- Réactions
- Commandes du jeu
- Conditions
- Drapeaux, variables et événements : lequel choisir
- Code sur mesure
- Personnages
- Objets et inventaire
- Carte du monde
- Dialogues
- Scripts et événements
- Faire bouger les personnages : patrouilles et marches
- Sorties
- Chapitres et objectifs
- État et sauvegardes : persistant ou temporaire, renommer un id, migrations
- Mise en scène : salles larges et animations
- La scène : lumières, particules, sols
- Habillage et polices
- Titre et générique
- Héros : plusieurs personnages et choix du héros
- Mini-jeux intégrés
- Un mini-jeu sur mesure
- Traductions
- Musique en stems
- Bruitages
- Voix : par langue et par héros
- Images : prompts, découpe des planches, transparence, échelle
- Provenance des assets
- Le storyboard, source de vérité
- Concevoir des énigmes
- Mécaniques classiques
- Pages de relecture
- Référence du DSL
- Vérifier son jeu
- Ce que prouve le solveur
- Options du solveur
- Playtests
- Remix
- Speedrun pour les auteurs
- La fin scellée
- Modèle de production
- Jeux d'exemple
- Travailler avec une IA
- Construire et publier un jeu
- Publier sur GitHub Pages
- Le jeu statique sur Clever Cloud
- Autres hébergeurs statiques
- Sous-chemin, cache et service worker, déploiement incomplet, retour arrière
- Tester sur un téléphone en réseau local
Studio local (24)
- Le Studio local : présentation et lancement
- Modifier une salle
- Placement et scène
- Aperçu, application, annulation
- Storyboard
- Assets et découpe
- Vérifier : validateur, solveur, chemin critique, chaleur, santé, couverture
- Captures avant et après
- Diff sémantique
- Jouer et rejouer une session
- Explication des règles
- Langue et objectifs
- Voix et matrice héros × langues
- Carte
- Notes
- Remix dans le Studio
- Musique
- L'Assistant : votre propre clé
- Mode démo et studio-apply
- Sécurité en local et en réseau local
- API du Studio
- MCP local : configurer chaque client
- Outils MCP
- Dépannage du Studio
Studio d'équipe (21)
- Ce qui tourne où
- Concepts : révision, transaction, pan, bail, aperçu, build
- Débuter comme dev invité
- Travailler ensemble au quotidien
- Rôles et actions : la matrice complète
- Invitations
- Gérer les membres
- Écriture refusée sur le Studio hébergé : révision de base périmée (409)
- Écriture refusée sur le Studio hébergé : pan verrouillé (423)
- Reprendre après un bail perdu, une déconnexion ou un aperçu périmé
- Commentaires
- Carte et diff sémantique
- Publier des builds
- MCP distant
- Le jeu dans Git
- Mettre à jour le moteur d'un jeu hébergé
- Assets hébergés
- La ligne de commande du serveur
- Routes de santé et de métriques
- L'essayer en local avec compose.yml
- Limites connues
Clever Cloud (23)
- Clever Cloud : vue d'ensemble, coût et prérequis
- Applications et add-ons
- Domaines et TLS
- Keycloak
- OIDC générique et GitLab
- Configuration
- Premier déploiement
- Sauvegardes
- RPO et RTO
- Exercice de restauration sur une installation vierge
- Redéploiements
- Mettre à jour le serveur et vérifier l'état après une migration
- Limites du retour arrière
- Supervision
- Sécurité
- Renouveler les clés
- Récupérer l'accès administrateur
- Changer de domaine ou de fournisseur OIDC
- Worker, PostgreSQL ou Cellar en panne
- Exporter le jeu et quitter l'installation
- Rétention
- Dépannage sur Clever Cloud
- Coûts et démontage
Reality Bridge et connecteurs (16)
- Le Reality Bridge : ce que c'est
- Démarrage rapide
- Garanties
- Installer et lancer le Bridge
- Sauvegarde et restauration
- Plusieurs tenants
- Signaux et manifeste
- La ligne de commande du Bridge
- Vue d'ensemble des connecteurs
- Connecteur email
- Connecteur Telnet
- Connecteur SSH
- Connecteur Open Badges
- Le SDK des connecteurs
- Sécurité : Biscuit et signatures
- Dépannage du Bridge et des connecteurs
Contribuer (25)
- Bienvenue
- Préparer son poste de développement
- La boucle de développement
- Avant une pull request
- Conventions
- Écrire la documentation
- Architecture
- Visite du code
- Frontières d'import
- Quels tests tournent quand
- Tests de mutation
- Le cliquet de couverture
- La référence de qualité
- La CI expliquée
- Passes de terrain
- Mesures de performance
- Publier une release
- Paquets npm
- Décisions et ADR
- Gouvernance
- Pull requests des bots
- Contribuer avec des agents IA
- Politique de sécurité
- Code de conduite
- Licences et crédits