Geralmente, a melhor forma de adicionar um novo idioma ao Discourse é criando um pull request, conforme descrito em “How to add a new language”.
O guia a seguir é para você, caso queira usar um idioma que não pode ser adicionado ao core no momento.
Adicionando uma localidade que estende uma localidade existente
Digamos que você queira adicionar uma localidade em espanhol para o México (es_MX). O Discourse já oferece uma localidade em espanhol (es), então isso é bem fácil.
A estrutura de diretórios do seu plugin deve ser assim:
custom-locales
├── assets
│ └── locales
│ └── es_MX.js.erb
├── config
│ └── locales
│ ├── client.es_MX.yml
│ └── server.es_MX.yml
└── plugin.rb
plugin.rb
Você adiciona a nova localidade chamando register_locale.
-
O primeiro parâmetro é obrigatório e deve ser o código do idioma.
-
name(o nome da localidade em inglês) enativeName(o nome exibido na interface do usuário) podem ser omitidos se o código do idioma existir emnames.yml. -
fallbackLocaleé o código do idioma que deve ser usado como fallback para regras de pluralização e traduções ausentes.
# name: custom-locales
# about: An example plugin for adding new locales.
# version: 1.0
register_locale("es_MX", name: "Spanish (Mexico)", nativeName: "Español (México)", fallbackLocale: "es")
<locale>.js.erb
O conteúdo de assets/locales/es_MX.js.erb é bem simples – certifique-se de substituir o código da localidade dentro desse arquivo pelo que você precisa.
//= require locales/i18n
<%= JsLocaleHelper.output_locale(:es_MX) %>
Arquivos de tradução em config/locales
Os arquivos config/locales/client.es_MX.yml e config/locales/server.es_MX.yml contêm as traduções que você deseja usar. Você não precisa fornecer todas as traduções necessárias pelo Discourse. O fallbackLocale e o inglês serão usados em caso de traduções ausentes.
Adicionando uma nova localidade
Adicionar uma localidade completamente nova, que não deve usar como fallback uma localidade existente, dá um pouco mais de trabalho.
A estrutura de diretórios do seu plugin deve ser assim:
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
Você adiciona a nova localidade chamando register_locale.
-
O primeiro parâmetro é obrigatório e deve ser o código do idioma.
-
name(o nome da localidade em inglês) enativeName(o nome exibido na interface do usuário) podem ser omitidos se o código do idioma existir emnames.yml, caso contrário, você também deve configurá-los. -
pluraldescreve as regras de pluralização do idioma. Dê uma olhada emplurals.rbpara inspiração. Além disso, você pode omitir este parâmetro seplurals.rbjá contiver o código do seu idioma.
# name: custom-locales
# about: An example plugin for adding new 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
O conteúdo de assets/locales/foo.js.erb é bem simples – certifique-se de substituir o código da localidade dentro desse arquivo pelo que você precisa.
//= require locales/i18n
<%= JsLocaleHelper.output_locale(:foo) %>
Arquivos de tradução em config/locales
Os arquivos config/locales/client.foo.yml e config/locales/server.foo.yml contêm as traduções que você deseja usar. Você não precisa fornecer todas as traduções necessárias pelo Discourse. As traduções em inglês serão usadas em caso de traduções ausentes.
FAQ
O Discourse não carrega minha localidade. O que está errado?
Certifique-se de que o plugin está habilitado, que você registrou a localidade corretamente e que todos os arquivos necessários existem e têm o código de idioma correto no nome do arquivo. O Discourse não carrega localidades quando detecta arquivos ausentes.
Este documento é controlado por versão - sugira alterações no github.