Jump to content

Help:Extension:Translate/Validators/nl

From mediawiki.org
This page is a translated version of the page Help:Extension:Translate/Validators and the translation is 100% complete.

Vertaalbare teksten bevatten vaak code niet vertaald moeten worden, maar zo moet blijven staan. Het invoeren van die codes kan lastig zijn door de gebruikte tekens en de complexe opbouw. De extensie Translate kan de vertalers een knop geven op de knop die het stukje code in de vertaling op de huidige cursorpositie plaatst. Als er in de vertaling die code ontbreekt, kan de extensie de vertaler waarschuwen of de vertaling gewoon verwerpen, aangezien deze vertaling meestal verplicht is om de berichten correct aan de eindgebruiker te tonen.

Bijvoorbeeld in de string,

Adapted by %{name} from a work by %{original}

zijn er twee insertables - %{name} en %{original}.

Als de vertaler deze niet bij de vertaling toevoegt, ziet de eindgebruiker die de software gebruikt geen goed bericht.

Het framework MessageValidator is toegevoegd met de bedoeling om te helpen bij het valideren van vertalingen. De validatoren worden uitgevoerd op het vertaalde bericht en op basis van de configuratie wordt de vertaler een waarschuwing of foutbericht getoond. Vertalingen met waarschuwingen kunnen nog steeds worden opgeslagen, maar vertalingen met fouten niet. Alleen een gebruiker met het recht translate-manage kan vertalingen met fouten opslaan.

Bij het configureren van een validator wordt een regex gedefinieerd om verplichte code te identificeren. De validator kan ook worden gemarkeerd als 'insertable', in dat geval wordt de vertaler een knop getoond om die code in de vertaling toe te voegen.

Het toevoegen van een aangepaste validator is nog steeds mogelijk en zal nodig zijn voor meer gespecialiseerde validaties.

Configuratie

Hieronder is een samenvatting van de validator configuratie,

VALIDATORS:
    # Voorbeeld 1
    - id: InsertableRegex
      enforce: true
      insertable: true
      params: /\$[a-z0-9]+/
      keymatch:
        - 'untranslated' # Komt overeen met de niet vertaalde sleutel
        - 
          type: 'wildcard'
          pattern: '*translated*' # Komt overeen met elke sleutel waarin de vertaling zit
    # Voorbeeld 2
    - id: InsertableRegex
      insertable: true
      params:
          regex: /(?<pre>\[)[^]]+(?<post>\]\([^)]+\))/
          display: $pre $post
          pre: $pre
          post: $post
    # Voorbeeld 3
    - class: MathJaxMessageValidator
      enforce: true
    # Voorbeeld 4
    - id: BraceBalance

In het voorbeeld hierboven,

  1. InsertableRegex is een bundelde validator die een aangepaste regex kan accepteren en validaties kan uitvoeren.
  2. MathJaxMessageValidator is een aangepaste validator class.
  3. BraceBalance is een andere bundelde validator.

VALIDATORS gebruikt een arrayformaat. Laten we kijken naar de verschillende parameters die hier worden gebruikt voor elk array item,

Parameters

Eigenschap Type Beschrijving
id string Indien een gebundelde/aangeleverde validator wordt gebruikt, de ID van de validator. Verplicht als class niet is gespecificeerd.
class string Als er gebruik wordt gemaakt van een aangepaste validator, gebruik dan deze optie in plaats van id. Specificeert de naam van de validator-class. Zie voorbeeld #3 in de bovenstaande configuratie. De optie AUTOLOAD kan worden gebruikt om de class te laden. Verplicht als id niet is gespecificeerd.
enforce boolean Of de validator moet worden afgedwongen. Indien ingesteld op waar en de validatie van de vertalingen is niet geldig, wordt een fout weergegeven die moet worden opgelost voordat de vertaling kan worden opgeslagen.
insertable boolean Of de validator ook insertable moet zijn.
keymatch array Met deze optie is het mogelijk bepaalde validaties te beperken tot bepaalde berichten. Keymatch is een array waarbij elke optie een string is of een prototype. Als het een string is wordt er een directe vergelijking gedaan met de message key. Zie voorbeeld 1 in de bovenstaande configuratie.
keymatch[i].type string Type is of regex of wildcard. Dit is de aanpak die zal worden gebruikt om te controleren of de message key overeenkomt met een bepaald patroon.
keymatch[i].pattern string Pattern is een string die wordt gebruikt voor matching.
params string / associatief array Als params als een string wordt gespecificeerd, dan wordt het gebruikt als de regex (reguliere expressie). Zie voorbeeld #1

In dit geval, indien het insertable is,

  1. display is de eerste waarde van de regex match.
  2. pre is ook de eerste waarde van de regex match.
  3. post wordt leeg gelaten.

Als params als een associatief array (zie voorbeeld 2) wordt gespecificeerd, kijk dan hieronder voor de details.

params.regex string De regex die wordt gebruikt voor validator. Moet 'named captures' gebruiken. Gebruik bij het specificeren van 'named captures' niet het symbool $ in de naam.

In voorbeeld 2, worden er twee gebruikt, pre en post.

params.display string Waarde is verplicht. De weergavewaarde voor de insertable. Hier worden de namen dan voorzien met een $ voor de naam. Zie voorbeeld 2
params.pre string De waarde vooraf voor de insertable. Waarde die voor de cursorpositie wordt ingevoegd. Hier worden de namen dan voorzien met een $ voor de naam. Indien niet gespecificeerd, wordt de weergave waarde gebruikt. Zie voorbeeld 2
params.post string De post waarde voor de insertable. Waarde die na de cursorpositie wordt ingevoegd. Hier worden de namen dan voorzien met een $ voor de naam. Zie voorbeeld 2 Indien niet gespecificeerd, is de standaard een lege string.

Gebundelde / aangeboden validatoren

Hieronder een lijst met gebundelde validatoren,

BraceBalance

ID: BraceBalance

Zorg ervoor dat het aantal open haakjes overeenkomt met het aantal gesloten haakjes in de vertaling.

Bijvoorbeeld, de volgende vertalingen zijn goed,

  • {{ }}
  • [ ]

deze zijn niet goed,

  • [ ]]
  • {{ }

Deze validator is niet insertable.

EscapeCharacter

ID: EscapeCharacter

De validator zorgt ervoor dat alleen het gespecificeerde escape-teken in een vertaling aanwezig is.

De toegestane escape-tekens kunnen worden gespecificeerd bij het toevoegen van de validator en kunnen alleen bevatten:

  • \t
  • \n
  • \'
  • \"
  • \f
  • \r
  • \a
  • \b
  • \\

Deze validator is niet insertable.

GettextNewline

ID: GettextNewline

Dit werkt specifiek voor op GetText gebaseerde berichtgroepen.

Zorg ervoor dat de vertaling hetzelfde aantal nieuwe regels heeft als het bronbericht aan het begin en het einde van de string.

GettextPlural

ID: GettextPlural

Dit werkt specifiek voor op GetText gebaseerde berichtgroepen.

Zorg ervoor dat als de bron / definitie een meervoud bevat in het formaat - foo {{PLURAL:GETTEXT|one|many}} bar, de vertaling die ook moet hebben. Op basis van de taal wordt ook gecontroleerd of de vertaling het juiste aantal meervoudige vormen heeft. Het Engels bijvoorbeeld heeft er twee, maar het Hebreeuws vier.

InsertableRegex

ID: InsertableRegex

Een generieke herbruikbare validator die kan worden gebruikt om aangepaste validaties en insertables te specificeren.

Neem bijvoorbeeld de volgende configuratie, waarbij de validator wordt gemarkeerd als insertable en wordt afgedwongen,

- id: InsertableRegex
  enforce: true
  insertable: true
  params: "/\$[a-zA-Z0-9]+/"

Gezien het volgende bronbericht - Hello $name. My name is $myName. dat wordt vertaald, moet de vertaling de parameters $name en $myName hebben. Ze zullen ook worden weergegeven als insertables om het voor vertalers gemakkelijker te maken om deze in de vertaling te gebruiken. Bij het ontbreken van deze parameters in de vertaling wordt aan de vertaler een fout getoond.

InsertableRubyVariable

ID: InsertableRubyVariable

Dit is een validator die ruby variabelen in de vertalingen overeenkomt. Intern verlengt het InsertableRegexValidator en gebruikt de volgende regex - %{[a-zA-Z_]+}. Deze validator is insertable.

Voorbeeld: %{abc}

IosVariable

ID: IosVariable

Een insertable variabele validator voor Ios. Regex wordt gebruikt van deze Rubustrings bron. Deze validator is insertable.

Voorbeeld: %@

MatchSet

ID: MatchSet

Zorg ervoor dat de vertaling aanwezig is in de lijst van waarden. Er is ook een parameter nodig - caseSensitive die true (standaard) of false kan zijn.

Bijvoorbeeld de volgende configuratie, de validator valideert het bericht met sleutel - html.dir en zorgt ervoor dat de waarden ervoor ltr of rtl kunnen zijn. Let op dat LTR of RTL geen geldige waarden zijn, omdat caseSensitive standaard waar is.

  - id: MatchSet
    enforce: true
    keymatch:
      - html.dir
    params:
      values:
        - ltr
        - rtl

ID: MediaWikiLink

Controleert of de vertaling links gebruikt die ontraden worden. Geldige links zijn die naar Special: pagina's, {{ns:special}}: of projectpagina's via MediaWiki berichten zoals {{MediaWiki:helppage-url}}:. Ook in de definitie zijn links toegestaan.

MediaWikiPageName

ID: MediaWikiPageName

Zorg ervoor dat als de bron / definitie een namspace bevat zoals {{ns:project}}:hello de vertalingen niet proberen de namespace zelf te vertalen.

MediaWikiParameter

ID: MediaWikiParameter

Dit is een validator die met wiki variabelen in de vertalingen overeenkomt. Intern verlengt het InsertableRegexValidator en gebruikt de volgende regex - /\$[1-9]/. Deze validator is insertable.

Voorbeeld: $1, $2.

MediaWikiPlural

ID: MediaWikiPlural

Zorg ervoor dat als de bron / definitie een {{PLURAL:$1|message|messages}} bevat, de vertaling die ook heeft. Het kan ook worden gebruikt als een insertable. Op basis van de taal wordt ook gecontroleerd of de vertaling het juiste aantal meervoudige vormen heeft. Het Engels bijvoorbeeld heeft er twee, maar het Hebreeuws drie.

MediaWikiTimeList

ID: MediaWikiTimeList

Zorgt voor verval-opties en IP-blok-opties die zijn gespecificeerd in de MediaWiki kern. Deze zijn meestal in het formaat,

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

De validaties zorgen ervoor dat de vertalingen exact hetzelfde aantal sleutelwaardeparen hebben. Deze validaties worden alleen uitgevoerd op berichten met sleutels,

  1. protect-expiry-options
  2. ipboptions

Newline

ID: Newline

Zorg ervoor dat de vertaling hetzelfde aantal nieuwe regels heeft als het bronbericht aan het begin van de string. Deze validator is niet insertable.

NotEmpty

ID: NotEmpty

Zorg ervoor dat de vertaling inhoud heeft en dat de inhoud niet alleen witte ruimte is. Deze validator is niet insertable.

NumericalParameter

ID: NumericalParameter

Deze validator vergelijkt de numerieke parameters door de volgende regex te gebruiken: /\$\d+/. Deze validator is insertable.

Voorbeeld: $33, $1 etc.

Printf

ID: Printf

Deze validator controleert of er in vertalingen ontbrekende en onbekende printf-formattingstekens zijn. Deze validator is insertable.

Voorbeeld: %2$f, %d etc.

PythonInterpolation

ID: PythonInterpolation

Deze validator vergelijkt python string interpolatie variabelen door de volgende regex te gebruiken: /\%(?:\([a-zA-Z0-9]*?\))?[diouxXeEfFgGcrs]/U. Deze validator is insertable.

Voorbeeld: %s, %(name)s

Replacement

ID: Replacement

Controleert of een vertaling de string search gebruikt en stelt de vertaler in plaats daarvan voor de onder replacement genoemde string te gebruiken. Deze validator is niet insertable.

  - id: Replacement
    enforce: true
    params:
      search: '{{PLURAL:'
      replace: '{PLURAL:'

SmartFormatPlural

ID: SmartFormatPlural

Dit werkt specifiek voor op SmartFormat gebaseerde berichtgroepen.

Zorg ervoor dat als de bron / definitie een meervoud bevat in het formaat - {1:test|tests}{0:message|messages}, de vertaling die ook moet hebben. Op basis van de taal wordt ook gecontroleerd of de vertaling het juiste aantal meervoudige vormen heeft. Het Engels bijvoorbeeld heeft er twee, maar het Hebreeuws vier.

UnicodePlural

ID: UnicodePlural

Zorg ervoor dat als de bron / definitie een meervoud bevat in het formaat - foo {{PLURAL|one=one|many}} bar, de vertaling die ook moet hebben. Op basis van de taal wordt ook gecontroleerd of de vertaling het juiste aantal meervoudige vormen heeft. Het Engels bijvoorbeeld heeft er twee, maar het Hebreeuws drie.

Gebruikersinterface

De gebruikersinterface is bijgewerkt om fouten en waarschuwingen te onderscheiden.

Een waarschuwing en een fout worden getoond bij een vertaling

Als er tijdens het vertalen een fout wordt opgemerkt in de vertaling, wordt de knop Vertaling opslaan uitgeschakeld, tenzij de gebruiker die vertaalt de machtiging translate-manage heeft.

Bovendien wordt er ook validering op de server uitgevoerd wanneer de gebruiker de vertaling opslaat. Dit stelt gebruikers die de machtiging translate-manage hebben, nog steeds in staat de vertaling te bewaren, zelfs als er fouten zijn.

Aangepaste validatoren

Voor bepaalde ingewikkelde validaties kan er nog steeds een aangepaste validator moeten worden geschreven. Aanpaste validatoren moeten de interface MediaWiki\Extensions\Translate\Validation\MessageValidator [1] implementeren.

Hieronder is een voorbeeld van een dergelijke validator,

<?php
// Filename: Validator.php
use MediaWiki\Extensions\Translate\Validation\MessageValidator;
use MediaWiki\Extensions\Translate\Validation\ValidationIssue;
use MediaWiki\Extensions\Translate\Validation\ValidationIssues;

/**
 * Mijn aangepaste validator
 */
class MyCustomValidator implements MessageValidator {
	
	public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
		$issues = new ValidationIssues();
	    
	    // De validatiecode komt hier te staan. Zet ValidationIssue in de ValidationIssues. Bijv.ː
	    $issue = new ValidationIssue(
			'value-not-present',                                // type
		    'invalid',                                          // subtype
			'translate-checks-value-not-present',               // message key
			[                                                   // message parameters
				[ 'PLAIN-PARAMS', $this->possibleValues ],
				[ 'COUNT', count( $this->possibleValues ) ]
			]
		);

		$issues->add( $issue );
	    
	    return $issues;
	}
}

Zie ook de volgende classes:

  1. ValidationIssues - https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/Translate/+/master/src/Validation/ValidationIssues.php
  2. ValidationIssue - https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/Translate/+/master/src/Validation/ValidationIssue.php

De toevoeging van de aangepaste validator in het configuratiebestand,

VALIDATORS:
  - class: MyCustomValidator
    enforce: true

AUTOLOAD:
  MyCustomValidator: Validator.php