Upload de brontekst, geef de doeltaal op en vertaal de tekstwaarden om een JSON-taalbestand te vertalen. Begin met een klein bestand in de gratis JSON-vertaler en controleer het geretourneerde bestand vervolgens in je app. Je kunt het voorbeeld downloaden dat we hier gebruiken.
Deze handleiding is bedoeld voor app-teksten, zoals locales/en.json. Bevat je bestand een productcatalogus of API-records, bepaal dan eerst welke velden leesbare tekst bevatten voordat je dezelfde werkwijze toepast. Een ID die als string is opgeslagen, blijft een ID.
Probeer eerst deze zes strings
Het voorbeeld bevat een afrekenscherm en twee instellingenlabels:
{
"checkout": {
"title": "Your order",
"greeting": "Hello, {{name}}",
"pay": "Pay now",
"support": "Contact Pinecart support"
},
"settings": {
"language": "Language",
"notifications": "Email notifications"
}
}
Upload het bestand naar de JSON-tool en voer het volgende in:
Translate every text value into French.
Keep Pinecart in English and preserve {{name}} exactly.
De gratis tool accepteert bestanden tot 2 MB, maximaal vijf per dag, en vertaalt maximaal 5.000 woorden per bestand. Grotere bestanden worden volledig teruggestuurd, waarbij de resterende tekst ongewijzigd blijft. Je kunt de download dus als voorbeeld gebruiken, maar het is geen volledig vertaalde taalversie. Gebruik de app voor een volledig vertaald groot bestand, een woordenlijst voor je werkruimte en herhaalde releases.
Bepaal welke onderdelen bij je app horen
De toepassing roept checkout.title aan; de gebruiker ziet de bijbehorende waarde. De variabele voor de naam wordt tijdens het uitvoeren van de app ingevuld. Beide moeten behouden blijven wanneer je van taal wisselt.
"title": "Your order","title": "Votre commande","greeting": "Hello, {{name}}","greeting": "Bonjour, {{name}}","pay": "Pay now""pay": "Payer maintenant"AI Glot leest JSON als een structuur en schrijft die terug met een inspringing van twee spaties. Een diff kan daardoor ook wijzigingen in witruimte bevatten. Beoordeel de waarden los van de opmaak.
Geef aan welke conventie je voor placeholders gebruikt. Het voorbeeld gebruikt de i18next-notatie {{name}}. Andere projecten gebruiken {name}, %s of ICU-berichten. Neem bij het schrijven van de instructie een echte tekenreeks uit je app over. Zet tijdens het vertalen de ene conventie niet om naar een andere.
Controleer het plan voordat je een grote opdracht start
- 1UploadenHet Engelse bronbestand
- 2Bepaal de scopeDoeltaal en uitgesloten sleutels
- 3Bekijk het planControleer het aantal woorden, de scope en de kosten
- 4VertalenGebruik de woordenlijst en stijlregels
- 5ValideerControleer het bestand en de app
Gebruik voor terugkerende releases een woordenlijst voor je werkruimte voor producttermen en functienamen. Scope-instructies bepalen welke waarden worden vertaald; stijlregels bepalen hoe elke waarde wordt geschreven.
Een bronbestand met alleen en.json geeft niet aan welke Franse labels vorige maand zijn vertaald. De opdracht “vertaal alleen de ontbrekende Franse strings” bevat geen Frans bestand waarmee je kunt vergelijken. Sluit bekende sleutelprefixen uit of lever bron- en doelvelden samen aan en controleer hoe het plan de opdracht interpreteert. De gids voor app-taalbestanden behandelt de bredere workflow en andere indelingen.
Voer een structurele controle uit voordat je de wijzigingen vastlegt
Sla de download naast en.json op als fr.json. Kopieer dit naar check-locale.mjs en voer node check-locale.mjs uit met Node.js. Het script controleert geneste objectsleutels, arraylengtes, waardetypen, ongewijzigde niet-tekstwaarden en de placeholders met dubbele accolades uit het voorbeeld.
import { readFileSync } from 'node:fs';
import assert from 'node:assert/strict';
const source = JSON.parse(readFileSync('en.json', 'utf8'));
const target = JSON.parse(readFileSync('fr.json', 'utf8'));
const tokens = text => [...text.matchAll(/\{\{[^{}]+\}\}/g)]
.map(match => match[0]).sort();
function check(a, b, path = '$') {
assert.equal(typeof b, typeof a, `${path}: value type changed`);
if (a === null || typeof a !== 'object') {
if (typeof a === 'string') {
assert.ok(b.trim().length || !a.trim().length,
`${path}: translation is empty`);
assert.deepEqual(tokens(b), tokens(a),
`${path}: placeholders changed`);
} else {
assert.deepEqual(b, a, `${path}: non-text value changed`);
}
return;
}
assert.equal(Array.isArray(b), Array.isArray(a),
`${path}: container type changed`);
assert.ok(b !== null, `${path}: container is null`);
if (Array.isArray(a)) {
assert.equal(b.length, a.length, `${path}: array length changed`);
}
assert.deepEqual(Object.keys(b).sort(), Object.keys(a).sort(),
`${path}: keys changed`);
for (const key of Object.keys(a)) check(a[key], b[key], `${path}.${key}`);
}
check(source, target);
console.log('Keys, types and {{placeholders}} match. Review the wording next.');
Dit valideert een contract, niet de kwaliteit van de vertaling. Een waarde die in het Engels is blijven staan, slaagt ook voor de controle. Hetzelfde geldt voor een vertaling met grammaticale fouten of een tekst die te lang is voor de knop. De tokenregel geldt voor {{name}}, niet voor alle placeholderindelingen. Pas die aan de syntaxis van je toepassing aan.
Bij i18next JSON v4 gebruiken meervoudsvormen taalspecifieke achtervoegsels en geven je functieaanroepen een aantal mee. Bereid de sleutels voor die je doellocale nodig heeft en test ze. Deze controle op gelijke sleutels wijst een gewijzigde sleutelset bewust af. De controle genereert of valideert geen nieuwe verzameling meervoudsvormen.
Rond de controle af in de toepassing
Laat de bestaande loader voor de Franse locale van je app fr.json gebruiken. Open de checkout, vul een echte naam in en controleer de langste knop op de kleinste schermbreedte die wordt ondersteund. Als je meervoudsvormen gebruikt, test dan aantallen die elke vorm in de doeltaal activeren.
Voor een klein bestand is een zorgvuldige handmatige controle misschien voldoende. Werk je bij elke release met duizenden strings, houd dan het bronbestand, de woordenlijst, deze structurele controle en de controle in de gebruikersinterface in één workflow bij elkaar. In de oplossing voor app-lokalisatie lees je welke rol AI Glot speelt wanneer meerdere mensen dit proces beheren.
