Land versus taal is een van die onderscheidingen waar iedereen het in het abstracte mee eens is en die in de eerste fixture al wordt geschonden. Een testmatrix wordt geschreven als één rij per taal, aan elke rij wordt een land gehangen om de gegevens realistisch te laten lijken, en de twee assen worden stilzwijgend één.
Dit artikel haalt ze uit elkaar. Het beschrijft de drie lagen die het woord lokalisatie meestal verbergt, waarom een taaltag en een regiocode verschillende taken vervullen, en hoe je twee assen bemonstert zonder te doen alsof het dezelfde as is.
Waarom kunnen land en taal niet van elkaar worden afgeleid?
Eén taal kan in veel landen een officiële taal zijn, en één land kan meerdere officiële talen hebben. Beide richtingen van de relatie zijn veel-op-veel, dus geen van beide waarden bepaalt de andere.
De consequentie voor testen is onmiddellijk. Als elke taal aan precies één land wordt gekoppeld, heeft de matrix een diagonale vorm: ze bevat de paren die iemand natuurlijk vond en geen van de andere. De interessante fouten leven buiten die diagonaal — dezelfde taal die een ander formaat weergeeft, en hetzelfde formaat dat onder een andere taal verschijnt.
Een tweede consequentie is subtieler. Omdat de diagonale paren doorgaans cultureel vertrouwd zijn voor wie de matrix schreef, zijn het ook de paren waar de aannames van het team het meest waarschijnlijk kloppen. De matrix is het sterkst precies waar ze het minst nodig is.
Lokalisatie bestaat eigenlijk uit drie lagen
Behandel lokalisatie als drie beslissingen die toevallig één woord delen.
| Laag | De vraag die ze beantwoordt | Typische eigenaar |
|---|---|---|
| Interfacetaal | In welke taal staan de labels, knoppen en berichten? | Content of product |
| Contentregio | De regels, prijzen en aanbiedingen van welke markt gelden? | Business |
| Gegevensformaat | Welke conventies bepalen datums, getallen, namen en adressen? | Data of engineering |
Elke laag kan onafhankelijk worden ingesteld, en in echte systemen gebeurt dat vaak. Een lezer kan in de ene taal browsen, de regels van een markt krijgen waar hij doorheen reist, en een adres invoeren dat de conventies van een derde plek volgt.
Zodra de drie lagen gescheiden zijn, worden de meeste lokalisatiedefecten beschrijfbaar. Een defect is een geval waarin werd aangenomen dat twee lagen samen bewegen en ze dat niet deden.
De taaltag en de regiocode vervullen verschillende taken
Een taaltag beschrijft tekst. Hij zegt in welke taal een tekenreeks is geschreven en soms welk schrift of welke variant. Een regiocode beschrijft de conventies die een waarde volgt: hoe een datum is geordend, hoe een getal wordt gepunctueerd, hoe een naam is gerangschikt.
Ze zijn niet uitwisselbaar, en de een is geen preciezere versie van de ander. Een systeem dat alleen een taaltag opslaat, heeft de informatie weggegooid die nodig is om een datum te interpreteren, en een systeem dat alleen een regiocode opslaat, heeft de informatie weggegooid die nodig is om een berichtcatalogus te kiezen.
Beide bewaren is geen redundantie; het is het minimum dat nodig is om een weergegeven pagina te beschrijven. De bug waar je op moet letten is de snelkoppeling in de andere richting — de taaltag gebruiken als schakelaar voor gegevensopmaak, wat prima werkt tot het eerste land dat een taal met een ander deelt.
Wat breekt er wanneer een formaat de taal volgt?
De klassieke fout is een waarde die tegen de conventies van het verkeerde land wordt gevalideerd omdat de twee een taal delen. De taal van de gebruiker staat correct ingesteld, de formaatregel wordt uit die taal gekozen, en de waarde wordt afgewezen ook al is ze goed gevormd voor het land waar de gebruiker werkelijk woont.
Er zijn stillere versies. Een naamveld dat delen herordent omdat de interface in de ene taal staat in plaats van omdat het record tot een regio met die ordening behoort. Een numeriek veld dat een decimaalteken uit de verkeerde conventie accepteert en een waarde opslaat die er orden van grootte naast zit. Een datum die op de ene plek dag-eerst en op een andere maand-eerst wordt geïnterpreteerd en als een plausibel maar verkeerd moment in een rapport belandt.
Geen van deze zijn taalproblemen. Het zijn allemaal gevallen waarin een regiobeslissing door een taalinvoer wordt genomen, en de oplossing is structureel in plaats van een betere opzoektabel.
Hoe moet de testmatrix twee assen bemonsteren?
Bemonster elke as op haar eigen voorwaarden, en kruis dan een klein aantal bewust gekozen combinaties in plaats van elke cel.
Begin met de taalas en kies vermeldingen die verschillen in wat de interface nodig heeft: een taal die tekst aanzienlijk laat uitdijen, een die een ander schrift nodig heeft, een waarvan de sorteerregels afwijken van de Latijnse standaard. Neem dan de regioas apart en kies vermeldingen die verschillen in wat de gegevens nodig hebben: een regio waar een veld niet bestaat, een waar een waarde ongewoon lang is, een waarvan de conventies botsen met een buur die dezelfde taal deelt.
De kruisingen die het meest ertoe doen, zijn de niet-diagonale — dezelfde taal in twee regio’s, en twee talen in één regio. Die vier cellen vangen de klasse van defecten die “één taal, één land” niet kan uitdrukken, en ze zijn goedkoop toe te voegen zodra de assen apart zijn opgeslagen.
Voor het taalkundige detail van hoe namen en tekst zich per locale gedragen, is er een aparte gids over naamgegevens per locale, die bij de taalas blijft; de regioas is waar dit artikel over gaat.
Voor ontwikkelaars: laat de regio het formaat bepalen
Sla beide waarden op, en wees expliciet over welke welke beslissing stuurt. Formaatregels horen uit de regio te worden gekozen; berichtcatalogi en tekstlayout horen uit de taal te worden gekozen; en geen van beide mag op weergavemoment uit de ander worden afgeleid.
Houd de twee instellingen op verschillende plekken in je configuratie, met namen die zeggen wat ze zijn. Een veld dat locale heet en een taaltag bevat, is een permanente uitnodiging voor de volgende ontwikkelaar om het als regio te gebruiken. Een veld dat een regiocode bevat, mag nooit worden beschreven als de taal die een gebruiker spreekt.
Leg de scheiding dan vast in tests. Een test die één taal over meerdere regio’s weergeeft, en één regio over meerdere talen, faalt luid op het moment dat iemand de snelkoppeling opnieuw introduceert. De landen- en regiorgids en een landpagina zoals de vermelding voor Japan laten zien hoe de conventies van één land worden beschreven wanneer ze naast elkaar worden gehouden, wat een betrouwbaardere referentie is dan een taalnaam.
Niets hier mag worden gelezen als een beschrijving van echt verkeer. De taal- en regiocombinaties die in dit artikel als voorbeeld worden gebruikt, zijn geconstrueerde steekproefkeuzes, geen waarnemingen van een echte gebruikersgroep, en ze zeggen niets over waar iemand woont of wat iemand spreekt.
Volgende stappen
Schrijf de drie lagen op voor één scherm dat je team bezit, en benoem de waarde die elk van hen voedt. Als twee lagen door dezelfde waarde worden gevoed, heb je de snelkoppeling gevonden. De gids over het testen van landselectievelden brengt de regioas terug tot het besturingselement dat de gebruiker werkelijk aanraakt, en de gids over regio-indelingen en marktniveaus behandelt hoe regio’s zelf worden gedefinieerd.