Wie können Badges und Gruppen lokalisiert (mehrsprachig) werden?

Wie können Abzeichen und Gruppen lokalisiert (mehrsprachig) werden? Während der Einrichtung habe ich festgestellt, dass sich die Titel von Abzeichen und Gruppen nicht mit der Themensprache ändern. Wie kann ich dafür sorgen, dass Abzeichen und Gruppen dem Themenswitch folgen?

Die Möglichkeit, benutzerdefinierte Abzeichen und Gruppen für eine mehrsprachige Website zu lokalisieren, existiert noch nicht – derzeit können nur Beiträge, Kategorien und Tags lokalisiert werden.

Okay, danke. Aber warum wechseln die Abzeichen auf dieser Website (meta.discourse.org) zusammen mit dem Theme die Sprache? Wird das durch eine Übersetzungsfunktion verursacht? Ich schlage vor, dass das offizielle Team mehrsprachige Anpassungseinstellungen für Abzeichen, Gruppen und Tags hinzufügt; andernfalls können mehrsprachige Benutzer den Inhalt von Abzeichen, Gruppen und Tags nicht verstehen.

Auf jeder Seite gibt es einige angesäte Abzeichen, die über Crowdin internationalisiert (i18n) werden.

Benutzerdefinierte Abzeichen speichern Namen/Beschreibungen als reinen Text in der Datenbank. Wenn I18n.t (Internationalisierungsfunktion) mit einem Schlüssel wie badges.my_custom_badge.name aufgerufen wird, gibt es keine passende Übersetzung, sodass auf den gespeicherten Datenbankwert zurückgegriffen wird – derselbe Text für alle Gebietsschemata.

Es gibt eine Übergangslösung, bei der Administratoren manuell Übersetzungen für benutzerdefinierte Abzeichens-Schlüssel pro Gebietsschema hinzufügen können.

Sie können Ihre Seitentexte unter \u003cyour site\u003e/admin/customize/site_texts anpassen.


Einige konkrete Schritte für Sie

  1. Erstellen Sie das Abzeichen
  • Gehen Sie zu /admin/badges → Neues Abzeichen
  • Legen Sie wie gewohnt Namen, Beschreibung, Symbol usw. fest
  1. Finden Sie den i18n-Schlüssel
  • Das Schlüsselmuster lautet badges.{snake_case_name}.name
  • Der snake_case_name ist der Abzeichenname in Kleinbuchstaben, wobei Leerzeichen durch Unterstriche ersetzt werden
  • Also „Pokémon Master“ → badges.pokémon_master.name
  1. Fügen Sie Übersetzungsergänzungen hinzu
  • Gehen Sie zu /admin/customize/site_texts
  • Suchen Sie nach badges.pokémon_master
  • Sie sehen Schlüssel wie:
    • badges.pokémon_master.name
    • badges.pokémon_master.description
    • badges.pokémon_master.long_description
  • Wechseln Sie zum Zielgebietsschema (z. B. 简体中文), klicken Sie auf den Schlüssel und geben Sie den übersetzten Text ein
  1. Pro Gebietsschema wiederholen
  • Wechseln Sie das Gebietsschema in der Dropdown-Liste, fügen Sie Übersetzungen für jede benötigte Sprache hinzu
    • .name - Abzeichentitel
    • .description - Kurzbeschreibung auf Abzeichenkarten
    • .long_description - Vollständige Beschreibung auf der Detailseite des Abzeichens

english

japanese

Hallo! Vielen Dank für die Antwort! Wie genau wird der zweite Schritt, das Suchen des „i18n key“, implementiert? Ich konnte die Position des i18n-Schlüssels nicht finden.

Man findet es nicht wirklich, man leitet es einfach vom Namen ab, den Sie dem Abzeichen geben werden. (Ich werde den zweiten Schritt aktualisieren, um „ableiten“ anstelle von „finden“ zu verwenden)

Wenn Sie also „Bug Finder“ als Abzeichennamen verwenden, lautet der Schlüssel badges.bug_finder.name

Ich weiß nicht warum, aber wenn ich unter /admin/customize/site_texts nach etwas suche, wird immer “No matching site texts found” angezeigt. Wissen Sie, was die Ursache dafür sein könnte?

Oh Verzeihung, ich muss meine vorherigen Schritte korrigieren!
Die Admin-Seite für Seitentexte (/admin/customize/site_texts) findet nur Schlüssel, die bereits in Discurses Übersetzungdateien existieren. Daher existieren benutzerdefinierte Abzeichens-Schlüssel wie badges.pokémon_master.name dort nicht, und die Suche danach würde nichts zurückgeben (was das Problem ist, auf das Sie stoßen).

Die Screenshots, die ich geteilt habe, stammten von einer Einrichtung, in der ich die Übersetzungseinträge über die Rails-Konsole erstellt habe. Die Admin-UI-Schritte, die ich gegeben habe, funktionieren so nicht. Entschuldigung für die Verwirrung. Was tatsächlich funktioniert, wenn Sie Konsolenzugriff haben, ist, dass Sie Übersetzung-Overrides für benutzerdefinierte Abzeichen erstellen können:

# Das Schlüsselmuster lautet: badges.{name_in_snake_case}.{name|description|long_description}
# z.B. für ein Abzeichen namens "Pokemon Master":
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.name", "宝可梦大师")
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.description", "你的描述")

Sobald sie über die Konsole erstellt wurden, erscheint die Übersetzung unter /admin/customize/site_texts und kann von dort aus weiter bearbeitet werden.

Wenn Sie keinen Konsolenzugriff haben, ist dies derzeit nicht möglich. Die Lokalisierung benutzerdefinierter Abzeichen wird, wie von @awesomerobot erwähnt, noch nicht unterstützt.

Ich habe dieses Problem mit einem kleinen Plugin gelöst (GitHub - canbekcan/discourse-localized-badges · GitHub). Du kannst dein eigenes GitHub-Repository damit erstellen und die Sprachdateien anpassen. Eine Migration ist nicht erforderlich, aber falls nötig, prüfe den Ordner db oder entferne ihn.

Das Plugin fügt alle Sprachinformationen in configlocales ein. Es gibt einige Dateien, und du kannst deine eigenen Sprachdateien erstellen. Nach dem Übersetzen musst du dein Repository in app.yml einfügen (falls du Docker verwendest) und dann neu erstellen. Wie @nat oben erwähnt hat, nenne neue Badges einfach als badges.dein_badge_name. Sie werden automatisch den normalen Namen anzeigen, wie er in den Sprachdateien definiert ist. Wenn du deine aktuellen Sprachdateien aktualisierst, kannst du dies über das Admin-Panel tun, anstatt die App neu zu erstellen.

Du kannst die Struktur der Dateien prüfen und deine eigenen Sprachdateien im Ordner locales erstellen, aber die Dateien sind sehr empfindlich gegenüber Leerzeichen :slight_smile:

Hinweis: Dies ist meine Lösung für das Problem mit den Badge-Sprachen. Falls es eine bessere gibt, würde ich gerne davon hören :slight_smile: