Neuen Locale aus Plugin hinzufügen

Normalerweise ist der beste Weg, eine neue Sprache zu Discourse hinzuzufügen, das Erstellen einer Pull-Anfrage, wie unter „https://meta.discourse.org/t/how-to-add-a-new-language/14970“ beschrieben.

Die folgende Anleitung ist für Sie gedacht, wenn Sie eine Sprache verwenden möchten, die derzeit nicht zum Kern hinzugefügt werden kann.


Hinzufügen eines Gebietsschemas, das ein bestehendes Gebietsschema erweitert

Angenommen, Sie möchten ein spanisches Gebietsschema für Mexiko (es_MX) hinzufügen. Discourse wird bereits mit einem spanischen Gebietsschema (es) ausgeliefert, daher ist dies recht einfach.

Die Verzeichnisstruktur Ihres Plugins sollte wie folgt aussehen:

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

Sie fügen das neue Gebietsschema hinzu, indem Sie register_locale aufrufen.

  • Der erste Parameter ist erforderlich und muss der Sprachcode sein.

  • name (der englische Name des Gebietsschemas) und nativeName (der in der Benutzeroberfläche angezeigte Name) können weggelassen werden, wenn der Sprachcode in names.yml existiert.

  • fallbackLocale ist der Sprachcode, der als Fallback für fehlende Übersetzungen und Pluralisierungsregeln verwendet werden soll.

# name: custom-locales
# about: Ein Beispiel-Plugin zum Hinzufügen neuer Gebietsschemata.
# version: 1.0

register_locale("es_MX", name: "Spanish (Mexico)", nativeName: "Español (México)", fallbackLocale: "es")
<locale>.js.erb

Der Inhalt von assets/locales/es_MX.js.erb ist recht einfach – stellen Sie sicher, dass Sie den Gebietsschema-Code in dieser Datei durch den von Ihnen benötigten ersetzen.

//= require locales/i18n
<%= JsLocaleHelper.output_locale(:es_MX) %>
Übersetzungsdateien in config/locales

Die Dateien config/locales/client.es_MX.yml und config/locales/server.es_MX.yml enthalten die Übersetzungen, die Sie verwenden möchten. Sie müssen nicht alle von Discourse benötigten Übersetzungen bereitstellen. Die englischen Übersetzungen werden im Falle fehlender Übersetzungen verwendet.


Hinzufügen eines neuen Gebietsschemas

Das Hinzufügen eines komplett neuen Gebietsschemas, das nicht auf ein bestehendes Gebietsschema zurückgreifen soll, ist etwas mehr Arbeit.

Die Verzeichnisstruktur Ihres Plugins sollte wie folgt aussehen:

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

Sie fügen das neue Gebietsschema hinzu, indem Sie register_locale aufrufen.

  • Der erste Parameter ist erforderlich und muss der Sprachcode sein.

  • name (der englische Name des Gebietsschemas) und nativeName (der in der Benutzeroberfläche angezeigte Name) können weggelassen werden, wenn der Sprachcode in names.yml existiert, andernfalls sollten Sie diese ebenfalls festlegen.

  • plural beschreibt die Pluralisierungsregeln der Sprache. Schauen Sie sich plurals.rb als Inspiration an. Sie können diesen Parameter auch weglassen, wenn plurals.rb bereits den Sprachcode enthält.

# name: custom-locales
# about: Ein Beispiel-Plugin zum Hinzufügen neuer Gebietsschemata.
# 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

Der Inhalt von assets/locales/foo.js.erb ist recht einfach – stellen Sie sicher, dass Sie den Gebietsschema-Code in dieser Datei durch den von Ihnen benötigten ersetzen.

//= require locales/i18n
<%= JsLocaleHelper.output_locale(:foo) %>
Übersetzungsdateien in config/locales

Die Dateien config/locales/client.foo.yml und config/locales/server.foo.yml enthalten die Übersetzungen, die Sie verwenden möchten. Sie müssen nicht alle von Discourse benötigten Übersetzungen bereitstellen. Die englischen Übersetzungen werden im Falle fehlender Übersetzungen verwendet.

message_format/<locale>.js

lib/javascripts/locale/message_format/foo.js enthält die vom Client verwendeten Pluralisierungsregeln. Die Regeln sollten dieselben sein wie die, die Sie in der Methode register_locale verwendet haben. Schauen Sie sich die Dateien in lib/javascripts/locale als Inspiration an. Sie können diese Datei weglassen, wenn in diesem Verzeichnis bereits eine Datei für Ihren Sprachcode vorhanden ist.

moment_js/<locale>.js

lib/javascripts/locale/moment_js/foo.js enthält die von moment.js verwendete Gebietsschema-Datei. Schauen Sie sich die Dateien in vendor/assets/javascripts/moment-locale als Inspiration an. Sie können diese Datei weglassen, wenn in diesem Verzeichnis bereits eine Datei für Ihren Sprachcode vorhanden ist.

moment_js_timezones/<locale>.js

lib/javascripts/locale/moment_js_timezones/foo.js enthält die im Zeitzonenauswahlmenü verwendete Gebietsschema-Datei. Schauen Sie sich die Dateien in vendor/assets/javascripts/moment-timezone-names-locale als Inspiration an. Diese Datei ist optional.


FAQ

Discourse lädt mein Gebietsschema nicht. Was ist falsch?

Stellen Sie sicher, dass das Plugin aktiviert ist, dass Sie das Gebietsschema korrekt registriert haben und dass alle erforderlichen Dateien existieren und den korrekten Sprachcode im Dateinamen haben. Discourse lädt Gebietsschemata nicht, wenn es fehlende Dateien erkennt.


Dieses Dokument wird versioniert – Änderungen auf github vorschlagen.

17 „Gefällt mir“

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 „Gefällt mir“