Añadir una nueva localización desde el plugin

Normalmente, la mejor manera de añadir un nuevo idioma a Discourse es creando una solicitud de extracción (pull request) como se describe en “How to add a new language”.

La siguiente guía es para ti, si deseas utilizar un idioma que no se puede añadir al núcleo en este momento.


Añadir una localización que extiende una localización existente

Digamos que quieres añadir una localización en español para México (es_MX). Discourse ya incluye una localización en español (es), por lo que esto es bastante fácil.

La estructura de directorios de tu plugin debería verse así:

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

Añades la nueva localización llamando a register_locale.

  • El primer parámetro es obligatorio y debe ser el código del idioma.

  • name (el nombre en inglés de la localización) y nativeName (el nombre que se muestra en la interfaz de usuario) se pueden omitir si el código del idioma existe en names.yml.

  • fallbackLocale es el código del idioma que se utilizará como reserva para las traducciones faltantes y las reglas de pluralización.

# name: custom-locales
# about: Un plugin de ejemplo para añadir nuevas localizaciones.
# version: 1.0

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

El contenido de assets/locales/es_MX.js.erb es bastante simple; asegúrate de reemplazar el código de localización dentro de ese archivo con el que necesitas.

//= require locales/i18n
<%= JsLocaleHelper.output_locale(:es_MX) %>
Archivos de traducción en config/locales

Los archivos config/locales/client.es_MX.yml y config/locales/server.es_MX.yml contienen las traducciones que deseas utilizar. No es necesario que proporciones todas las traducciones necesarias para Discourse. Se utilizarán las traducciones en inglés en caso de traducciones faltantes.


Añadir una nueva localización

Añadir una localización completamente nueva, que no debería recurrir a una localización existente, requiere un poco más de trabajo.

La estructura de directorios de tu plugin debería verse así:

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

Añades la nueva localización llamando a register_locale.

  • El primer parámetro es obligatorio y debe ser el código del idioma.

  • name (el nombre en inglés de la localización) y nativeName (el nombre que se muestra en la interfaz de usuario) se pueden omitir si el código del idioma existe en names.yml, de lo contrario, también deberías establecerlos.

  • plural describe las reglas de pluralización del idioma. Echa un vistazo a plurals.rb para inspirarte. Además, puedes omitir este parámetro si plurals.rb ya contiene tu código de idioma.

# name: custom-locales
# about: Un plugin de ejemplo para añadir nuevas localizaciones.
# version: 1.0

register_locale(
  "foo",
  name: "Foo",
  nativeName: "Foo Bar",
  plural: {
    keys: [:one, :other],
    rule: lambda { |n| n == 1 ? :one : :other }
  }
)
<localizacion>.js.erb

El contenido de assets/locales/foo.js.erb es bastante simple; asegúrate de reemplazar el código de localización dentro de ese archivo con el que necesitas.

//= require locales/i18n
<%= JsLocaleHelper.output_locale(:foo) %>
Archivos de traducción en config/locales

Los archivos config/locales/client.foo.yml y config/locales/server.foo.yml contienen las traducciones que deseas utilizar. No es necesario que proporciones todas las traducciones necesarias para Discourse. Se utilizarán las traducciones en inglés en caso de traducciones faltantes.

message_format/<localizacion>.js

lib/javascripts/locale/message_format/foo.js contiene las reglas de pluralización utilizadas por el cliente. Las reglas deben ser las mismas que utilizaste en el método register_locale. Echa un vistazo a los archivos en lib/javascripts/locale para inspirarte. Puedes omitir este archivo si ese directorio ya contiene un archivo para tu código de idioma.

moment_js/<localizacion>.js

lib/javascripts/locale/moment_js/foo.js contiene el archivo de localización utilizado por moment.js. Echa un vistazo a los archivos en vendor/assets/javascripts/moment-locale para inspirarte. Puedes omitir este archivo si ese directorio ya contiene un archivo para tu código de idioma.

moment_js_timezones/<localizacion>.js

lib/javascripts/locale/moment_js_timezones/foo.js contiene el archivo de localización utilizado en el menú desplegable de zona horaria. Echa un vistazo a los archivos en vendor/assets/javascripts/moment-timezone-names-locale para inspirarte. Este archivo es opcional.


Preguntas frecuentes (FAQ)

Discourse no carga mi localización. ¿Qué está mal?

Asegúrate de que el plugin esté habilitado, de que hayas registrado la localización correctamente y de que todos los archivos requeridos existan y tengan el código de idioma correcto en el nombre del archivo. Discourse no carga localizaciones cuando detecta archivos faltantes.


Este documento está controlado por versiones: sugiere cambios en github.

17 Me gusta

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 Me gusta