Kontroller och korrigeringar

Anpassade automatiska korrigeringar

Du kan också implementera egna automatiska korrigeringar utöver standardkorrigeringarna och inkludera dem i AUTOFIX_LIST.

De automatiska korrigeringarna är kraftfulla, men kan också orsaka skador. Var försiktig när du skriver en.

Till exempel skulle följande automatiska korrigering ersätta varje förekomst av strängen foo i en översättning med bar:

from django.utils.translation import gettext_lazy

from weblate.trans.autofixes.base import AutoFix


class ReplaceFooWithBar(AutoFix):
    """Replace foo with bar."""

    name = gettext_lazy("Foobar")

    def fix_single_target(self, target, source, unit):
        if "foo" in target:
            return target.replace("foo", "bar"), True
        return target, False

För att installera anpassade kontroller, ange en fullständig sökväg till Python-klassen i AUTOFIX_LIST, se Anpassade kvalitetskontroller, tillägg, automatiska förslag och automatiska korrigeringar.

Anpassa beteende med hjälp av flaggor

Du kan finjustera Weblates beteende med hjälp av flaggor. Flaggorna ger översättarna visuell feedback och hjälper dem att förbättra sina översättningar. Flaggorna sammanförs från följande källor:

Flaggorna är separerade med kommatecken; om de har parametrar separeras de med kolon. Du kan använda citattecken för att inkludera blanksteg eller specialtecken i strängen. Till exempel:

placeholders:"special:value":"other value", regex:.*

Både enkla och dubbla citattecken accepteras, specialtecken undviks med hjälp av backslash:

placeholders:"quoted \"string\"":'single \'quoted\''
placeholders:r"^#*"

För att verifiera att översättare inte ändrar rubriken i ett Markdown-dokument. En felaktig kontroll utlöses om strängen ### Index översätts till # Indice.

placeholders:r"\]\([^h].*?\)"

För att säkerställa att interna länkar inte översätts (dvs. att [test](../checks) inte blir [test](../chequeos).

Flaggorna som definieras på en högre nivå kan kasseras med hjälp av syntaxen discard:NAME. Om en komponent till exempel är konfigurerad till safe-html kan du lägga till discard:safe-html till strängflaggorna för att hoppa över den för just denna sträng.

Här är en lista över flaggor som för närvarande accepteras:

rst-text

Behandla en text som ett reStructuredText-dokument, påverkar Oförändrad översättning. Aktiverar reStructuredText-syntaxfel och Inkonsekvent reStructuredText.

bbcode-text

Behandla en text som ett BBCode-dokument (Bulletin Board Code), påverkar Oförändrad översättning.

dos-eol

Använder DOS-radslutmarkörer istället för Unix-markörer (\r\n istället för \n).

read-only

Strängen är skrivskyddad och bör inte redigeras i Weblate, se Skrivskyddade strängar.

terminology

Används i Ordlista. Kopierar strängen till alla språk i ordlistan så att den kan användas konsekvent i alla översättningar. Användbar även i kombination med read-only, till exempel i produktnamn.

priority:N

Strängens prioritet. Strängar med högre prioritet visas först för översättning. Standardprioriteten är 100. Ju högre prioritet en sträng har, desto tidigare erbjuds den för översättning.

max-length:N

Begränsa den maximala längden för en sträng till N tecken, se Maximal längd av översättningen.

xml-text

Behandla text som XML-dokument, påverkar XML-syntax och XML-markering.

font-family:NAME

Definiera teckensnittsfamilj för renderingskontroller, se Hantera teckensnitt.

font-weight:WEIGHT

Definiera teckensnittsvikt för renderingskontroller, se Hantera teckensnitt.

font-size:SIZE

Definiera teckenstorlek för renderingskontroller, se Hantera teckensnitt.

font-spacing:SPACING

Definiera teckenavstånd för renderingkontroller, se Hantera teckensnitt.

icu-flags:FLAGS

Definiera flaggor för att anpassa beteendet för kvalitetskontrollen ICU MessageFormat.

icu-tag-prefix:PREFIX

Ange ett obligatoriskt prefix för XML-taggar för kvalitetskontrollen ICU MessageFormat.

placeholders:NAME:NAME2:...

Platshållarsträngar som förväntas i översättningen, se Platshållare.

replacements:FROM:TO:FROM2:TO2...

Ersättningar som ska utföras vid kontroll av resulterande textparametrar (till exempel i Maximal storlek för översättningen eller Maximal längd av översättningen). Det vanligaste användningsområdet för detta är att expandera placerbara objekt för att säkerställa att texten passar även med långa värden, till exempel: ersättningar:%s:"John Doe".

variants:SOURCE

Markera denna sträng som en variant av strängen med matchande källa. Se Strängvarianter.

regex:REGEX

Reguljära uttryck för att matcha översättning, se Reguljärt uttryck.

discard:NAME

Kasserar flaggan som definierats på en högre nivå.

forbidden

Indikerar förbjuden översättning i en ordlista, se Förbjudna översättningar.

strict-same

Gör så att Oförändrad översättning undviker att använda de inbyggda ordundantagen.

strict-format

Gör formatkontroller obligatoriska även för pluralformer med ett enda värde, se Formaterade strängar.

check-glossary

Aktivera kvalitetskontrollen Överensstämmer inte med ordlistan.

angularjs-format

Aktivera kvalitetskontrollen AngularJS interpolationssträng.

c-format

Aktivera kvalitetskontrollen C-format.

c-sharp-format

Aktivera kvalitetskontrollen C#-format.

es-format

Aktivera kvalitetskontrollen EMAScript-mallitteraler.

i18next-interpolation

Aktivera kvalitetskontrollen i18next-interpolation.

icu-message-format

Aktivera kvalitetskontrollen ICU MessageFormat.

java-printf-format

Aktivera kvalitetskontrollen Java-format.

java-format

Aktivera kvalitetskontrollen Java Message-format.

javascript-format

Aktivera kvalitetskontrollen JavaScript-format.

lua-format

Aktivera kvalitetskontrollen Lua-format.

object-pascal-format

Aktivera kvalitetskontrollen Object Pascal-format.

percent-placeholders

Aktivera kvalitetskontrollen Procentplatshållare.

perl-brace-format

Aktivera kvalitetskontrollen Perl-parentesformat.

perl-format

Aktivera kvalitetskontrollen Perl-format.

php-format

Aktivera kvalitetskontrollen PHP-format.

python-brace-format

Aktivera kvalitetskontrollen Python brace-format.

python-format

Aktivera kvalitetskontrollen Python-format.

qt-format

Aktivera kvalitetskontrollen Qt-format.

qt-plural-format

Aktivera kvalitetskontrollen Qt pluralformat.

ruby-format

Aktivera kvalitetskontrollen Ruby-format.

scheme-format

Aktivera kvalitetskontrollen Schemaformat.

vue-format

Aktivera kvalitetskontrollen Vue I18n-formatering.

md-text

Behandla texten som ett Markdown-dokument och tillhandahåll Markdown-syntaxmarkering i översättningstextområdet. Aktiverar kvalitetskontroller Markdown-länkar, Markdown-referenser och Markdown-syntax.

case-insensitive

Justera kontrollernas beteende så att de inte skiljer mellan versaler och gemener. Påverkar för närvarande endast Platshållare kvalitetskontroll.

safe-html

Aktivera kvalitetskontrollen Osäker HTML.

url

Strängen ska endast bestå av en URL. Aktivera kvalitetskontrollen URL.

ignore-all-checks

Ignorera alla kvalitetskontroller.

fluent-source-inner-html

Aktivera kvalitetskontrollen Fluent källkod för inre HTML.

fluent-source-syntax

Aktivera kvalitetskontrollen Fluent källsyntax.

icu-message-format

Aktivera kvalitetskontrollen ICU MessageFormat syntax.

ignore-bbcode

Hoppa över BBCode-märkning kvalitetskontrollen.

ignore-duplicate

Hoppa över kvalitetskontrollen På varandra följande identiska ord.

ignore-check-glossary

Hoppa över kvalitetskontrollen Överensstämmer inte med ordlistan.

ignore-double-space

Hoppa över kvalitetskontrollen Dubbla mellanslag.

ignore-fluent-parts

Hoppa över kvalitetskontrollen Fluent-delar.

ignore-fluent-references

Hoppa över kvalitetskontrollen Fluent-referenser.

ignore-fluent-target-inner-html

Hoppa över kvalitetskontrollen Fluent- översättning, inre HTML.

ignore-fluent-target-syntax

Hoppa över kvalitetskontrollen Fluent översättningssyntax.

ignore-angularjs-format

Hoppa över kvalitetskontrollen AngularJS interpolationssträng.

ignore-automattic-components-format

Hoppa över kvalitetskontrollen Formatering av Automattic-komponenter.

ignore-c-format

Hoppa över kvalitetskontrollen C-format.

ignore-c-sharp-format

Hoppa över kvalitetskontrollen C#-format.

ignore-es-format

Hoppa över kvalitetskontrollen EMAScript-mallitteraler.

ignore-i18next-interpolation

Hoppa över kvalitetskontrollen i18next-interpolation.

ignore-icu-message-format

Hoppa över kvalitetskontrollen ICU MessageFormat.

ignore-java-printf-format

Hoppa över kvalitetskontrollen Java-format.

ignore-java-format

Hoppa över kvalitetskontrollen Java Message-format.

ignore-javascript-format

Hoppa över kvalitetskontrollen JavaScript-format.

ignore-lua-format

Hoppa över kvalitetskontrollen Lua-format.

ignore-object-pascal-format

Hoppa över kvalitetskontrollen Object Pascal-format.

ignore-percent-placeholders

Hoppa över kvalitetskontrollen Procentplatshållare.

ignore-perl-brace-format

Hoppa över kvalitetskontrollen Perl-parentesformat.

ignore-perl-format

Hoppa över kvalitetskontrollen Perl-format.

ignore-php-format

Hoppa över kvalitetskontrollen PHP-format.

ignore-python-brace-format

Hoppa över kvalitetskontrollen Python brace-format.

ignore-python-format

Hoppa över kvalitetskontrollen Python-format.

ignore-qt-format

Hoppa över kvalitetskontrollen Qt-format.

ignore-qt-plural-format

Hoppa över kvalitetskontrollen Qt pluralformat.

ignore-ruby-format

Hoppa över kvalitetskontrollen Ruby-format.

ignore-scheme-format

Hoppa över kvalitetskontrollen Schemaformat.

ignore-vue-format

Hoppa över kvalitetskontrollen Vue I18n-formatering.

ignore-translated

Hoppa över kvalitetskontrollen Har blivit översatt.

ignore-inconsistent

Hoppa över kvalitetskontrollen Inkonsekvent.

ignore-rst-references

Hoppa över kvalitetskontrollen Inkonsekvent reStructuredText.

ignore-kashida

Hoppa över kvalitetskontrollen Använder kashida.

ignore-md-link

Hoppa över kvalitetskontrollen Markdown-länkar.

ignore-md-reflink

Hoppa över kvalitetskontrollen Markdown-referenser.

ignore-md-syntax

Hoppa över kvalitetskontrollen Markdown-syntax.

ignore-max-length

Hoppa över kvalitetskontrollen Maximal längd av översättningen.

ignore-max-size

Hoppa över kvalitetskontrollen Maximal storlek för översättningen.

ignore-escaped-newline

Hoppa över kvalitetskontrollen Felaktig matchning \n.

ignore-end-colon

Hoppa över kvalitetskontrollen Omatchat kolon.

ignore-end-ellipsis

Hoppa över kvalitetskontrollen Omatchad ellips.

ignore-end-exclamation

Hoppa över kvalitetskontrollen Omatchat utropstecken.

ignore-end-stop

Hoppa över kvalitetskontrollen Omatchad slutpunkt.

ignore-end-interrobang

Hoppa över kvalitetskontrollen Omatchade interrobang.

ignore-end-question

Hoppa över kvalitetskontrollen Omatchat frågetecken.

ignore-end-semicolon

Hoppa över kvalitetskontrollen Omatchat semikolon.

ignore-newline-count

Hoppa över kvalitetskontrollen Radbrytningarna matchar inte.

ignore-plurals

Hoppa över kvalitetskontrollen Saknade pluralformer.

ignore-kabyle-characters

Hoppa över kvalitetskontrollen Icke-standardtecken i kabyliska.

ignore-placeholders

Hoppa över kvalitetskontrollen Platshållare.

ignore-prohibited-initial-character

Hoppa över kvalitetskontrollen Förbjuden inledande bokstav.

ignore-punctuation-spacing

Hoppa över kvalitetskontrollen Skiljeteckensavstånd.

ignore-regex

Hoppa över kvalitetskontrollen Reguljärt uttryck.

ignore-rst-syntax

Hoppa över kvalitetskontrollen reStructuredText-syntaxfel.

ignore-reused

Hoppa över kvalitetskontrollen Återanvänd översättning.

ignore-same-plurals

Hoppa över kvalitetskontrollen Identiska pluralformer.

ignore-begin-newline

Hoppa över kvalitetskontrollen Inledande radbryt.

ignore-begin-space

Hoppa över kvalitetskontrollen Inledande mellanslag.

ignore-end-newline

Hoppa över kvalitetskontrollen Avslutande radbryt.

ignore-end-space

Hoppa över kvalitetskontrollen Avslutande mellanslag.

ignore-same

Hoppa över kvalitetskontrollen Oförändrad översättning.

ignore-safe-html

Hoppa över kvalitetskontrollen Osäker HTML.

ignore-url

Hoppa över kvalitetskontrollen URL.

ignore-xml-tags

Hoppa över kvalitetskontrollen XML-markering.

ignore-xml-invalid

Hoppa över kvalitetskontrollen XML-syntax.

ignore-zero-width-space

Hoppa över kvalitetskontrollen Mellanrum utan bredd.

ignore-ellipsis

Hoppa över kvalitetskontrollen Ellips.

ignore-fluent-source-inner-html

Hoppa över kvalitetskontrollen Fluent källkod för inre HTML.

ignore-fluent-source-syntax

Hoppa över kvalitetskontrollen Fluent källsyntax.

ignore-icu-message-format

Hoppa över kvalitetskontrollen ICU MessageFormat syntax.

ignore-long-untranslated

Hoppa över kvalitetskontrollen Sedan länge oöversatt.

ignore-multiple-failures

Hoppa över kvalitetskontrollen Flera fallerande kontroller.

ignore-unnamed-format

Hoppa över kvalitetskontrollen Flera namnlösa variabler.

ignore-optional-plural

Hoppa över kvalitetskontrollen Opluraliserad.

Observera

Generellt sett heter regeln ignore-* för alla kontroller, med hjälp av dess identifierare, så du kan använda detta även för dina egna kontroller.

Dessa flaggor förstås både i Komponentkonfiguration-inställningar, per källstränginställningar och i själva översättningsfilen (till exempel i GNU gettext).

Platsbaserade flaggor

Vissa flaggor läggs till i strängar som standard, baserat på deras placering. Detta innebär att vissa kontroller aktiveras automatiskt beroende på var strängen används.

  • rst-text: Denna flagga läggs automatiskt till strängar i reStructuredText-filer om platsförlängningen är .rst.

  • md-text: Denna flagga läggs automatiskt till strängar i Markdown-filer om platsförlängningen är .md eller .markdown.

Genomförande av kontroller

De tvingande kontrollerna kan inte ignoreras och markera strängen som Behöver redigeras (se Översättningsstatus). Detta förhindrar översättare från att dölja sådana kontroller.

Råd

Att aktivera kontrollen aktiverar den inte automatiskt. Vissa kontroller måste aktiveras genom att lägga till motsvarande flagga till sträng- eller komponentflaggorna.

Detta används bäst med kontroller som kan orsaka allvarliga problem när de används, såsom kontroller för Formaterade strängar. Det rekommenderas inte att använda detta för stilkontroller som Oförändrad översättning, eftersom det ibland är rimligt att avfärda dessa.

Åtagandepolicy kan sedan användas för att undanta strängar som behöver redigeras från att läggas in i versionshanteringen.

Hantera teckensnitt

Råd

Typsnitt som laddas upp till Weblate används enbart för Maximal storlek för översättningen-kontrollen och har ingen inverkan på Weblates användargränssnitt.

Kontrollen Maximal storlek för översättningen som används för att beräkna dimensionerna för den renderade texten kräver att teckensnittet laddas in i Weblate och väljs med hjälp av en översättningsflagga (se Anpassa beteende med hjälp av flaggor).

Weblate-verktyget för typsnittshantering i Fonts under menyn Operations i ditt översättningsprojekt erbjuder ett gränssnitt för att ladda upp och hantera typsnitt. TrueType- eller OpenType-typsnitt kan laddas upp, typsnittsgrupper kan skapas och dessa kan användas i kontrollen.

Med teckensnittsgrupperna kan du definiera olika teckensnitt för olika språk, vilket vanligtvis behövs för icke-latinska språk:

../_images/font-group-edit.webp

Fontgrupperna identifieras med namn, som inte får innehålla blanktecken eller specialtecken, så att de enkelt kan användas i kontrolldefinitionen:

../_images/font-group-list.webp

Fontfamilj och stil känns igen automatiskt efter uppladdning:

../_images/font-edit.webp

Du kan ladda ett antal typsnitt i Weblate:

../_images/font-list.webp

För att använda teckensnitten för att kontrollera stränglängden, skicka lämpliga flaggor (se Anpassa beteende med hjälp av flaggor). Du kommer troligen att behöva följande:

max-size:500 / max-size:300:5

Definierar maximal bredd i pixlar och, valfritt, maximalt antal rader (ordbrytning tillämpas).

font-family:ubuntu

Definierar vilken teckensnittsgrupp som ska användas genom att ange dess identifierare.

font-size:22

Definierar teckenstorlek i pixlar.

Skriva egna checkar

Ett brett utbud av kvalitetskontroller är inbyggda (se Kvalitetskontroller), men de täcker kanske inte allt du vill kontrollera. Listan över utförda kontroller kan justeras med CHECK_LIST, och du kan också lägga till egna kontroller.

  1. Underklass till weblate.checks.Check

  2. Ställ in några attribut.

  3. Implementera antingen metoden check (om du vill hantera pluralformer i din kod) eller metoden check_single (som gör det åt dig).

Några exempel:

För att installera anpassade kontroller, ange en fullständig sökväg till Python-klassen i CHECK_LIST, se Anpassade kvalitetskontroller, tillägg, automatiska förslag och automatiska korrigeringar.

Kontrollerar att översättningstexten inte innehåller ”foo”

Detta är en ganska enkel kontroll som bara kontrollerar om översättningen saknar strängen ”foo”.

"""Simple quality check example."""

from django.utils.translation import gettext_lazy

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 = gettext_lazy("Foo check")

    # Description for failing check
    description = gettext_lazy("Your translation is foo")

    # Real check code
    def check_single(self, source, target, unit):
        return "foo" in target

Kontrollera att pluralformer i den tjeckiska översättningen skiljer sig åt

Kontrollera med hjälp av språkinformationen att de två pluralformerna på tjeckiska inte är identiska.

"""Quality check example for Czech plurals."""

from django.utils.translation import gettext_lazy

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 = gettext_lazy("Foo check")

    # Description for failing check
    description = gettext_lazy("Your translation is foo")

    # Real check code
    def check_target_unit(self, sources, targets, unit):
        if unit.translation.language.is_base({"cs"}):
            return targets[1] == targets[2]
        return False

    def check_single(self, source, target, unit) -> bool:
        """We don't check target strings here."""
        return False