ISO 639 is een internationale norm, uitgegeven door de International Organization for Standardization (ISO), voor het coderen van talen in twee- en drieletterige codes.
ISO 639 bestaat al erg lang in twee basissmaken, ISO 639-1 en ISO 639-2. Een derde versie (ISO 639-3) is in de maak en bijna klaar.
Voor de gehele ISO 639 geldt dat de geprefereerde schrijfwijze van de taalcodes volledig in onderkast is, maar er wordt nadrukkelijk bij vermeld dat verwerkende systemen géén onderscheid moeten maken tussen onderkast en kapitalen.
Talen die een ISO 639-1-code hebben, hebben per definitie ook een ISO 639-2-code.
Om dat enigszins op te vangen bestaan in ISO 639-2 soms twee codes voor één taal, opgesplitst in twee subversies van de standaard. De versie ISO 639-2/B wordt voor bibliografie gebruikt en ISO 639-2/T voor terminologie. Hoewel ze grotendeels gelijk zijn kunnen er verschillen tussen optreden. Momenteel zijn de /B en /T codes voor 23 talen verschillend, onder andere voor Nederlands (/T=nld, /B=dut).
ISO 639-2/B (Bibliografie) is gebaseerd op MARC-voorkeur:
ISO 639-2/T (Terminologie) is gebaseerd op ISO-voorkeur:
ISO 639-1 en -2 zijn vooral ontstaan vanuit technische organisaties en dekken lang niet alle bekende talen af - zelfs ISO 639-2 omvatte aanvankelijk maar c.a. 400 talen. Met name in linguïstiek gespecialiseerde instituten zoals SIL International hadden hun eigen coderingen met duizenden 'talen' (zoals de SIL-codes uit de Ethnologue), die totaal niet op ISO 639 aansloten.
Met ISO 639-3 worden deze werelden nu samengebracht in een aanzet om alle bekende 'talen' onder te brengen in een coderingssysteem met drie letters per taal, waarbij ook coderingen voor historische/dode en geconstrueerde talen worden opgenomen. Hierbij zijn de ISO 639-2 codes samengevoegd met de codes uit de Ethnologue (meer dan 6900 levende talen) en Linguist List (voor historische/dode en geconstrueerde talen en dergelijke). SIL is daarbij aangewezen als de ISO 639-3/RA (Registration Authority) voor het project.
Volgens RFC 3066 moeten in eerste instantie de tweeletterige codes (alpha-2) uit ISO 639-1 gebruikt worden. Bestaat voor een taal géén alpha-2 code en is er wel een ISO 639-2 alpha-3 code, dan kan die worden gebruikt. Zijn in dit geval de codes voor 639-2/B en 639-2/T verschillend dan moet de 'Terminologie' variant uit ISO 639-2/T gebruikt worden. Het valt te verwachten dat RFC 3066 zal worden bijgesteld zodra ISO 639-3 definitief wordt bekrachtigd, maar de alfa-3 codes hieruit zijn dezelfde als ISO 639-2/T (de /B codes vervallen).
IANA houdt een eigen lijst bij van codes die zij voor gebruik hebben 'geregistreerd'. Dat hoeven dus niet per se alle ISO 639 codes te zijn. Zo kunnen bijvoorbeeld veranderingen aan de ISO-norm worden opgevangen, maar ook zijn alle ISO 639 alpha-3 codes waarvoor een corresponderende alfa-2 bestaat domweg niet geregistreerd. Voor RFC 3066 geeft dus uiteindelijk altijd de lijst van IANA het eindoordeel en niet ISO 639. Hetzelfde geld voor andere standaarden waar ze van lenen.
Voor specifieke situaties had ISO 639-2 overigens al de speciale taalcodes mul (multiple - meerder talen) en und (undefined - ongedefinieerd/onbekend). Deze dienen overigens niet 'zomaar' toegepast te worden — zie de RFC.
Wil men een taal(variant) duidelijker specificeren dan met de ISO 639 codes mogelijk is, dan biedt RFC 3066 daar een systeem voor aan waarbij door mintekens ('-') gescheiden subtags achter de 'primaire subtag' kunnen worden geplakt. Zo kan bijvoorbeeld met en-US Amerikaans Engels worden gespecificeerd. Deze combinatie van taal en landcodes is feitelijk overigens ook onderdeel van de ISO 639 norm.
De primaire subtag, ofwel het deel vóór de eerste '-', mag alleen een ISO 639 alpha-2 of alpha-3 code zijn of de letter 'i' of 'x', waarbij 'i' gereserveerd is voor IANA en 'x' vrij is voor privé-gebruik om hierachter eigen coderingen te verzinnen zoals x-onzetaal-mijntaal (met beperkingen; zie RFC 3066).
Als de tweede 'subtag' een tweeletterige code is dan moet deze een alpha-2 landcode zijn uit ISO 3166. Dit geeft meteen een vrij logische manier om lokale varianten van talen aan te geven op basis van het land waar ze gesproken worden; Vlaams zal zo dus als nl-BE kunnen worden gecodeerd. Codes van één letter worden voor de tweede subtag niet toegestaan en alle andere codes (3-8 letters) moeten bij IANA worden geregistreerd, behalve de codes die men achter een 'x-' wil gebruiken.
De derde en volgende subtags kunnen bij IANA geregistreerd worden. Ze mogen elk maximaal 8 tekens lang zijn en moeten bestaan uit A-Z, a-z en 0-9, maar ook hier wordt bij de verwerking géén verschil gemaakt tussen kapitalen en onderkast.
Opvallend is dat de huidige versie nog steeds baseert op het beperkte aantal door IANA geregistreerde alfa-3 codes uit ISO 639-2 en dus nog niet de enorme lijst van ISO 639-3 specificeert.
Wel zijn er extra mogelijkheden gedefinieerd voor toekomstige uitbreidingen (waardoor software daar nu in principe al rekening mee kan houden) en zijn wat extra coderingsmogelijkheden toegevoegd. Door deze nieuwe mogelijkheden zijn veel voor de oude 3066 expliciet apart geregistreerde combinatie-codes impliciet ondersteund.
Om een idee te geven is de specificatie hieronder sterk samengevat en onvolledig weergegeven, maar wel met de meest praktisch-relevante regels:
Nog steeds geldt dat voor alle talen die zowel een twee- als een drieletterige code hebben de alpha-2 code gebruikt wordt en dat van de drielettercodes de 'Terminologie' variant (ISO 639-2/T) gebruikt wordt (maar alle talen waarbij /T en /B verschillen hebben ook een alpha-2 code, dus speelt dit praktisch gezien geen rol).
Er is een groot aantal script codes geregistreerd, waaronder bijvoorbeeld Arabisch ('Arab'), Braille ('Brai'), Cyrillisch ('Cyrl'), Grieks ('Grek'), Latijns ('Latn') etc.
Een paar voorbeelden van geregistreerde regiocodes zijn: Wereld (001), Afrika (002), Europa (150), West-Europa (155), Latijns-Amerika en het Caribisch gebied (419).
Er zijn momenteel opvallend weinig variant-subtags bij IANA geregistreerd. Behalve een aantal taalvarianten zoals dialecten zijn bijvoorbeeld voor het Duits spellingsvarianten voor de taalrevisies van 1901 en 1996 geregistreerd. Zo is de-1996 dus Duits 'nieuwe spelling' of de-CH-1901 Zwitsers Duits oude spelling. Voor het Nederlands zijn zulke varianten overigens niet geregistreerd.
Zeker voor toepassing in geautomatiseerde (informatie)systemen is een verregaande verfijning eerder hinderlijk dan bevorderlijk. De tweeletterige ISO 639 alpha-2 codes voldoen voor verreweg de meeste toepassingen, omdat de meestgebruikte talen er toch al mee kunnen worden aangeduid (zeker in combinatie met de ISO 3166 landcodes). De alpha-3 codes uit ISO 639-2 dekten nog eens een grotere hoeveelheid talen af, maar zorgden tegelijkertijd voor wat problemen vanwege de verschillen tussen de /B en /T varianten.
Op basis van ISO 639 en de RFC 3066 zijn er in de loop der tijd door 'derden' substandaarden ontwikkeld om op een gestructureerde manier meer talen te coderen. Zo heeft bijvoorbeeld SIL International een univorme manier voorgesteld om de SIL-codes uit de Ethnologue in het RFC 3066 kader toe te passen als x-sil-XXX, waarbij 'XXX' de SIL-taalcode is, dus bijvoorbeeld x-sil-VLS voor Vlaams en x-sil-DUT voor Nederlands.
SIL heeft overigens met de 15e editie van de Ethnologue al hun codes gelijk getrokken met ISO 639-3 en zal dus voortaan ook nld en vls gebruiken (was DUT en VLS). Wel zijn er verschillen tussen de nieuwe SIL-codes en ISO 639-3 in die zin dat sommige talen waarvoor ISO-codes bestaan niet in de Ethnologue voorkomen en dat er vooral bij de keuzes die gemaakt zijn voor het groeperen van talen (familie- of groeps-codes) verschillen zijn.
RFC 3066bis stelt overigens duidelijk dat het altijd de voorkeur geniet een zo eenvoudig mogelijke code toe te passen en extra subtags nooit te gebruiken als ze niets wezenlijks toevoegen. Gebruik dus nooit nl-Latn-NL voor toepassingen waarbij niet verwacht wordt dat er verschil wordt gemaakt in schrift en in lokale taalvarianten van het Nederlands; simpelweg nl is dan genoeg. Mocht je echter een toepassing hebben waarin bijvoorbeeld ook braille mogelijk is (voorleessysteem?) kan het wel zinnig zijn om delen te markeren als nl-Latn of nl-Brai.
Nu ISO 639-3 eraan komt zal dat vermoedelijk wel consequenties hebben voor het gebruik van de oude combinatiecodes. Mogelijk gaan we Vlaams voortaan aanduiden als vls (ISO 639-3), maar oude coderingen als nl-BE of x-sil-VLS zullen wel niet als sneeuw voor de zon verdwijnen, dus zal veel software deze voorlopig ook nog wel moeten ondersteunen. IANA heeft overigens dergelijke combinatiecodes nooit voor Vlaams geregistreerd en brengt nadrukkelijk 'Flemish' onder bij nl.
Verwarring, probleemgevallen en onenigheid over welke code nu wanneer de voorkeur geniet zullen ook met de komst van ISO 639-3 niet uit de wereld zijn. Tot nu kon je je misschien druk maken of Vlaams nu nl-BE moest zijn of misschien nl-FR (vanwege Frans-Vlaanderen) of misschien dan toch x-sil-VLS of nog wat anders. Dergelijke problemen zullen blijven, maar dan nu op veel detaillistischer niveau - dus om bijvoorbeeld weer varianten binnen het Vlaams te kunnen coderen.
Een ander/nieuw probleem dat nu eventueel zou kunnen ontstaan is onduidelijkheid door "macrotalen". Zo hadden we ooit qu (of que) heel in het algemeen voor Quechua. Dat is er nog steeds, maar geldt in ISO/DIS 639-3 als macrotaal voor een veertigtal individuele talen uit de Quechuan-taalfamilie. Bij reeds bestaande, als qu/que gemarkeerde documenten, zou je nu dus de vraag moeten stellen of deze voortaan inderdaad als lingua franca-variant van het Quechua door het leven moeten gaan of dat er niet toch eerder voor één van de individuele taalcodes gekozen moet worden. Veel nazorg dus en voorlopig veel mogelijke twijfel over de interpretatie of 'juistheid' van oude codes qu of que.
Bij het opstellen van ISO/DIS 639-3 is aanvankelijk foutief aangenomen dat de oude fy/fry code in ISO 639-1 en -2 voor 'Fries in brede zin' stond en is dus fry opgenomen als macrotaal (bovendien met een verkeerde keuze voor de talen die binnen deze groep zouden horen), waarbij fri dan de functie kreeg van het Nederlandse Frysk, maar inmiddels is SIL tot het inzicht gekomen dat een macrotaal voor Fries niet nodig is en fry altijd al het Nederlandse Westerlauwers Fries als individuele taal betekende. De code die voor Westerlauwers Fries was ingevoerd (fri) is daarom nu alweer als Retired gemarkeerd en moet dus nooit gebruikt gaan worden (de norm is immers nog niet bekrachtigd). Wel nieuw zijn nu de andere individuele 'talen' Nordfriisk (frr), Saterfries (stq) en Oost-Fries Platduits (frs) (waarbij die laatste dus geen Friese taal is, maar een Nedersaksisch dialect). Op een vergelijkbare manier zou je vraagtekens kunnen zetten bij het gebruik van nl. Dat is géén macrotaal geworden, maar is nu als individuele taal nld op gelijke voet naast onder andere Vlaams (vls), Zeeuws (zea), Twents (twd) en dergelijke gezet. Van oudsher veegde je zonder na te denken al die talen gewoon onder nl, maar nu bedoel je kennelijk met nl impliciet nld. Een Vlaams document als nl coderen zou dus in zekere zin niet meer juist zijn, maar door vls te gebruiken breng je misschien een nuancering aan die te ver voert en dus ook niet wenselijk is.
Bedenk wel dat IANA de codes uit ISO 639-3 nog helemaal niet geregistreerd heeft voor RFC 3066(bis) en dat één en ander voor toepassing in RFC 3066 conforme systemen (internet!) dus officieel nog geen rol speelt.
Het werken met deze taalcodes blijft dus een kwestie van nadenken, oppassen en de goede keuzes maken.
Onderstaande tabel illustreert verschillen tussen ISO 639-1, -2 en -3 en andere taalcodesystemen aan hand van een paar voorbeeldtalen:
| ISO/DIS 639-3 SIL(Ed.15) | ISO 639-2/T(/B) alpha-3 | ISO 639-1 alpha-2 | RFC 3066 (alternatief) | SIL(Ed.14) | Nederlandse naam (nl) | Engelse naam (en) | Lokale naam | Taalgebied (ISO 3166) |
|---|---|---|---|---|---|---|---|---|
| afr | afr | af | af (x-sil-AFK) | AFK | Afrikaans | Afrikaans | Afrikaans of Taal | BW, MW, NA, ZA, ZM |
| deu | deu (ger) | de | de (x-sil-GER) | GER | Duits | German | Deutsch | AT, CH, CZ, DE, DK, HU, IT, KZ, LI, LU, PL, PY, RO, SK |
| nld | nld (dut) | nl | nl (x-sil-DUT) | DUT | Nederlands | Dutch | Nederlands | AN, AW, BE, FR, NL, SR |
| vls | - | - | - (nl-BE, x-sil-VLS) | VLS | Vlaams | Flemish | Vlaemsch | BE, FR, NL |
Complete overzichten en tabellen zijn online te vinden via de externe links hieronder.
ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639 | ISO 639