Adicionar um novo locale de plugin

Geralmente, a melhor maneira 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 em inglês da localidade) e nativeName (o nome exibido na interface do usuário) podem ser omitidos se o código do idioma existir em names.yml.

  • fallbackLocale é o código do idioma que deve ser usado como fallback para traduções ausentes e regras de pluralização.

# 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")
\u003clocale\u003e.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
\u003c%= JsLocaleHelper.output_locale(:es_MX) %\u003e
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 recorrer a 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 em inglês da localidade) e nativeName (o nome exibido na interface do usuário) podem ser omitidos se o código do idioma existir em names.yml, caso contrário, você também deve defini-los.

  • plural descreve as regras de pluralização do idioma. Dê uma olhada em plurals.rb para inspiração. Além disso, você pode omitir este parâmetro se plurals.rb já contiver seu código de 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 }
  }
)
\u003clocale\u003e.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
\u003c%= JsLocaleHelper.output_locale(:foo) %\u003e
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.

message_format/\u003clocale\u003e.js

lib/javascripts/locale/message_format/foo.js contém as regras de pluralização usadas pelo cliente. As regras devem ser as mesmas que você usou no método register_locale. Dê uma olhada nos arquivos em lib/javascripts/locale para alguma inspiração. Você pode omitir este arquivo se esse diretório já contiver um arquivo para o seu código de idioma.

moment_js/\u003clocale\u003e.js

lib/javascripts/locale/moment_js/foo.js contém o arquivo de localidade usado pelo moment.js. Dê uma olhada nos arquivos em vendor/assets/javascripts/moment-locale para alguma inspiração. Você pode omitir este arquivo se esse diretório já contiver um arquivo para o seu código de idioma.

moment_js_timezones/\u003clocale\u003e.js

lib/javascripts/locale/moment_js_timezones/foo.js contém o arquivo de localidade usado no dropdown de fuso horário. Dê uma olhada nos arquivos em vendor/assets/javascripts/moment-timezone-names-locale para alguma inspiração. Este arquivo é opcional.


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.


\u003csmall\u003eEste documento é controlado por versão - sugira alterações no github.\u003c/small\u003e

17 curtidas

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 curtidas