OpenType Test: Localized Forms
THIS IS A DRAFT, DO NOT USE YET
Look at the sea of faces below. If they all look like
OT:FRA, the test is passing.
If any face looks like OT:ENG,
your browser has failed to select the correct letter form
for a language. In that case, please hover over that face
and report the appearing text as a bug to your browser vendor.
For example,
cy → WEL
means the browser was told to render the
text in Welsh, whose
IETF BCP47 language
tag is cy
. For rendering text with localized
letter forms, the browser needs to convert this to an
OpenType
language system tag, which would be WEL
for the
Welsh language. See here for background.
TODO: Add many, many more test cases.
TODO: Resolve what mapping should be done for these BCP47 codes:
ak → AKA,TWI · chp → CHP,SAY · cr → CRE,YCR,DCR,TCR ·
crm → LCR,MCR · csw → NCR,NHC · den → SLA,SSL ·
ga → IRI,IRT ·
hy → HYE,HYE0 · kca → KHK,KHS,KHV ·
krc → BAL,KAR · man → EMK,MNK,MND · ml → MAL,MLR ·
mlq → MLN,MNK · scs → SCS,SLA · xal → KLM,TOD ·
zh → ZHH,ZHP,ZHS,ZHT
TODO: Systematically add BCP47 macrolanguages, collections,
deprecated codes, and grandfathered codes. Add test cases
for extensions T and U.
TODO: Test cases for Garshuni (Arabic languages written in Syriac)
TODO: Register a BCP47 variant subtag for the North American
Phonetic Alphabet (Americanist), so that web browsers can
select OpenType localized forms for APPH.
TODO: The OpenType spec gives a language code HAL for
Halam, and says it corresponds to ISO 639 code flm.
However, ISO 639-3 has retired flm as a language code;
it got split into Ranglong [rnl], and Falam Chin (new
identifier [cfm]). Suggestion: In the OpenType registry,
change ISO column for Halam/HAL to cfm,flm,rnl.
However, BCP47 has only cfm and rnl, but not flm.
TODO: The OpenType spec gives a language code SIG for
Silte Gurage, and says it corresponds to ISO 639 code xst.
However, ISO 639-3 has retired xst as a language code;
it got split into Wolane [wle] and Silt'e [stv].
Suggestion: In the OpenType registry, change the ISO column for SIG
to wle,stv,xst. However, BCP47 has only wle and stv, but not xst.
A:
OT:AFROT:ABKOT:ABAOT:FANOT:ACHOT:DNGOT:ADYOT:AFKOT:AGWOT:SWAOT:AIOOT:ARIOT:FATOT:ALTOT:AMHOT:HBNOT:ARGOT:ANGOT:ARAOT:MAPOT:ASMOT:ASTOT:RCROT:ALTOT:AVROT:AWAOT:AYMOT:AZEOT:AZB
B:
OT:BSHOT:BAD0OT:BMLOT:BLIOT:BANOT:BAROT:BBCOT:BAUOT:BCHOT:BDYOT:BELOT:BELOT:BEMOT:BADOT:BLTOT:LAHOT:BAGOT:BGROT:BGCOT:BGQOT:BHIOT:BHIOT:BIKOT:BHOOT:BISOT:BIKOT:BIKOT:EDOOT:BJJOT:BLNOT:BKFOT:BLNOT:BLKOT:BIKOT:BMBOT:BENOT:TIBOT:BPYOT:LRCOT:BREOT:BRIOT:BRHOT:BRXOT:BOSOT:BSKOT:BTIOT:BIKOT:BTSOT:RBUOT:BUGOT:BILOT:BYV
C:
OT:CATOT:CRROT:CAKOT:CBKOT:CHEOT:CEBOT:HALOT:CGGOT:CHAOT:CHK0OT:LMAOT:CHOOT:CHROT:CHYOT:CHKOT:COSOT:COPOT:CPPOT:CRTOT:ECROT:WCROT:ECROT:CRROT:CSYOT:CSBOT:CTGOT:BIKOT:CSLOT:CUKOT:CHUOT:WELOT:IPPH
D:
OT:DANOT:NISOT:DAROT:DAXOT:DEUOT:DEUOT:DEUOT:IPPHOT:DHGOT:DNKOT:DJROT:DJR0OT:DUNOT:DNJOT:DGOOT:DGROT:LSBOT:DUJOT:DIVOT:JULOT:DZN
E:
OT:EWEOT:EFIOT:ELLOT:ELLOT:IPPHOT:ELLOT:PGROT:IPPHOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:IPPHOT:IPPHOT:ENGOT:FNEOT:TNEOT:NTOOT:ESPOT:ESUOT:ETIOT:EUQOT:EVNOT:EVK
F:
OT:FAROT:FAN0OT:FULOT:FINOT:PILOT:FJIOT:FMPOT:FOSOT:FONOT:FRAOT:FRCOT:FRPOT:FTAOT:FRLOT:FUVOT:FRI
G:
OT:GADOT:GAGOT:GAWOT:GAEOT:GEZOT:GIHOT:GIL0OT:GKPOT:GALOT:NANOT:GLKOT:GUAOT:GNNOT:GOGOT:GONOT:GROOT:SOGOT:ALSOT:ALSOT:ALSOT:GUJOT:GUCOT:GUFOT:GMZOT:GUZOT:MNX
H:
OT:HAUOT:HRIOT:HAWOT:HAYOT:HAZOT:IWROT:HINOT:HILOT:HMNOT:HNDOT:CHHOT:HNDOT:HMOOT:HOOT:HAROT:HRVOT:USBOT:HAIOT:HUNOT:HER
I:
OT:INAOT:IBAOT:IBBOT:INDOT:ILEOT:IBOOT:EBIOT:YIMOT:IJOOT:IPKOT:ILOOT:LTZOT:NAVOT:INDOT:INGOT:IDOOT:ISLOT:ITAOT:INUOT:IWR
J:
OT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JAMOT:JBOOT:JCTOT:JIIOT:JAV
K:
OT:KRKOT:KAB0OT:KMBOT:KATOT:KATOT:KGEOT:KATOT:KRNOT:KABOT:KDEOT:KRMOT:KUYOT:KEAOT:KEAOT:KEKOT:KKNOT:KODOT:KACOT:KULOT:KMNOT:KON0OT:KSIOT:XBDOT:KHTOT:KHWOT:KIKOT:KIUOT:KUAOT:KJDOT:KHAOT:KJPOT:KAZOT:GRNOT:KALOT:KHMOT:MBNOT:KMOOT:KMZOT:KANOT:KOROT:KOPOT:KOKOT:KOSOT:KPLOT:XPEOT:KYKOT:KISOT:KRTOT:KNROT:KRIOT:KRLOT:KUUOT:KSHOT:KSH0OT:KISOT:KSWOT:KEBOT:KONOT:KUROT:KUMOT:KOMOT:KOZOT:COROT:COROT:COROT:KMSOT:KUIOT:KIROT:KYU
L:
OT:LATOT:JUDOT:PNBOT:LTZOT:LAKOT:LDKOT:LEZOT:LUGOT:LIMOT:LMBOT:LIJOT:LISOT:LJPOT:LKIOT:LADOT:LAMOT:LMOOT:LINOT:LAOOT:LOMOT:LRCOT:LTHOT:LUBOT:LUAOT:LUOOT:MIZOT:LUHOT:LRCOT:LVIOT:LAZ
M:
OT:MADOT:MAGOT:MTHOT:MKROT:MAMOT:MNKOT:MBOOT:MOKOT:MDROT:MLEOT:MDEOT:MEROT:MFEOT:MLGOT:MAHOT:ARKOT:MRIOT:MINOT:MKDOT:MNKOT:MKWOT:MNGOT:MCHOT:MNIOT:MANOT:MONOT:MOHOT:MOSOT:MAJOT:MAROT:HMAOT:MLYOT:MNKOT:MTSOT:MAWOT:MUSOT:MAWOT:MNKOT:MWLOT:MAWOT:MAWOT:MWWOT:BRMOT:MENOT:MYNOT:MNKOT:ERZOT:MZN
N:
OT:NAUOT:NAGOT:NAHOT:NAPOT:NDBOT:NDCOT:NDSOT:NEPOT:NEWOT:NDGOT:NGAOT:LMWOT:SXTOT:NIUOT:GILOT:NLDOT:NYNOT:NOROT:NTAOT:NOEOT:NOGOT:NOVOT:NKOOT:NDBOT:NASOT:NSOOT:NAVOT:CHIOT:NYMOT:NKLOT:NZA
O:
OT:OCIOT:OJBOT:OCROT:KOHOT:OROOT:ORIOT:OSS
P:
OT:PANOT:PAGOT:PAMOT:PAP0OT:PAUOT:PCCOT:PCDOT:PLGOT:PDCOT:PHKOT:PALOT:PIHOT:PLKOT:PLGOT:PAPOT:PMSOT:POHOT:PONOT:PROOT:DRIOT:PASOT:PTGOT:PWO
Q:
OT:QUZOT:QUCOT:QUHOT:QVIOT:QWH
R:
OT:RAJOT:RAROT:PLGOT:REJOT:RIAOT:RIFOT:RITOT:ARKOT:RKWOT:RMSOT:RMSOT:RMSOT:RMSOT:RMSOT:RMSOT:RMSOT:ARKOT:RUNOT:HALOT:ROMOT:MOLOT:RMYOT:ROYOT:RTMOT:RUSOT:RSYOT:RUPOT:RUAOT:MAW
S:
OT:SANOT:YAKOT:PAAOT:SASOT:SATOT:SRDOT:SADOT:SCNOT:SCOOT:SCOOT:SNDOT:NSMOT:SNAOT:SELOT:SGOOT:SGAOT:SGSOT:CHGOT:SHIOT:SHNOT:SNHOT:SIDOT:KSMOT:SIBOT:SKYOT:SRKOT:SLVOT:SLVOT:SLVOT:SLVOT:SLVOT:SMOOT:SSMOT:LSMOT:ISMOT:SKSOT:SNA0OT:SNKOT:SMLOT:SOPOT:SQIOT:SRBOT:SRROT:SWZOT:SOTOT:STQOT:SIGOT:SUNOT:SUKOT:SUROT:SVEOT:SVAOT:SWKOT:CMROT:MAWOT:SXUOT:SYLOT:SYROT:SZL
T:
OT:TAMOT:TABOT:TULOT:TDDOT:TELOT:TMNOT:TETOT:TAJOT:THAOT:TGYOT:TGROT:TIVOT:TKMOT:TGLOT:TMHOT:TNAOT:TGNOT:TOD0OT:TNGOT:TPIOT:TRKOT:TUAOT:TSGOT:TATOT:TUMOT:TVLOT:THTOT:TUVOT:TYZOT:TZMOT:TZO
U:
OT:UDMOT:UYGOT:UKROT:UMBOT:MUNOT:URDOT:UZB
V:
OT:VENOT:VECOT:VITOT:FLEOT:MAKOT:VOLOT:VOLOT:VRO
W:
OT:WLNOT:WAROT:WAOT:WAGOT:CMROT:SIGOT:CMROT:WLFOT:MAWOT:WTM
X:
OT:SEKOT:XHSOT:XJBOT:XOGOT:YAOOT:YAP
Y:
OT:JIIOT:JIIOT:JIIOT:YBAOT:ZHA
Z:
OT:CMROT:ZEAOT:ZGHOT:ZHSOT:IPPHOT:ZHPOT:ZHTOT:ZHSOT:ZHTOT:ZNDOT:ZULOT:LRCOT:DIQOT:ZZA