Ajuda:Extensão:Traduzir/Validadores
- 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
As cadeias de caracteres traduzíveis geralmente contêm marcações que devem ser mantidas como estão na tradução. Digitar tais marcações pode ser um processo lento e difícil, dado que caracteres especiais estão quase sempre presentes nelas. A extensão Translate pode fornecer aos tradutores um botão que, ao ser clicado, insere o trecho de marcação na tradução para a posição atual do cursor. Além disso, se uma tradução não tiver essa marcação específica, a extensão Translate poderá avisar o tradutor ou simplesmente rejeitar a tradução, pois essa marcação geralmente é obrigatória para exibir as mensagens corretamente para o usuário final.
Por exemplo, na cadeia de caracteres
Adapted by %{name} from a work by %{original}
, há dois inseríveis - %{name} e %{original}.
Se o tradutor não os adicionar à sua tradução, o usuário final que estiver usando o software não verá uma mensagem adequada.
A estrutura MessageValidator foi adicionada com a intenção de ajudar a validar as traduções.
Os validadores são executados na mensagem traduzida e, com base na configuração, uma mensagem de aviso ou erro é mostrada ao tradutor.
As traduções com avisos ainda podem ser salvas, mas as que apresentam erros não podem.
Somente um usuário com permissão translate-manage pode salvar traduções com erros.
Ao configurar um validador, uma regex é definida para identificar a marcação que é obrigatória. O validador também pode ser marcado como inserível e, nesse caso, será exibido um botão para o tradutor adicionar essa marcação à tradução.
A adição de validadores personalizados ainda é possível e será necessária para validações mais especializadas.
Configuração
A seguir, uma configuração resumida do validador,
VALIDATORS:
# Exemplo 1
- id: InsertableRegex
enforce: true
insertable: true
params: /\$[a-z0-9]+/
keymatch:
- 'untranslated' # Corresponde à chave não traduzida diretamente
-
type: 'wildcard'
pattern: '*translated*' # Corresponde a qualquer chave que contenha a tradução
# Exemplo 2
- id: InsertableRegex
insertable: true
params:
regex: /(?<pre>\[)[^]]+(?<post>\]\([^)]+\))/
display: $pre $post
pre: $pre
post: $post
# Exemplo 3
- class: MathJaxMessageValidator
enforce: true
# Exemplo 4
- id: BraceBalance
No exemplo acima,
InsertableRegexé um validador integrado que pode aceitar uma regex personalizada e executar validações.MathJaxMessageValidatoré uma classe de validador personalizada.BraceBalanceé outro validador incluído no pacote.
VALIDATORS usa um formato de matriz.
Vamos dar uma olhada nos vários parâmetros que estão sendo usados aqui em cada item da matriz,
Parâmetros ==
| Imóvel | Tipo | Descrição |
|---|---|---|
| id | texto | Caso um validador empacotado/pré-fornecido esteja sendo usado, a ID do validador. Obrigatório se class não for especificado.
|
| class | texto | Se um validador personalizado estiver sendo usado, use essa opção em vez de id. Especifica o nome da classe do validador. Consulte o exemplo nº 3 na configuração acima. A opção AUTOLOAD pode ser usada para carregar a classe. Obrigatório se id não for especificado.
|
| enforce | boolean | Se o validador deve ser aplicado. Se definido como true, e uma tradução falhar na validação, será exibido um erro que deverá ser corrigido para que a tradução seja salva. |
| insertable | boolean | Se o validador também deve ser um inserível. |
| keymatch | array | Com essa opção, é possível limitar determinadas validações a determinadas mensagens. Keymatch é uma matriz em que cada opção é uma string ou um prototype Se for uma cadeia de caracteres, será feita uma comparação direta com a chave da mensagem. Veja o exemplo nº 1 na configuração acima. |
| keymatch[i].type | texto | O tipo é regex ou curinga. Essa é a abordagem que será usada para verificar se a chave da mensagem corresponde a um determinado padrão. |
| keymatch[i].pattern | texto | O padrão é uma cadeia de caracteres que será usada para correspondência. |
| params | string / matriz associativa | Se params for especificado como uma string, ele será usado como regex. Veja o exemplo nº 1
Nesse caso, se insertable for verdadeiro,
Se params for especificado como uma matriz associativa (veja o exemplo nº 2), consulte abaixo para obter mais detalhes. |
| params.regex | texto | O regex a ser usado para o validador. Deve usar capturas nomeadas. Ao especificar capturas nomeadas, não use o símbolo $ no nome.
No exemplo nº 2, são usadas duas capturas nomeadas - |
| params.display | texto | Valor obrigatório. O valor de exibição do inserível. Capturas nomeadas prefixadas com $ são usadas aqui. Consulte o exemplo nº 2. |
| params.pre | texto | O valor pré para o inserível. Valor inserido antes da posição do cursor. Capturas nomeadas prefixadas com $ são usadas aqui. Se não for especificado, será definido como o valor de exibição. Consulte o exemplo nº 2. |
| params.post | texto | O valor do post para o inserível. Valor inserido após a posição do cursor. Capturas nomeadas prefixadas com $ são usadas aqui. Consulte o exemplo nº 2. Se não for especificado, o padrão é uma string vazia. |
Validadores pré-fornecidos/em pacote
Veja a seguir uma lista de validadores agrupados,
BraceBalance
ID: BraceBalance
Garante que o número de chaves/colchetes abertos corresponda ao número de chaves/colchetes fechados na tradução.
Por exemplo, as seguintes traduções seriam aprovadas,
{{ }}[ ]
enquanto isso, o seguinte falharia,
[ ]]{{ }
Esse validador não pode ser marcado como inserível.
EscapeCharacter
ID: EscapeCharacter
O validador garante que somente o caractere de escape especificado esteja presente em uma tradução.
Os caracteres de escape permitidos podem ser especificados ao adicionar o validador e só podem incluir,
\t\n\'\"\f\r\a\b\\
Esse validador não pode ser inserido.
GettextNewline
ID: GettextNewline
Isso funciona especificamente para grupos de mensagens baseados em GetText.
Garante que a tradução tenha o mesmo número de novas linhas que a mensagem original no início e no final da string.
GettextPlural
ID: GettextPlural
Isso funciona especificamente em grupos de mensagens baseados em GetText.
Garante que, se a fonte/definição contiver um plural no formato - foo {{PLURAL:GETTEXT|one|many}} bar, a tradução também deverá contê-lo.
Com base no idioma, ele também verifica se a tradução tem o número correto de formas plurais.
Por exemplo, o inglês tem dois, mas o hebraico tem quatro.
InsertableRegex
ID: InsertableRegex
Um validador genérico reutilizável que pode ser usado para especificar validações e inserções personalizadas.
Por exemplo, veja a seguinte configuração em que o validador é marcado como inserível e aplicado,
- id: InsertableRegex
enforce: true
insertable: true
params: "/\$[a-zA-Z0-9]+/"
Dada a seguinte mensagem de origem - Hello $name. My name is $myName. que está sendo traduzida, a tradução deve ter os parâmetros - $name e $myName. Eles também serão exibidos como inseríveis para facilitar o uso na tradução pelos tradutores. A ausência desses parâmetros causará a exibição de um erro para o tradutor.
InsertableRubyVariable
ID: InsertableRubyVariable
Esse é um validador que corresponde às variáveis rubi nas traduções.
Internamente, ele estende InsertableRegexValidator e usa a seguinte regex - %{[a-zA-Z_]+}.
Esse validador pode ser inserido.
Exemplo:
%{abc}
IosVariable
ID: IosVariable
Um validador de variável inserível para IOS. Regex é usado dessa fonte Rubustrings. Esse validador pode ser inserido.
Exemplo:
%@
MatchSet
ID: MatchSet
Garante que a tradução esteja presente na lista de valores.
Também recebe um parâmetro - caseSensitive que pode ser true ("padrão") ou false.
Por exemplo, na configuração a seguir, o validador validará a mensagem com a chave - html.dir e garantirá que os valores para ela possam ser ltr ou rtl.
Observe que LTR ou RTL não serão valores válidos, pois caseSensitive é verdadeiro por padrão.
- id: MatchSet
enforce: true
keymatch:
- html.dir
params:
values:
- ltr
- rtl
MediaWikiLink
ID: MediaWikiLink
Verifica se a tradução usa links que não são recomendados.
Os links válidos são aqueles que se vinculam às páginas Special:, {{ns:special}}: ou às páginas do projeto por meio de mensagens do MediaWiki, como {{MediaWiki:helppage-url}}:.
Também são permitidos links na definição.
MediaWikiPageName
ID: MediaWikiPageName
Garante que, se a fonte/definição contiver um namespace como {{ns:project}}:hello, as traduções feitas não tentarão traduzir os próprios namespaces.
MediaWikiParameter
ID: MediaWikiParameter
Esse é um validador que corresponde aos parâmetros wiki nas traduções.
Internamente, ele estende InsertableRegexValidator e usa a seguinte regex - /\$[1-9]/.
Esse validador pode ser inserido.
Exemplo:
$1, $2.
MediaWikiPlural
ID: MediaWikiPlural
Garante que, se o código-fonte/definição contiver um {{PLURAL:$1|message|messages}}, a tradução também deverá contê-lo.
Ele também pode ser usado como um inserível.
Com base no idioma, ele também verifica se a tradução tem o número correto de formas plurais.
Por exemplo, o inglês tem dois, mas o hebraico tem três.
MediaWikiTimeList
ID: MediaWikiTimeList
Fornece validações para opções de expiração e opções de bloqueio de IP especificadas no núcleo do MediaWiki. Geralmente, eles estão no formato,
indefinite:indefinite,3 hours:3 hours,12 hours:12 hours,24 hours:24 hours,31 hours:31 hours,36 hours:36 hours,48 hours:48 hours,60 hours:60 hours,72 hours:72 hours,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,2 years:2 years,3 years:3 years,infinite:indefinite
As validações garantem que as traduções tenham exatamente o mesmo número de pares de valores-chave. Essas validações são executadas somente em mensagens com chaves,
- protect-expiry-options
- ipboptions
Newline
ID: Newline
Garante que a tradução tenha o mesmo número de novas linhas que a mensagem de origem/definição no "início da string". Esse validador não pode ser inserido.
NotEmpty
ID: NotEmpty
Garante que a tradução tenha algum conteúdo, e que esse conteúdo não seja apenas espaço em branco. Esse validador não pode ser inserido.
NumericalParameter
ID: NumericalParameter
Esse validador corresponde a parâmetros numéricos usando a seguinte regex: /\$\d+/.
Esse validador pode ser inserido.
Exemplo:
$33, $1 etc.
Printf
ID: Printf
Esse validador verifica se há caracteres de formatação printf ausentes e desconhecidos nas traduções. Esse validador pode ser inserido.
Exemplo:
%2$f, %d etc.
PythonInterpolation
ID: PythonInterpolation
Esse validador corresponde às variáveis de interpolação de strings do python usando a seguinte regex: /\%(?:\([a-zA-Z0-9]*?\))?[diouxXeEfFgGcrs]/U.
Esse validador pode ser inserido.
Exemplo:
%s, %(name)s
Replacement
ID: Replacement
Verifica se uma tradução está usando a string search e, em vez disso, sugere que o tradutor use a string mencionada em replacement.
Esse validador não pode ser inserido.
- id: Replacement
enforce: true
params:
search: '{{PLURAL:'
replace: '{PLURAL:'
SmartFormatPlural
ID: SmartFormatPlural
Isso funciona especificamente em grupos de mensagens baseados em SmartFormat.
Garante que, se a fonte/definição contiver um plural no formato - {1:test|tests}{0:message|messages}, a tradução também deverá contê-lo.
Com base no idioma, ele também verifica se a tradução tem o número correto de formas plurais.
Por exemplo, o inglês tem dois, mas o hebraico tem quatro.
UnicodePlural
ID: UnicodePlural
Garante que, se a fonte/definição contiver um plural no formato - foo {{PLURAL|one=one|many}} bar, a tradução também deverá contê-lo.
Com base no idioma, ele também verifica se a tradução tem o número correto de formas plurais.
Por exemplo, o inglês tem dois, mas o hebraico tem três.
Interface do usuário
A interface do usuário foi atualizada para diferenciar entre erros e avisos.

Durante a tradução, se for observado um erro na tradução, o botão Salvar tradução será desativado, a menos que o usuário que estiver traduzindo tenha permissão de translate-manage.
Além disso, a validação também é feita no servidor quando o usuário está salvando a tradução.
Isso ainda permitirá que os usuários que têm a permissão translate-manage salvem a tradução, mesmo que ela tenha erros.
Validadores personalizados
Algumas validações complicadas ainda podem exigir a criação de um validador personalizado.
Os validadores personalizados devem implementar a interface MediaWiki\Extensions\Translate\Validation\MessageValidator [1].
Abaixo está um exemplo de um validador personalizado,
<?php
// Filename: Validator.php
use MediaWiki\Extensions\Translate\Validation\MessageValidator;
use MediaWiki\Extensions\Translate\Validation\ValidationIssue;
use MediaWiki\Extensions\Translate\Validation\ValidationIssues;
/**
* Meu validador personalizado
*/
class MyCustomValidator implements MessageValidator {
public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
$issues = new ValidationIssues();
// O código de validação fica aqui. Empurre ValidationIssue para dentro de ValidationIssues. Por exemplo:
$issue = new ValidationIssue(
'value-not-present', // tipo
'invalid', // subtipo
'translate-checks-value-not-present', // tecla de mensagem
[ // parâmetros de mensagem
[ 'PLAIN-PARAMS', $this->possibleValues ],
[ 'COUNT', count( $this->possibleValues ) ]
]
);
$issues->add( $issue );
return $issues;
}
}
Veja também as seguintes classes,
ValidationIssues- https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/Translate/+/master/src/Validation/ValidationIssues.phpValidationIssue- https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/Translate/+/master/src/Validation/ValidationIssue.php
Adicione o validador personalizado no arquivo de configuração,
VALIDATORS:
- class: MyCustomValidator
enforce: true
AUTOLOAD:
MyCustomValidator: Validator.php