Ajuda:Extensão:Traduzir/Grupo exemplo de configuração
- Como traduzir
- Melhores práticas
- Estatísticas e relatórios
- Garantia de qualidade
- Estados de grupo de mensagens
- Tradução off-line
- Glossário
Administradores de tradução
- Como preparar uma página para tradução
- Administração de tradução de páginas
- Tradução de elementos não estruturados
- Gerenciamento de grupo
- Move translatable page
- Import translations via CSV
- Working with message bundles
Administradores e desenvolvedores
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
- Instalar o MediaWiki
- Instalar a extensão Translate e
- Configurar ela.
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
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
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
--- 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' );

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.