Ajuda:Extensão:Traduzir/Componentes
- 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 da tradução de páginas
- Tradução de elementos não estruturados
- Gerenciamento de grupo
- Mover página traduzível
- Importar traduções via CSV
- Trabalhando com pacotes de mensagens
Administradores e desenvolvedores
A extensão Translate é extensível de várias maneiras. As maneiras mais prováveis de estender o Translate são adicionar suporte a novos formatos de arquivo (link para a seção) ou a novos grupos de mensagens (link para a seção). Às vezes, também é útil escrever uma nova verificação de mensagem (link para a seção) ou estender o Translate por meio de hooks (link para a seção). Às vezes, você pode se dar bem usando apenas a web API existente.
Além dos conceitos já mencionados, há muitos outros conceitos e classes importantes no Translate que são úteis para entender quando se trabalha com o Translate. Esta página tem o objetivo de detalhar de forma abrangente todos os componentes do Translate.
Componentes primários extensíveis
WebAPI
- Documentação detalhada sobre API
Além de ganchos e interfaces que só podem ser usados a partir do código PHP, a WebAPI fornece acesso a muitos grupos de mensagens e à tradução de informações e ações relacionadas. Ele é baseado na estrutura da API MediaWiki, com suporte a vários formatos de saída, como json e xml.
Suporte ao formato de arquivo (FFS)
- Documentação detalhada sobre suporte a formato de arquivo
A extensão Translate oferece suporte à tradução de conteúdo não wiki, como mensagens de interface de software por meio de classes de suporte a formato de arquivo (FFS). Essas classes implementam a interface FFS e abstraem a análise e a geração do conteúdo do arquivo. As classes FFS são usadas pela classe FileBasedMessageGroup por meio dos arquivos de configuração YAML.
Grupos de mensagens
- Documentação detalhada sobre grupos de mensagens
Os grupos de mensagens reúnem uma coleção de mensagens.
Eles são de vários tipos: páginas traduzíveis, arquivos SVG ou mensagens de interface de software armazenadas em vários formatos de arquivo.
Cada instância de grupo de mensagens tem um identificador, um nome e uma descrição exclusivos.
No código, os grupos de mensagens são referenciados principalmente por seu identificador, enquanto a classe MessageGroups pode ser usada para obter as instâncias de um determinado ID.
Os grupos de mensagens também podem controlar muitas ações relacionadas ao processo de tradução, como os idiomas de tradução permitidos e os estados do fluxo de trabalho do grupo de mensagens.
Normalmente, esses comportamentos retornam aos padrões globais.
As duas principais formas de registrar grupos de mensagens na Translate são o gancho TranslatePostInitGroups e a configuração YAML.
Auxiliares de tradução (helpers)
- Documentação detalhada sobre auxiliares de tradução
Os auxílios à tradução são pequenos módulos que fornecem informações úteis e necessárias para o tradutor durante a tradução. Diferentes auxílios podem fornecer sugestões de memória de tradução e tradução automática, documentação sobre a mensagem ou até mesmo algo tão básico como a definição da mensagem - o texto que precisa ser traduzido.
O Translate vem com muitas classes de ajuda. Atualmente, não há um gancho para adicionar novas classes. Cada classe que estende a classe TranslationAid só precisa implementar um método chamado getData. Ele deve retornar as informações em formato estruturado (matrizes aninhadas), que são então expostas por meio do módulo ApiQueryTranslationAids Web API. Além da classe de ajuda, são necessárias alterações para realmente usar os dados fornecidos no(s) editor(es) de tradução.
Um caso especial de auxílio à tradução são os serviços de tradução automática. Consulte a próxima seção.
Serviços da Web
A adição de mais serviços de tradução automática pode ser feita facilmente estendendo a classe TranslationWebService.
Consulte o subdiretório webservices para obter exemplos.
Você precisará de algumas informações básicas para implementar essa classe:
- URL para o serviço
- Quais pares de idiomas são suportados
- Se eles usam códigos de idioma diferentes dos códigos usados no MediaWiki
- Se o serviço precisa de uma chave de API
Quando você tem essas informações, é fácil escrever os métodos de mapCode, doPairs, doRequest.
Você deve usar o TranslationWebServiceException para sinalizar erros.
Os erros são registrados e rastreados automaticamente e, se o serviço cair, ele será automaticamente suspenso para evitar solicitações desnecessárias.
As sugestões serão exibidas automaticamente no editor de tradução por meio da classe MachineTranslationAid e do módulo WebAPI ApiQueryTranslationAids.
Consulte também $wgTranslateTranslationServices para ver como esses serviços são registrados.
Verificadores de mensagens
Usamos computadores para detectar erros simples nas traduções, como parênteses desequilibrados ou a não utilização de um espaço reservado para variáveis. Esses verificadores podem emitir avisos que são exibidos no editor de tradução (em constante atualização). Qualquer aviso presente na tradução salva também marcará a tradução como desatualizada (fuzzy, no jargão). Cada grupo de mensagens determina quais verificações serão usadas.
Outros componentes principais
Coleta de mensagens
A coleção de mensagens fornece acesso à lista de mensagens de um grupo de mensagens. Ele é usado para carregar um conjunto de idiomas para um determinado grupo em um determinado idioma. Ele oferece funcionalidade de paginação e filtragem.
Atualmente, há uma limitação de que todas as mensagens em uma coleção devem estar no mesmo namespace. Isso impede a criação de grupos agregados que incluam grupos com mensagens em diferentes namespaces.
Aqui está um pequeno exemplo de como usar a coleção de mensagens para carregar todas as traduções em finlandês do grupo "core" e imprimir as dez primeiras:
$group = MessageGroups::getGroup( 'core' );
$collection = $group->initCollection( 'fi' );
$collection->filter( 'ignored' );
$collection->filter( 'translated', false );
$collection->loadTranslations();
$collection->slice( 0, 10 );
foreach ( $collection->keys() as $mkey => $title ) {
echo $title->getPrefixedText() . ': ';
echo $collection[$mkey]->translation() . "\n\n";
}
Mensagem
Classes de utilidade
Localizador de fontes
Ao renderizar gráficos bitmap, são necessárias fontes adequadas para cada idioma ou script.
Para resolver esse problema, foi criada a classe FCFontFinder.
Ele usa o comando fc-match do pacote fontconfig (portanto, isso não funciona no Windows) para encontrar uma fonte adequada.
Muitas fontes adicionais devem ser instaladas no servidor para que isso seja útil.
Ele pode retornar um caminho para um arquivo de fonte ou o nome da fonte, o que for mais adequado.
Cache de grupo de mensagens
As mensagens dos grupos de mensagens baseados em arquivo são armazenadas em arquivos CDB. Cada idioma de cada grupo tem seu próprio arquivo de cache CDB. O motivo dos arquivos de cache é duplo.
Primeiro, eles fornecem acesso constante e eficiente aos dados da mensagem, evitando a análise potencialmente cara de arquivos em vários locais. Por exemplo, a lista de chaves de mensagens para cada grupo pode ser carregada com eficiência ao reconstruir um índice de mensagens.
O segundo motivo é que os arquivos de cache são usados junto com as traduções no wiki para processar alterações de mensagens externas. Ter um instantâneo do estado das traduções nos arquivos e no wiki (esperamos que seja consistente nesse ponto) nos permite deduzir automaticamente se algo foi alterado no wiki ou externamente e fazer escolhas inteligentes, deixando apenas conflitos reais (mensagens alteradas externamente e no wiki desde o último instantâneo) para serem resolvidos pelo administrador de tradução.
Utilitários de grupos de mensagens
Índice de mensagens
O índice de mensagens é um mapa reverso de todas as mensagens conhecidas. Ele fornece uma resposta eficiente às perguntas "esta é uma mensagem conhecida" e "a quais grupos essa mensagem pertence". Ele precisa ser rápido para pesquisas de chaves de mensagens únicas e múltiplas. Vários backends diferentes são implementados, com diferentes compensações.
- O arquivo serializado é rápido de analisar, mas não oferece acesso aleatório e é muito ineficiente em termos de memória quando o número de chaves aumenta.
- O arquivo CDB ocupa mais espaço em disco, mas oferece acesso aleatório e pesquisas razoavelmente rápidas, enquanto o carregamento de tudo na memória é mais lento.
- O back-end do banco de dados oferece acesso aleatório eficiente e carga total à custa de pesquisas individuais um pouco mais lentas. Ele também não precisa gravar em nenhum arquivo, evitando problemas de permissão.
- Também é fornecido o backend de memória (memcached, apc), que pode ser uma alternativa útil ao backend de banco de dados em configurações de vários servidores para reduzir a contenção do banco de dados.
O índice de mensagens não oferece suporte a reconstruções incrementais. Assim, a reconstrução do índice se torna relativamente intensiva em termos de recursos quando o número de grupos de mensagens e chaves de mensagens aumenta. Dependendo do grupo de mensagens, isso pode envolver a análise de arquivos ou a realização de consultas a bancos de dados e o carregamento das definições, o que pode consumir muita memória. A reconstrução do índice de mensagens é acionada em vários locais no Translate e, por padrão, é executada imediatamente durante a solicitação. À medida que fica mais lento, ele pode ser atrasado por meio da fila de trabalho do MediaWiki e executado fora das solicitações da Web.
Tabela de mensagens =
Tabela de metadados
Revtag
Código de estatísticas
Combinador/modificador de strings
Ttmserver (memória de tradução)
- Documentação detalhada em Memórias de tradução.
- Postagem no blog sobre o histórico desse recurso em [blog de http://laxstrom.name/blag/2012/09/07/translation-memory-all-wikimedia-wikis/ Niklas].
Ttmserver é o nome da interface de memória de tradução.
Ele oferece suporte a vários back-ends para inserção e consulta de sugestões de tradução.
O código está localizado no diretório ttmserver.
Coisas diversas: Integração RC, preferências, caixa de ferramentas, trabalhos
Layout do repositório
Os arquivos na raiz do repositório incluem:
- Arquivos de extensões padrão do MediaWiki, como
Translate.php, traduções e alguns arquivos de documentação, comohooks.txteREADME, que incluem notas de alteração. - As principais classes de tradução, como
MessageCollectioneMessage, e alguns utilitários diversos ainda não foram movidos para utils.
O restante do código está em subdiretórios. As partes principais têm seus próprios subdiretórios:
api– para código WebAPIffs– para o código de suporte ao formato de arquivomessagegroups– para grupos de mensagensscripts– para scripts de linha de comandotag– para o código de tradução da páginattmserver– para código de memória de traduçãospecials– para todas as páginas especiaistests– para todos os testes de unidade PHP
A maior parte do código está em utils. Algumas pastas adicionais para não códigos:
data– para arquivos de dados diversoslibs– para dependências de bibliotecas agrupadasresources– para todos os css, scripts e imagenssql– para todas as definições de tabelas SQL