Comment localiser (rendre multilingues) les badges et les groupes ?

Comment les badges et les groupes peuvent-ils être localisés (multilingues) ? Pendant la configuration, j’ai remarqué que les titres des badges et des groupes ne changent pas avec la langue du thème. Comment puis-je faire en sorte que les badges et les groupes suivent le changement de thème ?

La possibilité de localiser les badges et groupes personnalisés pour un site multilingue n’existe pas encore — pour le moment, seuls les messages, les catégories et les étiquettes peuvent être localisés.

D’accord, merci. Mais pourquoi les badges sur ce site (meta.discourse.org) changent-ils de langue avec le thème ? Est-ce dû à une fonctionnalité de traduction ? Je suggère que l’équipe officielle ajoute des paramètres de personnalisation multilingues pour les badges, les groupes et les étiquettes ; sinon, les utilisateurs multilingues ne pourront pas comprendre le contenu des badges, des groupes et des étiquettes.

Il existe des badges pré-attribués sur chaque site qui sont internationalisés (i18n) via Crowdin.

Les badges personnalisés stockent le nom/la description sous forme de texte brut dans la base de données. Lorsque I18n.t (fonctionnalité d’internationalisation) est appelé avec une clé telle que badges.my_custom_badge.name, il n’y a pas de traduction correspondante, ce qui conduit à revenir à la valeur stockée dans la base de données — le même texte pour toutes les langues.

Il existe une solution de contournement où les administrateurs peuvent ajouter manuellement des traductions pour les clés de badges personnalisés par langue.

Vous pouvez personnaliser les textes de votre site à l’adresse \u003cvotre site\u003e/admin/customize/site_texts.


Quelques étapes concrètes pour vous

  1. Créer le badge
  • Allez à /admin/badges → Nouveau Badge
  • Définissez le nom, la description, l’icône, etc. comme d’habitude
  1. Trouver la clé i18n
  • Le modèle de clé est badges.{nom_en_snake_case}.name
  • Le nom_en_snake_case est le nom du badge en minuscules avec les espaces remplacés par des tirets bas
  • Donc “Pokémon Master” → badges.pokémon_master.name
  1. Ajouter des remplacements de traduction
  • Allez à /admin/customize/site_texts
  • Recherchez badges.pokémon_master
  • Vous verrez des clés telles que :
    • badges.pokémon_master.name
    • badges.pokémon_master.description
    • badges.pokémon_master.long_description
  • Passez à la langue cible (par exemple, 简体中文), cliquez sur la clé et entrez le texte traduit
  1. Répéter par langue
  • Changez de langue dans le menu déroulant, ajoutez des traductions pour chaque langue dont vous avez besoin
    • .name - titre du badge
    • .description - courte description affichée sur les cartes de badges
    • .long_description - description complète affichée sur la page de détail du badge

english

japanese

Salut ! Merci pour votre réponse ! Comment la deuxième étape, la recherche de la « clé i18n », est-elle mise en œuvre ? Je n’ai pas trouvé l’emplacement de la clé i18n.

Vous ne le « trouvez » pas vraiment, vous le dérivez simplement du nom que vous donnerez au badge. (Je vais mettre à jour la deuxième étape pour utiliser « dériver » au lieu de « trouver »)

Donc, si vous utilisez « Bug Finder » comme nom de badge, la clé sera badges.bug_finder.name

Je ne sais pas pourquoi, mais quelle que soit la recherche effectuée dans /admin/customize/site_texts, le message “No matching site texts found” s’affiche. Savez-vous quelle en est la cause ?

Oh, désolé, je dois corriger mes étapes précédentes !
La page d’administration des textes du site (/admin/customize/site_texts) ne peut trouver que les clés qui existent déjà dans les fichiers de traduction de Discourse. Donc, malheureusement, les clés de badge personnalisées comme badges.pokémon_master.name n’existent pas là-bas, et les rechercher ne renverrait rien (ce qui est le problème que vous rencontrez).

Les captures d’écran que j’ai partagées provenaient d’une configuration où j’avais créé les entrées de traduction via la console Rails. Les étapes de l’interface d’administration que j’ai données ne fonctionneront pas telles quelles. Désolé pour la confusion. Ce qui fonctionne réellement si vous avez accès à la console, c’est que vous pouvez créer des remplacements de traduction pour les badges personnalisés :

# le modèle de clé est : badges.{nom_en_snake_case}.{name|description|long_description}
# par exemple pour un badge appelé "Pokemon Master" :
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.name", "宝可梦大师")
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.description", "你的描述")

Une fois créées via la console, la traduction apparaîtra dans /admin/customize/site_texts et pourra être modifiée à partir de là par la suite.

Si vous n’avez pas accès à la console, ce n’est actuellement pas possible. La localisation des badges personnalisés n’est pas encore prise en charge comme @awesomerobot l’avait mentionné.

J’ai résolu ce problème avec un petit plugin (GitHub - canbekcan/discourse-localized-badges · GitHub). Vous pouvez créer votre propre dépôt GitHub à partir de celui-ci et modifier les fichiers de langue. Une migration n’est pas nécessaire, mais si besoin, vérifiez le dossier db ou supprimez-le.

Le plugin fonctionne en ajoutant toutes les informations linguistiques dans configlocales. Il existe plusieurs fichiers et vous pouvez créer vos propres fichiers de langue. Une fois la traduction terminée, vous devez ajouter votre dépôt dans app.yml (si vous utilisez Docker), puis reconstruire l’application. Comme l’a mentionné @nat plus haut, nommez simplement les nouveaux badges sous la forme badges.votre_nom_de_badge. Ils s’afficheront automatiquement avec le nom normal tel que défini dans les fichiers de langue. Chaque fois que vous mettez à jour vos fichiers de langue actuels, vous pouvez le faire depuis le panneau d’administration sans avoir à reconstruire l’application.

Vous pouvez examiner la structure des fichiers et créer vos propres fichiers de langue dans le dossier locales, mais soyez très attentif aux espaces :slight_smile:

Remarque : C’est ma solution au problème des langues des badges. S’il existe une meilleure approche, je serais ravi de l’entendre :slight_smile