language(), une déclaration par langue, dans les fichiers que vous voulez (les modèles les gardent dans un messages.ts à côté de ce qu’ils traduisent). Chaque fonction de votre projet reçoit alors t, qui donne un texte dans la bonne langue.
src/messages/en-US.ts
src/messages/fr.ts
src/commands/hello.ts
t connaît les clés de vos fichiers et les {paramètres} de chaque texte : une clé qui n’existe pas, ou un {count} manquant, est souligné dans votre éditeur.
Tout ce que déclare un fichier de langue, et le type de
t, est dans la
référence.Les déclarations
localeest la langue, comme l’écrivent les valeurs deLocale:'en-US','fr','de','es-ES','pt-BR','ja'… Un mot que Discord ne connaît pas est souligné, et refusé quand le fichier se charge, avec la liste.default: truemarque la langue utilisée quand celle d’une personne ou d’un serveur n’est pas là. Exactement un fichier le dit ; avec un seul fichier, cela va sans dire. Quand deux fichiers le disent, les deux sont soulignés dans l’éditeur, sur leurdefault: true, une fois quechapterjs devouchapterjs builda fait tourner les fichiers : survolez-le pour lire quel autre fichier le dit.- Une langue qui n’a pas un texte répond avec celui de la langue par défaut. Un texte que la langue par défaut n’a pas non plus vient de la langue qui l’a (
en-USd’abord, puis les autres dans l’ordre) : un module écrit en allemand et en espagnol fonctionne dans un bot dont la langue par défaut est le français, ettpropose ses clés quand même. Un{name}devenu{nom}est signalé sur cette déclaration, avec la clé et la langue d’où vient le texte : la déclaration est mise de côté jusqu’à ce qu’elle corresponde à nouveau, et les autres continuent de fonctionner. - Un paramètre est un nom entre accolades, fait de lettres, de chiffres et de
_:{name},{count}. Il prend un texte ou un nombre. Un nombre est écrit comme la langue écrit les nombres (1,234en anglais,1 234en français,1.234en allemand) : donnez-le sous forme de texte pour le garder tel quel, comme une année ou un identifiant. - Une accolade écrite telle quelle est doublée :
'{{name}}'affiche{name}. - Une langue peut être déclarée à plusieurs endroits. Les textes d’une fonctionnalité peuvent vivre à côté d’elle, dans un second
language({ locale: 'en-US', ... }): sestexts,commandsetframeworks’ajoutent aux autres de cette langue,tles propose tous, etdefault: truedans l’un d’eux décide pour toute la langue. La même clé à deux endroits est signalée sur le second, avec le premier :
src/moderation/messages.ts
Les pluriels
Un texte qui dépend d’un nombre a une forme par quantité, commemembers ci-dessus. Son count choisit la forme, selon les règles de la langue : l’anglais dit « 1 member » et « 0 members », le français dit « 0 membre », le russe et l’arabe ont plus de formes.
src/commands/count.ts
zero, one, two, few, many et other. other est toujours là ; écrivez les formes qu’utilise votre langue, les autres retombent sur other. zero, quand il est écrit, sert pour 0 dans toutes les langues ({ zero: 'aucune pomme', one: '{count} pomme', other: '{count} pommes' }). count est un nombre, et {count} dans une forme est ce nombre ; une forme peut avoir d’autres paramètres, donnés de la même façon. Un pluriel dans une langue peut être un simple texte dans une autre ('{count} membre(s)'), tant que les paramètres correspondent.
Quelle langue parle t
Un message est envoyé une fois, et tout le monde dans le salon lit le même texte : Discord ne le traduit pas pour chaque lecteur. Alorst parle la langue de ceux qui liront ce que vous envoyez, pas de la personne qui a utilisé la commande :
Discord ne connaît la langue que d’un serveur Communauté. Ailleurs, il dit
en-US quelle que soit la langue du serveur, donc un message public y utilise votre langue par défaut : un bot français dont la déclaration fr dit default: true parle français dans chaque serveur, et un bot en plusieurs langues suit les grands serveurs qui ont réglé la leur.
Quand cette langue n’est pas dans le fichier, t en prend une de la même langue dans une autre région (en-GB lit les textes 'en-US', es-419 ceux de 'es-ES', zh-TW ceux de 'zh-CN' : ajoutez le fichier quand ce n’est pas ce que vous voulez), et celle par défaut sinon. t.locale dit laquelle a été prise, et t.in(locale, key, params) donne un texte dans une autre langue, pour écrire à quelqu’un d’autre :
src/events/notify.ts
interaction.locale, guild.preferredLocale) est prise telle quelle : t choisit la plus proche déclarée, comme ci-dessus. Pour écrire plusieurs textes dans cette langue, t.in(locale) seul est le même t pour elle : const say = t.in(interaction.locale); say('pong').
Les textes d’un bouton, d’un menu, d’un formulaire
Une étiquette, un texte indicatif ou un titre s’écrit dans le fichier du composant. Pour le traduire, faites-en une fonction : elle reçoitt, dans la langue de qui lira le message, et les data que transporte le composant. Elle tourne au moment de l’envoi du message.
src/components/next.ts
label d’un bouton, le placeholder d’un menu et le label et la description de ses options, le title d’un formulaire et le label, la description, le placeholder et le content de ses champs. Un texte écrit tel quel reste tel quel. Ce que renvoie la fonction est vérifié par rapport aux limites de Discord au moment de l’envoi.
Ce que le bot répond de lui-même
Quand le bot ne peut pas lancer ce qui a été demandé, il répond de lui-même : une commande utilisée là où elle ne fonctionne pas, un bouton d’un vieux message, unrun qui a levé une erreur. Ces phrases sont en anglais. Traduisez celles que vous voulez dans framework, avec les mots pour une commande, un bouton, un menu et un formulaire, que remplace {what} :
src/messages/fr.ts
FrameworkTexts. Une phrase reçoit sa réponse dans la langue de la personne, depuis le fichier qui la traduit ; une phrase qu’un fichier ne traduit pas reste en anglais. Une phrase sans les paramètres de la phrase anglaise est refusée au chargement du fichier.
Les noms et descriptions des commandes
Ce que Discord affiche d’une commande avant qu’elle ne soit utilisée (son nom, sa description, ses options et leurs choix) est enregistré une fois, dans chaque langue : c’est Discord qui choisit la langue. Donnez-les dans lescommands de chaque fichier de langue, par le nom de la commande :
src/messages/fr.ts
description dans leur fichier : une commande qui n’existe pas, ou une que son fichier décrit, est soulignée (une fois que chapterjs dev ou chapterjs build a lancé les fichiers de commandes). Une option ou un choix qui n’existe pas est signalé au chargement du fichier.
Une commande a ses textes à un seul endroit. Sans description dans son fichier, les fichiers de langue la décrivent : la langue par défaut donne la description que Discord montre à tout le monde (et la description de chaque option qui n’en a pas dans le fichier), les autres langues leurs traductions. Avec description dans son fichier, le fichier possède ses textes, avec ses propres locales pour les traductions, et un fichier de langue qui la mentionne est une erreur :
En développement
Danschapterjs dev, enregistrer un fichier de langue change ses textes immédiatement, et les commandes sont enregistrées à nouveau quand ce que Discord en montre a changé. Un fichier qui ne se charge pas, ou qui ne correspond plus à la langue par défaut, est signalé avec ce qui ne va pas, et cette langue garde ses derniers textes qui fonctionnaient. Quand la première langue est ajoutée, la dernière retirée, ou qu’un autre fichier devient celui par défaut, les types de t suivent (et deux fichiers disant default: true sont soulignés tous les deux) :
Référence : language()
Chaque champ d’un fichier de langue, et le type de t.
Traductions des commandes
Le nom et la description d’une commande dans chaque langue.