Verificações e correções¶
Correções automáticas personalizadas¶
Você também pode implementar sua própria correção automática, além das padrão e incluí-las em AUTOFIX_LIST.
As correções automáticas são poderosas, mas também podem causar danos; tenha cuidado ao escrever um.
Por exemplo, a correção automática a seguir iria substituir cada ocorrência do texto foo, em uma tradução com bar:
#
# Copyright © 2012 - 2020 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
from django.utils.translation import gettext_lazy as _
from weblate.trans.autofixes.base import AutoFix
class ReplaceFooWithBar(AutoFix):
"""Replace foo with bar."""
name = _("Foobar")
def fix_single_target(self, target, source, unit):
if "foo" in target:
return target.replace("foo", "bar"), True
return target, False
Para instalar verificações personalizadas, forneça um caminho totalmente qualificado para a classe Python em AUTOFIX_LIST, veja Verificações de qualidade personalizadas, extensões e correções automáticas.
Personalizando o comportamento¶
Você pode ajustar o comportamento de Weblate (principalmente de verificações) para cada texto fonte (na revisão de textos fontes, veja Additional info on source strings) ou em Component configuration (Marcadores de tradução). Alguns formatos de arquivo também permitem especificar sinalizadores diretamente no formato (veja Formatos de arquivos suportados).
Os sinalizadores são separados por vírgulas, os parâmetros são separados por caracteres de dois pontos. Você pode usar aspas para incluir espaços em branco ou caracteres especiais no texto. Por exemplo:
placeholders:"special:value":"other value", regex:.*
Aqui está uma lista de sinalizadores atualmente aceitos:
rst-textTrata um texto como um documento reStructuredText, afeta Tradução não alterada.
md-textTrata o texto como um documento de Markdown.
dos-eolUsa marcadores de ponta de linha do DOS em vez dos Unix (
\r\nem vez de\n).urlO texto deve consistir apenas em uma URL.
safe-htmlO texto deve fazer uso seguro de HTML, veja HTML inseguro.
read-onlyA texto é somente leitura e não deve ser editado no Weblate, veja Textos somente leitura.
priority:NPrioridade do texto. Os textos de maior prioridade são apresentados primeiro para tradução. A prioridade padrão é 100, a maior prioridade que um texto tem, mais cedo é oferecido para tradução.
max-length:NLimita o comprimento máximo de um texto a caracteres N, veja Comprimento máximo da tradução.
xml-textTrata o texto como documento XML, afeta Sintaxe XML e Marcação XML.
font-family:NOMEDefine a família de fontes para verificações da renderização, veja Gerenciando fontes.
font-weight:PESODefine o peso da fonte para verificações da renderização, veja Gerenciando fontes.
font-size:TAMANHODefine o tamanho da fonte para verificações da renderização, veja Gerenciando fontes.
font-spacing:ESPAÇAMENTODefine o espaçamento da fonte para verificações da renderização, veja Gerenciando fontes.
placeholders:NOMETextos de espaço reservado esperados na tradução, veja Espaços reservados.
replacements:FROM:TO:FROM2:TO2...Substituições para realizar ao verificar parâmetros de texto resultantes (por exemplo, em Tamanho máximo da tradução ou Comprimento máximo da tradução). O caso de uso típico para isso é expandir objetos colocáveis (placeables) para garantir que o texto se encaixe mesmo com nomes longos, por exemplo:
replacements:%s:"John Doe".regex:EXPRESSÃO REGULARExpressão regular para corresponder à tradução; veja Expressão regular.
python-format,c-format,php-format,python-brace-format,javascript-format,c-sharp-format,java-format,java-messageformat,auto-java-messageformat,qt-format,qt-plural-format,ruby-format,vue-formatTrata todas os textos como sendo de formato, afeta Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Textos formatados, Tradução não alterada.
strict-sameFaz com que “Tradução não alterada” evite usar a lista negra de palavras embutidas, veja Tradução não alterada.
ignore-bbcodeIgnora a verificação de qualidade “Marcação de BBcode”.
ignore-duplicateIgnora a verificação de qualidade “Palavras consecutivas duplicadas”.
ignore-double-spaceIgnora a verificação de qualidade “Espaço duplo”.
ignore-angularjs-formatIgnora a verificação de qualidade “Texto de interpolação AngularJS”.
ignore-c-formatIgnora a verificação de qualidade “Formato C”.
ignore-c-sharp-formatIgnora a verificação de qualidade “Formato C#”.
ignore-es-formatIgnora a verificação de qualidade “Literais de modelo de ECMAScript”.
ignore-i18next-interpolationIgnora a verificação de qualidade “Interpolação de i18next”.
ignore-java-formatIgnora a verificação de qualidade “Formato Java”.
ignore-java-messageformatIgnora a verificação de qualidade “MessageFormat do Java”.
ignore-javascript-formatIgnora a verificação de qualidade “Formato JavaScript”.
ignore-percent-placeholdersIgnora a verificação de qualidade “Espaços reservados de porcentagem”.
ignore-perl-formatIgnora a verificação de qualidade “Formato Perl”.
ignore-php-formatIgnora a verificação de qualidade “Formato PHP”.
ignore-python-brace-formatIgnora a verificação de qualidade “Formato de chaves Python”.
ignore-python-formatIgnora a verificação de qualidade “Formato Python”.
ignore-qt-formatIgnora a verificação de qualidade “Formato Qt”.
ignore-qt-plural-formatIgnora a verificação de qualidade “Formato de plural Qt”.
ignore-ruby-formatIgnora a verificação de qualidade “Formato Ruby”.
ignore-vue-formatIgnora a verificação de qualidade “Formatação Vue I18n”.
ignore-translatedIgnora a verificação de qualidade “Foi traduzido”.
ignore-inconsistentIgnora a verificação de qualidade “Inconsistente”.
ignore-kashidaIgnora a verificação de qualidade “Letra Kashida usada”.
ignore-md-linkIgnora a verificação de qualidade “Links Markdown”.
ignore-md-reflinkIgnora a verificação de qualidade “Referências Markdown”.
ignore-md-syntaxIgnora a verificação de qualidade “Sintaxe Markdown”.
ignore-max-lengthIgnora a verificação de qualidade “Comprimento máximo da tradução”.
ignore-max-sizeIgnora a verificação de qualidade “Tamanho máximo da tradução”.
ignore-escaped-newlineIgnora a verificação de qualidade “n não correspondente”.
ignore-end-colonIgnora a verificação de qualidade “Caractere de dois pontos não correspondente”.
ignore-end-ellipsisIgnora a verificação de qualidade “Reticências não correspondentes”.
ignore-end-exclamationIgnora a verificação de qualidade “Ponto de exclamação não correspondente”.
ignore-end-stopIgnora a verificação de qualidade “Ponto final não correspondente”.
ignore-end-questionIgnora a verificação de qualidade “Ponto de interrogação não correspondente”.
ignore-end-semicolonIgnora a verificação de qualidade “ponto e vírgula não correspondente”.
ignore-newline-countIgnora a verificação de qualidade “Quebras de linha descasadas”.
ignore-pluralsIgnora a verificação de qualidade “Faltam plurais”.
ignore-placeholdersIgnora a verificação de qualidade “Espaços reservados”.
ignore-punctuation-spacingIgnora a verificação de qualidade “Espaçamento de pontuação”.
ignore-regexIgnora a verificação de qualidade “Expressão regular”.
ignore-same-pluralsIgnora a verificação de qualidade “Mesmos plurais”.
ignore-begin-newlineIgnora a verificação de qualidade “Nova linha no início”.
ignore-begin-spaceIgnora a verificação de qualidade “Espaços no início”.
ignore-end-newlineIgnora a verificação de qualidade “Nova linha no final”.
ignore-end-spaceIgnora a verificação de qualidade “Espaço no final”.
ignore-sameIgnora a verificação de qualidade “Tradução não alterada”.
ignore-safe-htmlIgnora a verificação de qualidade “HTML inseguro”.
ignore-urlIgnora a verificação de qualidade “URL”.
ignore-xml-tagsIgnora a verificação de qualidade “Marcação XML”.
ignore-xml-invalidIgnora a verificação de qualidade “Sintaxe XML”.
ignore-zero-width-spaceIgnora a verificação de qualidade “Espaço com largura zero”.
ignore-ellipsisIgnora a verificação de qualidade “Reticências”.
ignore-long-untranslatedIgnora a verificação de qualidade “Não traduzido a muito tempo”.
ignore-multiple-failuresIgnora a verificação de qualidade “Várias verificações com falha”.
ignore-unnamed-formatIgnora a verificação de qualidade “Várias variáveis sem nome”.
ignore-optional-pluralIgnora a verificação de qualidade “Não pluralizado”.
Nota
Geralmente, a regra é chamada de ignore-* para qualquer verificação, usando seu identificador, para que você possa usá-la mesmo para suas verificações personalizadas.
Esses sinalizadores são entendidos tanto nas configurações de Component configuration, por configurações de textos fonte quanto no próprio arquivo de tradução (por exemplo, no GNU gettext).
Forçando verificações¶
Novo na versão 3.11.
Você pode configurar uma lista de verificações que não podem ser ignoradas definindo Verificações forçadas em Component configuration. Cada verificação listada não pode ser ignorada na interface do usuário e qualquer texto com falha nesta verificação é marcado como Precisa de edição (veja Translation states).
Gerenciando fontes¶
Novo na versão 3.7.
The Tamanho máximo da tradução check used to calculate dimensions of the rendered text needs font to be loaded into Weblate and selected using a translation flag (see Personalizando o comportamento).
Weblate font management tool in Fonts under the Manage menu of your translation project provides interface to upload and manage fonts. TrueType or OpenType fonts can be uploaded, set up font-groups and use those in the check.
Os grupos de fontes permitem definir diferentes fontes para diferentes idiomas, o que é normalmente necessário para idiomas não-latinos:
O grupos de fontes são identificados pelo nome, que não pode conter espaços ou caracteres especiais, de modo que ele pode ser facilmente utilizado na definição da verificação:
A família de fontes e o estilo são automaticamente reconhecidos após carregá-los:
Você pode ter um número de fontes carregadas para Weblate:
Para usar as fontes para verificar o comprimento do texto, passe-o os sinalizadores apropriados (veja Personalizando o comportamento). Você provavelmente precisará dos seguintes:
max-size:500Define o máximo de largura.
font-family:ubuntuDefine o grupo de fontes para usar especificando seu identificador.
font-size:22Define o tamanho da fonte.
Escrevendo as próprias verificações¶
Uma ampla gama de verificações de qualidade são incorporadas, (veja Verificações de qualidade), embora eles possam não cobrir tudo o que você deseja verificar. A lista de verificações realizadas pode ser ajustada usando CHECK_LIST e você também pode adicionar verificações personalizadas.
Crie uma subclasse de weblate.checks.Check
Defina alguns atributos.
Implemente o método
check(se você quiser lidar com plurais em seu código) ou o métodocheck_single(que faz isso por você).
Alguns exemplos:
Para instalar verificações personalizadas, forneça um caminho totalmente qualificado para a classe Python em CHECK_LIST, veja Verificações de qualidade personalizadas, extensões e correções automáticas.
Verificando se o texto de tradução não contém “foo”¶
Esta é uma verificação bastante simples que apenas verifica se a tradução não possui o texto “foo”.
#
# Copyright © 2012 - 2020 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""Simple quality check example."""
from django.utils.translation import gettext_lazy as _
from weblate.checks.base import TargetCheck
class FooCheck(TargetCheck):
# Used as identifier for check, should be unique
# Has to be shorter than 50 characters
check_id = "foo"
# Short name used to display failing check
name = _("Foo check")
# Description for failing check
description = _("Your translation is foo")
# Real check code
def check_single(self, source, target, unit):
return "foo" in target
Verificando se os plurais de texto de tradução tcheca são diferentes¶
Usa as informações de idioma para verificar se as duas formas plurais no idioma tcheco não são os mesmos.
#
# Copyright © 2012 - 2020 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""Quality check example for Czech plurals."""
from django.utils.translation import gettext_lazy as _
from weblate.checks.base import TargetCheck
class PluralCzechCheck(TargetCheck):
# Used as identifier for check, should be unique
# Has to be shorter than 50 characters
check_id = "foo"
# Short name used to display failing check
name = _("Foo check")
# Description for failing check
description = _("Your translation is foo")
# Real check code
def check_target_unit(self, sources, targets, unit):
if self.is_language(unit, ("cs",)):
return targets[1] == targets[2]
return False
def check_single(self, source, target, unit):
"""We don't check target strings here."""
return False