Ajouter une nouvelle locale depuis un plugin

Habituellement, la meilleure façon d’ajouter une nouvelle langue à Discourse est de créer une pull request comme décrit dans “How to add a new language”.

Le guide suivant est pour vous, si vous souhaitez utiliser une langue qui ne peut pas être ajoutée au cœur pour le moment.


Ajouter une locale qui étend une locale existante

Disons que vous souhaitez ajouter une locale espagnole pour le Mexique (es_MX). Discourse fournit déjà une locale espagnole (es), donc c’est assez facile.

La structure de répertoire de votre plugin doit ressembler à ceci :

custom-locales
├── assets
│   └── locales
│       └── es_MX.js.erb
├── config
│   └── locales
│       ├── client.es_MX.yml
│       └── server.es_MX.yml
└── plugin.rb
plugin.rb

Vous ajoutez la nouvelle locale en appelant register_locale.

  • Le premier paramètre est requis et doit être le code de la langue.

  • name (le nom anglais de la locale) et nativeName (le nom affiché dans l’interface utilisateur) peuvent être omis si le code de la langue existe dans names.yml.

  • fallbackLocale est le code de la langue qui doit être utilisé comme secours pour les traductions manquantes et les règles de pluralisation.

# name: custom-locales
# about: Un plugin d'exemple pour l'ajout de nouvelles locales.
# version: 1.0

register_locale("es_MX", name: "Spanish (Mexico)", nativeName: "Español (México)", fallbackLocale: "es")
\u003clocale\u003e.js.erb

Le contenu de assets/locales/es_MX.js.erb est assez simple – assurez-vous de remplacer le code de la locale dans ce fichier par celui dont vous avez besoin.

//= require locales/i18n
\u003c%= JsLocaleHelper.output_locale(:es_MX) %\u003e
Fichiers de traduction dans config/locales

Les fichiers config/locales/client.es_MX.yml et config/locales/server.es_MX.yml contiennent les traductions que vous souhaitez utiliser. Vous n’avez pas besoin de fournir toutes les traductions nécessaires à Discourse. La locale de secours (fallbackLocale) et l’anglais seront utilisés en cas de traductions manquantes.


Ajouter une nouvelle locale

Ajouter une locale complètement nouvelle, qui ne devrait pas se rabattre sur une locale existante, demande un peu plus de travail.

La structure de répertoire de votre plugin doit ressembler à ceci :

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

Vous ajoutez la nouvelle locale en appelant register_locale.

  • Le premier paramètre est requis et doit être le code de la langue.

  • name (le nom anglais de la locale) et nativeName (le nom affiché dans l’interface utilisateur) peuvent être omis si le code de la langue existe dans names.yml, sinon vous devriez les définir également.

  • plural décrit les règles de pluralisation de la langue. Jetez un œil à plurals.rb pour vous inspirer. Vous pouvez également omettre ce paramètre si plurals.rb contient déjà votre code de langue.

# name: custom-locales
# about: Un plugin d'exemple pour l'ajout de nouvelles 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

Le contenu de assets/locales/foo.js.erb est assez simple – assurez-vous de remplacer le code de la locale dans ce fichier par celui dont vous avez besoin.

//= require locales/i18n
\u003c%= JsLocaleHelper.output_locale(:foo) %\u003e
Fichiers de traduction dans config/locales

Les fichiers config/locales/client.foo.yml et config/locales/server.foo.yml contiennent les traductions que vous souhaitez utiliser. Vous n’avez pas besoin de fournir toutes les traductions nécessaires à Discourse. Les traductions anglaises seront utilisées en cas de traductions manquantes.


FAQ

Discourse ne charge pas ma locale. Quel est le problème ?

Assurez-vous que le plugin est activé, que vous avez correctement enregistré la locale et que tous les fichiers requis existent et portent le code de langue correct dans le nom du fichier. Discourse ne charge pas les locales lorsqu’il détecte des fichiers manquants.


\u003csmall\u003eCe document est contrôlé par version - suggérez des modifications sur github.\u003c/small\u003e

17 « J'aime »

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 « J'aime »