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) etnativeName(le nom affiché dans l’interface utilisateur) peuvent être omis, si le code de la langue existe dansnames.yml. -
fallbackLocaleest 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) etnativeName(le nom affiché dans l’interface utilisateur) peuvent être omis, si le code de la langue existe dansnames.yml, sinon vous devriez également les définir. -
pluraldécrit les règles de pluralisation de la langue. Jetez un œil àplurals.rbpour vous inspirer. Vous pouvez également omettre ce paramètre siplurals.rbcontient 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.