Di solito, il modo migliore per aggiungere una nuova lingua a Discourse è creare una pull request come descritto in “How to add a new language”.
La seguente guida è per te, se desideri utilizzare una lingua che non può essere aggiunta al core al momento.
Aggiungere una locale che estende una locale esistente
Supponiamo che tu voglia aggiungere una locale spagnola per il Messico (es_MX). Discourse fornisce già una locale spagnola (es), quindi è piuttosto facile.
La struttura delle directory del tuo plugin dovrebbe apparire così:
custom-locales
├── assets
│ └── locales
│ └── es_MX.js.erb
├── config
│ └── locales
│ ├── client.es_MX.yml
│ └── server.es_MX.yml
└── plugin.rb
plugin.rb
Aggiungi la nuova locale chiamando register_locale.
-
Il primo parametro è obbligatorio e deve essere il codice della lingua.
-
name(il nome inglese della locale) enativeName(il nome mostrato nell’interfaccia utente) possono essere omessi, se il codice della lingua esiste innames.yml. -
fallbackLocaleè il codice della lingua che dovrebbe essere usato come fallback per le traduzioni mancanti e le regole di pluralizzazione.
# name: custom-locales
# about: An example plugin for adding new locales.
# version: 1.0
register_locale("es_MX", name: "Spanish (Mexico)", nativeName: "Español (México)", fallbackLocale: "es")
\u003clocale\u003e.js.erb
Il contenuto di assets/locales/es_MX.js.erb è piuttosto semplice: assicurati di sostituire il codice della locale all’interno di quel file con quello di cui hai bisogno.
//= require locales/i18n
<%= JsLocaleHelper.output_locale(:es_MX) %>
File di traduzione in config/locales
I file config/locales/client.es_MX.yml e config/locales/server.es_MX.yml contengono le traduzioni che desideri utilizzare. Non è necessario fornire tutte le traduzioni necessarie a Discourse. Il fallbackLocale e l’inglese verranno utilizzati in caso di traduzioni mancanti.
Aggiungere una nuova locale
Aggiungere una locale completamente nuova, che non dovrebbe fare affidamento su una locale esistente, richiede un po’ più di lavoro.
La struttura delle directory del tuo plugin dovrebbe apparire così:
custom-locales
├── assets
│ └── locales
│ └── foo.js.erb
├── config
│ └── locales
│ ├── client.foo.yml
│ └── server.foo.yml
├── lib
│ └── javascripts
│ └── locale
│ ├── message_format
│ │ └── foo.js
│ └── moment_js
│ └── foo.js
│ └── moment_js_timezones
│ └── foo.js
└── plugin.rb
plugin.rb
Aggiungi la nuova locale chiamando register_locale.
-
Il primo parametro è obbligatorio e deve essere il codice della lingua.
-
name(il nome inglese della locale) enativeName(il nome mostrato nell’interfaccia utente) possono essere omessi, se il codice della lingua esiste innames.yml, altrimenti dovresti impostarli. -
pluraldescrive le regole di pluralizzazione della lingua. Dai un’occhiata aplurals.rbper ispirazione. Inoltre, puoi omettere questo parametro seplurals.rbcontiene già il codice della tua lingua.
# name: custom-locales
# about: An example plugin for adding new locales.
# version: 1.0
register_locale(
"foo",
name: "Foo",
nativeName: "Foo Bar",
plural: {
keys: [:one, :other],
rule: lambda { |n| n == 1 ? :one : :other }
}
)
\u003clocale\u003e.js.erb
Il contenuto di assets/locales/foo.js.erb è piuttosto semplice: assicurati di sostituire il codice della locale all’interno di quel file con quello di cui hai bisogno.
//= require locales/i18n
<%= JsLocaleHelper.output_locale(:foo) %>
File di traduzione in config/locales
I file config/locales/client.foo.yml e config/locales/server.foo.yml contengono le traduzioni che desideri utilizzare. Non è necessario fornire tutte le traduzioni necessarie a Discourse. Le traduzioni inglesi verranno utilizzate in caso di traduzioni mancanti.
message_format/\u003clocale\u003e.js
lib/javascripts/locale/message_format/foo.js contiene le regole di pluralizzazione utilizzate dal client. Le regole dovrebbero essere le stesse che hai usato nel metodo register_locale. Dai un’occhiata ai file in lib/javascripts/locale per qualche ispirazione. Puoi omettere questo file se quella directory contiene già un file per il tuo codice lingua.
moment_js/\u003clocale\u003e.js
lib/javascripts/locale/moment_js/foo.js contiene il file della locale utilizzato da moment.js. Dai un’occhiata ai file in vendor/assets/javascripts/moment-locale per qualche ispirazione. Puoi omettere questo file se quella directory contiene già un file per il tuo codice lingua.
moment_js_timezones/\u003clocale\u003e.js
lib/javascripts/locale/moment_js_timezones/foo.js contiene il file della locale utilizzato nel menu a discesa del fuso orario. Dai un’occhiata ai file in vendor/assets/javascripts/moment-timezone-names-locale per qualche ispirazione. Questo file è opzionale.
FAQ
Discourse non carica la mia locale. Cosa c’è che non va?
Assicurati che il plugin sia abilitato, che tu abbia registrato correttamente la locale e che tutti i file richiesti esistano e abbiano il codice lingua corretto nel nome del file. Discourse non carica le locali quando rileva file mancanti.
Questo documento è controllato tramite versione - suggerisci modifiche su github.