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