Jump to content

Ajuda:Extensão:Traduzir/Grupo exemplo de configuração

From mediawiki.org
This page is a translated version of the page Help:Extension:Translate/Group configuration example and the translation is 100% complete.

Este tutorial é para desenvolvedores e administradores avançados de tradução. Este tutorial explica como criar novos arquivos de configuração para a tradução de mensagens da interface do software, detalhando os aspectos práticos. Ele deve ser usado em conjunto com o group configuration reference manual e os desenvolvedores da extensão Translate terão prazer em ajudá-lo com qualquer dúvida que você tenha depois de trabalhar com este tutorial.

Pré-requisitos

Este tutorial foi criado com base na revisão da extensão Translate r97948 (2011-09-23).

Este tutorial descreve o processo de ativação da tradução para algumas partes do projeto MyBB. Você pode seguir etapas semelhantes para adicionar outros projetos/arquivos para tradução. Algumas coisas são específicas para translatewiki.net e, naturalmente, você deve usar o que for relevante para o seu caso, em vez de seguir cegamente as etapas deste tutorial.

Passo 1: Verificar o código fonte

Vamos verificar o código-fonte do MyBB usando $wgTranslateGroupRoot como diretório de trabalho, que é /home/betawiki/projects/ neste exemplo.

cd /home/betawiki/projects svn co http://svn.mybboard.net/mybb/branches/1.6-stable mybb

Dependendo da sua configuração, talvez seja necessário executá-lo como root ou outro usuário antes de adicionar arquivos de projeto ou arquivos de configuração. Em translatewiki.net, o usuário é "betawiki", portanto, o comando acima é executado como:

sudo -u betawiki svn co http://svn.mybboard.net/mybb/branches/1.6-stable mybb

Agora precisamos localizar os arquivos que contêm as mensagens. Eles estão no subdiretório mybb/inc/languages/, e você pode encontrar as mensagens de origem em inglês no subdiretório english/.

Então, vamos começar com mybb/inc/languages/english/index.lang.php, o primeiro arquivo de localização do nosso projeto.

Etapa 2: Formatar

Em nosso diretório de instalação do MediaWiki, em src/FileFormatSupport/FileFormatFactory.php, podemos ver as classes para suporte a formatos de arquivo, que são usadas para mapear grupos de mensagens para arquivos de localização de cada projeto. É preciso pesquisar um pouco para ver de fato que tipos de formatos são suportados. Portanto, decidimos tentar usar o formato FlatPhp primeiro e ver se ele funciona bem com nosso arquivo PHP.

Portanto, temos um arquivo para mapear e escolhemos a classe de formato para ele. Agora precisamos escrever uma configuração de grupo. Esse é um arquivo YAML.

Em index , você pode encontrar um link para Group configuration . Vamos começar com o arquivo mínimo fornecido como exemplo para a seção BASIC.

BASIC:
  id: out-freecol
  label: FreeCol (open source game)
  description: "{{int:bw-desc-freecol}}"
  namespace: NS_FREECOL
  class: FileBasedMessageGroup

Podemos seguir em frente e apenas substituir o texto do exemplo com nossos próprios valores.

BASIC:
  id: out-mybb
  label: MyBB
  description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
  namespace: NS_MYBB
  class: FileBasedMessageGroup

A descrição aceita toda a sintaxe do wikitexto. Um truque interessante mostrado no exemplo original é que você pode torná-lo traduzível usando {{int:message-key}}. Mas então você precisa definir o texto padrão na página [[MediaWiki:Message-key]]. Observe que o ID do namespace é adicionado por meio de sua constante, consulte como usar namespaces personalizados.

Precisamos de mais uma coisa: a seção FILES. Partindo novamente do exemplo fornecido na documentação:

FILES:
  format: FlatPhp
  sourcePattern: %GROUPROOT%/inc/languages/messages_%CODE%.properties
  targetPattern: commonist/messages_%CODE%.properties

Hmm, %CODE% é o código do idioma, como en por padrão. Por enquanto, não queremos alterar a estrutura de diretórios usada pelo MyBB. Em vez disso, podemos usar um recurso criado para essa finalidade: o "mapa de códigos", que nos permite mapear os códigos de idioma de cada idioma para os identificadores usados pelo nosso projeto.

Então terminamos com:

FILES:
  format: FlatPhp
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
  codeMap:
    en: english
    "no": norwegian
Cuidado, você precisará colocar aspas no código de linguagem no, pois alguns analisadores YAML o interpretam como booleano.

Basicamente, isso diz que, para o código en, o %CODE% acima será english, que é o diretório dos arquivos de mensagens em inglês. A chave targetPattern geralmente é a mesma que sourcePattern, mas sem o prefixo %GROUPROOT% prefixo.

Bom. Agora vamos salvar esse arquivo em algum lugar, por exemplo, na mesma pasta em que LocalSettings.php está armazenado, com o nome MyBB.yaml. O arquivo completo é:

BASIC:
  id: out-mybb
  label: MyBB
  description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
  namespace: NS_MYBB
  class: FileBasedMessageGroup

FILES:
  format: FlatPhp
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
  codeMap:
    en: english
    "no": norwegian

Então precisamos informar à nossa extensão para ler o arquivo. Adicione a seguinte linha ao arquivo LocalSettings.php:

$wgTranslateGroupFiles[] = "MyBB.yaml";

Depois de fazer isso, siga as instruções em Help:Extension:Translate/Gerenciamento de grupos para executar o script processMessageChanges.php.

Então, vamos fazer login, verificar se o usuário tem o direito de "translate-manage" configurado corretamente e ir para [[Special:ManageMessageGroups]].

Você deve ver isto:

No valid namespace defined, got NS_MYBB.
Backtrace: <...>

Neste caso, lendo a documentação com cuidado, você deve ter identificado a necessidade de adicionar a seguinte linha ao arquivo LocalSettings.php para registrar o novo espaço de nomes no MediaWiki:

wfAddNamespace( 1246, 'MyBB' );

Neste exemplo, é usado 1246, mas você pode escolher qualquer número de namespace livre que precisar. Para a extensão Translate, recomendamos que você use os números pares do namespace 1246200-1298.

Se agora você recarregar a página especial ManageMessageGroups, deverá ver uma linha que diz:

MyBB This message group has not been imported previously.

Clique no link MyBB. Depois disso, você verá a lista de mensagens que estão nesse arquivo. Se você estiver satisfeito com os resultados, clique em "Execute" (Executar).

Depois de clicar em "Execute" (Executar), o arquivo é processado e você verá um resultado semelhante a este:

Imported new version of page MyBB:L\x5b'boardstats'\x5d/en.
Imported new version of page MyBB:L\x5b'new posts'\x5d/en.
Imported new version of page MyBB:L\x5b'no new posts'\x5d/en.
...
Cache rebuild.
All done!

Se o arquivo for muito grande, você precisará executar php Translate/scripts/sync-group.php --group=out-mybb --lang=en primeiro, pois a interface da Web só pode importar um número limitado de mensagens de uma vez devido ao limite de tempo limite do PHP; se você atingir esse limite, poderá clicar em um botão na parte inferior da página para importar as mensagens restantes.

Passo 3: Adicionar outro arquivo

Agora vamos adicionar um segundo arquivo para o MyBB para tradução. Há duas maneiras de fazer isso:

Abordagem 1: Adicionando um novo arquivo YAML

Basta adicionar um novo arquivo YAML e salvá-lo com um novo nome. Em seguida, chame-o de dentro do LocalSettings.php e siga todas as etapas acima. O arquivo terá a seguinte aparência:

BASIC:
  id: out-mybb-showthread
  label: MyBB
  description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
  namespace: NS_MYBB
  class: FileBasedMessageGroup

FILES:
  format: FlatPhp
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/showthread.lang.php
  targetPattern: mybb/inc/languages/%CODE%/showthread.lang.php
  codeMap:
    en: english
    "no": norwegian

Como é óbvio no exemplo acima, você precisa usar um ID diferente para esse novo grupo.

Embora seja fácil, essa abordagem não se adapta a centenas de unidades de tradução diferentes (ou seja, arquivos mapeados para seu grupo de mensagens). Em algum momento, você precisa atualizar algum valor, e fazer isso para todos esses arquivos não é divertido. Felizmente, há outra maneira, mostrada abaixo.

Abordagem 2: sintaxe do TEMPLATE

A ideia é extrair valores comuns em um modelo. Em seguida, cada grupo pegará os valores ausentes do modelo e não haverá necessidade de repeti-los para cada grupo.

Vamos voltar ao exemplo do MyBB. Digamos que você queira incluir index.lang.php, showthread.lang.php, global.lang.php nas mensagens traduzíveis. O arquivo YAML precisa ser atualizado desta forma:

TEMPLATE:
  BASIC:
    description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
    namespace: NS_MYBB
    class: FileBasedMessageGroup

  FILES:
    format: FlatPhp
    codeMap:
      en: english
      "no": norwegian
---
BASIC:
  id: out-mybb-index
  label: MyBB - index page

FILES:
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
---
BASIC:
  id: out-mybb-showthread
  label: MyBB - show thread

FILES:
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/showthread.lang.php
  targetPattern: mybb/inc/languages/%CODE%/showthread.lang.php
---
BASIC:
  id: out-mybb-global
  label: MyBB - global messages

FILES:
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/global.lang.php
  targetPattern: mybb/inc/languages/%CODE%/global.lang.php
Observe que cada grupo deve ser separado por uma linha contendo três traços --- sem espaços iniciais e finais! Caso contrário, o arquivo YAML não será analisado corretamente.

Como é óbvio no exemplo acima, codeMap é definido apenas uma vez; a adição e a remoção de arquivos é tão fácil quanto adicionar ou remover uma seção no arquivo acima.

Agora, se você acessar a página especial ManageMessageGroups, verá três itens como este:

MyBB global messages: This message group has not been imported previously.
MyBB index page: This message group has not been imported previously.
MyBB show thread: This message group has not been imported previously.

Se houver muitos arquivos a serem incluídos no seu projeto, pode ser uma boa ideia escrever um script que gere o arquivo YAML para você. Um exemplo pode ser encontrado em svn:trunk/translatewiki/StatusNet/genStatusNet-plugins.php.

Passo 4: Grupo agregado

Adicionar um grupo agregado e definir os arquivos de mensagem como seus subgrupos tem dois benefícios:

  • Menos trabalho para os tradutores selecionarem diferentes grupos de mensagens, especialmente para trabalhos de manutenção. Os tradutores podem simplesmente abrir o grupo agregado e traduzir ou atualizar tudo o que precisa ser atualizado ou traduzido para todos os grupos.
  • As estatísticas podem ser relatadas no nível do grupo agregado, ou seja, em todo o projeto.

Para definir um grupo agregado, é necessário adicionar a seguinte seção logo após a seção TEMPLATE e antes da definição de subgrupos individuais:

---
BASIC:
  id: out-mybb-0-all # O id deve ser classificado antes de todos os subgrupos que possui.
  label: MyBB
  meta: yes
  class: AggregateMessageGroup # Não retirado da predefinição

GROUPS:
  - out-mybb-* # Poderíamos especificá-los um por um, mas o curinga é mais fácil.

Isso nos deixa bem próximos, mas ainda falta uma etapa. Neste ponto, se você acessar Special:Translate, verá o grupo pai do MyBB (e ele de fato funciona!), mas também os subgrupos listados como grupos separados :(

Existe uma maneira de corrigir isto. Adicione a seguinte linha ao seu arquivo LocalSettings.php:

$wgTranslateGroupStructure['/^out-mybb/'] = array( 'mybb' );
Um grupo agregado expandido (consulte collapsed)

Isso pega todos os grupos cujo ID corresponde ao padrão fornecido, mostra o primeiro grupo e oculta todo o resto abaixo desse primeiro grupo. É um pouco feio, mas funciona. Essa construção suporta apenas duas camadas, mesmo que os grupos agregados possam fazer parte de grupos agregados.

Se você acessar [[Special:Translate]] agora, verá apenas o grupo principal MyBB listado. Além disso, você verá um link "Show 3 subgroups" (Mostrar 3 subgrupos); ao clicar nele, você verá os nomes dos subgrupos.

Consulte o manual sobre TAGS e outras seções que não foram abordadas neste documento.

Passo 5: Limpeza

Os arquivos YAML de projetos suportados por translatewiki.net são confirmados no repositório translatewiki em Git .

No translatewiki.net, as linhas de LocalSettings.php estão, na verdade, em TranslateSettings.php. O Sandboxwiki em translatewiki.net não tem um arquivo TranslateSettings.php, por isso adicionamos tudo em LocalSettings.php.