Come si possono localizzare (rendere multilingue) badge e gruppi?

Come è possibile localizzare (rendere multilingue) badge e gruppi? Durante l’impostazione, ho notato che i titoli dei badge e dei gruppi non cambiano con la lingua del tema. Come posso fare in modo che badge e gruppi seguano il cambio di tema?

La possibilità di localizzare badge e gruppi personalizzati per un sito multilingue non esiste ancora: al momento solo post, categorie e tag possono essere localizzati.

Ok, grazie. Ma perché i badge su questo sito (meta.discourse.org) cambiano lingua insieme al tema? È causato da una funzione di traduzione? Suggerisco che il team ufficiale aggiunga impostazioni di personalizzazione multilingue per badge, gruppi e tag; altrimenti gli utenti multilingue non potranno comprendere il contenuto di badge, gruppi e tag.

Ci sono alcuni badge predefiniti su ogni sito che sono internazionalizzati (i18n) tramite Crowdin.

I badge personalizzati memorizzano nome/descrizione come testo semplice nel database. Quando viene chiamata I18n.t (funzionalità di internazionalizzazione) con una chiave come badges.my_custom_badge.name, non c’è una traduzione corrispondente, quindi ricade sul valore memorizzato nel DB — lo stesso testo per tutte le lingue.

Esiste una soluzione alternativa in cui gli amministratori possono aggiungere manualmente le traduzioni per le chiavi dei badge personalizzati per lingua.

È possibile personalizzare i testi del sito su <il tuo sito>/admin/customize/site_texts.


Alcuni passaggi concreti per te

  1. Crea il badge
  • Vai su /admin/badges → Nuovo Badge
  • Imposta nome, descrizione, icona, ecc. come di consueto
  1. Trova la chiave i18n
  • Il modello di chiave è badges.{nome_in_snake_case}.name
  • Il nome_in_snake_case è il nome del badge in minuscolo con gli spazi sostituiti da trattini bassi
  • Quindi “Pokémon Master” → badges.pokémon_master.name
  1. Aggiungi override di traduzione
  • Vai su /admin/customize/site_texts
  • Cerca badges.pokémon_master
  • Vedrai chiavi come:
    • badges.pokémon_master.name
    • badges.pokémon_master.description
    • badges.pokémon_master.long_description
  • Passa alla lingua di destinazione (es. 简体中文), fai clic sulla chiave e inserisci il testo tradotto
  1. Ripeti per lingua
  • Cambia la lingua nel menu a discesa, aggiungi le traduzioni per ogni lingua di cui hai bisogno
    • .name - titolo del badge
    • .description - breve descrizione mostrata sulle schede dei badge
    • .long_description - descrizione completa mostrata sulla pagina dei dettagli del badge

english

japanese

Ciao! Grazie per la risposta! Come si implementa il secondo passaggio per trovare la “chiave i18n”, non riesco a trovare la posizione della chiave i18n.

Non lo si “trova” realmente, lo si deriva semplicemente dal nome che si darà al badge. (Aggiornerò il secondo passo per usare “derivare” invece di “trovare”)

Quindi, se si usa “Bug Finder” come nome del badge, la chiave sarà badges.bug_finder.name

Non so per quale motivo, cercando qualsiasi cosa in /admin/customize/site_texts viene visualizzato il messaggio “No matching site texts found”. Sapete qual è la causa?

Oh scusate, devo correggere i miei passaggi precedenti!
La pagina di amministrazione dei testi del sito (/admin/customize/site_texts) può trovare solo le chiavi che esistono già nei file di traduzione di Discourse. Quindi, sfortunatamente, le chiavi personalizzate per i badge come badges.pokémon_master.name non esistono lì e la ricerca di queste restituirebbe nulla (che è il problema che stai riscontrando).

Gli screenshot che ho condiviso provenivano da una configurazione in cui avevo creato le voci di traduzione tramite la console Rails. I passaggi dell’interfaccia di amministrazione che ho fornito non funzioneranno come scritti. Scusate la confusione. Quello che funziona realmente, se si ha accesso alla console, è creare override di traduzione per i badge personalizzati:

# lo schema della chiave è: badges.{nome_in_snake_case}.{name|description|long_description}
# es. per un badge chiamato "Pokemon Master":
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.name", "宝可梦大师")
TranslationOverride.upsert!("zh_CN", "badges.pokemon_master.description", "你的描述")

Una volta create tramite console, la traduzione apparirà in /admin/customize/site_texts e potrà essere modificata da lì in poi.

Se non si dispone di accesso alla console, al momento non è possibile. La localizzazione dei badge personalizzati non è ancora supportata come aveva menzionato @awesomerobot.

Ho risolto questo problema con un piccolo plugin (GitHub - canbekcan/discourse-localized-badges · GitHub). Puoi creare il tuo repository GitHub con questo e modificare i file delle lingue. Non è necessaria una migrazione, ma se ne hai bisogno, controlla la cartella db o rimuovila.

Il plugin funziona aggiungendo tutte le informazioni linguistiche in configlocales. Ci sono alcuni file e puoi creare i tuoi file linguistici. Dopo aver completato la traduzione, devi aggiungere il tuo repository in app.yml (se usi Docker) e poi ricostruire. Come ha menzionato @nat sopra, basta nominare i nuovi badge come badges.nome_del_tuo_badge. Mostrerà automaticamente il nome normale come definito nei file linguistici. Ogni volta che aggiorni i tuoi file linguistici attuali, puoi aggiornarli dal pannello di amministrazione invece di ricostruire l’app.

Puoi controllare la struttura dei file e creare i tuoi file linguistici nella cartella locales, ma i file sono molto sensibili agli spazi :slight_smile:

Nota: Questa è la mia soluzione al problema delle lingue dei badge. Se esiste una soluzione migliore, mi piacerebbe saperlo :slight_smile: