Help:Extension:Translate/Validators/nl
Vertalers (Hoofdpagina help )
- Hoe te vertalen
- Beste manieren
- Statistieken en rapportage
- Kwaliteitscontrole
- Berichtengroep statussen
- Offline vertalen
- Woordenlijst
Vertalingenbeheerders
- Een pagina voorbereiden voor vertaling
- Paginavertaling beheren
- Vertaling van ongestructureerde elementen
- Groepenbeheer
- Vertaalbare pagina verplaatsen
- Vertalingen uit CSV importeren
- Met berichtenbundels werken
Systeembeheerders en ontwikkelaars
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,
InsertableRegex
is een bundelde validator die een aangepaste regex kan accepteren en validaties kan uitvoeren.MathJaxMessageValidator
is een aangepaste validator class.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,
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, |
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
MediaWikiLink
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,
- protect-expiry-options
- 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.
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:
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
De toevoeging van de aangepaste validator in het configuratiebestand,
VALIDATORS:
- class: MyCustomValidator
enforce: true
AUTOLOAD:
MyCustomValidator: Validator.php