Help:Extensie:Translate/Translation memories
De Translate extensie translation memory ondersteunt ElasticSearch. Het doel van deze pagina is het helpen bij de installatie van ElasticSearch, en de specificaties gedetailleerd te beschrijven.
Anders dan andere hulpmiddelen voor vertalen, bijvoorbeeld externe machine vertaal services, wordt het vertaalgeheugen steeds bijgewerkt door nieuwe vertalingen in uw wiki. Geavanceerde zoeken in vertalingen is ook beschikbaar via Special:SearchTranslations als u er voor kiest om ElasticSearch te gebruiken.
Vergelijken
De database backend wordt standaard gebruikt: het heeft geen afhankelijkheden en heeft geen configuratie nodig. De database backend kan niet worden gedeeld door meerdere wiki's en het schaalt niet bij grote hoeveelheden vertaalde tekst. Vandaar dat wij ook ElasticSearch als backend ondersteunen. Het is ook mogelijk om ander vertaalgeheugens te gebruiken als hun web API open is. Anders dan ElasticSearch worden remote backends niet bijgewerkt met vertalingen in de huidige wiki.
Database | API op afstand | ElasticSearch | |
---|---|---|---|
Standaard ingeschakeld | Ja | Nee | Nee |
Kan meerdere bronnen hebben | Nee | Ja | Ja |
Bijgewerkt met lokale vertalingen | Ja | Nee | Ja |
Heeft directe toegang tot de database | Ja | Nee | Nee |
Toegang tot bron | Tekstverwerker | Link | Tekstverwerker indien lokaal of link |
Kan gedeeld worden als een API-service | Ja | Ja | Ja |
Performance | Schaalt niet erg goed | Onbekend | Redelijk |
Vereisten
ElasticSearch backend
ElasticSearch is relatief gemakkelijk te configureren. Als het niet in uw distributie package zit, kunt u het downloaden van hun website. U moet dan ook de Elastica extensie downloaden. Lees eerst puppet/modules/elasticsearch/files/elasticsearch.yml voor de specifieke configuratie die nodig is voor Translate.
Het script bootstrap smaakt de benodigde schema's. Als u de ElasticSearch backend gebruikt met meerdere wiki's, zullen ze standaard het vertaalgeheugen delen, tenzij u de configuratie parameter index gebruikt.
Bij een upgrade naar een volgende hoofdversie van ElasticSearch (het eerste nummer wordt dan gewijzigd), bevelen wij aan om de notities bij de release te lezen en de documentatie over het upgraden.
Installatie
Na het zorgen dat aan de vereisten is voldaan, is het nodig om de configuratie van de installatie aan te passen en daarna de bootstrap uit te voeren.
Configuratie
Alle hulpmiddelen voor vertalen inclusief vertaalgeheugen worden ingesteld met de instelling $wgTranslateTranslationServices
.
Het primaire vertaalgeheugen backend moet de key TTMServer
gebruiken.
De primaire backend ontvangt bijgewerkte vertalingen en wordt gebruikt door Special:SearchTranslations.
Voorbeeld van configuratie TTMServers:
Standaard configuratie |
---|
$wgTranslateTranslationServices['TTMServer'] = array(
'database' => false, // Passed to wfGetDB
'cutoff' => 0.75,
'type' => 'ttmserver',
'public' => false,
);
|
Remote API configuratie |
$wgTranslateTranslationServices['example'] = array(
'url' => 'http://example.com/w/api.php',
'displayname' => 'example.com',
'cutoff' => 0.75,
'timeout' => 3,
'type' => 'ttmserver',
'class' => 'RemoteTTMServer',
);
|
ElasticSearch backend configuratie |
In dit geval wordt de enkele back-end service zowel voor lezen als schrijven gebruikt.
$wgTranslateTranslationServices['TTMServer'] = array(
'type' => 'ttmserver',
'class' => 'ElasticSearchTTMServer',
'cutoff' => 0.75,
/*
* See http://elastica.io/getting-started/installation.html
* See https://github.com/ruflin/Elastica/blob/8.x/src/Client.php
'config' => This will be passed to \Elastica\Client
*/
);
|
ElasticSearch meervoudige backends configuratie. Wordt sinds oktober 2023 niet meer ondersteunɖ. |
// Definieert de standaard service voor lees-opdrachten
// Staat toe dat snel van backend wordt gewisseld
// De optie 'mirrors' wordt sinds MLEB 2023.10 niet meer ondersteund.
$wgTranslateTranslationDefaultService = 'cluster1';
$wgTranslateTranslationServices['cluster1'] = array(
'type' => 'ttmserver',
'class' => 'ElasticSearchTTMServer',
'cutoff' => 0.75,
/*
* Definieert de lijst services waar de schrijfopdrachten ook aan worden doorgegeven.
* Alleen "writable" services zijn hier toegestaan.
*/
'mirrors' => [ 'cluster2' ],
'config' => [ 'servers' => [ 'host' => 'elastic1001.cluster1.mynet' ] ]
);
$wgTranslateTranslationServices['cluster2'] = array(
'type' => 'ttmserver',
'class' => 'ElasticSearchTTMServer',
'cutoff' => 0.75,
/*
* als "cluster2" is gedefinieerd als de standaardservice zal het beginnen met schrijfopdrachten ook door te geven aan "cluster1".
*/
'mirrors' => [ 'cluster1' ],
'config' => [ 'servers' => [ 'host' => 'elastic2001.cluster2.mynet' ] ]
);
|
ElasticSearch meerdere services met één leesbare service met behulp van writable -configuratie (ondersteund door MLEB 2023.04)
|
Bij configuratie writable worden de volgende regels afgedwongen:
Als een service is gemarkeerd als beschrijfbaar, is de mirrorconfiguratie niet toegestaan. // Drie services geconfigureerd waarbij de ene leesbaar is en de andere beschrijfbaar.
$wgTranslateTranslationServices['dc0'] = [
'type' => 'ttmserver',
'class' => 'ElasticSearchTTMServer',
'cutoff' => 0.75,
// Standaardservice kan niet alleen-schrijven zijn
];
$wgTranslateTranslationServices['dc1'] = [
'type' => 'ttmserver',
'class' => 'ElasticSearchTTMServer',
'cutoff' => 0.75,
// Maak deze service alleen-schrijven
'writable' => true,
];
$wgTranslateTranslationServices['dc2'] = [
'type' => 'ttmserver',
'class' => 'ElasticSearchTTMServer',
'cutoff' => 0.75,
'writable' => true
];
$wgTranslateTranslationDefaultService = 'dc0';
|
Mogelijke sleutels en waarden zijn:
Sleutel | Van toepassing op | Beschrijving |
---|---|---|
config
|
ElasticSearch | Configuratie doorgegeven aan Elastica. |
cutoff
|
Alle | Minimumwaarde voor het van toepassing zijn van een suggestie. Alleen de beste suggesties worden weergegeven, zelfs als er meer boven de drempelwaarde zijn. |
database
|
Lokaal | Als u het vertaalgeheugen op een andere plaats wilt opslaan, kunt u hier de databasenaam opgeven. Als u een loadbalancer gebruikt, moet u die ook aangeven met welke database verbinding moet worden gemaakt. |
displayname
|
Op afstand | De tekst die wordt weergegeven in de tooltip als de muisaanwijzer bovenop de verwijzing staat (de "bullets"). |
index
|
ElasticSearch | De index die in ElasticSearch gebruikt moet worden. Standaard: ttmserver. |
public
|
Alle | Of deze TTMServer geraadpleegd kan worden via api.php van deze wiki. |
replicas
|
ElasticSearch | Als u een cluster uitvoert, dan kunt u het aantal replica's verhogen. Standaardwaarde is: 0. |
shards
|
ElasticSearch | Hoe veel te gebruiken delen. Standaardwaarde: 5. |
timeout
|
Op afstand | Hoeveel seconden wachten op een antwoord van een remote service. |
type
|
Alle | Type TTMServer wat betreft resultaatopmaak. |
url
|
Op afstand | URL naar api.php voor de TTMServer op afstand. |
use_wikimedia_extra
|
ElasticSearch | Boolean, als de extra plugin is geïmplementeerd kunt u dynamische scripting op Elastic v1.x uitzetten. Deze plugin is nu verplicht bij Elastic 2.x clusters. |
mirrors (DEPRECATED Since MLEB 2023.04)
|
Schrijfbare services | Array van strings, definieert de lijst services waar schrijfopdrachten naar toe moeten, het staat toe dat meerdere TTM services actueel gehouden kunnen worden. Bruikbaar voor het snel wisselen om de tijd van storingen te verkorten of om gepland onderhoud te kunnen doen (toegevoegd in MLEB 2017.04) Kan niet worden gebruikt samen met de nieuw toegevoegde configuratie writable .
|
writable (Added in MLEB 2023.04)
|
Alleen-schrijven services | Booleaanse waarde, gedefinieerd voor een service als die service alleen-schrijven is. De standaardservice kan niet alleen-schrijven zijn Als van alle geconfigureerde vertaalgeheugenservices er geen enkele is gemarkeerd als writable , worden alle services als leesbaar en beschrijfbaar beschouwd. Zie taak T322284
|
TTMServer
moet als array index worden gebruikt voor $wgTranslateTranslationServices
als u het vertaalgeheugen wilt bijwerken met nieuwe vertalingen. Dit updaten is niet mogelijk bij remote TTMServers. Vanaf MLEB 2017.04 kan de sleutel TTMServer
worden ingesteld met de configuratie variabele $wgTranslateTranslationDefaultService
. Ondersteuning voor backend Solr is in MLEB-2019.10 (oktober 2019) vervallen.Op dit moment wordt alleen MySQL als database backend ondersteund.
Bootstrap
Na het kiezen van ElasticSearch en het instellen van de vereisten en de configuratie, voer ttmserver-export.php
uit om het vertaalgeheugen te 'bootstrappen'.
Dit bootstrappen is ook nodig wanneer het vertaalgeheugen wordt gewijzigd.
Als u het vertaalgeheugen met meerdere wiki's deelt, dan is de bootstrap voor elk van deze wiki's nodig.
Websites met veel vertalingen moeten overwegen meerdere threads hier voor te gebruiken met de parameter --thread
om het proces te versnellen.
De benodigde tijd hangt af van van hoe compleet de vertaling is (niet complete berichtengroepen worden bij de bootstrap bepaald).
Nieuwe vertalingen worden automatisch met behulp van een hook toegevoegd.
Nieuwe berichtdefinities worden toegevoegd nadat de eerste vertaling is aangemaakt.
Bij een bootstrap worden de volgende zaken gedaan, deze zouden anders niet gebeuren:
- toevoegen en bijwerken van het vertaalgeheugenschema;
- vullen van vertaalgeheugen met bestaande vertalingen;
- opschonen van ongebruikte vertalingen door het legen en weer vullen van het vertaalgeheugen.
Bij het bijwerken van een vertaling wordt de vorige vertaling uit het vertaalgeheugen gewist. Als de vertaling bij een nieuwe definitie wordt bijgewerkt dan wordt de nieuwe vertaling toegevoegd in het vertaalgeheugen en blijft de oude bestaan tot de 'purge'. Als de definitie van het bericht zelf wordt gewijzigd of wordt verwijderd uit alle berichtengroepen, dan gebeurt er voorlopig niets. Het opslaan van een vertaling als 'fuzzy' voegt geen vertaling toe en verwijdert er ook geen in het vertaalgeheugen.
TTMServer API
Nu volgen de specificaties voor het geval u zelf een eigen TTMServer service wilt implementeren.
Query parameters:
Uw service dient de volgende parameters te accepteren:
Sleutel | Waarde |
---|---|
format
|
json |
action
|
ttmserver |
service
|
Optionele identifier als er meerdere gedeelde vertaalgeheugens zijn. Indien niet meegegeven wordt er aangenomen dat het de standaard service betreft. |
sourcelanguage
|
Taalcode zoals in MediaWiki wordt gebruikt, zie IETF language tags en ISO693? |
targetlanguage
|
Taalcode zoals in MediaWiki wordt gebruikt, zie IETF language tags en ISO693? |
test
|
Brontekst in brontaal |
Uw service moet een JSON object meegeven dat de sleutel ttmserver
bevat met een array objecten.
Deze objecten bevatten de volgende gegevens:
Sleutel | Waarde |
---|---|
source |
Oorspronkelijke brontekst. |
target |
Vertaalsuggestie. |
context |
Locale ID voor de bron (optioneel). |
location |
URL naar de pagina waar de suggestie gebruikt wordt. |
quality |
Decimaal getal in de reeks [0..1] die de kwaliteit van de suggestie beschrijft. 1 betekent een perfecte overeenkomst. |
Voorbeeld:
- URL: http://translatewiki.net/w/api.php?action=ttmserver&sourcelanguage=en&targetlanguage=fi&text=january&format=jsonfm
- Antwoord:
{
"ttmserver": [
{
"source": "January",
"target": "tammikuu",
"context": "Wikimedia:Messages\\x5b'January'\\x5d\/en",
"location": "https:\/\/translatewiki.net\/wiki\/Wikimedia:Messages%5Cx5b%27January%27%5Cx5d\/fi",
"quality": 0.85714285714286
},
{
"source": "January",
"target": "tammikuu",
"context": "Mantis:S month january\/en",
"location": "https:\/\/translatewiki.net\/wiki\/Mantis:S_month_january\/fi",
"quality": 0.85714285714286
},
{
"source": "January",
"target": "Tammikuu",
"context": "FUDforum:Month 1\/en",
"location": "https:\/\/translatewiki.net\/wiki\/FUDforum:Month_1\/fi",
"quality": 0.85714285714286
},
{
"source": "January",
"target": "tammikuun",
"context": "MediaWiki:January-gen\/en",
"location": "https:\/\/translatewiki.net\/wiki\/MediaWiki:January-gen\/fi",
"quality": 0.85714285714286
},
{
"source": "January",
"target": "tammikuu",
"context": "MediaWiki:January\/en",
"location": "https:\/\/translatewiki.net\/wiki\/MediaWiki:January\/fi",
"quality": 0.85714285714286
}
]
}
Database backend
De backend bevat drie tabellen: translate_tms
, translate_tmt
en translate_tmf
.
Deze staan voor de bronnen, doelen en de 'fulltext'.
De tabel definities staan in in sql/translate_tm.sql
.
De bronnen bevatten alle berichtdefinities.
Ook al zijn ze altijd in dezelfde taal, meestal Engels, toch wordt de taal van de tekst toch opgeslagen, meestal is niet altijd.
Elke record heeft een uniek id en twee extra velden, 'length' en 'context'.
De eerste wordt gebruikt als eerste uitvoerfilter, zodat er bij het zoeken er niet meer met de tekst die we zoeken hoeft te worden vergeleken.
De context bevat de titel van de pagina waar de tekst op staat, bijvoorbeeld MediaWiki:Jan/en
.
Met deze informatie kunnen we de suggesties koppelen aan MediaWiki:Jan/de
, hierdoor kunnen vertalers snel dingen aanpassen of bepalen welk soort vertaling is gebruikt.
Het tweede filter is het 'fulltext' zoeken.
De definities zijn gemengd met een ad hoc algoritme.
Eerst wordt de tekst opgedeeld in segmenten (woorden) met MediaWiki's Language::segmentByWord
.
Als er genoeg segmenten zijn dan wordt alles verwijderd dat geen letters zijn en wordt de tekst in hoofdletters genormaliseerd.
Daarna worden de eerste tien unieke worden gepakt van minstens 5 bytes lang (in het Engels is dat 5 letters, in talen met multibytes kan dat nog korter zijn).
Deze woorden worden gebruikt als 'fulltext index' voor het filteren op langere teksten.
Na het filteren van de kandidaten, worden de overeenkomende doelen opgehaald uit die tabel. Daarna wordt het Levenshteinafstand algoritme gebruikt om de laatste filtering en sortering te doen. Definiëren:
- E
- bewerkingsafstand
- S
- de tekst waar we suggesties voor zoeken
- Tc
- de suggestie
- To
- de originele tekst waarvan Tc dus een vertaling is
De kwaliteit van de suggestie Tc wordt bepaald met E/min(lengte(Tc),lengte(To)). Afhankelijk van de lengte van de teksten kunnen we of de interne PHP levenshtein functie gebruiken of als beide strings langer zijn dan 255 bytes, de PHP implementatie van het levenshtein algoritme.[1] Er is niet getest of de interne implementatie van levenshtein multibyte tekens goed afgehandeld. Dit kan een zwak punt zijn als de brontaal niet Engels is (de andere zijn het fulltext zoeken en de segmentatie).
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