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 por el momento.
Añadir una localización que extiende una localización existente
Digamos que deseas 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 debe usar 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")
\u003clocale\u003e.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 definirlos. -
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 }
}
)
\u003clocale\u003e.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. Las traducciones en inglés se utilizarán en caso de traducciones faltantes.
Preguntas Frecuentes
Discourse no carga mi localización. ¿Qué está mal?
Asegúrate de que el plugin esté habilitado, de que registraste la localización correctamente y de que todos los archivos requeridos existen y tienen el código de idioma correcto en el nombre del archivo. Discourse no carga las localizaciones cuando detecta archivos faltantes.
\u003csmall\u003eEste documento está controlado por versiones. Sugiere cambios en github.\u003c/small\u003e