1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 31b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * Copyright (c) 1997-2015, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/***************************************************************************** 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File CLOCTST.C 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Madhu Katragadda Ported for C API 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cloctst.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uparse.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uresimp.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ubrk.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucol.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udat.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/umsg.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ures.h" 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uset.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ulocdata.h" 3659d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/uldnames.h" 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parseerr.h" /* may not be included with some uconfig switches */ 3827f654740f2a26ad62a5c155af9199af9e69b889claireho#include "udbgutil.h" 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNullDefault(void); 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNonexistentLanguageExemplars(void); 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestLocDataErrorCodeChaining(void); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestLanguageExemplarsFallbacks(void); 4459d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void TestDisplayNameBrackets(void); 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 4627f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void TestUnicodeDefines(void); 4727f654740f2a26ad62a5c155af9199af9e69b889claireho 48f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusstatic void TestIsRightToLeft(void); 49f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid PrintDataTable(); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*--------------------------------------------------- 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru table of valid data 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru --------------------------------------------------- */ 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LOCALE_SIZE 9 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LOCALE_INFO_SIZE 28 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const rawData2[LOCALE_INFO_SIZE][LOCALE_SIZE] = { 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* language code */ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en", "fr", "ca", "el", "no", "zh", "de", "es", "ja" }, 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* script code */ 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "", "", "", "", "", "", "", "", "" }, 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* country code */ 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "US", "FR", "ES", "GR", "NO", "CN", "DE", "", "JP" }, 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* variant code */ 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "", "" }, 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* full name */ 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US", "fr_FR", "ca_ES", 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "el_GR", "no_NO_NY", "zh_Hans_CN", 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@collation=phonebook", "es@collation=traditional", "ja_JP@calendar=japanese" }, 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* ISO-3 language */ 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eng", "fra", "cat", "ell", "nor", "zho", "deu", "spa", "jpn" }, 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* ISO-3 country */ 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "USA", "FRA", "ESP", "GRC", "NOR", "CHN", "DEU", "", "JPN" }, 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* LCID */ 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "409", "40c", "403", "408", "814", "804", "10407", "40a", "411" }, 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display language (English) */ 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English", "French", "Catalan", "Greek", "Norwegian", "Chinese", "German", "Spanish", "Japanese" }, 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display script code (English) */ 81103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "", "", "", "", "", "Simplified Han", "", "", "" }, 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display country (English) */ 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "United States", "France", "Spain", "Greece", "Norway", "China", "Germany", "", "Japan" }, 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display variant (English) */ 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "", "" }, 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display name (English) */ 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "English (United States)", "French (France)", "Catalan (Spain)", 88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "Greek (Greece)", "Norwegian (Norway, NY)", "Chinese (Simplified, China)", 89b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "German (Germany, Sort Order=Phonebook Sort Order)", "Spanish (Sort Order=Traditional Sort Order)", "Japanese (Japan, Calendar=Japanese Calendar)" }, 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display language (French) */ 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "anglais", "fran\\u00E7ais", "catalan", "grec", "norv\\u00E9gien", "chinois", "allemand", "espagnol", "japonais" }, 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display script code (French) */ 9459d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "sinogrammes simplifi\\u00e9s", "", "", "" }, 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display country (French) */ 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "\\u00C9tats-Unis", "France", "Espagne", "Gr\\u00E8ce", "Norv\\u00E8ge", "Chine", "Allemagne", "", "Japon" }, 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display variant (French) */ 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "", "" }, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display name (French) */ 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)", 10154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)", "chinois (simplifi\\u00e9, Chine)", 102f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "allemand (Allemagne, ordre de tri=Ordre de l\\u2019annuaire)", "espagnol (ordre de tri=Ordre traditionnel)", "japonais (Japon, calendrier=calendrier japonais)" }, 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display language (Catalan) */ 105c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "angl\\u00E8s", "franc\\u00E8s", "catal\\u00E0", "grec", "noruec", "xin\\u00E8s", "alemany", "espanyol", "japon\\u00E8s" }, 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display script code (Catalan) */ 10759d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "han simplificat", "", "", "" }, 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display country (Catalan) */ 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "Estats Units", "Fran\\u00E7a", "Espanya", "Gr\\u00E8cia", "Noruega", "Xina", "Alemanya", "", "Jap\\u00F3" }, 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display variant (Catalan) */ 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "", "" }, 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display name (Catalan) */ 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "angl\\u00E8s (Estats Units)", "franc\\u00E8s (Fran\\u00E7a)", "catal\\u00E0 (Espanya)", 114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "grec (Gr\\u00E8cia)", "noruec (Noruega, NY)", "xin\\u00E8s (simplificat, Xina)", 11559d709d503bab6e2b61931737e662dd293b40578ccornelius "alemany (Alemanya, ordenaci\\u00F3=ordre de la guia telef\\u00F2nica)", "espanyol (ordenaci\\u00F3=ordre tradicional)", "japon\\u00E8s (Jap\\u00F3, calendari=calendari japon\\u00e8s)" }, 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display language (Greek) */ 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac", 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac", 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac", 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac", 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac", 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC", 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC", 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03C3\\u03C0\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC", 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03B9\\u03BA\\u03AC" 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display script code (Greek) */ 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13159d709d503bab6e2b61931737e662dd293b40578ccornelius { "", "", "", "", "", "\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf \\u03a7\\u03b1\\u03bd", "", "", "" }, 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display country (Greek) */ 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 13459d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2", 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1", 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1", 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1", 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1", 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039A\\u03AF\\u03BD\\u03B1", 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03AF\\u03B1", 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03AF\\u03B1" 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display variant (Greek) */ 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "NY", "", "", "", "" }, /* TODO: currently there is no translation for NY in Greek fix this test when we have it */ 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* display name (Greek) */ 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 14859d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac (\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2)", 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac (\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1)", 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1)", 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac (\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1)", 15259d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac (\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1, NY)", 15359d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC (\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf, \\u039A\\u03AF\\u03BD\\u03B1)", 15459d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u0393\\u03b5\\u03c1\\u03bc\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u0393\\u03b5\\u03c1\\u03bc\\u03b1\\u03bd\\u03af\\u03b1, \\u03a3\\u03b5\\u03b9\\u03c1\\u03ac \\u03c4\\u03b1\\u03be\\u03b9\\u03bd\\u03cc\\u03bc\\u03b7\\u03c3\\u03b7\\u03c2=\\u03a3\\u03b5\\u03b9\\u03c1\\u03ac \\u03c4\\u03b1\\u03be\\u03b9\\u03bd\\u03cc\\u03bc\\u03b7\\u03c3\\u03b7\\u03c2 \\u03c4\\u03b7\\u03bb\\u03b5\\u03c6\\u03c9\\u03bd\\u03b9\\u03ba\\u03bf\\u03cd \\u03ba\\u03b1\\u03c4\\u03b1\\u03bb\\u03cc\\u03b3\\u03bf\\u03c5)", 15554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius "\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u03a3\\u03b5\\u03b9\\u03c1\\u03ac \\u03c4\\u03b1\\u03be\\u03b9\\u03bd\\u03cc\\u03bc\\u03b7\\u03c3\\u03b7\\u03c2=\\u03a0\\u03b1\\u03c1\\u03b1\\u03b4\\u03bf\\u03c3\\u03b9\\u03b1\\u03ba\\u03ae \\u03c3\\u03b5\\u03b9\\u03c1\\u03ac \\u03c4\\u03b1\\u03be\\u03b9\\u03bd\\u03cc\\u03bc\\u03b7\\u03c3\\u03b7\\u03c2)", 15659d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u0399\\u03b1\\u03c0\\u03c9\\u03bd\\u03b9\\u03ba\\u03ac (\\u0399\\u03b1\\u03c0\\u03c9\\u03bd\\u03af\\u03b1, \\u0397\\u03bc\\u03b5\\u03c1\\u03bf\\u03bb\\u03cc\\u03b3\\u03b9\\u03bf=\\u0399\\u03b1\\u03c0\\u03c9\\u03bd\\u03b9\\u03ba\\u03cc \\u03b7\\u03bc\\u03b5\\u03c1\\u03bf\\u03bb\\u03cc\\u03b3\\u03b9\\u03bf)" 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar*** dataTable=0; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum { 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ENGLISH = 0, 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FRENCH = 1, 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CATALAN = 2, 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GREEK = 3, 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NORWEGIAN = 4 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum { 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LANG = 0, 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SCRIPT = 1, 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CTRY = 2, 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VAR = 3, 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NAME = 4, 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LANG3 = 5, 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CTRY3 = 6, 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LCID = 7, 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DLANG_EN = 8, 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DSCRIPT_EN = 9, 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DCTRY_EN = 10, 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DVAR_EN = 11, 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DNAME_EN = 12, 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DLANG_FR = 13, 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DSCRIPT_FR = 14, 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DCTRY_FR = 15, 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DVAR_FR = 16, 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DNAME_FR = 17, 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DLANG_CA = 18, 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DSCRIPT_CA = 19, 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DCTRY_CA = 20, 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DVAR_CA = 21, 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DNAME_CA = 22, 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DLANG_EL = 23, 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DSCRIPT_EL = 24, 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DCTRY_EL = 25, 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DVAR_EL = 26, 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DNAME_EL = 27 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TESTCASE(name) addTest(root, &name, "tsutil/cloctst/" #name) 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addLocaleTest(TestNode** root); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addLocaleTest(TestNode** root) 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestObsoleteNames); /* srl- move */ 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestBasicGetters); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestNullDefault); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestPrefixes); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestSimpleResourceInfo); 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDisplayNames); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestGetAvailableLocales); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDataDirectory); 21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestISOFunctions); 21650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestISO3Fallback); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestUninstalledISO3Names); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestSimpleDisplayNames); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestVariantParsing); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestKeywordVariants); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestKeywordVariantParsing); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestCanonicalization); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestKeywordSet); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestKeywordSetError); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDisplayKeywords); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDisplayKeywordValues); 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestGetBaseName); 22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestGetLocale); 23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDisplayNameWarning); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestNonexistentLanguageExemplars); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestLocDataErrorCodeChaining); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestLanguageExemplarsFallbacks); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestCalendar); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDateFormat); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestCollation); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestULocale); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestUResourceBundle); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDisplayName); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestAcceptLanguage); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestGetLocaleForLCID); 244c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru TESTCASE(TestOrientation); 245c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru TESTCASE(TestLikelySubtags); 246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TESTCASE(TestToLanguageTag); 247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TESTCASE(TestForLanguageTag); 24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TESTCASE(TestTrailingNull); 24927f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(TestUnicodeDefines); 2508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE(TestEnglishExemplarCharacters); 25159d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE(TestDisplayNameBrackets); 252f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE(TestIsRightToLeft); 253f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE(TestToUnicodeLocaleKey); 254f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE(TestToLegacyKey); 255f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE(TestToUnicodeLocaleType); 256f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE(TestToLegacyType); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* testing uloc(), uloc_getName(), uloc_getLanguage(), uloc_getVariant(), uloc_getCountry() */ 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestBasicGetters() { 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t cap; 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *testLocale = 0; 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *temp = 0, *name = 0; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing Basic Getters\n"); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < LOCALE_SIZE; i++) { 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale=(char*)malloc(sizeof(char) * (strlen(rawData2[NAME][i])+1)); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(testLocale,rawData2[NAME][i]); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing %s .....\n", testLocale); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cap=uloc_getLanguage(testLocale, NULL, 0, &status); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp=(char*)malloc(sizeof(char) * (cap+1)); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getLanguage(testLocale, temp, cap+1, &status); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: in uloc_getLanguage %s\n", myErrorName(status)); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 !=strcmp(temp,rawData2[LANG][i])) { 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" Language code mismatch: %s versus %s\n", temp, rawData2[LANG][i]); 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cap=uloc_getCountry(testLocale, temp, cap, &status); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp=(char*)realloc(temp, sizeof(char) * (cap+1)); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getCountry(testLocale, temp, cap+1, &status); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: in uloc_getCountry %s\n", myErrorName(status)); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(temp, rawData2[CTRY][i])) { 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" Country code mismatch: %s versus %s\n", temp, rawData2[CTRY][i]); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cap=uloc_getVariant(testLocale, temp, cap, &status); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp=(char*)realloc(temp, sizeof(char) * (cap+1)); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getVariant(testLocale, temp, cap+1, &status); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: in uloc_getVariant %s\n", myErrorName(status)); 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(temp, rawData2[VAR][i])) { 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Variant code mismatch: %s versus %s\n", temp, rawData2[VAR][i]); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cap=uloc_getName(testLocale, NULL, 0, &status); 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name=(char*)malloc(sizeof(char) * (cap+1)); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getName(testLocale, name, cap+1, &status); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(status==U_ZERO_ERROR) { 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: in uloc_getName(%s,NULL,0,..), expected U_BUFFER_OVERFLOW_ERROR!\n", testLocale); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: in uloc_getName %s\n", myErrorName(status)); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(name, rawData2[NAME][i])){ 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" Mismatch in getName: %s versus %s\n", name, rawData2[NAME][i]); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(temp); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(name); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testLocale); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNullDefault() { 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char original[ULOC_FULLNAME_CAPACITY]; 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(original, uloc_getDefault()); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_setDefault("qq_BLA", &status); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(uloc_getDefault(), "qq_BLA") != 0) { 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" Mismatch in uloc_setDefault: qq_BLA versus %s\n", uloc_getDefault()); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_setDefault(NULL, &status); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(uloc_getDefault(), original) != 0) { 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" uloc_setDefault(NULL, &status) didn't get the default locale back!\n"); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test that set & get of default locale work, and that 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * default locales are cached and reused, and not overwritten. 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *n_en_US; 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *n_fr_FR; 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *n2_en_US; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_setDefault("en_US", &status); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n_en_US = uloc_getDefault(); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(n_en_US, "en_US") != 0) { 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Wrong result from uloc_getDefault(). Expected \"en_US\", got \"%s\"\n", n_en_US); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_setDefault("fr_FR", &status); 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n_fr_FR = uloc_getDefault(); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(n_en_US, "en_US") != 0) { 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_setDefault altered previously default string." 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Expected \"en_US\", got \"%s\"\n", n_en_US); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(n_fr_FR, "fr_FR") != 0) { 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Wrong result from uloc_getDefault(). Expected \"fr_FR\", got %s\n", n_fr_FR); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_setDefault("en_US", &status); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n2_en_US = uloc_getDefault(); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(n2_en_US, "en_US") != 0) { 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Wrong result from uloc_getDefault(). Expected \"en_US\", got \"%s\"\n", n_en_US); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (n2_en_US != n_en_US) { 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Default locale cache failed to reuse en_US locale.\n"); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Failure returned from uloc_setDefault - \"%s\"\n", u_errorName(status)); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test the i- and x- and @ and . functionality 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define PREFIXBUFSIZ 128 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestPrefixes() { 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int row = 0; 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int n; 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *loc, *expected; 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char * const testData[][7] = 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NULL canonicalize() column means "expect same as getName()" */ 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"sv", "", "FI", "AL", "sv-fi-al", "sv_FI_AL", NULL}, 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en", "", "GB", "", "en-gb", "en_GB", NULL}, 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"i-hakka", "", "MT", "XEMXIJA", "i-hakka_MT_XEMXIJA", "i-hakka_MT_XEMXIJA", NULL}, 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"i-hakka", "", "CN", "", "i-hakka_CN", "i-hakka_CN", NULL}, 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"i-hakka", "", "MX", "", "I-hakka_MX", "i-hakka_MX", NULL}, 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"x-klingon", "", "US", "SANJOSE", "X-KLINGON_us_SANJOSE", "x-klingon_US_SANJOSE", NULL}, 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"zh", "Hans", "", "PINYIN", "zh-Hans-pinyin", "zh_Hans__PINYIN", "zh_Hans@collation=pinyin"}, 41254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"hy", "", "", "AREVMDA", "hy_AREVMDA", "hy__AREVMDA", NULL}, 41327f654740f2a26ad62a5c155af9199af9e69b889claireho 41454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"de", "", "", "1901", "de-1901", "de__1901", NULL}, 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"mr", "", "", "", "mr.utf8", "mr.utf8", "mr"}, 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"de", "", "TV", "", "de-tv.koi8r", "de_TV.koi8r", "de_TV"}, 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"x-piglatin", "", "ML", "", "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML"}, /* Multibyte English */ 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"i-cherokee", "","US", "", "i-Cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US"}, 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"x-filfli", "", "MT", "FILFLA", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA"}, 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"no", "", "NO", "NY", "no-no-ny.utf32@B", "no_NO_NY.utf32@B", "no_NO_NY_B"}, 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"no", "", "NO", "", "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B"}, 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"no", "", "", "NY", "no__ny", "no__NY", NULL}, 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"no", "", "", "", "no@ny", "no@ny", "no__NY"}, 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"el", "Latn", "", "", "el-latn", "el_Latn", NULL}, 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en", "Cyrl", "RU", "", "en-cyrl-ru", "en_Cyrl_RU", NULL}, 426c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"zh", "Hant", "TW", "STROKE", "zh-hant_TW_STROKE", "zh_Hant_TW_STROKE", "zh_Hant_TW@collation=stroke"}, 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"qq", "Qqqq", "QQ", "QQ", "qq_Qqqq_QQ_QQ", "qq_Qqqq_QQ_QQ", NULL}, 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"qq", "Qqqq", "", "QQ", "qq_Qqqq__QQ", "qq_Qqqq__QQ", NULL}, 429103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"ab", "Cdef", "GH", "IJ", "ab_cdef_gh_ij", "ab_Cdef_GH_IJ", NULL}, /* total garbage */ 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {NULL,NULL,NULL,NULL,NULL,NULL,NULL} 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char * const testTitles[] = { 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uloc_getLanguage()", 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uloc_getScript()", 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uloc_getCountry()", 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uloc_getVariant()", 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "name", 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uloc_getName()", 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "uloc_canonicalize()" 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buf[PREFIXBUFSIZ]; 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len; 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(row=0;testData[row][0] != NULL;row++) { 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loc = testData[row][NAME]; 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Test #%d: %s\n", row, loc); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err = U_ZERO_ERROR; 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len=0; 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf[0]=0; 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(n=0;n<=(NAME+2);n++) { 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(n==NAME) continue; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(len=0;len<PREFIXBUFSIZ;len++) { 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf[len] = '%'; /* Set a tripwire.. */ 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = 0; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(n) { 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case LANG: 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_getLanguage(loc, buf, PREFIXBUFSIZ, &err); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case SCRIPT: 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_getScript(loc, buf, PREFIXBUFSIZ, &err); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case CTRY: 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_getCountry(loc, buf, PREFIXBUFSIZ, &err); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case VAR: 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_getVariant(loc, buf, PREFIXBUFSIZ, &err); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case NAME+1: 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_getName(loc, buf, PREFIXBUFSIZ, &err); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case NAME+2: 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_canonicalize(loc, buf, PREFIXBUFSIZ, &err); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(buf, "**??"); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len=4; 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(err)) { 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("#%d: %s on %s: err %s\n", 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru row, testTitles[n], loc, u_errorName(err)); 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("#%d: %s on %s: -> [%s] (length %d)\n", 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru row, testTitles[n], loc, buf, len); 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(len != (int32_t)strlen(buf)) { 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("#%d: %s on %s: -> [%s] (length returned %d, actual %d!)\n", 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru row, testTitles[n], loc, buf, len, strlen(buf)+1); 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* see if they smashed something */ 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(buf[len+1] != '%') { 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("#%d: %s on %s: -> [%s] - wrote [%X] out ofbounds!\n", 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru row, testTitles[n], loc, buf, buf[len+1]); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = testData[row][n]; 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected == NULL && n == (NAME+2)) { 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NULL expected canonicalize() means "expect same as getName()" */ 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = testData[row][NAME+1]; 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(buf, expected)) { 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("#%d: %s on %s: -> [%s] (expected '%s'!)\n", 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru row, testTitles[n], loc, buf, expected); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* testing uloc_getISO3Language(), uloc_getISO3Country(), */ 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSimpleResourceInfo() { 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* testLocale = 0; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* expected = 0; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* temp; 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char temp2[20]; 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale=(char*)malloc(sizeof(char) * 1); 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected=(UChar*)malloc(sizeof(UChar) * 1); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setUpDataTable(); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing getISO3Language and getISO3Country\n"); 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < LOCALE_SIZE; i++) { 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale=(char*)realloc(testLocale, sizeof(char) * (u_strlen(dataTable[NAME][i])+1)); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(testLocale, dataTable[NAME][i]); 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing %s ......\n", testLocale); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp=uloc_getISO3Language(testLocale); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected=(UChar*)realloc(expected, sizeof(UChar) * (strlen(temp) + 1)); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected,temp); 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != u_strcmp(expected, dataTable[LANG3][i])) { 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" ISO-3 language code mismatch: %s versus %s\n", austrdup(expected), 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(dataTable[LANG3][i])); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp=uloc_getISO3Country(testLocale); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected=(UChar*)realloc(expected, sizeof(UChar) * (strlen(temp) + 1)); 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected,temp); 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != u_strcmp(expected, dataTable[CTRY3][i])) { 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" ISO-3 Country code mismatch: %s versus %s\n", austrdup(expected), 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(dataTable[CTRY3][i])); 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(temp2, "%x", (int)uloc_getLCID(testLocale)); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(temp2, rawData2[LCID][i]) != 0) { 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("LCID mismatch: %s versus %s\n", temp2 , rawData2[LCID][i]); 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(expected); 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testLocale); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cleanUpDataTable(); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 575b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* if len < 0, we convert until we hit UChar 0x0000, which is not output. will add trailing null 576b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * if there's room but won't be included in result. result < 0 indicates an error. 577b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Returns the number of chars written (not those that would be written if there's enough room.*/ 578b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic int32_t UCharsToEscapedAscii(const UChar* utext, int32_t len, char* resultChars, int32_t buflen) { 579b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const struct { 580b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char escapedChar; 581b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar sourceVal; 582b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } ESCAPE_MAP[] = { 583b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*a*/ {'a', 0x07}, 584b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*b*/ {'b', 0x08}, 585b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*e*/ {'e', 0x1b}, 586b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*f*/ {'f', 0x0c}, 587b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*n*/ {'n', 0x0a}, 588b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*r*/ {'r', 0x0d}, 589b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*t*/ {'t', 0x09}, 590b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*v*/ {'v', 0x0b} 591b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 592b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const int32_t ESCAPE_MAP_LENGTH = sizeof(ESCAPE_MAP)/sizeof(ESCAPE_MAP[0]); 593b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char HEX_DIGITS[] = { 594b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho '0', '1', '2', '3', '4', '5', '6', '7', 595b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' 596b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 597b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t i, j; 598b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t resultLen = 0; 599b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t limit = len<0 ? buflen : len; /* buflen is long enough to hit the buffer limit */ 600b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t escapeLimit1 = buflen-2; 601b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t escapeLimit2 = buflen-6; 602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar uc; 603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(utext==NULL || resultChars==NULL || buflen<0) { 605b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return -1; 606b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 607b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 608b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(i=0;i<limit && resultLen<buflen;++i) { 609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uc=utext[i]; 610b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(len<0 && uc==0) { 611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(uc<0x20) { 614b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(j=0;j<ESCAPE_MAP_LENGTH && uc!=ESCAPE_MAP[j].sourceVal;j++) { 615b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(j<ESCAPE_MAP_LENGTH) { 617b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(resultLen>escapeLimit1) { 618b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 619b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 620b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]='\\'; 621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]=ESCAPE_MAP[j].escapedChar; 622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(uc<0x7f) { 625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho u_austrncpy(resultChars + resultLen, &uc, 1); 626b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultLen++; 627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 629b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 630b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(resultLen>escapeLimit2) { 631b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 634b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* have to escape the uchar */ 635b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]='\\'; 636b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]='u'; 637b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]=HEX_DIGITS[(uc>>12)&0xff]; 638b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]=HEX_DIGITS[(uc>>8)&0xff]; 639b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]=HEX_DIGITS[(uc>>4)&0xff]; 640b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen++]=HEX_DIGITS[uc&0xff]; 641b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 642b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 643b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(resultLen<buflen) { 644b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars[resultLen] = 0; 645b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 646b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 647b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return resultLen; 648b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 649b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Jitterbug 2439 -- markus 20030425 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The lookup of display names must not fall back through the default 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * locale because that yields useless results. 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDisplayNames() 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[100]; 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode=U_ZERO_ERROR; 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing getDisplayName for different locales\n"); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" In locale = en_US...\n"); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames("en_US", DLANG_EN); 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" In locale = fr_FR....\n"); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames("fr_FR", DLANG_FR); 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" In locale = ca_ES...\n"); 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames("ca_ES", DLANG_CA); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" In locale = gr_EL..\n"); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doTestDisplayNames("el_GR", DLANG_EL); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test that the default locale has a display name for its own language */ 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 674f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length=uloc_getDisplayLanguage(NULL, NULL, buffer, UPRV_LENGTHOF(buffer), &errorCode); 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode) || (length<=3 && buffer[0]<=0x7f)) { 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* check <=3 to reject getting the language code as a display name */ 6776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("unable to get a display string for the language of the default locale - %s (Are you missing data?)\n", u_errorName(errorCode)); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test that we get the language code itself for an unknown language, and a default warning */ 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 682f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length=uloc_getDisplayLanguage("qq", "rr", buffer, UPRV_LENGTHOF(buffer), &errorCode); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_USING_DEFAULT_WARNING || length!=2 || buffer[0]!=0x71 || buffer[1]!=0x71) { 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error getting the display string for an unknown language - %s\n", u_errorName(errorCode)); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test that we get a default warning for a display name where one component is unknown (4255) */ 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 689f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length=uloc_getDisplayName("qq_US_POSIX", "en_US", buffer, UPRV_LENGTHOF(buffer), &errorCode); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_USING_DEFAULT_WARNING) { 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error getting the display name for a locale with an unknown language - %s\n", u_errorName(errorCode)); 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char *aLocale = "es@collation=traditional;calendar=japanese"; 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char *testL[] = { "en_US", 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_FR", 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES", 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "el_GR" }; 701b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char *expect[] = { "Spanish (Calendar=Japanese Calendar, Sort Order=Traditional Sort Order)", /* note sorted order of keywords */ 702f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "espagnol (calendrier=calendrier japonais, ordre de tri=Ordre traditionnel)", 70359d709d503bab6e2b61931737e662dd293b40578ccornelius "espanyol (calendari=calendari japon\\u00e8s, ordenaci\\u00f3=ordre tradicional)", 70459d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u0397\\u03bc\\u03b5\\u03c1\\u03bf\\u03bb\\u03cc\\u03b3\\u03b9\\u03bf=\\u0399\\u03b1\\u03c0\\u03c9\\u03bd\\u03b9\\u03ba\\u03cc \\u03b7\\u03bc\\u03b5\\u03c1\\u03bf\\u03bb\\u03cc\\u03b3\\u03b9\\u03bf, \\u03a3\\u03b5\\u03b9\\u03c1\\u03ac \\u03c4\\u03b1\\u03be\\u03b9\\u03bd\\u03cc\\u03bc\\u03b7\\u03c3\\u03b7\\u03c2=\\u03a0\\u03b1\\u03c1\\u03b1\\u03b4\\u03bf\\u03c3\\u03b9\\u03b1\\u03ba\\u03ae \\u03c3\\u03b5\\u03b9\\u03c1\\u03ac \\u03c4\\u03b1\\u03be\\u03b9\\u03bd\\u03cc\\u03bc\\u03b7\\u03c3\\u03b7\\u03c2)" }; 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *expectBuffer; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 707f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(i=0;i<UPRV_LENGTHOF(testL);i++) { 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode = U_ZERO_ERROR; 709f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius uloc_getDisplayName(aLocale, testL[i], buffer, UPRV_LENGTHOF(buffer), &errorCode); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL in uloc_getDisplayName(%s,%s,..) -> %s\n", aLocale, testL[i], u_errorName(errorCode)); 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectBuffer = CharsToUChars(expect[i]); 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(buffer,expectBuffer)) { 7156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL in uloc_getDisplayName(%s,%s,..) expected '%s' got '%s' (Are you missing data?)\n", aLocale, testL[i], expect[i], austrdup(buffer)); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("pass in uloc_getDisplayName(%s,%s,..) got '%s'\n", aLocale, testL[i], expect[i]); 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(expectBuffer); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 723b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 724b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* test that we properly preflight and return data when there's a non-default pattern, 725b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho see ticket #8262. */ 726b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 727b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t i; 728b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char *locale="az_Cyrl"; 729b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char *displayLocale="ja"; 730b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char *expectedChars = 73159d709d503bab6e2b61931737e662dd293b40578ccornelius "\\u30a2\\u30bc\\u30eb\\u30d0\\u30a4\\u30b8\\u30e3\\u30f3\\u8a9e " 732b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "(\\u30ad\\u30ea\\u30eb\\u6587\\u5b57)"; 733b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode ec=U_ZERO_ERROR; 734b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar result[256]; 735b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t len; 736b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t preflightLen=uloc_getDisplayName(locale, displayLocale, NULL, 0, &ec); 737b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* inconvenient semantics when preflighting, this condition is expected... */ 738b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(ec==U_BUFFER_OVERFLOW_ERROR) { 739b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ec=U_ZERO_ERROR; 740b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 741f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius len=uloc_getDisplayName(locale, displayLocale, result, UPRV_LENGTHOF(result), &ec); 742b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(ec)) { 743b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("uloc_getDisplayName(%s, %s...) returned error: %s", 744b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale, displayLocale, u_errorName(ec)); 745b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 746b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar *expected=CharsToUChars(expectedChars); 747b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t expectedLen=u_strlen(expected); 748b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 749b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(len!=expectedLen) { 750b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("uloc_getDisplayName(%s, %s...) returned string of length %d, expected length %d", 751b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale, displayLocale, len, expectedLen); 752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(preflightLen!=expectedLen) { 753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("uloc_getDisplayName(%s, %s...) returned preflight length %d, expected length %d", 754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale, displayLocale, preflightLen, expectedLen); 755b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(u_strncmp(result, expected, len)) { 756b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t cap=len*6+1; /* worst case + space for trailing null */ 757b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char* resultChars=(char*)malloc(cap); 758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t resultCharsLen=UCharsToEscapedAscii(result, len, resultChars, cap); 759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(resultCharsLen<0 || resultCharsLen<cap-1) { 760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("uloc_getDisplayName(%s, %s...) mismatch", locale, displayLocale); 761b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 762b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("uloc_getDisplayName(%s, %s...) returned '%s' but expected '%s'", 763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale, displayLocale, resultChars, expectedChars); 764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho free(resultChars); 766b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho resultChars=NULL; 767b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 768b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* test all buffer sizes */ 769b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(i=len+1;i>=0;--i) { 770b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho len=uloc_getDisplayName(locale, displayLocale, result, i, &ec); 771b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(ec==U_BUFFER_OVERFLOW_ERROR) { 772b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ec=U_ZERO_ERROR; 773b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 774b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(ec)) { 775b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("using buffer of length %d returned error %s", i, u_errorName(ec)); 776b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 777b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 778b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(len!=expectedLen) { 779b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("with buffer of length %d, expected length %d but got %d", i, expectedLen, len); 780b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 781b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 782b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* There's no guarantee about what's in the buffer if we've overflowed, in particular, 783b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * we don't know that it's been filled, so no point in checking. */ 784b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 785b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 786b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 787b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho free(expected); 788b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 789b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test for uloc_getAvialable() and uloc_countAvilable()*/ 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetAvailableLocales() 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locList; 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t locCount,i; 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing the no of avialable locales\n"); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locCount=uloc_countAvailable(); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (locCount == 0) 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("countAvailable() returned an empty list!\n"); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* use something sensible w/o hardcoding the count */ 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if(locCount < 0){ 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("countAvailable() returned a wrong value!= %d\n", locCount); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_info("Number of locales returned = %d\n", locCount); 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<locCount;i++){ 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locList=uloc_getAvailable(i); 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" %s\n", locList); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test for u_getDataDirectory, u_setDataDirectory, uloc_getISO3Language */ 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDataDirectory() 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char oldDirectory[512]; 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *temp,*testValue1,*testValue2,*testValue3; 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char path[40] ="d:\\icu\\source\\test\\intltest" U_FILE_SEP_STRING; /*give the required path */ 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing getDataDirectory()\n"); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = u_getDataDirectory(); 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(oldDirectory, temp); 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testValue1=uloc_getISO3Language("en_US"); 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("first fetch of language retrieved %s\n", testValue1); 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(testValue1,"eng")){ 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Initial check of ISO3 language failed: expected \"eng\", got %s \n", testValue1); 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*defining the path for DataDirectory */ 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing setDataDirectory\n"); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_setDataDirectory( path ); 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(path, u_getDataDirectory())==0) 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("setDataDirectory working fine\n"); 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in setDataDirectory. Directory not set correctly - came back as [%s], expected [%s]\n", u_getDataDirectory(), path); 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testValue2=uloc_getISO3Language("en_US"); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("second fetch of language retrieved %s \n", testValue2); 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_setDataDirectory(oldDirectory); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testValue3=uloc_getISO3Language("en_US"); 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("third fetch of language retrieved %s \n", testValue3); 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != strcmp(testValue3,"eng")) { 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("get/setDataDirectory() failed: expected \"eng\", got \" %s \" \n", testValue3); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*=========================================================== */ 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar _NUL=0; 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void doTestDisplayNames(const char* displayLocale, int32_t compareIndex) 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t maxresultsize; 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *testLocale; 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *testLang = 0; 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *testScript = 0; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *testCtry = 0; 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *testVar = 0; 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *testName = 0; 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* expectedLang = 0; 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* expectedScript = 0; 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* expectedCtry = 0; 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* expectedVar = 0; 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* expectedName = 0; 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerusetUpDataTable(); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<LOCALE_SIZE; ++i) 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale=rawData2[NAME][i]; 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing..... %s\n", testLocale); 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=0; 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=uloc_getDisplayLanguage(testLocale, displayLocale, NULL, maxresultsize, &status); 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLang=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1)); 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayLanguage(testLocale, displayLocale, testLang, maxresultsize + 1, &status); 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLang=&_NUL; 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getDisplayLanguage() %s\n", myErrorName(status)); 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=0; 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=uloc_getDisplayScript(testLocale, displayLocale, NULL, maxresultsize, &status); 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testScript=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1)); 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayScript(testLocale, displayLocale, testScript, maxresultsize + 1, &status); 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testScript=&_NUL; 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getDisplayScript() %s\n", myErrorName(status)); 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=0; 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=uloc_getDisplayCountry(testLocale, displayLocale, NULL, maxresultsize, &status); 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCtry=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1)); 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayCountry(testLocale, displayLocale, testCtry, maxresultsize + 1, &status); 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCtry=&_NUL; 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getDisplayCountry() %s\n", myErrorName(status)); 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=0; 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=uloc_getDisplayVariant(testLocale, displayLocale, NULL, maxresultsize, &status); 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testVar=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1)); 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayVariant(testLocale, displayLocale, testVar, maxresultsize + 1, &status); 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testVar=&_NUL; 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getDisplayVariant() %s\n", myErrorName(status)); 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=0; 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru maxresultsize=uloc_getDisplayName(testLocale, displayLocale, NULL, maxresultsize, &status); 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testName=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1)); 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayName(testLocale, displayLocale, testName, maxresultsize + 1, &status); 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testName=&_NUL; 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getDisplayName() %s\n", myErrorName(status)); 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLang=dataTable[compareIndex][i]; 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strlen(expectedLang)== 0) 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLang=dataTable[DLANG_EN][i]; 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedScript=dataTable[compareIndex + 1][i]; 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strlen(expectedScript)== 0) 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedScript=dataTable[DSCRIPT_EN][i]; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedCtry=dataTable[compareIndex + 2][i]; 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strlen(expectedCtry)== 0) 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedCtry=dataTable[DCTRY_EN][i]; 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedVar=dataTable[compareIndex + 3][i]; 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strlen(expectedVar)== 0) 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedVar=dataTable[DVAR_EN][i]; 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedName=dataTable[compareIndex + 4][i]; 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strlen(expectedName) == 0) 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedName=dataTable[DNAME_EN][i]; 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 !=u_strcmp(testLang,expectedLang)) { 9956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err(" Display Language mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testLang), austrdup(expectedLang), displayLocale); 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != u_strcmp(testScript,expectedScript)) { 9996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err(" Display Script mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testScript), austrdup(expectedScript), displayLocale); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != u_strcmp(testCtry,expectedCtry)) { 10036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err(" Display Country mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testCtry), austrdup(expectedCtry), displayLocale); 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (0 != u_strcmp(testVar,expectedVar)) { 10076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err(" Display Variant mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testVar), austrdup(expectedVar), displayLocale); 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(0 != u_strcmp(testName, expectedName)) { 10116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err(" Display Name mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testName), austrdup(expectedName), displayLocale); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testName!=&_NUL) { 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testName); 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testLang!=&_NUL) { 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testLang); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testScript!=&_NUL) { 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testScript); 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testCtry!=&_NUL) { 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testCtry); 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(testVar!=&_NUL) { 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testVar); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerucleanUpDataTable(); 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103359d709d503bab6e2b61931737e662dd293b40578ccornelius/*------------------------------ 103459d709d503bab6e2b61931737e662dd293b40578ccornelius * TestDisplayNameBrackets 103559d709d503bab6e2b61931737e662dd293b40578ccornelius */ 103659d709d503bab6e2b61931737e662dd293b40578ccornelius 103759d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct { 103859d709d503bab6e2b61931737e662dd293b40578ccornelius const char * displayLocale; 103959d709d503bab6e2b61931737e662dd293b40578ccornelius const char * namedRegion; 104059d709d503bab6e2b61931737e662dd293b40578ccornelius const char * namedLocale; 104159d709d503bab6e2b61931737e662dd293b40578ccornelius const char * regionName; 104259d709d503bab6e2b61931737e662dd293b40578ccornelius const char * localeName; 104359d709d503bab6e2b61931737e662dd293b40578ccornelius} DisplayNameBracketsItem; 104459d709d503bab6e2b61931737e662dd293b40578ccornelius 104559d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic const DisplayNameBracketsItem displayNameBracketsItems[] = { 104659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", "CC", "en_CC", "Cocos (Keeling) Islands", "English (Cocos [Keeling] Islands)" }, 104759d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", "MM", "my_MM", "Myanmar (Burma)", "Burmese (Myanmar [Burma])" }, 104859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", "MM", "my_Mymr_MM", "Myanmar (Burma)", "Burmese (Myanmar, Myanmar [Burma])" }, 104959d709d503bab6e2b61931737e662dd293b40578ccornelius { "zh", "CC", "en_CC", "\\u79D1\\u79D1\\u65AF\\uFF08\\u57FA\\u6797\\uFF09\\u7FA4\\u5C9B", "\\u82F1\\u6587\\uFF08\\u79D1\\u79D1\\u65AF\\uFF3B\\u57FA\\u6797\\uFF3D\\u7FA4\\u5C9B\\uFF09" }, 105059d709d503bab6e2b61931737e662dd293b40578ccornelius { "zh", "CG", "fr_CG", "\\u521A\\u679C\\uFF08\\u5E03\\uFF09", "\\u6CD5\\u6587\\uFF08\\u521A\\u679C\\uFF3B\\u5E03\\uFF3D\\uFF09" }, 105159d709d503bab6e2b61931737e662dd293b40578ccornelius { NULL, NULL, NULL, NULL, NULL } 105259d709d503bab6e2b61931737e662dd293b40578ccornelius}; 105359d709d503bab6e2b61931737e662dd293b40578ccornelius 105459d709d503bab6e2b61931737e662dd293b40578ccorneliusenum { kDisplayNameBracketsMax = 128 }; 105559d709d503bab6e2b61931737e662dd293b40578ccornelius 105659d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void TestDisplayNameBrackets() 105759d709d503bab6e2b61931737e662dd293b40578ccornelius{ 105859d709d503bab6e2b61931737e662dd293b40578ccornelius const DisplayNameBracketsItem * itemPtr = displayNameBracketsItems; 105959d709d503bab6e2b61931737e662dd293b40578ccornelius for (; itemPtr->displayLocale != NULL; itemPtr++) { 106059d709d503bab6e2b61931737e662dd293b40578ccornelius ULocaleDisplayNames * uldn; 106159d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status; 106259d709d503bab6e2b61931737e662dd293b40578ccornelius UChar expectRegionName[kDisplayNameBracketsMax]; 106359d709d503bab6e2b61931737e662dd293b40578ccornelius UChar expectLocaleName[kDisplayNameBracketsMax]; 106459d709d503bab6e2b61931737e662dd293b40578ccornelius UChar getName[kDisplayNameBracketsMax]; 106559d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t ulen; 106659d709d503bab6e2b61931737e662dd293b40578ccornelius 106759d709d503bab6e2b61931737e662dd293b40578ccornelius (void) u_unescape(itemPtr->regionName, expectRegionName, kDisplayNameBracketsMax); 106859d709d503bab6e2b61931737e662dd293b40578ccornelius (void) u_unescape(itemPtr->localeName, expectLocaleName, kDisplayNameBracketsMax); 106959d709d503bab6e2b61931737e662dd293b40578ccornelius 107059d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 107159d709d503bab6e2b61931737e662dd293b40578ccornelius ulen = uloc_getDisplayCountry(itemPtr->namedLocale, itemPtr->displayLocale, getName, kDisplayNameBracketsMax, &status); 107259d709d503bab6e2b61931737e662dd293b40578ccornelius if ( U_FAILURE(status) || u_strcmp(getName, expectRegionName) != 0 ) { 107359d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("uloc_getDisplayCountry for displayLocale %s and namedLocale %s returns unexpected name or status %s\n", itemPtr->displayLocale, itemPtr->namedLocale, myErrorName(status)); 107459d709d503bab6e2b61931737e662dd293b40578ccornelius } 107559d709d503bab6e2b61931737e662dd293b40578ccornelius 107659d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 107759d709d503bab6e2b61931737e662dd293b40578ccornelius ulen = uloc_getDisplayName(itemPtr->namedLocale, itemPtr->displayLocale, getName, kDisplayNameBracketsMax, &status); 107859d709d503bab6e2b61931737e662dd293b40578ccornelius if ( U_FAILURE(status) || u_strcmp(getName, expectLocaleName) != 0 ) { 107959d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("uloc_getDisplayName for displayLocale %s and namedLocale %s returns unexpected name or status %s\n", itemPtr->displayLocale, itemPtr->namedLocale, myErrorName(status)); 108059d709d503bab6e2b61931737e662dd293b40578ccornelius } 108159d709d503bab6e2b61931737e662dd293b40578ccornelius 108259d709d503bab6e2b61931737e662dd293b40578ccornelius#if !UCONFIG_NO_FORMATTING 108359d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 108459d709d503bab6e2b61931737e662dd293b40578ccornelius uldn = uldn_open(itemPtr->displayLocale, ULDN_STANDARD_NAMES, &status); 108559d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_SUCCESS(status)) { 108659d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 108759d709d503bab6e2b61931737e662dd293b40578ccornelius ulen = uldn_regionDisplayName(uldn, itemPtr->namedRegion, getName, kDisplayNameBracketsMax, &status); 108859d709d503bab6e2b61931737e662dd293b40578ccornelius if ( U_FAILURE(status) || u_strcmp(getName, expectRegionName) != 0 ) { 108959d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("uldn_regionDisplayName for displayLocale %s and namedRegion %s returns unexpected name or status %s\n", itemPtr->displayLocale, itemPtr->namedRegion, myErrorName(status)); 109059d709d503bab6e2b61931737e662dd293b40578ccornelius } 109159d709d503bab6e2b61931737e662dd293b40578ccornelius 109259d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 109359d709d503bab6e2b61931737e662dd293b40578ccornelius ulen = uldn_localeDisplayName(uldn, itemPtr->namedLocale, getName, kDisplayNameBracketsMax, &status); 109459d709d503bab6e2b61931737e662dd293b40578ccornelius if ( U_FAILURE(status) || u_strcmp(getName, expectLocaleName) != 0 ) { 109559d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("uldn_localeDisplayName for displayLocale %s and namedLocale %s returns unexpected name or status %s\n", itemPtr->displayLocale, itemPtr->namedLocale, myErrorName(status)); 109659d709d503bab6e2b61931737e662dd293b40578ccornelius } 109759d709d503bab6e2b61931737e662dd293b40578ccornelius 109859d709d503bab6e2b61931737e662dd293b40578ccornelius uldn_close(uldn); 109959d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 110059d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("uldn_open fails for displayLocale %s, status=%s\n", itemPtr->displayLocale, u_errorName(status)); 110159d709d503bab6e2b61931737e662dd293b40578ccornelius } 110259d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 1103fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (void)ulen; /* Suppress variable not used warning */ 110459d709d503bab6e2b61931737e662dd293b40578ccornelius } 110559d709d503bab6e2b61931737e662dd293b40578ccornelius} 110659d709d503bab6e2b61931737e662dd293b40578ccornelius 110759d709d503bab6e2b61931737e662dd293b40578ccornelius/*------------------------------ 110859d709d503bab6e2b61931737e662dd293b40578ccornelius * TestISOFunctions 110959d709d503bab6e2b61931737e662dd293b40578ccornelius */ 111059d709d503bab6e2b61931737e662dd293b40578ccornelius 111154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test for uloc_getISOLanguages, uloc_getISOCountries */ 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestISOFunctions() 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* const* str=uloc_getISOLanguages(); 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* const* str1=uloc_getISOCountries(); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* test; 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *key = NULL; 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count = 0, skipped = 0; 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expect; 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *res; 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *subRes; 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test getISOLanguages*/ 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*str=uloc_getISOLanguages(); */ 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing ISO Languages: \n"); 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* use structLocale - this data is no longer in root */ 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res = ures_openDirect(loadTestData(&status), "structLocale", &status); 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru subRes = ures_getByKey(res, "Languages", NULL, &status); 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1133c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_data_err("There is an error in structLocale's ures_getByKey(\"Languages\"), status=%s\n", u_errorName(status)); 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect = ures_getSize(subRes); 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(count = 0; *(str+count) != 0; count++) 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru key = NULL; 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = *(str+count); 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do { 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Skip over language tags. This API only returns language codes. */ 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru skipped += (key != NULL); 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_getNextString(subRes, NULL, &key, &status); 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (key != NULL && strchr(key, '_')); 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key == NULL) 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO: Consider removing sh, which is deprecated */ 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(key,"root") == 0 || strcmp(key,"Fallback") == 0 || strcmp(key,"sh") == 0) { 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_getNextString(subRes, NULL, &key, &status); 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru skipped++; 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_CHARSET_FAMILY==U_ASCII_FAMILY 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* This code only works on ASCII machines where the keys are stored in ASCII order */ 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(test,key)) { 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* The first difference usually implies the place where things get out of sync */ 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL Language diff at offset %d, \"%s\" != \"%s\"\n", count, test, key); 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"in")) 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOLanguages() has obsolete language code %s\n", test); 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"iw")) 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOLanguages() has obsolete language code %s\n", test); 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"ji")) 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOLanguages() has obsolete language code %s\n", test); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"jw")) 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOLanguages() has obsolete language code %s\n", test); 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"sh")) 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOLanguages() has obsolete language code %s\n", test); 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect -= skipped; /* Ignore the skipped resources from structLocale */ 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(count!=expect) { 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("There is an error in getISOLanguages, got %d, expected %d (as per structLocale)\n", count, expect); 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru subRes = ures_getByKey(res, "Countries", subRes, &status); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing ISO Countries"); 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru skipped = 0; 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect = ures_getSize(subRes) - 1; /* Skip ZZ */ 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(count = 0; *(str1+count) != 0; count++) 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru key = NULL; 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = *(str1+count); 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do { 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Skip over numeric UN tags. This API only returns ISO-3166 codes. */ 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru skipped += (key != NULL); 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_getNextString(subRes, NULL, &key, &status); 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (key != NULL && strlen(key) != 2); 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key == NULL) 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO: Consider removing CS, which is deprecated */ 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while(strcmp(key,"QO") == 0 || strcmp(key,"QU") == 0 || strcmp(key,"CS") == 0) { 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_getNextString(subRes, NULL, &key, &status); 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru skipped++; 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_CHARSET_FAMILY==U_ASCII_FAMILY 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* This code only works on ASCII machines where the keys are stored in ASCII order */ 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(test,key)) { 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* The first difference usually implies the place where things get out of sync */ 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL Country diff at offset %d, \"%s\" != \"%s\"\n", count, test, key); 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"FX")) 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOCountries() has obsolete country code %s\n", test); 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"YU")) 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOCountries() has obsolete country code %s\n", test); 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!strcmp(test,"ZR")) 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL getISOCountries() has obsolete country code %s\n", test); 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_getNextString(subRes, NULL, &key, &status); 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(key, "ZZ") != 0) { 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ZZ was expected to be the last entry in structLocale, but got %s\n", key); 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* On EBCDIC machines, the numbers are sorted last. Account for those in the skipped value too. */ 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru key = NULL; 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do { 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Skip over numeric UN tags. uloc_getISOCountries only returns ISO-3166 codes. */ 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru skipped += (key != NULL); 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_getNextString(subRes, NULL, &key, &status); 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && key != NULL && strlen(key) != 2); 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect -= skipped; /* Ignore the skipped resources from structLocale */ 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(count!=expect) 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("There is an error in getISOCountries, got %d, expected %d \n", count, expect); 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(subRes); 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(res); 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 124354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void setUpDataTable() 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i,j; 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable = (UChar***)(calloc(sizeof(UChar**),LOCALE_INFO_SIZE)); 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < LOCALE_INFO_SIZE; i++) { 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable[i] = (UChar**)(calloc(sizeof(UChar*),LOCALE_SIZE)); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j = 0; j < LOCALE_SIZE; j++){ 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable[i][j] = CharsToUChars(rawData2[i][j]); 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void cleanUpDataTable() 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i,j; 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(dataTable != NULL) { 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<LOCALE_INFO_SIZE; i++) { 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j = 0; j < LOCALE_SIZE; j++) { 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(dataTable[i][j]); 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(dataTable[i]); 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(dataTable); 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataTable = NULL; 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4011756 4011380 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestISO3Fallback() 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* test="xx_YY"; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char * result; 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = uloc_getISO3Language(test); 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Conform to C API usage */ 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!result || (result[0] != 0)) 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("getISO3Language() on xx_YY returned %s instead of \"\""); 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = uloc_getISO3Country(test); 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!result || (result[0] != 0)) 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("getISO3Country() on xx_YY returned %s instead of \"\""); 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4118587 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSimpleDisplayNames() 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru This test is different from TestDisplayNames because TestDisplayNames checks 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fallback behavior, combination of language and country names to form locale 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru names, and other stuff like that. This test just checks specific language 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru and country codes to make sure we have the correct names for them. 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char languageCodes[] [4] = { "he", "id", "iu", "ug", "yi", "za", "419" }; 13078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const char* languageNames [] = { "Hebrew", "Indonesian", "Inuktitut", "Uyghur", "Yiddish", 1308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zhuang", "419" }; 1309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* inLocale [] = { "en_US", "zh_Hant"}; 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t localeIndex = 0; 1314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (i = 0; i < 7; i++) { 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *testLang=0; 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *expectedLang=0; 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int size=0; 1318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (i == 6) { 1320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru localeIndex = 1; /* Use the second locale for the rest of the test. */ 1321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru size=uloc_getDisplayLanguage(languageCodes[i], inLocale[localeIndex], NULL, size, &status); 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) { 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLang=(UChar*)malloc(sizeof(UChar) * (size + 1)); 1327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uloc_getDisplayLanguage(languageCodes[i], inLocale[localeIndex], testLang, size + 1, &status); 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedLang=(UChar*)malloc(sizeof(UChar) * (strlen(languageNames[i])+1)); 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expectedLang, languageNames[i]); 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(testLang, expectedLang) != 0) 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Got wrong display name for %s : Expected \"%s\", got \"%s\".\n", 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru languageCodes[i], languageNames[i], austrdup(testLang)); 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testLang); 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(expectedLang); 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4118595 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestUninstalledISO3Names() 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* This test checks to make sure getISO3Language and getISO3Country work right 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru even for locales that are not installed. */ 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char iso2Languages [][4] = { "am", "ba", "fy", "mr", "rn", 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ss", "tw", "zu" }; 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char iso3Languages [][5] = { "amh", "bak", "fry", "mar", "run", 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ssw", "twi", "zul" }; 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char iso2Countries [][6] = { "am_AF", "ba_BW", "fy_KZ", "mr_MO", "rn_MN", 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ss_SB", "tw_TC", "zu_ZW" }; 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char iso3Countries [][4] = { "AFG", "BWA", "KAZ", "MAC", "MNG", 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SLB", "TCA", "ZWE" }; 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 8; i++) { 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *test; 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = uloc_getISO3Language(iso2Languages[i]); 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(test, iso3Languages[i]) !=0 || U_FAILURE(err)) 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got wrong ISO3 code for %s : Expected \"%s\", got \"%s\". %s\n", 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iso2Languages[i], iso3Languages[i], test, myErrorName(err)); 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < 8; i++) { 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *test; 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = uloc_getISO3Country(iso2Countries[i]); 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(test, iso3Countries[i]) !=0 || U_FAILURE(err)) 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got wrong ISO3 code for %s : Expected \"%s\", got \"%s\". %s\n", 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iso2Countries[i], iso3Countries[i], test, myErrorName(err)); 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestVariantParsing() 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* en_US_custom="en_US_De Anza_Cupertino_California_United States_Earth"; 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* dispName="English (United States, DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH)"; 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* dispVar="DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH"; 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* shortVariant="fr_FR_foo"; 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* bogusVariant="fr_FR__foo"; 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* bogusVariant2="fr_FR_foo_"; 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* bogusVariant3="fr_FR__foo_"; 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar displayVar[100]; 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar displayName[100]; 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* got=0; 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t size=0; 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=uloc_getDisplayVariant(en_US_custom, "en_US", NULL, size, &status); 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) { 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru got=(UChar*)realloc(got, sizeof(UChar) * (size+1)); 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayVariant(en_US_custom, "en_US", got, size + 1, &status); 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n"); 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(displayVar, dispVar); 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(got,displayVar)!=0) { 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: getDisplayVariant() Wanted %s, got %s\n", dispVar, austrdup(got)); 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=0; 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=uloc_getDisplayName(en_US_custom, "en_US", NULL, size, &status); 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) { 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru got=(UChar*)realloc(got, sizeof(UChar) * (size+1)); 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayName(en_US_custom, "en_US", got, size + 1, &status); 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n"); 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(displayName, dispName); 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(got,displayName)!=0) { 14176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_USING_DEFAULT_WARNING) { 14186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: getDisplayName() got %s. Perhaps you are missing data?\n", u_errorName(status)); 14196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 14206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("FAIL: getDisplayName() Wanted %s, got %s\n", dispName, austrdup(got)); 14216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=0; 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=uloc_getDisplayVariant(shortVariant, NULL, NULL, size, &status); 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) { 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru got=(UChar*)realloc(got, sizeof(UChar) * (size+1)); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayVariant(shortVariant, NULL, got, size + 1, &status); 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n"); 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(austrdup(got),"FOO")!=0) { 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: getDisplayVariant() Wanted: foo Got: %s\n", austrdup(got)); 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=0; 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=uloc_getDisplayVariant(bogusVariant, NULL, NULL, size, &status); 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) { 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru got=(UChar*)realloc(got, sizeof(UChar) * (size+1)); 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayVariant(bogusVariant, NULL, got, size + 1, &status); 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n"); 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(austrdup(got),"_FOO")!=0) { 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: getDisplayVariant() Wanted: _FOO Got: %s\n", austrdup(got)); 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=0; 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=uloc_getDisplayVariant(bogusVariant2, NULL, NULL, size, &status); 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) { 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru got=(UChar*)realloc(got, sizeof(UChar) * (size+1)); 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayVariant(bogusVariant2, NULL, got, size + 1, &status); 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n"); 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(austrdup(got),"FOO_")!=0) { 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: getDisplayVariant() Wanted: FOO_ Got: %s\n", austrdup(got)); 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=0; 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=uloc_getDisplayVariant(bogusVariant3, NULL, NULL, size, &status); 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) { 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru got=(UChar*)realloc(got, sizeof(UChar) * (size+1)); 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayVariant(bogusVariant3, NULL, got, size + 1, &status); 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n"); 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(austrdup(got),"_FOO_")!=0) { 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: getDisplayVariant() Wanted: _FOO_ Got: %s\n", austrdup(got)); 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(got); 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestObsoleteNames(void) 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buff[256]; 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char locale[9]; 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char lang3[4]; 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char lang[4]; 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char ctry3[4]; 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char ctry[4]; 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } tests[] = 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eng_USA", "eng", "en", "USA", "US" }, 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "kok", "kok", "kok", "", "" }, 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "in", "ind", "in", "", "" }, 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "id", "ind", "id", "", "" }, /* NO aliasing */ 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "sh", "srp", "sh", "", "" }, 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_CS", "", "zz", "SCG", "CS" }, 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_FX", "", "zz", "FXX", "FX" }, 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_RO", "", "zz", "ROU", "RO" }, 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_TP", "", "zz", "TMP", "TP" }, 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_TL", "", "zz", "TLS", "TL" }, 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_ZR", "", "zz", "ZAR", "ZR" }, 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_FXX", "", "zz", "FXX", "FX" }, /* no aliasing. Doesn't go to PS(PSE). */ 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_ROM", "", "zz", "ROU", "RO" }, 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_ROU", "", "zz", "ROU", "RO" }, 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_ZAR", "", "zz", "ZAR", "ZR" }, 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_TMP", "", "zz", "TMP", "TP" }, 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_TLS", "", "zz", "TLS", "TL" }, 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zz_YUG", "", "zz", "YUG", "YU" }, 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mlt_PSE", "mlt", "mt", "PSE", "PS" }, 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "iw", "heb", "iw", "", "" }, 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ji", "yid", "ji", "", "" }, 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "jw", "jaw", "jw", "", "" }, 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "sh", "srp", "sh", "", "" }, 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "", "", "", "", "" } 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;tests[i].locale[0];i++) 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locale; 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale = tests[i].locale; 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("** %s:\n", locale); 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(tests[i].lang3,uloc_getISO3Language(locale))) 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_getISO3Language(%s)==\t\"%s\",\t expected \"%s\"\n", 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale, uloc_getISO3Language(locale), tests[i].lang3); 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" uloc_getISO3Language()==\t\"%s\"\n", 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getISO3Language(locale) ); 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getLanguage(locale, buff, 256, &status); 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error getting language from %s\n", locale); 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(buff,tests[i].lang)) 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_getLanguage(%s)==\t\"%s\"\t expected \"%s\"\n", 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale, buff, tests[i].lang); 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" uloc_getLanguage(%s)==\t%s\n", locale, buff); 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(tests[i].lang3,uloc_getISO3Language(locale))) 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_getISO3Language(%s)==\t\"%s\",\t expected \"%s\"\n", 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale, uloc_getISO3Language(locale), tests[i].lang3); 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" uloc_getISO3Language()==\t\"%s\"\n", 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getISO3Language(locale) ); 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(tests[i].ctry3,uloc_getISO3Country(locale))) 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_getISO3Country(%s)==\t\"%s\",\t expected \"%s\"\n", 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale, uloc_getISO3Country(locale), tests[i].ctry3); 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" uloc_getISO3Country()==\t\"%s\"\n", 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getISO3Country(locale) ); 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getCountry(locale, buff, 256, &status); 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error getting country from %s\n", locale); 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(buff,tests[i].ctry)) 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_getCountry(%s)==\t\"%s\"\t expected \"%s\"\n", 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale, buff, tests[i].ctry); 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" uloc_getCountry(%s)==\t%s\n", locale, buff); 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uloc_getLCID("iw_IL") != uloc_getLCID("he_IL")) { 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("he,iw LCID mismatch: %X versus %X\n", uloc_getLCID("iw_IL"), uloc_getLCID("he_IL")); 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uloc_getLCID("iw") != uloc_getLCID("he")) { 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("he,iw LCID mismatch: %X versus %X\n", uloc_getLCID("iw"), uloc_getLCID("he")); 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 0 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = uloc_getLanguage("kok",NULL,0,&icu_err); 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(icu_err)) 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Got %s trying to do uloc_getLanguage(kok)\n", u_errorName(icu_err)); 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru icu_err = U_ZERO_ERROR; 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getLanguage("kok",r1_buff,12,&icu_err); 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(icu_err)) 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Got %s trying to do uloc_getLanguage(kok, buff)\n", u_errorName(icu_err)); 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru r1_addr = (char *)uloc_getISO3Language("kok"); 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru icu_err = U_ZERO_ERROR; 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(r1_buff,"kok") != 0) 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_getLanguage(kok)==%s not kok\n",r1_buff); 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru line--; 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru r1_addr = (char *)uloc_getISO3Language("in"); 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = uloc_getLanguage(r1_addr,r1_buff,12,&icu_err); 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(r1_buff,"id") != 0) 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf("uloc_getLanguage error (%s)\n",r1_buff); 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru line--; 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru r1_addr = (char *)uloc_getISO3Language("sh"); 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = uloc_getLanguage(r1_addr,r1_buff,12,&icu_err); 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(r1_buff,"sr") != 0) 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf("uloc_getLanguage error (%s)\n",r1_buff); 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru line--; 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru r1_addr = (char *)uloc_getISO3Country("zz_ZR"); 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(p1_buff,"zz_"); 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcat(p1_buff,r1_addr); 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = uloc_getCountry(p1_buff,r1_buff,12,&icu_err); 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(r1_buff,"ZR") != 0) 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf("uloc_getCountry error (%s)\n",r1_buff); 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru line--; 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru r1_addr = (char *)uloc_getISO3Country("zz_FX"); 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(p1_buff,"zz_"); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcat(p1_buff,r1_addr); 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = uloc_getCountry(p1_buff,r1_buff,12,&icu_err); 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(r1_buff,"FX") != 0) 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf("uloc_getCountry error (%s)\n",r1_buff); 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru line--; 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestKeywordVariants(void) 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedLocaleID; 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedLocaleIDNoKeywords; 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedCanonicalID; 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedKeywords[10]; 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t numKeywords; 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode expectedStatus; /* from uloc_openKeywords */ 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@ currency = euro; C o ll A t i o n = Phonebook ; C alen dar = buddhist ", 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@calendar=buddhist;collation=Phonebook;currency=euro", 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE", 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@calendar=buddhist;collation=Phonebook;currency=euro", 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"calendar", "collation", "currency"}, 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_ZERO_ERROR 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@euro", 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@euro", 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE", 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@currency=EUR", 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"","","","","","",""}, 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_INVALID_FORMAT_ERROR /* must have '=' after '@' */ 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE@euro;collation=phonebook", 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE", /* error result; bad format */ 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE", /* error result; bad format */ 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "de_DE", /* error result; bad format */ 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"","","","","","",""}, 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_INVALID_FORMAT_ERROR 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0, j = 0; 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLen = 0; 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[256]; 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UEnumeration *keywords; 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keyCount = 0; 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *keyword = NULL; 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordLen = 0; 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) { 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *buffer = 0; 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keywords = uloc_openKeywords(testCases[i].localeID, &status); 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != testCases[i].expectedStatus) { 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected to uloc_openKeywords(\"%s\") => status %s. Got %s instead\n", 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].localeID, 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(testCases[i].expectedStatus), u_errorName(status)); 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(keywords) { 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((keyCount = uenum_count(keywords, &status)) != testCases[i].numKeywords) { 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected to get %i keywords, got %i\n", testCases[i].numKeywords, keyCount); 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(keyCount) { 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j = 0; 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while((keyword = uenum_next(keywords, &keywordLen, &status))) { 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j++; 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j = 0; 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_reset(keywords, &status); 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while((keyword = uenum_next(keywords, &keywordLen, &status))) { 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru j++; 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_close(keywords); 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLen = uloc_getName(testCases[i].localeID, buffer, 256, &status); 175759d709d503bab6e2b61931737e662dd293b40578ccornelius (void)resultLen; /* Suppress set but not used warning. */ 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(testCases[i].expectedLocaleID, buffer) != 0) { 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected uloc_getName(\"%s\") => \"%s\"; got \"%s\"\n", 1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].localeID, testCases[i].expectedLocaleID, buffer); 1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLen = uloc_canonicalize(testCases[i].localeID, buffer, 256, &status); 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(testCases[i].expectedCanonicalID, buffer) != 0) { 1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected uloc_canonicalize(\"%s\") => \"%s\"; got \"%s\"\n", 1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].localeID, testCases[i].expectedCanonicalID, buffer); 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestKeywordVariantParsing(void) 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *keyword; 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *expectedValue; 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ C o ll A t i o n = Phonebook ", "c o ll a t i o n", "Phonebook" }, 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE", "collation", ""}, 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@collation=PHONEBOOK", "collation", "PHONEBOOK" }, 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@currency = euro; CoLLaTion = PHONEBOOk", "collatiON", "PHONEBOOk" }, 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLen = 0; 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[256]; 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) { 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *buffer = 0; 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLen = uloc_getKeywordValue(testCases[i].localeID, testCases[i].keyword, buffer, 256, &status); 179359d709d503bab6e2b61931737e662dd293b40578ccornelius (void)resultLen; /* Suppress set but not used warning. */ 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(testCases[i].expectedValue, buffer) != 0) { 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected to extract \"%s\" from \"%s\" for keyword \"%s\". Got \"%s\" instead\n", 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].expectedValue, testCases[i].localeID, testCases[i].keyword, buffer); 1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const struct { 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *l; /* locale */ 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *k; /* kw */ 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *v; /* value */ 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *x; /* expected */ 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} kwSetTestCases[] = { 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 1 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US", "calendar", "japanese", "en_US@calendar=japanese" }, 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@", "calendar", "japanese", "en_US@calendar=japanese" }, 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=islamic", "calendar", "japanese", "en_US@calendar=japanese" }, 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=slovakian", "calendar", "gregorian", "en_US@calendar=gregorian" }, /* don't know what this means, but it has the same # of chars as gregorian */ 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=gregorian", "calendar", "japanese", "en_US@calendar=japanese" }, 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de", "Currency", "CHF", "de@currency=CHF" }, 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de", "Currency", "CHF", "de@currency=CHF" }, 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@collation=phonebook", "calendar", "japanese", "en_US@calendar=japanese;collation=phonebook" }, 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=japanese", "collation", "phonebook", "en_US@calendar=japanese;collation=phonebook" }, 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook", "Currency", "CHF", "de@collation=phonebook;currency=CHF" }, 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=gregorian;collation=phonebook", "calendar", "japanese", "en_US@calendar=japanese;collation=phonebook" }, 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=slovakian;collation=phonebook", "calendar", "gregorian", "en_US@calendar=gregorian;collation=phonebook" }, /* don't know what this means, but it has the same # of chars as gregorian */ 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=slovakian;collation=videobook", "collation", "phonebook", "en_US@calendar=slovakian;collation=phonebook" }, /* don't know what this means, but it has the same # of chars as gregorian */ 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US@calendar=islamic;collation=phonebook", "calendar", "japanese", "en_US@calendar=japanese;collation=phonebook" }, 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook", "Currency", "CHF", "de@collation=phonebook;currency=CHF" }, 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 1 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;b=1;c=2;d=3", "c","j", "mt@a=0;b=1;c=j;d=3" }, 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;b=1;c=2;d=3", "x","j", "mt@a=0;b=1;c=2;d=3;x=j" }, 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;b=1;c=2;d=3", "a","f", "mt@a=f;b=1;c=2;d=3" }, 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;aa=1;aaa=3", "a","x", "mt@a=x;aa=1;aaa=3" }, 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;aa=1;aaa=3", "aa","x", "mt@a=0;aa=x;aaa=3" }, 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;aa=1;aaa=3", "aaa","x", "mt@a=0;aa=1;aaa=x" }, 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;aa=1;aaa=3", "a","yy", "mt@a=yy;aa=1;aaa=3" }, 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;aa=1;aaa=3", "aa","yy", "mt@a=0;aa=yy;aaa=3" }, 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mt@a=0;aa=1;aaa=3", "aaa","yy", "mt@a=0;aa=1;aaa=yy" }, 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 1 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* removal tests */ 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1. removal of item at end */ 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook;currency=CHF", "currency", "", "de@collation=phonebook" }, 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook;currency=CHF", "currency", NULL, "de@collation=phonebook" }, 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 2. removal of item at beginning */ 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook;currency=CHF", "collation", "", "de@currency=CHF" }, 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook;currency=CHF", "collation", NULL, "de@currency=CHF" }, 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 3. removal of an item not there */ 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook;currency=CHF", "calendar", NULL, "de@collation=phonebook;currency=CHF" }, 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 4. removal of only item */ 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook", "collation", NULL, "de" }, 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook", "Currency", "CHF", "de@collation=phonebook;currency=CHF" } 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestKeywordSet(void) 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLen = 0; 1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[1024]; 1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cbuffer[1024]; 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < sizeof(kwSetTestCases)/sizeof(kwSetTestCases[0]); i++) { 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buffer,'%',1023); 1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(buffer, kwSetTestCases[i].l); 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_canonicalize(kwSetTestCases[i].l, cbuffer, 1023, &status); 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(buffer,cbuffer)) { 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("note: [%d] wasn't canonical, should be: '%s' not '%s'. Won't check for canonicity in output.\n", i, cbuffer, buffer); 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* sanity check test case results for canonicity */ 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_canonicalize(kwSetTestCases[i].x, cbuffer, 1023, &status); 1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(kwSetTestCases[i].x,cbuffer)) { 1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%s:%d: ERROR: kwSetTestCases[%d].x = '%s', should be %s (must be canonical)\n", __FILE__, __LINE__, i, kwSetTestCases[i].x, cbuffer); 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLen = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, 1023, &status); 1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Err on test case %d: got error %s\n", i, u_errorName(status)); 1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(buffer,kwSetTestCases[i].x) || ((int32_t)strlen(buffer)!=resultLen)) { 1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: #%d: %s + [%s=%s] -> %s (%d) expected %s (%d)\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k, 1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru kwSetTestCases[i].v, buffer, resultLen, kwSetTestCases[i].x, strlen(buffer)); 1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("pass: #%d: %s + [%s=%s] -> %s\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k, kwSetTestCases[i].v,buffer); 1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestKeywordSetError(void) 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[1024]; 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status; 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t res; 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t blen; 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 0-test whether an error condition modifies the buffer at all */ 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru blen=0; 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i=0; 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buffer,'%',1023); 1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, blen, &status); 1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_ILLEGAL_ARGUMENT_ERROR) { 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("expected illegal err got %s\n", u_errorName(status)); 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* if(res!=strlen(kwSetTestCases[i].x)) { 1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("expected result %d got %d\n", strlen(kwSetTestCases[i].x), res); 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } */ 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(buffer[blen]!='%') { 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Buffer byte %d was modified: now %c\n", blen, buffer[blen]); 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("0-buffer modify OK\n"); 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<=2;i++) { 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1- test a short buffer with growing text */ 1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru blen=(int32_t)strlen(kwSetTestCases[i].l)+1; 1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buffer,'%',1023); 1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(buffer,kwSetTestCases[i].l); 1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, blen, &status); 1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_BUFFER_OVERFLOW_ERROR) { 1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("expected buffer overflow on buffer %d got %s, len %d (%s + [%s=%s])\n", blen, u_errorName(status), res, kwSetTestCases[i].l, kwSetTestCases[i].k, kwSetTestCases[i].v); 1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(res!=(int32_t)strlen(kwSetTestCases[i].x)) { 1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("expected result %d got %d\n", strlen(kwSetTestCases[i].x), res); 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(buffer[blen]!='%') { 1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Buffer byte %d was modified: now %c\n", blen, buffer[blen]); 1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("1/%d-buffer modify OK\n",i); 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=3;i<=4;i++) { 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 2- test a short buffer - text the same size or shrinking */ 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru blen=(int32_t)strlen(kwSetTestCases[i].l)+1; 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buffer,'%',1023); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(buffer,kwSetTestCases[i].l); 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, blen, &status); 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_ZERO_ERROR) { 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("expected zero error got %s\n", u_errorName(status)); 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(buffer[blen+1]!='%') { 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Buffer byte %d was modified: now %c\n", blen+1, buffer[blen+1]); 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(res!=(int32_t)strlen(kwSetTestCases[i].x)) { 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("expected result %d got %d\n", strlen(kwSetTestCases[i].x), res); 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(buffer,kwSetTestCases[i].x) || ((int32_t)strlen(buffer)!=res)) { 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: #%d: %s + [%s=%s] -> %s (%d) expected %s (%d)\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k, 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru kwSetTestCases[i].v, buffer, res, kwSetTestCases[i].x, strlen(buffer)); 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("pass: #%d: %s + [%s=%s] -> %s\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k, kwSetTestCases[i].v, 1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer); 1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("2/%d-buffer modify OK\n",i); 1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t _canonicalize(int32_t selector, /* 0==getName, 1==canonicalize */ 1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID, 1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* result, 1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultCapacity, 1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode* ec) { 1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* YOU can change this to use function pointers if you like */ 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (selector) { 1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return uloc_getName(localeID, result, resultCapacity, ec); 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return uloc_canonicalize(localeID, result, resultCapacity, ec); 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCanonicalization(void) 1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; /* input */ 1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *getNameID; /* expected getName() result */ 1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *canonicalID; /* expected canonicalize() result */ 1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES_PREEURO-with-extra-stuff-that really doesn't make any sense-unless-you're trying to increase code coverage", 1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE", 1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE"}, 1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES_PREEURO", "ca_ES_PREEURO", "ca_ES@currency=ESP" }, 1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_AT_PREEURO", "de_AT_PREEURO", "de_AT@currency=ATS" }, 1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE_PREEURO", "de_DE_PREEURO", "de_DE@currency=DEM" }, 1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_LU_PREEURO", "de_LU_PREEURO", "de_LU@currency=LUF" }, 2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "el_GR_PREEURO", "el_GR_PREEURO", "el_GR@currency=GRD" }, 2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_BE_PREEURO", "en_BE_PREEURO", "en_BE@currency=BEF" }, 2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_IE_PREEURO", "en_IE_PREEURO", "en_IE@currency=IEP" }, 2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO", "es_ES_PREEURO", "es_ES@currency=ESP" }, 2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eu_ES_PREEURO", "eu_ES_PREEURO", "eu_ES@currency=ESP" }, 2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fi_FI_PREEURO", "fi_FI_PREEURO", "fi_FI@currency=FIM" }, 2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_BE_PREEURO", "fr_BE_PREEURO", "fr_BE@currency=BEF" }, 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_FR_PREEURO", "fr_FR_PREEURO", "fr_FR@currency=FRF" }, 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "fr_LU_PREEURO", "fr_LU_PREEURO", "fr_LU@currency=LUF" }, 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ga_IE_PREEURO", "ga_IE_PREEURO", "ga_IE@currency=IEP" }, 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "gl_ES_PREEURO", "gl_ES_PREEURO", "gl_ES@currency=ESP" }, 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "it_IT_PREEURO", "it_IT_PREEURO", "it_IT@currency=ITL" }, 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "nl_BE_PREEURO", "nl_BE_PREEURO", "nl_BE@currency=BEF" }, 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "nl_NL_PREEURO", "nl_NL_PREEURO", "nl_NL@currency=NLG" }, 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "pt_PT_PREEURO", "pt_PT_PREEURO", "pt_PT@currency=PTE" }, 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de__PHONEBOOK", "de__PHONEBOOK", "de@collation=phonebook" }, 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_GB_EURO", "en_GB_EURO", "en_GB@currency=EUR" }, 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_GB@EURO", "en_GB@EURO", "en_GB@currency=EUR" }, /* POSIX ID */ 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es__TRADITIONAL", "es__TRADITIONAL", "es@collation=traditional" }, 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "hi__DIRECT", "hi__DIRECT", "hi@collation=direct" }, 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP_TRADITIONAL", "ja_JP_TRADITIONAL", "ja_JP@calendar=japanese" }, 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "th_TH_TRADITIONAL", "th_TH_TRADITIONAL", "th_TH@calendar=buddhist" }, 2022c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "zh_TW_STROKE", "zh_TW_STROKE", "zh_TW@collation=stroke" }, 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh__PINYIN", "zh__PINYIN", "zh@collation=pinyin" }, 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" }, 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" }, 2026c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "zh_CN_STROKE", "zh_CN_STROKE", "zh_CN@collation=stroke" }, 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin" }, 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_US_POSIX", "en_US_POSIX", "en_US_POSIX" }, 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "hy_AM_REVISED", "hy_AM_REVISED", "hy_AM_REVISED" }, 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no_NO_NY", "no_NO_NY", "no_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ }, 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no@ny", "no@ny", "no__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */ 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */ 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "qz-qz@Euro", "qz_QZ@Euro", "qz_QZ@currency=EUR" }, /* qz-qz uses private use iso codes */ 203454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en-BOONT", "en__BOONT", "en__BOONT" }, /* registered name */ 203554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "de-1901", "de__1901", "de__1901" }, /* registered name */ 203654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "de-1906", "de__1906", "de__1906" }, /* registered name */ 2037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_RS" }, /* .NET name */ 2038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_RS" }, /* .NET name */ 2039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_Cyrl_RS" }, /* Linux name */ 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_Cyrl_UZ" }, /* .NET name */ 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "uz-UZ-Latn", "uz_UZ_LATN", "uz_Latn_UZ" }, /* .NET name */ 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh-CHS", "zh_CHS", "zh_Hans" }, /* .NET name */ 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "zh-CHT", "zh_CHT", "zh_Hant" }, /* .NET name This may change back to zh_Hant */ 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* posix behavior that used to be performed by getName */ 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "mr.utf8", "mr.utf8", "mr" }, 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de-tv.koi8r", "de_TV.koi8r", "de_TV" }, 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML" }, 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "i-cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US" }, 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA" }, 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no-no-ny.utf8@B", "no_NO_NY.utf8@B", "no_NO_NY_B" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */ 2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fleshing out canonicalization */ 2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* trim space and sort keywords, ';' is separator so not present at end in canonical form */ 2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_Hant_IL_VALLEY_GIRL@ currency = EUR; calendar = Japanese ;", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" }, 2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* already-canonical ids are not changed */ 2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" }, 2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* PRE_EURO and EURO conversions don't affect other keywords */ 2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO@CALendar=Japanese", "es_ES_PREEURO@calendar=Japanese", "es_ES@calendar=Japanese;currency=ESP" }, 2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_EURO@SHOUT=zipeedeedoodah", "es_ES_EURO@shout=zipeedeedoodah", "es_ES@currency=EUR;shout=zipeedeedoodah" }, 2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* currency keyword overrides PRE_EURO and EURO currency */ 2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_PREEURO@currency=EUR", "es_ES_PREEURO@currency=EUR", "es_ES@currency=EUR" }, 2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES_EURO@currency=ESP", "es_ES_EURO@currency=ESP", "es_ES@currency=ESP" }, 2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* norwegian is just too weird, if we handle things in their full generality */ 2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ }, 2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test cases reflecting internal resource bundle usage */ 2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "root@kw=foo", "root@kw=foo", "root@kw=foo" }, 2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "@calendar=gregorian", "@calendar=gregorian", "@calendar=gregorian" }, 2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese" }, 2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP", "ja_JP", "ja_JP" }, 2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test case for "i-default" */ 2074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "i-default", "en@x=i-default", "en@x=i-default" } 2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* label[] = { "getName", "canonicalize" }; 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, j, resultLen = 0, origResultLen; 2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[256]; 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i < sizeof(testCases)/sizeof(testCases[0]); i++) { 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (j=0; j<2; ++j) { 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expected = (j==0) ? testCases[i].getNameID : testCases[i].canonicalID; 2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *buffer = 0; 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected == NULL) { 2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = uloc_getDefault(); 2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* log_verbose("testing %s -> %s\n", testCases[i], testCases[i].canonicalID); */ 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru origResultLen = _canonicalize(j, testCases[i].localeID, NULL, 0, &status); 2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_BUFFER_OVERFLOW_ERROR) { 2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_%s(%s) => %s, expected U_BUFFER_OVERFLOW_ERROR\n", 2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, u_errorName(status)); 2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLen = _canonicalize(j, testCases[i].localeID, buffer, sizeof(buffer), &status); 2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_%s(%s) => %s, expected U_ZERO_ERROR\n", 2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, u_errorName(status)); 2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strcmp(expected, buffer) != 0) { 2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_%s(%s) => \"%s\", expected \"%s\"\n", 2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, buffer, expected); 2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Ok: uloc_%s(%s) => \"%s\"\n", 2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, buffer); 2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (resultLen != (int32_t)strlen(buffer)) { 2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_%s(%s) => len %d, expected len %d\n", 2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, resultLen, strlen(buffer)); 2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (origResultLen != resultLen) { 2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uloc_%s(%s) => preflight len %d != actual len %d\n", 2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label[j], testCases[i].localeID, origResultLen, resultLen); 2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDisplayKeywords(void) 2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *displayLocale; 2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar displayKeyword[200]; 2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES@currency=ESP", "de_AT", 2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0057, 0x00e4, 0x0068, 0x0072, 0x0075, 0x006e, 0x0067, 0x0000}, 2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP@calendar=japanese", "de", 2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 0x004b, 0x0061, 0x006c, 0x0065, 0x006e, 0x0064, 0x0065, 0x0072, 0x0000} 2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@collation=traditional", "de_DE", 2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0053, 0x006f, 0x0072, 0x0074, 0x0069, 0x0065, 0x0072, 0x0075, 0x006e, 0x0067, 0x0000} 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) { 2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* keyword =NULL; 2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordLen = 0; 2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordCount = 0; 2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *displayKeyword=NULL; 2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t displayKeywordLen = 0; 2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UEnumeration* keywordEnum = uloc_openKeywords(testCases[i].localeID, &status); 2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(keywordCount = uenum_count(keywordEnum, &status); keywordCount > 0 ; keywordCount--){ 2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getKeywords failed for locale id: %s with error : %s \n", testCases[i].localeID, u_errorName(status)); 2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* the uenum_next returns NUL terminated string */ 2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keyword = uenum_next(keywordEnum, &keywordLen, &status); 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fetch the displayKeyword */ 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordLen = uloc_getDisplayKeyword(keyword, testCases[i].displayLocale, displayKeyword, displayKeywordLen, &status); 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordLen++; /* for null termination */ 2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeyword = (UChar*) malloc(displayKeywordLen * U_SIZEOF_UCHAR); 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordLen = uloc_getDisplayKeyword(keyword, testCases[i].displayLocale, displayKeyword, displayKeywordLen, &status); 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayKeyword filed for keyword : %s in locale id: %s for display locale: %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status)); 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strncmp(displayKeyword, testCases[i].displayKeyword, displayKeywordLen)!=0){ 21726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_USING_DEFAULT_WARNING) { 21736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("uloc_getDisplayKeyword did not get the expected value for keyword : %s in locale id: %s for display locale: %s . Got error: %s. Perhaps you are missing data?\n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status)); 21746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 21756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("uloc_getDisplayKeyword did not get the expected value for keyword : %s in locale id: %s for display locale: %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale); 21766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayKeyword did not return the expected error. Error: %s\n", u_errorName(status)); 2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(displayKeyword); 2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_close(keywordEnum); 2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDisplayKeywordValues(void){ 2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *displayLocale; 2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar displayKeywordValue[500]; 2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ca_ES@currency=ESP", "de_AT", 2199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {0x0053, 0x0070, 0x0061, 0x006e, 0x0069, 0x0073, 0x0063, 0x0068, 0x0065, 0x0020, 0x0050, 0x0065, 0x0073, 0x0065, 0x0074, 0x0061, 0x0000} 2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_AT@currency=ATS", "fr_FR", 2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0073, 0x0063, 0x0068, 0x0069, 0x006c, 0x006c, 0x0069, 0x006e, 0x0067, 0x0020, 0x0061, 0x0075, 0x0074, 0x0072, 0x0069, 0x0063, 0x0068, 0x0069, 0x0065, 0x006e, 0x0000} 2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 22041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "de_DE@currency=DEM", "it", 22051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {0x006d, 0x0061, 0x0072, 0x0063, 0x006f, 0x0020, 0x0074, 0x0065, 0x0064, 0x0065, 0x0073, 0x0063, 0x006f, 0x0000} 2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "el_GR@currency=GRD", "en", 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0047, 0x0072, 0x0065, 0x0065, 0x006b, 0x0020, 0x0044, 0x0072, 0x0061, 0x0063, 0x0068, 0x006d, 0x0061, 0x0000} 2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "eu_ES@currency=ESP", "it_IT", 22111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {0x0070, 0x0065, 0x0073, 0x0065, 0x0074, 0x0061, 0x0020, 0x0073, 0x0070, 0x0061, 0x0067, 0x006e, 0x006f, 0x006c, 0x0061, 0x0000} 2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@collation=phonebook", "es", 2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x006F, 0x0072, 0x0064, 0x0065, 0x006E, 0x0020, 0x0064, 0x0065, 0x0020, 0x006C, 0x0069, 0x0073, 0x0074, 0x00ED, 0x006E, 0x0020, 0x0074, 0x0065, 0x006C, 0x0065, 0x0066, 0x00F3, 0x006E, 0x0069, 0x0063, 0x006F, 0x0000} 2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@collation=phonebook", "es", 2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x006F, 0x0072, 0x0064, 0x0065, 0x006E, 0x0020, 0x0064, 0x0065, 0x0020, 0x006C, 0x0069, 0x0073, 0x0074, 0x00ED, 0x006E, 0x0020, 0x0074, 0x0065, 0x006C, 0x0065, 0x0066, 0x00F3, 0x006E, 0x0069, 0x0063, 0x006F, 0x0000} 2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "es_ES@collation=traditional","de", 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0054, 0x0072, 0x0061, 0x0064, 0x0069, 0x0074, 0x0069, 0x006f, 0x006e, 0x0065, 0x006c, 0x006c, 0x0065, 0x0020, 0x0053, 0x006f, 0x0072, 0x0074, 0x0069, 0x0065, 0x0072, 0x0072, 0x0065, 0x0067, 0x0065, 0x006c, 0x006e, 0x0000} 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja_JP@calendar=japanese", "de", 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x004a, 0x0061, 0x0070, 0x0061, 0x006e, 0x0069, 0x0073, 0x0063, 0x0068, 0x0065, 0x0072, 0x0020, 0x004b, 0x0061, 0x006c, 0x0065, 0x006e, 0x0064, 0x0065, 0x0072, 0x0000} 2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) { 2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* keyword =NULL; 2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordLen = 0; 2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordCount = 0; 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *displayKeywordValue = NULL; 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t displayKeywordValueLen = 0; 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UEnumeration* keywordEnum = uloc_openKeywords(testCases[i].localeID, &status); 2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(keywordCount = uenum_count(keywordEnum, &status); keywordCount > 0 ; keywordCount--){ 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getKeywords failed for locale id: %s in display locale: % with error : %s \n", testCases[i].localeID, testCases[i].displayLocale, u_errorName(status)); 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* the uenum_next returns NUL terminated string */ 2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keyword = uenum_next(keywordEnum, &keywordLen, &status); 2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fetch the displayKeywordValue */ 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValueLen = uloc_getDisplayKeywordValue(testCases[i].localeID, keyword, testCases[i].displayLocale, displayKeywordValue, displayKeywordValueLen, &status); 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValueLen++; /* for null termination */ 2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValue = (UChar*)malloc(displayKeywordValueLen * U_SIZEOF_UCHAR); 2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValueLen = uloc_getDisplayKeywordValue(testCases[i].localeID, keyword, testCases[i].displayLocale, displayKeywordValue, displayKeywordValueLen, &status); 2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayKeywordValue failed for keyword : %s in locale id: %s for display locale: %s with error : %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status)); 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strncmp(displayKeywordValue, testCases[i].displayKeywordValue, displayKeywordValueLen)!=0){ 22556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_USING_DEFAULT_WARNING) { 22566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s with error : %s Perhaps you are missing data\n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status)); 22576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 22586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s with error : %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status)); 22596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayKeywordValue did not return the expected error. Error: %s\n", u_errorName(status)); 2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(displayKeywordValue); 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_close(keywordEnum); 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test a multiple keywords */ 2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* keyword =NULL; 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordLen = 0; 2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t keywordCount = 0; 2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID = "es@collation=phonebook;calendar=buddhist;currency=DEM"; 2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* displayLocale = "de"; 2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar expected[][50] = { 2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0042, 0x0075, 0x0064, 0x0064, 0x0068, 0x0069, 0x0073, 0x0074, 0x0069, 0x0073, 0x0063, 0x0068, 0x0065, 0x0072, 0x0020, 0x004b, 0x0061, 0x006c, 0x0065, 0x006e, 0x0064, 0x0065, 0x0072, 0x0000}, 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 228054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {0x0054, 0x0065, 0x006c, 0x0065, 0x0066, 0x006f, 0x006e, 0x0062, 0x0075, 0x0063, 0x0068, 0x002d, 0x0053, 0x006f, 0x0072, 0x0074, 0x0069, 0x0065, 0x0072, 0x0075, 0x006e, 0x0067, 0x0000}, 2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0044, 0x0065, 0x0075, 0x0074, 0x0073, 0x0063, 0x0068, 0x0065, 0x0020, 0x004d, 0x0061, 0x0072, 0x006b, 0x0000}, 2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UEnumeration* keywordEnum = uloc_openKeywords(localeID, &status); 2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(keywordCount = 0; keywordCount < uenum_count(keywordEnum, &status) ; keywordCount++){ 2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *displayKeywordValue = NULL; 2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t displayKeywordValueLen = 0; 2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getKeywords failed for locale id: %s in display locale: % with error : %s \n", localeID, displayLocale, u_errorName(status)); 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* the uenum_next returns NUL terminated string */ 2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru keyword = uenum_next(keywordEnum, &keywordLen, &status); 2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fetch the displayKeywordValue */ 2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValueLen = uloc_getDisplayKeywordValue(localeID, keyword, displayLocale, displayKeywordValue, displayKeywordValueLen, &status); 2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValueLen++; /* for null termination */ 2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValue = (UChar*)malloc(displayKeywordValueLen * U_SIZEOF_UCHAR); 2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValueLen = uloc_getDisplayKeywordValue(localeID, keyword, displayLocale, displayKeywordValue, displayKeywordValueLen, &status); 2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayKeywordValue failed for keyword : %s in locale id: %s for display locale: %s with error : %s \n", localeID, keyword, displayLocale, u_errorName(status)); 2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strncmp(displayKeywordValue, expected[keywordCount], displayKeywordValueLen)!=0){ 23086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_USING_DEFAULT_WARNING) { 23096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s got error: %s. Perhaps you are missing data?\n", localeID, keyword, displayLocale, u_errorName(status)); 23106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 23116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s \n", localeID, keyword, displayLocale); 23126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayKeywordValue did not return the expected error. Error: %s\n", u_errorName(status)); 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(displayKeywordValue); 2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_close(keywordEnum); 2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test non existent keywords */ 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID = "es"; 2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* displayLocale = "de"; 2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *displayKeywordValue = NULL; 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t displayKeywordValueLen = 0; 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fetch the displayKeywordValue */ 2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru displayKeywordValueLen = uloc_getDisplayKeywordValue(localeID, "calendar", displayLocale, displayKeywordValue, displayKeywordValueLen, &status); 2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplaykeywordValue returned error status %s\n", u_errorName(status)); 2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(displayKeywordValueLen != 0) { 2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplaykeywordValue returned %d should be 0 \n", displayKeywordValueLen); 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetBaseName(void) { 2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const struct { 2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID; 2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *baseName; 2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } testCases[] = { 2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de_DE@ C o ll A t i o n = Phonebook ", "de_DE" }, 2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "de@currency = euro; CoLLaTion = PHONEBOOk", "de" }, 2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { "ja@calendar = buddhist", "ja" } 2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0, baseNameLen = 0; 2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char baseName[256]; 2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) { 2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru baseNameLen = uloc_getBaseName(testCases[i].localeID, baseName, 256, &status); 235859d709d503bab6e2b61931737e662dd293b40578ccornelius (void)baseNameLen; /* Suppress set but not used warning. */ 2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(testCases[i].baseName, baseName)) { 2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("For locale \"%s\" expected baseName \"%s\", but got \"%s\"\n", 2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCases[i].localeID, testCases[i].baseName, baseName); 2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void TestTrailingNull(void) { 236850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char* localeId = "zh_Hans"; 236950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar buffer[128]; /* sufficient for this test */ 237050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t len; 237150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 237250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int i; 237350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 237450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho len = uloc_getDisplayName(localeId, localeId, buffer, 128, &status); 237550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (len > 128) { 237650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("buffer too small"); 237750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 237850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 237950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 238050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (i = 0; i < len; ++i) { 238150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (buffer[i] == 0) { 238250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("name contained null"); 238350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 238450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 238550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 238650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Jitterbug 4115 */ 2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDisplayNameWarning(void) { 2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar name[256]; 2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t size; 2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size = uloc_getDisplayLanguage("qqq", "kl", name, sizeof(name)/sizeof(name[0]), &status); 239559d709d503bab6e2b61931737e662dd293b40578ccornelius (void)size; /* Suppress set but not used warning. */ 2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_USING_DEFAULT_WARNING) { 2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("For language \"qqq\" in locale \"kl\", expecting U_USING_DEFAULT_WARNING, but got %s\n", 2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Compare two locale IDs. If they are equal, return 0. If `string' 2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * starts with `prefix' plus an additional element, that is, string == 2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * prefix + '_' + x, then return 1. Otherwise return a value < 0. 2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool _loccmp(const char* string, const char* prefix) { 2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t slen = (int32_t)uprv_strlen(string), 2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru plen = (int32_t)uprv_strlen(prefix); 2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t c = uprv_strncmp(string, prefix, plen); 2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 'root' is less than everything */ 2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uprv_strcmp(prefix, "root") == 0) { 2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (uprv_strcmp(string, "root") == 0) ? 0 : 1; 2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c) return -1; /* mismatch */ 2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (slen == plen) return 0; 2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (string[plen] == '_') return 1; 2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -2; /* false match, e.g. "en_USX" cmp "en_US" */ 2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void _checklocs(const char* label, 2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* req, 2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* valid, 2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* actual) { 2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We want the valid to be strictly > the bogus requested locale, 2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru and the valid to be >= the actual. */ 2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (_loccmp(req, valid) > 0 && 2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _loccmp(valid, actual) >= 0) { 2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s; req=%s, valid=%s, actual=%s\n", 2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label, req, valid, actual); 2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: %s; req=%s, valid=%s, actual=%s\n", 2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru label, req, valid, actual); 2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetLocale(void) { 2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError pe; 2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar EMPTY[1] = {0}; 2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* === udat === */ 2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *obj; 2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req = "en_US_REDWOODSHORES", *valid, *actual; 2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru obj = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, 2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru req, 2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 0, 2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 0, &ec); 2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 24536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("udat_open failed.Error %s\n", u_errorName(ec)); 2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = udat_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); 2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = udat_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec); 2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("udat_getLocaleByType() failed\n"); 2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _checklocs("udat", req, valid, actual); 2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(obj); 2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* === ucal === */ 2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *obj; 2471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req = "fr_FR_PROVENCAL", *valid, *actual; 2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru obj = ucal_open(NULL, 0, 2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru req, 2474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_GREGORIAN, 2475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &ec); 2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_open failed with error: %s\n", u_errorName(ec)); 2478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = ucal_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); 2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = ucal_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec); 2482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getLocaleByType() failed\n"); 2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _checklocs("ucal", req, valid, actual); 2487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(obj); 2488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* === unum === */ 2492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *obj; 2495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req = "zh_Hant_TW_TAINAN", *valid, *actual; 2496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru obj = unum_open(UNUM_DECIMAL, 2497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, 0, 2498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru req, 2499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &pe, &ec); 2500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("unum_open failed\n"); 2502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = unum_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); 2505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = unum_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec); 2506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("unum_getLocaleByType() failed\n"); 2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _checklocs("unum", req, valid, actual); 2511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(obj); 2512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* === umsg === */ 2516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 0 2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* commented out by weiv 01/12/2005. umsg_getLocaleByType is to be removed */ 2518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UMessageFormat *obj; 2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req = "ja_JP_TAKAYAMA", *valid, *actual; 2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool test; 2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru obj = umsg_open(EMPTY, 0, 2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru req, 2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &pe, &ec); 2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_open failed\n"); 2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = umsg_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); 2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = umsg_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec); 2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_getLocaleByType() failed\n"); 2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We want the valid to be strictly > the bogus requested locale, 2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru and the valid to be >= the actual. */ 2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO MessageFormat is currently just storing the locale it is given. 2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru As a result, it will return whatever it was given, even if the 2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale is invalid. */ 2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test = (_cmpversion("3.2") <= 0) ? 2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Here is the weakened test for 3.0: */ 2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (_loccmp(req, valid) >= 0) : 2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Here is what the test line SHOULD be: */ 2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (_loccmp(req, valid) > 0); 2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (test && 2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _loccmp(valid, actual) >= 0) { 2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("umsg; req=%s, valid=%s, actual=%s\n", req, valid, actual); 2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: umsg; req=%s, valid=%s, actual=%s\n", req, valid, actual); 2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_close(obj); 2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* === ubrk === */ 2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *obj; 2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req = "ar_KW_ABDALI", *valid, *actual; 2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru obj = ubrk_open(UBRK_WORD, 2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru req, 2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EMPTY, 2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &ec); 2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ubrk_open failed. Error: %s \n", u_errorName(ec)); 2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = ubrk_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); 2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = ubrk_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec); 2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ubrk_getLocaleByType() failed\n"); 2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _checklocs("ubrk", req, valid, actual); 2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(obj); 2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* === ucol === */ 2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION 2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *obj; 2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *req = "es_AR_BUENOSAIRES", *valid, *actual; 2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru obj = ucol_open(req, &ec); 2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 259050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("ucol_open failed - %s\n", u_errorName(ec)); 2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru valid = ucol_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); 2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = ucol_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec); 2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucol_getLocaleByType() failed\n"); 2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _checklocs("ucol", req, valid, actual); 2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(obj); 2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 26048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic void TestEnglishExemplarCharacters(void) { 26058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UErrorCode status = U_ZERO_ERROR; 26068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius int i; 26078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius USet *exSet = NULL; 26088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UChar testChars[] = { 26098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 0x61, /* standard */ 26108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 0xE1, /* auxiliary */ 26118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 0x41, /* index */ 26128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 0x2D /* punctuation */ 26138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius }; 26148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ULocaleData *uld = ulocdata_open("en", &status); 26158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 26168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_data_err("ulocdata_open() failed : %s - (Are you missing data?)\n", u_errorName(status)); 26178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return; 26188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 26198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 26208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius for (i = 0; i < ULOCDATA_ES_COUNT; i++) { 26218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius exSet = ulocdata_getExemplarSet(uld, exSet, 0, (ULocaleDataExemplarSetType)i, &status); 26228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 26238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err_status(status, "ulocdata_getExemplarSet() for type %d failed\n", i); 26248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius status = U_ZERO_ERROR; 26258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius continue; 26268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 26278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (!uset_contains(exSet, (UChar32)testChars[i])) { 26288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("Character U+%04X is not included in exemplar type %d\n", testChars[i], i); 26298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 26308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 26318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 26328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius uset_close(exSet); 26338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ulocdata_close(uld); 26348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNonexistentLanguageExemplars(void) { 2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* JB 4068 - Nonexistent language */ 2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ULocaleData *uld = ulocdata_open("qqq",&ec); 2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ec != U_USING_DEFAULT_WARNING) { 26416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(ec, "Exemplar set for \"qqq\", expecting U_USING_DEFAULT_WARNING, but got %s\n", 2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec)); 2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_close(uld); 2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestLocDataErrorCodeChaining(void) { 2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_USELESS_COLLATOR_ERROR; 2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_open(NULL, &ec); 2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_getExemplarSet(NULL, NULL, 0, ULOCDATA_ES_STANDARD, &ec); 2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_getDelimiter(NULL, ULOCDATA_DELIMITER_COUNT, NULL, -1, &ec); 2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_getMeasurementSystem(NULL, &ec); 2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_getPaperSize(NULL, NULL, NULL, &ec); 2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ec != U_USELESS_COLLATOR_ERROR) { 2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ulocdata API changed the error code to %s\n", u_errorName(ec)); 2657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestLanguageExemplarsFallbacks(void) { 2661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test that en_US fallsback, but en doesn't fallback. */ 2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ULocaleData *uld = ulocdata_open("en_US",&ec); 2664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec)); 2665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ec != U_USING_FALLBACK_WARNING) { 26666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(ec, "Exemplar set for \"en_US\", expecting U_USING_FALLBACK_WARNING, but got %s\n", 2667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 2668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_close(uld); 2670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uld = ulocdata_open("en",&ec); 2672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec)); 2673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ec != U_ZERO_ERROR) { 26746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(ec, "Exemplar set for \"en\", expecting U_ZERO_ERROR, but got %s\n", 2675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 2676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ulocdata_close(uld); 2678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const char *acceptResult(UAcceptResult uar) { 2681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return udbg_enumName(UDBG_UAcceptResult, uar); 2682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAcceptLanguage(void) { 2685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UAcceptResult outResult; 2687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UEnumeration *available; 2688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tmp[200]; 2689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 2690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t rc = 0; 2691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct { 2693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t httpSet; /**< Which of http[] should be used? */ 2694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *icuSet; /**< ? */ 2695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *expect; /**< The expected locale result */ 2696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UAcceptResult res; /**< The expected error code */ 2697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } tests[] = { 2698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*0*/{ 0, NULL, "mt_MT", ULOC_ACCEPT_VALID }, 2699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*1*/{ 1, NULL, "en", ULOC_ACCEPT_VALID }, 2700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*2*/{ 2, NULL, "en", ULOC_ACCEPT_FALLBACK }, 2701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*3*/{ 3, NULL, "", ULOC_ACCEPT_FAILED }, 2702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*4*/{ 4, NULL, "es", ULOC_ACCEPT_VALID }, 2703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /*5*/{ 5, NULL, "en", ULOC_ACCEPT_VALID }, /* XF */ 2705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /*6*/{ 6, NULL, "ja", ULOC_ACCEPT_FALLBACK }, /* XF */ 2706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /*7*/{ 7, NULL, "zh", ULOC_ACCEPT_FALLBACK }, /* XF */ 2707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const int32_t numTests = sizeof(tests)/sizeof(tests[0]); 2709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char *http[] = { 2710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*0*/ "mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, nl-nl;q=0.55, nl;q=0.53, th-th-traditional;q=.01", 2711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*1*/ "ja;q=0.5, en;q=0.8, tlh", 2712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*2*/ "en-wf, de-lx;q=0.8", 2713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*3*/ "mga-ie;q=0.9, tlh", 2714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*4*/ "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, " 2715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, " 2716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, " 2717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, " 2718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, " 2719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, " 2720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xx-yy;q=.1, " 2721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "es", 2722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /*5*/ "zh-xx;q=0.9, en;q=0.6", 2724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /*6*/ "ja-JA", 2725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /*7*/ "zh-xx;q=0.9", 2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<numTests;i++) { 2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru outResult = -3; 2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 2731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("test #%d: http[%s], ICU[%s], expect %s, %s\n", 2732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect, acceptResult(tests[i].res)); 2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru available = ures_openAvailableLocales(tests[i].icuSet, &status); 2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tmp[0]=0; 2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rc = uloc_acceptLanguageFromHTTP(tmp, 199, &outResult, http[tests[i].httpSet], available, &status); 273759d709d503bab6e2b61931737e662dd293b40578ccornelius (void)rc; /* Suppress set but not used warning. */ 2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_close(available); 2739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose(" got %s, %s [%s]\n", tmp[0]?tmp:"(EMPTY)", acceptResult(outResult), u_errorName(status)); 2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(outResult != tests[i].res) { 27416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "FAIL: #%d: expected outResult of %s but got %s\n", i, 2742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru acceptResult( tests[i].res), 2743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru acceptResult( outResult)); 2744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n", 2745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect,acceptResult(tests[i].res)); 2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((outResult>0)&&uprv_strcmp(tmp, tests[i].expect)) { 27486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "FAIL: #%d: expected %s but got %s\n", i, tests[i].expect, tmp); 2749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n", 2750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect, acceptResult(tests[i].res)); 2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* LOCALE_ALIAS[][2] = { 2756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"in", "id"}, 2757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"in_ID", "id_ID"}, 2758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"iw", "he"}, 2759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"iw_IL", "he_IL"}, 2760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"ji", "yi"}, 2761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en_BU", "en_MM"}, 2762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en_DY", "en_BJ"}, 2763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en_HV", "en_BF"}, 2764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en_NH", "en_VU"}, 2765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en_RH", "en_ZW"}, 2766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en_TP", "en_TL"}, 2767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {"en_ZR", "en_CD"} 2768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 2769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool isLocaleAvailable(UResourceBundle* resIndex, const char* loc){ 2770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = 0; 2772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_getStringByKey(resIndex, loc,&len, &status); 2773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 2775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 2777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCalendar() { 2780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 2782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *resIndex = ures_open(NULL,"res_index", &status); 2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 27856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status)); 2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2788f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i=0; i<UPRV_LENGTHOF(LOCALE_ALIAS); i++) { 2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* oldLoc = LOCALE_ALIAS[i][0]; 2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newLoc = LOCALE_ALIAS[i][1]; 2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar* c1 = NULL; 2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar* c2 = NULL; 2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test function "getLocale(ULocale.VALID_LOCALE)"*/ 2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* l1 = ucal_getLocaleByType(c1, ULOC_VALID_LOCALE, &status); 2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* l2 = ucal_getLocaleByType(c2, ULOC_VALID_LOCALE, &status); 2797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!isLocaleAvailable(resIndex, newLoc)){ 2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c1 = ucal_open(NULL, -1, oldLoc, UCAL_GREGORIAN, &status); 2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c2 = ucal_open(NULL, -1, newLoc, UCAL_GREGORIAN, &status); 2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(newLoc,l1)!=0 || strcmp(l1,l2)!=0 || status!=U_ZERO_ERROR) { 2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc); 2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ucal_getLocaleByType old:%s new:%s\n", l1, l2); 2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(c1); 2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(c2); 2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(resIndex); 2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDateFormat() { 2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *resIndex = ures_open(NULL,"res_index", &status); 2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 28216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status)); 2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2824f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i=0; i<UPRV_LENGTHOF(LOCALE_ALIAS); i++) { 2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* oldLoc = LOCALE_ALIAS[i][0]; 2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newLoc = LOCALE_ALIAS[i][1]; 2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat* df1 = NULL; 2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat* df2 = NULL; 2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* l1 = NULL; 2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* l2 = NULL; 2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!isLocaleAvailable(resIndex, newLoc)){ 2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df1 = udat_open(UDAT_FULL, UDAT_FULL,oldLoc, NULL, 0, NULL, -1, &status); 2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df2 = udat_open(UDAT_FULL, UDAT_FULL,newLoc, NULL, 0, NULL, -1, &status); 2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Creation of date format failed %s\n", u_errorName(status)); 2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test function "getLocale"*/ 2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l1 = udat_getLocaleByType(df1, ULOC_VALID_LOCALE, &status); 2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l2 = udat_getLocaleByType(df2, ULOC_VALID_LOCALE, &status); 2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fetching the locale by type failed. %s\n", u_errorName(status)); 2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(newLoc,l1)!=0 || strcmp(l1,l2)!=0) { 2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc); 2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("udat_getLocaleByType old:%s new:%s\n", l1, l2); 2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(df1); 2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(df2); 2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(resIndex); 2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCollation() { 2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION 2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *resIndex = ures_open(NULL,"res_index", &status); 2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 28646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status)); 2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2867f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i=0; i<UPRV_LENGTHOF(LOCALE_ALIAS); i++) { 2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* oldLoc = LOCALE_ALIAS[i][0]; 2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newLoc = LOCALE_ALIAS[i][1]; 2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator* c1 = NULL; 2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator* c2 = NULL; 2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* l1 = NULL; 2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* l2 = NULL; 2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!isLocaleAvailable(resIndex, newLoc)){ 2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Creation of collators failed %s\n", u_errorName(status)); 2881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c1 = ucol_open(oldLoc, &status); 2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c2 = ucol_open(newLoc, &status); 2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l1 = ucol_getLocaleByType(c1, ULOC_VALID_LOCALE, &status); 2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru l2 = ucol_getLocaleByType(c2, ULOC_VALID_LOCALE, &status); 2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fetching the locale names failed failed %s\n", u_errorName(status)); 2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(newLoc,l1)!=0 || strcmp(l1,l2)!=0) { 2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc); 2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ucol_getLocaleByType old:%s new:%s\n", l1, l2); 2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(c1); 2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(c2); 2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(resIndex); 2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2901c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querutypedef struct OrientationStructTag { 2902c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* localeId; 2903c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ULayoutType character; 2904c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ULayoutType line; 2905c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} OrientationStruct; 2906c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 290750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const char* ULayoutTypeToString(ULayoutType type) 2908c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 2909c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru switch(type) 2910c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 2911c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case ULOC_LAYOUT_LTR: 2912c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "ULOC_LAYOUT_LTR"; 2913c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru break; 2914c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case ULOC_LAYOUT_RTL: 2915c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "ULOC_LAYOUT_RTL"; 2916c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru break; 2917c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case ULOC_LAYOUT_TTB: 2918c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "ULOC_LAYOUT_TTB"; 2919c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru break; 2920c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case ULOC_LAYOUT_BTT: 2921c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "ULOC_LAYOUT_BTT"; 2922c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru break; 2923c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case ULOC_LAYOUT_UNKNOWN: 2924c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru break; 2925c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2926c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2927c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return "Unknown enum value for ULayoutType!"; 2928c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 2929c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2930c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic void TestOrientation() 2931c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 2932c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru static const OrientationStruct toTest [] = { 2933c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "ar", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2934c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "aR", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2935c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "ar_Arab", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2936c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "fa", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2937c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "Fa", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2938c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "he", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2939c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "ps", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2940c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "ur", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2941c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "UR", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB }, 2942c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { "en", ULOC_LAYOUT_LTR, ULOC_LAYOUT_TTB } 2943c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }; 2944c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2945c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru size_t i = 0; 2946c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (; i < sizeof(toTest) / sizeof(toTest[0]); ++i) { 2947c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode statusCO = U_ZERO_ERROR; 2948c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode statusLO = U_ZERO_ERROR; 2949c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const localeId = toTest[i].localeId; 2950c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const ULayoutType co = uloc_getCharacterOrientation(localeId, &statusCO); 2951c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const ULayoutType expectedCO = toTest[i].character; 2952c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const ULayoutType lo = uloc_getLineOrientation(localeId, &statusLO); 2953c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const ULayoutType expectedLO = toTest[i].line; 2954c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(statusCO)) { 29556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(statusCO, 2956c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru " unexpected failure for uloc_getCharacterOrientation(), with localId \"%s\" and status %s\n", 2957c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru localeId, 2958c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_errorName(statusCO)); 2959c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2960c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (co != expectedCO) { 2961c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err( 2962c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru " unexpected result for uloc_getCharacterOrientation(), with localeId \"%s\". Expected %s but got result %s\n", 2963c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru localeId, 2964c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ULayoutTypeToString(expectedCO), 2965c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ULayoutTypeToString(co)); 2966c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2967c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(statusLO)) { 29686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(statusLO, 2969c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru " unexpected failure for uloc_getLineOrientation(), with localId \"%s\" and status %s\n", 2970c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru localeId, 2971c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_errorName(statusLO)); 2972c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2973c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (lo != expectedLO) { 2974c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err( 2975c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru " unexpected result for uloc_getLineOrientation(), with localeId \"%s\". Expected %s but got result %s\n", 2976c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru localeId, 2977c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ULayoutTypeToString(expectedLO), 2978c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ULayoutTypeToString(lo)); 2979c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2980c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2981c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 2982c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestULocale() { 2984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 2985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *resIndex = ures_open(NULL,"res_index", &status); 2987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 29886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status)); 2989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2991f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i=0; i<UPRV_LENGTHOF(LOCALE_ALIAS); i++) { 2992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* oldLoc = LOCALE_ALIAS[i][0]; 2993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newLoc = LOCALE_ALIAS[i][1]; 2994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar name1[256], name2[256]; 2995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char names1[256], names2[256]; 2996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t capacity = 256; 2997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!isLocaleAvailable(resIndex, newLoc)){ 3000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 3001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayName(oldLoc, ULOC_US, name1, capacity, &status); 3003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayName(%s) failed %s\n", oldLoc, u_errorName(status)); 3005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getDisplayName(newLoc, ULOC_US, name2, capacity, &status); 3008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayName(%s) failed %s\n", newLoc, u_errorName(status)); 3010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(name1, name2)!=0) { 3013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc); 3014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(names1, name1); 3016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(names2, name2); 3017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("uloc_getDisplayName old:%s new:%s\n", names1, names2); 3018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(resIndex); 3020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestUResourceBundle() { 3024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* us1; 3025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* us2; 3026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle* rb1 = NULL; 3028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle* rb2 = NULL; 3029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 3031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *resIndex = NULL; 3032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status)); 3034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 3035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resIndex = ures_open(NULL,"res_index", &status); 3037f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i=0; i<UPRV_LENGTHOF(LOCALE_ALIAS); i++) { 3038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* oldLoc = LOCALE_ALIAS[i][0]; 3040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newLoc = LOCALE_ALIAS[i][1]; 3041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!isLocaleAvailable(resIndex, newLoc)){ 3042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 3043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb1 = ures_open(NULL, oldLoc, &status); 3045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ures_open(%s) failed %s\n", oldLoc, u_errorName(status)); 3047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru us1 = ures_getLocaleByType(rb1, ULOC_ACTUAL_LOCALE, &status); 3050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb2 = ures_open(NULL, newLoc, &status); 3053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ures_open(%s) failed %s\n", oldLoc, u_errorName(status)); 3055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru us2 = ures_getLocaleByType(rb2, ULOC_ACTUAL_LOCALE, &status); 3057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(us1,newLoc)!=0 || strcmp(us1,us2)!=0 ) { 3059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc); 3060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ures_getStringByKey old:%s new:%s\n", us1, us2); 3063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(rb1); 3064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb1 = NULL; 3065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(rb2); 3066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb2 = NULL; 3067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(resIndex); 3069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDisplayName() { 3072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar oldCountry[256] = {'\0'}; 3074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar newCountry[256] = {'\0'}; 3075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar oldLang[256] = {'\0'}; 3076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar newLang[256] = {'\0'}; 3077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char country[256] ={'\0'}; 3078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char language[256] ={'\0'}; 3079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t capacity = 256; 3080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i =0; 3081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int j=0; 3082f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i=0; i<UPRV_LENGTHOF(LOCALE_ALIAS); i++) { 3083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* oldLoc = LOCALE_ALIAS[i][0]; 3084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newLoc = LOCALE_ALIAS[i][1]; 3085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t available = uloc_countAvailable(); 3087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j=0; j<available; j++){ 3089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* dispLoc = uloc_getAvailable(j); 3091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t oldCountryLen = uloc_getDisplayCountry(oldLoc,dispLoc, oldCountry, capacity, &status); 3092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t newCountryLen = uloc_getDisplayCountry(newLoc, dispLoc, newCountry, capacity, &status); 3093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t oldLangLen = uloc_getDisplayLanguage(oldLoc, dispLoc, oldLang, capacity, &status); 3094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t newLangLen = uloc_getDisplayLanguage(newLoc, dispLoc, newLang, capacity, &status ); 3095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t countryLen = uloc_getCountry(newLoc, country, capacity, &status); 3097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t langLen = uloc_getLanguage(newLoc, language, capacity, &status); 3098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* there is a display name for the current country ID */ 3099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(countryLen != newCountryLen ){ 3100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strncmp(oldCountry,newCountry,oldCountryLen)!=0){ 3101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayCountry() failed for %s in display locale %s \n", oldLoc, dispLoc); 3102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* there is a display name for the current lang ID */ 3105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(langLen!=newLangLen){ 3106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strncmp(oldLang,newLang,oldLangLen)){ 3107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("uloc_getDisplayLanguage() failed for %s in display locale %s \n", oldLoc, dispLoc); } 3108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetLocaleForLCID() { 3114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, length, lengthPre; 3115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* testLocale = 0; 3116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char temp2[40], temp3[40]; 3118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t lcid; 3119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lcid = uloc_getLCID("en_US"); 3121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lcid != 0x0409) { 3122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" uloc_getLCID(\"en_US\") = %d, expected 0x0409\n", lcid); 3123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lengthPre = uloc_getLocaleForLCID(lcid, temp2, 4, &status); 3126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_BUFFER_OVERFLOW_ERROR) { 3127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" unexpected result from uloc_getLocaleForLCID with small buffer: %s\n", u_errorName(status)); 3128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 3130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = uloc_getLocaleForLCID(lcid, temp2, sizeof(temp2)/sizeof(char), &status); 3134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" unexpected result from uloc_getLocaleForLCID(0x0409): %s\n", u_errorName(status)); 3136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (length != lengthPre) { 3140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" uloc_getLocaleForLCID(0x0409): returned length %d does not match preflight length %d\n", length, lengthPre); 3141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = uloc_getLocaleForLCID(0x12345, temp2, sizeof(temp2)/sizeof(char), &status); 3144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 3145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" unexpected result from uloc_getLocaleForLCID(0x12345): %s, status %s\n", temp2, u_errorName(status)); 3146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing getLocaleForLCID vs. locale data\n"); 3150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < LOCALE_SIZE; i++) { 3151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testLocale=rawData2[NAME][i]; 3153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing %s ......\n", testLocale); 3155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sscanf(rawData2[LCID][i], "%x", &lcid); 3157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = uloc_getLocaleForLCID(lcid, temp2, sizeof(temp2)/sizeof(char), &status); 3158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" unexpected failure of uloc_getLocaleForLCID(%#04x), status %s\n", lcid, u_errorName(status)); 3160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 3162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (length != uprv_strlen(temp2)) { 3165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" returned length %d not correct for uloc_getLocaleForLCID(%#04x), expected %d\n", length, lcid, uprv_strlen(temp2)); 3166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Compare language, country, script */ 3169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = uloc_getLanguage(temp2, temp3, sizeof(temp3)/sizeof(char), &status); 3170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" couldn't get language in uloc_getLocaleForLCID(%#04x) = %s, status %s\n", lcid, temp2, u_errorName(status)); 3172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (uprv_strcmp(temp3, rawData2[LANG][i]) && !(uprv_strcmp(temp3, "nn") == 0 && uprv_strcmp(rawData2[VAR][i], "NY") == 0)) { 3175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" language doesn't match expected %s in in uloc_getLocaleForLCID(%#04x) = %s\n", rawData2[LANG][i], lcid, temp2); 3176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = uloc_getScript(temp2, temp3, sizeof(temp3)/sizeof(char), &status); 3179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" couldn't get script in uloc_getLocaleForLCID(%#04x) = %s, status %s\n", lcid, temp2, u_errorName(status)); 3181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (uprv_strcmp(temp3, rawData2[SCRIPT][i])) { 3184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" script doesn't match expected %s in in uloc_getLocaleForLCID(%#04x) = %s\n", rawData2[SCRIPT][i], lcid, temp2); 3185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = uloc_getCountry(temp2, temp3, sizeof(temp3)/sizeof(char), &status); 3188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" couldn't get country in uloc_getLocaleForLCID(%#04x) = %s, status %s\n", lcid, temp2, u_errorName(status)); 3190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (uprv_strlen(rawData2[CTRY][i]) && uprv_strcmp(temp3, rawData2[CTRY][i])) { 3193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" country doesn't match expected %s in in uloc_getLocaleForLCID(%#04x) = %s\n", rawData2[CTRY][i], lcid, temp2); 3194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3199c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruconst char* const basic_maximize_data[][2] = { 3200c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 3201c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu_Zzzz_Zz", 3202c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu_Latn_ZA", 3203c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3204c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ZU_Zz", 3205c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu_Latn_ZA" 3206c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3207c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu_LATN", 3208c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu_Latn_ZA" 3209c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3210c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Zz", 3211c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US" 3212c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3213c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_us", 3214c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US" 3215c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3216c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore", 3217c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore_US" 3218c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3219c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore_Zz", 3220c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore_US" 3221c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3222c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore_ZA", 3223c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore_ZA" 3224c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3225c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore_ZA_POSIX", 3226c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Kore_ZA_POSIX" 3227c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3228c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr", 3229c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr_US" 3230c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3231c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_ZA", 3232c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_ZA" 3233c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3234c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr_Zz", 3235c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr_US" 3236c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3237c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr_ZA", 3238c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr_ZA" 3239c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3240c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr_ZA_POSIX", 3241c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Gujr_ZA_POSIX" 3242c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3243c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_US_POSIX_1901", 3244c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX_1901" 3245c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3246c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn__POSIX_1901", 3247c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX_1901" 3248c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3249c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en__POSIX_1901", 3250c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX_1901" 3251c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3252c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de__POSIX_1901", 3253c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_Latn_DE_POSIX_1901" 3254c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3255c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_US_BOSTON", 3256c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_BOSTON" 3257c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3258c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th@calendar=buddhist", 3259c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th_Thai_TH@calendar=buddhist" 3260c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3261c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_ZZ", 3262c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_EG" 3263c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3264c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh", 3265c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN" 3266c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3267c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW", 3268c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW" 3269c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3270c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK", 3271c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK" 3272c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3273c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant", 3274c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW" 3275c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3276c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Zzzz_CN", 3277c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN" 3278c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3279c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_US", 3280c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US" 3281c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3282c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_HK", 3283c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK" 3284c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3285c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zzz", 3286c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 3287b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }, { 3288b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de_u_co_phonebk", 3289b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de_Latn_DE_U_CO_PHONEBK" 3290b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }, { 3291b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de_Latn_u_co_phonebk", 3292b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de_Latn_DE_U_CO_PHONEBK" 3293b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }, { 3294b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de_Latn_DE_u_co_phonebk", 3295b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de_Latn_DE_U_CO_PHONEBK" 3296c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 3297c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}; 3298c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3299c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruconst char* const basic_minimize_data[][2] = { 3300c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 3301c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 3302c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 3303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3304c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX_1901", 3305c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en__POSIX_1901" 3306c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3307c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "EN_Latn_US_POSIX_1901", 3308c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en__POSIX_1901" 3309c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3310c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Zzzz_US_POSIX_1901", 3311c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en__POSIX_1901" 3312c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3313c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_Latn_DE_POSIX_1901", 3314c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de__POSIX_1901" 3315c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3316c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und", 3317c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 3318b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }, { 3319b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "en_Latn_US@calendar=gregorian", 3320b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "en@calendar=gregorian" 3321c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 3322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}; 3323c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3324c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruconst char* const full_data[][3] = { 3325c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 3326c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* "FROM", */ 3327c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* "ADD-LIKELY", */ 3328c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* "REMOVE-LIKELY" */ 3329c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* }, { */ 3330c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "aa", 3331c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "aa_Latn_ET", 3332c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "aa" 3333c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3334c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "af", 3335c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "af_Latn_ZA", 3336c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "af" 3337c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3338c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ak", 3339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ak_Latn_GH", 3340c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ak" 3341c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3342c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "am", 3343c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "am_Ethi_ET", 3344c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "am" 3345c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3346c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar", 3347c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_EG", 3348c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar" 3349c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "as", 3351c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "as_Beng_IN", 3352c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "as" 3353c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3354c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "az", 3355c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "az_Latn_AZ", 3356c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "az" 3357c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3358c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "be", 3359c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "be_Cyrl_BY", 3360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "be" 3361c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3362c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bg", 3363c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bg_Cyrl_BG", 3364c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bg" 3365c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3366c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn", 3367c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn_Beng_BD", 3368c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn" 3369c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3370c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bo", 3371c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bo_Tibt_CN", 3372c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bo" 3373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bs", 3375c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bs_Latn_BA", 3376c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bs" 3377c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3378c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ca", 3379c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ca_Latn_ES", 3380c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ca" 3381c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3382c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ch", 3383c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ch_Latn_GU", 3384c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ch" 3385c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3386c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "chk", 3387c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "chk_Latn_FM", 3388c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "chk" 3389c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3390c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cs", 3391c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cs_Latn_CZ", 3392c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cs" 3393c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3394c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cy", 3395c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cy_Latn_GB", 3396c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cy" 3397c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3398c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "da", 3399c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "da_Latn_DK", 3400c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "da" 3401c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3402c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de", 3403c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_Latn_DE", 3404c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de" 3405c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3406c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dv", 3407c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dv_Thaa_MV", 3408c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dv" 3409c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3410c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dz", 3411c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dz_Tibt_BT", 3412c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dz" 3413c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3414c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ee", 3415c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ee_Latn_GH", 3416c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ee" 3417c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3418c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el", 3419c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el_Grek_GR", 3420c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el" 3421c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3422c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en", 3423c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 3424c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 3425c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3426c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es", 3427c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 3428c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 3429c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3430c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "et", 3431c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "et_Latn_EE", 3432c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "et" 3433c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3434c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "eu", 3435c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "eu_Latn_ES", 3436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "eu" 3437c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3438c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fa", 3439c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fa_Arab_IR", 3440c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fa" 3441c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fi", 3443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fi_Latn_FI", 3444c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fi" 3445c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3446c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fil", 3447c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fil_Latn_PH", 3448c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fil" 3449c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3450c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fo", 3451c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fo_Latn_FO", 3452c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fo" 3453c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3454c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr", 3455c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_FR", 3456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr" 3457c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3458c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fur", 3459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fur_Latn_IT", 3460c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fur" 3461c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3462c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ga", 3463c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ga_Latn_IE", 3464c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ga" 3465c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3466c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gaa", 3467c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gaa_Latn_GH", 3468c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gaa" 3469c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3470c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gl", 3471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gl_Latn_ES", 3472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gl" 3473c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3474c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gn", 3475c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gn_Latn_PY", 3476c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gn" 3477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3478c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gu", 3479c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gu_Gujr_IN", 3480c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gu" 3481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ha", 3483c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ha_Latn_NG", 3484c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ha" 3485c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3486c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "haw", 3487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "haw_Latn_US", 3488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "haw" 3489c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "he", 3491c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "he_Hebr_IL", 3492c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "he" 3493c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3494c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hi", 3495c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hi_Deva_IN", 3496c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hi" 3497c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3498c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hr", 3499c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hr_Latn_HR", 3500c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hr" 3501c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3502c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ht", 3503c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ht_Latn_HT", 3504c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ht" 3505c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3506c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hu", 3507c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hu_Latn_HU", 3508c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hu" 3509c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3510c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hy", 3511c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hy_Armn_AM", 3512c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hy" 3513c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3514c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "id", 3515c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "id_Latn_ID", 3516c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "id" 3517c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3518c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ig", 3519c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ig_Latn_NG", 3520c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ig" 3521c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3522c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ii", 3523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ii_Yiii_CN", 3524c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ii" 3525c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3526c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "is", 3527c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "is_Latn_IS", 3528c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "is" 3529c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3530c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it", 3531c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it_Latn_IT", 3532c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it" 3533c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3534c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ja", 3535c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ja_Jpan_JP", 3536c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ja" 3537c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3538c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ka", 3539c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ka_Geor_GE", 3540c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ka" 3541c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3542c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kaj", 3543c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kaj_Latn_NG", 3544c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kaj" 3545c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kam", 3547c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kam_Latn_KE", 3548c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kam" 3549c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3550c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kk", 3551c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kk_Cyrl_KZ", 3552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kk" 3553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3554c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kl", 3555c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kl_Latn_GL", 3556c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kl" 3557c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "km", 3559c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "km_Khmr_KH", 3560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "km" 3561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kn", 3563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kn_Knda_IN", 3564c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kn" 3565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko", 3567c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko_Kore_KR", 3568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko" 3569c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3570c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kok", 3571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kok_Deva_IN", 3572c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kok" 3573c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3574c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kpe", 3575c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kpe_Latn_LR", 3576c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kpe" 3577c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ku", 3579103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "ku_Latn_TR", 3580c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ku" 3581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3582c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ky", 3583c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ky_Cyrl_KG", 3584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ky" 3585c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "la", 3587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "la_Latn_VA", 3588c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "la" 3589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3590c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ln", 3591c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ln_Latn_CD", 3592c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ln" 3593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lo", 3595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lo_Laoo_LA", 3596c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lo" 3597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3598c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lt", 3599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lt_Latn_LT", 3600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lt" 3601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lv", 3603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lv_Latn_LV", 3604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lv" 3605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mg", 3607c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mg_Latn_MG", 3608c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mg" 3609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mh", 3611c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mh_Latn_MH", 3612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mh" 3613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mk", 3615c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mk_Cyrl_MK", 3616c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mk" 3617c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3618c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ml", 3619c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ml_Mlym_IN", 3620c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ml" 3621c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3622c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mn", 3623c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mn_Cyrl_MN", 3624c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mn" 3625c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3626c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mr", 3627c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mr_Deva_IN", 3628c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mr" 3629c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3630c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ms", 3631c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ms_Latn_MY", 3632c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ms" 3633c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3634c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mt", 3635c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mt_Latn_MT", 3636c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mt" 3637c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3638c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "my", 3639c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "my_Mymr_MM", 3640c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "my" 3641c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3642c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "na", 3643c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "na_Latn_NR", 3644c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "na" 3645c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ne", 3647c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ne_Deva_NP", 3648c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ne" 3649c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3650c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "niu", 3651c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "niu_Latn_NU", 3652c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "niu" 3653c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3654c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl", 3655c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_Latn_NL", 3656c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl" 3657c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3658c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nn", 3659c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nn_Latn_NO", 3660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nn" 3661c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3662c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nr", 3663c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nr_Latn_ZA", 3664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nr" 3665c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nso", 3667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nso_Latn_ZA", 3668c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nso" 3669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ny", 3671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ny_Latn_MW", 3672c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ny" 3673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3674c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "om", 3675c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "om_Latn_ET", 3676c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "om" 3677c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3678c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "or", 3679c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "or_Orya_IN", 3680c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "or" 3681c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3682c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa", 3683c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_Guru_IN", 3684c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa" 3685c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_Arab", 3687c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_Arab_PK", 3688c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_PK" 3689c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3690c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_PK", 3691c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_Arab_PK", 3692c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_PK" 3693c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3694c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pap", 369559d709d503bab6e2b61931737e662dd293b40578ccornelius "pap_Latn_AW", 3696c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pap" 3697c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3698c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pau", 3699c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pau_Latn_PW", 3700c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pau" 3701c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3702c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pl", 3703c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pl_Latn_PL", 3704c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pl" 3705c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3706c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ps", 3707c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ps_Arab_AF", 3708c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ps" 3709c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3710c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt", 3711c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_BR", 3712c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt" 3713c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3714c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rn", 3715c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rn_Latn_BI", 3716c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rn" 3717c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3718c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ro", 3719c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ro_Latn_RO", 3720c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ro" 3721c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3722c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru", 3723c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru_Cyrl_RU", 3724c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru" 3725c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3726c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rw", 3727c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rw_Latn_RW", 3728c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rw" 3729c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3730c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sa", 3731c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sa_Deva_IN", 3732c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sa" 3733c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3734c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "se", 3735c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "se_Latn_NO", 3736c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "se" 3737c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3738c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sg", 3739c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sg_Latn_CF", 3740c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sg" 3741c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3742c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "si", 3743c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "si_Sinh_LK", 3744c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "si" 3745c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3746c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sid", 3747c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sid_Latn_ET", 3748c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sid" 3749c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3750c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sk", 3751c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sk_Latn_SK", 3752c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sk" 3753c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3754c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sl", 3755c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sl_Latn_SI", 3756c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sl" 3757c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3758c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sm", 3759c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sm_Latn_WS", 3760c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sm" 3761c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3762c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "so", 3763c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "so_Latn_SO", 3764c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "so" 3765c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3766c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sq", 3767c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sq_Latn_AL", 3768c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sq" 3769c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3770c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sr", 3771c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sr_Cyrl_RS", 3772c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sr" 3773c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3774c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ss", 3775c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ss_Latn_ZA", 3776c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ss" 3777c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3778c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "st", 3779c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "st_Latn_ZA", 3780c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "st" 3781c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3782c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sv", 3783c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sv_Latn_SE", 3784c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sv" 3785c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3786c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sw", 3787c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sw_Latn_TZ", 3788c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sw" 3789c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3790c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ta", 3791c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ta_Taml_IN", 3792c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ta" 3793c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3794c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "te", 3795c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "te_Telu_IN", 3796c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "te" 3797c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3798c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tet", 3799c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tet_Latn_TL", 3800c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tet" 3801c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3802c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tg", 3803c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tg_Cyrl_TJ", 3804c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tg" 3805c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3806c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th", 3807c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th_Thai_TH", 3808c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th" 3809c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3810c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ti", 3811c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ti_Ethi_ET", 3812c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ti" 3813c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3814c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tig", 3815c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tig_Ethi_ER", 3816c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tig" 3817c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3818c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tk", 3819c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tk_Latn_TM", 3820c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tk" 3821c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3822c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tkl", 3823c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tkl_Latn_TK", 3824c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tkl" 3825c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3826c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tn", 3827c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tn_Latn_ZA", 3828c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tn" 3829c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3830c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "to", 3831c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "to_Latn_TO", 3832c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "to" 3833c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3834c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tpi", 3835c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tpi_Latn_PG", 3836c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tpi" 3837c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3838c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tr", 3839c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tr_Latn_TR", 3840c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tr" 3841c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3842c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ts", 3843c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ts_Latn_ZA", 3844c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ts" 3845c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3846c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tt", 3847c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tt_Cyrl_RU", 3848c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tt" 3849c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3850c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tvl", 3851c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tvl_Latn_TV", 3852c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tvl" 3853c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3854c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ty", 3855c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ty_Latn_PF", 3856c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ty" 3857c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3858c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uk", 3859c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uk_Cyrl_UA", 3860c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uk" 3861c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3862c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und", 3863c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 3864c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 3865c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3866c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AD", 3867c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ca_Latn_AD", 3868c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ca_AD" 3869c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3870c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AE", 3871c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_AE", 3872c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_AE" 3873c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3874c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AF", 3875c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fa_Arab_AF", 3876c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fa_AF" 3877c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3878c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AL", 3879c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sq_Latn_AL", 3880c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sq" 3881c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3882c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AM", 3883c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hy_Armn_AM", 3884c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hy" 3885c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3886c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AO", 3887c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_AO", 3888c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_AO" 3889c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3890c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AR", 3891c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_AR", 3892c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_AR" 3893c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3894c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AS", 3895c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sm_Latn_AS", 3896c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sm_AS" 3897c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3898c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AT", 3899c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_Latn_AT", 3900c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_AT" 3901c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3902c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AW", 3903c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_Latn_AW", 3904c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_AW" 3905c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3906c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AX", 3907c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sv_Latn_AX", 3908c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sv_AX" 3909c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3910c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AZ", 3911c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "az_Latn_AZ", 3912c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "az" 3913c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3914c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Arab", 3915c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_EG", 3916c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar" 3917c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3918c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Arab_IN", 3919c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ur_Arab_IN", 3920c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ur_IN" 3921c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3922c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Arab_PK", 3923c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ur_Arab_PK", 3924c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ur" 3925c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3926c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Arab_SN", 39271258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "ar_Arab_SN", 39281258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "ar_SN" 3929c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3930c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Armn", 3931c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hy_Armn_AM", 3932c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hy" 3933c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3934c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BA", 3935c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bs_Latn_BA", 3936c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bs" 3937c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3938c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BD", 3939c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn_Beng_BD", 3940c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn" 3941c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3942c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BE", 3943c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_Latn_BE", 3944c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_BE" 3945c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3946c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BF", 3947c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_BF", 3948c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_BF" 3949c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3950c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BG", 3951c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bg_Cyrl_BG", 3952c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bg" 3953c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3954c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BH", 3955c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_BH", 3956c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_BH" 3957c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3958c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BI", 3959c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rn_Latn_BI", 3960c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rn" 3961c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3962c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BJ", 3963c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_BJ", 3964c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_BJ" 3965c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3966c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BN", 3967c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ms_Latn_BN", 3968c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ms_BN" 3969c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3970c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BO", 3971c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_BO", 3972c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_BO" 3973c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3974c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BR", 3975c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_BR", 3976c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt" 3977c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3978c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BT", 3979c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dz_Tibt_BT", 3980c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dz" 3981c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3982c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_BY", 3983c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "be_Cyrl_BY", 3984c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "be" 3985c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3986c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Beng", 3987c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn_Beng_BD", 3988c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn" 3989c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3990c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Beng_IN", 3991c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn_Beng_IN", 3992c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bn_IN" 3993c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3994c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CD", 3995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "sw_Latn_CD", 3996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "sw_CD" 3997c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 3998c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CF", 3999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_Latn_CF", 4000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_CF" 4001c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CG", 4003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_Latn_CG", 4004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_CG" 4005c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4006c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CH", 4007c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_Latn_CH", 4008c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_CH" 4009c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4010c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CI", 4011c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_CI", 4012c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_CI" 4013c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4014c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CL", 4015c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CL", 4016c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CL" 4017c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4018c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CM", 4019c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_CM", 4020c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_CM" 4021c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4022c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CN", 4023c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4024c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4025c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4026c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CO", 4027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CO", 4028c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CO" 4029c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4030c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CR", 4031c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CR", 4032c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CR" 4033c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4034c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CU", 4035c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CU", 4036c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CU" 4037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CV", 4039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_CV", 4040c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_CV" 4041c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4042c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CY", 4043c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el_Grek_CY", 4044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el_CY" 4045c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4046c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CZ", 4047c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cs_Latn_CZ", 4048c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "cs" 4049c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 405050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "und_Cher", 405150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "chr_Cher_US", 405250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "chr" 4053c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4054c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Cyrl", 4055c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru_Cyrl_RU", 4056c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru" 4057c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4058c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Cyrl_KZ", 40591258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "ru_Cyrl_KZ", 40601258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "ru_KZ" 4061c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4062c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_DE", 4063c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_Latn_DE", 4064c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de" 4065c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4066c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_DJ", 4067c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "aa_Latn_DJ", 4068c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "aa_DJ" 4069c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4070c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_DK", 4071c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "da_Latn_DK", 4072c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "da" 4073c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4074c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_DO", 4075c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_DO", 4076c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_DO" 4077c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4078c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_DZ", 4079c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_DZ", 4080c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_DZ" 4081c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4082c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Deva", 4083c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hi_Deva_IN", 4084c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hi" 4085c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4086c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_EC", 4087c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_EC", 4088c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_EC" 4089c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4090c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_EE", 4091c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "et_Latn_EE", 4092c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "et" 4093c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4094c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_EG", 4095c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_EG", 4096c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar" 4097c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4098c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_EH", 4099c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_EH", 4100c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_EH" 4101c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4102c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_ER", 4103c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ti_Ethi_ER", 4104c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ti_ER" 4105c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4106c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_ES", 4107c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 4108c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 4109c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4110c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_ET", 41118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "am_Ethi_ET", 41128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "am" 4113c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4114c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Ethi", 4115c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "am_Ethi_ET", 4116c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "am" 4117c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4118c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Ethi_ER", 41191258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "am_Ethi_ER", 41201258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "am_ER" 4121c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4122c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_FI", 4123c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fi_Latn_FI", 4124c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fi" 4125c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4126c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_FM", 41271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "en_Latn_FM", 41281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "en_FM" 4129c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4130c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_FO", 4131c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fo_Latn_FO", 4132c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fo" 4133c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4134c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_FR", 4135c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_FR", 4136c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr" 4137c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4138c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GA", 4139c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_GA", 4140c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_GA" 4141c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4142c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GE", 4143c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ka_Geor_GE", 4144c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ka" 4145c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4146c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GF", 4147c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_GF", 4148c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_GF" 4149c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4150c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GL", 4151c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kl_Latn_GL", 4152c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kl" 4153c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4154c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GN", 4155c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_GN", 4156c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_GN" 4157c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4158c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GP", 4159c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_GP", 4160c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_GP" 4161c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4162c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GQ", 416350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "es_Latn_GQ", 416450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "es_GQ" 4165c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4166c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GR", 4167c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el_Grek_GR", 4168c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el" 4169c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4170c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GT", 4171c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_GT", 4172c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_GT" 4173c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4174c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GU", 41751258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_Latn_GU", 41761258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_GU" 4177c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4178c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_GW", 4179c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_GW", 4180c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_GW" 4181c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4182c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Geor", 4183c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ka_Geor_GE", 4184c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ka" 4185c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4186c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Grek", 4187c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el_Grek_GR", 4188c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "el" 4189c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4190c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Gujr", 4191c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gu_Gujr_IN", 4192c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gu" 4193c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4194c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Guru", 4195c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa_Guru_IN", 4196c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pa" 4197c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4198c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_HK", 4199c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK", 4200c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK" 4201c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4202c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_HN", 4203c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_HN", 4204c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_HN" 4205c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4206c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_HR", 4207c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hr_Latn_HR", 4208c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hr" 4209c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4210c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_HT", 4211c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ht_Latn_HT", 4212c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ht" 4213c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4214c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_HU", 4215c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hu_Latn_HU", 4216c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hu" 4217c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4218c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hani", 421959d709d503bab6e2b61931737e662dd293b40578ccornelius "zh_Hani_CN", 422059d709d503bab6e2b61931737e662dd293b40578ccornelius "zh_Hani" 4221c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4222c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hans", 4223c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4224c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4225c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4226c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hant", 4227c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4228c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4229c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4230c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hebr", 4231c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "he_Hebr_IL", 4232c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "he" 4233c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4234c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_IL", 4235c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "he_Hebr_IL", 4236c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "he" 4237c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4238c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_IN", 4239c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hi_Deva_IN", 4240c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "hi" 4241c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4242c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_IQ", 4243c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_IQ", 4244c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_IQ" 4245c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4246c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_IR", 4247c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fa_Arab_IR", 4248c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fa" 4249c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4250c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_IS", 4251c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "is_Latn_IS", 4252c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "is" 4253c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4254c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_IT", 4255c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it_Latn_IT", 4256c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it" 4257c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4258c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_JO", 4259c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_JO", 4260c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_JO" 4261c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4262c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_JP", 4263c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ja_Jpan_JP", 4264c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ja" 4265c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4266c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Jpan", 4267c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ja_Jpan_JP", 4268c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ja" 4269c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4270c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_KG", 4271c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ky_Cyrl_KG", 4272c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ky" 4273c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4274c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_KH", 4275c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "km_Khmr_KH", 4276c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "km" 4277c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4278c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_KM", 4279c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_KM", 4280c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_KM" 4281c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4282c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_KP", 4283c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko_Kore_KP", 4284c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko_KP" 4285c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4286c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_KR", 4287c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko_Kore_KR", 4288c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko" 4289c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4290c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_KW", 4291c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_KW", 4292c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_KW" 4293c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4294c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_KZ", 4295c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru_Cyrl_KZ", 4296c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru_KZ" 4297c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4298c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Khmr", 4299c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "km_Khmr_KH", 4300c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "km" 4301c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4302c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Knda", 4303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kn_Knda_IN", 4304c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "kn" 4305c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4306c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Kore", 4307c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko_Kore_KR", 4308c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ko" 4309c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4310c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LA", 4311c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lo_Laoo_LA", 4312c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lo" 4313c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4314c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LB", 4315c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_LB", 4316c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_LB" 4317c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4318c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LI", 4319c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_Latn_LI", 4320c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "de_LI" 4321c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LK", 4323c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "si_Sinh_LK", 4324c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "si" 4325c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4326c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LS", 4327c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "st_Latn_LS", 4328c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "st_LS" 4329c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4330c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LT", 4331c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lt_Latn_LT", 4332c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lt" 4333c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4334c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LU", 4335c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_LU", 4336c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_LU" 4337c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4338c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LV", 4339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lv_Latn_LV", 4340c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lv" 4341c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4342c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_LY", 4343c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_LY", 4344c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_LY" 4345c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4346c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Laoo", 4347c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lo_Laoo_LA", 4348c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "lo" 4349c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_ES", 4351c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 4352c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 4353c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4354c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_ET", 435559d709d503bab6e2b61931737e662dd293b40578ccornelius "en_Latn_ET", 435659d709d503bab6e2b61931737e662dd293b40578ccornelius "en_ET" 4357c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4358c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_GB", 4359c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_GB", 4360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_GB" 4361c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4362c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_GH", 4363c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ak_Latn_GH", 4364c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ak" 4365c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4366c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_ID", 4367c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "id_Latn_ID", 4368c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "id" 4369c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4370c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_IT", 4371c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it_Latn_IT", 4372c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it" 4373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_NG", 4375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "en_Latn_NG", 4376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "en_NG" 4377c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4378c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_TR", 4379c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tr_Latn_TR", 4380c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tr" 4381c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4382c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_ZA", 43831258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_Latn_ZA", 43841258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_ZA" 4385c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4386c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MA", 4387c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_MA", 4388c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_MA" 4389c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4390c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MC", 4391c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_MC", 4392c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_MC" 4393c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4394c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MD", 4395c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ro_Latn_MD", 4396c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ro_MD" 4397c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4398c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_ME", 4399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "sr_Latn_ME", 4400c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sr_ME" 4401c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4402c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MG", 4403c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mg_Latn_MG", 4404c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mg" 4405c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4406c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MH", 44071258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_Latn_MH", 44081258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_MH" 4409c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4410c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MK", 4411c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mk_Cyrl_MK", 4412c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mk" 4413c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4414c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_ML", 441550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "bm_Latn_ML", 441650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "bm" 4417c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4418c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MM", 4419c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "my_Mymr_MM", 4420c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "my" 4421c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4422c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MN", 4423c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mn_Cyrl_MN", 4424c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mn" 4425c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4426c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MO", 4427c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_MO", 4428c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_MO" 4429c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4430c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MQ", 4431c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_MQ", 4432c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_MQ" 4433c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4434c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MR", 4435c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_MR", 4436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_MR" 4437c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4438c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MT", 4439c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mt_Latn_MT", 4440c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "mt" 4441c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MV", 4443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dv_Thaa_MV", 4444c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dv" 4445c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4446c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MW", 444750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "en_Latn_MW", 444850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "en_MW" 4449c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4450c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MX", 4451c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_MX", 4452c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_MX" 4453c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4454c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MY", 4455c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ms_Latn_MY", 4456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ms" 4457c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4458c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_MZ", 4459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_MZ", 4460c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_MZ" 4461c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4462c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Mlym", 4463c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ml_Mlym_IN", 4464c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ml" 4465c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4466c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Mymr", 4467c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "my_Mymr_MM", 4468c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "my" 4469c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4470c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NC", 4471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_NC", 4472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_NC" 4473c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4474c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NE", 4475c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ha_Latn_NE", 4476c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ha_NE" 4477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4478c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NG", 4479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "en_Latn_NG", 4480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "en_NG" 4481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NI", 4483c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_NI", 4484c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_NI" 4485c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4486c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NL", 4487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_Latn_NL", 4488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl" 4489c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NO", 44914b05912059a8780b56c7b70160e6d27a8de6c3caFredrik Roubert "no_Latn_NO", /* Google patch */ 44924b05912059a8780b56c7b70160e6d27a8de6c3caFredrik Roubert "no" /* Google patch */ 4493c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4494c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NP", 4495c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ne_Deva_NP", 4496c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ne" 4497c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4498c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NR", 44991258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_Latn_NR", 45001258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_NR" 4501c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4502c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_NU", 45031258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_Latn_NU", 45041258862d9ee0c6a08dd7bc77ebfd302c8e4f2a3bccornelius "en_NU" 4505c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4506c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_OM", 4507c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_OM", 4508c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_OM" 4509c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4510c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Orya", 4511c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "or_Orya_IN", 4512c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "or" 4513c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4514c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PA", 4515c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_PA", 4516c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_PA" 4517c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4518c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PE", 4519c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_PE", 4520c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_PE" 4521c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4522c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PF", 4523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_Latn_PF", 4524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_PF" 4525c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4526c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PG", 4527c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tpi_Latn_PG", 4528c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tpi" 4529c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4530c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PH", 4531c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fil_Latn_PH", 4532c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fil" 4533c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4534c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PL", 4535c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pl_Latn_PL", 4536c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pl" 4537c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4538c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PM", 4539c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_PM", 4540c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_PM" 4541c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4542c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PR", 4543c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_PR", 4544c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_PR" 4545c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PS", 4547c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_PS", 4548c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_PS" 4549c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4550c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PT", 4551c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_PT", 4552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_PT" 4553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4554c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PW", 4555c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pau_Latn_PW", 4556c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pau" 4557c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_PY", 4559c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gn_Latn_PY", 4560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "gn" 4561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_QA", 4563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_QA", 4564c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_QA" 4565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_RE", 4567c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_RE", 4568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_RE" 4569c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4570c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_RO", 4571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ro_Latn_RO", 4572c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ro" 4573c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4574c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_RS", 4575c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sr_Cyrl_RS", 4576c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sr" 4577c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_RU", 4579c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru_Cyrl_RU", 4580c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ru" 4581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4582c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_RW", 4583c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rw_Latn_RW", 4584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "rw" 4585c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SA", 4587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_SA", 4588c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_SA" 4589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4590c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SD", 4591c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_SD", 4592c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_SD" 4593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SE", 4595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sv_Latn_SE", 4596c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sv" 4597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4598c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SG", 4599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_SG", 4600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_SG" 4601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SI", 4603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sl_Latn_SI", 4604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sl" 4605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SJ", 46074b05912059a8780b56c7b70160e6d27a8de6c3caFredrik Roubert "no_Latn_SJ", /* Google patch */ 46084b05912059a8780b56c7b70160e6d27a8de6c3caFredrik Roubert "no_SJ" /* Google patch */ 4609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SK", 4611c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sk_Latn_SK", 4612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sk" 4613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SM", 4615c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it_Latn_SM", 4616c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "it_SM" 4617c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4618c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SN", 4619c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_SN", 4620c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_SN" 4621c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4622c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SO", 4623c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "so_Latn_SO", 4624c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "so" 4625c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4626c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SR", 4627c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_Latn_SR", 4628c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "nl_SR" 4629c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4630c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_ST", 4631c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_Latn_ST", 4632c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "pt_ST" 4633c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4634c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SV", 4635c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_SV", 4636c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_SV" 4637c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4638c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_SY", 4639c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_SY", 4640c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_SY" 4641c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4642c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Sinh", 4643c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "si_Sinh_LK", 4644c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "si" 4645c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TD", 4647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_Latn_TD", 4648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_TD" 4649c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4650c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TG", 4651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_Latn_TG", 4652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "fr_TG" 4653c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4654c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TH", 4655c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th_Thai_TH", 4656c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th" 4657c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4658c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TJ", 4659c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tg_Cyrl_TJ", 4660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tg" 4661c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4662c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TK", 466350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "tkl_Latn_TK", 466450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "tkl" 4665c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TL", 4667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "pt_Latn_TL", 4668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "pt_TL" 4669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TM", 4671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tk_Latn_TM", 4672c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tk" 4673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4674c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TN", 4675c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_TN", 4676c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_TN" 4677c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4678c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TO", 4679c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "to_Latn_TO", 4680c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "to" 4681c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4682c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TR", 4683c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tr_Latn_TR", 4684c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tr" 4685c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TV", 4687c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tvl_Latn_TV", 4688c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "tvl" 4689c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4690c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TW", 4691c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4692c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4693c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4694c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Taml", 4695c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ta_Taml_IN", 4696c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ta" 4697c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4698c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Telu", 4699c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "te_Telu_IN", 4700c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "te" 4701c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4702c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Thaa", 4703c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dv_Thaa_MV", 4704c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "dv" 4705c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4706c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Thai", 4707c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th_Thai_TH", 4708c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "th" 4709c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4710c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Tibt", 4711c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bo_Tibt_CN", 4712c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "bo" 4713c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4714c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_UA", 4715c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uk_Cyrl_UA", 4716c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uk" 4717c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4718c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_UY", 4719c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_UY", 4720c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_UY" 4721c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4722c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_UZ", 472359d709d503bab6e2b61931737e662dd293b40578ccornelius "uz_Latn_UZ", 4724c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz" 4725c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4726c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_VA", 4727f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "it_Latn_VA", 4728f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "it_VA" 4729c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4730c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_VE", 4731c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_VE", 4732c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_VE" 4733c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4734c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_VN", 4735c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "vi_Latn_VN", 4736c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "vi" 4737c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4738c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_VU", 4739b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "bi_Latn_VU", 4740b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "bi" 4741c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4742c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_WF", 4743c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_WF", 4744c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_WF" 4745c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4746c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_WS", 4747c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sm_Latn_WS", 4748c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "sm" 4749c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4750c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_YE", 4751c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_Arab_YE", 4752c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ar_YE" 4753c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4754c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_YT", 4755c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_Latn_YT", 4756c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "fr_YT" 4757c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4758c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Yiii", 4759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ii_Yiii_CN", 4760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ii" 4761c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4762c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ur", 4763c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ur_Arab_PK", 4764c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ur" 4765c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4766c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz", 476759d709d503bab6e2b61931737e662dd293b40578ccornelius "uz_Latn_UZ", 4768c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz" 4769c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4770c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz_AF", 4771c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz_Arab_AF", 4772c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz_AF" 4773c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4774c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz_Arab", 4775c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz_Arab_AF", 4776c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "uz_AF" 4777c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4778c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ve", 4779c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ve_Latn_ZA", 4780c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "ve" 4781c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4782c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "vi", 4783c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "vi_Latn_VN", 4784c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "vi" 4785c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4786c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "wal", 4787c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "wal_Ethi_ET", 4788c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "wal" 4789c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4790c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "wo", 4791c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "wo_Latn_SN", 4792c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "wo" 4793c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4794c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "xh", 4795c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "xh_Latn_ZA", 4796c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "xh" 4797c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4798c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "yo", 4799c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "yo_Latn_NG", 4800c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "yo" 4801c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4802c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh", 4803c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4804c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4805c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4806c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK", 4807c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK", 4808c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK" 4809c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4810c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hani", 481159d709d503bab6e2b61931737e662dd293b40578ccornelius "zh_Hani_CN", /* changed due to cldrbug 6204, may be an error */ 481259d709d503bab6e2b61931737e662dd293b40578ccornelius "zh_Hani", /* changed due to cldrbug 6204, may be an error */ 4813c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4814c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant", 4815c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4816c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4817c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4818c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_MO", 4819c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_MO", 4820c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_MO" 4821c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4822c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW", 4823c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4824c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4825c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4826c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu", 4827c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu_Latn_ZA", 4828c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zu" 4829c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4830c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und", 4831c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 4832c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 4833c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4834c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_ZZ", 4835c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 4836c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 4837c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4838c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_CN", 4839c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4840c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4841c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4842c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_TW", 4843c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4844c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4845c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4846c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_HK", 4847c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK", 4848c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK" 4849c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4850c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_AQ", 48518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_Latn_AQ", 48528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_AQ" 4853c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4854c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Zzzz", 4855c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 4856c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 4857c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4858c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Zzzz_ZZ", 4859c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 4860c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 4861c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4862c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Zzzz_CN", 4863c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4864c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4865c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4866c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Zzzz_TW", 4867c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4868c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4869c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4870c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Zzzz_HK", 4871c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK", 4872c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK" 4873c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4874c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Zzzz_AQ", 48758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_Latn_AQ", 48768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_AQ" 4877c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4878c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn", 4879c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 4880c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 4881c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4882c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_ZZ", 4883c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US", 4884c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en" 4885c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4886c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_CN", 4887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "za_Latn_CN", 4888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "za" 4889c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4890c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_TW", 48918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "trv_Latn_TW", 48928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "trv" 4893c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4894c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_HK", 4895c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_HK", 4896c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_HK" 4897c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4898c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Latn_AQ", 48998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_Latn_AQ", 49008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_AQ" 4901c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4902c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hans", 4903c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4904c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4905c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4906c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hans_ZZ", 4907c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4908c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4909c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4910c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hans_CN", 4911c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 4912c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 4913c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4914c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hans_TW", 4915c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_TW", 4916c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_TW" 4917c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4918c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hans_HK", 4919c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_HK", 4920c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_HK" 4921c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4922c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hans_AQ", 4923c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_AQ", 4924c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_AQ" 4925c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4926c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hant", 4927c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4928c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4929c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4930c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hant_ZZ", 4931c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4932c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4933c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4934c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hant_CN", 4935c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_CN", 4936c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_CN" 4937c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4938c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hant_TW", 4939c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 4940c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 4941c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4942c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hant_HK", 4943c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK", 4944c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK" 4945c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4946c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Hant_AQ", 4947c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_AQ", 4948c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_AQ" 4949c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4950c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Moon", 4951c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Moon_US", 4952c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Moon" 4953c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4954c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Moon_ZZ", 4955c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Moon_US", 4956c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Moon" 4957c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4958c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Moon_CN", 4959c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_CN", 4960c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon" 4961c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4962c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Moon_TW", 4963c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_TW", 4964c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_TW" 4965c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4966c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Moon_HK", 4967c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_HK", 4968c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_HK" 4969c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4970c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "und_Moon_AQ", 49718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_Moon_AQ", 49728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "und_Moon_AQ" 4973c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4974c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es", 4975c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 4976c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 4977c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4978c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_ZZ", 4979c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 4980c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 4981c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4982c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CN", 4983c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CN", 4984c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CN" 4985c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4986c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_TW", 4987c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_TW", 4988c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_TW" 4989c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4990c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_HK", 4991c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_HK", 4992c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_HK" 4993c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4994c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_AQ", 4995c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_AQ", 4996c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_AQ" 4997c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 4998c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Zzzz", 4999c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 5000c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 5001c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Zzzz_ZZ", 5003c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 5004c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 5005c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5006c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Zzzz_CN", 5007c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CN", 5008c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CN" 5009c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5010c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Zzzz_TW", 5011c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_TW", 5012c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_TW" 5013c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5014c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Zzzz_HK", 5015c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_HK", 5016c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_HK" 5017c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5018c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Zzzz_AQ", 5019c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_AQ", 5020c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_AQ" 5021c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5022c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn", 5023c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 5024c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 5025c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5026c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ZZ", 5027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_ES", 5028c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es" 5029c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5030c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CN", 5031c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_CN", 5032c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_CN" 5033c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5034c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_TW", 5035c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_TW", 5036c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_TW" 5037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_HK", 5039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_HK", 5040c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_HK" 5041c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5042c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_AQ", 5043c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Latn_AQ", 5044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_AQ" 5045c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5046c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans", 5047c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_ES", 5048c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans" 5049c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5050c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_ZZ", 5051c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_ES", 5052c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans" 5053c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5054c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_CN", 5055c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_CN", 5056c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_CN" 5057c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5058c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_TW", 5059c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_TW", 5060c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_TW" 5061c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5062c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_HK", 5063c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_HK", 5064c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_HK" 5065c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5066c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_AQ", 5067c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_AQ", 5068c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hans_AQ" 5069c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5070c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant", 5071c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_ES", 5072c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant" 5073c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5074c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_ZZ", 5075c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_ES", 5076c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant" 5077c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5078c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_CN", 5079c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_CN", 5080c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_CN" 5081c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5082c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_TW", 5083c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_TW", 5084c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_TW" 5085c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5086c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_HK", 5087c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_HK", 5088c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_HK" 5089c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5090c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_AQ", 5091c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_AQ", 5092c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Hant_AQ" 5093c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5094c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon", 5095c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_ES", 5096c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon" 5097c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5098c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_ZZ", 5099c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_ES", 5100c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon" 5101c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5102c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_CN", 5103c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_CN", 5104c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_CN" 5105c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5106c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_TW", 5107c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_TW", 5108c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_TW" 5109c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5110c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_HK", 5111c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_HK", 5112c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_HK" 5113c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5114c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_AQ", 5115c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_AQ", 5116c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "es_Moon_AQ" 5117c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5118c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh", 5119c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5120c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5121c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5122c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_ZZ", 5123c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5124c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5125c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5126c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_CN", 5127c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5128c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5129c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5130c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW", 5131c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 5132c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 5133c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5134c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK", 5135c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK", 5136c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK" 5137c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5138c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_AQ", 5139c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_AQ", 5140c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_AQ" 5141c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5142c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Zzzz", 5143c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5144c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5145c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5146c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Zzzz_ZZ", 5147c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5148c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5149c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5150c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Zzzz_CN", 5151c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5152c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5153c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5154c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Zzzz_TW", 5155c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 5156c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 5157c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5158c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Zzzz_HK", 5159c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_HK", 5160c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_HK" 5161c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5162c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Zzzz_AQ", 5163c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_AQ", 5164c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_AQ" 5165c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5166c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn", 5167c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_CN", 5168c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn" 5169c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5170c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_ZZ", 5171c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_CN", 5172c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn" 5173c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5174c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_CN", 5175c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_CN", 5176c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn" 5177c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5178c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_TW", 5179c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_TW", 5180c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_TW" 5181c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5182c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_HK", 5183c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_HK", 5184c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_HK" 5185c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5186c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_AQ", 5187c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_AQ", 5188c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Latn_AQ" 5189c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5190c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans", 5191c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5192c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5193c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5194c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_ZZ", 5195c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_CN", 5196c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh" 5197c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5198c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_TW", 5199c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_TW", 5200c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_TW" 5201c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5202c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_HK", 5203c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_HK", 5204c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_HK" 5205c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5206c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_AQ", 5207c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hans_AQ", 5208c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_AQ" 5209c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5210c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant", 5211c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 5212c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 5213c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5214c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_ZZ", 5215c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_TW", 5216c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_TW" 5217c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5218c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_CN", 5219c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_CN", 5220c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_CN" 5221c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5222c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_AQ", 5223c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_AQ", 5224c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Hant_AQ" 5225c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5226c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon", 5227c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_CN", 5228c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon" 5229c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5230c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_ZZ", 5231c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_CN", 5232c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon" 5233c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5234c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_CN", 5235c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_CN", 5236c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon" 5237c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5238c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_TW", 5239c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_TW", 5240c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_TW" 5241c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5242c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_HK", 5243c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_HK", 5244c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_HK" 5245c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5246c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_AQ", 5247c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_AQ", 5248c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "zh_Moon_AQ" 5249c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5250c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art", 5251c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5252c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5253c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5254c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_ZZ", 5255c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5256c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5257c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5258c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_CN", 5259c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5260c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5261c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5262c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_TW", 5263c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5264c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5265c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5266c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_HK", 5267c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5268c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5269c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5270c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_AQ", 5271c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5272c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5273c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5274c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Zzzz", 5275c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5276c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5277c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5278c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Zzzz_ZZ", 5279c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5280c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5281c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5282c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Zzzz_CN", 5283c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5284c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5285c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5286c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Zzzz_TW", 5287c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5288c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5289c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5290c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Zzzz_HK", 5291c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5292c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5293c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5294c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Zzzz_AQ", 5295c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5296c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5297c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5298c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Latn", 5299c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5300c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5301c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5302c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Latn_ZZ", 5303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5304c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5305c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5306c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Latn_CN", 5307c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5308c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5309c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5310c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Latn_TW", 5311c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5312c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5313c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5314c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Latn_HK", 5315c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5316c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5317c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5318c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Latn_AQ", 5319c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5320c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5321c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hans", 5323c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5324c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5325c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5326c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hans_ZZ", 5327c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5328c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5329c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5330c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hans_CN", 5331c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5332c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5333c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5334c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hans_TW", 5335c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5336c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5337c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5338c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hans_HK", 5339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5340c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5341c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5342c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hans_AQ", 5343c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5344c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5345c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5346c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hant", 5347c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5348c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5349c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hant_ZZ", 5351c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5352c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5353c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5354c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hant_CN", 5355c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5356c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5357c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5358c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hant_TW", 5359c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5361c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5362c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hant_HK", 5363c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5364c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5365c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5366c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Hant_AQ", 5367c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5368c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5369c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5370c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Moon", 5371c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5372c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Moon_ZZ", 5375c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5376c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5377c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5378c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Moon_CN", 5379c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5380c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5381c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5382c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Moon_TW", 5383c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5384c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5385c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5386c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Moon_HK", 5387c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5388c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5389c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, { 5390c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "art_Moon_AQ", 5391c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "", 5392c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "" 5393b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }, { 5394b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de@collation=phonebook", 5395b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de_Latn_DE@collation=phonebook", 5396b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "de@collation=phonebook" 5397c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5398c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}; 5399c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5400c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querutypedef struct errorDataTag { 5401c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* tag; 5402c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* expected; 5403c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode uerror; 5404c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t bufferSize; 5405c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} errorData; 5406c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5407c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruconst errorData maximizeErrors[] = { 5408c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5409c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "enfueiujhytdf", 5410c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru NULL, 5411c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_ILLEGAL_ARGUMENT_ERROR, 5412c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru -1 5413c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, 5414c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5415c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_THUJIOGIURJHGJFURYHFJGURYYYHHGJURHG", 5416c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru NULL, 5417c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_ILLEGAL_ARGUMENT_ERROR, 5418c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru -1 5419c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, 5420c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5421c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_THUJIOGIURJHGJFURYHFJGURYYYHHGJURHG", 5422c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru NULL, 5423c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_ILLEGAL_ARGUMENT_ERROR, 5424c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru -1 5425c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, 5426c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5427c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX@currency=EURO", 5428c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX@currency=EURO", 5429c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_BUFFER_OVERFLOW_ERROR, 5430c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 29 5431c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, 5432c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5433c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX@currency=EURO", 5434c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX@currency=EURO", 5435c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_STRING_NOT_TERMINATED_WARNING, 5436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 30 5437c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5438c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}; 5439c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5440c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruconst errorData minimizeErrors[] = { 5441c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "enfueiujhytdf", 5443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru NULL, 5444c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_ILLEGAL_ARGUMENT_ERROR, 5445c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru -1 5446c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, 5447c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5448c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_THUJIOGIURJHGJFURYHFJGURYYYHHGJURHG", 5449c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru NULL, 5450c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_ILLEGAL_ARGUMENT_ERROR, 5451c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru -1 5452c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, 5453c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5454c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX@currency=EURO", 5455c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en__POSIX@currency=EURO", 5456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_BUFFER_OVERFLOW_ERROR, 5457c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 22 5458c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru }, 5459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5460c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en_Latn_US_POSIX@currency=EURO", 5461c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "en__POSIX@currency=EURO", 5462c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru U_STRING_NOT_TERMINATED_WARNING, 5463c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 23 5464c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5465c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}; 5466c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5467c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic int32_t getExpectedReturnValue(const errorData* data) 5468c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 5469c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (data->uerror == U_BUFFER_OVERFLOW_ERROR || 5470c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru data->uerror == U_STRING_NOT_TERMINATED_WARNING) 5471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return strlen(data->expected); 5473c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5474c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else 5475c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5476c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return -1; 5477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5478c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 5479c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5480c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic int32_t getBufferSize(const errorData* data, int32_t actualSize) 5481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 5482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (data->expected == NULL) 5483c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5484c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return actualSize; 5485c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5486c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (data->bufferSize < 0) 5487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return strlen(data->expected) + 1; 5489c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else 5491c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5492c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return data->bufferSize; 5493c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5494c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 5495c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5496c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic void TestLikelySubtags() 5497c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 5498c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru char buffer[ULOC_FULLNAME_CAPACITY + ULOC_KEYWORD_AND_VALUES_CAPACITY + 1]; 5499c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t i = 0; 5500c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5501c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (; i < sizeof(basic_maximize_data) / sizeof(basic_maximize_data[0]); ++i) 5502c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru { 5503c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 5504c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const minimal = basic_maximize_data[i][0]; 5505c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const maximal = basic_maximize_data[i][1]; 5506c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 550750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* const int32_t length = */ 5508c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uloc_addLikelySubtags( 5509c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru minimal, 5510c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer, 5511c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru sizeof(buffer), 5512c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &status); 5513c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status)) { 55146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, " unexpected failure of uloc_addLikelySubtags(), minimal \"%s\" status %s\n", minimal, u_errorName(status)); 5515c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 5516c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5517c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_strlen(maximal) == 0) { 5518c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (uprv_stricmp(minimal, buffer) != 0) { 5519c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected maximal value \"%s\" in uloc_addLikelySubtags(), minimal \"%s\" = \"%s\"\n", maximal, minimal, buffer); 5520c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5521c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5522c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_stricmp(maximal, buffer) != 0) { 5523c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" maximal doesn't match expected %s in uloc_addLikelySubtags(), minimal \"%s\" = %s\n", maximal, minimal, buffer); 5524c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5525c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5526c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5527c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (i = 0; i < sizeof(basic_minimize_data) / sizeof(basic_minimize_data[0]); ++i) { 5528c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5529c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 5530c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const maximal = basic_minimize_data[i][0]; 5531c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const minimal = basic_minimize_data[i][1]; 5532c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 553350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* const int32_t length = */ 5534c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uloc_minimizeSubtags( 5535c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru maximal, 5536c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer, 5537c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru sizeof(buffer), 5538c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &status); 5539c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5540c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status)) { 55416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, " unexpected failure of uloc_MinimizeSubtags(), maximal \"%s\" status %s\n", maximal, u_errorName(status)); 5542c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 5543c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5544c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_strlen(minimal) == 0) { 5545c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (uprv_stricmp(maximal, buffer) != 0) { 5546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected minimal value \"%s\" in uloc_minimizeSubtags(), maximal \"%s\" = \"%s\"\n", minimal, maximal, buffer); 5547c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5548c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5549c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_stricmp(minimal, buffer) != 0) { 5550c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" minimal doesn't match expected %s in uloc_MinimizeSubtags(), maximal \"%s\" = %s\n", minimal, maximal, buffer); 5551c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5554c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (i = 0; i < sizeof(full_data) / sizeof(full_data[0]); ++i) { 5555c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5556c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 5557c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const minimal = full_data[i][0]; 5558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const maximal = full_data[i][1]; 5559c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 556050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* const int32_t length = */ 5561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uloc_addLikelySubtags( 5562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru minimal, 5563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer, 5564c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru sizeof(buffer), 5565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &status); 5566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status)) { 55676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, " unexpected failure of uloc_addLikelySubtags(), minimal \"%s\" status \"%s\"\n", minimal, u_errorName(status)); 5568c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 5569c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5570c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_strlen(maximal) == 0) { 5571c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (uprv_stricmp(minimal, buffer) != 0) { 5572c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected maximal value \"%s\" in uloc_addLikelySubtags(), minimal \"%s\" = \"%s\"\n", maximal, minimal, buffer); 5573c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5574c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5575c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_stricmp(maximal, buffer) != 0) { 5576c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" maximal doesn't match expected \"%s\" in uloc_addLikelySubtags(), minimal \"%s\" = \"%s\"\n", maximal, minimal, buffer); 5577c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5579c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5580c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (i = 0; i < sizeof(full_data) / sizeof(full_data[0]); ++i) { 5581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5582c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 5583c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const maximal = full_data[i][1]; 5584c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const minimal = full_data[i][2]; 5585c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5586c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (strlen(maximal) > 0) { 5587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 558850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* const int32_t length = */ 5589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uloc_minimizeSubtags( 5590c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru maximal, 5591c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer, 5592c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru sizeof(buffer), 5593c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &status); 5594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status)) { 55966d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, " unexpected failure of uloc_minimizeSubtags(), maximal \"%s\" status %s\n", maximal, u_errorName(status)); 5597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 5598c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_strlen(minimal) == 0) { 5600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (uprv_stricmp(maximal, buffer) != 0) { 5601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected minimal value \"%s\" in uloc_minimizeSubtags(), maximal \"%s\" = \"%s\"\n", minimal, maximal, buffer); 5602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (uprv_stricmp(minimal, buffer) != 0) { 5605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" minimal doesn't match expected %s in uloc_MinimizeSubtags(), maximal \"%s\" = %s\n", minimal, maximal, buffer); 5606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5607c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5608c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (i = 0; i < sizeof(maximizeErrors) / sizeof(maximizeErrors[0]); ++i) { 5611c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 5613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const minimal = maximizeErrors[i].tag; 5614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const maximal = maximizeErrors[i].expected; 5615c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const UErrorCode expectedStatus = maximizeErrors[i].uerror; 5616c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const int32_t expectedLength = getExpectedReturnValue(&maximizeErrors[i]); 5617c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const int32_t bufferSize = getBufferSize(&maximizeErrors[i], sizeof(buffer)); 5618c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5619c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const int32_t length = 5620c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uloc_addLikelySubtags( 5621c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru minimal, 5622c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer, 5623c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru bufferSize, 5624c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &status); 5625c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5626c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (status == U_ZERO_ERROR) { 5627c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected U_ZERO_ERROR for uloc_addLikelySubtags(), minimal \"%s\" expected status %s\n", minimal, u_errorName(expectedStatus)); 5628c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 5629c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5630c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (status != expectedStatus) { 56316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, " unexpected status for uloc_addLikelySubtags(), minimal \"%s\" expected status %s, but got %s\n", minimal, u_errorName(expectedStatus), u_errorName(status)); 5632c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5633c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (length != expectedLength) { 5634c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected length for uloc_addLikelySubtags(), minimal \"%s\" expected length %d, but got %d\n", minimal, expectedLength, length); 5635c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5636c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (status == U_BUFFER_OVERFLOW_ERROR || status == U_STRING_NOT_TERMINATED_WARNING) { 5637c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (uprv_strnicmp(maximal, buffer, bufferSize) != 0) { 5638c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" maximal doesn't match expected %s in uloc_addLikelySubtags(), minimal \"%s\" = %*s\n", 5639c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru maximal, minimal, (int)sizeof(buffer), buffer); 5640c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5641c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5642c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5643c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5644c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru for (i = 0; i < sizeof(minimizeErrors) / sizeof(minimizeErrors[0]); ++i) { 5645c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 5647c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const maximal = minimizeErrors[i].tag; 5648c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* const minimal = minimizeErrors[i].expected; 5649c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const UErrorCode expectedStatus = minimizeErrors[i].uerror; 5650c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const int32_t expectedLength = getExpectedReturnValue(&minimizeErrors[i]); 5651c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const int32_t bufferSize = getBufferSize(&minimizeErrors[i], sizeof(buffer)); 5652c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5653c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const int32_t length = 5654c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uloc_minimizeSubtags( 5655c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru maximal, 5656c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer, 5657c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru bufferSize, 5658c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &status); 5659c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 5660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (status == U_ZERO_ERROR) { 5661c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected U_ZERO_ERROR for uloc_minimizeSubtags(), maximal \"%s\" expected status %s\n", maximal, u_errorName(expectedStatus)); 5662c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 5663c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (status != expectedStatus) { 56656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, " unexpected status for uloc_minimizeSubtags(), maximal \"%s\" expected status %s, but got %s\n", maximal, u_errorName(expectedStatus), u_errorName(status)); 5666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (length != expectedLength) { 5668c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" unexpected length for uloc_minimizeSubtags(), maximal \"%s\" expected length %d, but got %d\n", maximal, expectedLength, length); 5669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if (status == U_BUFFER_OVERFLOW_ERROR || status == U_STRING_NOT_TERMINATED_WARNING) { 5671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (uprv_strnicmp(minimal, buffer, bufferSize) != 0) { 5672c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err(" minimal doesn't match expected \"%s\" in uloc_minimizeSubtags(), minimal \"%s\" = \"%*s\"\n", 5673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru minimal, maximal, (int)sizeof(buffer), buffer); 5674c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5675c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5676c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 5677c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 5678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruconst char* const locale_to_langtag[][3] = { 5680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"", "und", "und"}, 5681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en", "en", "en"}, 568250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US", "en-US", "en-US"}, 568350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"iw_IL", "he-IL", "he-IL"}, 568450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"sr_Latn_SR", "sr-Latn-SR", "sr-Latn-SR"}, 568527f654740f2a26ad62a5c155af9199af9e69b889claireho {"en__POSIX", "en-u-va-posix", "en-u-va-posix"}, 568627f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_POSIX", "en-u-va-posix", "en-u-va-posix"}, 5687b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en_US_POSIX_VAR", "en-US-posix-x-lvariant-var", NULL}, /* variant POSIX_VAR is processed as regular variant */ 5688b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en_US_VAR_POSIX", "en-US-x-lvariant-var-posix", NULL}, /* variant VAR_POSIX is processed as regular variant */ 5689b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en_US_POSIX@va=posix2", "en-US-u-va-posix2", "en-US-u-va-posix2"}, /* if keyword va=xxx already exists, variant POSIX is simply dropped */ 569027f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US_POSIX@ca=japanese", "en-US-u-ca-japanese-va-posix", "en-US-u-ca-japanese-va-posix"}, 5691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"und_555", "und-555", "und-555"}, 5692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"123", "und", NULL}, 5693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"%$#&", "und", NULL}, 569450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"_Latn", "und-Latn", "und-Latn"}, 569550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"_DE", "und-DE", "und-DE"}, 569650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"und_FR", "und-FR", "und-FR"}, 5697b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"th_TH_TH", "th-TH-x-lvariant-th", NULL}, 5698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"bogus", "bogus", "bogus"}, 5699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"foooobarrr", "und", NULL}, 570050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"az_AZ_CYRL", "az-Cyrl-AZ", "az-Cyrl-AZ"}, 5701b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"aa_BB_CYRL", "aa-BB-x-lvariant-cyrl", NULL}, 570250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US_1234", "en-US-1234", "en-US-1234"}, 570350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US_VARIANTA_VARIANTB", "en-US-varianta-variantb", "en-US-varianta-variantb"}, 5704b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"ja__9876_5432", "ja-9876-5432", "ja-9876-5432"}, 5705b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"zh_Hant__VAR", "zh-Hant-x-lvariant-var", NULL}, 5706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"es__BADVARIANT_GOODVAR", "es-goodvar", NULL}, 5707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en@calendar=gregorian", "en-u-ca-gregory", "en-u-ca-gregory"}, 5708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"de@collation=phonebook;calendar=gregorian", "de-u-ca-gregory-co-phonebk", "de-u-ca-gregory-co-phonebk"}, 5709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"th@numbers=thai;z=extz;x=priv-use;a=exta", "th-a-exta-u-nu-thai-z-extz-x-priv-use", "th-a-exta-u-nu-thai-z-extz-x-priv-use"}, 5710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en@timezone=America/New_York;calendar=japanese", "en-u-ca-japanese-tz-usnyc", "en-u-ca-japanese-tz-usnyc"}, 571150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en@timezone=US/Eastern", "en-u-tz-usnyc", "en-u-tz-usnyc"}, 5712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en@x=x-y-z;a=a-b-c", "en-x-x-y-z", NULL}, 5713f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"it@collation=badcollationtype;colStrength=identical;cu=usd-eur", "it-u-cu-usd-eur-ks-identic", NULL}, 571427f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US_POSIX", "en-US-u-va-posix", "en-US-u-va-posix"}, 5715f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"en_US_POSIX@calendar=japanese;currency=EUR","en-US-u-ca-japanese-cu-eur-va-posix", "en-US-u-ca-japanese-cu-eur-va-posix"}, 5716b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"@x=elmer", "x-elmer", "x-elmer"}, 5717b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en@x=elmer", "en-x-elmer", "en-x-elmer"}, 5718b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"@x=elmer;a=exta", "und-a-exta-x-elmer", "und-a-exta-x-elmer"}, 5719b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en_US@attribute=attr1-attr2;calendar=gregorian", "en-US-u-attr1-attr2-ca-gregory", "en-US-u-attr1-attr2-ca-gregory"}, 5720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {NULL, NULL, NULL} 5721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}; 5722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestToLanguageTag(void) { 5724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char langtag[256]; 5725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t i; 5726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status; 5727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t len; 5728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *inloc; 5729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *expected; 5730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (i = 0; locale_to_langtag[i][0] != NULL; i++) { 5732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inloc = locale_to_langtag[i][0]; 5733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* testing non-strict mode */ 5735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 5736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru langtag[0] = 0; 5737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expected = locale_to_langtag[i][1]; 5738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru len = uloc_toLanguageTag(inloc, langtag, sizeof(langtag), FALSE, &status); 574059d709d503bab6e2b61931737e662dd293b40578ccornelius (void)len; /* Suppress set but not used warning. */ 5741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 5742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (expected != NULL) { 5743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Error returned by uloc_toLanguageTag for locale id [%s] - error: %s\n", 5744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inloc, u_errorName(status)); 5745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 5747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (expected == NULL) { 5748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Error should be returned by uloc_toLanguageTag for locale id [%s], but [%s] is returned without errors\n", 5749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inloc, langtag); 5750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (uprv_strcmp(langtag, expected) != 0) { 57516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("uloc_toLanguageTag returned language tag [%s] for input locale [%s] - expected: [%s]. Are you missing data?\n", 5752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru langtag, inloc, expected); 5753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* testing strict mode */ 5757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 5758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru langtag[0] = 0; 5759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expected = locale_to_langtag[i][2]; 5760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru len = uloc_toLanguageTag(inloc, langtag, sizeof(langtag), TRUE, &status); 5762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 5763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (expected != NULL) { 57646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error returned by uloc_toLanguageTag {strict} for locale id [%s] - error: %s Are you missing data?\n", 5765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inloc, u_errorName(status)); 5766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 5768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (expected == NULL) { 5769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Error should be returned by uloc_toLanguageTag {strict} for locale id [%s], but [%s] is returned without errors\n", 5770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru inloc, langtag); 5771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (uprv_strcmp(langtag, expected) != 0) { 5772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("uloc_toLanguageTag {strict} returned language tag [%s] for input locale [%s] - expected: [%s]\n", 5773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru langtag, inloc, expected); 5774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 5778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 577954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define FULL_LENGTH -1 5780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const struct { 5781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *bcpID; 5782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *locID; 5783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t len; 5784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} langtag_to_locale[] = { 5785f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ja-u-ijkl-efgh-abcd-ca-japanese-xx-yyy-zzz-kn", "ja@attribute=abcd-efgh-ijkl;calendar=japanese;colnumeric=yes;xx=yyy-zzz", FULL_LENGTH}, 578654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en", "en", FULL_LENGTH}, 578754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-us", "en_US", FULL_LENGTH}, 578854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"und-US", "_US", FULL_LENGTH}, 578954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"und-latn", "_Latn", FULL_LENGTH}, 579054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-US-posix", "en_US_POSIX", FULL_LENGTH}, 5791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"de-de_euro", "de", 2}, 579254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"kok-IN", "kok_IN", FULL_LENGTH}, 5793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"123", "", 0}, 5794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en_us", "", 0}, 5795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en-latn-x", "en_Latn", 7}, 579654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"art-lojban", "jbo", FULL_LENGTH}, 579754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"zh-hakka", "hak", FULL_LENGTH}, 579854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"zh-cmn-CH", "cmn_CH", FULL_LENGTH}, 579954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"xxx-yy", "xxx_YY", FULL_LENGTH}, 580054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"fr-234", "fr_234", FULL_LENGTH}, 580154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"i-default", "en@x=i-default", FULL_LENGTH}, 5802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"i-test", "", 0}, 5803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"ja-jp-jp", "ja_JP", 5}, 580454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"bogus", "bogus", FULL_LENGTH}, 5805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"boguslang", "", 0}, 580654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"EN-lATN-us", "en_Latn_US", FULL_LENGTH}, 580754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"und-variant-1234", "__VARIANT_1234", FULL_LENGTH}, 5808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"und-varzero-var1-vartwo", "__VARZERO", 11}, 580954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-u-ca-gregory", "en@calendar=gregorian", FULL_LENGTH}, 581054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-U-cu-USD", "en@currency=usd", FULL_LENGTH}, 581154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-US-u-va-posix", "en_US_POSIX", FULL_LENGTH}, 581254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-us-u-ca-gregory-va-posix", "en_US_POSIX@calendar=gregorian", FULL_LENGTH}, 581354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-us-posix-u-va-posix", "en_US_POSIX@va=posix", FULL_LENGTH}, 581454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-us-u-va-posix2", "en_US@va=posix2", FULL_LENGTH}, 581554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-us-vari1-u-va-posix", "en_US_VARI1@va=posix", FULL_LENGTH}, 581654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"ar-x-1-2-3", "ar@x=1-2-3", FULL_LENGTH}, 581754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"fr-u-nu-latn-cu-eur", "fr@currency=eur;numbers=latn", FULL_LENGTH}, 581854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"de-k-kext-u-co-phonebk-nu-latn", "de@collation=phonebook;k=kext;numbers=latn", FULL_LENGTH}, 581954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"ja-u-cu-jpy-ca-jp", "ja@calendar=yes;currency=jpy;jp=yes", FULL_LENGTH}, 582054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-us-u-tz-usnyc", "en_US@timezone=America/New_York", FULL_LENGTH}, 582154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"und-a-abc-def", "und@a=abc-def", FULL_LENGTH}, 582254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"zh-u-ca-chinese-x-u-ca-chinese", "zh@calendar=chinese;x=u-ca-chinese", FULL_LENGTH}, 582354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"x-elmer", "@x=elmer", FULL_LENGTH}, 582454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-US-u-attr1-attr2-ca-gregory", "en_US@attribute=attr1-attr2;calendar=gregorian", FULL_LENGTH}, 582554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"sr-u-kn", "sr@colnumeric=yes", FULL_LENGTH}, 582654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"de-u-kn-co-phonebk", "de@collation=phonebook;colnumeric=yes", FULL_LENGTH}, 582754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"en-u-attr2-attr1-kn-kb", "en@attribute=attr1-attr2;colbackwards=yes;colnumeric=yes", FULL_LENGTH}, 582854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"ja-u-ijkl-efgh-abcd-ca-japanese-xx-yyy-zzz-kn", "ja@attribute=abcd-efgh-ijkl;calendar=japanese;colnumeric=yes;xx=yyy-zzz", FULL_LENGTH}, 582954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 5830b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"de-u-xc-xphonebk-co-phonebk-ca-buddhist-mo-very-lo-extensi-xd-that-de-should-vc-probably-xz-killthebuffer", 583154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius "de@calendar=buddhist;collation=phonebook;de=should;lo=extensi;mo=very;vc=probably;xc=xphonebk;xd=that;xz=yes", 91}, 5832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {NULL, NULL, 0} 5833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}; 5834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestForLanguageTag(void) { 5836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char locale[256]; 5837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t i; 5838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status; 5839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t parsedLen; 584054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t expParsedLen; 5841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (i = 0; langtag_to_locale[i].bcpID != NULL; i++) { 5843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 584454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius locale[0] = 0; 584554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius expParsedLen = langtag_to_locale[i].len; 584654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (expParsedLen == FULL_LENGTH) { 584754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius expParsedLen = uprv_strlen(langtag_to_locale[i].bcpID); 584854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 5849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uloc_forLanguageTag(langtag_to_locale[i].bcpID, locale, sizeof(locale), &parsedLen, &status); 5850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 58516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error returned by uloc_forLanguageTag for language tag [%s] - error: %s\n", 5852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru langtag_to_locale[i].bcpID, u_errorName(status)); 5853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 5854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (uprv_strcmp(langtag_to_locale[i].locID, locale) != 0) { 5855f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_data_err("uloc_forLanguageTag returned locale [%s] for input language tag [%s] - expected: [%s]\n", 5856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru locale, langtag_to_locale[i].bcpID, langtag_to_locale[i].locID); 5857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 585854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (parsedLen != expParsedLen) { 5859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("uloc_forLanguageTag parsed length of %d for input language tag [%s] - expected parsed length: %d\n", 586054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius parsedLen, langtag_to_locale[i].bcpID, expParsedLen); 5861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 5864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 586527f654740f2a26ad62a5c155af9199af9e69b889claireho 5866f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusstatic void TestToUnicodeLocaleKey(void) 5867f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius{ 5868f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius /* $IN specifies the result should be the input pointer itself */ 5869f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius static const char* DATA[][2] = { 5870f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "ca"}, 5871f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"CALEndar", "ca"}, /* difference casing */ 5872f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "ca"}, /* bcp key itself */ 5873f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kv", "kv"}, /* no difference between legacy and bcp */ 5874f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"foo", NULL}, /* unknown, bcp ill-formed */ 5875f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ZZ", "$IN"}, /* unknown, bcp well-formed - */ 5876f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {NULL, NULL} 5877f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }; 5878f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5879f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius int32_t i; 5880f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i = 0; DATA[i][0] != NULL; i++) { 5881f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* keyword = DATA[i][0]; 5882f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* expected = DATA[i][1]; 5883f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* bcpKey = NULL; 5884f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5885f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius bcpKey = uloc_toUnicodeLocaleKey(keyword); 5886f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (expected == NULL) { 5887f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (bcpKey != NULL) { 5888f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toUnicodeLocaleKey: keyword=%s => %s, expected=NULL\n", keyword, bcpKey); 5889f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5890f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (bcpKey == NULL) { 5891f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_data_err("toUnicodeLocaleKey: keyword=%s => NULL, expected=%s\n", keyword, expected); 5892f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(expected, "$IN") == 0) { 5893f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (bcpKey != keyword) { 5894f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toUnicodeLocaleKey: keyword=%s => %s, expected=%s(input pointer)\n", keyword, bcpKey, keyword); 5895f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5896f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(bcpKey, expected) != 0) { 5897f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toUnicodeLocaleKey: keyword=%s => %s, expected=%s\n", keyword, bcpKey, expected); 5898f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5899f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5900f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 5901f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5902f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusstatic void TestToLegacyKey(void) 5903f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius{ 5904f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius /* $IN specifies the result should be the input pointer itself */ 5905f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius static const char* DATA[][2] = { 5906f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kb", "colbackwards"}, 5907f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kB", "colbackwards"}, /* different casing */ 5908f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"Collation", "collation"}, /* keyword itself with different casing */ 5909f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kv", "kv"}, /* no difference between legacy and bcp */ 5910f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"foo", "$IN"}, /* unknown, bcp ill-formed */ 5911f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ZZ", "$IN"}, /* unknown, bcp well-formed */ 5912f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"e=mc2", NULL}, /* unknown, bcp/legacy ill-formed */ 5913f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {NULL, NULL} 5914f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }; 5915f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5916f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius int32_t i; 5917f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i = 0; DATA[i][0] != NULL; i++) { 5918f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* keyword = DATA[i][0]; 5919f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* expected = DATA[i][1]; 5920f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* legacyKey = NULL; 5921f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5922f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius legacyKey = uloc_toLegacyKey(keyword); 5923f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (expected == NULL) { 5924f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (legacyKey != NULL) { 5925f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toLegacyKey: keyword=%s => %s, expected=NULL\n", keyword, legacyKey); 5926f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5927f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (legacyKey == NULL) { 5928f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toLegacyKey: keyword=%s => NULL, expected=%s\n", keyword, expected); 5929f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(expected, "$IN") == 0) { 5930f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (legacyKey != keyword) { 5931f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toLegacyKey: keyword=%s => %s, expected=%s(input pointer)\n", keyword, legacyKey, keyword); 5932f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5933f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(legacyKey, expected) != 0) { 5934f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_data_err("toUnicodeLocaleKey: keyword=%s, %s, expected=%s\n", keyword, legacyKey, expected); 5935f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5936f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5937f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 5938f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5939f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusstatic void TestToUnicodeLocaleType(void) 5940f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius{ 5941f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius /* $IN specifies the result should be the input pointer itself */ 5942f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius static const char* DATA[][3] = { 5943f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"tz", "Asia/Kolkata", "inccu"}, 5944f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "gregorian", "gregory"}, 5945f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "gregorian", "gregory"}, 5946f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "Gregorian", "gregory"}, 5947f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "buddhist", "buddhist"}, 5948f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"Calendar", "Japanese", "japanese"}, 5949f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "Islamic-Civil", "islamic-civil"}, 5950f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "islamicc", "islamic-civil"}, /* bcp type alias */ 5951f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"colalternate", "NON-IGNORABLE", "noignore"}, 5952f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"colcaselevel", "yes", "true"}, 5953f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"tz", "america/new_york", "usnyc"}, 5954f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"tz", "Asia/Kolkata", "inccu"}, 5955f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"timezone", "navajo", "usden"}, 5956f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "aaaa", "$IN"}, /* unknown type, well-formed type */ 5957f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "gregory-japanese-islamic", "$IN"}, /* unknown type, well-formed type */ 5958f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"zz", "gregorian", NULL}, /* unknown key, ill-formed type */ 5959f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"co", "foo-", NULL}, /* unknown type, ill-formed type */ 5960f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"variableTop", "00A0", "$IN"}, /* valid codepoints type */ 5961f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"variableTop", "wxyz", "$IN"}, /* invalid codepoints type - return as is for now */ 5962f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kr", "space-punct", "space-punct"}, /* valid reordercode type */ 5963f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kr", "digit-spacepunct", NULL}, /* invalid (bcp ill-formed) reordercode type */ 5964f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {NULL, NULL, NULL} 5965f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }; 5966f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5967f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius int32_t i; 5968f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i = 0; DATA[i][0] != NULL; i++) { 5969f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* keyword = DATA[i][0]; 5970f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* value = DATA[i][1]; 5971f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* expected = DATA[i][2]; 5972f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* bcpType = NULL; 5973f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5974f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius bcpType = uloc_toUnicodeLocaleType(keyword, value); 5975f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (expected == NULL) { 5976f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (bcpType != NULL) { 5977f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toUnicodeLocaleType: keyword=%s, value=%s => %s, expected=NULL\n", keyword, value, bcpType); 5978f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5979f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (bcpType == NULL) { 5980f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_data_err("toUnicodeLocaleType: keyword=%s, value=%s => NULL, expected=%s\n", keyword, value, expected); 5981f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(expected, "$IN") == 0) { 5982f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (bcpType != value) { 5983f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toUnicodeLocaleType: keyword=%s, value=%s => %s, expected=%s(input pointer)\n", keyword, value, bcpType, value); 5984f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5985f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(bcpType, expected) != 0) { 5986f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_data_err("toUnicodeLocaleType: keyword=%s, value=%s => %s, expected=%s\n", keyword, value, bcpType, expected); 5987f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5988f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 5989f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 5990f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 5991f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusstatic void TestToLegacyType(void) 5992f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius{ 5993f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius /* $IN specifies the result should be the input pointer itself */ 5994f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius static const char* DATA[][3] = { 5995f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "gregory", "gregorian"}, 5996f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "gregory", "gregorian"}, 5997f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "Gregory", "gregorian"}, 5998f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "buddhist", "buddhist"}, 5999f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"Calendar", "Japanese", "japanese"}, 6000f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "Islamic-Civil", "islamic-civil"}, 6001f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "islamicc", "islamic-civil"}, /* bcp type alias */ 6002f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"colalternate", "noignore", "non-ignorable"}, 6003f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"colcaselevel", "true", "yes"}, 6004f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"tz", "usnyc", "America/New_York"}, 6005f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"tz", "inccu", "Asia/Calcutta"}, 6006f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"timezone", "usden", "America/Denver"}, 6007f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"timezone", "usnavajo", "America/Denver"}, /* bcp type alias */ 6008f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"colstrength", "quarternary", "quaternary"}, /* type alias */ 6009f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "aaaa", "$IN"}, /* unknown type */ 6010f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"calendar", "gregory-japanese-islamic", "$IN"}, /* unknown type, well-formed type */ 6011f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"zz", "gregorian", "$IN"}, /* unknown key, bcp ill-formed type */ 6012f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"ca", "gregorian-calendar", "$IN"}, /* known key, bcp ill-formed type */ 6013f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"co", "e=mc2", NULL}, /* known key, ill-formed bcp/legacy type */ 6014f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"variableTop", "00A0", "$IN"}, /* valid codepoints type */ 6015f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"variableTop", "wxyz", "$IN"}, /* invalid codepoints type - return as is for now */ 6016f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kr", "space-punct", "space-punct"}, /* valid reordercode type */ 6017f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"kr", "digit-spacepunct", "digit-spacepunct"}, /* invalid reordercode type, but ok for legacy syntax */ 6018f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {NULL, NULL, NULL} 6019f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }; 6020f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 6021f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius int32_t i; 6022f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (i = 0; DATA[i][0] != NULL; i++) { 6023f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* keyword = DATA[i][0]; 6024f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* value = DATA[i][1]; 6025f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* expected = DATA[i][2]; 6026f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* legacyType = NULL; 6027f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 6028f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius legacyType = uloc_toLegacyType(keyword, value); 6029f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (expected == NULL) { 6030f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (legacyType != NULL) { 6031f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toLegacyType: keyword=%s, value=%s => %s, expected=NULL\n", keyword, value, legacyType); 6032f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 6033f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (legacyType == NULL) { 6034f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toLegacyType: keyword=%s, value=%s => NULL, expected=%s\n", keyword, value, expected); 6035f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(expected, "$IN") == 0) { 6036f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (legacyType != value) { 6037f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("toLegacyType: keyword=%s, value=%s => %s, expected=%s(input pointer)\n", keyword, value, legacyType, value); 6038f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 6039f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (uprv_strcmp(legacyType, expected) != 0) { 6040f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_data_err("toLegacyType: keyword=%s, value=%s => %s, expected=%s\n", keyword, value, legacyType, expected); 6041f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 6042f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 6043f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 6044f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 6045f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 6046f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 604727f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void test_unicode_define(const char *namech, char ch, const char *nameu, UChar uch) 604827f654740f2a26ad62a5c155af9199af9e69b889claireho{ 604927f654740f2a26ad62a5c155af9199af9e69b889claireho UChar asUch[1]; 605027f654740f2a26ad62a5c155af9199af9e69b889claireho asUch[0]=0; 605127f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Testing whether %s[\\x%02x,'%c'] == %s[U+%04X]\n", namech, ch,(int)ch, nameu, (int) uch); 605227f654740f2a26ad62a5c155af9199af9e69b889claireho u_charsToUChars(&ch, asUch, 1); 605327f654740f2a26ad62a5c155af9199af9e69b889claireho if(asUch[0] != uch) { 605427f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("FAIL: %s[\\x%02x,'%c'] maps to U+%04X, but %s = U+%04X\n", namech, ch, (int)ch, (int)asUch[0], nameu, (int)uch); 605527f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 605627f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose(" .. OK, == U+%04X\n", (int)asUch[0]); 605727f654740f2a26ad62a5c155af9199af9e69b889claireho } 605827f654740f2a26ad62a5c155af9199af9e69b889claireho} 605927f654740f2a26ad62a5c155af9199af9e69b889claireho 606027f654740f2a26ad62a5c155af9199af9e69b889claireho#define TEST_UNICODE_DEFINE(x,y) test_unicode_define(#x, (char)(x), #y, (UChar)(y)) 606127f654740f2a26ad62a5c155af9199af9e69b889claireho 606227f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void TestUnicodeDefines(void) { 606327f654740f2a26ad62a5c155af9199af9e69b889claireho TEST_UNICODE_DEFINE(ULOC_KEYWORD_SEPARATOR, ULOC_KEYWORD_SEPARATOR_UNICODE); 606427f654740f2a26ad62a5c155af9199af9e69b889claireho TEST_UNICODE_DEFINE(ULOC_KEYWORD_ASSIGN, ULOC_KEYWORD_ASSIGN_UNICODE); 606527f654740f2a26ad62a5c155af9199af9e69b889claireho TEST_UNICODE_DEFINE(ULOC_KEYWORD_ITEM_SEPARATOR, ULOC_KEYWORD_ITEM_SEPARATOR_UNICODE); 606627f654740f2a26ad62a5c155af9199af9e69b889claireho} 6067f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 6068f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusstatic void TestIsRightToLeft() { 6069f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // API test only. More test cases in intltest/LocaleTest. 6070f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(uloc_isRightToLeft("root") || !uloc_isRightToLeft("EN-HEBR")) { 6071f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("uloc_isRightToLeft() failed"); 6072f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 6073f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 6074