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) ynativeName(el nombre que se muestra en la interfaz de usuario) se pueden omitir si el código del idioma existe ennames.yml. -
fallbackLocalees 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) ynativeName(el nombre que se muestra en la interfaz de usuario) se pueden omitir si el código del idioma existe ennames.yml, de lo contrario, también deberías establecerlos. -
pluraldescribe las reglas de pluralización del idioma. Echa un vistazo aplurals.rbpara inspirarte. Además, puedes omitir este parámetro siplurals.rbya 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.