Aggiungi una nuova locale dal plugin

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) e nativeName (il nome mostrato nell’interfaccia utente) possono essere omessi, se il codice della lingua esiste in names.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) e nativeName (il nome mostrato nell’interfaccia utente) possono essere omessi, se il codice della lingua esiste in names.yml, altrimenti dovresti impostarli.

  • plural descrive le regole di pluralizzazione della lingua. Dai un’occhiata a plurals.rb per ispirazione. Inoltre, puoi omettere questo parametro se plurals.rb contiene 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.

17 Mi Piace

How can I customize the language in the translation plugin? I see that some of the plugins in the language cannot be translated,

for example: discourse-details, discourse-local-dates, discourse-narrative-bot, discourse-nginx-performance-report

3 Mi Piace