Ajouter une nouvelle locale depuis un plugin

Habituellement, la meilleure façon d’ajouter une nouvelle langue à Discourse est de créer une demande d’extraction (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.


Ajout d’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 devrait 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 obligatoire 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 exemple pour ajouter de nouvelles locales.
# version: 1.0

register_locale("es_MX", name: "Spanish (Mexico)", nativeName: "Español (México)", fallbackLocale: "es")
<locale>.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
<%= JsLocaleHelper.output_locale(:es_MX) %>
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 fallbackLocale et l’anglais seront utilisés en cas de traductions manquantes.


Ajout d’une nouvelle locale

L’ajout d’une locale entièrement 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 devrait 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 obligatoire 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 également les définir.

  • 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 exemple pour ajouter 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 }
  }
)
<locale>.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
<%= JsLocaleHelper.output_locale(:foo) %>
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.

message_format/<locale>.js

lib/javascripts/locale/message_format/foo.js contient les règles de pluralisation utilisées par le client. Les règles doivent être les mêmes que celles que vous avez utilisées dans la méthode register_locale. Jetez un œil aux fichiers dans lib/javascripts/locale pour vous inspirer. Vous pouvez omettre ce fichier si ce répertoire contient déjà un fichier pour votre code de langue.

moment_js/<locale>.js

lib/javascripts/locale/moment_js/foo.js contient le fichier de locale utilisé par moment.js. Jetez un œil aux fichiers dans vendor/assets/javascripts/moment-locale pour vous inspirer. Vous pouvez omettre ce fichier si ce répertoire contient déjà un fichier pour votre code de langue.

moment_js_timezones/<locale>.js

lib/javascripts/locale/moment_js_timezones/foo.js contient le fichier de locale utilisé dans le menu déroulant des fuseaux horaires. Jetez un œil aux fichiers dans vendor/assets/javascripts/moment-timezone-names-locale pour vous inspirer. Ce fichier est facultatif.


FAQ

Discourse ne charge pas ma locale. Qu’est-ce qui ne va pas ?

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 de fichier. Discourse ne charge pas les locales lorsqu’il détecte des fichiers manquants.


Ce document est contrôlé par version - suggérez des modifications sur github.

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 »