diff options
Diffstat (limited to 'test/java/util')
59 files changed, 13213 insertions, 46906 deletions
diff --git a/test/java/util/Calendar/BuddhistCalendarTest.java b/test/java/util/Calendar/BuddhistCalendarTest.java new file mode 100644 index 0000000000..8d6a5fc346 --- /dev/null +++ b/test/java/util/Calendar/BuddhistCalendarTest.java @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4817812 4847186 4956227 4956479 + * @summary Confirm that BuddhistCalendar's add(), roll() and toString() work correctly with Buddhist Era years. + */ + +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.Locale; +import static java.util.Calendar.*; + +public class BuddhistCalendarTest { + + private static final Locale THAI_LOCALE = new Locale("th", "TH"); + + public static void main(String[] args) { + testAddRoll(); + testToString(); + testException(); + testLeastMax(); + } + + /** + * 4817812 + */ + static void testAddRoll() { + Calendar cal; + int base, year; + + /* + * Test: BuddhistCalendar.add(YEAR) + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.add(YEAR, 1); + year = cal.get(YEAR); + check(year, base+1, "add(+YEAR)"); + + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.add(YEAR, -3); + year = cal.get(YEAR); + check(year, base-3, "add(-YEAR)"); + + /* + * Test BuddhistCalendar.add(MONTH) + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.set(MONTH, DECEMBER); + cal.add(MONTH, 2); + year = cal.get(YEAR); + check(year, base+1, "add(+MONTH)"); + + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.set(MONTH, FEBRUARY); + cal.add(MONTH, -4); + year = cal.get(YEAR); + check(year, base-1, "add(-MONTH)"); + + /* + * Test BuddhistCalendar.roll(YEAR) + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.roll(YEAR, 2); + year = cal.get(YEAR); + check(year, base+2, "roll(+YEAR)"); + + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.roll(YEAR, -4); + year = cal.get(YEAR); + check(year, base-4, "roll(-YEAR)"); + + /* + * Test BuddhistCalendar.roll(WEEK_OF_YEAR) + */ + cal = getBuddhistCalendar(); + cal.set(YEAR, 2543); // A.D.2000 + cal.set(MONTH, DECEMBER); + cal.set(DATE, 31); + base = cal.get(YEAR); + check(base, 2543, "roll(+WEEK_OF_YEAR)"); + cal.roll(WEEK_OF_YEAR, 10); + year = cal.get(YEAR); + check(year, base, "roll(+WEEK_OF_YEAR)"); + + cal = getBuddhistCalendar(); + cal.set(YEAR, 2543); // A.D.2000 + cal.set(MONTH, JANUARY); + cal.set(DATE, 1); + base = cal.get(YEAR); + check(base, 2543, "roll(+WEEK_OF_YEAR)"); + cal.roll(WEEK_OF_YEAR, -10); + year = cal.get(YEAR); + check(year, base, "roll(-WEEK_OF_YEAR)"); + + /* + * Test Calendar.set(year, month, date) + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.set(3001, APRIL, 10); + year = cal.get(YEAR); + check(year, 3001, "set(year, month, date)"); + + /* + * Test Calendar.set(year, month, date, hour, minute) + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.set(3020, MAY, 20, 9, 10); + year = cal.get(YEAR); + check(year, 3020, "set(year, month, date, hour, minute)"); + + /* + * Test Calendar.set(year, month, date, hour, minute, second) + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + cal.set(3120, MAY, 20, 9, 10, 52); + year = cal.get(YEAR); + check(year, 3120, "set(year, month, date, hour, minute, second)"); + + /* + * Test BuddhistCalendar.getActualMaximum(YEAR); + * set(YEAR)/get(YEAR) in this method doesn't affect the real + * YEAR value because a clone is used with set()&get(). + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + int limit = cal.getActualMaximum(YEAR); + year = cal.get(YEAR); + check(year, base, "BuddhistCalendar.getActualMaximum(YEAR)"); + + /* + * Test BuddhistCalendar.getActualMinimum(YEAR); + * This doesn't call set(YEAR) nor get(YEAR), though. + */ + cal = getBuddhistCalendar(); + base = cal.get(YEAR); + limit = cal.getActualMinimum(YEAR); + year = cal.get(YEAR); + check(year, base, "BuddhistCalendar.getActualMinimum(YEAR)"); + } + + /** + * 4847186: BuddhistCalendar: toString() returns Gregorian year + */ + static void testToString() { + Calendar cal = getBuddhistCalendar(); + int year = cal.get(YEAR); + String s = cal.toString(); + String y = s.replaceAll(".+,YEAR=(\\d+),.+", "$1"); + if (Integer.parseInt(y) != year) { + throw new RuntimeException("toString(): wrong year value: got " + y + + ", expected " + year); + } + } + + /** + * 4956479: BuddhistCalendar methods may return wrong values after exception + */ + static void testException() { + Calendar cal = getBuddhistCalendar(); + int year = cal.get(YEAR); + boolean exceptionOccurred = false; + try { + cal.add(100, +1); // cause exception + } catch (Exception e) { + exceptionOccurred = true; + } + if (!exceptionOccurred) { + throw new RuntimeException("testException: test case failed: no exception thrown"); + } + int year2 = cal.get(YEAR); + if (year2 != year) { + throw new RuntimeException("wrong year value after exception: got " + year2 + + ", expected " + year); + } + } + + /** + * 4956227: getLeastMaximum(WEEK_OF_MONTH) return diff. val. for Greg. and Buddhist Calendar + */ + static void testLeastMax() { + Calendar bc = getBuddhistCalendar(); + // Specify THAI_LOCALE to get the same params for WEEK + // calculations (6904680). + Calendar gc = new GregorianCalendar(THAI_LOCALE); + for (int f = 0; f < Calendar.FIELD_COUNT; f++) { + if (f == ERA || f == YEAR) { + continue; + } + int bn = bc.getLeastMaximum(f); + int gn = gc.getLeastMaximum(f); + if (bn != gn) { + throw new RuntimeException("inconsistent Least Max value for " + Koyomi.getFieldName(f) + + ": Buddhist=" + bn + + ": Gregorian=" + gn); + } + } + } + + /** + * @return a BuddhistCalendar + */ + static Calendar getBuddhistCalendar() { + return Calendar.getInstance(THAI_LOCALE); + } + + static void check(int got, int expected, String s) { + if (got != expected) { + throw new RuntimeException("Failed: " + + s + ": got:" + got + ", expected:" + expected); + } + } +} diff --git a/test/java/util/Calendar/Bug4302966.java b/test/java/util/Calendar/Bug4302966.java new file mode 100644 index 0000000000..6c3b9c3d60 --- /dev/null +++ b/test/java/util/Calendar/Bug4302966.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4302966 + * @summary In Czech Republic first day of week is Monday not Sunday + */ + +import java.util.Calendar; +import java.util.Locale; + +public class Bug4302966 { + + public static void main(String[] args) { + Calendar czechCalendar = Calendar.getInstance(new Locale("cs")); + int firstDayOfWeek = czechCalendar.getFirstDayOfWeek(); + if (firstDayOfWeek != Calendar.MONDAY) { + throw new RuntimeException(); + } + } +} diff --git a/test/java/util/Calendar/Bug4766302.java b/test/java/util/Calendar/Bug4766302.java new file mode 100644 index 0000000000..42df92b7e1 --- /dev/null +++ b/test/java/util/Calendar/Bug4766302.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4766302 + * @summary Make sure that computeTime call doesn't reset the isTimeSet value. + */ + +import java.util.GregorianCalendar; + +public class Bug4766302 { + + static class MyCalendar extends GregorianCalendar { + boolean isTimeStillSet() { + return isTimeSet; + } + + protected void computeTime() { + super.computeTime(); + } + } + + public static void main(String[] args) { + MyCalendar cal = new MyCalendar(); + cal.computeTime(); + if (!cal.isTimeStillSet()) { + throw new RuntimeException("computeTime() call reset isTimeSet."); + } + } +} diff --git a/test/java/util/Calendar/Bug4851640.java b/test/java/util/Calendar/Bug4851640.java new file mode 100644 index 0000000000..4f5add3767 --- /dev/null +++ b/test/java/util/Calendar/Bug4851640.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4851640 + * @summary Make sure not to set UNSET fields to COMPUTED after time calculation. + */ + +import java.util.GregorianCalendar; +import static java.util.Calendar.*; + +public class Bug4851640 { + + public static void main(String args[]) { + GregorianCalendar cal = new GregorianCalendar(); + cal.clear(); + cal.set(YEAR, 2003); + long t = cal.getTime().getTime(); + + // For the time calculation, the MONTH and DAY_OF_MONTH fields + // (with the default values) have been used for determining + // the date. However, both the MONTH and DAY_OF_MONTH fields + // should be kept UNSET after the time calculation. + if (cal.isSet(MONTH) || cal.isSet(DAY_OF_MONTH)) { + throw new RuntimeException("After getTime(): MONTH field=" + cal.isSet(MONTH) + + ", DAY_OF_MONTH field=" + cal.isSet(DAY_OF_MONTH)); + } + + // After calling get() for any field, all field values are + // recalculated and their field states are set to + // COMPUTED. isSet() must return true. + int y = cal.get(YEAR); + if (!(cal.isSet(MONTH) && cal.isSet(DAY_OF_MONTH))) { + throw new RuntimeException("After get(): MONTH field=" + cal.isSet(MONTH) + + ", DAY_OF_MONTH field=" + cal.isSet(DAY_OF_MONTH)); + } + } +} diff --git a/test/java/util/Calendar/Bug4958050.java b/test/java/util/Calendar/Bug4958050.java new file mode 100644 index 0000000000..dfd627cda6 --- /dev/null +++ b/test/java/util/Calendar/Bug4958050.java @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4958050 + * @summary Make sure that add() and roll() handle time zone offset changes (both raw and DST) correctly. + */ + +import java.util.Locale; +import java.util.TimeZone; +import static java.util.Calendar.*; + +public class Bug4958050 { + static int errorCount = 0; + + public static void main(String[] args) { + // All the test cases depend on historical GMT offset changes + // of Asia/Novosibirsk. + Koyomi cal = new Koyomi(TimeZone.getTimeZone("Asia/Novosibirsk"), Locale.US); + System.out.println("Time zone = " + cal.getTimeZone().getID()); + + // Test the week fields + int[] weekFields = { WEEK_OF_YEAR, WEEK_OF_MONTH, DAY_OF_WEEK_IN_MONTH }; + for (int i = 0; i < weekFields.length; i++) { + int field = weekFields[i]; + // add() + cal.clear(); + cal.set(1919, DECEMBER, 14-7, 23, 50, 00); + cal.add(weekFields[i], +1); + if (!cal.checkDate(1919, DECEMBER, 14)) { + error("1919/12/07: add("+cal.getFieldName(weekFields[i])+", +1)\n" + + cal.getMessage()+" " + cal.toDateTimeString()); + } + cal.clear(); + cal.set(1930, JUNE, 21-7); + cal.add(weekFields[i], +1); + if (!cal.checkDateTime(1930, JUNE, 21, 01, 00, 00, 000)) { + error("1930/6/14: add("+cal.getFieldName(weekFields[i])+", +1)\n" + + cal.getMessage()+" " + cal.toDateTimeString()); + } + + // roll() + cal.clear(); + cal.set(1919, DECEMBER, 14-7, 23, 50, 00); + cal.roll(weekFields[i], +1); + if (!cal.checkDate(1919, DECEMBER, 14)) { + error("1919/12/07: roll("+cal.getFieldName(weekFields[i])+", +1)\n" + + cal.getMessage()+" " + cal.toDateTimeString()); + } + cal.clear(); + cal.set(1930, JUNE, 21-7); + cal.roll(weekFields[i], +1); + if (!cal.checkDateTime(1930, JUNE, 21, 01, 00, 00, 000)) { + error("1930/6/14: roll("+cal.getFieldName(weekFields[i])+", +1)\n" + + cal.getMessage()+" " + cal.toDateTimeString()); + } + } + + // Test the day fields + int[] dayFields = { DAY_OF_MONTH, DAY_OF_YEAR, DAY_OF_WEEK }; + for (int i = 0; i < dayFields.length; i++) { + int field = dayFields[i]; + // add() + cal.clear(); + cal.set(1919, DECEMBER, 14-1, 23, 50, 00); + cal.add(field, +1); + if (!cal.checkDate(1919, DECEMBER, 14)) { + error("1919/12/13: add("+cal.getFieldName(field)+", +1)\n" + + cal.getMessage()+" " + cal.toDateTimeString()); + } + cal.clear(); + cal.set(1919, DECEMBER, 14, 00, 00, 00); + cal.add(field, -1); + if (!cal.checkDate(1919, DECEMBER, 13)) { + error("1919/12/14: add("+cal.getFieldName(field)+", -1)\n" + + cal.getMessage()+" " + cal.toDateTimeString()); + } + cal.clear(); + cal.set(1930, JUNE, 21-1); + cal.add(field, +1); + if (!cal.checkDateTime(1930, JUNE, 21, 01, 00, 00, 000)) { + error("1930/6/20: add("+cal.getFieldName(field)+", +1)\n" + + cal.getMessage() + cal.toDateTimeString()); + } + cal.clear(); + cal.set(1930, JUNE, 21, 01, 00, 00); + cal.add(field, -1); + if (!cal.checkDateTime(1930, JUNE, 20, 01, 00, 00, 000)) { + error("1930/6/21: add("+cal.getFieldName(field)+", -1)\n" + + cal.getMessage()+" " + cal.toDateTimeString()); + } + + // roll() + cal.clear(); + cal.set(1930, JUNE, 21-1); + int amount = +1; + if (field == DAY_OF_WEEK) { + amount += 700; + } + cal.roll(field, amount); + if (!cal.checkDateTime(1930, JUNE, 21, 01, 00, 00, 000)) { + error("1930/6/20: roll("+cal.getFieldName(field)+", +"+amount+")\n" + + cal.getMessage() + " " + cal.toDateTimeString()); + } + cal.clear(); + cal.set(1930, JUNE, 21, 01, 00, 00); + amount = -1; + if (field == DAY_OF_WEEK) { + amount -= 700; + } + cal.roll(field, amount); + if (!cal.checkDateTime(1930, JUNE, 20, 01, 00, 00, 000)) { + error("1930/6/21: roll("+cal.getFieldName(field)+", "+amount+")\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + } + + // Test the AM_PM field + // add() + cal.clear(); + cal.set(1919, DECEMBER, 14-1, 23, 50, 00); + cal.add(AM_PM, +1); + if (!cal.checkDate(1919, DECEMBER, 14) + || !cal.checkFieldValue(AM_PM, AM)) { + error("1919/12/13: add(AM_PM, +1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + cal.clear(); + cal.set(1930, JUNE, 21-1, 12, 00, 00); + cal.add(AM_PM, +1); + if (!cal.checkDate(1930, JUNE, 21) + || !cal.checkFieldValue(AM_PM, AM)) { + error("1930/6/20: add(AM_PM, +1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + cal.clear(); + cal.set(1930, JUNE, 21-2, 12, 00, 00); + cal.add(AM_PM, +3); + if (!cal.checkDate(1930, JUNE, 21) + || !cal.checkFieldValue(AM_PM, AM)) { + error("1930/6/10: add(AM_PM, +3)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + cal.clear(); + cal.set(1919, DECEMBER, 14, 11, 50, 00); + cal.add(AM_PM, -1); + if (!cal.checkDateTime(1919, DECEMBER, 14-1, 23, 50, 00, 000) + || !cal.checkFieldValue(AM_PM, PM)) { + error("1919/12/14 11:50:00: add(AM_PM, -1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + cal.clear(); + cal.set(1930, JUNE, 21, 01, 00, 00); + cal.add(AM_PM, -1); + if (!cal.checkDateTime(1930, JUNE, 21-1, 01+12, 00, 00, 000) + || !cal.checkFieldValue(AM_PM, PM)) { + error("1930/6/20: add(AM_PM, -1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + cal.clear(); + cal.set(1930, JUNE, 21, 01, 00, 00); + cal.add(AM_PM, -3); + if (!cal.checkDateTime(1930, JUNE, 21-2, 01+12, 00, 00, 000) + || !cal.checkFieldValue(AM_PM, PM)) { + error("1930/6/10: add(AM_PM, -3)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + // roll() (should NOT change the date) + cal.clear(); + cal.set(1919, DECEMBER, 14-1, 23, 50, 00); + cal.roll(AM_PM, +1); + if (!cal.checkDateTime(1919, DECEMBER, 14-1, 23-12, 50, 00, 000) + || !cal.checkFieldValue(AM_PM, AM)) { + error("1919/12/13: roll(AM_PM, +1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + cal.clear(); + cal.set(1930, JUNE, 21-1, 12, 00, 00); + cal.roll(AM_PM, +1); + if (!cal.checkDateTime(1930, JUNE, 21-1, 12-12, 00, 00, 000) + || !cal.checkFieldValue(AM_PM, AM)) { + error("1930/6/20: roll(AM_PM, +1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + cal.clear(); + cal.set(1930, JUNE, 21-2, 12, 00, 00); + cal.roll(AM_PM, +3); + if (!cal.checkDateTime(1930, JUNE, 21-2, 12-12, 00, 00, 000) + || !cal.checkFieldValue(AM_PM, AM)) { + error("1930/6/10: roll(AM_PM, +3)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + // Test the HOUR_OF_DAY field + // add() + cal.clear(); + cal.set(1930, JUNE, 20, 23, 00, 00); + cal.add(HOUR_OF_DAY, +1); + if (!cal.checkDateTime(1930, JUNE, 21, 01, 00, 00, 000)) { + error("1930/6/20 23:00:00: add(HOUR_OF_DAY, +1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + // roll() (should NOT change the date) + cal.clear(); + cal.set(1930, JUNE, 20, 23, 00, 00); + cal.roll(HOUR_OF_DAY, +1); + if (!cal.checkDateTime(1930, JUNE, 20, 00, 00, 00, 000)) { + error("1930/6/20 23:00:00: roll(HOUR_OF_DAY, +1)\n" + + cal.getMessage()+" "+cal.toDateTimeString()); + } + + checkErrors(); + } + + static void error(String s) { + System.out.println(s); + errorCount++; + } + + static void checkErrors() { + if (errorCount > 0) { + throw new RuntimeException("Failed: " + errorCount + " error(s)"); + } + } +} diff --git a/test/java/util/Calendar/Bug5078053.java b/test/java/util/Calendar/Bug5078053.java new file mode 100644 index 0000000000..c6bb25bcf8 --- /dev/null +++ b/test/java/util/Calendar/Bug5078053.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 5078053 + * @summary Make sure that Calendar.complete() normalizes stamp[] to + * COMPUTED. This can be observed through add() and roll(). + */ + +import java.util.TimeZone; +import static java.util.Calendar.*; + +public class Bug5078053 { + static int errorCount = 0; + + public static void main(String[] args) { + TimeZone defaultTz = TimeZone.getDefault(); + + try { + TimeZone tz = TimeZone.getTimeZone("Australia/Adelaide"); + TimeZone.setDefault(tz); + Koyomi cal = new Koyomi(); + cal.setFirstDayOfWeek(2); + cal.setMinimalDaysInFirstWeek(4); + + // test roll() + cal.clear(); + // 2002-01-01T00:00:00 in Australia/Adelaide + cal.setTimeInMillis(1009805400000L); + System.out.println(cal.getTime()); + // The following set calls shouldn't affect roll() and add() + cal.set(DAY_OF_WEEK, cal.get(DAY_OF_WEEK)); + cal.set(WEEK_OF_YEAR, cal.get(WEEK_OF_YEAR)); + cal.getTime(); + cal.roll(MONTH, +1); + System.out.println("roll: " + cal.getTime()); + if (!cal.checkDate(2002, FEBRUARY, 1)) { + error("roll(MONTH, +1): " + cal.getMessage()); + } + cal.roll(MONTH, -1); + if (!cal.checkDate(2002, JANUARY, 1)) { + error("roll(MONTH, -1): " + cal.getMessage()); + } + + // test add() + cal.clear(); + // 2002-01-01T00:00:00+0930 in Australia/Adelaide + cal.setTimeInMillis(1009805400000L); + cal.set(DAY_OF_WEEK, cal.get(DAY_OF_WEEK)); + cal.set(WEEK_OF_YEAR, cal.get(WEEK_OF_YEAR)); + cal.getTime(); + cal.add(MONTH, +1); + System.out.println(" add: " + cal.getTime()); + if (!cal.checkDate(2002, FEBRUARY, 1)) { + error("add(MONTH, +1): " + cal.getMessage()); + } + cal.add(MONTH, -1); + if (!cal.checkDate(2002, JANUARY, 1)) { + error("add(MONTH, -1): " + cal.getMessage()); + } + } + finally { + TimeZone.setDefault(defaultTz); + } + + checkErrors(); + } + + static void error(String s) { + System.out.println(s); + errorCount++; + } + + static void checkErrors() { + if (errorCount > 0) { + throw new RuntimeException("Failed: " + errorCount + " error(s)"); + } + } +} diff --git a/test/java/util/Calendar/Bug6178071.java b/test/java/util/Calendar/Bug6178071.java new file mode 100644 index 0000000000..8d361c76bc --- /dev/null +++ b/test/java/util/Calendar/Bug6178071.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6178071 6440854 + * @summary Make sure that setting HOUR right after a construction works + * as expected. + */ + +import java.util.GregorianCalendar; +import static java.util.Calendar.*; + +public class Bug6178071 { + public static void main(String[] args) { + GregorianCalendar cal = new GregorianCalendar(2004, JANUARY, 1); + cal.set(HOUR, 1); + if (cal.get(HOUR_OF_DAY) != 1 || + cal.get(HOUR) != 1 || cal.get(AM_PM) != AM) { + throw new RuntimeException("Unexpected hour of day: " + cal.getTime()); + } + + // Test case for 6440854 + GregorianCalendar gc = new GregorianCalendar(2006,5,16); + gc.setLenient(false); + gc.set(HOUR_OF_DAY, 10); + // The following line shouldn't throw an IllegalArgumentException. + gc.get(YEAR); + } +} diff --git a/test/java/util/Calendar/Bug6234795.java b/test/java/util/Calendar/Bug6234795.java new file mode 100644 index 0000000000..d1b2bc55c0 --- /dev/null +++ b/test/java/util/Calendar/Bug6234795.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6234795 + * @summary Rolling of HOUR or HOUR_OF_SET must set the other hour field. + */ + +import java.util.GregorianCalendar; +import static java.util.Calendar.AM; +import static java.util.Calendar.AM_PM; +import static java.util.Calendar.HOUR; +import static java.util.Calendar.HOUR_OF_DAY; +import static java.util.Calendar.SEPTEMBER; +import java.util.Locale; +import java.util.TimeZone; + +public class Bug6234795 { + public static void main(String[] args) { + testRoll(HOUR); + testRoll(HOUR_OF_DAY); + } + + static void testRoll(int field) { + GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"), Locale.US); + cal.clear(); + cal.set(2005, SEPTEMBER, 12); + + int otherField = (field == HOUR) ? HOUR_OF_DAY : HOUR; + int unit = (field == HOUR) ? 12 : 24; + int h; + for (h = 0; h <= 72; h++) { + int hour = cal.get(otherField); + int expected = h % 12; + if (hour != expected) { + throw new RuntimeException((field == HOUR ? "HOUR" : "HOUR_OF_DAY") + + "+: h=" + h + ", got " + hour + + ", expected " + expected); + } + if (field == HOUR_OF_DAY) { + int ampm = cal.get(AM_PM); + expected = (h % unit) / 12; + if (ampm != expected) { + throw new RuntimeException((field == HOUR ? "HOUR" : "HOUR_OF_DAY") + + "+: h=" + h + ", got " + + toString(ampm) + + ", expected " + toString(expected)); + } + } + cal.roll(field, +1); + } + for (; h >= 0; h--) { + int hour = cal.get(otherField); + int expected = h % 12; + if (hour != expected) { + throw new RuntimeException((field == HOUR ? "HOUR" : "HOUR_OF_DAY") + + "-: h=" + h + ", got " + hour + + ", expected " + expected); + } + if (field == HOUR_OF_DAY) { + int ampm = cal.get(AM_PM); + expected = (h % unit) / 12; + if (ampm != expected) { + throw new RuntimeException((field == HOUR ? "HOUR" : "HOUR_OF_DAY") + + "-: h=" + h + ", got " + toString(ampm) + + ", expected " + toString(expected)); + } + } + cal.roll(field, -1); + } + } + + static String toString(int ampm) { + return ampm == AM ? "AM" : "PM"; + } +} diff --git a/test/java/util/Calendar/Bug6448234.java b/test/java/util/Calendar/Bug6448234.java new file mode 100644 index 0000000000..16cf0fca1c --- /dev/null +++ b/test/java/util/Calendar/Bug6448234.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6448234 + * @summary Make sure indexing of DAY_OF_WEEK is correct in JapaneseImperialCalendar.getDisplayName. + */ + +import java.util.Calendar; +import java.util.Locale; +import static java.util.Calendar.*; + +public class Bug6448234 { + public static void main(String[] args) { + Calendar jcal = Calendar.getInstance(new Locale("ja", "JP", "JP")); + Calendar gcal = Calendar.getInstance(Locale.US); + + for (int i = SUNDAY; i <= SATURDAY; i++) { + jcal.set(DAY_OF_WEEK, i); + gcal.set(DAY_OF_WEEK, i); + + // Test LONG + String j = jcal.getDisplayName(DAY_OF_WEEK, LONG, Locale.US); + String g = gcal.getDisplayName(DAY_OF_WEEK, LONG, Locale.US); + if (!j.equals(g)) { + throw new RuntimeException("Got " + j + ", expected " + g); + } + + // Test SHORT + j = jcal.getDisplayName(DAY_OF_WEEK, SHORT, Locale.US); + g = gcal.getDisplayName(DAY_OF_WEEK, SHORT, Locale.US); + if (!j.equals(g)) { + throw new RuntimeException("Got " + j + ", expected " + g); + } + } + } +} diff --git a/test/java/util/Calendar/CalendarLimitTest.java b/test/java/util/Calendar/CalendarLimitTest.java new file mode 100644 index 0000000000..69dcbb5efc --- /dev/null +++ b/test/java/util/Calendar/CalendarLimitTest.java @@ -0,0 +1,202 @@ +/* + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 4033662 + * @library /java/text/testlib + * @summary test for limit on Calendar + * @run main CalendarLimitTest -verbose + */ + +import java.util.*; +import java.text.*; + +/** + * This test verifies the behavior of Calendar around the very earliest limits + * which it can handle. It also verifies the behavior for large values of millis. + * + * Note: There used to be a limit, due to a bug, for early times. There is + * currently no limit. + * + * March 17, 1998: Added code to make sure big + dates are big + AD years, and + * big - dates are big + BC years. + */ +public class CalendarLimitTest extends IntlTest +{ + // This number determined empirically; this is the old limit, + // which we test for to make sure it isn't there anymore. + static final long EARLIEST_SUPPORTED_MILLIS = -210993120000000L; + + static final int EPOCH_JULIAN_DAY = 2440588; // Jaunary 1, 1970 (Gregorian) + static final int JAN_1_1_JULIAN_DAY = 1721426; // January 1, year 1 (Gregorian) + + // Useful millisecond constants + static final int ONE_SECOND = 1000; + static final int ONE_MINUTE = 60*ONE_SECOND; + static final int ONE_HOUR = 60*ONE_MINUTE; + static final int ONE_DAY = 24*ONE_HOUR; + static final int ONE_WEEK = 7*ONE_DAY; + static final long ONE_YEAR = (long)(365.2425 * ONE_DAY); + + static long ORIGIN; // This is the *approximate* point at which BC switches to AD + + public static void main(String argv[]) throws Exception { + new CalendarLimitTest().run(argv); + } + + /** + * Converts Julian day to time as milliseconds. + * @param julian the given Julian day number. + * @return time as milliseconds. + */ + private static final long julianDayToMillis(long julian) { + return (julian - EPOCH_JULIAN_DAY) * ONE_DAY; + } + + /** + * Verify that the given time is processed without problem. + * @return the adjust year, with 0 = 1 BC, -1 = 2 BC, etc. + */ + int test(long millis, Calendar cal, DateFormat fmt) + { + Exception exception = null; + String theDate = ""; + try { + Date d= new Date(millis); + cal.setTime(d); + theDate = fmt.format(d); + } + catch (IllegalArgumentException e) { + exception = e; + } + String s = "0x" + Long.toHexString(millis) + " " + theDate; + + int era=cal.get(Calendar.ERA), year=cal.get(Calendar.YEAR), + dom=cal.get(Calendar.DATE), mon=cal.get(Calendar.MONTH); + + cal.clear(); + cal.set(year, mon, dom); + cal.set(Calendar.ERA, era); + Date rt = cal.getTime(); + + boolean ok = true; + if (exception != null) { + errln("FAIL: Exception " + s); + ok = false; + } + if (((millis >= ORIGIN) && (era != GregorianCalendar.AD)) || + ((millis < ORIGIN) && (era != GregorianCalendar.BC)) || + (year < 1)) { + errln("FAIL: Bad year/era " + s); + ok = false; + } + if (dom<1 || dom>31) { + errln("FAIL: Bad DOM " + s); + ok = false; + } + if (Math.abs(millis - rt.getTime()) > ONE_DAY) { + errln("FAIL: RT fail " + s + " -> 0x" + + Long.toHexString(rt.getTime()) + " " + + fmt.format(rt)); + ok = false; + } + if (ok) logln(s); + if (era==GregorianCalendar.BC) year = 1-year; + return year; + } + + public void TestCalendarLimit() + { + ORIGIN = julianDayToMillis(JAN_1_1_JULIAN_DAY); + + Calendar cal = Calendar.getInstance(); + // You must set the time zone to GMT+0 or the edge cases like + // Long.MIN_VALUE, Long.MAX_VALUE, and right around the threshold + // won't work, since before converting to fields the calendar code + // will add the offset for the zone. + cal.setTimeZone(TimeZone.getTimeZone("Africa/Casablanca")); + + DateFormat dateFormat = DateFormat.getDateInstance(); + dateFormat.setCalendar(cal); // Make sure you do this -- same reason as above + ((SimpleDateFormat)dateFormat).applyPattern("MMM d, yyyy G"); + + // Don't expect any failure for positive longs + int lastYear=0; + boolean first=true; + for (long m = Long.MAX_VALUE; m > 0; m >>= 1) + { + int y = test(m, cal, dateFormat); + if (!first && y > lastYear) + errln("FAIL: Years should be decreasing " + lastYear + " " + y); + first = false; + lastYear = y; + } + + // Expect failures for negative millis below threshold + first = true; + for (long m = Long.MIN_VALUE; m < 0; m /= 2) // Don't use m >>= 1 + { + int y = test(m, cal, dateFormat); + if (!first && y < lastYear) + errln("FAIL: Years should be increasing " + lastYear + " " + y); + first = false; + lastYear = y; + } + + // Test right around the threshold + test(EARLIEST_SUPPORTED_MILLIS, cal, dateFormat); + test(EARLIEST_SUPPORTED_MILLIS-1, cal, dateFormat); + + // Test a date that should work + test(Long.MIN_VALUE + ONE_DAY, cal, dateFormat); + + // Try hours in the earliest day or two + // JUST FOR DEBUGGING: + if (false) { + ((SimpleDateFormat)dateFormat).applyPattern("H:mm MMM d, yyyy G"); + for (int dom=2; dom<=3; ++dom) { + for (int h=0; h<24; ++h) { + cal.clear(); + cal.set(Calendar.ERA, GregorianCalendar.BC); + cal.set(292269055, Calendar.DECEMBER, dom, h, 0); + Date d = cal.getTime(); + cal.setTime(d); + logln("" + h + ":00 Dec "+dom+", 292269055 BC -> " + + Long.toHexString(d.getTime()) + " -> " + + dateFormat.format(cal.getTime())); + } + } + // Other way + long t = 0x80000000018c5c00L; // Dec 3, 292269055 BC + while (t<0) { + cal.setTime(new Date(t)); + logln("0x" + Long.toHexString(t) + " -> " + + dateFormat.format(cal.getTime())); + t -= ONE_HOUR; + } + } + } +} + +//eof diff --git a/test/java/util/Calendar/CalendarRegression.java b/test/java/util/Calendar/CalendarRegression.java new file mode 100644 index 0000000000..baae13f14f --- /dev/null +++ b/test/java/util/Calendar/CalendarRegression.java @@ -0,0 +1,2496 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4031502 4035301 4040996 4051765 4059654 4061476 4070502 4071197 4071385 + * 4073929 4083167 4086724 4092362 4095407 4096231 4096539 4100311 4103271 + * 4106136 4108764 4114578 4118384 4125881 4125892 4136399 4141665 4142933 + * 4145158 4145983 4147269 4149677 4162587 4165343 4166109 4167060 4173516 + * 4174361 4177484 4197699 4209071 4288792 4328747 4413980 4546637 4623997 + * 4685354 4655637 4683492 4080631 4080631 4167995 4340146 4639407 + * 4652815 4652830 4740554 4936355 4738710 4633646 4846659 4822110 4960642 + * 4973919 4980088 4965624 5013094 5006864 8152077 + * @library /java/text/testlib + */ + +import java.lang.reflect.*; +import java.io.*; +import java.util.*; +import java.text.*; + +public class CalendarRegression extends IntlTest { + + public static void main(String[] args) throws Exception { + new CalendarRegression().run(args); + } + + /* + Synopsis: java.sql.Timestamp constructor works wrong on Windows 95 + + ==== Here is the test ==== + public static void main (String args[]) { + java.sql.Timestamp t= new java.sql.Timestamp(0,15,5,5,8,13,123456700); + logln("expected=1901-04-05 05:08:13.1234567"); + logln(" result="+t); + } + + ==== Here is the output of the test on Solaris or NT ==== + expected=1901-04-05 05:08:13.1234567 + result=1901-04-05 05:08:13.1234567 + + ==== Here is the output of the test on Windows95 ==== + expected=1901-04-05 05:08:13.1234567 + result=1901-04-05 06:08:13.1234567 + */ + + public void Test4031502() { + // This bug actually occurs on Windows NT as well, and doesn't + // require the host zone to be set; it can be set in Java. + String[] ids = TimeZone.getAvailableIDs(); + boolean bad = false; + for (int i=0; i<ids.length; ++i) { + TimeZone zone = TimeZone.getTimeZone(ids[i]); + GregorianCalendar cal = new GregorianCalendar(zone); + cal.clear(); + cal.set(1900, 15, 5, 5, 8, 13); + if (cal.get(Calendar.HOUR) != 5) { + logln(zone.getID() + " " + + //zone.useDaylightTime() + " " + + cal.get(Calendar.DST_OFFSET) / (60*60*1000) + " " + + zone.getRawOffset() / (60*60*1000) + + ": HOUR = " + cal.get(Calendar.HOUR)); + bad = true; + } + } + if (bad) errln("TimeZone problems with GC"); + } + + public void Test4035301() { + GregorianCalendar c = new GregorianCalendar(98, 8, 7); + GregorianCalendar d = new GregorianCalendar(98, 8, 7); + if (c.after(d) || + c.after(c) || + c.before(d) || + c.before(c) || + !c.equals(c) || + !c.equals(d)) + errln("Fail"); + } + + public void Test4040996() { + String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000); + SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]); + pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000); + pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000); + Calendar calendar = new GregorianCalendar(pdt); + + calendar.set(Calendar.MONTH,3); + calendar.set(Calendar.DAY_OF_MONTH,18); + calendar.set(Calendar.SECOND, 30); + + logln("MONTH: " + calendar.get(Calendar.MONTH)); + logln("DAY_OF_MONTH: " + + calendar.get(Calendar.DAY_OF_MONTH)); + logln("MINUTE: " + calendar.get(Calendar.MINUTE)); + logln("SECOND: " + calendar.get(Calendar.SECOND)); + + calendar.add(Calendar.SECOND,6); + //This will print out todays date for MONTH and DAY_OF_MONTH + //instead of the date it was set to. + //This happens when adding MILLISECOND or MINUTE also + logln("MONTH: " + calendar.get(Calendar.MONTH)); + logln("DAY_OF_MONTH: " + + calendar.get(Calendar.DAY_OF_MONTH)); + logln("MINUTE: " + calendar.get(Calendar.MINUTE)); + logln("SECOND: " + calendar.get(Calendar.SECOND)); + if (calendar.get(Calendar.MONTH) != 3 || + calendar.get(Calendar.DAY_OF_MONTH) != 18 || + calendar.get(Calendar.SECOND) != 36) + errln("Fail: Calendar.add misbehaves"); + } + + public void Test4051765() { + Calendar cal = Calendar.getInstance(); + cal.setLenient(false); + cal.set(Calendar.DAY_OF_WEEK, 0); + try { + cal.getTime(); + errln("Fail: DAY_OF_WEEK 0 should be disallowed"); + } + catch (IllegalArgumentException e) { + return; + } + } + + /* User error - no bug here + public void Test4059524() { + // Create calendar for April 10, 1997 + GregorianCalendar calendar = new GregorianCalendar(); + // print out a bunch of interesting things + logln("ERA: " + calendar.get(calendar.ERA)); + logln("YEAR: " + calendar.get(calendar.YEAR)); + logln("MONTH: " + calendar.get(calendar.MONTH)); + logln("WEEK_OF_YEAR: " + + calendar.get(calendar.WEEK_OF_YEAR)); + logln("WEEK_OF_MONTH: " + + calendar.get(calendar.WEEK_OF_MONTH)); + logln("DATE: " + calendar.get(calendar.DATE)); + logln("DAY_OF_MONTH: " + + calendar.get(calendar.DAY_OF_MONTH)); + logln("DAY_OF_YEAR: " + calendar.get(calendar.DAY_OF_YEAR)); + logln("DAY_OF_WEEK: " + calendar.get(calendar.DAY_OF_WEEK)); + logln("DAY_OF_WEEK_IN_MONTH: " + + calendar.get(calendar.DAY_OF_WEEK_IN_MONTH)); + logln("AM_PM: " + calendar.get(calendar.AM_PM)); + logln("HOUR: " + calendar.get(calendar.HOUR)); + logln("HOUR_OF_DAY: " + calendar.get(calendar.HOUR_OF_DAY)); + logln("MINUTE: " + calendar.get(calendar.MINUTE)); + logln("SECOND: " + calendar.get(calendar.SECOND)); + logln("MILLISECOND: " + calendar.get(calendar.MILLISECOND)); + logln("ZONE_OFFSET: " + + (calendar.get(calendar.ZONE_OFFSET)/(60*60*1000))); + logln("DST_OFFSET: " + + (calendar.get(calendar.DST_OFFSET)/(60*60*1000))); + calendar = new GregorianCalendar(1997,3,10); + calendar.getTime(); + logln("April 10, 1997"); + logln("ERA: " + calendar.get(calendar.ERA)); + logln("YEAR: " + calendar.get(calendar.YEAR)); + logln("MONTH: " + calendar.get(calendar.MONTH)); + logln("WEEK_OF_YEAR: " + + calendar.get(calendar.WEEK_OF_YEAR)); + logln("WEEK_OF_MONTH: " + + calendar.get(calendar.WEEK_OF_MONTH)); + logln("DATE: " + calendar.get(calendar.DATE)); + logln("DAY_OF_MONTH: " + + calendar.get(calendar.DAY_OF_MONTH)); + logln("DAY_OF_YEAR: " + calendar.get(calendar.DAY_OF_YEAR)); + logln("DAY_OF_WEEK: " + calendar.get(calendar.DAY_OF_WEEK)); + logln("DAY_OF_WEEK_IN_MONTH: " + calendar.get(calendar.DAY_OF_WEEK_IN_MONTH)); + logln("AM_PM: " + calendar.get(calendar.AM_PM)); + logln("HOUR: " + calendar.get(calendar.HOUR)); + logln("HOUR_OF_DAY: " + calendar.get(calendar.HOUR_OF_DAY)); + logln("MINUTE: " + calendar.get(calendar.MINUTE)); + logln("SECOND: " + calendar.get(calendar.SECOND)); + logln("MILLISECOND: " + calendar.get(calendar.MILLISECOND)); + logln("ZONE_OFFSET: " + + (calendar.get(calendar.ZONE_OFFSET)/(60*60*1000))); // in hours + logln("DST_OFFSET: " + + (calendar.get(calendar.DST_OFFSET)/(60*60*1000))); // in hours + } + */ + + public void Test4059654() { + GregorianCalendar gc = new GregorianCalendar(); + + gc.set(1997, 3, 1, 15, 16, 17); // April 1, 1997 + + gc.set(Calendar.HOUR, 0); + gc.set(Calendar.AM_PM, Calendar.AM); + gc.set(Calendar.MINUTE, 0); + gc.set(Calendar.SECOND, 0); + gc.set(Calendar.MILLISECOND, 0); + + Date cd = gc.getTime(); + Date exp = new Date(97, 3, 1, 0, 0, 0); + if (!cd.equals(exp)) + errln("Fail: Calendar.set broken. Got " + cd + " Want " + exp); + } + + public void Test4061476() { + SimpleDateFormat fmt = new SimpleDateFormat("ddMMMyy", Locale.UK); + Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"), + Locale.UK); + fmt.setCalendar(cal); + try + { + Date date = fmt.parse("29MAY97"); + cal.setTime(date); + } + catch (Exception e) {;} + cal.set(Calendar.HOUR_OF_DAY, 13); + logln("Hour: "+cal.get(Calendar.HOUR_OF_DAY)); + cal.add(Calendar.HOUR_OF_DAY, 6); + logln("Hour: "+cal.get(Calendar.HOUR_OF_DAY)); + if (cal.get(Calendar.HOUR_OF_DAY) != 19) + errln("Fail: Want 19 Got " + cal.get(Calendar.HOUR_OF_DAY)); + } + + public void Test4070502() { + Date d = getAssociatedDate(new Date(98, 0, 30)); + Calendar cal = new GregorianCalendar(); + cal.setTime(d); + if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || + cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) + errln("Fail: Want weekday Got " + d); + } + + /** + * Get the associated date starting from a specified date + * NOTE: the unnecessary "getTime()'s" below are a work-around for a + * bug in jdk 1.1.3 (and probably earlier versions also) + * <p> + * @param date The date to start from + */ + public static Date getAssociatedDate(Date d) { + GregorianCalendar cal = new GregorianCalendar(); + cal.setTime(d); + //cal.add(field, amount); //<-- PROBLEM SEEN WITH field = DATE,MONTH + // cal.getTime(); // <--- REMOVE THIS TO SEE BUG + while (true) { + int wd = cal.get(Calendar.DAY_OF_WEEK); + if (wd == Calendar.SATURDAY || wd == Calendar.SUNDAY) { + cal.add(Calendar.DATE, 1); + // cal.getTime(); + } + else + break; + } + return cal.getTime(); + } + + public void Test4071197() { + dowTest(false); + dowTest(true); + } + + void dowTest(boolean lenient) { + GregorianCalendar cal = new GregorianCalendar(); + cal.set(1997, Calendar.AUGUST, 12); // Wednesday + // cal.getTime(); // Force update + cal.setLenient(lenient); + cal.set(1996, Calendar.DECEMBER, 1); // Set the date to be December 1, 1996 + int dow = cal.get(Calendar.DAY_OF_WEEK); + int min = cal.getMinimum(Calendar.DAY_OF_WEEK); + int max = cal.getMaximum(Calendar.DAY_OF_WEEK); + logln(cal.getTime().toString()); + if (min != Calendar.SUNDAY || max != Calendar.SATURDAY) + errln("FAIL: Min/max bad"); + if (dow < min || dow > max) + errln("FAIL: Day of week " + dow + " out of range"); + if (dow != Calendar.SUNDAY) + errln("FAIL: Day of week should be SUNDAY Got " + dow); + } + + public void Test4071385() { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date(98, Calendar.JUNE, 24)); + cal.set(Calendar.MONTH, Calendar.NOVEMBER); // change a field + logln(cal.getTime().toString()); + if (!cal.getTime().equals(new Date(98, Calendar.NOVEMBER, 24))) + errln("Fail"); + } + + public void Test4073929() { + GregorianCalendar foo1 = new GregorianCalendar(1997, 8, 27); + foo1.add(Calendar.DAY_OF_MONTH, +1); + int testyear = foo1.get(Calendar.YEAR); + int testmonth = foo1.get(Calendar.MONTH); + int testday = foo1.get(Calendar.DAY_OF_MONTH); + if (testyear != 1997 || + testmonth != 8 || + testday != 28) + errln("Fail: Calendar not initialized"); + } + + public void Test4083167() { + TimeZone saveZone = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + Date firstDate = new Date(); + Calendar cal = new GregorianCalendar(); + cal.setTime(firstDate); + long firstMillisInDay = cal.get(Calendar.HOUR_OF_DAY) * 3600000L + + cal.get(Calendar.MINUTE) * 60000L + + cal.get(Calendar.SECOND) * 1000L + + cal.get(Calendar.MILLISECOND); + + logln("Current time: " + firstDate.toString()); + + for (int validity=0; validity<30; validity++) { + Date lastDate = new Date(firstDate.getTime() + + (long)validity*1000*24*60*60); + cal.setTime(lastDate); + long millisInDay = cal.get(Calendar.HOUR_OF_DAY) * 3600000L + + cal.get(Calendar.MINUTE) * 60000L + + cal.get(Calendar.SECOND) * 1000L + + cal.get(Calendar.MILLISECOND); + if (firstMillisInDay != millisInDay) { + errln("Day has shifted " + lastDate); + } + } + } + finally { + TimeZone.setDefault(saveZone); + } + } + + public void Test4086724() { + SimpleDateFormat date; + TimeZone saveZone = TimeZone.getDefault(); + Locale saveLocale = Locale.getDefault(); + + String summerTime = "British Summer Time"; + String standardTime = "Greenwich Mean Time"; + try { + Locale.setDefault(Locale.UK); + TimeZone.setDefault(TimeZone.getTimeZone("Europe/London")); + date = new SimpleDateFormat("zzzz"); + + Calendar cal=Calendar.getInstance(); + cal.set(1997,Calendar.SEPTEMBER,30); + Date now=cal.getTime(); + String formattedDate = date.format(now); + if (!formattedDate.equals(summerTime)) { + errln("Wrong display name \"" + formattedDate + + "\" for <" + now + ">"); + } + int weekOfYear = cal.get(Calendar.WEEK_OF_YEAR); + if (weekOfYear != 40) { + errln("Wrong week-of-year " + weekOfYear + + " for <" + now + ">"); + } + + cal.set(1996,Calendar.DECEMBER,31); + now=cal.getTime(); + formattedDate = date.format(now); + if (!formattedDate.equals(standardTime)) { + errln("Wrong display name \"" + formattedDate + + "\" for <" + now + ">"); + } + weekOfYear = cal.get(Calendar.WEEK_OF_YEAR); + if (weekOfYear != 1) { + errln("Wrong week-of-year " + weekOfYear + + " for <" + now + ">"); + } + + cal.set(1997,Calendar.JANUARY,1); + now=cal.getTime(); + formattedDate = date.format(now); + if (!formattedDate.equals(standardTime)) { + errln("Wrong display name \"" + formattedDate + + "\" for <" + now + ">"); + } + weekOfYear = cal.get(Calendar.WEEK_OF_YEAR); + if (weekOfYear != 1) { + errln("Wrong week-of-year " + weekOfYear + + " for <" + now + ">"); + } + + cal.set(1997,Calendar.JANUARY,8); + now=cal.getTime(); + formattedDate = date.format(now); + if (!formattedDate.equals(standardTime)) { + errln("Wrong display name \"" + formattedDate + + "\" for <" + now + ">"); + } + weekOfYear = cal.get(Calendar.WEEK_OF_YEAR); + if (weekOfYear != 2) { + errln("Wrong week-of-year " + weekOfYear + + " for <" + now + ">"); + } + + } + finally { + Locale.setDefault(saveLocale); + TimeZone.setDefault(saveZone); + } + } + + public void Test4092362() { + GregorianCalendar cal1 = new GregorianCalendar(1997, 10, 11, 10, 20, 40); + /*cal1.set( Calendar.YEAR, 1997 ); + cal1.set( Calendar.MONTH, 10 ); + cal1.set( Calendar.DATE, 11 ); + cal1.set( Calendar.HOUR, 10 ); + cal1.set( Calendar.MINUTE, 20 ); + cal1.set( Calendar.SECOND, 40 ); */ + + logln( " Cal1 = " + cal1.getTime().getTime() ); + logln( " Cal1 time in ms = " + cal1.get(Calendar.MILLISECOND) ); + for( int k = 0; k < 100 ; k++ ); + + GregorianCalendar cal2 = new GregorianCalendar(1997, 10, 11, 10, 20, 40); + /*cal2.set( Calendar.YEAR, 1997 ); + cal2.set( Calendar.MONTH, 10 ); + cal2.set( Calendar.DATE, 11 ); + cal2.set( Calendar.HOUR, 10 ); + cal2.set( Calendar.MINUTE, 20 ); + cal2.set( Calendar.SECOND, 40 ); */ + + logln( " Cal2 = " + cal2.getTime().getTime() ); + logln( " Cal2 time in ms = " + cal2.get(Calendar.MILLISECOND) ); + if( !cal1.equals( cal2 ) ) + errln("Fail: Milliseconds randomized"); + } + + public void Test4095407() { + GregorianCalendar a = new GregorianCalendar(1997,Calendar.NOVEMBER, 13); + int dow = a.get(Calendar.DAY_OF_WEEK); + if (dow != Calendar.THURSDAY) + errln("Fail: Want THURSDAY Got " + dow); + } + + public void Test4096231() { + TimeZone GMT = TimeZone.getTimeZone("GMT"); + TimeZone PST = TimeZone.getTimeZone("PST"); + int sec = 0, min = 0, hr = 0, day = 1, month = 10, year = 1997; + + Calendar cal1 = new GregorianCalendar(PST); + cal1.setTime(new Date(880698639000L)); + int p; + logln("PST 1 is: " + (p=cal1.get(cal1.HOUR_OF_DAY))); + cal1.setTimeZone(GMT); + // Issue 1: Changing the timezone doesn't change the + // represented time. + int h1,h2; + logln("GMT 1 is: " + (h1=cal1.get(cal1.HOUR_OF_DAY))); + cal1.setTime(new Date(880698639000L)); + logln("GMT 2 is: " + (h2=cal1.get(cal1.HOUR_OF_DAY))); + // Note: This test had a bug in it. It wanted h1!=h2, when + // what was meant was h1!=p. Fixed this concurrent with fix + // to 4177484. + if (p == h1 || h1 != h2) + errln("Fail: Hour same in different zones"); + + Calendar cal2 = new GregorianCalendar(GMT); + Calendar cal3 = new GregorianCalendar(PST); + cal2.set(Calendar.MILLISECOND, 0); + cal3.set(Calendar.MILLISECOND, 0); + + cal2.set(cal1.get(cal1.YEAR), + cal1.get(cal1.MONTH), + cal1.get(cal1.DAY_OF_MONTH), + cal1.get(cal1.HOUR_OF_DAY), + cal1.get(cal1.MINUTE), + cal1.get(cal1.SECOND)); + + long t1,t2,t3,t4; + logln("RGMT 1 is: " + (t1=cal2.getTime().getTime())); + cal3.set(year, month, day, hr, min, sec); + logln("RPST 1 is: " + (t2=cal3.getTime().getTime())); + cal3.setTimeZone(GMT); + logln("RGMT 2 is: " + (t3=cal3.getTime().getTime())); + cal3.set(cal1.get(cal1.YEAR), + cal1.get(cal1.MONTH), + cal1.get(cal1.DAY_OF_MONTH), + cal1.get(cal1.HOUR_OF_DAY), + cal1.get(cal1.MINUTE), + cal1.get(cal1.SECOND)); + // Issue 2: Calendar continues to use the timezone in its + // constructor for set() conversions, regardless + // of calls to setTimeZone() + logln("RGMT 3 is: " + (t4=cal3.getTime().getTime())); + if (t1 == t2 || + t1 != t4 || + t2 != t3) + errln("Fail: Calendar zone behavior faulty"); + } + + public void Test4096539() { + int[] y = {31,28,31,30,31,30,31,31,30,31,30,31}; + + for (int x=0;x<12;x++) { + GregorianCalendar gc = new + GregorianCalendar(1997,x,y[x]); + int m1,m2; + log((m1=gc.get(Calendar.MONTH)+1)+"/"+ + gc.get(Calendar.DATE)+"/"+gc.get(Calendar.YEAR)+ + " + 1mo = "); + + gc.add(Calendar.MONTH, 1); + logln((m2=gc.get(Calendar.MONTH)+1)+"/"+ + gc.get(Calendar.DATE)+"/"+gc.get(Calendar.YEAR) + ); + int m = (m1 % 12) + 1; + if (m2 != m) + errln("Fail: Want " + m + " Got " + m2); + } + + } + + public void Test4100311() { + GregorianCalendar cal = (GregorianCalendar)Calendar.getInstance(); + cal.set(Calendar.YEAR, 1997); + cal.set(Calendar.DAY_OF_YEAR, 1); + Date d = cal.getTime(); // Should be Jan 1 + logln(d.toString()); + if (cal.get(Calendar.DAY_OF_YEAR) != 1) + errln("Fail: DAY_OF_YEAR not set"); + } + + public void Test4103271() { + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + SimpleDateFormat sdf = new SimpleDateFormat(); + int numYears=40, startYear=1997, numDays=15; + String output, testDesc; + GregorianCalendar testCal = (GregorianCalendar)Calendar.getInstance(); + testCal.clear(); + sdf.setCalendar(testCal); + sdf.applyPattern("d MMM yyyy"); + boolean fail = false; + for (int firstDay=1; firstDay<=2; firstDay++) { + for (int minDays=1; minDays<=7; minDays++) { + testCal.setMinimalDaysInFirstWeek(minDays); + testCal.setFirstDayOfWeek(firstDay); + testDesc = ("Test" + String.valueOf(firstDay) + String.valueOf(minDays)); + logln(testDesc + " => 1st day of week=" + + String.valueOf(firstDay) + + ", minimum days in first week=" + + String.valueOf(minDays)); + for (int j=startYear; j<=startYear+numYears; j++) { + testCal.set(j,11,25); + for(int i=0; i<numDays; i++) { + testCal.add(Calendar.DATE,1); + String calWOY; + int actWOY = testCal.get(Calendar.WEEK_OF_YEAR); + if (actWOY < 1 || actWOY > 53) { + Date d = testCal.getTime(); + calWOY = String.valueOf(actWOY); + output = testDesc + " - " + sdf.format(d) + "\t"; + output = output + "\t" + calWOY; + logln(output); + fail = true; + } + } + } + } + } + + int[] DATA = { + 3, 52, 52, 52, 52, 52, 52, 52, + 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, + 4, 52, 52, 52, 52, 52, 52, 52, + 53, 53, 53, 53, 53, 53, 53, + 1, 1, 1, 1, 1, 1, 1, + }; + testCal.setFirstDayOfWeek(Calendar.SUNDAY); + for (int j=0; j<DATA.length; j+=22) { + logln("Minimal days in first week = " + DATA[j] + + " Week starts on Sunday"); + testCal.setMinimalDaysInFirstWeek(DATA[j]); + testCal.set(1997, Calendar.DECEMBER, 21); + for (int i=0; i<21; ++i) { + int woy = testCal.get(Calendar.WEEK_OF_YEAR); + log("\t" + testCal.getTime() + " " + woy); + if (woy != DATA[j + 1 + i]) { + log(" ERROR"); + fail = true; + } else { + logln(" OK"); + } + + // Now compute the time from the fields, and make sure we + // get the same answer back. This is a round-trip test. + Date save = testCal.getTime(); + testCal.clear(); + testCal.set(Calendar.YEAR, DATA[j+1+i] < 25 ? 1998 : 1997); + testCal.set(Calendar.WEEK_OF_YEAR, DATA[j+1+i]); + testCal.set(Calendar.DAY_OF_WEEK, (i%7) + Calendar.SUNDAY); + if (!testCal.getTime().equals(save)) { + logln(" Parse failed: " + testCal.getTime()); + fail= true; + } else { + logln(" Passed"); + } + + testCal.setTime(save); + testCal.add(Calendar.DAY_OF_MONTH, 1); + } + } + + // Test field disambiguation with a few special hard-coded cases. + // This shouldn't fail if the above cases aren't failing. + Object[] DISAM = { + new Integer(1998), new Integer(1), new Integer(Calendar.SUNDAY), + new Date(97, Calendar.DECEMBER, 28), + new Integer(1998), new Integer(2), new Integer(Calendar.SATURDAY), + new Date(98, Calendar.JANUARY, 10), + new Integer(1998), new Integer(53), new Integer(Calendar.THURSDAY), + new Date(98, Calendar.DECEMBER, 31), + new Integer(1998), new Integer(53), new Integer(Calendar.FRIDAY), + new Date(99, Calendar.JANUARY, 1), + }; + testCal.setMinimalDaysInFirstWeek(3); + testCal.setFirstDayOfWeek(Calendar.SUNDAY); + for (int i=0; i<DISAM.length; i+=4) { + int y = ((Integer)DISAM[i]).intValue(); + int woy = ((Integer)DISAM[i+1]).intValue(); + int dow = ((Integer)DISAM[i+2]).intValue(); + Date exp = (Date)DISAM[i+3]; + testCal.clear(); + testCal.set(Calendar.YEAR, y); + testCal.set(Calendar.WEEK_OF_YEAR, woy); + testCal.set(Calendar.DAY_OF_WEEK, dow); + log(y + "-W" + woy + "-DOW" + dow); + if (!testCal.getTime().equals(exp)) { + logln(" FAILED expect: " + exp + "\n got: " +testCal.getTime()); + fail = true; + } else { + logln(" OK"); + } + } + + // Now try adding and rolling + Object ADD = new Object(); + Object ROLL = new Object(); + Object[] ADDROLL = { + ADD, new Integer(1), new Date(98, Calendar.DECEMBER, 25), new Date(99, Calendar.JANUARY, 1), + ADD, new Integer(1), new Date(97, Calendar.DECEMBER, 28), new Date(98, Calendar.JANUARY, 4), + ROLL, new Integer(1), new Date(98, Calendar.DECEMBER, 27), new Date(98, Calendar.JANUARY, 4), + ROLL, new Integer(1), new Date(99, Calendar.DECEMBER, 24), new Date(99, Calendar.DECEMBER, 31), + ROLL, new Integer(1), new Date(99, Calendar.DECEMBER, 25), new Date(99, Calendar.JANUARY, 9), + }; + testCal.setMinimalDaysInFirstWeek(3); + testCal.setFirstDayOfWeek(Calendar.SUNDAY); + for (int i=0; i<ADDROLL.length; i+=4) { + int amount = ((Integer)ADDROLL[i+1]).intValue(); + Date before = (Date)ADDROLL[i+2]; + Date after = (Date)ADDROLL[i+3]; + + testCal.setTime(before); + if (ADDROLL[i] == ADD) + testCal.add(Calendar.WEEK_OF_YEAR, amount); + else + testCal.roll(Calendar.WEEK_OF_YEAR, amount); + log((ADDROLL[i]==ADD ? "add(WOY," : "roll(WOY,") + + amount + ")\t " + before + + "\n\t\t => " + testCal.getTime()); + if (!after.equals(testCal.getTime())) { + logln("\tFAIL\n\t\texp: " + after); + fail = true; + } else + logln(" OK"); + + testCal.setTime(after); + if (ADDROLL[i] == ADD) + testCal.add(Calendar.WEEK_OF_YEAR, -amount); + else + testCal.roll(Calendar.WEEK_OF_YEAR, -amount); + log((ADDROLL[i]==ADD ? "add(WOY," : "roll(WOY,") + + (-amount) + ") " + after + + "\n\t\t => " + testCal.getTime()); + if (!before.equals(testCal.getTime())) { + logln("\tFAIL\n\t\texp: " + before); + fail = true; + } + else logln("\tOK"); + } + + if (fail) { + errln("Fail: Week of year misbehaving"); + } + } + + public void Test4106136() { + Locale saveLocale = Locale.getDefault(); + try { + Locale[] locales = { Locale.CHINESE, Locale.CHINA }; + for (int i=0; i<locales.length; ++i) { + Locale.setDefault(locales[i]); + int[] n = { + Calendar.getAvailableLocales().length, + DateFormat.getAvailableLocales().length, + NumberFormat.getAvailableLocales().length + }; + for (int j=0; j<n.length; ++j) { + if (n[j] == 0) { + errln("Fail: No locales for " + locales[i]); + } + } + } + } + finally { + Locale.setDefault(saveLocale); + } + } + + public void Test4108764() { + Date d00 = new Date(97, Calendar.MARCH, 15, 12, 00, 00); + Date d01 = new Date(97, Calendar.MARCH, 15, 12, 00, 56); + Date d10 = new Date(97, Calendar.MARCH, 15, 12, 34, 00); + Date d11 = new Date(97, Calendar.MARCH, 15, 12, 34, 56); + Date epoch = new Date(70, Calendar.JANUARY, 1); + + Calendar cal = Calendar.getInstance(); + cal.setTime(d11); + + cal.clear( Calendar.MINUTE ); + logln(cal.getTime().toString()); + if (!cal.getTime().equals(d01)) + errln("Fail: clear(MINUTE) broken"); + + cal.set( Calendar.SECOND, 0 ); + logln(cal.getTime().toString()); + if (!cal.getTime().equals(d00)) + errln("Fail: set(SECOND, 0) broken"); + + cal.setTime(d11); + cal.set( Calendar.SECOND, 0 ); + logln(cal.getTime().toString()); + if (!cal.getTime().equals(d10)) + errln("Fail: set(SECOND, 0) broken #2"); + + cal.clear( Calendar.MINUTE ); + logln(cal.getTime().toString()); + if (!cal.getTime().equals(d00)) + errln("Fail: clear(MINUTE) broken #2"); + + cal.clear(); + logln(cal.getTime().toString()); + if (!cal.getTime().equals(epoch)) + errln("Fail: clear() broken Want " + epoch); + } + + public void Test4114578() { + int ONE_HOUR = 60*60*1000; + TimeZone saveZone = TimeZone.getDefault(); + boolean fail = false; + try { + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + Calendar cal = Calendar.getInstance(); + long onset = new Date(98, Calendar.APRIL, 5, 1, 0).getTime() + ONE_HOUR; + long cease = new Date(98, Calendar.OCTOBER, 25, 0, 0).getTime() + 2*ONE_HOUR; + + final int ADD = 1; + final int ROLL = 2; + + long[] DATA = { + // Start Action Amt Expected_change + onset - ONE_HOUR, ADD, 1, ONE_HOUR, + onset, ADD, -1, -ONE_HOUR, + onset - ONE_HOUR, ROLL, 1, ONE_HOUR, + onset, ROLL, -1, -ONE_HOUR, + cease - ONE_HOUR, ADD, 1, ONE_HOUR, + cease, ADD, -1, -ONE_HOUR, + // roll() was changed to support wall-clock-based roll (JDK-8152077). The + // time value may jump 2 hours by skipping non-existent wall-clock time. + // Note that JDK-4114578 was a problem of add(), not roll(). + cease - ONE_HOUR, ROLL, 1, ONE_HOUR * 2, + cease, ROLL, -1, -ONE_HOUR * 2, + }; + + for (int i=0; i<DATA.length; i+=4) { + Date date = new Date(DATA[i]); + int amt = (int) DATA[i+2]; + long expectedChange = DATA[i+3]; + + log(date.toString()); + cal.setTime(date); + + switch ((int) DATA[i+1]) { + case ADD: + log(" add (HOUR," + (amt<0?"":"+")+amt + ")= "); + cal.add(Calendar.HOUR, amt); + break; + case ROLL: + log(" roll(HOUR," + (amt<0?"":"+")+amt + ")= "); + cal.roll(Calendar.HOUR, amt); + break; + } + + log(cal.getTime().toString()); + + long change = cal.getTime().getTime() - date.getTime(); + if (change != expectedChange) { + fail = true; + logln(" FAIL"); + } + else logln(" OK"); + } + } finally { + TimeZone.setDefault(saveZone); + } + + if (fail) { + errln("Fail: roll/add misbehaves around DST onset/cease"); + } + } + + /** + * Make sure maximum for HOUR field is 11, not 12. + */ + public void Test4118384() { + Calendar cal = Calendar.getInstance(); + if (cal.getMaximum(Calendar.HOUR) != 11 || + cal.getLeastMaximum(Calendar.HOUR) != 11 || + cal.getActualMaximum(Calendar.HOUR) != 11) + errln("Fail: maximum of HOUR field should be 11"); + } + + /** + * Check isLeapYear for BC years. + */ + public void Test4125881() { + GregorianCalendar cal = (GregorianCalendar) Calendar.getInstance(); + DateFormat fmt = new SimpleDateFormat("MMMM d, yyyy G"); + cal.clear(); + for (int y=-20; y<=10; ++y) { + cal.set(Calendar.ERA, y < 1 ? GregorianCalendar.BC : GregorianCalendar.AD); + cal.set(Calendar.YEAR, y < 1 ? 1 - y : y); + logln(y + " = " + fmt.format(cal.getTime()) + " " + + cal.isLeapYear(y)); + if (cal.isLeapYear(y) != ((y+40)%4 == 0)) + errln("Leap years broken"); + } + } + + /** + * Prove that GregorianCalendar is proleptic (it used to cut off + * at 45 BC, and not have leap years before then). + */ + public void Test4125892() { + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + GregorianCalendar cal = (GregorianCalendar) Calendar.getInstance(); + DateFormat fmt = new SimpleDateFormat("MMMM d, yyyy G"); + cal.clear(); + cal.set(Calendar.ERA, GregorianCalendar.BC); + cal.set(Calendar.YEAR, 81); // 81 BC is a leap year (proleptically) + cal.set(Calendar.MONTH, Calendar.FEBRUARY); + cal.set(Calendar.DATE, 28); + cal.add(Calendar.DATE, 1); + if (cal.get(Calendar.DATE) != 29 || + !cal.isLeapYear(-80)) // -80 == 81 BC + errln("Calendar not proleptic"); + } + + /** + * Calendar and GregorianCalendar hashCode() methods need improvement. + * Calendar needs a good implementation that subclasses can override, + * and GregorianCalendar should use that implementation. + */ + public void Test4136399() { + /* Note: This test is actually more strict than it has to be. + * Technically, there is no requirement that unequal objects have + * unequal hashes. We only require equal objects to have equal hashes. + * It is desirable for unequal objects to have distributed hashes, but + * there is no hard requirement here. + * + * In this test we make assumptions about certain attributes of calendar + * objects getting represented in the hash, which need not always be the + * case (although it does work currently with the given test). */ + Calendar a = Calendar.getInstance(); + Calendar b = (Calendar)a.clone(); + if (a.hashCode() != b.hashCode()) { + errln("Calendar hash code unequal for cloned objects"); + } + + b.setMinimalDaysInFirstWeek(7 - a.getMinimalDaysInFirstWeek()); + if (a.hashCode() == b.hashCode()) { + errln("Calendar hash code ignores minimal days in first week"); + } + b.setMinimalDaysInFirstWeek(a.getMinimalDaysInFirstWeek()); + + b.setFirstDayOfWeek((a.getFirstDayOfWeek() % 7) + 1); // Next day + if (a.hashCode() == b.hashCode()) { + errln("Calendar hash code ignores first day of week"); + } + b.setFirstDayOfWeek(a.getFirstDayOfWeek()); + + b.setLenient(!a.isLenient()); + if (a.hashCode() == b.hashCode()) { + errln("Calendar hash code ignores lenient setting"); + } + b.setLenient(a.isLenient()); + + // Assume getTimeZone() returns a reference, not a clone + // of a reference -- this is true as of this writing + b.getTimeZone().setRawOffset(a.getTimeZone().getRawOffset() + 60*60*1000); + if (a.hashCode() == b.hashCode()) { + errln("Calendar hash code ignores zone"); + } + b.getTimeZone().setRawOffset(a.getTimeZone().getRawOffset()); + + GregorianCalendar c = new GregorianCalendar(); + GregorianCalendar d = (GregorianCalendar)c.clone(); + if (c.hashCode() != d.hashCode()) { + errln("GregorianCalendar hash code unequal for clones objects"); + } + Date cutover = c.getGregorianChange(); + d.setGregorianChange(new Date(cutover.getTime() + 24*60*60*1000)); + if (c.hashCode() == d.hashCode()) { + errln("GregorianCalendar hash code ignores cutover"); + } + } + + /** + * GregorianCalendar.equals() ignores cutover date + */ + public void Test4141665() { + GregorianCalendar cal = new GregorianCalendar(); + GregorianCalendar cal2 = (GregorianCalendar)cal.clone(); + Date cut = cal.getGregorianChange(); + Date cut2 = new Date(cut.getTime() + 100*24*60*60*1000L); // 100 days later + if (!cal.equals(cal2)) { + errln("Cloned GregorianCalendars not equal"); + } + cal2.setGregorianChange(cut2); + if (cal.equals(cal2)) { + errln("GregorianCalendar.equals() ignores cutover"); + } + } + + /** + * Bug states that ArrayIndexOutOfBoundsException is thrown by GregorianCalendar.roll() + * when IllegalArgumentException should be. + */ + public void Test4142933() { + GregorianCalendar calendar = new GregorianCalendar(); + try { + calendar.roll(-1, true); + errln("Test failed, no exception trown"); + } + catch (IllegalArgumentException e) { + // OK: Do nothing + // logln("Test passed"); + } + catch (Exception e) { + errln("Test failed. Unexpected exception is thrown: " + e); + e.printStackTrace(); + } + } + + /** + * GregorianCalendar handling of Dates Long.MIN_VALUE and Long.MAX_VALUE is + * confusing; unless the time zone has a raw offset of zero, one or the + * other of these will wrap. We've modified the test given in the bug + * report to therefore only check the behavior of a calendar with a zero raw + * offset zone. + */ + public void Test4145158() { + GregorianCalendar calendar = new GregorianCalendar(); + + calendar.setTimeZone(TimeZone.getTimeZone("GMT")); + + calendar.setTime(new Date(Long.MIN_VALUE)); + int year1 = calendar.get(Calendar.YEAR); + int era1 = calendar.get(Calendar.ERA); + + calendar.setTime(new Date(Long.MAX_VALUE)); + int year2 = calendar.get(Calendar.YEAR); + int era2 = calendar.get(Calendar.ERA); + + if (year1 == year2 && era1 == era2) { + errln("Fail: Long.MIN_VALUE or Long.MAX_VALUE wrapping around"); + } + } + + /** + * Maximum value for YEAR field wrong. + */ + public void Test4145983() { + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTimeZone(TimeZone.getTimeZone("GMT")); + Date[] DATES = { new Date(Long.MAX_VALUE), new Date(Long.MIN_VALUE) }; + for (int i=0; i<DATES.length; ++i) { + calendar.setTime(DATES[i]); + int year = calendar.get(Calendar.YEAR); + int maxYear = calendar.getMaximum(Calendar.YEAR); + if (year > maxYear) { + errln("Failed for "+DATES[i].getTime()+" ms: year=" + + year + ", maxYear=" + maxYear); + } + } + } + + /** + * This is a bug in the validation code of GregorianCalendar. As reported, + * the bug seems worse than it really is, due to a bug in the way the bug + * report test was written. In reality the bug is restricted to the DAY_OF_YEAR + * field. - liu 6/29/98 + */ + public void Test4147269() { + final String[] fieldName = { + "ERA", + "YEAR", + "MONTH", + "WEEK_OF_YEAR", + "WEEK_OF_MONTH", + "DAY_OF_MONTH", + "DAY_OF_YEAR", + "DAY_OF_WEEK", + "DAY_OF_WEEK_IN_MONTH", + "AM_PM", + "HOUR", + "HOUR_OF_DAY", + "MINUTE", + "SECOND", + "MILLISECOND", + "ZONE_OFFSET", + "DST_OFFSET" + }; + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setLenient(false); + Date date = new Date(1996-1900, Calendar.JANUARY, 3); // Arbitrary date + for (int field = 0; field < Calendar.FIELD_COUNT; field++) { + calendar.setTime(date); + // Note: In the bug report, getActualMaximum() was called instead + // of getMaximum() -- this was an error. The validation code doesn't + // use getActualMaximum(), since that's too costly. + int max = calendar.getMaximum(field); + int value = max+1; + calendar.set(field, value); + try { + calendar.getTime(); // Force time computation + // We expect an exception to be thrown. If we fall through + // to the next line, then we have a bug. + errln("Test failed with field " + fieldName[field] + + ", date before: " + date + + ", date after: " + calendar.getTime() + + ", value: " + value + " (max = " + max +")"); + } catch (IllegalArgumentException e) {} + } + } + + /** + * Reported bug is that a GregorianCalendar with a cutover of Date(Long.MAX_VALUE) + * doesn't behave as a pure Julian calendar. + * CANNOT REPRODUCE THIS BUG + */ + public void Test4149677() { + TimeZone[] zones = { TimeZone.getTimeZone("GMT"), + TimeZone.getTimeZone("PST"), + TimeZone.getTimeZone("EAT") }; + for (int i=0; i<zones.length; ++i) { + GregorianCalendar calendar = new GregorianCalendar(zones[i]); + + // Make sure extreme values don't wrap around + calendar.setTime(new Date(Long.MIN_VALUE)); + if (calendar.get(Calendar.ERA) != GregorianCalendar.BC) { + errln("Fail: Date(Long.MIN_VALUE) has an AD year in " + zones[i]); + } + calendar.setTime(new Date(Long.MAX_VALUE)); + if (calendar.get(Calendar.ERA) != GregorianCalendar.AD) { + errln("Fail: Date(Long.MAX_VALUE) has a BC year in " + zones[i]); + } + + calendar.setGregorianChange(new Date(Long.MAX_VALUE)); + // to obtain a pure Julian calendar + + boolean is100Leap = calendar.isLeapYear(100); + if (!is100Leap) { + errln("test failed with zone " + zones[i].getID()); + errln(" cutover date is Date(Long.MAX_VALUE)"); + errln(" isLeapYear(100) returns: " + is100Leap); + } + } + } + + /** + * Calendar and Date HOUR broken. If HOUR is out-of-range, Calendar + * and Date classes will misbehave. + */ + public void Test4162587() { + TimeZone savedTz = TimeZone.getDefault(); + TimeZone tz = TimeZone.getTimeZone("PST"); + TimeZone.setDefault(tz); + GregorianCalendar cal = new GregorianCalendar(tz); + Date d; + + try { + for (int i=0; i<5; ++i) { + if (i>0) logln("---"); + + cal.clear(); + cal.set(1998, Calendar.APRIL, 5, i, 0); + d = cal.getTime(); + String s0 = d.toString(); + logln("0 " + i + ": " + s0); + + cal.clear(); + cal.set(1998, Calendar.APRIL, 4, i+24, 0); + d = cal.getTime(); + String sPlus = d.toString(); + logln("+ " + i + ": " + sPlus); + + cal.clear(); + cal.set(1998, Calendar.APRIL, 6, i-24, 0); + d = cal.getTime(); + String sMinus = d.toString(); + logln("- " + i + ": " + sMinus); + + if (!s0.equals(sPlus) || !s0.equals(sMinus)) { + errln("Fail: All three lines must match"); + } + } + } + finally { + TimeZone.setDefault(savedTz); + } + } + + /** + * Adding 12 months behaves differently from adding 1 year + */ + public void Test4165343() { + GregorianCalendar calendar = new GregorianCalendar(1996, Calendar.FEBRUARY, 29); + Date start = calendar.getTime(); + logln("init date: " + start); + calendar.add(Calendar.MONTH, 12); + Date date1 = calendar.getTime(); + logln("after adding 12 months: " + date1); + calendar.setTime(start); + calendar.add(Calendar.YEAR, 1); + Date date2 = calendar.getTime(); + logln("after adding one year : " + date2); + if (date1.equals(date2)) { + logln("Test passed"); + } else { + errln("Test failed"); + } + } + + /** + * GregorianCalendar.getActualMaximum() does not account for first day of week. + */ + public void Test4166109() { + /* Test month: + * + * March 1998 + * Su Mo Tu We Th Fr Sa + * 1 2 3 4 5 6 7 + * 8 9 10 11 12 13 14 + * 15 16 17 18 19 20 21 + * 22 23 24 25 26 27 28 + * 29 30 31 + */ + boolean passed = true; + int field = Calendar.WEEK_OF_MONTH; + + GregorianCalendar calendar = new GregorianCalendar(Locale.US); + calendar.set(1998, Calendar.MARCH, 1); + calendar.setMinimalDaysInFirstWeek(1); + logln("Date: " + calendar.getTime()); + + int firstInMonth = calendar.get(Calendar.DAY_OF_MONTH); + + for (int firstInWeek = Calendar.SUNDAY; firstInWeek <= Calendar.SATURDAY; firstInWeek++) { + calendar.setFirstDayOfWeek(firstInWeek); + int returned = calendar.getActualMaximum(field); + int expected = (31 + ((firstInMonth - firstInWeek + 7)% 7) + 6) / 7; + + logln("First day of week = " + firstInWeek + + " getActualMaximum(WEEK_OF_MONTH) = " + returned + + " expected = " + expected + + ((returned == expected) ? " ok" : " FAIL")); + + if (returned != expected) { + passed = false; + } + } + if (!passed) { + errln("Test failed"); + } + } + + /** + * Calendar.getActualMaximum(YEAR) works wrong. + * + * Note: Before 1.5, this test case assumed that + * setGregorianChange didn't change object's date. But it was + * changed. See 4928615. + */ + public void Test4167060() { + int field = Calendar.YEAR; + DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy G", + Locale.US); + + int[][] dates = { + // year, month, day of month + { 100, Calendar.NOVEMBER, 1 }, + { -99 /*100BC*/, Calendar.JANUARY, 1 }, + { 1996, Calendar.FEBRUARY, 29 }}; + + String[] id = { "Hybrid", "Gregorian", "Julian" }; + + for (int k=0; k<3; ++k) { + logln("--- " + id[k] + " ---"); + + for (int j = 0; j < dates.length; ++j) { + GregorianCalendar calendar = new GregorianCalendar(); + if (k == 1) { + calendar.setGregorianChange(new Date(Long.MIN_VALUE)); + } else if (k == 2) { + calendar.setGregorianChange(new Date(Long.MAX_VALUE)); + } + calendar.set(dates[j][0], dates[j][1], dates[j][2]); + format.setCalendar((Calendar)calendar.clone()); + + Date dateBefore = calendar.getTime(); + + int maxYear = calendar.getActualMaximum(field); + logln("maxYear: " + maxYear + " for " + format.format(calendar.getTime())); + logln("date before: " + format.format(dateBefore)); + + int years[] = {2000, maxYear-1, maxYear, maxYear+1}; + + for (int i = 0; i < years.length; i++) { + boolean valid = years[i] <= maxYear; + calendar.set(field, years[i]); + Date dateAfter = calendar.getTime(); + int newYear = calendar.get(field); + calendar.setTime(dateBefore); // restore calendar for next use + + logln(" Year " + years[i] + (valid? " ok " : " bad") + + " => " + format.format(dateAfter)); + if (valid && newYear != years[i]) { + errln(" FAIL: " + newYear + " should be valid; date, month and time shouldn't change"); + } else if (!valid && newYear == years[i]) { + errln(" FAIL: " + newYear + " should be invalid"); + } + } + } + } + } + + /** + * Calendar.roll broken + * This bug relies on the TimeZone bug 4173604 to also be fixed. + */ + public void Test4173516() { + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + int fieldsList[][] = { + { 1997, Calendar.FEBRUARY, 1, 10, 45, 15, 900 }, + { 1999, Calendar.DECEMBER, 22, 23, 59, 59, 999 }, + // test case for 4960642 with default cutover + { 1582, Calendar.OCTOBER, 4, 23, 59, 59, 999 }, + }; + String[] fieldNames = { + "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", + "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", + "AM_PM", "HOUR", "HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", + "ZONE_OFFSET", "DST_OFFSET" + }; + + Locale savedLocale = Locale.getDefault(); + Locale.setDefault(Locale.US); + int limit = 40; + + try { + GregorianCalendar cal = new GregorianCalendar(); + + cal.setTime(new Date(0)); + cal.roll(Calendar.HOUR, 0x7F000000); + cal.roll(Calendar.HOUR, -0x7F000000); + if (cal.getTime().getTime() != 0) { + errln("Hour rolling broken. expected 0, got "+cal.getTime().getTime()); + } + + for (int op=0; op<2; ++op) { + logln("Testing GregorianCalendar " + (op==0 ? "add" : "roll")); + + for (int field=0; field < Calendar.FIELD_COUNT; ++field) { + if (field != Calendar.ZONE_OFFSET && + field != Calendar.DST_OFFSET) { + for (int j=0; j<fieldsList.length; ++j) { + int fields[] = fieldsList[j]; + cal.clear(); + cal.set(fields[0], fields[1], fields[2], + fields[3], fields[4], fields[5]); + cal.set(Calendar.MILLISECOND, fields[6]); + for (int i = 0; i < 2*limit; i++) { + if (op == 0) { + cal.add(field, i < limit ? 1 : -1); + } else { + cal.roll(field, i < limit ? 1 : -1); + } + } + + if (cal.get(Calendar.YEAR) != fields[0] || + cal.get(Calendar.MONTH) != fields[1] || + cal.get(Calendar.DATE) != fields[2] || + cal.get(Calendar.HOUR_OF_DAY) != fields[3] || + cal.get(Calendar.MINUTE) != fields[4] || + cal.get(Calendar.SECOND) != fields[5] || + cal.get(Calendar.MILLISECOND) != fields[6]) { + errln("Field " + field + + " (" + fieldNames[field] + + ") FAIL, expected " + + fields[0] + + "/" + (fields[1] + 1) + + "/" + fields[2] + + " " + fields[3] + + ":" + fields[4] + + ":" + fields[5] + + "." + fields[6] + + ", got " + cal.get(Calendar.YEAR) + + "/" + (cal.get(Calendar.MONTH) + 1) + + "/" + cal.get(Calendar.DATE) + + " " + cal.get(Calendar.HOUR_OF_DAY) + + ":" + cal.get(Calendar.MINUTE) + + ":" + cal.get(Calendar.SECOND) + + "." + cal.get(Calendar.MILLISECOND)); + + cal.clear(); + cal.set(fields[0], fields[1], fields[2], + fields[3], fields[4], fields[5]); + cal.set(Calendar.MILLISECOND, fields[6]); + errln(cal.get(Calendar.YEAR) + + "/" + (cal.get(Calendar.MONTH) + 1) + + "/" + cal.get(Calendar.DATE) + + " " + cal.get(Calendar.HOUR_OF_DAY) + + ":" + cal.get(Calendar.MINUTE) + + ":" + cal.get(Calendar.SECOND) + + "." + cal.get(Calendar.MILLISECOND)); + + long prev = cal.getTime().getTime(); + for (int i = 0; i < 2*limit; i++) { + if (op == 0) { + cal.add(field, i < limit ? 1 : -1); + } else { + cal.roll(field, i < limit ? 1 : -1); + } + long t = cal.getTime().getTime(); + long delta = t - prev; + prev = t; + errln((op == 0 ? "add(" : "roll(") + + fieldNames[field] + ", " + + (i < limit ? "+" : "-") + "1) => " + + cal.get(Calendar.YEAR) + + "/" + (cal.get(Calendar.MONTH) + 1) + + "/" + cal.get(Calendar.DATE) + + " " + cal.get(Calendar.HOUR_OF_DAY) + + ":" + cal.get(Calendar.MINUTE) + + ":" + cal.get(Calendar.SECOND) + + "." + cal.get(Calendar.MILLISECOND) + + " d=" + delta); + } + } + } + } + } + } + } + finally { + Locale.setDefault(savedLocale); + } + } + + public void Test4174361() { + GregorianCalendar calendar = new GregorianCalendar(1996, 1, 29); + + calendar.add(Calendar.MONTH, 10); + Date date1 = calendar.getTime(); + int d1 = calendar.get(Calendar.DAY_OF_MONTH); + + calendar = new GregorianCalendar(1996, 1, 29); + calendar.add(Calendar.MONTH, 11); + Date date2 = calendar.getTime(); + int d2 = calendar.get(Calendar.DAY_OF_MONTH); + + if (d1 != d2) { + errln("adding months to Feb 29 broken"); + } + } + + /** + * Calendar does not update field values when setTimeZone is called. + */ + public void Test4177484() { + TimeZone PST = TimeZone.getTimeZone("PST"); + TimeZone EST = TimeZone.getTimeZone("EST"); + + Calendar cal = Calendar.getInstance(PST, Locale.US); + cal.clear(); + cal.set(1999, 3, 21, 15, 5, 0); // Arbitrary + int h1 = cal.get(Calendar.HOUR_OF_DAY); + cal.setTimeZone(EST); + int h2 = cal.get(Calendar.HOUR_OF_DAY); + if (h1 == h2) { + errln("FAIL: Fields not updated after setTimeZone"); + } + + // getTime() must NOT change when time zone is changed. + // getTime() returns zone-independent time in ms. + cal.clear(); + cal.setTimeZone(PST); + cal.set(Calendar.HOUR_OF_DAY, 10); + Date pst10 = cal.getTime(); + cal.setTimeZone(EST); + Date est10 = cal.getTime(); + if (!pst10.equals(est10)) { + errln("FAIL: setTimeZone changed time"); + } + } + + /** + * Week of year is wrong at the start and end of the year. + */ + public void Test4197699() { + GregorianCalendar cal = new GregorianCalendar(); + cal.setFirstDayOfWeek(Calendar.MONDAY); + cal.setMinimalDaysInFirstWeek(4); + DateFormat fmt = new SimpleDateFormat("E dd MMM yyyy 'DOY='D 'WOY='w"); + fmt.setCalendar(cal); + + int[] DATA = { + 2000, Calendar.JANUARY, 1, 52, + 2001, Calendar.DECEMBER, 31, 1, + }; + + for (int i=0; i<DATA.length; ) { + cal.set(DATA[i++], DATA[i++], DATA[i++]); + int expWOY = DATA[i++]; + int actWOY = cal.get(Calendar.WEEK_OF_YEAR); + if (expWOY == actWOY) { + logln("Ok: " + fmt.format(cal.getTime())); + } else { + errln("FAIL: " + fmt.format(cal.getTime()) + + ", expected WOY=" + expWOY); + cal.add(Calendar.DATE, -8); + for (int j=0; j<14; ++j) { + cal.add(Calendar.DATE, 1); + logln(fmt.format(cal.getTime())); + } + } + } + } + + /** + * Calendar DAY_OF_WEEK_IN_MONTH fields->time broken. The problem + * is in the field disambiguation code in GregorianCalendar. This + * code is supposed to choose the most recent set of fields + * among the following: + * + * MONTH + DAY_OF_MONTH + * MONTH + WEEK_OF_MONTH + DAY_OF_WEEK + * MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK + * DAY_OF_YEAR + * WEEK_OF_YEAR + DAY_OF_WEEK + */ + public void Test4209071() { + Calendar cal = Calendar.getInstance(Locale.US); + + // General field setting test + int Y = 1995 - 1900; + + Object[] FIELD_DATA = { + // Add new test cases as needed. + + // 0 + new int[] {}, new Date(Y, Calendar.JANUARY, 1), + // 1 + new int[] { Calendar.MONTH, Calendar.MARCH }, + new Date(Y, Calendar.MARCH, 1), + // 2 + new int[] { Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY }, + new Date(Y, Calendar.JANUARY, 4), + // 3 + new int[] { Calendar.DAY_OF_WEEK, Calendar.THURSDAY, + Calendar.DAY_OF_MONTH, 18, }, + new Date(Y, Calendar.JANUARY, 18), + // 4 + new int[] { Calendar.DAY_OF_MONTH, 18, + Calendar.DAY_OF_WEEK, Calendar.THURSDAY, }, + new Date(Y, Calendar.JANUARY, 18), + // 5 (WOM -1 is in previous month) + new int[] { Calendar.DAY_OF_MONTH, 18, + Calendar.WEEK_OF_MONTH, -1, + Calendar.DAY_OF_WEEK, Calendar.THURSDAY, }, + new Date(Y-1, Calendar.DECEMBER, 22), + // 6 + new int[] { Calendar.DAY_OF_MONTH, 18, + Calendar.WEEK_OF_MONTH, 4, + Calendar.DAY_OF_WEEK, Calendar.THURSDAY, }, + new Date(Y, Calendar.JANUARY, 26), + // 7 (DIM -1 is in same month) + new int[] { Calendar.DAY_OF_MONTH, 18, + Calendar.DAY_OF_WEEK_IN_MONTH, -1, + Calendar.DAY_OF_WEEK, Calendar.THURSDAY, }, + new Date(Y, Calendar.JANUARY, 26), + // 8 + new int[] { Calendar.WEEK_OF_YEAR, 9, + Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY, }, + new Date(Y, Calendar.MARCH, 1), + // 9 + new int[] { Calendar.MONTH, Calendar.OCTOBER, + Calendar.DAY_OF_WEEK_IN_MONTH, 1, + Calendar.DAY_OF_WEEK, Calendar.FRIDAY, }, + new Date(Y, Calendar.OCTOBER, 6), + // 10 + new int[] { Calendar.MONTH, Calendar.OCTOBER, + Calendar.WEEK_OF_MONTH, 2, + Calendar.DAY_OF_WEEK, Calendar.FRIDAY, }, + new Date(Y, Calendar.OCTOBER, 13), + // 11 + new int[] { Calendar.MONTH, Calendar.OCTOBER, + Calendar.DAY_OF_MONTH, 15, + Calendar.DAY_OF_YEAR, 222, }, + new Date(Y, Calendar.AUGUST, 10), + // 12 + new int[] { Calendar.DAY_OF_WEEK, Calendar.THURSDAY, + Calendar.MONTH, Calendar.DECEMBER, }, + new Date(Y, Calendar.DECEMBER, 7), + }; + + for (int i=0; i<FIELD_DATA.length; i+=2) { + int[] fields = (int[]) FIELD_DATA[i]; + Date exp = (Date) FIELD_DATA[i+1]; + + cal.clear(); + cal.set(Calendar.YEAR, Y + 1900); + for (int j=0; j<fields.length; j+=2) { + cal.set(fields[j], fields[j+1]); + } + + Date act = cal.getTime(); + if (!act.equals(exp)) { + errln("FAIL: Test " + (i/2) + " got " + act + + ", want " + exp + + " (see test/java/util/Calendar/CalendarRegression.java"); + } + } + + // Test specific failure reported in bug + Object[] DATA = { + new Integer(1), new Date(1997-1900, Calendar.JANUARY, 5), + new Integer(4), new Date(1997-1900, Calendar.JANUARY, 26), + new Integer(8), new Date(1997-1900, Calendar.FEBRUARY, 23), + new Integer(-1), new Date(1997-1900, Calendar.JANUARY, 26), + new Integer(-4), new Date(1997-1900, Calendar.JANUARY, 5), + new Integer(-8), new Date(1996-1900, Calendar.DECEMBER, 8), + }; + for (int i=0; i<DATA.length; i+=2) { + cal.clear(); + cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, + ((Number) DATA[i]).intValue()); + cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + cal.set(Calendar.MONTH, Calendar.JANUARY); + cal.set(Calendar.YEAR, 1997); + Date actual = cal.getTime(); + if (!actual.equals(DATA[i+1])) { + errln("FAIL: Sunday " + DATA[i] + + " of Jan 1997 -> " + actual + + ", want " + DATA[i+1]); + } + } + } + + public void Test4288792() throws Exception + { + TimeZone savedTZ = TimeZone.getDefault(); + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + GregorianCalendar cal = new GregorianCalendar(); + try { + for (int i = 1900; i < 2100; i++) { + for (int j1 = 1; j1 <= 7; j1++) { + // Loop for MinimalDaysInFirstWeek: 1..7 + for (int j = Calendar.SUNDAY; j <= Calendar.SATURDAY; j++) { + // Loop for FirstDayOfWeek: SUNDAY..SATURDAY + cal.clear(); + cal.setMinimalDaysInFirstWeek(j1); + cal.setFirstDayOfWeek(j); + cal.set(Calendar.YEAR, i); + int maxWeek = cal.getActualMaximum(Calendar.WEEK_OF_YEAR); + cal.set(Calendar.WEEK_OF_YEAR, maxWeek); + cal.set(Calendar.DAY_OF_WEEK, j); + + for (int k = 1; k < 7; k++) { + cal.add(Calendar.DATE, 1); + int WOY = cal.get(Calendar.WEEK_OF_YEAR); + if (WOY != maxWeek) { + errln(cal.getTime() + ",got=" + WOY + + ",expected=" + maxWeek + + ",min=" + j1 + ",first=" + j); + } + } + + cal.add(Calendar.DATE, 1); + int WOY = cal.get(Calendar.WEEK_OF_YEAR); + if (WOY != 1) { + errln(cal.getTime() + ",got=" + WOY + + ",expected=1,min=" + j1 + ",first" + j); + } + } + } + } + } + finally { + TimeZone.setDefault(savedTZ); + } + } + + public void Test4328747() throws Exception { + Calendar c = (Calendar)Calendar.getInstance(Locale.US); + c.clear(); + c.set(1966,0,1); // 1 jan 1966 + + // serialize + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ObjectOutputStream s = new ObjectOutputStream(out); + s.writeObject(c); + s.flush(); + + // deserialize + ObjectInputStream t = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray())); + Calendar result = (Calendar)t.readObject(); + + // let recalculate fields with the same UTC time + result.setTime(result.getTime()); + // Bug gives 1965 11 19 + if ((result.get(c.YEAR) != 1966) || (result.get(c.MONTH) != 0) + || (result.get(c.DATE) != 1)) { + errln("deserialized Calendar returned wrong date field(s): " + + result.get(c.YEAR) + "/" + result.get(c.MONTH) + "/" + result.get(c.DATE) + + ", expected 1966/0/1"); + } + } + + /** + * Test whether Calendar can be serialized/deserialized correctly + * even if invalid/customized TimeZone is used. + */ + public void Test4413980() { + TimeZone savedTimeZone = TimeZone.getDefault(); + try { + boolean pass = true; + String[] IDs = new String[] {"Undefined", "PST", "US/Pacific", + "GMT+3:00", "GMT-01:30"}; + for (int i = 0; i < IDs.length; i++) { + TimeZone tz = TimeZone.getTimeZone(IDs[i]); + TimeZone.setDefault(tz); + + Calendar c = (Calendar)Calendar.getInstance(); + + // serialize + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ObjectOutputStream s = new ObjectOutputStream(out); + s.writeObject(c); + s.flush(); + + // deserialize + ObjectInputStream t = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray())); + + if (!c.equals(t.readObject())) { + pass = false; + logln("Calendar instance which uses TimeZone <" + + IDs[i] + "> is incorrectly serialized/deserialized."); + } else { + logln("Calendar instance which uses TimeZone <" + + IDs[i] + "> is correctly serialized/deserialized."); + } + } + if (!pass) { + errln("Fail: Calendar serialization/equality bug"); + } + } + catch (IOException e) { + errln("Fail: " + e); + e.printStackTrace(); + } + catch (ClassNotFoundException e) { + errln("Fail: " + e); + e.printStackTrace(); + } + finally { + TimeZone.setDefault(savedTimeZone); + } + } + + /** + * 4546637: Incorrect WEEK_OF_MONTH after changing First Day Of Week + */ + public void Test4546637() { + GregorianCalendar day = new GregorianCalendar (2001, Calendar.NOVEMBER, 04); + day.setMinimalDaysInFirstWeek(1); + int wom = day.get(Calendar.WEEK_OF_MONTH); + + day.setFirstDayOfWeek(Calendar.MONDAY); + if (day.get(Calendar.WEEK_OF_MONTH) != 1) { + errln("Fail: 2001/11/4 must be the first week of the month."); + } + } + + /** + * 4623997: GregorianCalendar returns bad WEEK_OF_YEAR + */ + public void Test4623997() { + GregorianCalendar cal = new GregorianCalendar(2000, GregorianCalendar.JANUARY, 1); + + int dow = cal.get(GregorianCalendar.DAY_OF_WEEK); + + cal.setFirstDayOfWeek(GregorianCalendar.MONDAY); + cal.setMinimalDaysInFirstWeek(4); + + if (cal.get(GregorianCalendar.WEEK_OF_YEAR) != 52) { + errln("Fail: 2000/1/1 must be the 52nd week of the year."); + } + } + + /** + * 4685354: Handling of Calendar fields setting state is broken + * + * <p>Need to use SimpleDateFormat to test because a call to + * get(int) changes internal states of a Calendar. + */ + public void Test4685354() { + if (Locale.getDefault().equals(new Locale("hi", "IN"))) { + return; + } + + Calendar calendar = Calendar.getInstance(Locale.US); + DateFormat df = new SimpleDateFormat("yyyy/MM/dd", Locale.US); + String expected = "1999/12/31"; + Date t; + String s; + + try { + calendar.setTime(df.parse(expected)); + } catch (Exception e) { + throw new RuntimeException("Unexpected parse exception", e); + } + + t = calendar.getTime(); + calendar.set(Calendar.DAY_OF_MONTH, 33); + t = calendar.getTime(); + calendar.set(Calendar.DAY_OF_MONTH, 0); + s = df.format(calendar.getTime()); + if (!expected.equals(s)) { + errln("DAY_OF_MONTH w/o ZONE_OFFSET: expected: " + expected + ", got: " + s); + } + + // The same thing must work with ZONE_OFFSET set + try { + calendar.setTime(df.parse(expected)); + } catch (Exception e) { + throw new RuntimeException("Unexpected parse exception", e); + } + t = calendar.getTime(); + calendar.set(calendar.ZONE_OFFSET, calendar.get(calendar.ZONE_OFFSET)); + calendar.set(Calendar.DAY_OF_MONTH, 33); + t = calendar.getTime(); + calendar.set(Calendar.DAY_OF_MONTH, 0); + s = df.format(calendar.getTime()); + if (!expected.equals(s)) { + errln("DAY_OF_MONTH: expected: " + expected + ", got: " + s); + } + + expected = "1999/12/24"; // 0th week of 2000 + calendar.clear(); + Date initialDate = null; + try { + initialDate = df.parse(expected); + calendar.setTime(initialDate); + } catch (Exception e) { + throw new RuntimeException("Unexpected parse exception", e); + } + t = calendar.getTime(); + calendar.set(calendar.ZONE_OFFSET, calendar.get(calendar.ZONE_OFFSET)); + // jump to the next year + calendar.set(Calendar.WEEK_OF_YEAR, 100); + t = calendar.getTime(); + calendar.set(Calendar.WEEK_OF_YEAR, 0); + s = df.format(calendar.getTime()); + if (!expected.equals(s)) { + errln("WEEK_OF_YEAR: expected: " + expected + ", got: " + s); + } + // change the state back + calendar.clear(); + calendar.setTime(initialDate); + calendar.set(calendar.ZONE_OFFSET, calendar.get(calendar.ZONE_OFFSET)); + // jump to next month + calendar.set(Calendar.WEEK_OF_MONTH, 7); + t = calendar.getTime(); + calendar.set(Calendar.WEEK_OF_MONTH, 0); + s = df.format(calendar.getTime()); + if (!expected.equals(s)) { + errln("WEEK_OF_MONTH: expected: " + expected + ", got: " + s); + } + + // Make sure the time fields work correctly. + calendar.clear(); + df = new SimpleDateFormat("HH:mm:ss"); + TimeZone tz = TimeZone.getTimeZone("GMT"); + df.setTimeZone(tz); + calendar.setTimeZone(tz); + expected = "22:59:59"; + try { + calendar.setTime(df.parse(expected)); + } catch (Exception e) { + throw new RuntimeException("Unexpected parse exception", e); + } + t = calendar.getTime(); + // time should be 22:59:59. + calendar.set(Calendar.MINUTE, 61); + // time should be 23:01:59. + t = calendar.getTime(); + calendar.set(Calendar.MINUTE, -1); + // time should be back to 22:59:59. + s = df.format(calendar.getTime()); + if (!expected.equals(s)) { + errln("MINUTE: expected: " + expected + ", got: " + s); + } + } + + /** + * 4655637: Calendar.set() for DAY_OF_WEEK does not return the right value + * + * <p>Need to use SimpleDateFormat to test because a call to + * get(int) changes internal states of a Calendar. + */ + public void Test4655637() { + // Skip this test case if it's Thai locale + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date(1029814211523L)); + cal.set(Calendar.YEAR, 2001); + Date t = cal.getTime(); + cal.set(Calendar.MONTH, Calendar.JANUARY); + t = cal.getTime(); + + cal.set(Calendar.DAY_OF_MONTH, 8); + t = cal.getTime(); + + cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + DateFormat df = new SimpleDateFormat("yyyy/MM/dd", Locale.US); + String expected = "2001/01/08"; + String s = df.format(cal.getTime()); + if (!expected.equals(s)) { + errln("expected: " + expected + ", got: " + s); + } + } + + /** + * 4683492: Invalid value for MONTH in GregorianCalendar causes exception in getTime(). + * + * <p>Need to use SimpleDateFormat to test because a call to + * get(int) changes internal states of a Calendar. + * + * <p>This test case throws ArrayIndexOutOfBoundsException without the fix. + */ + public void Test4683492() { + Calendar cal = new GregorianCalendar(2002, 3, 29, 10, 0, 0); + cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); + cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, -1); + cal.set(Calendar.MONTH, 12); + DateFormat df = new SimpleDateFormat("yyyy/MM/dd", Locale.US); + String expected = "2003/01/31"; + String s = df.format(cal.getTime()); + if (!expected.equals(s)) { + errln("expected: " + expected + ", got: " + s); + } + } + + /** + * 4080631: Calendar.hashCode is amazingly bad + */ + public void Test4080631() { + Calendar cal = Calendar.getInstance(); + int h1 = cal.hashCode(); + cal.add(cal.SECOND, +1); + int h2 = cal.hashCode(); + Calendar cal2 = (Calendar) cal.clone(); + cal.add(cal.MILLISECOND, +1); + int h3 = cal.hashCode(); + logln("hash code: h1="+h1+", h2="+h2+", h3="+h3); + if (h1 == h2 || h1 == h3 || h2 == h3) { + errln("hash code is poor: hashCode="+h1); + } + h2 = cal2.hashCode(); + cal.add(cal.MILLISECOND, -1); + int h4 = cal.hashCode(); + logln("hash code: h2="+h2+", h4="+h4); + if (cal.equals(cal2) && h2 != h4) { + errln("broken hash code: h2="+h2+", h4="+h4); + } + int x = cal.getFirstDayOfWeek() + 3; + if (x > cal.SATURDAY) { + x -= 7; + } + cal.setFirstDayOfWeek(x); + int h5 = cal.hashCode(); + logln("hash code: h4="+h4+", h5="+h5); + if (h4 == h5) { + errln("has code is poor with first day of week param: hashCode="+h4); + } + } + + /** + * 4125161: RFE: GregorianCalendar needs more era names (BCE and CE) + */ + /* + public void Test4125161() throws Exception { + Class gc = GregorianCalendar.class; + Field f; + int mod; + f = gc.getDeclaredField("BCE"); + mod = f.getModifiers(); + if (!Modifier.isStatic(mod) || !Modifier.isFinal(mod)) { + errln("BCE: wrong modifiers: " + mod); + } + f = gc.getDeclaredField("CE"); + mod = f.getModifiers(); + if (!Modifier.isStatic(mod) || !Modifier.isFinal(mod)) { + errln("CE: wrong modifiers: " + mod); + } + if (GregorianCalendar.BCE != GregorianCalendar.BC + || GregorianCalendar.CE != GregorianCalendar.AD) { + errln("Wrong BCE and/or CE values"); + } + } + */ + + /** + * 4167995: GregorianCalendar.setGregorianChange() not to spec + */ + public void Test4167995() { + Koyomi gc = new Koyomi(TimeZone.getTimeZone("GMT")); + logln("Hybrid: min date"); + gc.setTime(new Date(Long.MIN_VALUE)); + if (!gc.checkDate(292269055, gc.DECEMBER, 2, gc.SUNDAY) + || !gc.checkFieldValue(gc.ERA, gc.BC)) { + errln(gc.getMessage()); + } + logln("Hybrid: max date"); + gc.setTime(new Date(Long.MAX_VALUE)); + if (!gc.checkDate(292278994, gc.AUGUST, 17, gc.SUNDAY) + || !gc.checkFieldValue(gc.ERA, gc.AD)) { + errln(gc.getMessage()); + } + + gc.setGregorianChange(new Date(Long.MIN_VALUE)); + logln("Gregorian: min date"); + gc.setTime(new Date(Long.MIN_VALUE)); + if (!gc.checkDate(292275056, gc.MAY, 16, gc.SUNDAY) + || !gc.checkFieldValue(gc.ERA, gc.BC)) { + errln(gc.getMessage()); + } + logln("Gregorian: max date"); + gc.setTime(new Date(Long.MAX_VALUE)); + if (!gc.checkDate(292278994, gc.AUGUST, 17, gc.SUNDAY) + || !gc.checkFieldValue(gc.ERA, gc.AD)) { + errln(gc.getMessage()); + } + + gc.setGregorianChange(new Date(Long.MAX_VALUE)); + logln("Julian: min date"); + gc.setTime(new Date(Long.MIN_VALUE)); + if (!gc.checkDate(292269055, gc.DECEMBER, 2, gc.SUNDAY) + || !gc.checkFieldValue(gc.ERA, gc.BC)) { + errln(gc.getMessage()); + } + logln("Julian: max date"); + gc.setTime(new Date(Long.MAX_VALUE)); + if (!gc.checkDate(292272993, gc.JANUARY, 4, gc.SUNDAY) + || !gc.checkFieldValue(gc.ERA, gc.AD)) { + errln(gc.getMessage()); + } + } + + /** + * 4340146: Calendar.equals modifies state + */ + public void Test4340146() { + Koyomi cal = new Koyomi(); + cal.clear(); + cal.set(2003, cal.OCTOBER, 32); + cal.equals(new Koyomi()); + if (!cal.checkInternalDate(2003, cal.OCTOBER, 32)) { + errln(cal.getMessage()); + } + new Koyomi().equals(cal); + if (!cal.checkInternalDate(2003, cal.OCTOBER, 32)) { + errln(cal.getMessage()); + } + } + + /** + * 4639407: GregorianCalendar doesn't work in non-lenient due to timezone bounds checking + */ + public void Test4639407() { + // The following operations in non-lenient mode shouldn't + // throw IllegalArgumentException. + Koyomi cal = new Koyomi(TimeZone.getTimeZone("Pacific/Kiritimati")); + cal.setLenient(false); + cal.set(2003, cal.OCTOBER, 10); + cal.getTime(); + cal.setTimeZone(TimeZone.getTimeZone("Pacific/Tongatapu")); + cal.set(2003, cal.OCTOBER, 10); + cal.getTime(); + } + + /** + * 4652815: rolling week-of-year back hundreds of weeks changes year + */ + public void Test4652815() { + Koyomi cal = new Koyomi(Locale.US); + testRoll(cal, 2003, cal.SEPTEMBER, 29); + testRoll(cal, 2003, cal.DECEMBER, 24); + testRoll(cal, 1582, cal.DECEMBER, 19); + testRoll(cal, 1582, cal.DECEMBER, 20); + } + + private void testRoll(Koyomi cal, int year, int month, int dayOfMonth) { + cal.clear(); + cal.set(year, month, dayOfMonth); + cal.getTime(); // normalize fields + logln("Roll backwards from " + cal.toDateString()); + for (int i = 0; i < 1000; i++) { + cal.roll(cal.WEEK_OF_YEAR, -i); + if (!cal.checkFieldValue(cal.YEAR, year)) { + errln(cal.getMessage()); + } + } + logln("Roll forewards from " + cal.toDateString()); + for (int i = 0; i < 1000; i++) { + cal.roll(cal.WEEK_OF_YEAR, +i); + if (!cal.checkFieldValue(cal.YEAR, year)) { + errln(cal.getMessage()); + } + } + } + + /** + * 4652830: GregorianCalendar roll behaves unexpectedly for dates in BC era + */ + public void Test4652830() { + Koyomi cal = new Koyomi(Locale.US); + cal.clear(); + logln("BCE 9-2-28 (leap year) roll DAY_OF_MONTH++ twice"); + cal.set(cal.ERA, cal.BC); + cal.set(9, cal.FEBRUARY, 28); + if (cal.getActualMaximum(cal.DAY_OF_YEAR) != 366) { + errln(" wrong actual max of DAY_OF_YEAR: got " + + cal.getActualMaximum(cal.DAY_OF_YEAR) + " expected " + 366); + } + cal.roll(cal.DAY_OF_MONTH, +1); + if (!cal.checkFieldValue(cal.ERA, cal.BC) + || !cal.checkDate(9, cal.FEBRUARY, 29)) { + errln(cal.getMessage()); + } + cal.roll(cal.DAY_OF_MONTH, +1); + if (!cal.checkFieldValue(cal.ERA, cal.BC) + || !cal.checkDate(9, cal.FEBRUARY, 1)) { + errln(cal.getMessage()); + } + } + + /** + * 4740554: GregorianCalendar.getActualMaximum is inconsistent with normalization + */ + public void Test4740554() { + logln("1999/(Feb+12)/1 should be normalized to 2000/Feb/1 for getActualMaximum"); + Koyomi cal = new Koyomi(Locale.US); + cal.clear(); + cal.set(1999, cal.FEBRUARY + 12, 1); + if (!cal.checkActualMaximum(cal.DAY_OF_YEAR, 366)) { + errln(cal.getMessage()); + } + if (!cal.checkActualMaximum(cal.DAY_OF_MONTH, 29)) { + errln(cal.getMessage()); + } + } + + /** + * 4936355: GregorianCalendar causes overflow/underflow with time of day calculation + */ + public void Test4936355() { + Koyomi cal = new Koyomi(TimeZone.getTimeZone("GMT")); + cal.clear(); + cal.set(1970, cal.JANUARY, 1); + checkTimeCalculation(cal, cal.HOUR_OF_DAY, Integer.MAX_VALUE, + (long)Integer.MAX_VALUE * 60 * 60 * 1000); + + cal.clear(); + cal.set(1970, cal.JANUARY, 1); + checkTimeCalculation(cal, cal.HOUR, Integer.MAX_VALUE, + (long)Integer.MAX_VALUE * 60 * 60 * 1000); + + cal.clear(); + cal.set(1970, cal.JANUARY, 1); + checkTimeCalculation(cal, cal.MINUTE, Integer.MAX_VALUE, + (long)Integer.MAX_VALUE * 60 * 1000); + + cal.clear(); + // Make sure to use Gregorian dates (before and after the + // set() call) for testing + cal.set(250000, cal.JANUARY, 1); + checkTimeCalculation(cal, cal.HOUR_OF_DAY, Integer.MIN_VALUE, + (long)Integer.MIN_VALUE * 60 * 60 * 1000); + + cal.clear(); + cal.set(250000, cal.JANUARY, 1); + checkTimeCalculation(cal, cal.HOUR, Integer.MIN_VALUE, + (long)Integer.MIN_VALUE * 60 * 60 * 1000); + + cal.clear(); + cal.set(250000, cal.JANUARY, 1); + checkTimeCalculation(cal, cal.MINUTE, Integer.MIN_VALUE, + (long)Integer.MIN_VALUE * 60 * 1000); + } + + private void checkTimeCalculation(Koyomi cal, int field, int value, long expectedDelta) { + long time = cal.getTimeInMillis(); + cal.set(field, value); + long time2 = cal.getTimeInMillis(); + if ((time + expectedDelta) != time2) { + String s = value == Integer.MAX_VALUE ? "Integer.MAX_VALUE" : "Integer.MIN_VALUE"; + errln("set(" + Koyomi.getFieldName(field) + ", " + s + ") failed." + " got " + time2 + + ", expected " + (time+expectedDelta)); + } + } + + /** + * 4722650: Calendar.equals can throw an exception in non-lenient + * (piggy-back tests for compareTo() which is new in 1.5) + */ + public void Test4722650() { + Calendar cal1 = new GregorianCalendar(); + cal1.clear(); + Calendar cal2 = new GregorianCalendar(); + cal2.clear(); + cal2.setLenient(false); + + cal1.set(2003, Calendar.OCTOBER, 31); + cal2.set(2003, Calendar.OCTOBER, 31); + try { + if (cal1.equals(cal2)) { + errln("lenient and non-lenient shouldn't be equal. (2003/10/31)"); + } + if (cal1.compareTo(cal2) != 0) { + errln("cal1 and cal2 should represent the same time. (2003/10/31)"); + } + } catch (IllegalArgumentException e) { + errln("equals threw IllegalArugumentException with non-lenient"); + } + + cal1.set(2003, Calendar.OCTOBER, 32); + cal2.set(2003, Calendar.OCTOBER, 32); + try { + if (cal1.equals(cal2)) { + errln("lenient and non-lenient shouldn't be equal. (2003/10/32)"); + } + if (cal1.compareTo(cal2) != 0) { + errln("cal1 and cal2 should represent the same time. (2003/10/32)"); + } + } catch (IllegalArgumentException e) { + errln("equals threw IllegalArugumentException with non-lenient"); + } + + cal1 = Calendar.getInstance(new Locale("th", "TH")); + cal1.setTimeInMillis(0L); + cal2 = Calendar.getInstance(Locale.US); + cal2.setTimeInMillis(0L); + if (cal1.equals(cal2)) { + errln("Buddhist.equals(Gregorian) shouldn't be true. (millis=0)"); + } + if (cal1.compareTo(cal2) != 0) { + errln("cal1 (Buddhist) and cal2 (Gregorian) should represent the same time. (millis=0)"); + } + } + + /** + * 4738710: API: Calendar comparison methods should be improved + */ + public void Test4738710() { + Calendar cal0 = new GregorianCalendar(2003, Calendar.SEPTEMBER, 30); + Comparable<Calendar> cal1 = new GregorianCalendar(2003, Calendar.OCTOBER, 1); + Calendar cal2 = new GregorianCalendar(2003, Calendar.OCTOBER, 2); + if (!(cal1.compareTo(cal0) > 0)) { + errln("!(cal1 > cal0)"); + } + if (!(cal1.compareTo(cal2) < 0)) { + errln("!(cal1 < cal2)"); + } + if (cal1.compareTo(new GregorianCalendar(2003, Calendar.OCTOBER, 1)) != 0) { + errln("cal1 != new GregorianCalendar(2003, Calendar.OCTOBER, 1)"); + } + + if (cal0.after(cal2)) { + errln("cal0 shouldn't be after cal2"); + } + if (cal2.before(cal0)) { + errln("cal2 shouldn't be before cal0"); + } + + if (cal0.after(new Integer(0))) { + errln("cal0.after() returned true with an Integer."); + } + if (cal0.before(new Integer(0))) { + errln("cal0.before() returned true with an Integer."); + } + if (cal0.after(null)) { + errln("cal0.after() returned true with null."); + } + if (cal0.before(null)) { + errln("cal0.before() returned true with null."); + } + } + + /** + * 4633646: Setting WEEK_OF_MONTH to 1 results in incorrect date + */ + public void Test4633646() { + Koyomi cal = new Koyomi(Locale.US); + cal.setTime(new Date(2002-1900, 1-1, 28)); + sub4633646(cal); + + cal.setLenient(false); + cal.setTime(new Date(2002-1900, 1-1, 28)); + sub4633646(cal); + + cal = new Koyomi(Locale.US); + cal.clear(); + cal.set(2002, cal.JANUARY, 28); + sub4633646(cal); + + cal.clear(); + cal.setLenient(false); + cal.set(2002, cal.JANUARY, 28); + sub4633646(cal); + } + + void sub4633646(Koyomi cal) { + cal.getTime(); + cal.set(cal.WEEK_OF_MONTH, 1); + if (cal.isLenient()) { + if (!cal.checkDate(2001, cal.DECEMBER, 31)) { + errln(cal.getMessage()); + } + if (!cal.checkFieldValue(cal.WEEK_OF_MONTH, 6)) { + errln(cal.getMessage()); + } + } else { + try { + Date d = cal.getTime(); + errln("didn't throw IllegalArgumentException in non-lenient"); + } catch (IllegalArgumentException e) { + } + } + } + + /** + * 4846659: Calendar: Both set() and roll() don't work for AM_PM time field + * (Partially fixed only roll as of 1.5) + */ + public void Test4846659() { + Koyomi cal = new Koyomi(); + cal.clear(); + cal.set(2003, cal.OCTOBER, 31, 10, 30, 30); + cal.getTime(); + // Test roll() + cal.roll(cal.AM_PM, +1); // should turn to PM + if (!cal.checkFieldValue(cal.HOUR_OF_DAY, 10+12)) { + errln("roll: AM_PM didn't change to PM"); + } + + cal.clear(); + cal.set(2003, cal.OCTOBER, 31, 10, 30, 30); + cal.getTime(); + // Test set() + cal.set(cal.AM_PM, cal.PM); // should turn to PM + if (!cal.checkFieldValue(cal.HOUR_OF_DAY, 10+12)) { + errln("set: AM_PM didn't change to PM"); + } + + cal.clear(); + cal.set(2003, cal.OCTOBER, 31, 10, 30, 30); + cal.getTime(); + cal.set(cal.AM_PM, cal.PM); + cal.set(cal.HOUR, 9); + if (!cal.checkFieldValue(cal.HOUR_OF_DAY, 9+12)) { + errln("set: both AM_PM and HOUT didn't change to PM"); + } + } + + /** + * 4822110: GregorianCalendar.get() returns an incorrect date after setFirstDayOfWeek() + */ + public void Test4822110() { + Koyomi cal = new Koyomi(Locale.US); + // June 2003 + // S M Tu W Th F S + // 1 2 3 4 5 6 7 + // 8 9 10 11 12 13 14 + // 15 16 17 18 19 20 21 + // 22 23 24 25 26 27 28 + // 29 30 + cal.clear(); + // 6/1 to 6/7 should be the 1st week of June. + cal.set(2003, cal.JUNE, 2); + cal.getTime(); // Let cal calculate time. + cal.setFirstDayOfWeek(cal.MONDAY); + // Now 6/2 to 6/8 should be the 2nd week of June. Sunday of + // that week is 6/8. + logln("1: " +cal.get(cal.WEEK_OF_MONTH)+", "+cal.get(cal.DAY_OF_MONTH)); + cal.set(cal.DAY_OF_WEEK, cal.SUNDAY); + logln("1st Sunday of June 2003 with FirstDayOfWeek=MONDAY"); + if (!cal.checkDate(2003, cal.JUNE, 8)) { + errln(cal.getMessage()); + } + } + + /** + * 4973919: Inconsistent GregorianCalendar hashCode before and after serialization + */ + public void Test4966499() throws Exception { + GregorianCalendar date1 = new GregorianCalendar(2004, Calendar.JANUARY, 7); + + // Serialize date1 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(date1); + + byte[] buffer = baos.toByteArray(); + + // Deserialize it + ByteArrayInputStream bais = new ByteArrayInputStream(buffer); + ObjectInputStream ois = new ObjectInputStream(bais); + GregorianCalendar date2 = (GregorianCalendar)ois.readObject(); + + if (!date1.equals(date2)) { + errln("date1.equals(date2) != true"); + } + if (date1.hashCode() != date2.hashCode()) { + errln("inconsistent hashCode() value (before=0x" + +Integer.toHexString(date1.hashCode())+ + ", after=0x"+Integer.toHexString(date2.hashCode())+")"); + } + } + + /** + * 4980088: GregorianCalendar.getActualMaximum doesn't throw exception + */ + public void Test4980088() { + GregorianCalendar cal = new GregorianCalendar(); + try { + int x = cal.getMaximum(100); + errln("getMaximum(100) didn't throw an exception."); + } catch (IndexOutOfBoundsException e) { + logln("getMaximum: " + e.getClass().getName() + ": " + e.getMessage()); + } + + try { + int x = cal.getLeastMaximum(100); + errln("getLeastMaximum(100) didn't throw an exception."); + } catch (IndexOutOfBoundsException e) { + logln("getLeastMaximum: " + e.getClass().getName() + ": " + e.getMessage()); + } + + try { + int x = cal.getActualMaximum(100); + errln("getActualMaximum(100) didn't throw an exception."); + } catch (IndexOutOfBoundsException e) { + logln("getActualMaximum: " + e.getClass().getName() + ": " + e.getMessage()); + } + + try { + int x = cal.getMinimum(100); + errln("getMinimum(100) didn't throw an exception."); + } catch (IndexOutOfBoundsException e) { + logln("getMinimum: " + e.getClass().getName() + ": " + e.getMessage()); + } + + try { + int x = cal.getGreatestMinimum(100); + errln("getGreatestMinimum(100) didn't throw an exception."); + } catch (IndexOutOfBoundsException e) { + logln("getGreatestMinimum: " + e.getClass().getName() + ": " + e.getMessage()); + } + + try { + int x = cal.getActualMinimum(100); + errln("getActualMinimum(100) didn't throw an exception."); + } catch (IndexOutOfBoundsException e) { + logln("getActualMinimum: " + e.getClass().getName() + ": " + e.getMessage()); + } + } + + /** + * 4965624: GregorianCalendar.isLeapYear(1000) returns incorrect value + */ + public void Test4965624() { + // 5013094: This test case needs to use "GMT" to specify + // Gregorian cutover dates. + TimeZone savedZone = TimeZone.getDefault(); + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + try { + Map<Date, Boolean> data = new HashMap<Date, Boolean>(); + data.put(getGregorianDate(999, Calendar.OCTOBER, 1), Boolean.FALSE); + data.put(getGregorianDate(1000, Calendar.JANUARY, 1), Boolean.FALSE); + data.put(getGregorianDate(1000, Calendar.FEBRUARY, 1), Boolean.FALSE); + data.put(getGregorianDate(1000, Calendar.FEBRUARY, 28), Boolean.FALSE); + data.put(getGregorianDate(1000, Calendar.MARCH, 1), Boolean.TRUE); + data.put(getGregorianDate(1001, Calendar.JANUARY, 1), Boolean.TRUE); + data.put(getGregorianDate(1001, Calendar.JANUARY, 6), Boolean.TRUE); + data.put(getGregorianDate(1001, Calendar.MARCH, 1), Boolean.TRUE); + + Iterator<Date> itr = data.keySet().iterator(); + while (itr.hasNext()) { + Date d = itr.next(); + boolean expected = data.get(d).booleanValue(); + GregorianCalendar cal = new GregorianCalendar(); + cal.setGregorianChange(d); + if (cal.isLeapYear(1000) != expected) { + errln("isLeapYear(1000) returned " + cal.isLeapYear(1000) + + " with cutover date (Julian) " + d); + } + } + } + finally { + TimeZone.setDefault(savedZone); + } + } + + // Note that we can't use Date to produce Gregorian calendar dates + // before the default cutover date. + static Date getGregorianDate(int year, int month, int dayOfMonth) { + GregorianCalendar g = new GregorianCalendar(); + // Make g a pure Gregorian calendar + g.setGregorianChange(new Date(Long.MIN_VALUE)); + g.clear(); + g.set(year, month, dayOfMonth); + return g.getTime(); + } + + /** + * 5006864: Define the minimum value of DAY_OF_WEEK_IN_MONTH as 1 + */ + public void Test5006864() { + GregorianCalendar cal = new GregorianCalendar(); + int min = cal.getMinimum(cal.DAY_OF_WEEK_IN_MONTH); + if (min != 1) { + errln("GregorianCalendar.getMinimum(DAY_OF_WEEK_IN_MONTH) returned " + + min + ", expected 1."); + } + min = cal.getGreatestMinimum(cal.DAY_OF_WEEK_IN_MONTH); + if (min != 1) { + errln("GregorianCalendar.getGreatestMinimum(DAY_OF_WEEK_IN_MONTH) returned " + + min + ", expected 1."); + } + } +} diff --git a/test/java/util/Calendar/CalendarTest.java b/test/java/util/Calendar/CalendarTest.java new file mode 100644 index 0000000000..d8320295a6 --- /dev/null +++ b/test/java/util/Calendar/CalendarTest.java @@ -0,0 +1,1102 @@ +/* + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 4064654 4374886 4984320 4984574 4944795 + * @library /java/text/testlib + * @summary test for Calendar + * @key randomness + */ + +import java.util.*; +import java.text.*; +import java.io.*; + +public class CalendarTest extends IntlTest { + static final int ONE_DAY = 24*60*60*1000; + static final int EPOCH_JULIAN = 2440588; + + public static void main(String argv[]) throws Exception { + new CalendarTest().run(argv); + } + + /** + * Test the behavior of the GregorianCalendar around the changeover. + */ + public void TestGregorianChangeover() { + TimeZone savedZone = TimeZone.getDefault(); + /* + Changeover -7 days: 1582/9/28 dow=6 + Changeover -6 days: 1582/9/29 dow=7 + Changeover -5 days: 1582/9/30 dow=1 + Changeover -4 days: 1582/10/1 dow=2 + Changeover -3 days: 1582/10/2 dow=3 + Changeover -2 days: 1582/10/3 dow=4 + Changeover -1 days: 1582/10/4 dow=5 + Changeover +0 days: 1582/10/15 dow=6 + Changeover +1 days: 1582/10/16 dow=7 + Changeover +2 days: 1582/10/17 dow=1 + Changeover +3 days: 1582/10/18 dow=2 + Changeover +4 days: 1582/10/19 dow=3 + Changeover +5 days: 1582/10/20 dow=4 + Changeover +6 days: 1582/10/21 dow=5 + Changeover +7 days: 1582/10/22 dow=6 + */ + int MON[] = { 9, 9, 9,10,10,10,10, 10, 10, 10, 10, 10, 10, 10, 10 }; + int DOM[] = { 28, 29, 30, 1, 2, 3, 4, 15, 16, 17, 18, 19, 20, 21, 22 }; + int DOW[] = { 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6 }; + // ^ <-Changeover Fri Oct 15 1582 + + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + Date co = new Date(1582-1900, Calendar.OCTOBER, 15); + GregorianCalendar cal = new GregorianCalendar(); + int j = 0; + for (int i = -7; i <= 7; ++i, ++j) { + Date d = new Date(co.getTime() + i*ONE_DAY); + cal.setTime(d); + int y = cal.get(Calendar.YEAR); + int mon = cal.get(Calendar.MONTH)+1-Calendar.JANUARY; + int dom = cal.get(Calendar.DATE); + int dow = cal.get(Calendar.DAY_OF_WEEK); + + logln("Changeover " + (i>=0?"+":"") + i + + " days: " + y + "/" + mon + "/" + dom + " dow=" + dow); + if (y != 1582 || mon != MON[j] || dom != DOM[j] || dow != DOW[j]) { + errln(" Fail: Above line is wrong"); + } + } + } + finally { + TimeZone.setDefault(savedZone); + } + } + + /** + * Test the mapping between millis and fields. For the purposes + * of this test, we don't care about timezones and week data + * (first day of week, minimal days in first week). + */ + public void TestMapping() { + TimeZone saveZone = TimeZone.getDefault(); + int[] DATA = { + // Julian# Year Month DOM JULIAN:Year, Month, DOM + 2440588, 1970, Calendar.JANUARY, 1, 1969, Calendar.DECEMBER, 19, + 2415080, 1900, Calendar.MARCH, 1, 1900, Calendar.FEBRUARY, 17, + 2451604, 2000, Calendar.FEBRUARY, 29, 2000, Calendar.FEBRUARY, 16, + 2452269, 2001, Calendar.DECEMBER, 25, 2001, Calendar.DECEMBER, 12, + 2416526, 1904, Calendar.FEBRUARY, 15, 1904, Calendar.FEBRUARY, 2, + 2416656, 1904, Calendar.JUNE, 24, 1904, Calendar.JUNE, 11, + 1721426, 1, Calendar.JANUARY, 1, 1, Calendar.JANUARY, 3, + 2000000, 763, Calendar.SEPTEMBER, 18, 763, Calendar.SEPTEMBER, 14, + 4000000, 6239, Calendar.JULY, 12, 6239, Calendar.MAY, 28, + 8000000, 17191, Calendar.FEBRUARY, 26, 17190, Calendar.OCTOBER, 22, + 10000000, 22666, Calendar.DECEMBER, 20, 22666, Calendar.JULY, 5, + }; + + try { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + Date PURE_GREGORIAN = new Date(Long.MIN_VALUE); + Date PURE_JULIAN = new Date(Long.MAX_VALUE); + GregorianCalendar cal = new GregorianCalendar(); + for (int i = 0; i < DATA.length; i += 7) { + int julian = DATA[i]; + int year = DATA[i+1]; + int month = DATA[i+2]; + int dom = DATA[i+3]; + int year2, month2, dom2; + long millis = ((long)julian - EPOCH_JULIAN) * ONE_DAY; + String s; + + // Test Gregorian computation + cal.setGregorianChange(PURE_GREGORIAN); + cal.clear(); + cal.set(year, month, dom); + long calMillis = cal.getTime().getTime(); + long delta = calMillis - millis; + cal.setTime(new Date(millis)); + year2 = cal.get(Calendar.YEAR); + month2 = cal.get(Calendar.MONTH); + dom2 = cal.get(Calendar.DAY_OF_MONTH); + s = "G " + year + "-" + (month+1-Calendar.JANUARY) + "-" + dom + + " => " + calMillis + + " (" + ((float)delta/ONE_DAY) + " day delta) => " + + year2 + "-" + (month2+1-Calendar.JANUARY) + "-" + dom2; + if (delta != 0 || year != year2 || month != month2 || + dom != dom2) { + errln(s + " FAIL"); + } else { + logln(s); + } + + // Test Julian computation + year = DATA[i+4]; + month = DATA[i+5]; + dom = DATA[i+6]; + cal.setGregorianChange(PURE_JULIAN); + cal.clear(); + cal.set(year, month, dom); + calMillis = cal.getTime().getTime(); + delta = calMillis - millis; + cal.setTime(new Date(millis)); + year2 = cal.get(Calendar.YEAR); + month2 = cal.get(Calendar.MONTH); + dom2 = cal.get(Calendar.DAY_OF_MONTH); + s = "J " + year + "-" + (month+1-Calendar.JANUARY) + "-" + dom + + " => " + calMillis + + " (" + ((float)delta/ONE_DAY) + " day delta) => " + + year2 + "-" + (month2+1-Calendar.JANUARY) + "-" + dom2; + if (delta != 0 || year != year2 || month != month2 || + dom != dom2) { + errln(s + " FAIL"); + } else { + logln(s); + } + } + + cal.setGregorianChange(new Date(1582-1900, Calendar.OCTOBER, 15)); + auxMapping(cal, 1582, Calendar.OCTOBER, 4); + auxMapping(cal, 1582, Calendar.OCTOBER, 15); + auxMapping(cal, 1582, Calendar.OCTOBER, 16); + for (int y = 800; y < 3000; y += 1+(int)100*Math.random()) { + for (int m = Calendar.JANUARY; m <= Calendar.DECEMBER; ++m) { + auxMapping(cal, y, m, 15); + } + } + } + finally { + TimeZone.setDefault(saveZone); + } + } + private void auxMapping(Calendar cal, int y, int m, int d) { + cal.clear(); + cal.set(y, m, d); + long millis = cal.getTime().getTime(); + cal.setTime(new Date(millis)); + int year2 = cal.get(Calendar.YEAR); + int month2 = cal.get(Calendar.MONTH); + int dom2 = cal.get(Calendar.DAY_OF_MONTH); + if (y != year2 || m != month2 || dom2 != d) + errln("Round-trip failure: " + y + "-" + (m+1) + "-"+d+" =>ms=> " + + year2 + "-" + (month2+1) + "-" + dom2); + } + + public void TestGenericAPI() { + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + String str; + + Date when = new Date(90, Calendar.APRIL, 15); + + String tzid = "TestZone"; + int tzoffset = 123400; + + SimpleTimeZone zone = new SimpleTimeZone(tzoffset, tzid); + Calendar cal = (Calendar)Calendar.getInstance((SimpleTimeZone)zone.clone()); + + if (!zone.equals(cal.getTimeZone())) errln("FAIL: Calendar.getTimeZone failed"); + + Calendar cal2 = Calendar.getInstance(cal.getTimeZone()); + + cal.setTime(when); + cal2.setTime(when); + + if (!(cal.equals(cal2))) errln("FAIL: Calendar.operator== failed"); + // if ((*cal != *cal2)) errln("FAIL: Calendar.operator!= failed"); + if (!cal.equals(cal2) || + cal.before(cal2) || + cal.after(cal2)) errln("FAIL: equals/before/after failed"); + + cal2.setTime(new Date(when.getTime() + 1000)); + if (cal.equals(cal2) || + cal2.before(cal) || + cal.after(cal2)) errln("FAIL: equals/before/after failed"); + + cal.roll(Calendar.SECOND, true); + if (!cal.equals(cal2) || + cal.before(cal2) || + cal.after(cal2)) errln("FAIL: equals/before/after failed"); + + // Roll back to January + cal.roll(Calendar.MONTH, (int)(1 + Calendar.DECEMBER - cal.get(Calendar.MONTH))); + if (cal.equals(cal2) || + cal2.before(cal) || + cal.after(cal2)) errln("FAIL: equals/before/after failed"); + + // C++ only + /* TimeZone z = cal.orphanTimeZone(); + if (z.getID(str) != tzid || + z.getRawOffset() != tzoffset) + errln("FAIL: orphanTimeZone failed"); + */ + + for (int i = 0; i < 2; ++i) { + boolean lenient = ( i > 0 ); + cal.setLenient(lenient); + if (lenient != cal.isLenient()) errln("FAIL: setLenient/isLenient failed"); + // Later: Check for lenient behavior + } + + int i; + for (i = Calendar.SUNDAY; i <= Calendar.SATURDAY; ++i) { + cal.setFirstDayOfWeek(i); + if (cal.getFirstDayOfWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); + } + + for (i = 0; i <= 7; ++i) { + cal.setMinimalDaysInFirstWeek(i); + if (cal.getMinimalDaysInFirstWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); + } + + for (i = 0; i < Calendar.FIELD_COUNT; ++i) { + if (cal.getMinimum(i) != cal.getGreatestMinimum(i)) + errln("FAIL: getMinimum doesn't match getGreatestMinimum for field " + i); + if (cal.getLeastMaximum(i) > cal.getMaximum(i)) + errln("FAIL: getLeastMaximum larger than getMaximum for field " + i); + if (cal.getMinimum(i) >= cal.getMaximum(i)) + errln("FAIL: getMinimum not less than getMaximum for field " + i); + } + + cal.setTimeZone(TimeZone.getDefault()); + cal.clear(); + cal.set(1984, 5, 24); + if (cal.getTime().getTime() != new Date(84, 5, 24).getTime()) { + errln("FAIL: Calendar.set(3 args) failed"); + logln(" Got: " + cal.getTime() + " Expected: " + new Date(84, 5, 24)); + } + + cal.clear(); + cal.set(1985, 3, 2, 11, 49); + if (cal.getTime().getTime() != new Date(85, 3, 2, 11, 49).getTime()) { + errln("FAIL: Calendar.set(5 args) failed"); + logln(" Got: " + cal.getTime() + " Expected: " + new Date(85, 3, 2, 11, 49)); + } + + cal.clear(); + cal.set(1995, 9, 12, 1, 39, 55); + if (cal.getTime().getTime() != new Date(95, 9, 12, 1, 39, 55).getTime()) { + errln("FAIL: Calendar.set(6 args) failed"); + logln(" Got: " + cal.getTime() + " Expected: " + new Date(95, 9, 12, 1, 39, 55)); + } + + cal.getTime(); + for (i = 0; i < Calendar.FIELD_COUNT; ++i) { + switch(i) { + case Calendar.YEAR: case Calendar.MONTH: case Calendar.DATE: + case Calendar.HOUR_OF_DAY: case Calendar.MINUTE: case Calendar.SECOND: + if (!cal.isSet(i)) + errln("FAIL: !Calendar.isSet test failed: " + calendarFieldNames[i]); + break; + default: + if (cal.isSet(i)) + errln("FAIL: Calendar.isSet test failed: " + calendarFieldNames[i]); + } + cal.clear(i); + if (cal.isSet(i)) errln("FAIL: Calendar.clear/isSet failed"); + } + + // delete cal; + // delete cal2; + + Locale[] loc = Calendar.getAvailableLocales(); + long count = loc.length; + if (count < 1 || loc == null) { + errln("FAIL: getAvailableLocales failed"); + } + else { + for (i = 0; i < count; ++i) { + cal = Calendar.getInstance(loc[i]); + // delete cal; + } + } + + cal = Calendar.getInstance(TimeZone.getDefault(), Locale.ENGLISH); + // delete cal; + + cal = Calendar.getInstance(zone, Locale.ENGLISH); + // delete cal; + + GregorianCalendar gc = new GregorianCalendar(zone); + // delete gc; + + gc = new GregorianCalendar(Locale.ENGLISH); + // delete gc; + + gc = new GregorianCalendar(Locale.ENGLISH); + // delete gc; + + gc = new GregorianCalendar(zone, Locale.ENGLISH); + // delete gc; + + gc = new GregorianCalendar(zone); + // delete gc; + + gc = new GregorianCalendar(1998, 10, 14, 21, 43); + if (gc.getTime().getTime() != new Date(98, 10, 14, 21, 43).getTime()) + errln("FAIL: new GregorianCalendar(ymdhm) failed"); + // delete gc; + + gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55); + if (gc.getTime().getTime() != new Date(98, 10, 14, 21, 43, 55).getTime()) + errln("FAIL: new GregorianCalendar(ymdhms) failed"); + + // C++ only: + // GregorianCalendar gc2 = new GregorianCalendar(Locale.ENGLISH); + // gc2 = gc; + // if (gc2 != gc || !(gc2 == gc)) errln("FAIL: GregorianCalendar assignment/operator==/operator!= failed"); + // delete gc; + // delete z; + } + + // Verify Roger Webster's bug + public void TestRog() { + GregorianCalendar gc = new GregorianCalendar(); + + int year = 1997, month = Calendar.APRIL, date = 1; + gc.set(year, month, date); // April 1, 1997 + + gc.set(Calendar.HOUR_OF_DAY, 23); + gc.set(Calendar.MINUTE, 0); + gc.set(Calendar.SECOND, 0); + gc.set(Calendar.MILLISECOND, 0); + + for (int i = 0; i < 9; i++, gc.add(Calendar.DATE, 1)) { + if (gc.get(Calendar.YEAR) != year || + gc.get(Calendar.MONTH) != month || + gc.get(Calendar.DATE) != (date + i)) + errln("FAIL: Date " + gc.getTime() + " wrong"); + } + } + + // Verify DAY_OF_WEEK + public void TestDOW943() { + dowTest(false); + dowTest(true); + } + + void dowTest(boolean lenient) { + GregorianCalendar cal = new GregorianCalendar(); + cal.set(1997, Calendar.AUGUST, 12); // Wednesday + cal.getTime(); // Force update + cal.setLenient(lenient); + cal.set(1996, Calendar.DECEMBER, 1); // Set the date to be December 1, 1996 + int dow = cal.get(Calendar.DAY_OF_WEEK); + int min = cal.getMinimum(Calendar.DAY_OF_WEEK); + int max = cal.getMaximum(Calendar.DAY_OF_WEEK); + if (dow < min || dow > max) errln("FAIL: Day of week " + dow + " out of range"); + if (dow != Calendar.SUNDAY) { + errln("FAIL2: Day of week should be SUNDAY; is " + dow + ": " + cal.getTime()); + } + if (min != Calendar.SUNDAY || max != Calendar.SATURDAY) errln("FAIL: Min/max bad"); + } + + // Verify that the clone method produces distinct objects with no + // unintentionally shared fields. + public void TestClonesUnique908() { + Calendar c = Calendar.getInstance(); + Calendar d = (Calendar)c.clone(); + c.set(Calendar.MILLISECOND, 123); + d.set(Calendar.MILLISECOND, 456); + if (c.get(Calendar.MILLISECOND) != 123 || + d.get(Calendar.MILLISECOND) != 456) { + errln("FAIL: Clones share fields"); + } + } + + // Verify effect of Gregorian cutoff value + public void TestGregorianChange768() { + boolean b; + GregorianCalendar c = new GregorianCalendar(); + logln("With cutoff " + c.getGregorianChange()); + logln(" isLeapYear(1800) = " + (b=c.isLeapYear(1800))); + logln(" (should be FALSE)"); + if (b != false) errln("FAIL"); + c.setGregorianChange(new Date(0, 0, 1)); // Jan 1 1900 + logln("With cutoff " + c.getGregorianChange()); + logln(" isLeapYear(1800) = " + (b=c.isLeapYear(1800))); + logln(" (should be TRUE)"); + if (b != true) errln("FAIL"); + } + + // Test the correct behavior of the disambiguation algorithm. + public void TestDisambiguation765() throws Exception { + Locale savedLocale = Locale.getDefault(); + try { + Locale.setDefault(Locale.US); + Calendar c = Calendar.getInstance(); + c.setLenient(false); + + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.MONTH, Calendar.JUNE); + c.set(Calendar.DATE, 3); + + verify765("1997 third day of June = ", c, 1997, Calendar.JUNE, 3); + + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.MONTH, Calendar.JUNE); + c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1); + verify765("1997 first Tuesday in June = ", c, 1997, Calendar.JUNE, 3); + + c.setLenient(true); // for 4944795 + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.MONTH, Calendar.JUNE); + c.set(Calendar.DAY_OF_WEEK_IN_MONTH, -1); + verify765("1997 last Tuesday in June = ", c, 1997, Calendar.JUNE, 24); + + c.setLenient(false); + IllegalArgumentException e = null; + try { + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.MONTH, Calendar.JUNE); + c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 0); + c.getTime(); + } + catch (IllegalArgumentException ex) { + e = ex; + } + verify765("1997 zero-th Tuesday in June = ", e); + + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.MONTH, Calendar.JUNE); + c.set(Calendar.WEEK_OF_MONTH, 1); + verify765("1997 Tuesday in week 1 of June = ", c, 1997, Calendar.JUNE, 3); + + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.MONTH, Calendar.JUNE); + c.set(Calendar.WEEK_OF_MONTH, 4); + verify765("1997 Tuesday in week 4 of June = ", c, 1997, Calendar.JUNE, 24); + + try { + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.MONTH, Calendar.JUNE); + c.set(Calendar.WEEK_OF_MONTH, 1); + verify765("1997 Tuesday in week 0 of June = ", c, 1997, Calendar.JUNE, 3); + } + catch (IllegalArgumentException ex) { + errln("FAIL: Exception seen: " + ex.getMessage()); + // ex.printStackTrace(log); + } + + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.WEEK_OF_YEAR, 2); + verify765("1997 Tuesday in week 2 of year = ", c, 1997, Calendar.JANUARY, 7); + + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.WEEK_OF_YEAR, 10); + verify765("1997 Tuesday in week 10 of year = ", c, 1997, Calendar.MARCH, 4); + + try { + c.clear(); + c.set(Calendar.YEAR, 1997); + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + c.set(Calendar.WEEK_OF_YEAR, 0); + verify765("1997 Tuesday in week 0 of year = ", c, 1996, Calendar.DECEMBER, 24); + throw new Exception("Fail: WEEK_OF_YEAR 0 should be illegal"); + } + catch (IllegalArgumentException ex) {} + } + finally { + Locale.setDefault(savedLocale); + } + } + void verify765(String msg, Calendar c, int year, int month, int day) { + if (c.get(Calendar.YEAR) == year && + c.get(Calendar.MONTH) == month && + c.get(Calendar.DATE) == day) { + logln("PASS: " + msg + c.getTime()); + } + else { + errln("FAIL: " + msg + c.getTime() + + "; expected " + + year + "/" + (month+1) + "/" + day); + } + } + // Called when e expected to be non-null + void verify765(String msg, IllegalArgumentException e) { + if (e == null) errln("FAIL: No IllegalArgumentException for " + msg); + else logln("PASS: " + msg + "IllegalArgument as expected"); + } + + // Test the behavior of GMT vs. local time + public void TestGMTvsLocal4064654() { + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + // Sample output 1: + // % /usr/local/java/jdk1.1.3/solaris/bin/java test 1997 1 1 12 0 0 + // date = Wed Jan 01 04:00:00 PST 1997 + // offset for Wed Jan 01 04:00:00 PST 1997= -8hr + test4064654(1997, 1, 1, 12, 0, 0); + + // Sample output 2: + // % /usr/local/java/jdk1.1.3/solaris/bin/java test 1997 4 16 18 30 0 + // date = Wed Apr 16 10:30:00 PDT 1997 + // offset for Wed Apr 16 10:30:00 PDT 1997= -7hr + + // Note that in sample output 2 according to the offset, the gmt time + // of the result would be 1997 4 16 17 30 0 which is different from the + // input of 1997 4 16 18 30 0. + test4064654(1997, 4, 16, 18, 30, 0); + } + void test4064654(int yr, int mo, int dt, int hr, int mn, int sc) { + Date date; + Calendar gmtcal = Calendar.getInstance(); + gmtcal.setTimeZone(TimeZone.getTimeZone("Africa/Casablanca")); + gmtcal.set(yr, mo-1, dt, hr, mn, sc); + gmtcal.set(Calendar.MILLISECOND, 0); + + date = gmtcal.getTime(); + logln("date = "+date); + + Calendar cal = Calendar.getInstance(); + cal.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); + cal.setTime(date); + + int offset = cal.getTimeZone().getOffset(cal.get(Calendar.ERA), + cal.get(Calendar.YEAR), + cal.get(Calendar.MONTH), + cal.get(Calendar.DATE), + cal.get(Calendar.DAY_OF_WEEK), + cal.get(Calendar.MILLISECOND)); + + logln("offset for "+date+"= "+(offset/1000/60/60.0) + "hr"); + + int utc = ((cal.get(Calendar.HOUR_OF_DAY) * 60 + + cal.get(Calendar.MINUTE)) * 60 + + cal.get(Calendar.SECOND)) * 1000 + + cal.get(Calendar.MILLISECOND) - offset; + + int expected = ((hr * 60 + mn) * 60 + sc) * 1000; + + if (utc != expected) + errln("FAIL: Discrepancy of " + + (utc - expected) + " millis = " + + ((utc-expected)/1000/60/60.0) + " hr"); + } + + // Verify that add and set work regardless of the order in which + // they are called. + public void TestAddSetOrder621() { + Date d = new Date(97, 4, 14, 13, 23, 45); + + Calendar cal = Calendar.getInstance (); + cal.setTime (d); + cal.add (Calendar.DATE, -5); + cal.set (Calendar.HOUR_OF_DAY, 0); + cal.set (Calendar.MINUTE, 0); + cal.set (Calendar.SECOND, 0); + // ma feb 03 00:00:00 GMT+00:00 1997 + String s = cal.getTime ().toString (); + + cal = Calendar.getInstance (); + cal.setTime (d); + cal.set (Calendar.HOUR_OF_DAY, 0); + cal.set (Calendar.MINUTE, 0); + cal.set (Calendar.SECOND, 0); + cal.add (Calendar.DATE, -5); + // ma feb 03 13:11:06 GMT+00:00 1997 + String s2 = cal.getTime ().toString (); + + if (s.equals(s2)) + logln("Pass: " + s + " == " + s2); + else + errln("FAIL: " + s + " != " + s2); + } + + // Verify that add works. + public void TestAdd520() { + int y = 1997, m = Calendar.FEBRUARY, d = 1; + GregorianCalendar temp = new GregorianCalendar( y, m, d ); + check520(temp, y, m, d); + + temp.add( temp.YEAR, 1 ); + y++; + check520(temp, y, m, d); + + temp.add( temp.MONTH, 1 ); + m++; + check520(temp, y, m, d); + + temp.add( temp.DATE, 1 ); + d++; + check520(temp, y, m, d); + + temp.add( temp.DATE, 2 ); + d += 2; + check520(temp, y, m, d); + + temp.add( temp.DATE, 28 ); + d = 1; ++m; + check520(temp, y, m, d); + } + void check520(Calendar c, int y, int m, int d) { + if (c.get(Calendar.YEAR) != y || + c.get(Calendar.MONTH) != m || + c.get(Calendar.DATE) != d) { + errln("FAILURE: Expected YEAR/MONTH/DATE of " + + y + "/" + (m+1) + "/" + d + + "; got " + + c.get(Calendar.YEAR) + "/" + + (c.get(Calendar.MONTH)+1) + "/" + + c.get(Calendar.DATE)); + } + else logln("Confirmed: " + + y + "/" + (m+1) + "/" + d); + } + + // Verify that setting fields works. This test fails when an exception is thrown. + public void TestFieldSet4781() { + try { + GregorianCalendar g = new GregorianCalendar(); + GregorianCalendar g2 = new GregorianCalendar(); + // At this point UTC value is set, various fields are not. + // Now set to noon. + g2.set(Calendar.HOUR, 12); + g2.set(Calendar.MINUTE, 0); + g2.set(Calendar.SECOND, 0); + // At this point the object thinks UTC is NOT set, but fields are set. + // The following line will result in IllegalArgumentException because + // it thinks the YEAR is set and it is NOT. + if (g2.equals(g)) + logln("Same"); + else + logln("Different"); + } + catch (IllegalArgumentException e) { + errln("Unexpected exception seen: " + e); + } + } + + // Test serialization of a Calendar object + public void TestSerialize337() { + Calendar cal = Calendar.getInstance(); + + boolean ok = false; + + try { + FileOutputStream f = new FileOutputStream(FILENAME); + ObjectOutput s = new ObjectOutputStream(f); + s.writeObject(PREFIX); + s.writeObject(cal); + s.writeObject(POSTFIX); + f.close(); + + FileInputStream in = new FileInputStream(FILENAME); + ObjectInputStream t = new ObjectInputStream(in); + String pre = (String)t.readObject(); + Calendar c = (Calendar)t.readObject(); + String post = (String)t.readObject(); + in.close(); + + ok = pre.equals(PREFIX) && + post.equals(POSTFIX) && + cal.equals(c); + + File fl = new File(FILENAME); + fl.delete(); + } + catch (IOException e) { + errln("FAIL: Exception received:"); + // e.printStackTrace(log); + } + catch (ClassNotFoundException e) { + errln("FAIL: Exception received:"); + // e.printStackTrace(log); + } + + if (!ok) errln("Serialization of Calendar object failed."); + } + static final String PREFIX = "abc"; + static final String POSTFIX = "def"; + static final String FILENAME = "tmp337.bin"; + + // Try to zero out the seconds field + public void TestSecondsZero121() { + Calendar cal = new GregorianCalendar(); + // Initialize with current date/time + cal.setTime(new Date()); + // Round down to minute + cal.set(Calendar.SECOND, 0); + Date d = cal.getTime(); + String s = d.toString(); + if (s.indexOf(":00 ") < 0) errln("Expected to see :00 in " + s); + } + + // Try various sequences of add, set, and get method calls. + public void TestAddSetGet0610() { + // + // Error case 1: + // - Upon initialization calendar fields, millis = System.currentTime + // - After set is called fields are initialized, time is not + // - Addition uses millis which are still *now* + // + { + Calendar calendar = new GregorianCalendar( ) ; + calendar.set( 1993, Calendar.JANUARY, 4 ) ; + logln( "1A) " + value( calendar ) ) ; + calendar.add( Calendar.DATE, 1 ) ; + String v = value(calendar); + logln( "1B) " + v ); + logln( "--) 1993/0/5" ) ; + if (!v.equals(EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + + "; saw " + v); + } + + // + // Error case 2: + // - Upon initialization calendar fields set, millis = 0 + // - Addition uses millis which are still 1970, 0, 1 + // + + { + Calendar calendar = new GregorianCalendar( 1993, Calendar.JANUARY, 4 ) ; + logln( "2A) " + value( calendar ) ) ; + calendar.add( Calendar.DATE, 1 ) ; + String v = value(calendar); + logln( "2B) " + v ); + logln( "--) 1993/0/5" ) ; + if (!v.equals(EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + + "; saw " + v); + } + + // + // Error case 3: + // - Upon initialization calendar fields, millis = 0 + // - getTime( ) is called which forces the millis to be set + // - Addition uses millis which are correct + // + + { + Calendar calendar = new GregorianCalendar( 1993, Calendar.JANUARY, 4 ) ; + logln( "3A) " + value( calendar ) ) ; + calendar.getTime( ) ; + calendar.add( Calendar.DATE, 1 ) ; + String v = value(calendar); + logln( "3B) " + v ) ; + logln( "--) 1993/0/5" ) ; + if (!v.equals(EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + + "; saw " + v); + } + } + static String value( Calendar calendar ) { + return( calendar.get( Calendar.YEAR ) + "/" + + calendar.get( Calendar.MONTH ) + "/" + + calendar.get( Calendar.DATE ) ) ; + } + static String EXPECTED_0610 = "1993/0/5"; + + // Test that certain fields on a certain date are as expected. + public void TestFields060() { + int year = 1997; + int month = java.util.Calendar.OCTOBER; //october + int dDate = 22; //DAYOFWEEK should return 3 for Wednesday + GregorianCalendar calendar = null; + + calendar = new GregorianCalendar( year, month, dDate); + for (int i = 0; i < EXPECTED_FIELDS.length; ) { + int field = EXPECTED_FIELDS[i++]; + int expected = EXPECTED_FIELDS[i++]; + if (calendar.get(field) != expected) { + errln("Expected field " + field + " to have value " + expected + + "; received " + calendar.get(field) + " instead"); + } + } + } + static int EXPECTED_FIELDS[] = { + Calendar.YEAR, 1997, + Calendar.MONTH, Calendar.OCTOBER, + Calendar.DAY_OF_MONTH, 22, + Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY, + Calendar.DAY_OF_WEEK_IN_MONTH, 4, + Calendar.DAY_OF_YEAR, 295 + }; + + static final String[] calendarFieldNames = { + /* 0 */ "ERA", + /* 1 */ "YEAR", + /* 2 */ "MONTH", + /* 3 */ "WEEK_OF_YEAR", + /* 4 */ "WEEK_OF_MONTH", + /* 5 */ "DAY_OF_MONTH", + /* 6 */ "DAY_OF_YEAR", + /* 7 */ "DAY_OF_WEEK", + /* 8 */ "DAY_OF_WEEK_IN_MONTH", + /* 9 */ "AM_PM", + /* 10 */ "HOUR", + /* 11 */ "HOUR_OF_DAY", + /* 12 */ "MINUTE", + /* 13 */ "SECOND", + /* 14 */ "MILLISECOND", + /* 15 */ "ZONE_OFFSET", + /* 16 */ "DST_OFFSET" + }; + + // Verify that the fields are as expected (mostly zero) at the epoch start. + // Note that we adjust for the default timezone to get most things to zero. + public void TestEpochStartFields() { + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + String[][] lt = { + {"en", "US", "US/Pacific"}, /* First day = 1, Minimum day = 1 */ + {"en", "US", "America/Anchorage"}, /* First day = 1, Minimum day = 1 */ + {"en", "TO", "Pacific/Tongatapu"}, /* First day = 1, Minimum day = 1 */ + {"en", "MH", "Pacific/Majuro"}, /* First day = 1, Minimum day = 1 */ + {"ja", "JP", "Asia/Tokyo"}, /* First day = 1, Minimum day = 1 */ + {"iw", "IL", "Asia/Jerusalem"}, /* First day = 1, Minimum day = 1 */ + {"hi", "IN", "Asia/Jakarta"}, /* First day = 1, Minimum day = 1 */ + {"en", "GB", "Europe/London"}, /* First day = 2, Minimum day = 1 */ + {"en", "GB", "GMT"}, /* First day = 2, Minimum day = 1 */ + {"de", "DE", "Europe/Berlin"}, /* First day = 2, Minimum day = 4 */ + {"ar", "EG", "Africa/Cairo"}, /* First day = 7, Minimum day = 1 */ + }; + + int[][] goldenData = { + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, -28800000, 0}, + {1, 1969, 11, 1, 5, 31, 365, 4, 5, 1, 11, 23, 0, 0, 0, -36000000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 46800000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 43200000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 32400000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 7200000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 25200000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 1, 1, 0, 0, 0, 3600000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 3600000, 0}, + {1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, 7200000, 0}, + }; + + Locale savedLocale = Locale.getDefault(); + TimeZone savedTimeZone = TimeZone.getDefault(); + + try { + for (int j = 0; j < lt.length; j++) { + Locale l = new Locale(lt[j][0], lt[j][1]); + TimeZone z = TimeZone.getTimeZone(lt[j][2]); + Locale.setDefault(l); + TimeZone.setDefault(z); + Calendar c = Calendar.getInstance(); + Date d = new Date(-z.getRawOffset()); + + int val; + int[] EPOCH_FIELDS = goldenData[j]; + c.setTime(d); + + boolean err = false; + for (int i = 0; i < calendarFieldNames.length; ++i) { + if ((val = c.get(i)) != EPOCH_FIELDS[i]) { + errln("Wrong value: " + val + + " for field(" + calendarFieldNames[i] + + "), expected: " + EPOCH_FIELDS[i]); + err = true; + } + } + if (err) { + errln("Failed: \n\tDate=" + d + "\n\tTimeZone=" + z + + "\n\tLocale=" + l + "\n\tCalendar=" + c); + } + } + } + finally { + Locale.setDefault(savedLocale); + TimeZone.setDefault(savedTimeZone); + } + } + + // Verify that as you add days to the calendar (e.g., 24 day periods), + // the day of the week shifts in the expected pattern. + public void TestDOWProgression() { + Calendar cal = + new GregorianCalendar(1972, Calendar.OCTOBER, 26); + marchByDelta(cal, 24); // Last parameter must be != 0 modulo 7 + } + + // Supply a delta which is not a multiple of 7. + void marchByDelta(Calendar cal, int delta) { + Calendar cur = (Calendar)cal.clone(); + int initialDOW = cur.get(Calendar.DAY_OF_WEEK); + int DOW, newDOW = initialDOW; + do { + DOW = newDOW; + logln("DOW = " + DOW + " " + cur.getTime()); + + cur.add(Calendar.DAY_OF_WEEK, delta); + newDOW = cur.get(Calendar.DAY_OF_WEEK); + int expectedDOW = 1 + (DOW + delta - 1) % 7; + if (newDOW != expectedDOW) { + errln("Day of week should be " + expectedDOW + + " instead of " + newDOW + " on " + cur.getTime()); + return; + } + } + while (newDOW != initialDOW); + } + + public void TestActualMinMax() { + Calendar cal = new GregorianCalendar(1967, Calendar.MARCH, 10); + cal.setFirstDayOfWeek(Calendar.SUNDAY); + cal.setMinimalDaysInFirstWeek(3); + + if (cal.getActualMinimum(Calendar.DAY_OF_MONTH) != 1) + errln("Actual minimum date for 3/10/1967 should have been 1; got " + + cal.getActualMinimum(Calendar.DAY_OF_MONTH)); + if (cal.getActualMaximum(Calendar.DAY_OF_MONTH) != 31) + errln("Actual maximum date for 3/10/1967 should have been 31; got " + + cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + + cal.set(Calendar.MONTH, Calendar.FEBRUARY); + if (cal.getActualMaximum(Calendar.DAY_OF_MONTH) != 28) + errln("Actual maximum date for 2/10/1967 should have been 28; got " + + cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + if (cal.getActualMaximum(Calendar.DAY_OF_YEAR) != 365) + errln("Number of days in 1967 should have been 365; got " + + cal.getActualMaximum(Calendar.DAY_OF_YEAR)); + + cal.set(Calendar.YEAR, 1968); + if (cal.getActualMaximum(Calendar.DAY_OF_MONTH) != 29) + errln("Actual maximum date for 2/10/1968 should have been 29; got " + + cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + if (cal.getActualMaximum(Calendar.DAY_OF_YEAR) != 366) + errln("Number of days in 1968 should have been 366; got " + + cal.getActualMaximum(Calendar.DAY_OF_YEAR)); + // Using week settings of SUNDAY/3 (see above) + if (cal.getActualMaximum(Calendar.WEEK_OF_YEAR) != 52) + errln("Number of weeks in 1968 should have been 52; got " + + cal.getActualMaximum(Calendar.WEEK_OF_YEAR)); + + cal.set(Calendar.YEAR, 1976); + // Using week settings of SUNDAY/3 (see above) + if (cal.getActualMaximum(Calendar.WEEK_OF_YEAR) != 53) + errln("Number of weeks in 1976 should have been 53; got " + + cal.getActualMaximum(Calendar.WEEK_OF_YEAR)); + } + + public void TestRoll() { + Calendar cal = new GregorianCalendar(1997, Calendar.JANUARY, 31); + + int[] dayValues = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 }; + + for (int i = 0; i < dayValues.length; i++) { + Calendar cal2 = (Calendar)cal.clone(); + cal2.roll(Calendar.MONTH, i); + if (cal2.get(Calendar.DAY_OF_MONTH) != dayValues[i]) + errln("Rolling the month in 1/31/1997 up by " + i + " should have yielded " + + ((i + 1) % 12) + "/" + dayValues[i] + "/1997, but actually yielded " + + ((i + 1) % 12) + "/" + cal2.get(Calendar.DAY_OF_MONTH) + "/1997."); + } + + cal.set(1996, Calendar.FEBRUARY, 29); + + int[] monthValues = { 1, 2, 2, 2, 1, 2, 2, 2, 1, 2 }; + int[] dayValues2 = { 29, 1, 1, 1, 29, 1, 1, 1, 29, 1 }; + + for (int i = 0; i < dayValues2.length; i++) { + Calendar cal2 = (Calendar)cal.clone(); + cal2.roll(Calendar.YEAR, i); + if (cal2.get(Calendar.DAY_OF_MONTH) != dayValues2[i] || cal2.get(Calendar.MONTH) + != monthValues[i]) + errln("Rolling the year in 2/29/1996 up by " + i + " should have yielded " + + (monthValues[i] + 1) + "/" + dayValues2[i] + "/" + + (1996 + i) + ", but actually yielded " + + (cal2.get(Calendar.MONTH) + 1) + "/" + + cal2.get(Calendar.DAY_OF_MONTH) + "/" + (1996 + i) + "."); + } + + // Test rolling hour of day + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.roll(Calendar.HOUR_OF_DAY, -2); + int f = cal.get(Calendar.HOUR_OF_DAY); + if (f != 22) errln("Rolling HOUR_OF_DAY=0 delta=-2 gave " + f + " Wanted 22"); + cal.roll(Calendar.HOUR_OF_DAY, 5); + f = cal.get(Calendar.HOUR_OF_DAY); + if (f != 3) errln("Rolling HOUR_OF_DAY=22 delta=5 gave " + f + " Wanted 3"); + cal.roll(Calendar.HOUR_OF_DAY, 21); + f = cal.get(Calendar.HOUR_OF_DAY); + if (f != 0) errln("Rolling HOUR_OF_DAY=3 delta=21 gave " + f + " Wanted 0"); + + // Test rolling hour + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.roll(Calendar.HOUR, -2); + f = cal.get(Calendar.HOUR); + if (f != 10) errln("Rolling HOUR=0 delta=-2 gave " + f + " Wanted 10"); + cal.roll(Calendar.HOUR, 5); + f = cal.get(Calendar.HOUR); + if (f != 3) errln("Rolling HOUR=10 delta=5 gave " + f + " Wanted 3"); + cal.roll(Calendar.HOUR, 9); + f = cal.get(Calendar.HOUR); + if (f != 0) errln("Rolling HOUR=3 delta=9 gave " + f + " Wanted 0"); + } + + /* + * Confirm that multiple calls to Calendar.set() works correctly. + */ + public void Test4374886() { + Locale savedLocale = Locale.getDefault(); + TimeZone savedTimeZone = TimeZone.getDefault(); + + try { + Locale.setDefault(Locale.US); + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, 2001); + cal.set(Calendar.MONTH, Calendar.OCTOBER); + cal.set(Calendar.WEEK_OF_YEAR, 4); + cal.set(Calendar.DAY_OF_WEEK, 2); + + if (cal.get(Calendar.YEAR) != 2001 || + cal.get(Calendar.MONTH) != Calendar.JANUARY || + cal.get(Calendar.DATE) != 22 || + cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { + errln("Failed : got " + cal.getTime() + ", expected Mon Jan 22, 2001"); + } + } + finally { + Locale.setDefault(savedLocale); + TimeZone.setDefault(savedTimeZone); + } + } +} + +//eof diff --git a/test/java/util/Calendar/FieldStateTest.java b/test/java/util/Calendar/FieldStateTest.java new file mode 100644 index 0000000000..caa6f219a2 --- /dev/null +++ b/test/java/util/Calendar/FieldStateTest.java @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4860664 4916815 4867075 + * @library /java/text/testlib + * @build Koyomi + * @run main FieldStateTest + * @summary Unit tests for internal fields states. + */ + +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +import static java.util.Calendar.*; + +public class FieldStateTest extends IntlTest { + + public static void main(String[] args) throws Exception { + Locale reservedLocale = Locale.getDefault(); + TimeZone reservedTimeZone = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + Locale.setDefault(Locale.US); + + new FieldStateTest().run(args); + } finally { + // restore the reserved locale and time zone + Locale.setDefault(reservedLocale); + TimeZone.setDefault(reservedTimeZone); + } + } + + public void TestFieldState() { + Koyomi cal = new Koyomi(); + logln("Right after instantialtion:"); + if (!cal.checkAllSet()) { + errln(cal.getMessage()); + } + + logln("Set date to 2003/10/31 after the instantiation:"); + cal.set(2003, OCTOBER, 31); + // let cal calculate the time + cal.getTime(); + // At this point, all fields have to be recalculated and + // happen to have the set-state from the instantiation. The + // three fields should have "externally set" and the rest of + // the fields have "computed". But we can't distinguish them + // outside the package. + if (!cal.checkAllSet()) { + errln(cal.getMessage()); + } + // Make sure that the correct date was produced. + if (!cal.checkInternalDate(2003, OCTOBER, 31, FRIDAY)) { + errln(cal.getMessage()); + } + + logln("Change to Monday of the week, which is 2003/10/27:"); + cal.set(DAY_OF_WEEK, MONDAY); + cal.getTime(); + if (!cal.checkDate(2003, OCTOBER, 27)) { + errln(cal.getMessage()); + } + + // The same operation didn't work after calling clear() before + // 1.5 because the set-state was just depends on its previous + // operations. After the instantiation, all the fields are set + // to "computed". But after calling clear(), the state becomes + // "unset". + logln("Set to 2003/10/31 after clear():"); + cal.clear(); + cal.set(2003, OCTOBER, 31); + cal.getTime(); + cal.set(DAY_OF_WEEK, MONDAY); + if (!cal.checkDate(2003, OCTOBER, 27, MONDAY)) { + errln(cal.getMessage()); + } + + logln("Set to 2003/10/31 after clear(), then to the 51st week of year (12/19):"); + cal.clear(); + cal.set(2003, OCTOBER, 31); + cal.getTime(); + cal.set(WEEK_OF_YEAR, 51); + if (!cal.checkFieldValue(WEEK_OF_YEAR, 51)) { + errln(cal.getMessage()); + } + if (!cal.checkDate(2003, DECEMBER, 19, FRIDAY)) { + errln(cal.getMessage()); + } + + logln("Set to 2003/10 Mon of 4th week (10/20: 43rd week of year, 293rd day):"); + cal.clear(); + cal.set(YEAR, 2003); + cal.set(MONTH, OCTOBER); + cal.set(DAY_OF_WEEK, MONDAY); + cal.set(WEEK_OF_MONTH, 4); + cal.getTime(); + if (!cal.checkFieldValue(DAY_OF_MONTH, 20)) { + errln(cal.getMessage()); + } + if (!cal.checkFieldValue(DAY_OF_YEAR, 293)) { + errln(cal.getMessage()); + } + if (!cal.checkFieldValue(WEEK_OF_YEAR, 43)) { + errln(cal.getMessage()); + } + + logln("Set to 2003/10 Mon of 43rd week of year (10/20: 4th week of month, 293rd day):"); + cal.clear(); + cal.set(YEAR, 2003); + cal.set(DAY_OF_WEEK, MONDAY); + cal.set(WEEK_OF_YEAR, 43); + cal.getTime(); + if (!cal.checkDate(2003, OCTOBER, 20, MONDAY)) { + errln(cal.getMessage()); + } + if (!cal.checkFieldValue(WEEK_OF_MONTH, 4)) { + errln(cal.getMessage()); + } + if (!cal.checkFieldValue(DAY_OF_YEAR, 293)) { + errln(cal.getMessage()); + } + + logln("Set day of week to SUNDAY and date to 2003/10/31. " + + "Then, getTime and set week of year to 43."); + cal.setTime(new Date(2003-1990, OCTOBER, 31)); + cal.set(DAY_OF_WEEK, SUNDAY); + cal.set(2003, OCTOBER, 31); // 2003/10/31 is Friday. + cal.set(ZONE_OFFSET, 0); + cal.set(DST_OFFSET, 0); + + // This call should change the day of week to FRIDAY since the + // selected field combination should be YEAR, MONTH and + // DAY_OF_MONTH. The other calendar fields must be normalized + // with the selected date. + cal.getTime(); + cal.set(WEEK_OF_YEAR, 43); + if (!cal.checkDate(2003, OCTOBER, 24, FRIDAY)) { + errln(cal.getMessage()); + } + } + + /* + * 4916815: REGRESSION: Problem with java.util.Calendar VM 1.4.2-b28 + */ + public void Test4916815() { + logln("Set date to 2003/9/26 (Fri). Roll to Aug and back to Sep. "+ + "Set dayofweek to Sunday which should be 2003/9/21."); + Koyomi cal = new Koyomi(); + cal.clear(); + // 2003/9/26 (Fri) + cal.set(2003, SEPTEMBER, 26); + // Go to August then back to September + cal.roll(MONTH, -1); + cal.roll(MONTH, +1); + Koyomi cal2 = (Koyomi) cal.clone(); + cal2.getTime(); + // Sunday of the week should be 2003/9/21. + cal2.set(DAY_OF_WEEK, SUNDAY); + if (!cal2.checkDate(2003, SEPTEMBER, 21, SUNDAY)) { + errln(cal2.getMessage()); + } + } + + /* + * 4867075: GregorianCalendar get() calls complete() internally, should getTime() too? + */ + public void Test4867075() { + Koyomi cal = new Koyomi(Locale.US); + cal.clear(); + cal.set(YEAR, 2004); + cal.set(WEEK_OF_YEAR, 1); + checkDate(cal, SUNDAY, 2003, DECEMBER, 28); + checkDate(cal, MONDAY, 2003, DECEMBER, 29); + checkDate(cal, TUESDAY, 2003, DECEMBER, 30); + checkDate(cal, WEDNESDAY, 2003, DECEMBER, 31); + checkDate(cal, THURSDAY, 2004, JANUARY, 1); + checkDate(cal, FRIDAY, 2004, JANUARY, 2); + checkDate(cal, SATURDAY, 2004, JANUARY, 3); + } + + private void checkDate(Koyomi cal, int dayOfWeek, + int expectedYear, int expectedMonth, int expectedDayOfMonth) { + cal.set(DAY_OF_WEEK, dayOfWeek); + cal.getTime(); + if (!cal.checkInternalDate(expectedYear, expectedMonth, expectedDayOfMonth, dayOfWeek)) { + errln(cal.getMessage()); + } + } + + static String toHexString(int x) { + return Integer.toHexString(x); + } +} diff --git a/test/java/util/Calendar/GregorianCutoverTest.java b/test/java/util/Calendar/GregorianCutoverTest.java new file mode 100644 index 0000000000..bd743ae19f --- /dev/null +++ b/test/java/util/Calendar/GregorianCutoverTest.java @@ -0,0 +1,324 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4359204 4928615 4743587 4956232 6459836 6549953 + * @library /java/text/testlib + * @build Koyomi + * @run main GregorianCutoverTest + * @summary Unit tests related to the Gregorian cutover support. + */ + +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +import static java.util.GregorianCalendar.*; + +public class GregorianCutoverTest extends IntlTest { + + public static void main(String[] args) throws Exception { + TimeZone tz = TimeZone.getDefault(); + Locale lc = Locale.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + Locale.setDefault(Locale.US); + + new GregorianCutoverTest().run(args); + } finally { + TimeZone.setDefault(tz); + Locale.setDefault(lc); + } + } + + /** + * 4359204: GregorianCalendar.get(cal.DAY_OF_YEAR) is inconsistent for year 1582 + */ + public void Test4359204() { + Koyomi cal = new Koyomi(); + + cal.set(1582, JANUARY, 1); + checkContinuity(cal, DAY_OF_YEAR); + checkContinuity(cal, WEEK_OF_YEAR); + cal.set(1582, OCTOBER, 1); + checkContinuity(cal, WEEK_OF_MONTH); + + // JCK tests the cutover date 1970-1-1 (Epoch) + cal.setGregorianChange(new Date(0)); + cal.set(1969, JANUARY, 1); + checkContinuity(cal, DAY_OF_YEAR); + checkContinuity(cal, WEEK_OF_YEAR); + cal.set(1969, DECEMBER, 1); + checkContinuity(cal, WEEK_OF_MONTH); + cal.set(1970, JANUARY, 1); + checkContinuity(cal, DAY_OF_YEAR); + checkContinuity(cal, WEEK_OF_YEAR); + + // Use large date (year >= 50000) + cal.setGregorianChange(new Date(50000-1900, JANUARY, 20)); + cal.set(49998, JANUARY, 1); + checkContinuity(cal, DAY_OF_YEAR); + checkContinuity(cal, WEEK_OF_YEAR); + cal.set(49999, JANUARY, 1); + checkContinuity(cal, DAY_OF_YEAR); + checkContinuity(cal, WEEK_OF_YEAR); + cal.set(50000, JANUARY, 20); + checkContinuity(cal, DAY_OF_YEAR); + checkContinuity(cal, WEEK_OF_YEAR); + + // Handling of "overlapping" dates may still be incorrect as + // of 1.5. Also, there's no way to disambiguate "overlapping" + // dates. + // millis=-112033929600000: date=-1581-10-15T00:00:00.000Z + cal.setGregorianChange(new Date(-112033929600000L)); + cal.set(ERA, AD); + cal.set(-1581, JANUARY, 1); + // The year should have 379 days. + checkContinuity(cal, DAY_OF_YEAR); + checkContinuity(cal, WEEK_OF_YEAR); + + logln("Default cutover"); + cal = new Koyomi(); + cal.set(1582, OCTOBER, 1); + logln(" roll --DAY_OF_MONTH from 1582/10/01"); + cal.roll(DAY_OF_MONTH, -1); + if (!cal.checkDate(1582, OCTOBER, 31)) { + errln(cal.getMessage()); + } + logln(" roll DAY_OF_MONTH+10 from 1582/10/31"); + cal.roll(DAY_OF_MONTH, +10); + if (!cal.checkDate(1582, OCTOBER, 20)) { + errln(cal.getMessage()); + } + logln(" roll DAY_OF_MONTH-10 from 1582/10/20"); + cal.roll(DAY_OF_MONTH, -10); + if (!cal.checkDate(1582, OCTOBER, 31)) { + errln(cal.getMessage()); + } + logln(" roll back one day further"); + cal.roll(DAY_OF_MONTH, +1); + if (!cal.checkDate(1582, OCTOBER, 1)) { + errln(cal.getMessage()); + } + + // should handle the gap between 1969/12/22 (Julian) to 1970/1/5 (Gregorian) + logln("Cutover date is 1970/1/5"); + cal.setGregorianChange(new Date(1970-1900, JANUARY, 5)); + cal.set(ERA, AD); + cal.set(YEAR, 1970); + logln(" Set DAY_OF_YEAR to the 28th day of 1970"); + cal.set(DAY_OF_YEAR, 28); + if (!cal.checkDate(1970, FEBRUARY, 1)) { + errln(cal.getMessage()); + } + if (!cal.checkFieldValue(WEEK_OF_YEAR, 5)) { + errln(cal.getMessage()); + } + logln(" 1969/12/22 should be the 356th day of the year."); + cal.set(1969, DECEMBER, 22); + if (!cal.checkFieldValue(DAY_OF_YEAR, 356)) { + errln(cal.getMessage()); + } + logln(" Set DAY_OF_YEAR to autual maximum."); + int actualMaxDayOfYear = cal.getActualMaximum(DAY_OF_YEAR); + if (actualMaxDayOfYear != 356) { + errln("actual maximum of DAY_OF_YEAR: got " + actualMaxDayOfYear + ", expected 356"); + } + cal.set(DAY_OF_YEAR, actualMaxDayOfYear); + if (!cal.checkDate(1969, DECEMBER, 22)) { + errln(cal.getMessage()); + } + cal.set(1969, DECEMBER, 22); + cal.roll(DAY_OF_YEAR, +1); + logln(" Set to 1969/12/22 and roll DAY_OF_YEAR++"); + if (!cal.checkDate(1969, JANUARY, 1)) { + errln(cal.getMessage()); + } + logln(" 1970/1/5 should be the first day of the year."); + cal.set(1970, JANUARY, 5); + if (!cal.checkFieldValue(DAY_OF_YEAR, 1)) { + errln(cal.getMessage()); + } + logln(" roll --DAY_OF_MONTH from 1970/1/5"); + cal.roll(DAY_OF_MONTH, -1); + if (!cal.checkDate(1970, JANUARY, 31)) { + errln(cal.getMessage()); + } + logln(" roll back one day of month"); + cal.roll(DAY_OF_MONTH, +1); + if (!cal.checkDate(1970, JANUARY, 5)) { + errln(cal.getMessage()); + } + + // Test "missing" dates in non-lenient. + cal = new Koyomi(); // new instance for the default cutover + cal.setLenient(false); + try { + // the next day of 1582/10/4 (Julian) is 1582/10/15 (Gregorian) + logln("1582/10/10 doesn't exit with the default cutover."); + cal.set(1582, OCTOBER, 10); + cal.getTime(); + errln(" Didn't throw IllegalArgumentException in non-lenient."); + } catch (IllegalArgumentException e) { + } + } + + private void checkContinuity(Koyomi cal, int field) { + cal.getTime(); + logln(Koyomi.getFieldName(field) + " starting on " + cal.toDateString()); + int max = cal.getActualMaximum(field); + for (int i = 1; i <= max; i++) { + logln(i + " " + cal.toDateString()); + if (!cal.checkFieldValue(field, i)) { + errln(" " + cal.toDateString() + ":\t" + cal.getMessage()); + } + cal.add(field, +1); + } + } + + /** + * 4928615: GregorianCalendar returns wrong dates after setGregorianChange + */ + public void Test4928615() { + Koyomi cal = new Koyomi(); + logln("Today is 2003/10/1 Gregorian."); + Date x = new Date(2003-1900, 10-1, 1); + cal.setTime(x); + + logln(" Changing the cutover date to yesterday..."); + cal.setGregorianChange(new Date(x.getTime() - (24*3600*1000))); + if (!cal.checkDate(2003, OCTOBER, 1)) { + errln(" " + cal.getMessage()); + } + logln(" Changing the cutover date to tomorrow..."); + cal.setGregorianChange(new Date(x.getTime() + (24*3600*1000))); + if (!cal.checkDate(2003, SEPTEMBER, 18)) { + errln(" " + cal.getMessage()); + } + } + + /** + * 4743587: GregorianCalendar.getLeastMaximum() returns wrong values + */ + public void Test4743587() { + Koyomi cal = new Koyomi(); + Koyomi cal2 = (Koyomi) cal.clone(); + logln("getLeastMaximum should handle cutover year.\n" + +" default cutover date"); + if (!cal.checkLeastMaximum(DAY_OF_YEAR, 365-10)) { + errln(" " + cal.getMessage()); + } + if (!cal.checkLeastMaximum(WEEK_OF_YEAR, 52-((10+6)/7))) { + errln(" " + cal.getMessage()); + } + // Corrected for 4956232 + if (!cal.checkLeastMaximum(DAY_OF_MONTH, 28)) { + errln(" " + cal.getMessage()); + } + if (!cal.checkLeastMaximum(WEEK_OF_MONTH, 3)) { + errln(" " + cal.getMessage()); + } + if (!cal.checkLeastMaximum(DAY_OF_WEEK_IN_MONTH, 3)) { + errln(" " + cal.getMessage()); + } + // make sure that getLeastMaximum calls didn't affect the date + if (!cal.equals(cal2)) { + errln(" getLeastMaximum calls modified the object."); + } + if (!cal.checkGreatestMinimum(DAY_OF_MONTH, 1)) { + errln(" " + cal.getMessage()); + } + + logln(" changing the date to 1582/10/20 for actual min/max tests"); + cal.set(1582, OCTOBER, 20); + if (!cal.checkActualMinimum(DAY_OF_MONTH, 1)) { + errln(" " + cal.getMessage()); + } + if (!cal.checkActualMaximum(DAY_OF_MONTH, 31)) { + errln(" " + cal.getMessage()); + } + + cal = new Koyomi(); + logln("Change the cutover date to 1970/1/5."); + cal.setGregorianChange(new Date(1970-1900, 0, 5)); + if (!cal.checkLeastMaximum(DAY_OF_YEAR, 356)) { + errln(" " + cal.getMessage()); + } + if (!cal.checkLeastMaximum(DAY_OF_MONTH, 22)) { + errln(" " + cal.getMessage()); + } + if (!cal.checkGreatestMinimum(DAY_OF_MONTH, 5)) { + errln(" " + cal.getMessage()); + } + cal.set(1970, JANUARY, 10); + if (!cal.checkActualMinimum(DAY_OF_MONTH, 5)) { + errln(" " + cal.getMessage()); + } + if (!cal.checkActualMaximum(DAY_OF_MONTH, 31)) { + errln(" " + cal.getMessage()); + } + } + + /** + * 6459836: (cal) GregorianCalendar set method provides wrong result + */ + public void Test6459836() { + int hour = 13865672; + Koyomi gc1 = new Koyomi(); + gc1.clear(); + gc1.set(1, gc1.JANUARY, 1, 0, 0, 0); + gc1.set(gc1.HOUR_OF_DAY, hour); + if (!gc1.checkDate(1582, gc1.OCTOBER, 4)) { + errln("test case 1: " + gc1.getMessage()); + } + gc1.clear(); + gc1.set(1, gc1.JANUARY, 1, 0, 0, 0); + gc1.set(gc1.HOUR_OF_DAY, hour + 24); + if (!gc1.checkDate(1582, gc1.OCTOBER, 15)) { + errln("test case 2: " + gc1.getMessage()); + } + } + + /** + * 6549953 (cal) WEEK_OF_YEAR and DAY_OF_YEAR calculation problems around Gregorian cutover + */ + public void Test6549953() { + Koyomi cal = new Koyomi(); + + cal.set(YEAR, 1582); + cal.set(WEEK_OF_YEAR, 42); + cal.set(DAY_OF_WEEK, FRIDAY); + cal.checkFieldValue(WEEK_OF_YEAR, 42); + cal.checkFieldValue(DAY_OF_WEEK, FRIDAY); + if (!cal.checkDate(1582, OCTOBER, 29)) { + errln(cal.getMessage()); + } + cal.clear(); + cal.set(1582, OCTOBER, 1); + cal.set(DAY_OF_YEAR, 292); + if (!cal.checkDate(1582, OCTOBER, 29)) { + errln(cal.getMessage()); + } + } +} diff --git a/test/java/util/Calendar/JapanEraNameCompatTest.java b/test/java/util/Calendar/JapanEraNameCompatTest.java new file mode 100644 index 0000000000..8efed7d224 --- /dev/null +++ b/test/java/util/Calendar/JapanEraNameCompatTest.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8218781 + * @summary Test the localized names of Japanese era Reiwa from COMPAT provider. + * @modules jdk.localedata + * @run testng/othervm -Djava.locale.providers=COMPAT JapanEraNameCompatTest + */ + +import static java.util.Calendar.*; +import static java.util.Locale.*; + +import java.time.LocalDate; +import java.time.chrono.JapaneseChronology; +import java.time.chrono.JapaneseEra; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.time.format.TextStyle; +import java.util.Calendar; +import java.util.Locale; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import static org.testng.Assert.assertEquals; + +@Test +public class JapanEraNameCompatTest { + static final Calendar c = new Calendar.Builder() + .setCalendarType("japanese") + .setFields(ERA, 5, YEAR, 1, MONTH, MAY, DAY_OF_MONTH, 1) + .build(); + static final String EngName = "Reiwa"; + static final String CJName = "\u4ee4\u548c"; + static final String KoreanName = "\ub808\uc774\uc640"; + static final String ArabicName = "\u0631\u064a\u0648\u0627"; + static final String ThaiName = "\u0e40\u0e23\u0e27\u0e30"; + static final String HindiName = "\u0930\u0947\u0907\u0935\u093e"; + static final String RussianName = "\u0420\u044d\u0439\u0432\u0430"; + static final String SerbianName = "\u0420\u0435\u0438\u0432\u0430"; + static final String SerbLatinName = "Reiva"; + + @DataProvider(name="UtilCalendar") + Object[][] dataUtilCalendar() { + return new Object[][] { + //locale, long, short + { JAPAN, CJName, "R" }, + { KOREAN, KoreanName, "R" }, + { CHINA, CJName, "R" }, + { TAIWAN, CJName, "R" }, // fallback to zh + { new Locale("ar"), ArabicName, ArabicName }, + { new Locale("th"), ThaiName, "R" }, + // hi_IN fallback to root + { new Locale("hi", "IN"), EngName, "R" } + }; + } + + @Test(dataProvider="UtilCalendar") + public void testCalendarEraDisplayName(Locale locale, + String longName, String shortName) { + assertEquals(c.getDisplayName(ERA, LONG, locale), longName); + assertEquals(c.getDisplayName(ERA, SHORT, locale), shortName); + } + + @DataProvider(name="JavaTime") + Object[][] dataJavaTime() { + return new Object[][] { + // locale, full, short + { JAPAN, CJName, CJName }, + { KOREAN, KoreanName, KoreanName }, + { CHINA, CJName, CJName }, + { TAIWAN, CJName, CJName }, + { new Locale("ar"), ArabicName, ArabicName }, + { new Locale("th"), ThaiName, ThaiName }, + { new Locale("hi", "IN"), HindiName, HindiName }, + { new Locale("ru"), RussianName, RussianName }, + { new Locale("sr"), SerbianName, SerbianName }, + { Locale.forLanguageTag("sr-Latn"), SerbLatinName, SerbLatinName }, + { new Locale("hr"), EngName, EngName }, + { new Locale("in"), EngName, EngName }, + { new Locale("lt"), EngName, EngName }, + { new Locale("nl"), EngName, EngName }, + { new Locale("no"), EngName, "R" }, + { new Locale("sv"), EngName, EngName }, + // el fallback to root + { new Locale("el"), EngName, EngName } + }; + } + + @Test(dataProvider="JavaTime") + public void testChronoJapanEraDisplayName(Locale locale, + String fullName, String shortName) { + + JapaneseEra era = JapaneseEra.valueOf("Reiwa"); + assertEquals(era.getDisplayName(TextStyle.FULL, locale), fullName); + assertEquals(era.getDisplayName(TextStyle.SHORT, locale), shortName); + assertEquals(era.getDisplayName(TextStyle.NARROW, locale), "R"); + } + + @Test + public void testFormatParseEraName() { + LocalDate date = LocalDate.of(2019, 5, 1); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd GGGG"); + formatter = formatter.withChronology(JapaneseChronology.INSTANCE); + + int num = 0; + for (Locale locale : Calendar.getAvailableLocales()) { + formatter = formatter.withLocale(locale); + try { + LocalDate.parse(date.format(formatter), formatter); + } catch (DateTimeParseException e) { + // If an array is defined for Japanese eras in java.time resource, + // but an era entry is missing, format fallback to English name + // while parse throw DateTimeParseException. + num++; + System.out.println("Missing java.time resource data for locale: " + locale); + } + } + if (num > 0) { + throw new RuntimeException("Missing java.time data for " + num + " locales"); + } + } +} diff --git a/test/java/util/Calendar/JulianTest.java b/test/java/util/Calendar/JulianTest.java new file mode 100644 index 0000000000..bd7105bce8 --- /dev/null +++ b/test/java/util/Calendar/JulianTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 5029449 + * @summary Tests for the Julian calendar system (before the Gregorian cutover) + * @library /java/text/testlib + */ + +import static java.util.GregorianCalendar.*; + +public class JulianTest extends IntlTest { + + public static void main(String[] args) throws Exception { + new JulianTest().run(args); + } + + /* + * 5029449: Regression: GregorianCalendar produces wrong Julian calendar dates in BC 1 + */ + public void Test5029449() { + Koyomi cal = new Koyomi(); + cal.clear(); + cal.set(1, JANUARY, 0); + // Date should be BC 1/12/31 + if (!cal.checkFieldValue(ERA, BC) + || !cal.checkDate(1, DECEMBER, 31)) { + errln(cal.getMessage()); + } + } +} diff --git a/test/java/util/Calendar/Koyomi.java b/test/java/util/Calendar/Koyomi.java new file mode 100644 index 0000000000..8eec03b5de --- /dev/null +++ b/test/java/util/Calendar/Koyomi.java @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import static java.util.Calendar.*; + +import java.util.GregorianCalendar; +import java.util.Locale; +import java.util.TimeZone; + +/** + * GregorianCalendar subclass for testing. + */ +public class Koyomi extends GregorianCalendar { + static final String[] FIELD_NAMES = { + "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", "DAY_OF_MONTH", + "DAY_OF_YEAR", "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", + "HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET", + "DST_OFFSET" + }; + + static final int ALL_FIELDS = (1 << FIELD_COUNT) - 1; + + public Koyomi() { + } + + public Koyomi(TimeZone tz) { + super(tz); + } + + public Koyomi(Locale loc) { + super(loc); + } + + public Koyomi(TimeZone tz, Locale loc) { + super(tz, loc); + } + + @Override + public void computeTime() { + super.computeTime(); + } + + @Override + public void computeFields() { + super.computeFields(); + } + + @Override + public void complete() { + super.complete(); + } + + static String getFieldName(int field) { + return FIELD_NAMES[field]; + } + + String toDateString() { + StringBuilder sb = new StringBuilder(); + sb.append(internalGet(ERA) == 0 ? "BCE " : ""); + sb.append(internalGet(YEAR)).append('-'); + sb.append(internalGet(MONTH)+1).append('-'); + sb.append(internalGet(DAY_OF_MONTH)); + return sb.toString(); + } + + String toTimeString() { + StringBuilder sb = new StringBuilder(); + sb.append(internalGet(HOUR_OF_DAY)).append(':'); + sb.append(internalGet(MINUTE)).append(':'); + sb.append(internalGet(SECOND)).append('.'); + int ms = internalGet(MILLISECOND); + if (ms < 100) { + sb.append('0'); + if (ms < 10) { + sb.append('0'); + } + } + sb.append(ms); + int offset = internalGet(ZONE_OFFSET) + internalGet(DST_OFFSET); + offset /= 60000; + offset = (offset/60) * 100 + (offset%60); + if (offset >= 0) { + sb.append('+'); + } else { + sb.append('-'); + offset = -offset; + } + if (offset < 1000) { + sb.append('0'); + if (offset < 100) { + sb.append('0'); + } + } + sb.append(offset); + return sb.toString(); + } + + String toDateTimeString() { + return toDateString() + "T" + toTimeString(); + } + + StringBuilder msg = new StringBuilder(); + + void initTest() { + msg = new StringBuilder(); + } + + String getMessage() { + String s = msg.toString(); + msg = new StringBuilder(); + return " " + s; + } + + void setMessage(String msg) { + this.msg = new StringBuilder(msg); + } + + void appendMessage(String msg) { + this.msg.append(msg); + } + + boolean getStatus() { + return msg.length() == 0; + } + + int getSetStateFields() { + int mask = 0; + for (int i = 0; i < FIELD_COUNT; i++) { + if (isSet(i)) { + mask |= 1 << i; + } + } + return mask; + } + + int[] getFields() { + int[] fds = new int[fields.length]; + System.arraycopy(fields, 0, fds, 0, fds.length); + return fds; + } + + boolean checkAllSet() { + initTest(); + for (int i = 0; i < FIELD_COUNT; i++) { + checkFieldState(i, true); + } + return getStatus(); + } + + boolean checkInternalDate(int year, int month, int dayOfMonth) { + initTest(); + checkInternalFieldValue(YEAR, year); + checkInternalFieldValue(MONTH, month); + checkInternalFieldValue(DAY_OF_MONTH, dayOfMonth); + return getStatus(); + } + + boolean checkInternalDate(int year, int month, int dayOfMonth, int dayOfWeek) { + initTest(); + checkInternalFieldValue(YEAR, year); + checkInternalFieldValue(MONTH, month); + checkInternalFieldValue(DAY_OF_MONTH, dayOfMonth); + checkInternalFieldValue(DAY_OF_WEEK, dayOfWeek); + return getStatus(); + } + + boolean checkActualMaximum(int field, int expectedValue) { + int val; + if ((val = getActualMaximum(field)) != expectedValue) { + appendMessage("getActualMaximum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkLeastMaximum(int field, int expectedValue) { + int val; + if ((val = getLeastMaximum(field)) != expectedValue) { + appendMessage("getLeastMaximum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkActualMinimum(int field, int expectedValue) { + int val; + if ((val = getActualMinimum(field)) != expectedValue) { + appendMessage("getActualMinimum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkGreatestMinimum(int field, int expectedValue) { + int val; + if ((val = getGreatestMinimum(field)) != expectedValue) { + appendMessage("getGreatestMinimum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkDate(int year, int month, int dayOfMonth) { + initTest(); + checkFieldValue(YEAR, year); + checkFieldValue(MONTH, month); + checkFieldValue(DAY_OF_MONTH, dayOfMonth); + return getStatus(); + } + + boolean checkDate(int year, int month, int dayOfMonth, int dayOfWeek) { + initTest(); + checkFieldValue(YEAR, year); + checkFieldValue(MONTH, month); + checkFieldValue(DAY_OF_MONTH, dayOfMonth); + checkFieldValue(DAY_OF_WEEK, dayOfWeek); + return getStatus(); + } + + boolean checkDateTime(int year, int month, int dayOfMonth, + int hourOfDay, int minute, int second, int ms) { + initTest(); + checkFieldValue(YEAR, year); + checkFieldValue(MONTH, month); + checkFieldValue(DAY_OF_MONTH, dayOfMonth); + checkFieldValue(HOUR_OF_DAY, hourOfDay); + checkFieldValue(MINUTE, minute); + checkFieldValue(SECOND, second); + checkFieldValue(MILLISECOND, ms); + return getStatus(); + } + + boolean checkTime(int hourOfDay, int minute, int second, int ms) { + initTest(); + checkFieldValue(HOUR_OF_DAY, hourOfDay); + checkFieldValue(MINUTE, minute); + checkFieldValue(SECOND, second); + checkFieldValue(MILLISECOND, ms); + return getStatus(); + } + + boolean checkFieldState(int field, boolean expectedState) { + if (isSet(field) != expectedState) { + appendMessage(FIELD_NAMES[field] + " state is not " + expectedState + "; "); + return false; + } + return true; + } + + boolean checkFieldValue(int field, int expectedValue) { + int val; + if ((val = get(field)) != expectedValue) { + appendMessage("get(" + FIELD_NAMES[field] + "): got " + val + + ", expected " + expectedValue + "; "); + return false; + } + return true; + } + + boolean checkInternalFieldValue(int field, int expectedValue) { + int val; + if ((val = internalGet(field)) != expectedValue) { + appendMessage("internalGet(" + FIELD_NAMES[field] + "): got " + val + + ", expected " + expectedValue + "; "); + return false; + } + return true; + } +} diff --git a/test/java/util/Calendar/Limit.java b/test/java/util/Calendar/Limit.java new file mode 100644 index 0000000000..1ab0e172dc --- /dev/null +++ b/test/java/util/Calendar/Limit.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.*; +import java.text.*; + +/** + * Test GregorianCalendar limits, which should not exist. + * @test + * @bug 4056585 + * @summary Make sure that GregorianCalendar works far in the past and future. + * @author Alan Liu + */ +public class Limit { + static final long ONE_DAY = 24*60*60*1000L; + + public static void main(String args[]) throws Exception { + GregorianCalendar c = new GregorianCalendar(); + DateFormat fmt = new SimpleDateFormat("EEEE, MMMM dd, yyyy G", Locale.US); + long bigMillis = 300000000000000L; + + try { + // We check two things: + // 1. That handling millis in the range of +/- bigMillis works. + // bigMillis is a value that used to blow up. + // 2. The round-trip format/parse works in these extreme areas. + c.setTime(new Date(-bigMillis)); + String s = fmt.format(c.getTime()); + Date d = fmt.parse(s); + if (Math.abs(d.getTime() + bigMillis) >= ONE_DAY) { + throw new Exception(s + " != " + fmt.format(d)); + } + + c.setTime(new Date(+bigMillis)); + s = fmt.format(c.getTime()); + d = fmt.parse(s); + if (Math.abs(d.getTime() - bigMillis) >= ONE_DAY) { + throw new Exception(s + " != " + fmt.format(d)); + } + } catch (IllegalArgumentException | ParseException e) { + throw e; + } + } +} diff --git a/test/java/util/Calendar/NonLenientTest.java b/test/java/util/Calendar/NonLenientTest.java new file mode 100644 index 0000000000..6c42c59493 --- /dev/null +++ b/test/java/util/Calendar/NonLenientTest.java @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4147269 4266783 4726030 + * @summary Make sure that validation is adequate in non-lenient mode. + * @library /java/text/testlib + */ + +import java.util.*; + +import static java.util.Calendar.*; + +public class NonLenientTest extends IntlTest { + + public static void main(String[] args) throws Exception { + Locale reservedLocale = Locale.getDefault(); + TimeZone reservedTimeZone = TimeZone.getDefault(); + try { + Locale.setDefault(Locale.US); + TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles")); + new NonLenientTest().run(args); + } finally { + // restore the reserved locale and time zone + Locale.setDefault(reservedLocale); + TimeZone.setDefault(reservedTimeZone); + } + } + + public void TestValidationInNonLenient() { + Koyomi cal = getNonLenient(); + + // 2003 isn't a leap year. + cal.set(2003, FEBRUARY, 29); + validate(cal, "2003/2/29"); + + // October has only 31 days. + cal.set(2003, OCTOBER, 32); + validate(cal, "2003/10/32"); + + // 2003/10/31 is Friday. + cal.set(2003, OCTOBER, 31); + cal.set(DAY_OF_WEEK, SUNDAY); + validate(cal, "2003/10/31 SUNDAY"); + + // 2003/10/31 is the 304th day of the year. + cal.clear(); + cal.set(DAY_OF_YEAR, 1); + cal.set(2003, OCTOBER, 31); + validate(cal, "2003/10/31 DAY_OF_YEAR=1"); + + // 2003/10 isn't the 1st week of the year. + cal.clear(); + cal.set(YEAR, 2003); + cal.set(WEEK_OF_YEAR, 1); + cal.set(MONTH, OCTOBER); + validate(cal, "2003/10 WEEK_OF_YEAR=1"); + + // The 1st week of 2003 doesn't have Monday. + cal.clear(); + cal.set(YEAR, 2003); + cal.set(WEEK_OF_YEAR, 1); + cal.set(DAY_OF_WEEK, MONDAY); + validate(cal, "2003 WEEK_OF_YEAR=1 MONDAY."); + + // 2003 has 52 weeks. + cal.clear(); + cal.set(YEAR, 2003); + cal.set(WEEK_OF_YEAR, 53); + cal.set(DAY_OF_WEEK, WEDNESDAY); + validate(cal, "2003 WEEK_OF_YEAR=53"); + + /* + * These test cases assume incompatible behavior in Tiger as + * the result of the validation bug fixes. However, it looks + * like we have to allow applications to set ZONE_OFFSET and + * DST_OFFSET values to modify the time zone offsets given by + * a TimeZone. The definition of non-leniency for time zone + * offsets is somewhat vague. (See 6231602) + * + * The following test cases are now disabled. + + // America/Los_Angeles is GMT-08:00 + cal.clear(); + cal.set(2003, OCTOBER, 31); + cal.set(ZONE_OFFSET, 0); + validate(cal, "ZONE_OFFSET=0:00 in America/Los_Angeles"); + + // 2003/10/31 shouldn't be in DST. + cal.clear(); + cal.set(2003, OCTOBER, 31); + cal.set(DST_OFFSET, 60*60*1000); + validate(cal, "2003/10/31 DST_OFFSET=1:00 in America/Los_Angeles"); + + */ + } + + /** + * 4266783: java.util.GregorianCalendar: incorrect validation in non-lenient + */ + public void Test4266783() { + Koyomi cal = getNonLenient(); + // 2003/1 has up to 5 weeks. + cal.set(YEAR, 2003); + cal.set(MONTH, JANUARY); + cal.set(WEEK_OF_MONTH, 6); + cal.set(DAY_OF_WEEK, SUNDAY); + validate(cal, "6th Sunday in Jan 2003"); + } + + + /** + * 4726030: GregorianCalendar doesn't check invalid dates in non-lenient + */ + public void Test4726030() { + Koyomi cal = getNonLenient(); + // Default year is 1970 in GregorianCalendar which isn't a leap year. + cal.set(MONTH, FEBRUARY); + cal.set(DAY_OF_MONTH, 29); + validate(cal, "2/29 in the default year 1970"); + } + + /** + * 4147269: java.util.GregorianCalendar.computeTime() works wrong when lenient is false + */ + public void Test4147269() { + Koyomi calendar = getNonLenient(); + Date date = (new GregorianCalendar(1996,0,3)).getTime(); + + for (int field = 0; field < Calendar.FIELD_COUNT; field++) { + calendar.setTime(date); + int max = calendar.getActualMaximum(field); + int value = max+1; + calendar.set(field, value); + try { + calendar.computeTime(); // call method under test + errln("Test failed with field " + calendar.getFieldName(field) + + "\n\tdate before: " + date + + "\n\tdate after: " + calendar.getTime() + + "\n\tvalue: " + value + " (max = " + max +")"); + } catch (IllegalArgumentException e) { + } + } + + for (int field = 0; field < Calendar.FIELD_COUNT; field++) { + calendar.setTime(date); + int min = calendar.getActualMinimum(field); + int value = min-1; + calendar.set(field, value); + try { + calendar.computeTime(); // call method under test + errln("Test failed with field " + calendar.getFieldName(field) + + "\n\tdate before: " + date + + "\n\tdate after: " + calendar.getTime() + + "\n\tvalue: " + value + " (min = " + min +")"); + } catch (IllegalArgumentException e) { + } + } + } + + void validate(Koyomi cal, String desc) { + int[] originalFields = cal.getFields(); + int setFields = cal.getSetStateFields(); + + try { + cal.complete(); + errln(desc + " should throw IllegalArgumentException in non-lenient."); + } catch (IllegalArgumentException e) { + } + + // The code below will be executed with the -nothrow option + + // In non-lenient, calendar field values that have beeb set by + // user shouldn't be modified. + int[] afterFields = cal.getFields(); + for (int i = 0; i < Calendar.FIELD_COUNT; i++) { + if (cal.isSet(i) && originalFields[i] != afterFields[i]) { + errln(" complete() modified fields[" + cal.getFieldName(i) + "] got " + + afterFields[i] + ", expected " + originalFields[i]); + } + } + // In non-lenient, set state of fields shouldn't be modified. + int afterSetFields = cal.getSetStateFields(); + if (setFields != afterSetFields) { + errln(" complate() modified set states: before 0x" + toHex(setFields) + + ", after 0x"+ toHex(afterSetFields)); + } + } + + static Koyomi getNonLenient() { + Koyomi cal = new Koyomi(); + cal.clear(); + cal.setLenient(false); + return cal; + } + + static String toHex(int x) { + return Integer.toHexString(x); + } +} diff --git a/test/java/util/Calendar/ResolutionTest.java b/test/java/util/Calendar/ResolutionTest.java new file mode 100644 index 0000000000..98356131b0 --- /dev/null +++ b/test/java/util/Calendar/ResolutionTest.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6452848 + * @summary Make sure that the resolution of (WEKK_OF_MONTH + + * DAY_OF_WEEK) and (DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK) works as + * specified in the API. + * @key randomness + */ + +import java.util.*; +import static java.util.Calendar.*; + +public class ResolutionTest { + static Random rand = new Random(); + + public static void main(String[] args) { + for (int year = 1995; year < 2011; year++) { + for (int month = JANUARY; month <= DECEMBER; month++) { + for (int dow = SUNDAY; dow <= SATURDAY; dow++) { + test(year, month, dow); + } + } + } + } + + static void test(int year, int month, int dow) { + Calendar cal = new GregorianCalendar(year, month, 1); + int max = cal.getActualMaximum(DAY_OF_MONTH); + ArrayList<Integer> list = new ArrayList<Integer>(); + for (int d = 1; d <= max; d++) { + cal.clear(); + cal.set(year, month, d); + if (cal.get(DAY_OF_WEEK) == dow) { + list.add(d); + } + } + for (int i = 0; i < 100; i++) { + int nth = rand.nextInt(list.size()); // 0-based + int day = list.get(nth); + nth++; // 1-based + testDayOfWeekInMonth(year, month, nth, dow, day); + } + + // Put WEEK_OF_MONTH-DAY_OF_MONTH pairs + list = new ArrayList<Integer>(); + for (int d = 1; d <= max; d++) { + cal.clear(); + cal.set(year, month, d); + if (cal.get(DAY_OF_WEEK) == dow) { + list.add(cal.get(WEEK_OF_MONTH)); + list.add(d); + } + } + for (int i = 0; i < list.size(); i++) { + int nth = list.get(i++); + int day = list.get(i); + testWeekOfMonth(year, month, nth, dow, day); + } + } + + static Koyomi cal = new Koyomi(); + + static void testDayOfWeekInMonth(int year, int month, int nth, int dow, int expected) { + // don't call clear() here + cal.set(YEAR, year); + cal.set(MONTH, month); + // Set DAY_OF_WEEK_IN_MONTH before DAY_OF_WEEK + cal.set(DAY_OF_WEEK_IN_MONTH, nth); + cal.set(DAY_OF_WEEK, dow); + if (!cal.checkDate(year, month, expected)) { + throw new RuntimeException(String.format("DOWIM: year=%d, month=%d, nth=%d, dow=%d:%s%n", + year, month+1, nth, dow, cal.getMessage())); + } + } + + static void testWeekOfMonth(int year, int month, int nth, int dow, int expected) { + // don't call clear() here + cal.set(YEAR, year); + cal.set(MONTH, month); + // Set WEEK_OF_MONTH before DAY_OF_WEEK + cal.set(WEEK_OF_MONTH, nth); + cal.set(DAY_OF_WEEK, dow); + if (!cal.checkDate(year, month, expected)) { + throw new RuntimeException(String.format("WOM: year=%d, month=%d, nth=%d, dow=%d:%s%n", + year, month+1, nth, dow, cal.getMessage())); + } + } +} diff --git a/test/java/util/Calendar/RollDayOfWeekTest.java b/test/java/util/Calendar/RollDayOfWeekTest.java new file mode 100644 index 0000000000..5b85016c31 --- /dev/null +++ b/test/java/util/Calendar/RollDayOfWeekTest.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 5090555 5091805 + * @summary Make sure that rolling DAY_OF_WEEK stays in the same week + * around year boundaries. + * @run main/othervm RollDayOfWeekTest 5 5 + */ + +import java.util.*; + +import static java.util.Calendar.*; + +// Usage: java RollDayOfWeekTest [pastYears futureYears] +public class RollDayOfWeekTest { + public static void main(String[] args) { + int pastYears = 5, futureYears = 23; + if (args.length == 2) { + pastYears = Integer.parseInt(args[0]); + pastYears = Math.max(1, Math.min(pastYears, 5)); + futureYears = Integer.parseInt(args[1]); + futureYears = Math.max(1, Math.min(futureYears, 28)); + } + + System.out.printf("Test [%d .. %+d] year range.%n", -pastYears, futureYears); + Calendar cal = new GregorianCalendar(); + int year = cal.get(YEAR) - pastYears; + + // Use the all combinations of firstDayOfWeek and + // minimalDaysInFirstWeek values in the year range current + // year - pastYears to current year + futureYears. + for (int fdw = SUNDAY; fdw <= SATURDAY; fdw++) { + for (int mdifw = 1; mdifw <= 7; mdifw++) { + cal.clear(); + cal.setFirstDayOfWeek(fdw); + cal.setMinimalDaysInFirstWeek(mdifw); + cal.set(year, JANUARY, 1); + checkRoll(cal, futureYears); + } + } + + // testing roll from BCE to CE + year = -1; + for (int fdw = SUNDAY; fdw <= SATURDAY; fdw++) { + for (int mdifw = 1; mdifw <= 7; mdifw++) { + cal.clear(); + cal.setFirstDayOfWeek(fdw); + cal.setMinimalDaysInFirstWeek(mdifw); + cal.set(year, JANUARY, 1); + checkRoll(cal, 4); + } + } + } + + + static void checkRoll(Calendar cal, int years) { + Calendar cal2 = null, cal3 = null, prev = null; + // Check 28 years + for (int x = 0; x < (int)(365.2425*years); x++) { + cal2 = (Calendar) cal.clone(); + cal3 = (Calendar) cal.clone(); + + // roll foreword + for (int i = 0; i < 10; i++) { + prev = (Calendar) cal2.clone(); + cal2.roll(Calendar.DAY_OF_WEEK, +1); + roll(cal3, +1); + long t2 = cal2.getTimeInMillis(); + long t3 = cal3.getTimeInMillis(); + if (t2 != t3) { + System.err.println("prev: " + prev.getTime() + "\n" + prev); + System.err.println("cal2: " + cal2.getTime() + "\n" + cal2); + System.err.println("cal3: " + cal3.getTime() + "\n" + cal3); + throw new RuntimeException("+1: t2=" + t2 + ", t3=" + t3); + } + } + + // roll backward + for (int i = 0; i < 10; i++) { + prev = (Calendar) cal2.clone(); + cal2.roll(Calendar.DAY_OF_WEEK, -1); + roll(cal3, -1); + long t2 = cal2.getTimeInMillis(); + long t3 = cal3.getTimeInMillis(); + if (t2 != t3) { + System.err.println("prev: " + prev.getTime() + "\n" + prev); + System.err.println("cal2: " + cal2.getTime() + "\n" + cal2); + System.err.println("cal3: " + cal3.getTime() + "\n" + cal3); + throw new RuntimeException("-1: t2=" + t2 + ", t3=" + t3); + } + } + cal.add(DAY_OF_YEAR, +1); + } + } + + // Another way to roll within the same week. + static void roll(Calendar cal, int n) { + int doy = cal.get(DAY_OF_YEAR); + int diff = cal.get(DAY_OF_WEEK) - cal.getFirstDayOfWeek(); + if (diff < 0) { + diff += 7; + } + + // dow1: first day of the week + int dow1 = doy - diff; + n %= 7; + doy += n; + if (doy < dow1) { + doy += 7; + } else if (doy >= dow1 + 7) { + doy -= 7; + } + cal.set(DAY_OF_YEAR, doy); + } +} diff --git a/test/java/util/Calendar/StampOverflow.java b/test/java/util/Calendar/StampOverflow.java new file mode 100644 index 0000000000..fc10595c87 --- /dev/null +++ b/test/java/util/Calendar/StampOverflow.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4404619 6348819 + * @summary Make sure that Calendar doesn't cause nextStamp overflow. + */ + +import java.lang.reflect.*; +import java.util.*; +import static java.util.Calendar.*; + +// Calendar fails when turning negative to positive (zero), not +// positive to negative with nextStamp. If a negative value was set to +// nextStamp, it would fail even with the fix. So, there's no way to +// reproduce the symptom in a short time -- at leaset it would take a +// couple of hours even if we started with Integer.MAX_VALUE. So, this +// test case just checks that set() calls don't cause any nextStamp +// overflow. + +public class StampOverflow { + public static void main(String[] args) throws IllegalAccessException { + // Get a Field for "nextStamp". + Field nextstamp = null; + try { + nextstamp = Calendar.class.getDeclaredField("nextStamp"); + } catch (NoSuchFieldException e) { + throw new RuntimeException("implementation changed?", e); + } + + nextstamp.setAccessible(true); + + Calendar cal = new GregorianCalendar(); + int initialValue = nextstamp.getInt(cal); + // Set nextStamp to a very large number + nextstamp.setInt(cal, Integer.MAX_VALUE - 100); + + for (int i = 0; i < 1000; i++) { + invoke(cal); + int stampValue = nextstamp.getInt(cal); + // nextStamp must not be less than initialValue. + if (stampValue < initialValue) { + throw new RuntimeException("invalid nextStamp: " + stampValue); + } + } + } + + static void invoke(Calendar cal) { + cal.clear(); + cal.set(2000, NOVEMBER, 2, 0, 0, 0); + int y = cal.get(YEAR); + int m = cal.get(MONTH); + int d = cal.get(DAY_OF_MONTH); + if (y != 2000 || m != NOVEMBER || d != 2) { + throw new RuntimeException("wrong date produced (" + + y + "/" + (m+1) + "/" + d + ")"); + } + } +} diff --git a/test/java/util/Calendar/ZoneOffsets.java b/test/java/util/Calendar/ZoneOffsets.java new file mode 100644 index 0000000000..147df33749 --- /dev/null +++ b/test/java/util/Calendar/ZoneOffsets.java @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6231602 + * @summary Make sure that ZONE_OFFSET and/or DST_OFFSET setting is + * taken into account for time calculations. + */ + +import java.util.*; +import static java.util.GregorianCalendar.*; + +public class ZoneOffsets { + // This TimeZone always returns the dstOffset value. + private static class TestTimeZone extends TimeZone { + private int gmtOffset; + private int dstOffset; + + TestTimeZone(int gmtOffset, String id, int dstOffset) { + this.gmtOffset = gmtOffset; + setID(id); + this.dstOffset = dstOffset; + } + + public int getOffset(int era, int year, int month, int day, + int dayOfWeek, int milliseconds) { + return gmtOffset + dstOffset; + } + + public int getOffset(long date) { + return gmtOffset + dstOffset; + } + + public void setRawOffset(int offsetMillis) { + gmtOffset = offsetMillis; + } + + public int getRawOffset() { + return gmtOffset; + } + + public int getDSTSavings() { + return dstOffset; + } + + public boolean useDaylightTime() { + return dstOffset != 0; + } + + public boolean inDaylightTime(Date date) { + return dstOffset != 0; + } + + public String toString() { + return "TestTimeZone[" + getID() + ", " + gmtOffset + ", " + dstOffset + "]"; + } + } + + private static Locale[] locales = { + Locale.getDefault(), + new Locale("th", "TH"), + new Locale("ja", "JP", "JP"), + }; + + private static final int HOUR = 60 * 60 * 1000; + + private static int[][] offsets = { + { 0, 0 }, + { 0, HOUR }, + { 0, 2 * HOUR }, + { -8 * HOUR, 0 }, + { -8 * HOUR, HOUR }, + { -8 * HOUR, 2 * HOUR }, + { 9 * HOUR, 0 }, + { 9 * HOUR, HOUR }, + { 9 * HOUR, 2 * HOUR }, + }; + + public static void main(String[] args) { + for (int l = 0; l < locales.length; l++) { + Locale loc = locales[l]; + for (int i = 0; i < offsets.length; i++) { + test(loc, offsets[i][0], offsets[i][1]); + } + } + + // The test case in the bug report. + GregorianCalendar cal = new GregorianCalendar(); + cal.setLenient(false); + cal.setGregorianChange(new Date(Long.MIN_VALUE)); + cal.clear(); + cal.set(ZONE_OFFSET, 0); + cal.set(DST_OFFSET, 0); + cal.set(ERA, AD); + cal.set(2004, FEBRUARY, 3, 0, 0, 0); + cal.set(MILLISECOND, 0); + // The following line should not throw an IllegalArgumentException. + cal.getTime(); + } + + private static void test(Locale loc, int gmtOffset, int dstOffset) { + TimeZone tz1 = new TestTimeZone(gmtOffset, + "GMT" + (gmtOffset/HOUR) + "." + (dstOffset/HOUR), + dstOffset); + int someDifferentOffset = gmtOffset + 2 * HOUR; + TimeZone tz2 = new TestTimeZone(someDifferentOffset, + "GMT"+ (someDifferentOffset/HOUR) + "." + (dstOffset/HOUR), + dstOffset); + + int someDifferentDSTOffset = dstOffset == 2 * HOUR ? HOUR : dstOffset + HOUR; + TimeZone tz3 = new TestTimeZone(gmtOffset, + "GMT"+ (gmtOffset/HOUR) + "." + (someDifferentDSTOffset/HOUR), + someDifferentDSTOffset); + + // cal1 is the base line. + Calendar cal1 = Calendar.getInstance(tz1, loc); + cal1.clear(); + cal1.set(2005, MARCH, 11); + long t1 = cal1.getTime().getTime(); + int gmt = cal1.get(ZONE_OFFSET); + int dst = cal1.get(DST_OFFSET); + + // Test 8 cases with cal2. + Calendar cal2 = Calendar.getInstance(tz2, loc); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test1: set only ZONE_OFFSET + cal2.set(ZONE_OFFSET, gmtOffset); + if (t1 != cal2.getTime().getTime() || dst != cal2.get(DST_OFFSET)) { + error("Test1", loc, cal2, gmtOffset, dstOffset, t1); + } + + cal2.setTimeZone(tz3); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test2: set only DST_OFFSET + cal2.set(DST_OFFSET, dstOffset); + if (t1 != cal2.getTime().getTime() || gmt != cal2.get(ZONE_OFFSET)) { + error("Test2", loc, cal2, gmtOffset, dstOffset, t1); + } + + cal2.setTimeZone(tz2); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test3: set both ZONE_OFFSET and DST_OFFSET + cal2.set(ZONE_OFFSET, gmtOffset); + cal2.set(DST_OFFSET, dstOffset); + if (t1 != cal2.getTime().getTime()) { + error("Test3", loc, cal2, gmtOffset, dstOffset, t1); + } + + cal2.setTimeZone(tz3); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test4: set both ZONE_OFFSET and DST_OFFSET + cal2.set(ZONE_OFFSET, gmtOffset); + cal2.set(DST_OFFSET, dstOffset); + if (t1 != cal2.getTime().getTime()) { + error("Test4", loc, cal2, gmtOffset, dstOffset, t1); + } + + // Test the same thing in non-lenient + cal2.setLenient(false); + + cal2.setTimeZone(tz2); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test5: set only ZONE_OFFSET in non-lenient + cal2.set(ZONE_OFFSET, gmtOffset); + if (t1 != cal2.getTime().getTime() || dst != cal2.get(DST_OFFSET)) { + error("Test5", loc, cal2, gmtOffset, dstOffset, t1); + } + + cal2.setTimeZone(tz3); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test6: set only DST_OFFSET in non-lenient + cal2.set(DST_OFFSET, dstOffset); + if (t1 != cal2.getTime().getTime() || gmt != cal2.get(ZONE_OFFSET)) { + error("Test6", loc, cal2, gmtOffset, dstOffset, t1); + } + + cal2.setTimeZone(tz2); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test7: set both ZONE_OFFSET and DST_OFFSET in non-lenient + cal2.set(ZONE_OFFSET, gmtOffset); + cal2.set(DST_OFFSET, dstOffset); + if (t1 != cal2.getTime().getTime()) { + error("Test7", loc, cal2, gmtOffset, dstOffset, t1); + } + + cal2.setTimeZone(tz3); + cal2.clear(); + cal2.set(2005, MARCH, 11); + // test8: set both ZONE_OFFSET and DST_OFFSET in non-lenient + cal2.set(ZONE_OFFSET, gmtOffset); + cal2.set(DST_OFFSET, dstOffset); + if (t1 != cal2.getTime().getTime()) { + error("Test8", loc, cal2, gmtOffset, dstOffset, t1); + } + } + + private static void error(String msg, Locale loc, Calendar cal2, int gmtOffset, int dstOffset, long t1) { + System.err.println(cal2); + throw new RuntimeException(msg + ": Locale=" + loc + + ", gmtOffset=" + gmtOffset + ", dstOffset=" + dstOffset + + ", cal1 time=" + t1 + ", cal2 time=" + cal2.getTime().getTime()); + } +} diff --git a/test/java/util/Calendar/bug4028518.java b/test/java/util/Calendar/bug4028518.java new file mode 100644 index 0000000000..982b93adc8 --- /dev/null +++ b/test/java/util/Calendar/bug4028518.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4028518 + * @summary Make sure cloned GregorianCalendar is unchanged by modifying its original. + */ + +import java.util.GregorianCalendar ; +import static java.util.Calendar.*; + +public class bug4028518 { + + public static void main(String[] args) + { + GregorianCalendar cal1 = new GregorianCalendar() ; + GregorianCalendar cal2 = (GregorianCalendar) cal1.clone() ; + + printdate(cal1, "cal1: ") ; + printdate(cal2, "cal2 - cloned(): ") ; + cal1.add(DAY_OF_MONTH, 1) ; + printdate(cal1, "cal1 after adding 1 day: ") ; + printdate(cal2, "cal2 should be unmodified: ") ; + if (cal1.get(DAY_OF_MONTH) == cal2.get(DAY_OF_MONTH)) { + throw new RuntimeException("cloned GregorianCalendar modified"); + } + } + + private static void printdate(GregorianCalendar cal, String string) + { + System.out.println(string + (cal.get(MONTH) + 1) + + "/" + cal.get(DAY_OF_MONTH) + + "/" + cal.get(YEAR)) ; + } +} diff --git a/test/java/util/Calendar/bug4100311.java b/test/java/util/Calendar/bug4100311.java new file mode 100644 index 0000000000..ef0f36ecbd --- /dev/null +++ b/test/java/util/Calendar/bug4100311.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4100311 + * @summary Make sure set(DAY_OF_YEAR, 1) works. + */ + +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.Date; + +public class bug4100311 +{ + @SuppressWarnings("deprecation") + public static void main(String args[]) + { + GregorianCalendar cal = new GregorianCalendar(); + cal.set(Calendar.YEAR, 1997); + cal.set(Calendar.DAY_OF_YEAR, 1); + Date d = cal.getTime(); // Should be Jan 1 + if (d.getMonth() != 0 || d.getDate() != 1) { + throw new RuntimeException("Date isn't Jan 1"); + } + } +} diff --git a/test/java/util/Calendar/bug4243802.java b/test/java/util/Calendar/bug4243802.java new file mode 100644 index 0000000000..1f3b910c1b --- /dev/null +++ b/test/java/util/Calendar/bug4243802.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4243802 + * @summary confirm that Calendar.setTimeInMillis() and + * getTimeInMillis() can be called from a user program. (They used to + * be protected methods.) + * @library /java/text/testlib + */ + +import java.util.*; + +public class bug4243802 extends IntlTest { + + public static void main(String[] args) throws Exception { + new bug4243802().run(args); + } + + /** + * 4243802: RFE: need way to set the date of a calendar without a Date object + */ + public void Test4243802() { + TimeZone saveZone = TimeZone.getDefault(); + Locale saveLocale = Locale.getDefault(); + try { + Locale.setDefault(Locale.US); + TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles")); + + Calendar cal1 = Calendar.getInstance(); + Calendar cal2 = Calendar.getInstance(); + + cal1.clear(); + cal2.clear(); + cal1.set(2001, Calendar.JANUARY, 25, 1, 23, 45); + cal2.setTimeInMillis(cal1.getTimeInMillis()); + if ((cal2.get(Calendar.YEAR) != 2001) || + (cal2.get(Calendar.MONTH) != Calendar.JANUARY) || + (cal2.get(Calendar.DAY_OF_MONTH) != 25) || + (cal2.get(Calendar.HOUR_OF_DAY) != 1) || + (cal2.get(Calendar.MINUTE) != 23) || + (cal2.get(Calendar.SECOND) != 45) || + (cal2.get(Calendar.MILLISECOND) != 0)) { + errln("Failed: expected 1/25/2001 1:23:45.000" + + ", got " + (cal2.get(Calendar.MONTH)+1) + "/" + + cal2.get(Calendar.DAY_OF_MONTH) +"/" + + cal2.get(Calendar.YEAR) + " " + + cal2.get(Calendar.HOUR_OF_DAY) + ":" + + cal2.get(Calendar.MINUTE) + ":" + + cal2.get(Calendar.SECOND) + "." + + toMillis(cal2.get(Calendar.MILLISECOND))); + } + logln("Passed."); + } + finally { + Locale.setDefault(saveLocale); + TimeZone.setDefault(saveZone); + } + } + + private String toMillis(int m) { + StringBuffer sb = new StringBuffer(); + if (m < 100) { + sb.append('0'); + } + if (m < 10) { + sb.append('0'); + } + sb.append(m); + return sb.toString(); + } +} diff --git a/test/java/util/Calendar/bug4316678.java b/test/java/util/Calendar/bug4316678.java new file mode 100644 index 0000000000..8ae6bbc294 --- /dev/null +++ b/test/java/util/Calendar/bug4316678.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.*; +import java.util.*; +import java.text.*; + +/** + * @test + * @bug 4316678 + * @summary test that Calendar's Serializasion works correctly. + * @library /java/text/testlib + */ +public class bug4316678 extends IntlTest { + + public static void main(String[] args) throws Exception { + new bug4316678().run(args); + } + + public void Test4316678() throws Exception { + GregorianCalendar gc1; + GregorianCalendar gc2; + TimeZone saveZone = TimeZone.getDefault(); + + try { + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + + gc1 = new GregorianCalendar(2000, Calendar.OCTOBER, 10); + try (ObjectOutputStream out + = new ObjectOutputStream(new FileOutputStream("bug4316678.ser"))) { + out.writeObject(gc1); + } + + try (ObjectInputStream in + = new ObjectInputStream(new FileInputStream("bug4316678.ser"))) { + gc2 = (GregorianCalendar)in.readObject(); + } + + gc1.set(Calendar.DATE, 16); + gc2.set(Calendar.DATE, 16); + if (!gc1.getTime().equals(gc2.getTime())) { + errln("Invalid Time :" + gc2.getTime() + + ", expected :" + gc1.getTime()); + } + } finally { + TimeZone.setDefault(saveZone); + } + } +} diff --git a/test/java/util/Calendar/bug4372743.java b/test/java/util/Calendar/bug4372743.java new file mode 100644 index 0000000000..1800ebc002 --- /dev/null +++ b/test/java/util/Calendar/bug4372743.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4372743 + * @summary test that checks transitions of ERA and YEAR which are caused by add(MONTH). + * @library /java/text/testlib + */ + +import java.io.*; +import java.util.*; +import java.text.*; + +import static java.util.GregorianCalendar.*; + +public class bug4372743 extends IntlTest { + + public static void main(String[] args) throws Exception { + new bug4372743().run(args); + } + + private int[][] data = { + {AD, 2, MARCH}, + {AD, 2, FEBRUARY}, + {AD, 2, JANUARY}, + {AD, 1, DECEMBER}, + {AD, 1, NOVEMBER}, + {AD, 1, OCTOBER}, + {AD, 1, SEPTEMBER}, + {AD, 1, AUGUST}, + {AD, 1, JULY}, + {AD, 1, JUNE}, + {AD, 1, MAY}, + {AD, 1, APRIL}, + {AD, 1, MARCH}, + {AD, 1, FEBRUARY}, + {AD, 1, JANUARY}, + {BC, 1, DECEMBER}, + {BC, 1, NOVEMBER}, + {BC, 1, OCTOBER}, + {BC, 1, SEPTEMBER}, + {BC, 1, AUGUST}, + {BC, 1, JULY}, + {BC, 1, JUNE}, + {BC, 1, MAY}, + {BC, 1, APRIL}, + {BC, 1, MARCH}, + {BC, 1, FEBRUARY}, + {BC, 1, JANUARY}, + {BC, 2, DECEMBER}, + {BC, 2, NOVEMBER}, + {BC, 2, OCTOBER}, + }; + private int tablesize = data.length; + + private void check(GregorianCalendar gc, int index) { + if (gc.get(ERA) != data[index][ERA]) { + errln("Invalid era :" + gc.get(ERA) + + ", expected :" + data[index][ERA]); + } + if (gc.get(YEAR) != data[index][YEAR]) { + errln("Invalid year :" + gc.get(YEAR) + + ", expected :" + data[index][YEAR]); + } + if (gc.get(MONTH) != data[index][MONTH]) { + errln("Invalid month :" + gc.get(MONTH) + + ", expected :" + data[index][MONTH]); + } + } + + public void Test4372743() { + GregorianCalendar gc; + TimeZone saveZone = TimeZone.getDefault(); + + try { + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + + /* Set March 3, A.D. 2 */ + gc = new GregorianCalendar(2, MARCH, 3); + for (int i = 0; i < tablesize; i++) { + check(gc, i); + gc.add(gc.MONTH, -1); + } + + /* Again, Set March 3, A.D. 2 */ + gc = new GregorianCalendar(2, MARCH, 3); + for (int i = 0; i < tablesize; i+=7) { + check(gc, i); + gc.add(gc.MONTH, -7); + } + + /* Set March 10, 2 B.C. */ + gc = new GregorianCalendar(2, OCTOBER, 10); + gc.add(gc.YEAR, -3); + for (int i = tablesize -1; i >= 0; i--) { + check(gc, i); + gc.add(gc.MONTH, 1); + } + + /* Again, Set March 10, 2 B.C. */ + gc = new GregorianCalendar(2, OCTOBER, 10); + gc.add(gc.YEAR, -3); + for (int i = tablesize -1; i >= 0; i-=8) { + check(gc, i); + gc.add(gc.MONTH, 8); + } + } + finally { + TimeZone.setDefault(saveZone); + } + } +} diff --git a/test/java/util/Calendar/bug4401223.java b/test/java/util/Calendar/bug4401223.java new file mode 100644 index 0000000000..fbd9e29a8f --- /dev/null +++ b/test/java/util/Calendar/bug4401223.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4401223 + * @summary Make sure that GregorianCalendar doesn't cause IllegalArgumentException at some special situations which are related to the Leap Year. + * @library /java/text/testlib + */ + +import java.util.*; + +public class bug4401223 extends IntlTest { + + public void Test4401223a() { + int status = 0; + String s = null; + + try { + Date date = new Date(2000-1900, Calendar.FEBRUARY, 29); + GregorianCalendar gc = new GregorianCalendar(); + gc.setTime(date); + gc.setLenient(false); + gc.set(Calendar.YEAR, 2001); + s = "02/29/00 & set(YEAR,2001) = " + gc.getTime().toString(); + } catch (Exception ex) { + status++; + s = "Exception occurred for 2/29/00 & set(YEAR,2001): " + ex; + } + if (status > 0) { + errln(s); + } else { + logln(s); + } + } + + public void Test4401223b() { + int status = 0; + String s = null; + + try { + Date date = new Date(2000-1900, Calendar.DECEMBER, 31); + GregorianCalendar gc = new GregorianCalendar(); + gc.setTime(date); + gc.setLenient(false); + gc.set(Calendar.YEAR, 2001); + + if (gc.get(Calendar.YEAR) != 2001 || + gc.get(Calendar.MONTH) != Calendar.DECEMBER || + gc.get(Calendar.DATE) != 31 || + gc.get(Calendar.DAY_OF_YEAR) != 365) { + status++; + s = "Wrong Date : 12/31/00 & set(YEAR,2001) ---> " + gc.getTime().toString(); + } else { + s = "12/31/00 & set(YEAR,2001) = " + gc.getTime().toString(); + } + } catch (Exception ex) { + status++; + s = "Exception occurred for 12/31/00 & set(YEAR,2001) : " + ex; + } + if (status > 0) { + errln(s); + } else { + logln(s); + } + } + + public static void main(String[] args) throws Exception { + new bug4401223().run(args); + } +} diff --git a/test/java/util/Calendar/bug4409072.java b/test/java/util/Calendar/bug4409072.java new file mode 100644 index 0000000000..d8e56a4554 --- /dev/null +++ b/test/java/util/Calendar/bug4409072.java @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4409072 + * @summary tests for set(), add(), and roll() with various week parameters. + * @library /java/text/testlib + */ + +import java.util.*; +import static java.util.Calendar.*; + +public class bug4409072 extends IntlTest { + + public static void main(String[] args) throws Exception { + new bug4409072().run(args); + } + + /* Confirm some public methods' behavior in Calendar. + * (e.g. add(), roll(), set()) + */ + public void Test4409072() { + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + + Locale savedLocale = Locale.getDefault(); + TimeZone savedTZ = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + testSet(); + testAdd(); + testRoll(); + } finally { + TimeZone.setDefault(savedTZ); + Locale.setDefault(savedLocale); + } + } + + /* + * Golden data for set() test + */ + static final int[][][] resultWOMForSetTest = { + { /* For year1998 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11}, + /* Mon */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, + /* Tue */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, + /* Wed */ {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, + /* Thu */ {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, + /* Fri */ {10,27}, {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, + /* Sat */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11}, {11,11}, + }, + { /* For year1999 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, + /* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, + /* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, + /* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, + /* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, + /* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, + /* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10}, + }, + { /* For year2000 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, + /* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, + /* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, + /* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, + /* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, + /* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, + /* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, + }, + { /* For year2001 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, + /* Mon */ {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, + /* Tue */ {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, + /* Wed */ {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, + /* Thu */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, + /* Fri */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, + /* Sat */ {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, + }, + { /* For year2002 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, + /* Mon */ {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, + /* Tue */ {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, + /* Wed */ {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, + /* Thu */ {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, + /* Fri */ {10,29}, {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, + /* Sat */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11,13}, + }, + { /* For year2003 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12}, + /* Mon */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, + /* Tue */ {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, + /* Wed */ {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, + /* Thu */ {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, + /* Fri */ {10,28}, {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, + /* Sat */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12}, {11,12}, + }, + { /* For year2004 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, + /* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, + /* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, + /* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, + /* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, + /* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, + /* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10}, + }, + { /* For year2005 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, + /* Mon */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, + /* Tue */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, + /* Wed */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, + /* Thu */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, + /* Fri */ {10,25}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, + /* Sat */ {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, + }, + { /* For year2006 */ + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, + /* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, + /* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, + /* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, + /* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, + /* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, + /* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, + }, + }; + + static final int[][][] resultWOYForSetTest1 = { + { /* For year1998 */ + /* FirstDayOfWeek = Sunday */ + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9}, + {1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9}, + /* FirstDayOfWeek = Monday */ + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, + {1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9}, + /* FirstDayOfWeek = Tuesday */ + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, + {1998, 0, 2}, {1998, 0, 9}, {1998, 0, 9}, + /* FirstDayOfWeek = Wednesday */ + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9}, + /* FirstDayOfWeek = Thursday */ + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, + /* FirstDayOfWeek = Friday */ + {1997,11,26}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, + /* FirstDayOfWeek = Saturday */ + {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9}, {1998, 0, 9}, + {1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9}, + }, + { /* For year1999 */ + /* FirstDayOfWeek = Sunday */ + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8}, + {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, + /* FirstDayOfWeek = Monday */ + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8}, + {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, + /* FirstDayOfWeek = Tuesday */ + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, + {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, + /* FirstDayOfWeek = Wednesday */ + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, + {1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8}, + /* FirstDayOfWeek = Thursday */ + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8}, + /* FirstDayOfWeek = Friday */ + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, + {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, + /* FirstDayOfWeek = Saturday */ + {1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, + {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, + }, + { /* For year2000 */ + /* FirstDayOfWeek = Sunday */ + {1999,11,31}, {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, + {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, + /* FirstDayOfWeek = Monday */ + {1999,11,31}, {1999,11,31}, {2000, 0, 7}, {2000, 0, 7}, + {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, + /* FirstDayOfWeek = Tuesday */ + {1999,11,31}, {1999,11,31}, {1999,11,31}, {2000, 0, 7}, + {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, + /* FirstDayOfWeek = Wednesday */ + {1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31}, + {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, + /* FirstDayOfWeek = Thursday */ + {1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31}, + {1999,11,31}, {2000, 0, 7}, {2000, 0, 7}, + /* FirstDayOfWeek = Friday */ + {1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31}, + {1999,11,31}, {1999,11,31}, {2000, 0, 7}, + /* FirstDayOfWeek = Saturday */ + {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, + {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, + }, + { /* For year2001 */ + /* FirstDayOfWeek = Sunday */ + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + {2001, 0, 5}, {2001, 0, 5}, {2001, 0,12}, + /* FirstDayOfWeek = Monday */ + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + /* FirstDayOfWeek = Tuesday */ + {2000,11,29}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + /* FirstDayOfWeek = Wednesday */ + {2000,11,29}, {2000,11,29}, {2001, 0, 5}, {2001, 0, 5}, + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + /* FirstDayOfWeek = Thursday */ + {2000,11,29}, {2000,11,29}, {2000,11,29}, {2001, 0, 5}, + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + /* FirstDayOfWeek = Friday */ + {2000,11,29}, {2000,11,29}, {2000,11,29}, {2000,11,29}, + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + /* FirstDayOfWeek = Saturday */ + {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, + {2001, 0, 5}, {2001, 0,12}, {2001, 0,12}, + }, + { /* For year2002 */ + /* FirstDayOfWeek = Sunday */ + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + {2002, 0, 4}, {2002, 0,11}, {2002, 0,11}, + /* FirstDayOfWeek = Monday */ + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + {2002, 0, 4}, {2002, 0, 4}, {2002, 0,11}, + /* FirstDayOfWeek = Tuesday */ + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + /* FirstDayOfWeek = Wednesday */ + {2001,11,28}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + /* FirstDayOfWeek = Thursday */ + {2001,11,28}, {2001,11,28}, {2002, 0, 4}, {2002, 0, 4}, + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + /* FirstDayOfWeek = Friday */ + {2001,11,28}, {2001,11,28}, {2001,11,28}, {2002, 0, 4}, + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + /* FirstDayOfWeek = Saturday */ + {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, + {2002, 0,11}, {2002, 0,11}, {2002, 0,11}, + }, + { /* For year2003 */ + /* FirstDayOfWeek = Sunday */ + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + {2003, 0,10}, {2003, 0,10}, {2003, 0,10}, + /* FirstDayOfWeek = Monday */ + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + {2003, 0, 3}, {2003, 0,10}, {2003, 0,10}, + /* FirstDayOfWeek = Tuesday */ + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + {2003, 0, 3}, {2003, 0, 3}, {2003, 0,10}, + /* FirstDayOfWeek = Wednesday */ + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + /* FirstDayOfWeek = Thursday */ + {2002,11,27}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + /* FirstDayOfWeek = Friday */ + {2002,11,27}, {2002,11,27}, {2003, 0, 3}, {2003, 0, 3}, + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, + /* FirstDayOfWeek = Saturday */ + {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0,10}, + {2003, 0,10}, {2003, 0,10}, {2003, 0,10}, + }, + { /* For year2004 */ + /* FirstDayOfWeek = Sunday */ + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9}, + {2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9}, + /* FirstDayOfWeek = Monday */ + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, + {2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9}, + /* FirstDayOfWeek = Tuesday */ + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, + {2004, 0, 2}, {2004, 0, 9}, {2004, 0, 9}, + /* FirstDayOfWeek = Wednesday */ + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9}, + /* FirstDayOfWeek = Thursday */ + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, + /* FirstDayOfWeek = Friday */ + {2003,11,26}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, + /* FirstDayOfWeek = Saturday */ + {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9}, {2004, 0, 9}, + {2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9}, + }, + { /* For year2005 */ + /* FirstDayOfWeek = Sunday */ + {2004,11,31}, {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, + {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, + /* FirstDayOfWeek = Monday */ + {2004,11,31}, {2004,11,31}, {2005, 0, 7}, {2005, 0, 7}, + {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, + /* FirstDayOfWeek = Tuesday */ + {2004,11,31}, {2004,11,31}, {2004,11,31}, {2005, 0, 7}, + {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, + /* FirstDayOfWeek = Wednesday */ + {2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31}, + {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, + /* FirstDayOfWeek = Thursday */ + {2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31}, + {2004,11,31}, {2005, 0, 7}, {2005, 0, 7}, + /* FirstDayOfWeek = Friday */ + {2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31}, + {2004,11,31}, {2004,11,31}, {2005, 0, 7}, + /* FirstDayOfWeek = Saturday */ + {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, + {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, + }, + { /* For year2006 */ + /* FirstDayOfWeek = Sunday */ + {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + /* FirstDayOfWeek = Monday */ + {2005,11,30}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + /* FirstDayOfWeek = Tuesday */ + {2005,11,30}, {2005,11,30}, {2006, 0, 6}, {2006, 0, 6}, + {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + /* FirstDayOfWeek = Wednesday */ + {2005,11,30}, {2005,11,30}, {2005,11,30}, {2006, 0, 6}, + {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + /* FirstDayOfWeek = Thursday */ + {2005,11,30}, {2005,11,30}, {2005,11,30}, {2005,11,30}, + {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + /* FirstDayOfWeek = Friday */ + {2005,11,30}, {2005,11,30}, {2005,11,30}, {2005,11,30}, + {2005,11,30}, {2006, 0, 6}, {2006, 0, 6}, + /* FirstDayOfWeek = Saturday */ + {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, + {2006, 0, 6}, {2006, 0, 6}, {2006, 0,13}, + } + }; + + static final int[][] resultWOYForSetTest2 = { + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, + /* Mon */ {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, + /* Tue */ {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, + /* Wed */ {4,25}, {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, + /* Thu */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8}, {5, 8}, + /* Fri */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8}, + /* Sat */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, + }; + + /** + * Test for set() + */ + void testSet() { + boolean noerror = true; + Calendar cal = Calendar.getInstance(); + int sYear=1998; + int eYear=2006; + + // Loop for FirstDayOfWeek: SUNDAY..SATURDAY + for (int dow = SUNDAY; dow <= SATURDAY; dow++) { + + // Loop for MinimalDaysInFirstWeek: 1..7 + for (int minDow = 1; minDow <= 7; minDow++) { + int index = (dow-1)*7 + (minDow-1); + + cal.clear(); + cal.setLenient(true); + cal.setMinimalDaysInFirstWeek(minDow); + cal.setFirstDayOfWeek(dow); + cal.set(YEAR, 2005); + cal.set(DAY_OF_WEEK, WEDNESDAY); + cal.set(WEEK_OF_YEAR, 22); + + int y = 2005; + int m = resultWOYForSetTest2[index][0]; + int d = resultWOYForSetTest2[index][1]; + int year = cal.get(YEAR); + int month = cal.get(MONTH); + int date = cal.get(DATE); + + if (cal.get(WEEK_OF_YEAR) != 22) { + noerror = false; + errln("Failed : set(WEEK_OF_YEAR=22)" + + " *** get(WEEK_OF_YEAR=" + + cal.get(WEEK_OF_YEAR) + ")" + + ", got " + (month+1)+"/"+date+"/"+year + + ", expected " + (m+1)+"/"+d+"/"+2005 + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } else if ((year != y) || (month != m) || (date != d)) { + noerror = false; + errln("Failed : set(WEEK_OF_YEAR=22)" + + " got " + (month+1)+"/"+date+"/"+year + + ", expected " + (m+1)+"/"+d+"/"+y + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + + for (int targetYear = sYear; targetYear<= eYear; targetYear++) { + cal.clear(); + cal.setLenient(true); + cal.setMinimalDaysInFirstWeek(minDow); + cal.setFirstDayOfWeek(dow); + cal.set(YEAR, targetYear); + cal.set(DAY_OF_WEEK, FRIDAY); + cal.set(MONTH, DECEMBER); + cal.set(WEEK_OF_MONTH, 1); + + y = targetYear; + m = resultWOMForSetTest[targetYear-sYear][index][0]; + d = resultWOMForSetTest[targetYear-sYear][index][1]; + year = cal.get(YEAR); + month = cal.get(MONTH); + date = cal.get(DATE); + + if ((year != y) || (month != m) || (date != d)) { + noerror = false; + errln("Failed : set(WEEK_OF_MONTH=1)" + + " got " + (month+1)+"/"+date+"/"+year + + ", expected " + (m+1)+"/"+d+"/"+y + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + + cal.clear(); + cal.setLenient(true); + cal.setMinimalDaysInFirstWeek(minDow); + cal.setFirstDayOfWeek(dow); + cal.set(YEAR, targetYear); + cal.set(DAY_OF_WEEK, FRIDAY); + cal.set(WEEK_OF_YEAR, 1); + + y = resultWOYForSetTest1[targetYear-sYear][index][0]; + m = resultWOYForSetTest1[targetYear-sYear][index][1]; + d = resultWOYForSetTest1[targetYear-sYear][index][2]; + year = cal.get(YEAR); + month = cal.get(MONTH); + date = cal.get(DATE); + + if (cal.get(WEEK_OF_YEAR) != 1) { + noerror = false; + errln("Failed : set(WEEK_OF_YEAR=1)" + + " *** get(WEEK_OF_YEAR=" + + cal.get(WEEK_OF_YEAR) + ")" + + ", got " + (month+1)+"/"+date+"/"+year + + ", expected " + (m+1)+"/"+d+"/"+y + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } else if ((year != y) || (month != m) || (date != d)) { + noerror = false; + errln("Failed : set(WEEK_OF_YEAR=1)" + + " got " + (month+1)+"/"+date+"/"+year + + ", expected " + (m+1)+"/"+d+"/"+y + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + } + } + } + + if (noerror) { + logln("Passed : set() test"); + } + } + + /** + * Test for add() + */ + void testAdd() { + boolean noerror = true; + Calendar cal = Calendar.getInstance(); + + // Loop for FirstDayOfWeek: SUNDAY..SATURDAY + for (int dow = SUNDAY; dow <= SATURDAY; dow++) { + + // Loop for MinimalDaysInFirstWeek: 1..7 + for (int minDow = 1; minDow <= 7; minDow++) { + int oldWOY, newWOY; + + cal.clear(); + cal.setLenient(true); + cal.setMinimalDaysInFirstWeek(minDow); + cal.setFirstDayOfWeek(dow); + cal.set(2005, DECEMBER, 7); + oldWOY = cal.get(WEEK_OF_YEAR); + + for (int cnt = 0; cnt < 7; cnt++) { + cal.add(WEEK_OF_YEAR, 1); + } + + int year = cal.get(YEAR); + int month = cal.get(MONTH); + int date = cal.get(DATE); + + if ((year != 2006) || (month != 0) || (date != 25)) { + noerror = false; + errln("Failed : add(WEEK_OF_YEAR+1)" + + " got " + (month+1)+"/"+date+"/"+year + + ", expected 1/25/2006" + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + + for (int cnt = 0; cnt < 10; cnt++) { + cal.add(WEEK_OF_YEAR, -1); + } + newWOY = cal.get(WEEK_OF_YEAR); + + year = cal.get(YEAR); + month = cal.get(MONTH); + date = cal.get(DATE); + + if ((oldWOY - newWOY) != 3) { + errln("Failed : add(WEEK_OF_YEAR-1)" + + " got " + (month+1)+"/"+date+"/"+year + + ", expected 11/16/2005" + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow + + ", WEEK_OF_YEAR=" + newWOY + + " should be " + (oldWOY-3)); + } else if ((year != 2005) || (month != 10) || (date != 16)) { + errln("Failed : add(-1)" + + " got " + (month+1)+"/"+date+"/"+year + + ", expected 11/16/2005" + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + } + } + + if (noerror) { + logln("Passed : add() test"); + } + } + + /* + * Golden data for roll() test + */ + static final int[] resultWOMForRollTest = { + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ 1, 1, 1, 26, 26, 26, 26, + /* Mon */ 1, 1, 1, 1, 26, 26, 26, + /* Tue */ 31, 31, 31, 31, 31, 24, 24, + /* Wed */ 31, 31, 31, 31, 31, 31, 24, + /* Thu */ 31, 31, 31, 31, 31, 31, 31, + /* Fri */ 1, 31, 31, 31, 31, 31, 31, + /* Sat */ 1, 1, 31, 31, 31, 31, 31, + }; + + static final int[][] resultWOYForRollTest = { + /* Min = 1 2 3 4 5 6 7 */ + /* Sun */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, + /* Mon */ {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, + /* Tue */ {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, + /* Wed */ {1, 2}, {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, + /* Thu */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2}, {1, 2}, + /* Fri */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2}, + /* Sat */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, + }; + + /** + * Test for roll() + */ + void testRoll() { + boolean noerror = true; + Calendar cal = Calendar.getInstance(); + + // Loop for FirstDayOfWeek: SUNDAY..SATURDAY + for (int dow = SUNDAY; dow <= SATURDAY; dow++) { + + // Loop for MinimalDaysInFirstWeek: 1..7 + for (int minDow = 1; minDow <= 7; minDow++) { + int oldWOY, newWOY; + int index = (dow-1)*7 + (minDow-1); + + cal.clear(); + cal.setLenient(true); + cal.setMinimalDaysInFirstWeek(minDow); + cal.setFirstDayOfWeek(dow); + cal.set(2005, DECEMBER, 12); + oldWOY = cal.get(WEEK_OF_YEAR); + for (int cnt = 0; cnt < 2; cnt++) { + cal.roll(WEEK_OF_MONTH, -1); + } + int y = 2005; + int m = DECEMBER; + int d = resultWOMForRollTest[index]; + int year = cal.get(YEAR); + int month = cal.get(MONTH); + int date = cal.get(DATE); + + if ((year != y) || (month != m) || (date != d)) { + noerror = false; + errln("Failed : roll(WEEK_OF_MONTH-1)" + + " got " + (month+1) + "/" + date + "/" + year + + ", expected " + (m+1) + "/" + d + "/" + y + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + + cal.clear(); + cal.setLenient(true); + cal.setMinimalDaysInFirstWeek(minDow); + cal.setFirstDayOfWeek(dow); + cal.set(2005, DECEMBER, 7); + oldWOY = cal.get(WEEK_OF_YEAR); + + for (int cnt = 0; cnt < 7; cnt++) { + cal.roll(WEEK_OF_YEAR, 1); + } + + y = 2005; + m = resultWOYForRollTest[index][0]; + d = resultWOYForRollTest[index][1]; + year = cal.get(YEAR); + month = cal.get(MONTH); + date = cal.get(DATE); + + if ((year != y) || (month != m) || (date != d)) { + noerror = false; + errln("Failed : roll(WEEK_OF_YEAR+1)" + + " got " + (month+1) + "/" + date + "/" + year + + ", expected " + (m+1) + "/" + d + "/" + y + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + + for (int cnt = 0; cnt < 10; cnt++) { + cal.roll(WEEK_OF_YEAR, -1); + } + newWOY = cal.get(WEEK_OF_YEAR); + + y = 2005; + m = NOVEMBER; + d = 16; + year = cal.get(YEAR); + month = cal.get(MONTH); + date = cal.get(DATE); + + if ((year != y) || (month != m) || (date != d)) { + noerror = false; + errln("Failed : roll(WEEK_OF_YEAR-1)" + + " got " + (month+1)+"/"+date+"/"+year + + ", expected " + (m+1)+"/"+d+"/"+y + + ", MinFirstDOW=" + minDow + + ", FirstDOW=" + dow); + } + } + } + + if (noerror) { + logln("Passed : roll() test"); + } + } +} diff --git a/test/java/util/Calendar/bug4514831.java b/test/java/util/Calendar/bug4514831.java new file mode 100644 index 0000000000..9d635e2616 --- /dev/null +++ b/test/java/util/Calendar/bug4514831.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4514831 + * @summary Confirm that GregorianCalendar.roll() works properly during transition from Daylight Saving Time to Standard Time. + */ + +import java.util.*; + +public class bug4514831 { + + public static void main(String[] args) { + Locale savedLocale = Locale.getDefault(); + TimeZone savedTimeZone = TimeZone.getDefault(); + boolean err = false; + + String golden_data1 ="27-28 28-29 29-30 30-31 31-1 1-2 2-3 "; + String golden_data2 ="27-28 28-29 29-30 30-31 31-25 25-26 26-27 "; + String golden_data3 ="1-8 8-15 15-22 22-29 29-1 1-8 8-15 "; + + try { + Locale.setDefault(Locale.US); + TimeZone.setDefault(TimeZone.getTimeZone("US/Pacific")); + + String test_roll = ""; + GregorianCalendar c_roll = new GregorianCalendar(2001, Calendar.OCTOBER, 27); + for (int i=0; i < 7; i++) { + test_roll += c_roll.get(c_roll.DAY_OF_MONTH) + "-"; + c_roll.roll(c_roll.DAY_OF_YEAR, true); + test_roll += c_roll.get(c_roll.DAY_OF_MONTH) + " "; + } + if (!test_roll.equals(golden_data1)) { + err = true; + System.err.println("Wrong roll(DAY_OF_YEAR) transition: got "+ + test_roll + "expected " + golden_data1); + } + + test_roll = ""; + c_roll = new GregorianCalendar(2001, Calendar.OCTOBER, 27); + c_roll.setFirstDayOfWeek(Calendar.THURSDAY); + for (int i=0; i < 7; i++) { + test_roll += c_roll.get(c_roll.DAY_OF_MONTH) + "-"; + c_roll.roll(c_roll.DAY_OF_WEEK, true); + test_roll += c_roll.get(c_roll.DAY_OF_MONTH) + " "; + } + if (!test_roll.equals(golden_data2)) { + err = true; + System.err.println("Wrong roll(DAY_OF_WEEK) transition: got "+ + test_roll + "expected " + golden_data2); + } + + test_roll = ""; + c_roll = new GregorianCalendar(2001, Calendar.OCTOBER, 1); + for (int i=0; i < 7; i++) { + test_roll += c_roll.get(c_roll.DAY_OF_MONTH) + "-"; + c_roll.roll(c_roll.DAY_OF_WEEK_IN_MONTH, true); + test_roll += c_roll.get(c_roll.DAY_OF_MONTH) + " "; + } + if (!test_roll.equals(golden_data3)) { + err = true; + System.err.println("Wrong roll(DAY_OF_WEEK_IN_MONTH) transition: got "+ + test_roll + "expected " + golden_data3); + } + } finally { + Locale.setDefault(savedLocale); + TimeZone.setDefault(savedTimeZone); + } + + if (err) { + throw new RuntimeException("Wrong roll() transition"); + } + } +} diff --git a/test/java/util/Collections/NCopies.java b/test/java/util/Collections/NCopies.java index db1a61b0dc..2458386fb6 100644 --- a/test/java/util/Collections/NCopies.java +++ b/test/java/util/Collections/NCopies.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,6 +82,56 @@ public class NCopies { checkEmpty(x.subList(x.size()/2, x.size()/2)); } + private static <T> List<T> referenceNCopies(int n, T o) { + // A simplest correct implementation of nCopies to compare with the actual optimized implementation + return new AbstractList<T>() { + public int size() { return n; } + + public T get(int index) { + check(0 <= index && index < n, "Index is incorrect"); + return o; + } + }; + } + + private static void checkHashCode() { + int[] sizes = {0, 1, 2, 3, 5, 10, 31, 32, 100, 1000}; + String[] elements = {null, "non-null"}; + for (int size : sizes) { + for (String element : elements) { + int expectedHashCode = referenceNCopies(size, element).hashCode(); + int actualHashCode = Collections.nCopies(size, element).hashCode(); + check(expectedHashCode == actualHashCode, + "Collections.nCopies(" + size + ", " + element + ").hashCode()"); + } + } + } + + private static void checkEquals() { + int[][] sizePairs = {{0, 0}, {0, 1}, {1, 0}, {1, 1}, {1, 2}, {2, 1}}; + String[] elements = {null, "non-null"}; + for (int[] pair : sizePairs) { + for (String element : elements) { + boolean equal = pair[0] == pair[1]; + String msg = "[" + pair[0] + ", " + element + "] <=> [" + pair[1] + ", " + element + "]"; + check(equal == Collections.nCopies(pair[0], element).equals(Collections.nCopies(pair[1], element)), msg); + check(equal == Collections.nCopies(pair[0], element).equals(referenceNCopies(pair[1], element)), msg); + check(equal == referenceNCopies(pair[0], element).equals(Collections.nCopies(pair[1], element)), msg); + } + } + List<String> nulls = Collections.nCopies(10, null); + List<String> nonNulls = Collections.nCopies(10, "non-null"); + List<String> nullsButOne = new ArrayList<>(nulls); + nullsButOne.set(9, "non-null"); + List<String> nonNullsButOne = new ArrayList<>(nonNulls); + nonNullsButOne.set(9, null); + check(!nulls.equals(nonNulls)); + check(!nulls.equals(nullsButOne)); + check(!nulls.equals(nonNullsButOne)); + check(!nonNulls.equals(nonNullsButOne)); + check(Collections.nCopies(0, null).equals(Collections.nCopies(0, "non-null"))); + } + public static void main(String[] args) { try { List<String> empty = Collections.nCopies(0, "foo"); @@ -92,6 +142,10 @@ public class NCopies { check(foos.size() == 42); checkFoos(foos.subList(foos.size()/2, foos.size()-1)); + checkHashCode(); + + checkEquals(); + } catch (Throwable t) { unexpected(t); } System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); diff --git a/test/java/util/Currency/ValidateISO4217.java b/test/java/util/Currency/ValidateISO4217.java index 568de12d4b..2d3eab1f04 100644 --- a/test/java/util/Currency/ValidateISO4217.java +++ b/test/java/util/Currency/ValidateISO4217.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,8 @@ /* * @test * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759 - * 8074350 8074351 8145952 + * 8074350 8074351 8145952 8187946 8193552 8202026 8204269 + * 8208746 8209775 * @summary Validate ISO 4217 data for Currency class. */ @@ -93,7 +94,11 @@ public class ValidateISO4217 { /* Codes that are obsolete, do not have related country */ static final String otherCodes = - "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-BYR-CHE-CHW-CLF-COU-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR"; + "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-BYR-CHE-CHW-CLF-COU-CUC-CYP-" + + "DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LTL-LUF-LVL-MGF-MRO-MTL-MXV-MZM-NLG-" + + "PTE-ROL-RUR-SDD-SIT-SKK-SRG-STD-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-" + + "XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-" + + "YUM-ZMK-ZWD-ZWN-ZWR"; static boolean err = false; diff --git a/test/java/util/Currency/tablea1.txt b/test/java/util/Currency/tablea1.txt index 10501b0d2e..706c94623b 100644 --- a/test/java/util/Currency/tablea1.txt +++ b/test/java/util/Currency/tablea1.txt @@ -1,12 +1,12 @@ # # -# Amendments up until ISO 4217 AMENDMENT NUMBER 162 -# (As of 30 Auguest 2016) +# Amendments up until ISO 4217 AMENDMENT NUMBER 169 +# (As of 27 Aug 2018) # # Version FILEVERSION=2 -DATAVERSION=162 +DATAVERSION=169 # ISO 4217 currency data AF AFN 971 2 @@ -135,14 +135,14 @@ KR KRW 410 0 KW KWD 414 3 KG KGS 417 2 LA LAK 418 2 -LV LVL 428 2 2013-12-31-22-00-00 EUR 978 2 +LV EUR 978 2 LB LBP 422 2 #LS ZAR 710 2 LS LSL 426 2 LR LRD 430 2 LY LYD 434 3 LI CHF 756 2 -LT LTL 440 2 2014-12-31-22-00-00 EUR 978 2 +LT EUR 978 2 LU EUR 978 2 MO MOP 446 2 MK MKD 807 2 @@ -154,7 +154,7 @@ ML XOF 952 0 MT EUR 978 2 MH USD 840 2 MQ EUR 978 2 -MR MRO 478 2 +MR MRU 929 2 MU MUR 480 2 YT EUR 978 2 MX MXN 484 2 @@ -210,7 +210,7 @@ PM EUR 978 2 VC XCD 951 2 WS WST 882 2 SM EUR 978 2 -ST STD 678 2 +ST STN 930 2 SA SAR 682 2 SN XOF 952 0 # MA 134 @@ -268,7 +268,7 @@ UY UYU 858 2 #UY UYI 940 0 UZ UZS 860 2 VU VUV 548 0 -VE VEF 937 2 +VE VES 928 2 VN VND 704 0 VG USD 840 2 VI USD 840 2 diff --git a/test/java/util/Date/Bug4955000.java b/test/java/util/Date/Bug4955000.java new file mode 100644 index 0000000000..c94b23868c --- /dev/null +++ b/test/java/util/Date/Bug4955000.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4955000 + * @summary Make sure that a Date and a GregorianCalendar produce the + * same date/time. Both are new implementations in 1.5. + */ + +import java.util.*; +import static java.util.GregorianCalendar.*; + +@SuppressWarnings("deprecation") +public class Bug4955000 { + // Tests for Date.UTC(), derived from JCK + // Date.miscTests.Date1025 and Date2015 + public static void main(String[] args) { + TimeZone defaultTZ = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("NST")); + GregorianCalendar gc = new GregorianCalendar(TimeZone.getTimeZone("UTC")); + // Date1025 + int[] years1 = { + Integer.MIN_VALUE, + Integer.MIN_VALUE + 1, + gc.getMinimum(YEAR) - 1, + gc.getMaximum(YEAR) + 1, + Integer.MAX_VALUE - 1, + Integer.MAX_VALUE + }; + for (int i = 0; i < years1.length; i++) { + gc.clear(); + gc.set(years1[i], gc.JANUARY, 1); + long t = gc.getTimeInMillis(); + long utc = Date.UTC(years1[i] - 1900, 1-1, 1, + 0, 0, 0); // Jan 1 00:00:00 + if (t != utc) { + throw new RuntimeException("t (" + t + ") != utc (" + utc +")"); + } + } + + // Date2015 + int years[] = { + gc.getGreatestMinimum(YEAR), + gc.getGreatestMinimum(YEAR) + 1, + -1, + 0, + 1, + gc.getLeastMaximum(YEAR) - 1, + gc.getLeastMaximum(YEAR) + }; + + int months[] = { + gc.getMinimum(MONTH), + gc.getMinimum(MONTH) + 1, + gc.getMaximum(MONTH) - 1, + gc.getMaximum(MONTH) + }; + + int dates[] = { + gc.getMinimum(DAY_OF_MONTH), + gc.getMinimum(DAY_OF_MONTH) + 1, + gc.getMaximum(DAY_OF_MONTH) - 1, + gc.getMaximum(DAY_OF_MONTH) + }; + + int hs[] = { + gc.getMinimum(HOUR), + gc.getMinimum(HOUR) + 1, + gc.getMaximum(HOUR) - 1, + gc.getMaximum(HOUR) + }; + + int ms[] = { + gc.getMinimum(MINUTE), + gc.getMinimum(MINUTE) + 1, + gc.getMaximum(MINUTE) - 1, + gc.getMaximum(MINUTE) + }; + + int ss[] = { + gc.getMinimum(SECOND), + gc.getMinimum(SECOND) + 1, + gc.getMaximum(SECOND) - 1, + gc.getMaximum(SECOND) + }; + + for(int i = 0; i < years.length; i++) { + for(int j = 0; j < months.length; j++) { + for(int k = 0; k < dates.length; k++) { + for(int m = 0; m < hs.length; m++) { + for(int n = 0; n < ms.length; n++) { + for(int p = 0; p < ss.length; p++) { + int year = years[i] - 1900; + int month = months[j]; + int date = dates[k]; + int hours = hs[m]; + int minutes = ms[n]; + int seconds = ss[p]; + + long result = Date.UTC(year, month, date, + hours, minutes, seconds); + + gc.clear(); + gc.set(year + 1900, month, date, hours, minutes, seconds); + + long expected = gc.getTime().getTime(); + + if (expected != result) { + throw new RuntimeException("expected (" + expected + + ") != result (" + result +")"); + } + } + } + } + } + } + } + } finally { + TimeZone.setDefault(defaultTZ); + } + } +} diff --git a/test/java/util/Date/DateGregorianCalendarTest.java b/test/java/util/Date/DateGregorianCalendarTest.java new file mode 100644 index 0000000000..49dbc8bc41 --- /dev/null +++ b/test/java/util/Date/DateGregorianCalendarTest.java @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4614842 + * @summary Make sure that a Date and a GregorianCalendar produce the same date/time. Both are new implementations in 1.5. + * @run main DateGregorianCalendarTest 15 + */ + +import java.util.*; +import static java.util.GregorianCalendar.*; + +// Usage: java DateGregorianCalendarTest [duration] + +@SuppressWarnings("deprecation") +public class DateGregorianCalendarTest { + static volatile boolean runrun = true; + static int nThreads; + + public static void main(String[] args) { + int duration = 600; + if (args.length == 1) { + duration = Math.max(10, Integer.parseInt(args[0])); + } + + TimeZone savedTZ = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + Thread[] t = new Thread[10]; // for future bugs... + int index = 0; + t[index++] = new Thread(new Runnable() { + public void run() { + GregorianCalendar gc = new GregorianCalendar(); + + long delta = (long)(279 * 365.2422 * 24 * 60 * 60 * 1000); + long count = 0; + try { + for (long t = Long.MIN_VALUE; runrun && t < Long.MAX_VALUE-delta; t += delta) { + gc.setTimeInMillis(t); + Date date = new Date(t); + int y; + if (!((y = gc.get(YEAR)) == (date.getYear()+1900) && + gc.get(MONTH) == date.getMonth() && + gc.get(DAY_OF_MONTH) == date.getDate() && + gc.get(HOUR_OF_DAY) == date.getHours() && + gc.get(MINUTE) == date.getMinutes() && + gc.get(SECOND) == date.getSeconds())) { + throw new RuntimeException("GregorinCalendar and Date returned different dates." + +" (millis=" + t + ")\n" + +"GC=" + gc + "\nDate=" + date); + } + ++count; + if (y >= 1) { + delta = (long)(365.2422 * 24 * 60 * 60 * 1000); + } + if (y >= 1970) { + delta = (24 * 60 * 60 * 1000); + } + if (y >= 2039) { + delta = (long)(279 * 365.2422 * 24 * 60 * 60 * 1000); + } + } + if (runrun) { + System.out.println("Part I (count="+count+"): Passed"); + } else { + System.out.println("Part I (count="+count+"): Incomplete"); + } + } catch (RuntimeException e) { + System.out.println("Part I (count="+count+"): FAILED"); + runrun = false; + throw e; + } finally { + decrementCounter(); + } + } + }); + + t[index++] = new Thread(new Runnable() { + public void run() { + GregorianCalendar gc = new GregorianCalendar(); + + long count = 0; + int delta; + try { + for (long year = Integer.MIN_VALUE+1900; + runrun && year <= Integer.MAX_VALUE; year += delta) { + checkTimes(gc, year, JANUARY, 1, 0, 0, 0); + ++count; + delta = getDelta((int)year); + } + + for (long month = Integer.MIN_VALUE; + runrun && month <= Integer.MAX_VALUE; month += delta) { + checkTimes(gc, 1900, month, 1, 0, 0, 0); + ++count; + delta = getDelta(gc.get(YEAR)); + } + + for (long dayOfMonth = Integer.MIN_VALUE; + runrun && dayOfMonth <= Integer.MAX_VALUE; dayOfMonth += delta) { + checkTimes(gc, 1900, JANUARY, dayOfMonth, 0, 0, 0); + ++count; + delta = getDelta(gc.get(YEAR)); + } + if (runrun) { + System.out.println("Part II (count="+count+"): Passed"); + } else { + System.out.println("Part II (count="+count+"): Incomplete"); + } + } catch (RuntimeException e) { + System.out.println("Part II (count="+count+"): FAILED"); + runrun = false; + throw e; + } finally { + decrementCounter(); + } + } + }); + + // t3 takes more than 10 minutes (on Ultra-60 450MHz) without + // the 4936355 fix due to getting the small delta. + t[index++] = new Thread(new Runnable() { + public void run() { + GregorianCalendar gc = new GregorianCalendar(); + + long count = 0; + int delta; + try { + for (long hourOfDay = Integer.MIN_VALUE; + runrun && hourOfDay <= Integer.MAX_VALUE; hourOfDay += delta) { + checkTimes(gc, 1970, JANUARY, 1, hourOfDay, 0, 0); + ++count; + delta = getDelta(gc.get(YEAR)); + } + for (long minutes = Integer.MIN_VALUE; + runrun && minutes <= Integer.MAX_VALUE; minutes += delta) { + checkTimes(gc, 1970, JANUARY, 1, 0, minutes, 0); + ++count; + delta = getDelta(gc.get(YEAR)) * 60; + } + for (long seconds = Integer.MIN_VALUE; + runrun && seconds <= Integer.MAX_VALUE; seconds += delta) { + checkTimes(gc, 1970, JANUARY, 1, 0, 0, seconds); + ++count; + delta = getDelta(gc.get(YEAR)) * 60 * 60; + } + if (runrun) { + System.out.println("Part III (count="+count+"): Passed"); + } else { + System.out.println("Part III (count="+count+"): Incomplete"); + } + } catch (RuntimeException e) { + System.out.println("Part III (count="+count+"): FAILED"); + runrun = false; + throw e; + } finally { + decrementCounter(); + } + } + }); + + for (int i = 0; i < index; i++) { + incrementCounter(); + t[i].start(); + } + + try { + for (int i = 0; getCounter() > 0 && i < duration; i++) { + Thread.sleep(1000); + } + runrun = false; + for (int i = 0; i < index; i++) { + t[i].join(); + } + } catch (InterruptedException e) { + } + } finally { + TimeZone.setDefault(savedTZ); + } + } + + static void checkTimes(GregorianCalendar gc, long year, long month, long dayOfMonth, + long hourOfDay, long minutes, long seconds) { + gc.clear(); + gc.set((int)year, (int)month, (int)dayOfMonth, (int)hourOfDay, (int)minutes, (int)seconds); + long time = gc.getTimeInMillis(); + Date date = new Date((int)year - 1900, (int)month, (int)dayOfMonth, + (int)hourOfDay, (int)minutes, (int)seconds); + long time2 = date.getTime(); + if (time != time2) { + throw new RuntimeException("GregorinCalendar and Date returned different values.\n" + +"year="+year+", month="+month+", dayOfMonth="+dayOfMonth + +"\nhourOfDay="+hourOfDay+", minutes="+minutes+", seconds="+seconds + +"\ntime=" + time + ", time2=" + time2 + +"\nGC=" + gc + "\nDate=" + date); + } + } + + static final int getDelta(int year) { + return (year >= 1970 && year <= 2039) ? 1 : 1<<13; + } + + synchronized static void incrementCounter() { + nThreads++; + } + + synchronized static void decrementCounter() { + nThreads--; + } + + synchronized static int getCounter() { + return nThreads; + } +} diff --git a/test/java/util/Date/DateRegression.java b/test/java/util/Date/DateRegression.java new file mode 100644 index 0000000000..70d8a5bf70 --- /dev/null +++ b/test/java/util/Date/DateRegression.java @@ -0,0 +1,241 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4023247 4027685 4032037 4072029 4073003 4118010 4120606 4133833 4136916 6274757 6314387 + * @library /java/text/testlib + */ + +import java.util.*; + +@SuppressWarnings("deprecation") +public class DateRegression extends IntlTest { + + public static void main(String[] args) throws Exception { + new DateRegression().run(args); + } + + /** + * @bug 4023247 + */ + public void Test4023247() { + Date d1 = new Date(0); + Date d2 = new Date(0); + + d1.setYear(96); + d1.setMonth(11); + d1.setDate(22); + d1.setHours(0); + d1.setMinutes(0); + d1.setSeconds(0); + + d2.setYear(96); + d2.setMonth(11); + d2.setDate(22); + d2.setHours(0); + d2.setMinutes(0); + d2.setSeconds(0); + + if (d1.hashCode() != d2.hashCode()) + errln("Fail: Date hashCode misbehaves"); + } + + /** + * @bug 4027685 + */ + public void Test4027685() { + // Should be 01/16/97 00:00:00 + Date nite = new Date("16-JAN-97 12:00 AM"); + // Should be 01/16/97 12:00:00 + Date noon = new Date("16-JAN-97 12:00 PM"); + + logln("Midnight = " + nite + ", Noon = " + noon); + if (!nite.equals(new Date(97, Calendar.JANUARY, 16, 0, 0)) || + !noon.equals(new Date(97, Calendar.JANUARY, 16, 12, 0))) + errln("Fail: Nite/Noon confused"); + } + + /** + * @bug 4032037 + */ + public void Test4032037() { + Date ref = new Date(97, 1, 10); + Date d = new Date(Date.parse("2/10/97")); + logln("Date.parse(2/10/97) => " + d); + if (!d.equals(ref)) errln("Fail: Want " + ref + " Got " + d); + d = new Date(Date.parse("10 feb 1997")); + logln("Date.parse(10 feb 1997) => " + d); + if (!d.equals(ref)) errln("Fail: Want " + ref + " Got " + d); + d = new Date("2/10/97"); + logln("Date(2/10/97) => " + d); + if (!d.equals(ref)) errln("Fail: Want " + ref + " Got " + d); + d = new Date("10 feb 1997"); + logln("Date(10 feb 1997) => " + d); + if (!d.equals(ref)) errln("Fail: Want " + ref + " Got " + d); + } + + /** + * @bug 4072029 + */ + public void Test4072029() { + TimeZone saveZone = TimeZone.getDefault(); + + try { + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + Date now = new Date(); + String s = now.toString(); + Date now2 = new Date(now.toString()); + String s2 = now2.toString(); // An hour's difference + + if (!s.equals(s2) || + Math.abs(now.getTime() - now2.getTime()) > 60000 /*one min*/) { + errln("Fail: Roundtrip toString/parse"); + } + } + finally { + TimeZone.setDefault(saveZone); + } + } + + /** + * @bug 4073003 + */ + public void Test4073003() { + Date d = new Date(Date.parse("01/02/1984")); + if (!d.equals(new Date(84, 0, 2))) + errln("Fail: Want 1/2/1984 Got " + d); + d = new Date(Date.parse("02/03/2012")); + if (!d.equals(new Date(112, 1, 3))) + errln("Fail: Want 2/3/2012 Got " + d); + d = new Date(Date.parse("03/04/15")); + if (!d.equals(new Date(115, 2, 4))) + errln("Fail: Want 3/4/2015 Got " + d); + } + + /** + * @bug 4118010 + * Regress bug: + * Feb. 2000 has 29 days, but Date(2000, 1, 29) returns March 01, 2000 + * NOTE: This turned out to be a user error (passing in 2000 instead + * of 2000-1900 to the Date constructor). + */ + public void Test4118010() { + Date d=new java.util.Date(2000-1900, Calendar.FEBRUARY, 29); + int m=d.getMonth(); + int date=d.getDate(); + if (m != Calendar.FEBRUARY || + date != 29) + errln("Fail: Want Feb 29, got " + d); + } + + /** + * @bug 4120606 + * Date objects share state after cloning. + */ + public void Test4120606() { + Date d = new Date(98, Calendar.JUNE, 24); + d.setMonth(Calendar.MAY); + Date e = (Date)d.clone(); + d.setMonth(Calendar.FEBRUARY); + if (e.getMonth() != Calendar.MAY) { + errln("Cloned Date objects share state"); + } + } + + /** + * @bug 4133833 + * Date constructor crashes with parameters out of range, when it should + * normalize. + */ + public void Test4133833() { + Date date = new java.util.Date(12,15,19); + Date exp = new Date(1913-1900, Calendar.APRIL, 19); + if (!date.equals(exp)) + errln("Fail: Want " + exp + + "; got " + date); + } + + /** + * @bug 4136916 + * Date.toString() throws exception in 1.2b4-E + * CANNOT REPRODUCE this bug + */ + public void Test4136916() { + Date time = new Date(); + logln(time.toString()); + } + + /** + * @bug 6274757 + * Date getTime and toString interaction for some time values + */ + public void Test6274757() { + TimeZone savedTz = TimeZone.getDefault(); + try { + // Use a time zone west of GMT. + TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles")); + TimeZone jdkGMT = TimeZone.getTimeZone("GMT"); + Calendar jdkCal = Calendar.getInstance(jdkGMT); + jdkCal.clear(); + jdkCal.set(1582, Calendar.OCTOBER, 15); + logln("JDK time: " + jdkCal.getTime().getTime() ); + logln("JDK time (str): " + jdkCal.getTime() ); + logln("Day of month: " + jdkCal.get(Calendar.DAY_OF_MONTH)); + Date co = jdkCal.getTime(); + logln("Change over (Oct 15 1582) = " + co + " (" + + co.getTime() + ")"); + long a = jdkCal.getTime().getTime(); + Date c = jdkCal.getTime(); + c.toString(); + long b = c.getTime(); + + if (a != b) { + errln("ERROR: " + a + " != " + b); + } else { + logln(a + " = " + b); + } + } finally { + TimeZone.setDefault(savedTz); + } + } + + /** + * @bug 6314387 + * JCK6.0: api/java_util/Date/index.html#misc fails, mustang + */ + public void Test6314387() { + Date d = new Date(Long.MAX_VALUE); + int y = d.getYear(); + if (y != 292277094) { + errln("yesr: got " + y + ", expected 292277094"); + } + d = new Date(Long.MIN_VALUE); + y = d.getYear(); + if (y != 292267155) { + errln("yesr: got " + y + ", expected 292267155"); + } + } +} + +//eof diff --git a/test/java/util/Date/DateTest.java b/test/java/util/Date/DateTest.java new file mode 100644 index 0000000000..98392760ba --- /dev/null +++ b/test/java/util/Date/DateTest.java @@ -0,0 +1,236 @@ +/* + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4143459 + * @summary test Date + * @library /java/text/testlib + */ + +import java.text.*; +import java.util.*; + +@SuppressWarnings("deprecation") +public class DateTest extends IntlTest +{ + public static void main(String[] args) throws Exception { + new DateTest().run(args); + } + + /** + * @bug 4143459 + * Warning: Use TestDefaultZone() for complete testing of this bug. + */ + public void TestDefaultZoneLite() { + // Note: This test is redundant with TestDefaultZone(). It was added by + // request to provide a short&sweet test for this bug. It does not test + // all cases though, so IF THIS TEST PASSES, THE BUG MAY STILL BE + // PRESENT. Use TestDefaultZone() to be sure. + TimeZone save = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + Date d = new Date(); + d.setYear(98); + d.setMonth(Calendar.JANUARY); + d.setDate(1); + d.setHours(6); + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + if (d.getHours() != 22) { + errln("Fail: Date.setHours()/getHours() ignoring default zone"); + } + } + finally { TimeZone.setDefault(save); } + } + + /** + * @bug 4143459 + */ + public void TestDefaultZone() { + // Various problems can creep up, with the current implementation of Date, + // when the default zone is changed. + + TimeZone saveZone = TimeZone.getDefault(); + try { + + Date d = new Date(); // Trigger static init + Date ref = new Date(883634400000L); // This is Thu Jan 1 1998 6:00 am GMT + String refstr = "Jan 1 1998 6:00"; + TimeZone GMT = TimeZone.getTimeZone("GMT"); + TimeZone PST = TimeZone.getTimeZone("PST"); + + String[] names = { "year", "month", "date", "day of week", "hour", "offset" }; + int[] GMT_EXP = { 98, Calendar.JANUARY, 1, Calendar.THURSDAY - Calendar.SUNDAY, 6, 0 }; + int[] PST_EXP = { 97, Calendar.DECEMBER, 31, Calendar.WEDNESDAY - Calendar.SUNDAY, 22, 480 }; + + // There are two cases to consider: a Date object with no Calendar + // sub-object (most Date objects), and a Date object with a Calendar + // sub-object. We make two passes to cover the two cases. + for (int pass=0; pass<2; ++pass) { + logln(pass == 0 ? "Normal Date object" : "Date with Calendar sub-object"); + + TimeZone.setDefault(GMT); + d = new Date(refstr); + if (pass == 1) { + // Force creation of Calendar sub-object + d.setYear(d.getYear()); + } + if (d.getTime() != ref.getTime()) { + errln("FAIL: new Date(\"" + refstr + "\") x GMT -> " + d + + " " + d.getTime() + " ms"); + } + + int[] fields = { d.getYear(), d.getMonth(), d.getDate(), + d.getDay(), d.getHours(), d.getTimezoneOffset() }; + for (int i=0; i<fields.length; ++i) { + if (fields[i] != GMT_EXP[i]) { + errln("FAIL: GMT Expected " + names[i] + " of " + GMT_EXP[i] + + ", got " + fields[i]); + } + } + + TimeZone.setDefault(PST); + int[] fields2 = { d.getYear(), d.getMonth(), d.getDate(), + d.getDay(), d.getHours(), d.getTimezoneOffset() }; + for (int i=0; i<fields2.length; ++i) { + if (fields2[i] != PST_EXP[i]) { + errln("FAIL: PST Expected " + names[i] + " of " + PST_EXP[i] + + ", got " + fields2[i]); + } + } + } + } + finally { + TimeZone.setDefault(saveZone); + } + } + + // Test the performance of Date + public void TestPerformance592() + { + int REPS = 500; + + // Do timing test with Date + long start = new Date().getTime(); + for (int i=0; i<REPS; ++i) + { + Date d = new Date(); + int y = d.getYear(); + } + long ms = new Date().getTime() - start; + + double perLoop = ((double)ms) / REPS; + logln(REPS + " iterations at " + perLoop + " ms/loop"); + if (perLoop > PER_LOOP_LIMIT) + logln("WARNING: Date constructor/getYear slower than " + + PER_LOOP_LIMIT + " ms"); + } + static double PER_LOOP_LIMIT = 3.0; + + /** + * Verify that the Date(String) constructor works. + */ + public void TestParseOfGMT() + { + Date OUT = null; + + /* Input values */ + String stringVal = "Jan 01 00:00:00 GMT 1900"; + long expectedVal = -2208988800000L; + + OUT = new Date( stringVal ); + + if( OUT.getTime( ) == expectedVal ) { + // logln("PASS"); + } + else { + errln( "Expected: " + + new Date( expectedVal ) + + ": " + + expectedVal + + " Received: " + + OUT.toString() + + ": " + + OUT.getTime() ); + } + } + + // Check out Date's behavior with large negative year values; bug 664 + // As of the fix to bug 4056585, Date should work correctly with + // large negative years. + public void TestDateNegativeYears() + { + Date d1= new Date(80,-1,2); + logln(d1.toString()); + d1= new Date(-80,-1,2); + logln(d1.toString()); + boolean e = false; + try { + d1= new Date(-800000,-1,2); + logln(d1.toString()); + } + catch (IllegalArgumentException ex) { + e = true; + } + if (e) errln("FAIL: Saw exception for year -800000"); + else logln("Pass: No exception for year -800000"); + } + + // Verify the behavior of Date + public void TestDate480() + { + TimeZone save = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + Date d1=new java.util.Date(97,8,13,10,8,13); + logln("d = "+d1); + Date d2=new java.util.Date(97,8,13,30,8,13); // 20 hours later + logln("d+20h = "+d2); + + double delta = (d2.getTime() - d1.getTime()) / 3600000; + + logln("delta = " + delta + "h"); + + if (delta != 20.0) errln("Expected delta of 20; got " + delta); + + Calendar cal = Calendar.getInstance(); + cal.clear(); + cal.set(1997,8,13,10,8,13); + Date t1 = cal.getTime(); + logln("d = "+t1); + cal.clear(); + cal.set(1997,8,13,30,8,13); // 20 hours later + Date t2 = cal.getTime(); + logln("d+20h = "+t2); + + double delta2 = (t2.getTime() - t1.getTime()) / 3600000; + + logln("delta = " + delta2 + "h"); + + if (delta != 20.0) errln("Expected delta of 20; got " + delta2); + } + finally { + TimeZone.setDefault(save); + } + } +} diff --git a/test/java/util/Date/TZ.java b/test/java/util/Date/TZ.java new file mode 100644 index 0000000000..56722a1cdb --- /dev/null +++ b/test/java/util/Date/TZ.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 4108737 + * @summary java.util.Date doesn't fail if current TimeZone is changed + */ + +import java.util.TimeZone; +import java.util.Date; + +public class TZ { + + public static void main(String args[]) { + TimeZone tz = TimeZone.getDefault(); + try { + testMain(); + } finally { + TimeZone.setDefault(tz); + } + } + + static void testMain() { + String expectedResult = "Sat Feb 01 00:00:00 PST 1997"; + + // load the java.util.Date class in the GMT timezone + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + new Date(); // load the class (to run static initializers) + + // use the class in different timezone + TimeZone.setDefault(TimeZone.getTimeZone("PST")); + @SuppressWarnings("deprecation") + Date date = new Date(97, 1, 1); + if (!date.toString().equals(expectedResult)) { + throw new RuntimeException("Regression bug id #4108737 - Date fails if default time zone changed"); + } + } +} diff --git a/test/java/util/Date/TimestampTest.java b/test/java/util/Date/TimestampTest.java new file mode 100644 index 0000000000..950f0a5fb9 --- /dev/null +++ b/test/java/util/Date/TimestampTest.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 5008227 + * @summary Make sure that changes to the Date class don't break java.sql.Timestamp. + * @modules java.sql + * @library /java/text/testlib + */ + +import java.util.*; +import java.sql.Timestamp; + +public class TimestampTest extends IntlTest { + + public static void main(String[] args) throws Exception { + new TimestampTest().run(args); + } + + /** + * 5008227: java.sql.Timestamp.after() is not returning correct result + * + * Test before(), after(), equals(), compareTo() and getTime(). + */ + public void Test5008227() { + long t = System.currentTimeMillis(); + Timestamp ts1 = new Timestamp(t), ts2 = new Timestamp(t); + ts1.setNanos(999999999); + ts2.setNanos( 1000000); + compareTimestamps(ts1, ts2, 1); + + ts1.setTime(t + 1000); + ts2.setTime(t); + ts1.setNanos( 999999); + ts2.setNanos(999999999); + compareTimestamps(ts1, ts2, 1); + + ts1.setTime(t); + ts2.setTime(t); + ts1.setNanos(123456789); + ts2.setNanos(123456789); + compareTimestamps(ts1, ts2, 0); + + ts1.setTime(t); + ts2.setTime(t); + ts1.setNanos(1); + ts2.setNanos(2); + compareTimestamps(ts1, ts2, -1); + + ts1.setTime(t); + ts2.setTime(t+1000); + ts1.setNanos(999999); + ts2.setNanos( 0); + compareTimestamps(ts1, ts2, -1); + } + + /** + * Compares two Timestamps with the expected result. + * + * @param ts1 the first Timestamp + * @param ts2 the second Timestamp + * @param expect the expected relation between ts1 and ts2; 0 if + * ts1 equals to ts2, or 1 if ts1 is after ts2, or -1 if ts1 is + * before ts2. + */ + private void compareTimestamps(Timestamp ts1, Timestamp ts2, int expected) { + boolean expectedResult = expected > 0; + boolean result = ts1.after(ts2); + if (result != expectedResult) { + errln("ts1.after(ts2) returned " + result + + ". (ts1=" + ts1 + ", ts2=" + ts2 + ")"); + } + + expectedResult = expected < 0; + result = ts1.before(ts2); + if (result != expectedResult) { + errln("ts1.before(ts2) returned " + result + + ". (ts1=" + ts1 + ", ts2=" + ts2 + ")"); + } + + expectedResult = expected == 0; + result = ts1.equals(ts2); + if (result != expectedResult) { + errln("ts1.equals(ts2) returned " + result + + ". (ts1=" + ts1 + ", ts2=" + ts2 + ")"); + } + + int x = ts1.compareTo(ts2); + int y = (x > 0) ? 1 : (x < 0) ? -1 : 0; + if (y != expected) { + errln("ts1.compareTo(ts2) returned " + x + ", expected " + + relation(expected, "") + "0" + + ". (ts1=" + ts1 + ", ts2=" + ts2 + ")"); + } + long t1 = ts1.getTime(); + long t2 = ts2.getTime(); + int z = (t1 > t2) ? 1 : (t1 < t2) ? -1 : 0; + if (z == 0) { + int n1 = ts1.getNanos(); + int n2 = ts2.getNanos(); + z = (n1 > n2) ? 1 : (n1 < n2) ? -1 : 0; + } + if (z != expected) { + errln("ts1.getTime() " + relation(z, "==") + " ts2.getTime(), expected " + + relation(expected, "==") + + ". (ts1=" + ts1 + ", ts2=" + ts2 + ")"); + } + } + + private static String relation(int x, String whenEqual) { + return (x > 0) ? ">" : (x < 0) ? "<" : whenEqual; + } +} diff --git a/test/java/util/Locale/Bug8040211.java b/test/java/util/Locale/Bug8040211.java new file mode 100644 index 0000000000..4a7a099b2d --- /dev/null +++ b/test/java/util/Locale/Bug8040211.java @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8040211 8191404 8203872 8222980 + * @summary Checks the IANA language subtag registry data update + * (LSR Revision: 2019-04-03) with Locale and Locale.LanguageRange + * class methods. + * @run main Bug8040211 + */ + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Locale; +import java.util.List; +import java.util.Locale.LanguageRange; +import java.util.Locale.FilteringMode; +import static java.util.Locale.FilteringMode.EXTENDED_FILTERING; + +public class Bug8040211 { + + static boolean err = false; + + public static void main(String[] args) { + testLanguageRange(); + testLocale(); + + if (err) { + throw new RuntimeException("Failed."); + } + } + + private static void testLanguageRange() { + System.out.println("Test LanguageRange class parse method..."); + test_parse(); + } + + private static void testLocale() { + System.out.println("Test Locale class methods..."); + test_filter(); + test_filterTags(); + test_lookup(); + test_lookupTag(); + } + + private static void test_parse() { + boolean error = false; + String str = "Accept-Language: aam, adp, aue, bcg, cqu, ema," + + " en-gb-oed, gti, kdz, koj, kwq, kxe, lii, lmm, mtm, ngv," + + " oyb, phr, pub, suj, taj;q=0.9, ar-hyw;q=0.8, yug;q=0.5, gfx;q=0.4"; + ArrayList<LanguageRange> expected = new ArrayList<>(); + expected.add(new LanguageRange("aam", 1.0)); + expected.add(new LanguageRange("aas", 1.0)); + expected.add(new LanguageRange("adp", 1.0)); + expected.add(new LanguageRange("dz", 1.0)); + expected.add(new LanguageRange("aue", 1.0)); + expected.add(new LanguageRange("ktz", 1.0)); + expected.add(new LanguageRange("bcg", 1.0)); + expected.add(new LanguageRange("bgm", 1.0)); + expected.add(new LanguageRange("cqu", 1.0)); + expected.add(new LanguageRange("quh", 1.0)); + expected.add(new LanguageRange("ema", 1.0)); + expected.add(new LanguageRange("uok", 1.0)); + expected.add(new LanguageRange("en-gb-oed", 1.0)); + expected.add(new LanguageRange("en-gb-oxendict", 1.0)); + expected.add(new LanguageRange("gti", 1.0)); + expected.add(new LanguageRange("nyc", 1.0)); + expected.add(new LanguageRange("kdz", 1.0)); + expected.add(new LanguageRange("ncp", 1.0)); + expected.add(new LanguageRange("koj", 1.0)); + expected.add(new LanguageRange("kwv", 1.0)); + expected.add(new LanguageRange("kwq", 1.0)); + expected.add(new LanguageRange("yam", 1.0)); + expected.add(new LanguageRange("kxe", 1.0)); + expected.add(new LanguageRange("tvd", 1.0)); + expected.add(new LanguageRange("lii", 1.0)); + expected.add(new LanguageRange("raq", 1.0)); + expected.add(new LanguageRange("lmm", 1.0)); + expected.add(new LanguageRange("rmx", 1.0)); + expected.add(new LanguageRange("mtm", 1.0)); + expected.add(new LanguageRange("ymt", 1.0)); + expected.add(new LanguageRange("ngv", 1.0)); + expected.add(new LanguageRange("nnx", 1.0)); + expected.add(new LanguageRange("oyb", 1.0)); + expected.add(new LanguageRange("thx", 1.0)); + expected.add(new LanguageRange("skk", 1.0)); + expected.add(new LanguageRange("jeg", 1.0)); + expected.add(new LanguageRange("phr", 1.0)); + expected.add(new LanguageRange("pmu", 1.0)); + expected.add(new LanguageRange("pub", 1.0)); + expected.add(new LanguageRange("puz", 1.0)); + expected.add(new LanguageRange("suj", 1.0)); + expected.add(new LanguageRange("xsj", 1.0)); + expected.add(new LanguageRange("taj", 0.9)); + expected.add(new LanguageRange("tsf", 0.9)); + expected.add(new LanguageRange("ar-hyw", 0.8)); + expected.add(new LanguageRange("yug", 0.5)); + expected.add(new LanguageRange("yuu", 0.5)); + expected.add(new LanguageRange("gfx", 0.4)); + expected.add(new LanguageRange("oun", 0.4)); + expected.add(new LanguageRange("mwj", 0.4)); + expected.add(new LanguageRange("vaj", 0.4)); + List<LanguageRange> got = LanguageRange.parse(str); + if (!areEqual(expected, got)) { + error = true; + System.err.println(" language parse() test failed."); + } + + if (error) { + err = true; + System.err.println(" test_parse() failed."); + } else { + System.out.println(" test_parse() passed."); + } + + } + + private static boolean areEqual(List<LanguageRange> expected, + List<LanguageRange> got) { + boolean error = false; + + int expectedSize = expected.size(); + int actualSize = got.size(); + + if (expectedSize != actualSize) { + error = true; + + System.err.println(" Expected size=" + expectedSize); + for (LanguageRange lr : expected) { + System.err.println(" range=" + lr.getRange() + + ", weight=" + lr.getWeight()); + } + + System.out.println(" Actual size=" + actualSize); + for (LanguageRange lr : got) { + System.err.println(" range=" + lr.getRange() + + ", weight=" + lr.getWeight()); + } + } else { + for (int i = 0; i < expectedSize; i++) { + LanguageRange lr1 = expected.get(i); + LanguageRange lr2 = got.get(i); + + if (!lr1.getRange().equals(lr2.getRange()) + || lr1.getWeight() != lr2.getWeight()) { + error = true; + System.err.println(" " + i + ": Expected: range=" + lr1.getRange() + + ", weight=" + lr1.getWeight()); + System.err.println(" " + i + ": Actual: range=" + lr2.getRange() + + ", weight=" + lr2.getWeight()); + } + } + } + + return !error; + } + + private static void test_filter() { + boolean error = false; + + String ranges = "mtm-RU, en-gb-oed, coy, ar-HY"; + String tags = "de-DE, en, mtm-RU, ymt-RU, en-gb-oxendict, ja-JP, pij, nts, ar-arevela"; + FilteringMode mode = EXTENDED_FILTERING; + + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<Locale> tagList = generateLocales(tags); + String actualLocales + = showLocales(Locale.filter(priorityList, tagList, mode)); + String expectedLocales = "mtm-RU, ymt-RU, en-GB-oxendict, nts, pij"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#1 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + ranges = "phr-*-IN, ja-JP"; + tags = "en, pmu-Guru-IN, ja-Latn-JP, iw"; + mode = EXTENDED_FILTERING; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = showLocales(Locale.filter(priorityList, tagList, mode)); + expectedLocales = "pmu-Guru-IN, ja-Latn-JP"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#2 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + if (error) { + err = true; + System.out.println(" test_filter() failed."); + } else { + System.out.println(" test_filter() passed."); + } + } + + private static void test_filterTags() { + boolean error = false; + + String ranges = "gti;q=0.2, gfx, kzj"; + String tags = "de-DE, gti, he, nyc, mwj, vaj, ktr, dtp"; + + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<String> tagList = generateLanguageTags(tags); + String actualTags + = showLanguageTags(Locale.filterTags(priorityList, tagList)); + String expectedTags = "mwj, vaj, ktr, dtp, gti, nyc"; + + if (!expectedTags.equals(actualTags)) { + error = true; + showErrorMessage("filterTags()", + ranges, tags, expectedTags, actualTags); + } + + if (error) { + err = true; + System.out.println(" test_filterTags() failed."); + } else { + System.out.println(" test_filterTags() passed."); + } + } + + private static void test_lookup() { + boolean error = false; + + String ranges = "en;q=0.2, yam, rmx;q=0.9"; + String tags = "de-DE, en, kwq, lmm"; + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<Locale> localeList = generateLocales(tags); + String actualLocale + = Locale.lookup(priorityList, localeList).toLanguageTag(); + String expectedLocale = "kwq"; + + if (!expectedLocale.equals(actualLocale)) { + error = true; + showErrorMessage("lookup()", ranges, tags, expectedLocale, actualLocale); + } + + if (error) { + err = true; + System.out.println(" test_lookup() failed."); + } else { + System.out.println(" test_lookup() passed."); + } + } + + private static void test_lookupTag() { + boolean error = false; + + String ranges = "en, tsf;q=0.2"; + String tags = "es, ja-JP, taj"; + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<String> tagList = generateLanguageTags(tags); + String actualTag = Locale.lookupTag(priorityList, tagList); + String expectedTag = "taj"; + + if (!expectedTag.equals(actualTag)) { + error = true; + showErrorMessage("lookupTag()", ranges, tags, expectedTag, actualTag); + } + + if (error) { + err = true; + System.out.println(" test_lookupTag() failed."); + } else { + System.out.println(" test_lookupTag() passed."); + } + } + + private static List<Locale> generateLocales(String tags) { + if (tags == null) { + return null; + } + + List<Locale> localeList = new ArrayList<>(); + if (tags.equals("")) { + return localeList; + } + String[] t = tags.split(", "); + for (String tag : t) { + localeList.add(Locale.forLanguageTag(tag)); + } + return localeList; + } + + private static List<String> generateLanguageTags(String tags) { + List<String> tagList = new ArrayList<>(); + String[] t = tags.split(", "); + for (String tag : t) { + tagList.add(tag); + } + return tagList; + } + + private static String showLanguageTags(List<String> tags) { + StringBuilder sb = new StringBuilder(); + + Iterator<String> itr = tags.iterator(); + if (itr.hasNext()) { + sb.append(itr.next()); + } + while (itr.hasNext()) { + sb.append(", "); + sb.append(itr.next()); + } + + return sb.toString().trim(); + } + + private static String showLocales(List<Locale> locales) { + StringBuilder sb = new StringBuilder(); + + java.util.Iterator<Locale> itr = locales.iterator(); + if (itr.hasNext()) { + sb.append(itr.next().toLanguageTag()); + } + while (itr.hasNext()) { + sb.append(", "); + sb.append(itr.next().toLanguageTag()); + } + + return sb.toString().trim(); + } + + private static void showErrorMessage(String methodName, + String priorityList, + String tags, + String expectedTags, + String actualTags) { + System.out.println("\nIncorrect " + methodName + " result."); + System.out.println(" Priority list : " + priorityList); + System.out.println(" Language tags : " + tags); + System.out.println(" Expected value : " + expectedTags); + System.out.println(" Actual value : " + actualTags); + } + +} + diff --git a/test/java/util/Locale/tools/EquivMapsGenerator.java b/test/java/util/Locale/tools/EquivMapsGenerator.java deleted file mode 100644 index 15e5fa9248..0000000000 --- a/test/java/util/Locale/tools/EquivMapsGenerator.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.io.*; -import java.nio.charset.*; -import java.nio.file.*; -import java.util.*; - -public class EquivMapsGenerator { - - /* - * IANA Language Subtag Registry file downloaded from - * http://www.iana.org/assignments/language-subtag-registry - */ - private static final String DEFAULT_LSR_FILE = - "language-subtag-registry.txt"; - - private static boolean verbose = false; - - public static void main(String[] args) throws Exception { - String fileLSR = DEFAULT_LSR_FILE; - - for (int i = 0; i < args.length; i++) { - String s = args[i]; - if (s.equals("-lsr")) { - fileLSR = args[++i]; - } else if (s.equals("-verbose")) { - verbose = true; - } - } - - readLSRfile(fileLSR); - generateEquivalentMap(); - generateSourceCode(); - } - - private static String LSRrevisionDate; - private static Map<String, StringBuilder> initialLanguageMap = - new TreeMap<>(); - private static Map<String, StringBuilder> initialRegionVariantMap = - new TreeMap<>(); - - private static Map<String, String> sortedLanguageMap1 = new TreeMap<>(); - private static Map<String, String[]> sortedLanguageMap2 = new TreeMap<>(); - private static Map<String, String> sortedRegionVariantMap = - new TreeMap<>(); - - private static void readLSRfile(String filename) throws Exception { - String type = null; - String tag = null; - String preferred = null; - int mappingNum = 0; - - for (String line : Files.readAllLines(Paths.get(filename), - Charset.forName("UTF-8"))) { - line = line.toLowerCase(); - int index = line.indexOf(' ')+1; - if (line.startsWith("file-date:")) { - LSRrevisionDate = line.substring(index); - if (verbose) { - System.out.println("LSR revision date=" + LSRrevisionDate); - } - } else if (line.startsWith("type:")) { - type = line.substring(index); - } else if (line.startsWith("tag:") || line.startsWith("subtag:")) { - tag = line.substring(index); - } else if (line.startsWith("preferred-value:") - && !type.equals("extlang")) { - preferred = line.substring(index); - mappingNum++; - processDeprecatedData(type, tag, preferred); - } else if (line.equals("%%")) { - type = null; - tag = null; - preferred = null; - } - } - - if (verbose) { - System.out.println("readLSRfile(" + filename + ")"); - System.out.println(" Total number of mapping=" + mappingNum); - System.out.println("\n Map for language. Size=" - + initialLanguageMap.size()); - - for (String key : initialLanguageMap.keySet()) { - System.out.println(" " + key + ": \"" - + initialLanguageMap.get(key) + "\""); - } - - System.out.println("\n Map for region and variant. Size=" - + initialRegionVariantMap.size()); - - for (String key : initialRegionVariantMap.keySet()) { - System.out.println(" " + key + ": \"" - + initialRegionVariantMap.get(key) + "\""); - } - } - } - - private static void processDeprecatedData(String type, - String tag, - String preferred) { - StringBuilder sb; - if (type.equals("region") || type.equals("variant")) { - if (!initialRegionVariantMap.containsKey(preferred)) { - sb = new StringBuilder("-"); - sb.append(preferred); - sb.append(",-"); - sb.append(tag); - initialRegionVariantMap.put("-"+preferred, sb); - } else { - throw new RuntimeException("New case, need implementation." - + " A region/variant subtag \"" + preferred - + "\" is registered for more than one subtags."); - } - } else { // language, grandfahered, and redundant - if (!initialLanguageMap.containsKey(preferred)) { - sb = new StringBuilder(preferred); - sb.append(','); - sb.append(tag); - initialLanguageMap.put(preferred, sb); - } else { - sb = initialLanguageMap.get(preferred); - sb.append(','); - sb.append(tag); - initialLanguageMap.put(preferred, sb); - } - } - } - - private static void generateEquivalentMap() { - String[] subtags; - for (String preferred : initialLanguageMap.keySet()) { - subtags = initialLanguageMap.get(preferred).toString().split(","); - - if (subtags.length == 2) { - sortedLanguageMap1.put(subtags[0], subtags[1]); - sortedLanguageMap1.put(subtags[1], subtags[0]); - } else if (subtags.length == 3) { - sortedLanguageMap2.put(subtags[0], - new String[]{subtags[1], subtags[2]}); - sortedLanguageMap2.put(subtags[1], - new String[]{subtags[0], subtags[2]}); - sortedLanguageMap2.put(subtags[2], - new String[]{subtags[0], subtags[1]}); - } else { - throw new RuntimeException("New case, need implementation." - + " A language subtag \"" + preferred - + "\" is registered for more than two subtags. "); - } - } - - for (String preferred : initialRegionVariantMap.keySet()) { - subtags = - initialRegionVariantMap.get(preferred).toString().split(","); - - sortedRegionVariantMap.put(subtags[0], subtags[1]); - sortedRegionVariantMap.put(subtags[1], subtags[0]); - } - - if (verbose) { - System.out.println("generateEquivalentMap()"); - System.out.println(" \nSorted map for language subtags which have only one equivalent. Size=" - + sortedLanguageMap1.size()); - for (String key : sortedLanguageMap1.keySet()) { - System.out.println(" " + key + ": \"" - + sortedLanguageMap1.get(key) + "\""); - } - - System.out.println("\n Sorted map for language subtags which have multiple equivalents. Size=" - + sortedLanguageMap2.size()); - for (String key : sortedLanguageMap2.keySet()) { - String[] s = sortedLanguageMap2.get(key); - System.out.println(" " + key + ": \"" - + s[0] + "\", \"" + s[1] + "\""); - } - - System.out.println("\n Sorted map for region and variant subtags. Size=" - + sortedRegionVariantMap.size()); - for (String key : sortedRegionVariantMap.keySet()) { - System.out.println(" " + key + ": \"" - + sortedRegionVariantMap.get(key) + "\""); - } - } - System.out.println(); - } - - private final static String headerText = - "final class LocaleEquivalentMaps {\n\n" - + " static final Map<String, String> singleEquivMap;\n" - + " static final Map<String, String[]> multiEquivsMap;\n" - + " static final Map<String, String> regionVariantEquivMap;\n\n" - + " static {\n" - + " singleEquivMap = new HashMap<>();\n" - + " multiEquivsMap = new HashMap<>();\n" - + " regionVariantEquivMap = new HashMap<>();\n\n" - + " // This is an auto-generated file and should not be manually edited.\n"; - - private final static String footerText = - " }\n\n" - + "}"; - - private static void generateSourceCode() { - System.out.println(headerText - + " // LSR Revision: " + LSRrevisionDate); - - for (String key : sortedLanguageMap1.keySet()) { - String value = sortedLanguageMap1.get(key); - System.out.println(" singleEquivMap.put(\"" - + key + "\", \"" + value + "\");"); - } - System.out.println(); - for (String key : sortedLanguageMap2.keySet()) { - String[] values = sortedLanguageMap2.get(key); - System.out.println(" multiEquivsMap.put(\"" - + key + "\", new String[] {\"" + values[0] + "\", \"" - + values[1] + "\"});"); - } - System.out.println(); - for (String key : sortedRegionVariantMap.keySet()) { - String value = sortedRegionVariantMap.get(key); - System.out.println(" regionVariantEquivMap.put(\"" - + key + "\", \"" + value + "\");"); - } - - System.out.println(footerText); - } - -} diff --git a/test/java/util/Locale/tools/language-subtag-registry.txt b/test/java/util/Locale/tools/language-subtag-registry.txt deleted file mode 100644 index 916cb10138..0000000000 --- a/test/java/util/Locale/tools/language-subtag-registry.txt +++ /dev/null @@ -1,46628 +0,0 @@ -File-Date: 2013-09-23 -%% -Type: language -Subtag: aa -Description: Afar -Added: 2005-10-16 -%% -Type: language -Subtag: ab -Description: Abkhazian -Added: 2005-10-16 -Suppress-Script: Cyrl -%% -Type: language -Subtag: ae -Description: Avestan -Added: 2005-10-16 -%% -Type: language -Subtag: af -Description: Afrikaans -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ak -Description: Akan -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: am -Description: Amharic -Added: 2005-10-16 -Suppress-Script: Ethi -%% -Type: language -Subtag: an -Description: Aragonese -Added: 2005-10-16 -%% -Type: language -Subtag: ar -Description: Arabic -Added: 2005-10-16 -Suppress-Script: Arab -Scope: macrolanguage -%% -Type: language -Subtag: as -Description: Assamese -Added: 2005-10-16 -Suppress-Script: Beng -%% -Type: language -Subtag: av -Description: Avaric -Added: 2005-10-16 -%% -Type: language -Subtag: ay -Description: Aymara -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: az -Description: Azerbaijani -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: ba -Description: Bashkir -Added: 2005-10-16 -%% -Type: language -Subtag: be -Description: Belarusian -Added: 2005-10-16 -Suppress-Script: Cyrl -%% -Type: language -Subtag: bg -Description: Bulgarian -Added: 2005-10-16 -Suppress-Script: Cyrl -%% -Type: language -Subtag: bh -Description: Bihari languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: bi -Description: Bislama -Added: 2005-10-16 -%% -Type: language -Subtag: bm -Description: Bambara -Added: 2005-10-16 -%% -Type: language -Subtag: bn -Description: Bengali -Added: 2005-10-16 -Suppress-Script: Beng -%% -Type: language -Subtag: bo -Description: Tibetan -Added: 2005-10-16 -%% -Type: language -Subtag: br -Description: Breton -Added: 2005-10-16 -%% -Type: language -Subtag: bs -Description: Bosnian -Added: 2005-10-16 -Suppress-Script: Latn -Macrolanguage: sh -%% -Type: language -Subtag: ca -Description: Catalan -Description: Valencian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ce -Description: Chechen -Added: 2005-10-16 -%% -Type: language -Subtag: ch -Description: Chamorro -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: co -Description: Corsican -Added: 2005-10-16 -%% -Type: language -Subtag: cr -Description: Cree -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: cs -Description: Czech -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: cu -Description: Church Slavic -Description: Church Slavonic -Description: Old Bulgarian -Description: Old Church Slavonic -Description: Old Slavonic -Added: 2005-10-16 -%% -Type: language -Subtag: cv -Description: Chuvash -Added: 2005-10-16 -%% -Type: language -Subtag: cy -Description: Welsh -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: da -Description: Danish -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: de -Description: German -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: dv -Description: Dhivehi -Description: Divehi -Description: Maldivian -Added: 2005-10-16 -Suppress-Script: Thaa -%% -Type: language -Subtag: dz -Description: Dzongkha -Added: 2005-10-16 -Suppress-Script: Tibt -%% -Type: language -Subtag: ee -Description: Ewe -Added: 2005-10-16 -%% -Type: language -Subtag: el -Description: Modern Greek (1453-) -Added: 2005-10-16 -Suppress-Script: Grek -%% -Type: language -Subtag: en -Description: English -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: eo -Description: Esperanto -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: es -Description: Spanish -Description: Castilian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: et -Description: Estonian -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: eu -Description: Basque -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: fa -Description: Persian -Added: 2005-10-16 -Suppress-Script: Arab -Scope: macrolanguage -%% -Type: language -Subtag: ff -Description: Fulah -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: fi -Description: Finnish -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: fj -Description: Fijian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: fo -Description: Faroese -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: fr -Description: French -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: fy -Description: Western Frisian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ga -Description: Irish -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: gd -Description: Scottish Gaelic -Description: Gaelic -Added: 2005-10-16 -%% -Type: language -Subtag: gl -Description: Galician -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: gn -Description: Guarani -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: gu -Description: Gujarati -Added: 2005-10-16 -Suppress-Script: Gujr -%% -Type: language -Subtag: gv -Description: Manx -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ha -Description: Hausa -Added: 2005-10-16 -%% -Type: language -Subtag: he -Description: Hebrew -Added: 2005-10-16 -Suppress-Script: Hebr -%% -Type: language -Subtag: hi -Description: Hindi -Added: 2005-10-16 -Suppress-Script: Deva -%% -Type: language -Subtag: ho -Description: Hiri Motu -Added: 2005-10-16 -%% -Type: language -Subtag: hr -Description: Croatian -Added: 2005-10-16 -Suppress-Script: Latn -Macrolanguage: sh -%% -Type: language -Subtag: ht -Description: Haitian -Description: Haitian Creole -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: hu -Description: Hungarian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: hy -Description: Armenian -Added: 2005-10-16 -Suppress-Script: Armn -%% -Type: language -Subtag: hz -Description: Herero -Added: 2005-10-16 -%% -Type: language -Subtag: ia -Description: Interlingua (International Auxiliary Language - Association) -Added: 2005-10-16 -%% -Type: language -Subtag: id -Description: Indonesian -Added: 2005-10-16 -Suppress-Script: Latn -Macrolanguage: ms -%% -Type: language -Subtag: ie -Description: Interlingue -Description: Occidental -Added: 2005-10-16 -%% -Type: language -Subtag: ig -Description: Igbo -Added: 2005-10-16 -%% -Type: language -Subtag: ii -Description: Sichuan Yi -Description: Nuosu -Added: 2005-10-16 -%% -Type: language -Subtag: ik -Description: Inupiaq -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: in -Description: Indonesian -Added: 2005-10-16 -Deprecated: 1989-01-01 -Preferred-Value: id -Suppress-Script: Latn -Macrolanguage: ms -%% -Type: language -Subtag: io -Description: Ido -Added: 2005-10-16 -%% -Type: language -Subtag: is -Description: Icelandic -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: it -Description: Italian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: iu -Description: Inuktitut -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: iw -Description: Hebrew -Added: 2005-10-16 -Deprecated: 1989-01-01 -Preferred-Value: he -Suppress-Script: Hebr -%% -Type: language -Subtag: ja -Description: Japanese -Added: 2005-10-16 -Suppress-Script: Jpan -%% -Type: language -Subtag: ji -Description: Yiddish -Added: 2005-10-16 -Deprecated: 1989-01-01 -Preferred-Value: yi -%% -Type: language -Subtag: jv -Description: Javanese -Added: 2005-10-16 -%% -Type: language -Subtag: jw -Description: Javanese -Added: 2005-10-16 -Deprecated: 2001-08-13 -Preferred-Value: jv -Comments: published by error in Table 1 of ISO 639:1988 -%% -Type: language -Subtag: ka -Description: Georgian -Added: 2005-10-16 -Suppress-Script: Geor -%% -Type: language -Subtag: kg -Description: Kongo -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: ki -Description: Kikuyu -Description: Gikuyu -Added: 2005-10-16 -%% -Type: language -Subtag: kj -Description: Kuanyama -Description: Kwanyama -Added: 2005-10-16 -%% -Type: language -Subtag: kk -Description: Kazakh -Added: 2005-10-16 -Suppress-Script: Cyrl -%% -Type: language -Subtag: kl -Description: Kalaallisut -Description: Greenlandic -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: km -Description: Central Khmer -Added: 2005-10-16 -Suppress-Script: Khmr -%% -Type: language -Subtag: kn -Description: Kannada -Added: 2005-10-16 -Suppress-Script: Knda -%% -Type: language -Subtag: ko -Description: Korean -Added: 2005-10-16 -Suppress-Script: Kore -%% -Type: language -Subtag: kr -Description: Kanuri -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: ks -Description: Kashmiri -Added: 2005-10-16 -%% -Type: language -Subtag: ku -Description: Kurdish -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: kv -Description: Komi -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: kw -Description: Cornish -Added: 2005-10-16 -%% -Type: language -Subtag: ky -Description: Kirghiz -Description: Kyrgyz -Added: 2005-10-16 -%% -Type: language -Subtag: la -Description: Latin -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: lb -Description: Luxembourgish -Description: Letzeburgesch -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: lg -Description: Ganda -Added: 2005-10-16 -%% -Type: language -Subtag: li -Description: Limburgan -Description: Limburger -Description: Limburgish -Added: 2005-10-16 -%% -Type: language -Subtag: ln -Description: Lingala -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: lo -Description: Lao -Added: 2005-10-16 -Suppress-Script: Laoo -%% -Type: language -Subtag: lt -Description: Lithuanian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: lu -Description: Luba-Katanga -Added: 2005-10-16 -%% -Type: language -Subtag: lv -Description: Latvian -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: mg -Description: Malagasy -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: mh -Description: Marshallese -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: mi -Description: Maori -Added: 2005-10-16 -%% -Type: language -Subtag: mk -Description: Macedonian -Added: 2005-10-16 -Suppress-Script: Cyrl -%% -Type: language -Subtag: ml -Description: Malayalam -Added: 2005-10-16 -Suppress-Script: Mlym -%% -Type: language -Subtag: mn -Description: Mongolian -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: mo -Description: Moldavian -Description: Moldovan -Added: 2005-10-16 -Deprecated: 2008-11-22 -Preferred-Value: ro -Suppress-Script: Latn -%% -Type: language -Subtag: mr -Description: Marathi -Added: 2005-10-16 -Suppress-Script: Deva -%% -Type: language -Subtag: ms -Description: Malay (macrolanguage) -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: mt -Description: Maltese -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: my -Description: Burmese -Added: 2005-10-16 -Suppress-Script: Mymr -%% -Type: language -Subtag: na -Description: Nauru -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: nb -Description: Norwegian Bokmål -Added: 2005-10-16 -Suppress-Script: Latn -Macrolanguage: no -%% -Type: language -Subtag: nd -Description: North Ndebele -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ne -Description: Nepali (macrolanguage) -Added: 2005-10-16 -Suppress-Script: Deva -Scope: macrolanguage -%% -Type: language -Subtag: ng -Description: Ndonga -Added: 2005-10-16 -%% -Type: language -Subtag: nl -Description: Dutch -Description: Flemish -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: nn -Description: Norwegian Nynorsk -Added: 2005-10-16 -Suppress-Script: Latn -Macrolanguage: no -%% -Type: language -Subtag: no -Description: Norwegian -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: nr -Description: South Ndebele -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: nv -Description: Navajo -Description: Navaho -Added: 2005-10-16 -%% -Type: language -Subtag: ny -Description: Nyanja -Description: Chewa -Description: Chichewa -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: oc -Description: Occitan (post 1500) -Added: 2005-10-16 -%% -Type: language -Subtag: oj -Description: Ojibwa -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: om -Description: Oromo -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: or -Description: Oriya (macrolanguage) -Added: 2005-10-16 -Suppress-Script: Orya -Scope: macrolanguage -%% -Type: language -Subtag: os -Description: Ossetian -Description: Ossetic -Added: 2005-10-16 -%% -Type: language -Subtag: pa -Description: Panjabi -Description: Punjabi -Added: 2005-10-16 -Suppress-Script: Guru -%% -Type: language -Subtag: pi -Description: Pali -Added: 2005-10-16 -%% -Type: language -Subtag: pl -Description: Polish -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ps -Description: Pushto -Description: Pashto -Added: 2005-10-16 -Suppress-Script: Arab -Scope: macrolanguage -%% -Type: language -Subtag: pt -Description: Portuguese -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: qu -Description: Quechua -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: rm -Description: Romansh -Suppress-Script: Latn -Added: 2005-10-16 -%% -Type: language -Subtag: rn -Description: Rundi -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ro -Description: Romanian -Description: Moldavian -Description: Moldovan -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ru -Description: Russian -Added: 2005-10-16 -Suppress-Script: Cyrl -%% -Type: language -Subtag: rw -Description: Kinyarwanda -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: sa -Description: Sanskrit -Added: 2005-10-16 -%% -Type: language -Subtag: sc -Description: Sardinian -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: sd -Description: Sindhi -Added: 2005-10-16 -%% -Type: language -Subtag: se -Description: Northern Sami -Added: 2005-10-16 -%% -Type: language -Subtag: sg -Description: Sango -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: sh -Description: Serbo-Croatian -Added: 2005-10-16 -Scope: macrolanguage -Comments: sr, hr, bs are preferred for most modern uses -%% -Type: language -Subtag: si -Description: Sinhala -Description: Sinhalese -Added: 2005-10-16 -Suppress-Script: Sinh -%% -Type: language -Subtag: sk -Description: Slovak -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: sl -Description: Slovenian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: sm -Description: Samoan -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: sn -Description: Shona -Added: 2005-10-16 -%% -Type: language -Subtag: so -Description: Somali -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: sq -Description: Albanian -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: sr -Description: Serbian -Added: 2005-10-16 -Macrolanguage: sh -%% -Type: language -Subtag: ss -Description: Swati -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: st -Description: Southern Sotho -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: su -Description: Sundanese -Added: 2005-10-16 -%% -Type: language -Subtag: sv -Description: Swedish -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: sw -Description: Swahili (macrolanguage) -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: ta -Description: Tamil -Added: 2005-10-16 -Suppress-Script: Taml -%% -Type: language -Subtag: te -Description: Telugu -Added: 2005-10-16 -Suppress-Script: Telu -%% -Type: language -Subtag: tg -Description: Tajik -Added: 2005-10-16 -%% -Type: language -Subtag: th -Description: Thai -Added: 2005-10-16 -Suppress-Script: Thai -%% -Type: language -Subtag: ti -Description: Tigrinya -Added: 2005-10-16 -Suppress-Script: Ethi -%% -Type: language -Subtag: tk -Description: Turkmen -Added: 2005-10-16 -%% -Type: language -Subtag: tl -Description: Tagalog -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: tn -Description: Tswana -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: to -Description: Tonga (Tonga Islands) -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: tr -Description: Turkish -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ts -Description: Tsonga -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: tt -Description: Tatar -Added: 2005-10-16 -%% -Type: language -Subtag: tw -Description: Twi -Added: 2005-10-16 -Macrolanguage: ak -%% -Type: language -Subtag: ty -Description: Tahitian -Added: 2005-10-16 -%% -Type: language -Subtag: ug -Description: Uighur -Description: Uyghur -Added: 2005-10-16 -%% -Type: language -Subtag: uk -Description: Ukrainian -Added: 2005-10-16 -Suppress-Script: Cyrl -%% -Type: language -Subtag: ur -Description: Urdu -Added: 2005-10-16 -Suppress-Script: Arab -%% -Type: language -Subtag: uz -Description: Uzbek -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: ve -Description: Venda -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: vi -Description: Vietnamese -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: vo -Description: Volapük -Added: 2005-10-16 -%% -Type: language -Subtag: wa -Description: Walloon -Added: 2005-10-16 -%% -Type: language -Subtag: wo -Description: Wolof -Added: 2005-10-16 -%% -Type: language -Subtag: xh -Description: Xhosa -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: yi -Description: Yiddish -Added: 2005-10-16 -Suppress-Script: Hebr -Scope: macrolanguage -%% -Type: language -Subtag: yo -Description: Yoruba -Added: 2005-10-16 -%% -Type: language -Subtag: za -Description: Zhuang -Description: Chuang -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: zh -Description: Chinese -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: zu -Description: Zulu -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: aaa -Description: Ghotuo -Added: 2009-07-29 -%% -Type: language -Subtag: aab -Description: Alumu-Tesu -Added: 2009-07-29 -%% -Type: language -Subtag: aac -Description: Ari -Added: 2009-07-29 -%% -Type: language -Subtag: aad -Description: Amal -Added: 2009-07-29 -%% -Type: language -Subtag: aae -Description: Arbëreshë Albanian -Added: 2009-07-29 -Macrolanguage: sq -%% -Type: language -Subtag: aaf -Description: Aranadan -Added: 2009-07-29 -%% -Type: language -Subtag: aag -Description: Ambrak -Added: 2009-07-29 -%% -Type: language -Subtag: aah -Description: Abu' Arapesh -Added: 2009-07-29 -%% -Type: language -Subtag: aai -Description: Arifama-Miniafia -Added: 2009-07-29 -%% -Type: language -Subtag: aak -Description: Ankave -Added: 2009-07-29 -%% -Type: language -Subtag: aal -Description: Afade -Added: 2009-07-29 -%% -Type: language -Subtag: aam -Description: Aramanik -Added: 2009-07-29 -%% -Type: language -Subtag: aan -Description: Anambé -Added: 2009-07-29 -%% -Type: language -Subtag: aao -Description: Algerian Saharan Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: aap -Description: Pará Arára -Added: 2009-07-29 -%% -Type: language -Subtag: aaq -Description: Eastern Abnaki -Added: 2009-07-29 -%% -Type: language -Subtag: aas -Description: Aasáx -Added: 2009-07-29 -%% -Type: language -Subtag: aat -Description: Arvanitika Albanian -Added: 2009-07-29 -Macrolanguage: sq -%% -Type: language -Subtag: aau -Description: Abau -Added: 2009-07-29 -%% -Type: language -Subtag: aav -Description: Austro-Asiatic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: aaw -Description: Solong -Added: 2009-07-29 -%% -Type: language -Subtag: aax -Description: Mandobo Atas -Added: 2009-07-29 -%% -Type: language -Subtag: aaz -Description: Amarasi -Added: 2009-07-29 -%% -Type: language -Subtag: aba -Description: Abé -Added: 2009-07-29 -%% -Type: language -Subtag: abb -Description: Bankon -Added: 2009-07-29 -%% -Type: language -Subtag: abc -Description: Ambala Ayta -Added: 2009-07-29 -%% -Type: language -Subtag: abd -Description: Manide -Added: 2009-07-29 -%% -Type: language -Subtag: abe -Description: Western Abnaki -Added: 2009-07-29 -%% -Type: language -Subtag: abf -Description: Abai Sungai -Added: 2009-07-29 -%% -Type: language -Subtag: abg -Description: Abaga -Added: 2009-07-29 -%% -Type: language -Subtag: abh -Description: Tajiki Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: abi -Description: Abidji -Added: 2009-07-29 -%% -Type: language -Subtag: abj -Description: Aka-Bea -Added: 2009-07-29 -%% -Type: language -Subtag: abl -Description: Lampung Nyo -Added: 2009-07-29 -%% -Type: language -Subtag: abm -Description: Abanyom -Added: 2009-07-29 -%% -Type: language -Subtag: abn -Description: Abua -Added: 2009-07-29 -%% -Type: language -Subtag: abo -Description: Abon -Added: 2009-07-29 -%% -Type: language -Subtag: abp -Description: Abellen Ayta -Added: 2009-07-29 -%% -Type: language -Subtag: abq -Description: Abaza -Added: 2009-07-29 -%% -Type: language -Subtag: abr -Description: Abron -Added: 2009-07-29 -%% -Type: language -Subtag: abs -Description: Ambonese Malay -Added: 2009-07-29 -%% -Type: language -Subtag: abt -Description: Ambulas -Added: 2009-07-29 -%% -Type: language -Subtag: abu -Description: Abure -Added: 2009-07-29 -%% -Type: language -Subtag: abv -Description: Baharna Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: abw -Description: Pal -Added: 2009-07-29 -%% -Type: language -Subtag: abx -Description: Inabaknon -Added: 2009-07-29 -%% -Type: language -Subtag: aby -Description: Aneme Wake -Added: 2009-07-29 -%% -Type: language -Subtag: abz -Description: Abui -Added: 2009-07-29 -%% -Type: language -Subtag: aca -Description: Achagua -Added: 2009-07-29 -%% -Type: language -Subtag: acb -Description: Áncá -Added: 2009-07-29 -%% -Type: language -Subtag: acd -Description: Gikyode -Added: 2009-07-29 -%% -Type: language -Subtag: ace -Description: Achinese -Added: 2005-10-16 -%% -Type: language -Subtag: acf -Description: Saint Lucian Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: ach -Description: Acoli -Added: 2005-10-16 -%% -Type: language -Subtag: aci -Description: Aka-Cari -Added: 2009-07-29 -%% -Type: language -Subtag: ack -Description: Aka-Kora -Added: 2009-07-29 -%% -Type: language -Subtag: acl -Description: Akar-Bale -Added: 2009-07-29 -%% -Type: language -Subtag: acm -Description: Mesopotamian Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: acn -Description: Achang -Added: 2009-07-29 -%% -Type: language -Subtag: acp -Description: Eastern Acipa -Added: 2009-07-29 -%% -Type: language -Subtag: acq -Description: Ta'izzi-Adeni Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: acr -Description: Achi -Added: 2009-07-29 -%% -Type: language -Subtag: acs -Description: Acroá -Added: 2009-07-29 -%% -Type: language -Subtag: act -Description: Achterhoeks -Added: 2009-07-29 -%% -Type: language -Subtag: acu -Description: Achuar-Shiwiar -Added: 2009-07-29 -%% -Type: language -Subtag: acv -Description: Achumawi -Added: 2009-07-29 -%% -Type: language -Subtag: acw -Description: Hijazi Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: acx -Description: Omani Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: acy -Description: Cypriot Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: acz -Description: Acheron -Added: 2009-07-29 -%% -Type: language -Subtag: ada -Description: Adangme -Added: 2005-10-16 -%% -Type: language -Subtag: adb -Description: Adabe -Added: 2009-07-29 -%% -Type: language -Subtag: add -Description: Dzodinka -Added: 2009-07-29 -%% -Type: language -Subtag: ade -Description: Adele -Added: 2009-07-29 -%% -Type: language -Subtag: adf -Description: Dhofari Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: adg -Description: Andegerebinha -Added: 2009-07-29 -%% -Type: language -Subtag: adh -Description: Adhola -Added: 2009-07-29 -%% -Type: language -Subtag: adi -Description: Adi -Added: 2009-07-29 -%% -Type: language -Subtag: adj -Description: Adioukrou -Added: 2009-07-29 -%% -Type: language -Subtag: adl -Description: Galo -Added: 2009-07-29 -%% -Type: language -Subtag: adn -Description: Adang -Added: 2009-07-29 -%% -Type: language -Subtag: ado -Description: Abu -Added: 2009-07-29 -%% -Type: language -Subtag: adp -Description: Adap -Added: 2009-07-29 -%% -Type: language -Subtag: adq -Description: Adangbe -Added: 2009-07-29 -%% -Type: language -Subtag: adr -Description: Adonara -Added: 2009-07-29 -%% -Type: language -Subtag: ads -Description: Adamorobe Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: adt -Description: Adnyamathanha -Added: 2009-07-29 -%% -Type: language -Subtag: adu -Description: Aduge -Added: 2009-07-29 -%% -Type: language -Subtag: adw -Description: Amundava -Added: 2009-07-29 -%% -Type: language -Subtag: adx -Description: Amdo Tibetan -Added: 2009-07-29 -%% -Type: language -Subtag: ady -Description: Adyghe -Description: Adygei -Added: 2005-10-16 -%% -Type: language -Subtag: adz -Description: Adzera -Added: 2009-07-29 -%% -Type: language -Subtag: aea -Description: Areba -Added: 2009-07-29 -%% -Type: language -Subtag: aeb -Description: Tunisian Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: aec -Description: Saidi Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: aed -Description: Argentine Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: aee -Description: Northeast Pashayi -Added: 2009-07-29 -%% -Type: language -Subtag: aek -Description: Haeke -Added: 2009-07-29 -%% -Type: language -Subtag: ael -Description: Ambele -Added: 2009-07-29 -%% -Type: language -Subtag: aem -Description: Arem -Added: 2009-07-29 -%% -Type: language -Subtag: aen -Description: Armenian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: aeq -Description: Aer -Added: 2009-07-29 -%% -Type: language -Subtag: aer -Description: Eastern Arrernte -Added: 2009-07-29 -%% -Type: language -Subtag: aes -Description: Alsea -Added: 2009-07-29 -%% -Type: language -Subtag: aeu -Description: Akeu -Added: 2009-07-29 -%% -Type: language -Subtag: aew -Description: Ambakich -Added: 2009-07-29 -%% -Type: language -Subtag: aey -Description: Amele -Added: 2009-07-29 -%% -Type: language -Subtag: aez -Description: Aeka -Added: 2009-07-29 -%% -Type: language -Subtag: afa -Description: Afro-Asiatic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: afb -Description: Gulf Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: afd -Description: Andai -Added: 2009-07-29 -%% -Type: language -Subtag: afe -Description: Putukwam -Added: 2009-07-29 -%% -Type: language -Subtag: afg -Description: Afghan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: afh -Description: Afrihili -Added: 2005-10-16 -%% -Type: language -Subtag: afi -Description: Akrukay -Added: 2009-07-29 -%% -Type: language -Subtag: afk -Description: Nanubae -Added: 2009-07-29 -%% -Type: language -Subtag: afn -Description: Defaka -Added: 2009-07-29 -%% -Type: language -Subtag: afo -Description: Eloyi -Added: 2009-07-29 -%% -Type: language -Subtag: afp -Description: Tapei -Added: 2009-07-29 -%% -Type: language -Subtag: afs -Description: Afro-Seminole Creole -Added: 2009-07-29 -%% -Type: language -Subtag: aft -Description: Afitti -Added: 2009-07-29 -%% -Type: language -Subtag: afu -Description: Awutu -Added: 2009-07-29 -%% -Type: language -Subtag: afz -Description: Obokuitai -Added: 2009-07-29 -%% -Type: language -Subtag: aga -Description: Aguano -Added: 2009-07-29 -%% -Type: language -Subtag: agb -Description: Legbo -Added: 2009-07-29 -%% -Type: language -Subtag: agc -Description: Agatu -Added: 2009-07-29 -%% -Type: language -Subtag: agd -Description: Agarabi -Added: 2009-07-29 -%% -Type: language -Subtag: age -Description: Angal -Added: 2009-07-29 -%% -Type: language -Subtag: agf -Description: Arguni -Added: 2009-07-29 -%% -Type: language -Subtag: agg -Description: Angor -Added: 2009-07-29 -%% -Type: language -Subtag: agh -Description: Ngelima -Added: 2009-07-29 -%% -Type: language -Subtag: agi -Description: Agariya -Added: 2009-07-29 -%% -Type: language -Subtag: agj -Description: Argobba -Added: 2009-07-29 -%% -Type: language -Subtag: agk -Description: Isarog Agta -Added: 2009-07-29 -%% -Type: language -Subtag: agl -Description: Fembe -Added: 2009-07-29 -%% -Type: language -Subtag: agm -Description: Angaataha -Added: 2009-07-29 -%% -Type: language -Subtag: agn -Description: Agutaynen -Added: 2009-07-29 -%% -Type: language -Subtag: ago -Description: Tainae -Added: 2009-07-29 -%% -Type: language -Subtag: agp -Description: Paranan -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see apf, prf -%% -Type: language -Subtag: agq -Description: Aghem -Added: 2009-07-29 -%% -Type: language -Subtag: agr -Description: Aguaruna -Added: 2009-07-29 -%% -Type: language -Subtag: ags -Description: Esimbi -Added: 2009-07-29 -%% -Type: language -Subtag: agt -Description: Central Cagayan Agta -Added: 2009-07-29 -%% -Type: language -Subtag: agu -Description: Aguacateco -Added: 2009-07-29 -%% -Type: language -Subtag: agv -Description: Remontado Dumagat -Added: 2009-07-29 -%% -Type: language -Subtag: agw -Description: Kahua -Added: 2009-07-29 -%% -Type: language -Subtag: agx -Description: Aghul -Added: 2009-07-29 -%% -Type: language -Subtag: agy -Description: Southern Alta -Added: 2009-07-29 -%% -Type: language -Subtag: agz -Description: Mt. Iriga Agta -Added: 2009-07-29 -%% -Type: language -Subtag: aha -Description: Ahanta -Added: 2009-07-29 -%% -Type: language -Subtag: ahb -Description: Axamb -Added: 2009-07-29 -%% -Type: language -Subtag: ahg -Description: Qimant -Added: 2009-07-29 -%% -Type: language -Subtag: ahh -Description: Aghu -Added: 2009-07-29 -%% -Type: language -Subtag: ahi -Description: Tiagbamrin Aizi -Added: 2009-07-29 -%% -Type: language -Subtag: ahk -Description: Akha -Added: 2009-07-29 -%% -Type: language -Subtag: ahl -Description: Igo -Added: 2009-07-29 -%% -Type: language -Subtag: ahm -Description: Mobumrin Aizi -Added: 2009-07-29 -%% -Type: language -Subtag: ahn -Description: Àhàn -Added: 2009-07-29 -%% -Type: language -Subtag: aho -Description: Ahom -Added: 2009-07-29 -%% -Type: language -Subtag: ahp -Description: Aproumu Aizi -Added: 2009-07-29 -%% -Type: language -Subtag: ahr -Description: Ahirani -Added: 2009-07-29 -%% -Type: language -Subtag: ahs -Description: Ashe -Added: 2009-07-29 -%% -Type: language -Subtag: aht -Description: Ahtena -Added: 2009-07-29 -%% -Type: language -Subtag: aia -Description: Arosi -Added: 2009-07-29 -%% -Type: language -Subtag: aib -Description: Ainu (China) -Added: 2009-07-29 -%% -Type: language -Subtag: aic -Description: Ainbai -Added: 2009-07-29 -%% -Type: language -Subtag: aid -Description: Alngith -Added: 2009-07-29 -%% -Type: language -Subtag: aie -Description: Amara -Added: 2009-07-29 -%% -Type: language -Subtag: aif -Description: Agi -Added: 2009-07-29 -%% -Type: language -Subtag: aig -Description: Antigua and Barbuda Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: aih -Description: Ai-Cham -Added: 2009-07-29 -%% -Type: language -Subtag: aii -Description: Assyrian Neo-Aramaic -Added: 2009-07-29 -Macrolanguage: syr -%% -Type: language -Subtag: aij -Description: Lishanid Noshan -Added: 2009-07-29 -%% -Type: language -Subtag: aik -Description: Ake -Added: 2009-07-29 -%% -Type: language -Subtag: ail -Description: Aimele -Added: 2009-07-29 -%% -Type: language -Subtag: aim -Description: Aimol -Added: 2009-07-29 -%% -Type: language -Subtag: ain -Description: Ainu (Japan) -Added: 2005-10-16 -%% -Type: language -Subtag: aio -Description: Aiton -Added: 2009-07-29 -%% -Type: language -Subtag: aip -Description: Burumakok -Added: 2009-07-29 -%% -Type: language -Subtag: aiq -Description: Aimaq -Added: 2009-07-29 -%% -Type: language -Subtag: air -Description: Airoran -Added: 2009-07-29 -%% -Type: language -Subtag: ais -Description: Nataoran Amis -Added: 2009-07-29 -%% -Type: language -Subtag: ait -Description: Arikem -Added: 2009-07-29 -%% -Type: language -Subtag: aiw -Description: Aari -Added: 2009-07-29 -%% -Type: language -Subtag: aix -Description: Aighon -Added: 2009-07-29 -%% -Type: language -Subtag: aiy -Description: Ali -Added: 2009-07-29 -%% -Type: language -Subtag: aja -Description: Aja (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: ajg -Description: Aja (Benin) -Added: 2009-07-29 -%% -Type: language -Subtag: aji -Description: Ajië -Added: 2009-07-29 -%% -Type: language -Subtag: ajn -Description: Andajin -Added: 2012-08-12 -%% -Type: language -Subtag: ajp -Description: South Levantine Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: ajt -Description: Judeo-Tunisian Arabic -Added: 2009-07-29 -Macrolanguage: jrb -%% -Type: language -Subtag: aju -Description: Judeo-Moroccan Arabic -Added: 2009-07-29 -Macrolanguage: jrb -%% -Type: language -Subtag: ajw -Description: Ajawa -Added: 2009-07-29 -%% -Type: language -Subtag: ajz -Description: Amri Karbi -Added: 2009-07-29 -%% -Type: language -Subtag: akb -Description: Batak Angkola -Added: 2009-07-29 -%% -Type: language -Subtag: akc -Description: Mpur -Added: 2009-07-29 -%% -Type: language -Subtag: akd -Description: Ukpet-Ehom -Added: 2009-07-29 -%% -Type: language -Subtag: ake -Description: Akawaio -Added: 2009-07-29 -%% -Type: language -Subtag: akf -Description: Akpa -Added: 2009-07-29 -%% -Type: language -Subtag: akg -Description: Anakalangu -Added: 2009-07-29 -%% -Type: language -Subtag: akh -Description: Angal Heneng -Added: 2009-07-29 -%% -Type: language -Subtag: aki -Description: Aiome -Added: 2009-07-29 -%% -Type: language -Subtag: akj -Description: Aka-Jeru -Added: 2009-07-29 -%% -Type: language -Subtag: akk -Description: Akkadian -Added: 2005-10-16 -%% -Type: language -Subtag: akl -Description: Aklanon -Added: 2009-07-29 -%% -Type: language -Subtag: akm -Description: Aka-Bo -Added: 2009-07-29 -%% -Type: language -Subtag: ako -Description: Akurio -Added: 2009-07-29 -%% -Type: language -Subtag: akp -Description: Siwu -Added: 2009-07-29 -%% -Type: language -Subtag: akq -Description: Ak -Added: 2009-07-29 -%% -Type: language -Subtag: akr -Description: Araki -Added: 2009-07-29 -%% -Type: language -Subtag: aks -Description: Akaselem -Added: 2009-07-29 -%% -Type: language -Subtag: akt -Description: Akolet -Added: 2009-07-29 -%% -Type: language -Subtag: aku -Description: Akum -Added: 2009-07-29 -%% -Type: language -Subtag: akv -Description: Akhvakh -Added: 2009-07-29 -%% -Type: language -Subtag: akw -Description: Akwa -Added: 2009-07-29 -%% -Type: language -Subtag: akx -Description: Aka-Kede -Added: 2009-07-29 -%% -Type: language -Subtag: aky -Description: Aka-Kol -Added: 2009-07-29 -%% -Type: language -Subtag: akz -Description: Alabama -Added: 2009-07-29 -%% -Type: language -Subtag: ala -Description: Alago -Added: 2009-07-29 -%% -Type: language -Subtag: alc -Description: Qawasqar -Added: 2009-07-29 -%% -Type: language -Subtag: ald -Description: Alladian -Added: 2009-07-29 -%% -Type: language -Subtag: ale -Description: Aleut -Added: 2005-10-16 -%% -Type: language -Subtag: alf -Description: Alege -Added: 2009-07-29 -%% -Type: language -Subtag: alg -Description: Algonquian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: alh -Description: Alawa -Added: 2009-07-29 -%% -Type: language -Subtag: ali -Description: Amaimon -Added: 2009-07-29 -%% -Type: language -Subtag: alj -Description: Alangan -Added: 2009-07-29 -%% -Type: language -Subtag: alk -Description: Alak -Added: 2009-07-29 -%% -Type: language -Subtag: all -Description: Allar -Added: 2009-07-29 -%% -Type: language -Subtag: alm -Description: Amblong -Added: 2009-07-29 -%% -Type: language -Subtag: aln -Description: Gheg Albanian -Added: 2009-07-29 -Macrolanguage: sq -%% -Type: language -Subtag: alo -Description: Larike-Wakasihu -Added: 2009-07-29 -%% -Type: language -Subtag: alp -Description: Alune -Added: 2009-07-29 -%% -Type: language -Subtag: alq -Description: Algonquin -Added: 2009-07-29 -%% -Type: language -Subtag: alr -Description: Alutor -Added: 2009-07-29 -%% -Type: language -Subtag: als -Description: Tosk Albanian -Added: 2009-07-29 -Macrolanguage: sq -%% -Type: language -Subtag: alt -Description: Southern Altai -Added: 2005-10-16 -%% -Type: language -Subtag: alu -Description: 'Are'are -Added: 2009-07-29 -%% -Type: language -Subtag: alv -Description: Atlantic-Congo languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: alw -Description: Alaba-K’abeena -Description: Wanbasana -Added: 2009-07-29 -%% -Type: language -Subtag: alx -Description: Amol -Added: 2009-07-29 -%% -Type: language -Subtag: aly -Description: Alyawarr -Added: 2009-07-29 -%% -Type: language -Subtag: alz -Description: Alur -Added: 2009-07-29 -%% -Type: language -Subtag: ama -Description: Amanayé -Added: 2009-07-29 -%% -Type: language -Subtag: amb -Description: Ambo -Added: 2009-07-29 -%% -Type: language -Subtag: amc -Description: Amahuaca -Added: 2009-07-29 -%% -Type: language -Subtag: ame -Description: Yanesha' -Added: 2009-07-29 -%% -Type: language -Subtag: amf -Description: Hamer-Banna -Added: 2009-07-29 -%% -Type: language -Subtag: amg -Description: Amurdak -Added: 2009-07-29 -%% -Type: language -Subtag: ami -Description: Amis -Added: 2009-07-29 -%% -Type: language -Subtag: amj -Description: Amdang -Added: 2009-07-29 -%% -Type: language -Subtag: amk -Description: Ambai -Added: 2009-07-29 -%% -Type: language -Subtag: aml -Description: War-Jaintia -Added: 2009-07-29 -%% -Type: language -Subtag: amm -Description: Ama (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: amn -Description: Amanab -Added: 2009-07-29 -%% -Type: language -Subtag: amo -Description: Amo -Added: 2009-07-29 -%% -Type: language -Subtag: amp -Description: Alamblak -Added: 2009-07-29 -%% -Type: language -Subtag: amq -Description: Amahai -Added: 2009-07-29 -%% -Type: language -Subtag: amr -Description: Amarakaeri -Added: 2009-07-29 -%% -Type: language -Subtag: ams -Description: Southern Amami-Oshima -Added: 2009-07-29 -%% -Type: language -Subtag: amt -Description: Amto -Added: 2009-07-29 -%% -Type: language -Subtag: amu -Description: Guerrero Amuzgo -Added: 2009-07-29 -%% -Type: language -Subtag: amv -Description: Ambelau -Added: 2009-07-29 -%% -Type: language -Subtag: amw -Description: Western Neo-Aramaic -Added: 2009-07-29 -%% -Type: language -Subtag: amx -Description: Anmatyerre -Added: 2009-07-29 -%% -Type: language -Subtag: amy -Description: Ami -Added: 2009-07-29 -%% -Type: language -Subtag: amz -Description: Atampaya -Added: 2009-07-29 -%% -Type: language -Subtag: ana -Description: Andaqui -Added: 2009-07-29 -%% -Type: language -Subtag: anb -Description: Andoa -Added: 2009-07-29 -%% -Type: language -Subtag: anc -Description: Ngas -Added: 2009-07-29 -%% -Type: language -Subtag: and -Description: Ansus -Added: 2009-07-29 -%% -Type: language -Subtag: ane -Description: Xârâcùù -Added: 2009-07-29 -%% -Type: language -Subtag: anf -Description: Animere -Added: 2009-07-29 -%% -Type: language -Subtag: ang -Description: Old English (ca. 450-1100) -Added: 2005-10-16 -%% -Type: language -Subtag: anh -Description: Nend -Added: 2009-07-29 -%% -Type: language -Subtag: ani -Description: Andi -Added: 2009-07-29 -%% -Type: language -Subtag: anj -Description: Anor -Added: 2009-07-29 -%% -Type: language -Subtag: ank -Description: Goemai -Added: 2009-07-29 -%% -Type: language -Subtag: anl -Description: Anu-Hkongso Chin -Added: 2009-07-29 -%% -Type: language -Subtag: anm -Description: Anal -Added: 2009-07-29 -%% -Type: language -Subtag: ann -Description: Obolo -Added: 2009-07-29 -%% -Type: language -Subtag: ano -Description: Andoque -Added: 2009-07-29 -%% -Type: language -Subtag: anp -Description: Angika -Added: 2006-03-08 -%% -Type: language -Subtag: anq -Description: Jarawa (India) -Added: 2009-07-29 -%% -Type: language -Subtag: anr -Description: Andh -Added: 2009-07-29 -%% -Type: language -Subtag: ans -Description: Anserma -Added: 2009-07-29 -%% -Type: language -Subtag: ant -Description: Antakarinya -Added: 2009-07-29 -%% -Type: language -Subtag: anu -Description: Anuak -Added: 2009-07-29 -%% -Type: language -Subtag: anv -Description: Denya -Added: 2009-07-29 -%% -Type: language -Subtag: anw -Description: Anaang -Added: 2009-07-29 -%% -Type: language -Subtag: anx -Description: Andra-Hus -Added: 2009-07-29 -%% -Type: language -Subtag: any -Description: Anyin -Added: 2009-07-29 -%% -Type: language -Subtag: anz -Description: Anem -Added: 2009-07-29 -%% -Type: language -Subtag: aoa -Description: Angolar -Added: 2009-07-29 -%% -Type: language -Subtag: aob -Description: Abom -Added: 2009-07-29 -%% -Type: language -Subtag: aoc -Description: Pemon -Added: 2009-07-29 -%% -Type: language -Subtag: aod -Description: Andarum -Added: 2009-07-29 -%% -Type: language -Subtag: aoe -Description: Angal Enen -Added: 2009-07-29 -%% -Type: language -Subtag: aof -Description: Bragat -Added: 2009-07-29 -%% -Type: language -Subtag: aog -Description: Angoram -Added: 2009-07-29 -%% -Type: language -Subtag: aoh -Description: Arma -Added: 2009-07-29 -%% -Type: language -Subtag: aoi -Description: Anindilyakwa -Added: 2009-07-29 -%% -Type: language -Subtag: aoj -Description: Mufian -Added: 2009-07-29 -%% -Type: language -Subtag: aok -Description: Arhö -Added: 2009-07-29 -%% -Type: language -Subtag: aol -Description: Alor -Added: 2009-07-29 -%% -Type: language -Subtag: aom -Description: Ömie -Added: 2009-07-29 -%% -Type: language -Subtag: aon -Description: Bumbita Arapesh -Added: 2009-07-29 -%% -Type: language -Subtag: aor -Description: Aore -Added: 2009-07-29 -%% -Type: language -Subtag: aos -Description: Taikat -Added: 2009-07-29 -%% -Type: language -Subtag: aot -Description: A'tong -Added: 2009-07-29 -%% -Type: language -Subtag: aou -Description: A'ou -Added: 2012-08-12 -%% -Type: language -Subtag: aox -Description: Atorada -Added: 2009-07-29 -%% -Type: language -Subtag: aoz -Description: Uab Meto -Added: 2009-07-29 -%% -Type: language -Subtag: apa -Description: Apache languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: apb -Description: Sa'a -Added: 2009-07-29 -%% -Type: language -Subtag: apc -Description: North Levantine Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: apd -Description: Sudanese Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: ape -Description: Bukiyip -Added: 2009-07-29 -%% -Type: language -Subtag: apf -Description: Pahanan Agta -Added: 2010-03-11 -%% -Type: language -Subtag: apg -Description: Ampanang -Added: 2009-07-29 -%% -Type: language -Subtag: aph -Description: Athpariya -Added: 2009-07-29 -%% -Type: language -Subtag: api -Description: Apiaká -Added: 2009-07-29 -%% -Type: language -Subtag: apj -Description: Jicarilla Apache -Added: 2009-07-29 -%% -Type: language -Subtag: apk -Description: Kiowa Apache -Added: 2009-07-29 -%% -Type: language -Subtag: apl -Description: Lipan Apache -Added: 2009-07-29 -%% -Type: language -Subtag: apm -Description: Mescalero-Chiricahua Apache -Added: 2009-07-29 -%% -Type: language -Subtag: apn -Description: Apinayé -Added: 2009-07-29 -%% -Type: language -Subtag: apo -Description: Ambul -Added: 2009-07-29 -%% -Type: language -Subtag: app -Description: Apma -Added: 2009-07-29 -%% -Type: language -Subtag: apq -Description: A-Pucikwar -Added: 2009-07-29 -%% -Type: language -Subtag: apr -Description: Arop-Lokep -Added: 2009-07-29 -%% -Type: language -Subtag: aps -Description: Arop-Sissano -Added: 2009-07-29 -%% -Type: language -Subtag: apt -Description: Apatani -Added: 2009-07-29 -%% -Type: language -Subtag: apu -Description: Apurinã -Added: 2009-07-29 -%% -Type: language -Subtag: apv -Description: Alapmunte -Added: 2009-07-29 -%% -Type: language -Subtag: apw -Description: Western Apache -Added: 2009-07-29 -%% -Type: language -Subtag: apx -Description: Aputai -Added: 2009-07-29 -%% -Type: language -Subtag: apy -Description: Apalaí -Added: 2009-07-29 -%% -Type: language -Subtag: apz -Description: Safeyoka -Added: 2009-07-29 -%% -Type: language -Subtag: aqa -Description: Alacalufan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: aqc -Description: Archi -Added: 2009-07-29 -%% -Type: language -Subtag: aqd -Description: Ampari Dogon -Added: 2011-08-16 -%% -Type: language -Subtag: aqg -Description: Arigidi -Added: 2009-07-29 -%% -Type: language -Subtag: aql -Description: Algic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: aqm -Description: Atohwaim -Added: 2009-07-29 -%% -Type: language -Subtag: aqn -Description: Northern Alta -Added: 2009-07-29 -%% -Type: language -Subtag: aqp -Description: Atakapa -Added: 2009-07-29 -%% -Type: language -Subtag: aqr -Description: Arhâ -Added: 2009-07-29 -%% -Type: language -Subtag: aqz -Description: Akuntsu -Added: 2010-03-11 -%% -Type: language -Subtag: arb -Description: Standard Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: arc -Description: Official Aramaic (700-300 BCE) -Description: Imperial Aramaic (700-300 BCE) -Added: 2005-10-16 -%% -Type: language -Subtag: ard -Description: Arabana -Added: 2009-07-29 -%% -Type: language -Subtag: are -Description: Western Arrarnta -Added: 2009-07-29 -%% -Type: language -Subtag: arh -Description: Arhuaco -Added: 2009-07-29 -%% -Type: language -Subtag: ari -Description: Arikara -Added: 2009-07-29 -%% -Type: language -Subtag: arj -Description: Arapaso -Added: 2009-07-29 -%% -Type: language -Subtag: ark -Description: Arikapú -Added: 2009-07-29 -%% -Type: language -Subtag: arl -Description: Arabela -Added: 2009-07-29 -%% -Type: language -Subtag: arn -Description: Mapudungun -Description: Mapuche -Added: 2005-10-16 -%% -Type: language -Subtag: aro -Description: Araona -Added: 2009-07-29 -%% -Type: language -Subtag: arp -Description: Arapaho -Added: 2005-10-16 -%% -Type: language -Subtag: arq -Description: Algerian Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: arr -Description: Karo (Brazil) -Added: 2009-07-29 -%% -Type: language -Subtag: ars -Description: Najdi Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: art -Description: Artificial languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: aru -Description: Aruá (Amazonas State) -Description: Arawá -Added: 2009-07-29 -%% -Type: language -Subtag: arv -Description: Arbore -Added: 2009-07-29 -%% -Type: language -Subtag: arw -Description: Arawak -Added: 2005-10-16 -%% -Type: language -Subtag: arx -Description: Aruá (Rodonia State) -Added: 2009-07-29 -%% -Type: language -Subtag: ary -Description: Moroccan Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: arz -Description: Egyptian Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: asa -Description: Asu (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: asb -Description: Assiniboine -Added: 2009-07-29 -%% -Type: language -Subtag: asc -Description: Casuarina Coast Asmat -Added: 2009-07-29 -%% -Type: language -Subtag: asd -Description: Asas -Added: 2009-07-29 -%% -Type: language -Subtag: ase -Description: American Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: asf -Description: Australian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: asg -Description: Cishingini -Added: 2009-07-29 -%% -Type: language -Subtag: ash -Description: Abishira -Added: 2009-07-29 -%% -Type: language -Subtag: asi -Description: Buruwai -Added: 2009-07-29 -%% -Type: language -Subtag: asj -Description: Sari -Added: 2009-07-29 -%% -Type: language -Subtag: ask -Description: Ashkun -Added: 2009-07-29 -%% -Type: language -Subtag: asl -Description: Asilulu -Added: 2009-07-29 -%% -Type: language -Subtag: asn -Description: Xingú Asuriní -Added: 2009-07-29 -%% -Type: language -Subtag: aso -Description: Dano -Added: 2009-07-29 -%% -Type: language -Subtag: asp -Description: Algerian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: asq -Description: Austrian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: asr -Description: Asuri -Added: 2009-07-29 -%% -Type: language -Subtag: ass -Description: Ipulo -Added: 2009-07-29 -%% -Type: language -Subtag: ast -Description: Asturian -Description: Asturleonese -Description: Bable -Description: Leonese -Added: 2005-10-16 -%% -Type: language -Subtag: asu -Description: Tocantins Asurini -Added: 2009-07-29 -%% -Type: language -Subtag: asv -Description: Asoa -Added: 2009-07-29 -%% -Type: language -Subtag: asw -Description: Australian Aborigines Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: asx -Description: Muratayak -Added: 2009-07-29 -%% -Type: language -Subtag: asy -Description: Yaosakor Asmat -Added: 2009-07-29 -%% -Type: language -Subtag: asz -Description: As -Added: 2009-07-29 -%% -Type: language -Subtag: ata -Description: Pele-Ata -Added: 2009-07-29 -%% -Type: language -Subtag: atb -Description: Zaiwa -Added: 2009-07-29 -%% -Type: language -Subtag: atc -Description: Atsahuaca -Added: 2009-07-29 -%% -Type: language -Subtag: atd -Description: Ata Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: ate -Description: Atemble -Added: 2009-07-29 -%% -Type: language -Subtag: atg -Description: Ivbie North-Okpela-Arhe -Added: 2009-07-29 -%% -Type: language -Subtag: ath -Description: Athapascan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: ati -Description: Attié -Added: 2009-07-29 -%% -Type: language -Subtag: atj -Description: Atikamekw -Added: 2009-07-29 -%% -Type: language -Subtag: atk -Description: Ati -Added: 2009-07-29 -%% -Type: language -Subtag: atl -Description: Mt. Iraya Agta -Added: 2009-07-29 -%% -Type: language -Subtag: atm -Description: Ata -Added: 2009-07-29 -%% -Type: language -Subtag: atn -Description: Ashtiani -Added: 2009-07-29 -%% -Type: language -Subtag: ato -Description: Atong -Added: 2009-07-29 -%% -Type: language -Subtag: atp -Description: Pudtol Atta -Added: 2009-07-29 -%% -Type: language -Subtag: atq -Description: Aralle-Tabulahan -Added: 2009-07-29 -%% -Type: language -Subtag: atr -Description: Waimiri-Atroari -Added: 2009-07-29 -%% -Type: language -Subtag: ats -Description: Gros Ventre -Added: 2009-07-29 -%% -Type: language -Subtag: att -Description: Pamplona Atta -Added: 2009-07-29 -%% -Type: language -Subtag: atu -Description: Reel -Added: 2009-07-29 -%% -Type: language -Subtag: atv -Description: Northern Altai -Added: 2009-07-29 -%% -Type: language -Subtag: atw -Description: Atsugewi -Added: 2009-07-29 -%% -Type: language -Subtag: atx -Description: Arutani -Added: 2009-07-29 -%% -Type: language -Subtag: aty -Description: Aneityum -Added: 2009-07-29 -%% -Type: language -Subtag: atz -Description: Arta -Added: 2009-07-29 -%% -Type: language -Subtag: aua -Description: Asumboa -Added: 2009-07-29 -%% -Type: language -Subtag: aub -Description: Alugu -Added: 2009-07-29 -%% -Type: language -Subtag: auc -Description: Waorani -Added: 2009-07-29 -%% -Type: language -Subtag: aud -Description: Anuta -Added: 2009-07-29 -%% -Type: language -Subtag: aue -Description: =/Kx'au//'ein -Added: 2009-07-29 -%% -Type: language -Subtag: auf -Description: Arauan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: aug -Description: Aguna -Added: 2009-07-29 -%% -Type: language -Subtag: auh -Description: Aushi -Added: 2009-07-29 -%% -Type: language -Subtag: aui -Description: Anuki -Added: 2009-07-29 -%% -Type: language -Subtag: auj -Description: Awjilah -Added: 2009-07-29 -%% -Type: language -Subtag: auk -Description: Heyo -Added: 2009-07-29 -%% -Type: language -Subtag: aul -Description: Aulua -Added: 2009-07-29 -%% -Type: language -Subtag: aum -Description: Asu (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: aun -Description: Molmo One -Added: 2009-07-29 -%% -Type: language -Subtag: auo -Description: Auyokawa -Added: 2009-07-29 -%% -Type: language -Subtag: aup -Description: Makayam -Added: 2009-07-29 -%% -Type: language -Subtag: auq -Description: Anus -Description: Korur -Added: 2009-07-29 -%% -Type: language -Subtag: aur -Description: Aruek -Added: 2009-07-29 -%% -Type: language -Subtag: aus -Description: Australian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: aut -Description: Austral -Added: 2009-07-29 -%% -Type: language -Subtag: auu -Description: Auye -Added: 2009-07-29 -%% -Type: language -Subtag: auw -Description: Awyi -Added: 2009-07-29 -%% -Type: language -Subtag: aux -Description: Aurá -Added: 2009-07-29 -%% -Type: language -Subtag: auy -Description: Awiyaana -Added: 2009-07-29 -%% -Type: language -Subtag: auz -Description: Uzbeki Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: avb -Description: Avau -Added: 2009-07-29 -%% -Type: language -Subtag: avd -Description: Alviri-Vidari -Added: 2009-07-29 -%% -Type: language -Subtag: avi -Description: Avikam -Added: 2009-07-29 -%% -Type: language -Subtag: avk -Description: Kotava -Added: 2009-07-29 -%% -Type: language -Subtag: avl -Description: Eastern Egyptian Bedawi Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: avm -Description: Angkamuthi -Added: 2012-08-12 -%% -Type: language -Subtag: avn -Description: Avatime -Added: 2009-07-29 -%% -Type: language -Subtag: avo -Description: Agavotaguerra -Added: 2009-07-29 -%% -Type: language -Subtag: avs -Description: Aushiri -Added: 2009-07-29 -%% -Type: language -Subtag: avt -Description: Au -Added: 2009-07-29 -%% -Type: language -Subtag: avu -Description: Avokaya -Added: 2009-07-29 -%% -Type: language -Subtag: avv -Description: Avá-Canoeiro -Added: 2009-07-29 -%% -Type: language -Subtag: awa -Description: Awadhi -Added: 2005-10-16 -%% -Type: language -Subtag: awb -Description: Awa (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: awc -Description: Cicipu -Added: 2009-07-29 -%% -Type: language -Subtag: awd -Description: Arawakan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: awe -Description: Awetí -Added: 2009-07-29 -%% -Type: language -Subtag: awg -Description: Anguthimri -Added: 2012-08-12 -%% -Type: language -Subtag: awh -Description: Awbono -Added: 2009-07-29 -%% -Type: language -Subtag: awi -Description: Aekyom -Added: 2009-07-29 -%% -Type: language -Subtag: awk -Description: Awabakal -Added: 2009-07-29 -%% -Type: language -Subtag: awm -Description: Arawum -Added: 2009-07-29 -%% -Type: language -Subtag: awn -Description: Awngi -Added: 2009-07-29 -%% -Type: language -Subtag: awo -Description: Awak -Added: 2009-07-29 -%% -Type: language -Subtag: awr -Description: Awera -Added: 2009-07-29 -%% -Type: language -Subtag: aws -Description: South Awyu -Added: 2009-07-29 -%% -Type: language -Subtag: awt -Description: Araweté -Added: 2009-07-29 -%% -Type: language -Subtag: awu -Description: Central Awyu -Added: 2009-07-29 -%% -Type: language -Subtag: awv -Description: Jair Awyu -Added: 2009-07-29 -%% -Type: language -Subtag: aww -Description: Awun -Added: 2009-07-29 -%% -Type: language -Subtag: awx -Description: Awara -Added: 2009-07-29 -%% -Type: language -Subtag: awy -Description: Edera Awyu -Added: 2009-07-29 -%% -Type: language -Subtag: axb -Description: Abipon -Added: 2009-07-29 -%% -Type: language -Subtag: axe -Description: Ayerrerenge -Added: 2012-08-12 -%% -Type: language -Subtag: axg -Description: Mato Grosso Arára -Added: 2009-07-29 -%% -Type: language -Subtag: axk -Description: Yaka (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: axl -Description: Lower Southern Aranda -Added: 2013-09-10 -%% -Type: language -Subtag: axm -Description: Middle Armenian -Added: 2009-07-29 -%% -Type: language -Subtag: axx -Description: Xârâgurè -Added: 2009-07-29 -%% -Type: language -Subtag: aya -Description: Awar -Added: 2009-07-29 -%% -Type: language -Subtag: ayb -Description: Ayizo Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: ayc -Description: Southern Aymara -Added: 2009-07-29 -Macrolanguage: ay -%% -Type: language -Subtag: ayd -Description: Ayabadhu -Added: 2009-07-29 -%% -Type: language -Subtag: aye -Description: Ayere -Added: 2009-07-29 -%% -Type: language -Subtag: ayg -Description: Ginyanga -Added: 2009-07-29 -%% -Type: language -Subtag: ayh -Description: Hadrami Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: ayi -Description: Leyigha -Added: 2009-07-29 -%% -Type: language -Subtag: ayk -Description: Akuku -Added: 2009-07-29 -%% -Type: language -Subtag: ayl -Description: Libyan Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: ayn -Description: Sanaani Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: ayo -Description: Ayoreo -Added: 2009-07-29 -%% -Type: language -Subtag: ayp -Description: North Mesopotamian Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: ayq -Description: Ayi (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: ayr -Description: Central Aymara -Added: 2009-07-29 -Macrolanguage: ay -%% -Type: language -Subtag: ays -Description: Sorsogon Ayta -Added: 2009-07-29 -%% -Type: language -Subtag: ayt -Description: Magbukun Ayta -Added: 2009-07-29 -%% -Type: language -Subtag: ayu -Description: Ayu -Added: 2009-07-29 -%% -Type: language -Subtag: ayx -Description: Ayi (China) -Added: 2009-07-29 -Deprecated: 2011-08-16 -Preferred-Value: nun -%% -Type: language -Subtag: ayy -Description: Tayabas Ayta -Added: 2009-07-29 -%% -Type: language -Subtag: ayz -Description: Mai Brat -Added: 2009-07-29 -%% -Type: language -Subtag: aza -Description: Azha -Added: 2009-07-29 -%% -Type: language -Subtag: azb -Description: South Azerbaijani -Added: 2009-07-29 -Macrolanguage: az -%% -Type: language -Subtag: azc -Description: Uto-Aztecan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: azd -Description: Eastern Durango Nahuatl -Added: 2012-08-12 -%% -Type: language -Subtag: azg -Description: San Pedro Amuzgos Amuzgo -Added: 2009-07-29 -%% -Type: language -Subtag: azj -Description: North Azerbaijani -Added: 2009-07-29 -Macrolanguage: az -%% -Type: language -Subtag: azm -Description: Ipalapa Amuzgo -Added: 2009-07-29 -%% -Type: language -Subtag: azn -Description: Western Durango Nahuatl -Added: 2012-08-12 -%% -Type: language -Subtag: azo -Description: Awing -Added: 2009-07-29 -%% -Type: language -Subtag: azt -Description: Faire Atta -Added: 2009-07-29 -%% -Type: language -Subtag: azz -Description: Highland Puebla Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: baa -Description: Babatana -Added: 2009-07-29 -%% -Type: language -Subtag: bab -Description: Bainouk-Gunyuño -Added: 2009-07-29 -%% -Type: language -Subtag: bac -Description: Badui -Added: 2009-07-29 -%% -Type: language -Subtag: bad -Description: Banda languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: bae -Description: Baré -Added: 2009-07-29 -%% -Type: language -Subtag: baf -Description: Nubaca -Added: 2009-07-29 -%% -Type: language -Subtag: bag -Description: Tuki -Added: 2009-07-29 -%% -Type: language -Subtag: bah -Description: Bahamas Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: bai -Description: Bamileke languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: baj -Description: Barakai -Added: 2009-07-29 -%% -Type: language -Subtag: bal -Description: Baluchi -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: ban -Description: Balinese -Added: 2005-10-16 -%% -Type: language -Subtag: bao -Description: Waimaha -Added: 2009-07-29 -%% -Type: language -Subtag: bap -Description: Bantawa -Added: 2009-07-29 -%% -Type: language -Subtag: bar -Description: Bavarian -Added: 2009-07-29 -%% -Type: language -Subtag: bas -Description: Basa (Cameroon) -Added: 2005-10-16 -%% -Type: language -Subtag: bat -Description: Baltic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: bau -Description: Bada (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: bav -Description: Vengo -Added: 2009-07-29 -%% -Type: language -Subtag: baw -Description: Bambili-Bambui -Added: 2009-07-29 -%% -Type: language -Subtag: bax -Description: Bamun -Added: 2009-07-29 -%% -Type: language -Subtag: bay -Description: Batuley -Added: 2009-07-29 -%% -Type: language -Subtag: baz -Description: Tunen -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see nvo, tvu -%% -Type: language -Subtag: bba -Description: Baatonum -Added: 2009-07-29 -%% -Type: language -Subtag: bbb -Description: Barai -Added: 2009-07-29 -%% -Type: language -Subtag: bbc -Description: Batak Toba -Added: 2009-07-29 -%% -Type: language -Subtag: bbd -Description: Bau -Added: 2009-07-29 -%% -Type: language -Subtag: bbe -Description: Bangba -Added: 2009-07-29 -%% -Type: language -Subtag: bbf -Description: Baibai -Added: 2009-07-29 -%% -Type: language -Subtag: bbg -Description: Barama -Added: 2009-07-29 -%% -Type: language -Subtag: bbh -Description: Bugan -Added: 2009-07-29 -%% -Type: language -Subtag: bbi -Description: Barombi -Added: 2009-07-29 -%% -Type: language -Subtag: bbj -Description: Ghomálá' -Added: 2009-07-29 -%% -Type: language -Subtag: bbk -Description: Babanki -Added: 2009-07-29 -%% -Type: language -Subtag: bbl -Description: Bats -Added: 2009-07-29 -%% -Type: language -Subtag: bbm -Description: Babango -Added: 2009-07-29 -%% -Type: language -Subtag: bbn -Description: Uneapa -Added: 2009-07-29 -%% -Type: language -Subtag: bbo -Description: Northern Bobo Madaré -Description: Konabéré -Added: 2009-07-29 -%% -Type: language -Subtag: bbp -Description: West Central Banda -Added: 2009-07-29 -%% -Type: language -Subtag: bbq -Description: Bamali -Added: 2009-07-29 -%% -Type: language -Subtag: bbr -Description: Girawa -Added: 2009-07-29 -%% -Type: language -Subtag: bbs -Description: Bakpinka -Added: 2009-07-29 -%% -Type: language -Subtag: bbt -Description: Mburku -Added: 2009-07-29 -%% -Type: language -Subtag: bbu -Description: Kulung (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: bbv -Description: Karnai -Added: 2009-07-29 -%% -Type: language -Subtag: bbw -Description: Baba -Added: 2009-07-29 -%% -Type: language -Subtag: bbx -Description: Bubia -Added: 2009-07-29 -%% -Type: language -Subtag: bby -Description: Befang -Added: 2009-07-29 -%% -Type: language -Subtag: bbz -Description: Babalia Creole Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: bca -Description: Central Bai -Added: 2009-07-29 -%% -Type: language -Subtag: bcb -Description: Bainouk-Samik -Added: 2009-07-29 -%% -Type: language -Subtag: bcc -Description: Southern Balochi -Added: 2009-07-29 -Macrolanguage: bal -%% -Type: language -Subtag: bcd -Description: North Babar -Added: 2009-07-29 -%% -Type: language -Subtag: bce -Description: Bamenyam -Added: 2009-07-29 -%% -Type: language -Subtag: bcf -Description: Bamu -Added: 2009-07-29 -%% -Type: language -Subtag: bcg -Description: Baga Binari -Added: 2009-07-29 -%% -Type: language -Subtag: bch -Description: Bariai -Added: 2009-07-29 -%% -Type: language -Subtag: bci -Description: Baoulé -Added: 2009-07-29 -%% -Type: language -Subtag: bcj -Description: Bardi -Added: 2009-07-29 -%% -Type: language -Subtag: bck -Description: Bunaba -Added: 2009-07-29 -%% -Type: language -Subtag: bcl -Description: Central Bikol -Added: 2009-07-29 -Macrolanguage: bik -%% -Type: language -Subtag: bcm -Description: Bannoni -Added: 2009-07-29 -%% -Type: language -Subtag: bcn -Description: Bali (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: bco -Description: Kaluli -Added: 2009-07-29 -%% -Type: language -Subtag: bcp -Description: Bali (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: bcq -Description: Bench -Added: 2009-07-29 -%% -Type: language -Subtag: bcr -Description: Babine -Added: 2009-07-29 -%% -Type: language -Subtag: bcs -Description: Kohumono -Added: 2009-07-29 -%% -Type: language -Subtag: bct -Description: Bendi -Added: 2009-07-29 -%% -Type: language -Subtag: bcu -Description: Awad Bing -Added: 2009-07-29 -%% -Type: language -Subtag: bcv -Description: Shoo-Minda-Nye -Added: 2009-07-29 -%% -Type: language -Subtag: bcw -Description: Bana -Added: 2009-07-29 -%% -Type: language -Subtag: bcy -Description: Bacama -Added: 2009-07-29 -%% -Type: language -Subtag: bcz -Description: Bainouk-Gunyaamolo -Added: 2009-07-29 -%% -Type: language -Subtag: bda -Description: Bayot -Added: 2009-07-29 -%% -Type: language -Subtag: bdb -Description: Basap -Added: 2009-07-29 -%% -Type: language -Subtag: bdc -Description: Emberá-Baudó -Added: 2009-07-29 -%% -Type: language -Subtag: bdd -Description: Bunama -Added: 2009-07-29 -%% -Type: language -Subtag: bde -Description: Bade -Added: 2009-07-29 -%% -Type: language -Subtag: bdf -Description: Biage -Added: 2010-03-11 -%% -Type: language -Subtag: bdg -Description: Bonggi -Added: 2009-07-29 -%% -Type: language -Subtag: bdh -Description: Baka (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: bdi -Description: Burun -Added: 2009-07-29 -%% -Type: language -Subtag: bdj -Description: Bai -Added: 2009-07-29 -%% -Type: language -Subtag: bdk -Description: Budukh -Added: 2009-07-29 -%% -Type: language -Subtag: bdl -Description: Indonesian Bajau -Added: 2009-07-29 -%% -Type: language -Subtag: bdm -Description: Buduma -Added: 2009-07-29 -%% -Type: language -Subtag: bdn -Description: Baldemu -Added: 2009-07-29 -%% -Type: language -Subtag: bdo -Description: Morom -Added: 2009-07-29 -%% -Type: language -Subtag: bdp -Description: Bende -Added: 2009-07-29 -%% -Type: language -Subtag: bdq -Description: Bahnar -Added: 2009-07-29 -%% -Type: language -Subtag: bdr -Description: West Coast Bajau -Added: 2009-07-29 -%% -Type: language -Subtag: bds -Description: Burunge -Added: 2009-07-29 -%% -Type: language -Subtag: bdt -Description: Bokoto -Added: 2009-07-29 -Macrolanguage: gba -%% -Type: language -Subtag: bdu -Description: Oroko -Added: 2009-07-29 -%% -Type: language -Subtag: bdv -Description: Bodo Parja -Added: 2009-07-29 -%% -Type: language -Subtag: bdw -Description: Baham -Added: 2009-07-29 -%% -Type: language -Subtag: bdx -Description: Budong-Budong -Added: 2009-07-29 -%% -Type: language -Subtag: bdy -Description: Bandjalang -Added: 2009-07-29 -%% -Type: language -Subtag: bdz -Description: Badeshi -Added: 2009-07-29 -%% -Type: language -Subtag: bea -Description: Beaver -Added: 2009-07-29 -%% -Type: language -Subtag: beb -Description: Bebele -Added: 2009-07-29 -%% -Type: language -Subtag: bec -Description: Iceve-Maci -Added: 2009-07-29 -%% -Type: language -Subtag: bed -Description: Bedoanas -Added: 2009-07-29 -%% -Type: language -Subtag: bee -Description: Byangsi -Added: 2009-07-29 -%% -Type: language -Subtag: bef -Description: Benabena -Added: 2009-07-29 -%% -Type: language -Subtag: beg -Description: Belait -Added: 2009-07-29 -%% -Type: language -Subtag: beh -Description: Biali -Added: 2009-07-29 -%% -Type: language -Subtag: bei -Description: Bekati' -Added: 2009-07-29 -%% -Type: language -Subtag: bej -Description: Beja -Description: Bedawiyet -Added: 2005-10-16 -%% -Type: language -Subtag: bek -Description: Bebeli -Added: 2009-07-29 -%% -Type: language -Subtag: bem -Description: Bemba (Zambia) -Added: 2005-10-16 -%% -Type: language -Subtag: beo -Description: Beami -Added: 2009-07-29 -%% -Type: language -Subtag: bep -Description: Besoa -Added: 2009-07-29 -%% -Type: language -Subtag: beq -Description: Beembe -Added: 2009-07-29 -%% -Type: language -Subtag: ber -Description: Berber languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: bes -Description: Besme -Added: 2009-07-29 -%% -Type: language -Subtag: bet -Description: Guiberoua Béte -Added: 2009-07-29 -%% -Type: language -Subtag: beu -Description: Blagar -Added: 2009-07-29 -%% -Type: language -Subtag: bev -Description: Daloa Bété -Added: 2009-07-29 -%% -Type: language -Subtag: bew -Description: Betawi -Added: 2009-07-29 -%% -Type: language -Subtag: bex -Description: Jur Modo -Added: 2009-07-29 -%% -Type: language -Subtag: bey -Description: Beli (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: bez -Description: Bena (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: bfa -Description: Bari -Added: 2009-07-29 -%% -Type: language -Subtag: bfb -Description: Pauri Bareli -Added: 2009-07-29 -%% -Type: language -Subtag: bfc -Description: Northern Bai -Added: 2009-07-29 -%% -Type: language -Subtag: bfd -Description: Bafut -Added: 2009-07-29 -%% -Type: language -Subtag: bfe -Description: Betaf -Description: Tena -Added: 2009-07-29 -%% -Type: language -Subtag: bff -Description: Bofi -Added: 2009-07-29 -%% -Type: language -Subtag: bfg -Description: Busang Kayan -Added: 2009-07-29 -%% -Type: language -Subtag: bfh -Description: Blafe -Added: 2009-07-29 -%% -Type: language -Subtag: bfi -Description: British Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: bfj -Description: Bafanji -Added: 2009-07-29 -%% -Type: language -Subtag: bfk -Description: Ban Khor Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: bfl -Description: Banda-Ndélé -Added: 2009-07-29 -%% -Type: language -Subtag: bfm -Description: Mmen -Added: 2009-07-29 -%% -Type: language -Subtag: bfn -Description: Bunak -Added: 2009-07-29 -%% -Type: language -Subtag: bfo -Description: Malba Birifor -Added: 2009-07-29 -%% -Type: language -Subtag: bfp -Description: Beba -Added: 2009-07-29 -%% -Type: language -Subtag: bfq -Description: Badaga -Added: 2009-07-29 -%% -Type: language -Subtag: bfr -Description: Bazigar -Added: 2009-07-29 -%% -Type: language -Subtag: bfs -Description: Southern Bai -Added: 2009-07-29 -%% -Type: language -Subtag: bft -Description: Balti -Added: 2009-07-29 -%% -Type: language -Subtag: bfu -Description: Gahri -Added: 2009-07-29 -%% -Type: language -Subtag: bfw -Description: Bondo -Added: 2009-07-29 -%% -Type: language -Subtag: bfx -Description: Bantayanon -Added: 2010-03-11 -%% -Type: language -Subtag: bfy -Description: Bagheli -Added: 2009-07-29 -%% -Type: language -Subtag: bfz -Description: Mahasu Pahari -Added: 2009-07-29 -%% -Type: language -Subtag: bga -Description: Gwamhi-Wuri -Added: 2009-07-29 -%% -Type: language -Subtag: bgb -Description: Bobongko -Added: 2009-07-29 -%% -Type: language -Subtag: bgc -Description: Haryanvi -Added: 2009-07-29 -%% -Type: language -Subtag: bgd -Description: Rathwi Bareli -Added: 2009-07-29 -%% -Type: language -Subtag: bge -Description: Bauria -Added: 2009-07-29 -%% -Type: language -Subtag: bgf -Description: Bangandu -Added: 2009-07-29 -%% -Type: language -Subtag: bgg -Description: Bugun -Added: 2009-07-29 -%% -Type: language -Subtag: bgi -Description: Giangan -Added: 2009-07-29 -%% -Type: language -Subtag: bgj -Description: Bangolan -Added: 2009-07-29 -%% -Type: language -Subtag: bgk -Description: Bit -Description: Buxinhua -Added: 2009-07-29 -%% -Type: language -Subtag: bgl -Description: Bo (Laos) -Added: 2009-07-29 -%% -Type: language -Subtag: bgm -Description: Baga Mboteni -Added: 2009-07-29 -%% -Type: language -Subtag: bgn -Description: Western Balochi -Added: 2009-07-29 -Macrolanguage: bal -%% -Type: language -Subtag: bgo -Description: Baga Koga -Added: 2009-07-29 -%% -Type: language -Subtag: bgp -Description: Eastern Balochi -Added: 2009-07-29 -Macrolanguage: bal -%% -Type: language -Subtag: bgq -Description: Bagri -Added: 2009-07-29 -Macrolanguage: raj -%% -Type: language -Subtag: bgr -Description: Bawm Chin -Added: 2009-07-29 -%% -Type: language -Subtag: bgs -Description: Tagabawa -Added: 2009-07-29 -%% -Type: language -Subtag: bgt -Description: Bughotu -Added: 2009-07-29 -%% -Type: language -Subtag: bgu -Description: Mbongno -Added: 2009-07-29 -%% -Type: language -Subtag: bgv -Description: Warkay-Bipim -Added: 2009-07-29 -%% -Type: language -Subtag: bgw -Description: Bhatri -Added: 2009-07-29 -%% -Type: language -Subtag: bgx -Description: Balkan Gagauz Turkish -Added: 2009-07-29 -%% -Type: language -Subtag: bgy -Description: Benggoi -Added: 2009-07-29 -%% -Type: language -Subtag: bgz -Description: Banggai -Added: 2009-07-29 -%% -Type: language -Subtag: bha -Description: Bharia -Added: 2009-07-29 -%% -Type: language -Subtag: bhb -Description: Bhili -Added: 2009-07-29 -%% -Type: language -Subtag: bhc -Description: Biga -Added: 2009-07-29 -%% -Type: language -Subtag: bhd -Description: Bhadrawahi -Added: 2009-07-29 -%% -Type: language -Subtag: bhe -Description: Bhaya -Added: 2009-07-29 -%% -Type: language -Subtag: bhf -Description: Odiai -Added: 2009-07-29 -%% -Type: language -Subtag: bhg -Description: Binandere -Added: 2009-07-29 -%% -Type: language -Subtag: bhh -Description: Bukharic -Added: 2009-07-29 -%% -Type: language -Subtag: bhi -Description: Bhilali -Added: 2009-07-29 -%% -Type: language -Subtag: bhj -Description: Bahing -Added: 2009-07-29 -%% -Type: language -Subtag: bhk -Description: Albay Bicolano -Added: 2009-07-29 -Deprecated: 2010-03-11 -Macrolanguage: bik -Comments: see fbl, lbl, rbl, ubl -%% -Type: language -Subtag: bhl -Description: Bimin -Added: 2009-07-29 -%% -Type: language -Subtag: bhm -Description: Bathari -Added: 2009-07-29 -%% -Type: language -Subtag: bhn -Description: Bohtan Neo-Aramaic -Added: 2009-07-29 -%% -Type: language -Subtag: bho -Description: Bhojpuri -Added: 2005-10-16 -%% -Type: language -Subtag: bhp -Description: Bima -Added: 2009-07-29 -%% -Type: language -Subtag: bhq -Description: Tukang Besi South -Added: 2009-07-29 -%% -Type: language -Subtag: bhr -Description: Bara Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: bhs -Description: Buwal -Added: 2009-07-29 -%% -Type: language -Subtag: bht -Description: Bhattiyali -Added: 2009-07-29 -%% -Type: language -Subtag: bhu -Description: Bhunjia -Added: 2009-07-29 -%% -Type: language -Subtag: bhv -Description: Bahau -Added: 2009-07-29 -%% -Type: language -Subtag: bhw -Description: Biak -Added: 2009-07-29 -%% -Type: language -Subtag: bhx -Description: Bhalay -Added: 2009-07-29 -%% -Type: language -Subtag: bhy -Description: Bhele -Added: 2009-07-29 -%% -Type: language -Subtag: bhz -Description: Bada (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: bia -Description: Badimaya -Added: 2009-07-29 -%% -Type: language -Subtag: bib -Description: Bissa -Description: Bisa -Added: 2009-07-29 -%% -Type: language -Subtag: bic -Description: Bikaru -Added: 2009-07-29 -%% -Type: language -Subtag: bid -Description: Bidiyo -Added: 2009-07-29 -%% -Type: language -Subtag: bie -Description: Bepour -Added: 2009-07-29 -%% -Type: language -Subtag: bif -Description: Biafada -Added: 2009-07-29 -%% -Type: language -Subtag: big -Description: Biangai -Added: 2009-07-29 -%% -Type: language -Subtag: bij -Description: Vaghat-Ya-Bijim-Legeri -Added: 2009-07-29 -%% -Type: language -Subtag: bik -Description: Bikol -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: bil -Description: Bile -Added: 2009-07-29 -%% -Type: language -Subtag: bim -Description: Bimoba -Added: 2009-07-29 -%% -Type: language -Subtag: bin -Description: Bini -Description: Edo -Added: 2005-10-16 -%% -Type: language -Subtag: bio -Description: Nai -Added: 2009-07-29 -%% -Type: language -Subtag: bip -Description: Bila -Added: 2009-07-29 -%% -Type: language -Subtag: biq -Description: Bipi -Added: 2009-07-29 -%% -Type: language -Subtag: bir -Description: Bisorio -Added: 2009-07-29 -%% -Type: language -Subtag: bit -Description: Berinomo -Added: 2009-07-29 -%% -Type: language -Subtag: biu -Description: Biete -Added: 2009-07-29 -%% -Type: language -Subtag: biv -Description: Southern Birifor -Added: 2009-07-29 -%% -Type: language -Subtag: biw -Description: Kol (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: bix -Description: Bijori -Added: 2009-07-29 -%% -Type: language -Subtag: biy -Description: Birhor -Added: 2009-07-29 -%% -Type: language -Subtag: biz -Description: Baloi -Added: 2009-07-29 -%% -Type: language -Subtag: bja -Description: Budza -Added: 2009-07-29 -%% -Type: language -Subtag: bjb -Description: Banggarla -Added: 2009-07-29 -%% -Type: language -Subtag: bjc -Description: Bariji -Added: 2009-07-29 -%% -Type: language -Subtag: bjd -Description: Bandjigali -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: drl -%% -Type: language -Subtag: bje -Description: Biao-Jiao Mien -Added: 2009-07-29 -%% -Type: language -Subtag: bjf -Description: Barzani Jewish Neo-Aramaic -Added: 2009-07-29 -%% -Type: language -Subtag: bjg -Description: Bidyogo -Added: 2009-07-29 -%% -Type: language -Subtag: bjh -Description: Bahinemo -Added: 2009-07-29 -%% -Type: language -Subtag: bji -Description: Burji -Added: 2009-07-29 -%% -Type: language -Subtag: bjj -Description: Kanauji -Added: 2009-07-29 -%% -Type: language -Subtag: bjk -Description: Barok -Added: 2009-07-29 -%% -Type: language -Subtag: bjl -Description: Bulu (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: bjm -Description: Bajelani -Added: 2009-07-29 -%% -Type: language -Subtag: bjn -Description: Banjar -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: bjo -Description: Mid-Southern Banda -Added: 2009-07-29 -%% -Type: language -Subtag: bjp -Description: Fanamaket -Added: 2013-09-10 -%% -Type: language -Subtag: bjq -Description: Southern Betsimisaraka Malagasy -Added: 2009-07-29 -Deprecated: 2011-08-16 -Macrolanguage: mg -Comments: see bzc, tkg -%% -Type: language -Subtag: bjr -Description: Binumarien -Added: 2009-07-29 -%% -Type: language -Subtag: bjs -Description: Bajan -Added: 2009-07-29 -%% -Type: language -Subtag: bjt -Description: Balanta-Ganja -Added: 2009-07-29 -%% -Type: language -Subtag: bju -Description: Busuu -Added: 2009-07-29 -%% -Type: language -Subtag: bjv -Description: Bedjond -Added: 2009-07-29 -%% -Type: language -Subtag: bjw -Description: Bakwé -Added: 2009-07-29 -%% -Type: language -Subtag: bjx -Description: Banao Itneg -Added: 2009-07-29 -%% -Type: language -Subtag: bjy -Description: Bayali -Added: 2009-07-29 -%% -Type: language -Subtag: bjz -Description: Baruga -Added: 2009-07-29 -%% -Type: language -Subtag: bka -Description: Kyak -Added: 2009-07-29 -%% -Type: language -Subtag: bkb -Description: Finallig -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see ebk, obk -%% -Type: language -Subtag: bkc -Description: Baka (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: bkd -Description: Binukid -Description: Talaandig -Added: 2009-07-29 -%% -Type: language -Subtag: bkf -Description: Beeke -Added: 2009-07-29 -%% -Type: language -Subtag: bkg -Description: Buraka -Added: 2009-07-29 -%% -Type: language -Subtag: bkh -Description: Bakoko -Added: 2009-07-29 -%% -Type: language -Subtag: bki -Description: Baki -Added: 2009-07-29 -%% -Type: language -Subtag: bkj -Description: Pande -Added: 2009-07-29 -%% -Type: language -Subtag: bkk -Description: Brokskat -Added: 2009-07-29 -%% -Type: language -Subtag: bkl -Description: Berik -Added: 2009-07-29 -%% -Type: language -Subtag: bkm -Description: Kom (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: bkn -Description: Bukitan -Added: 2009-07-29 -%% -Type: language -Subtag: bko -Description: Kwa' -Added: 2009-07-29 -%% -Type: language -Subtag: bkp -Description: Boko (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: bkq -Description: Bakairí -Added: 2009-07-29 -%% -Type: language -Subtag: bkr -Description: Bakumpai -Added: 2009-07-29 -%% -Type: language -Subtag: bks -Description: Northern Sorsoganon -Added: 2009-07-29 -%% -Type: language -Subtag: bkt -Description: Boloki -Added: 2009-07-29 -%% -Type: language -Subtag: bku -Description: Buhid -Added: 2009-07-29 -%% -Type: language -Subtag: bkv -Description: Bekwarra -Added: 2009-07-29 -%% -Type: language -Subtag: bkw -Description: Bekwel -Added: 2009-07-29 -%% -Type: language -Subtag: bkx -Description: Baikeno -Added: 2009-07-29 -%% -Type: language -Subtag: bky -Description: Bokyi -Added: 2009-07-29 -%% -Type: language -Subtag: bkz -Description: Bungku -Added: 2009-07-29 -%% -Type: language -Subtag: bla -Description: Siksika -Added: 2005-10-16 -%% -Type: language -Subtag: blb -Description: Bilua -Added: 2009-07-29 -%% -Type: language -Subtag: blc -Description: Bella Coola -Added: 2009-07-29 -%% -Type: language -Subtag: bld -Description: Bolango -Added: 2009-07-29 -%% -Type: language -Subtag: ble -Description: Balanta-Kentohe -Added: 2009-07-29 -%% -Type: language -Subtag: blf -Description: Buol -Added: 2009-07-29 -%% -Type: language -Subtag: blg -Description: Balau -Added: 2009-07-29 -%% -Type: language -Subtag: blh -Description: Kuwaa -Added: 2009-07-29 -%% -Type: language -Subtag: bli -Description: Bolia -Added: 2009-07-29 -%% -Type: language -Subtag: blj -Description: Bolongan -Added: 2009-07-29 -%% -Type: language -Subtag: blk -Description: Pa'o Karen -Description: Pa'O -Added: 2009-07-29 -%% -Type: language -Subtag: bll -Description: Biloxi -Added: 2009-07-29 -%% -Type: language -Subtag: blm -Description: Beli (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: bln -Description: Southern Catanduanes Bikol -Added: 2009-07-29 -Macrolanguage: bik -%% -Type: language -Subtag: blo -Description: Anii -Added: 2009-07-29 -%% -Type: language -Subtag: blp -Description: Blablanga -Added: 2009-07-29 -%% -Type: language -Subtag: blq -Description: Baluan-Pam -Added: 2009-07-29 -%% -Type: language -Subtag: blr -Description: Blang -Added: 2009-07-29 -%% -Type: language -Subtag: bls -Description: Balaesang -Added: 2009-07-29 -%% -Type: language -Subtag: blt -Description: Tai Dam -Added: 2009-07-29 -%% -Type: language -Subtag: blv -Description: Bolo -Added: 2009-07-29 -%% -Type: language -Subtag: blw -Description: Balangao -Added: 2009-07-29 -%% -Type: language -Subtag: blx -Description: Mag-Indi Ayta -Added: 2009-07-29 -%% -Type: language -Subtag: bly -Description: Notre -Added: 2009-07-29 -%% -Type: language -Subtag: blz -Description: Balantak -Added: 2009-07-29 -%% -Type: language -Subtag: bma -Description: Lame -Added: 2009-07-29 -%% -Type: language -Subtag: bmb -Description: Bembe -Added: 2009-07-29 -%% -Type: language -Subtag: bmc -Description: Biem -Added: 2009-07-29 -%% -Type: language -Subtag: bmd -Description: Baga Manduri -Added: 2009-07-29 -%% -Type: language -Subtag: bme -Description: Limassa -Added: 2009-07-29 -%% -Type: language -Subtag: bmf -Description: Bom -Added: 2009-07-29 -%% -Type: language -Subtag: bmg -Description: Bamwe -Added: 2009-07-29 -%% -Type: language -Subtag: bmh -Description: Kein -Added: 2009-07-29 -%% -Type: language -Subtag: bmi -Description: Bagirmi -Added: 2009-07-29 -%% -Type: language -Subtag: bmj -Description: Bote-Majhi -Added: 2009-07-29 -%% -Type: language -Subtag: bmk -Description: Ghayavi -Added: 2009-07-29 -%% -Type: language -Subtag: bml -Description: Bomboli -Added: 2009-07-29 -%% -Type: language -Subtag: bmm -Description: Northern Betsimisaraka Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: bmn -Description: Bina (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: bmo -Description: Bambalang -Added: 2009-07-29 -%% -Type: language -Subtag: bmp -Description: Bulgebi -Added: 2009-07-29 -%% -Type: language -Subtag: bmq -Description: Bomu -Added: 2009-07-29 -%% -Type: language -Subtag: bmr -Description: Muinane -Added: 2009-07-29 -%% -Type: language -Subtag: bms -Description: Bilma Kanuri -Added: 2009-07-29 -%% -Type: language -Subtag: bmt -Description: Biao Mon -Added: 2009-07-29 -%% -Type: language -Subtag: bmu -Description: Somba-Siawari -Added: 2009-07-29 -%% -Type: language -Subtag: bmv -Description: Bum -Added: 2009-07-29 -%% -Type: language -Subtag: bmw -Description: Bomwali -Added: 2009-07-29 -%% -Type: language -Subtag: bmx -Description: Baimak -Added: 2009-07-29 -%% -Type: language -Subtag: bmy -Description: Bemba (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: bmz -Description: Baramu -Added: 2009-07-29 -%% -Type: language -Subtag: bna -Description: Bonerate -Added: 2009-07-29 -%% -Type: language -Subtag: bnb -Description: Bookan -Added: 2009-07-29 -%% -Type: language -Subtag: bnc -Description: Bontok -Added: 2009-07-29 -Scope: macrolanguage -%% -Type: language -Subtag: bnd -Description: Banda (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: bne -Description: Bintauna -Added: 2009-07-29 -%% -Type: language -Subtag: bnf -Description: Masiwang -Added: 2009-07-29 -%% -Type: language -Subtag: bng -Description: Benga -Added: 2009-07-29 -%% -Type: language -Subtag: bni -Description: Bangi -Added: 2009-07-29 -%% -Type: language -Subtag: bnj -Description: Eastern Tawbuid -Added: 2009-07-29 -%% -Type: language -Subtag: bnk -Description: Bierebo -Added: 2009-07-29 -%% -Type: language -Subtag: bnl -Description: Boon -Added: 2009-07-29 -%% -Type: language -Subtag: bnm -Description: Batanga -Added: 2009-07-29 -%% -Type: language -Subtag: bnn -Description: Bunun -Added: 2009-07-29 -%% -Type: language -Subtag: bno -Description: Bantoanon -Added: 2009-07-29 -%% -Type: language -Subtag: bnp -Description: Bola -Added: 2009-07-29 -%% -Type: language -Subtag: bnq -Description: Bantik -Added: 2009-07-29 -%% -Type: language -Subtag: bnr -Description: Butmas-Tur -Added: 2009-07-29 -%% -Type: language -Subtag: bns -Description: Bundeli -Added: 2009-07-29 -%% -Type: language -Subtag: bnt -Description: Bantu languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: bnu -Description: Bentong -Added: 2009-07-29 -%% -Type: language -Subtag: bnv -Description: Bonerif -Description: Beneraf -Description: Edwas -Added: 2009-07-29 -%% -Type: language -Subtag: bnw -Description: Bisis -Added: 2009-07-29 -%% -Type: language -Subtag: bnx -Description: Bangubangu -Added: 2009-07-29 -%% -Type: language -Subtag: bny -Description: Bintulu -Added: 2009-07-29 -%% -Type: language -Subtag: bnz -Description: Beezen -Added: 2009-07-29 -%% -Type: language -Subtag: boa -Description: Bora -Added: 2009-07-29 -%% -Type: language -Subtag: bob -Description: Aweer -Added: 2009-07-29 -%% -Type: language -Subtag: boe -Description: Mundabli -Added: 2009-07-29 -%% -Type: language -Subtag: bof -Description: Bolon -Added: 2009-07-29 -%% -Type: language -Subtag: bog -Description: Bamako Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: boh -Description: Boma -Added: 2009-07-29 -%% -Type: language -Subtag: boi -Description: Barbareño -Added: 2009-07-29 -%% -Type: language -Subtag: boj -Description: Anjam -Added: 2009-07-29 -%% -Type: language -Subtag: bok -Description: Bonjo -Added: 2009-07-29 -%% -Type: language -Subtag: bol -Description: Bole -Added: 2009-07-29 -%% -Type: language -Subtag: bom -Description: Berom -Added: 2009-07-29 -%% -Type: language -Subtag: bon -Description: Bine -Added: 2009-07-29 -%% -Type: language -Subtag: boo -Description: Tiemacèwè Bozo -Added: 2009-07-29 -%% -Type: language -Subtag: bop -Description: Bonkiman -Added: 2009-07-29 -%% -Type: language -Subtag: boq -Description: Bogaya -Added: 2009-07-29 -%% -Type: language -Subtag: bor -Description: Borôro -Added: 2009-07-29 -%% -Type: language -Subtag: bot -Description: Bongo -Added: 2009-07-29 -%% -Type: language -Subtag: bou -Description: Bondei -Added: 2009-07-29 -%% -Type: language -Subtag: bov -Description: Tuwuli -Added: 2009-07-29 -%% -Type: language -Subtag: bow -Description: Rema -Added: 2009-07-29 -%% -Type: language -Subtag: box -Description: Buamu -Added: 2009-07-29 -%% -Type: language -Subtag: boy -Description: Bodo (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: boz -Description: Tiéyaxo Bozo -Added: 2009-07-29 -%% -Type: language -Subtag: bpa -Description: Daakaka -Added: 2009-07-29 -%% -Type: language -Subtag: bpb -Description: Barbacoas -Added: 2009-07-29 -%% -Type: language -Subtag: bpd -Description: Banda-Banda -Added: 2009-07-29 -%% -Type: language -Subtag: bpg -Description: Bonggo -Added: 2009-07-29 -%% -Type: language -Subtag: bph -Description: Botlikh -Added: 2009-07-29 -%% -Type: language -Subtag: bpi -Description: Bagupi -Added: 2009-07-29 -%% -Type: language -Subtag: bpj -Description: Binji -Added: 2009-07-29 -%% -Type: language -Subtag: bpk -Description: Orowe -Description: 'Ôrôê -Added: 2009-07-29 -%% -Type: language -Subtag: bpl -Description: Broome Pearling Lugger Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: bpm -Description: Biyom -Added: 2009-07-29 -%% -Type: language -Subtag: bpn -Description: Dzao Min -Added: 2009-07-29 -%% -Type: language -Subtag: bpo -Description: Anasi -Added: 2009-07-29 -%% -Type: language -Subtag: bpp -Description: Kaure -Added: 2009-07-29 -%% -Type: language -Subtag: bpq -Description: Banda Malay -Added: 2009-07-29 -%% -Type: language -Subtag: bpr -Description: Koronadal Blaan -Added: 2009-07-29 -%% -Type: language -Subtag: bps -Description: Sarangani Blaan -Added: 2009-07-29 -%% -Type: language -Subtag: bpt -Description: Barrow Point -Added: 2009-07-29 -%% -Type: language -Subtag: bpu -Description: Bongu -Added: 2009-07-29 -%% -Type: language -Subtag: bpv -Description: Bian Marind -Added: 2009-07-29 -%% -Type: language -Subtag: bpw -Description: Bo (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: bpx -Description: Palya Bareli -Added: 2009-07-29 -%% -Type: language -Subtag: bpy -Description: Bishnupriya -Added: 2009-07-29 -%% -Type: language -Subtag: bpz -Description: Bilba -Added: 2009-07-29 -%% -Type: language -Subtag: bqa -Description: Tchumbuli -Added: 2009-07-29 -%% -Type: language -Subtag: bqb -Description: Bagusa -Added: 2009-07-29 -%% -Type: language -Subtag: bqc -Description: Boko (Benin) -Description: Boo -Added: 2009-07-29 -%% -Type: language -Subtag: bqd -Description: Bung -Added: 2009-07-29 -%% -Type: language -Subtag: bqf -Description: Baga Kaloum -Added: 2009-07-29 -%% -Type: language -Subtag: bqg -Description: Bago-Kusuntu -Added: 2009-07-29 -%% -Type: language -Subtag: bqh -Description: Baima -Added: 2009-07-29 -%% -Type: language -Subtag: bqi -Description: Bakhtiari -Added: 2009-07-29 -%% -Type: language -Subtag: bqj -Description: Bandial -Added: 2009-07-29 -%% -Type: language -Subtag: bqk -Description: Banda-Mbrès -Added: 2009-07-29 -%% -Type: language -Subtag: bql -Description: Bilakura -Added: 2009-07-29 -%% -Type: language -Subtag: bqm -Description: Wumboko -Added: 2009-07-29 -%% -Type: language -Subtag: bqn -Description: Bulgarian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: bqo -Description: Balo -Added: 2009-07-29 -%% -Type: language -Subtag: bqp -Description: Busa -Added: 2009-07-29 -%% -Type: language -Subtag: bqq -Description: Biritai -Added: 2009-07-29 -%% -Type: language -Subtag: bqr -Description: Burusu -Added: 2009-07-29 -%% -Type: language -Subtag: bqs -Description: Bosngun -Added: 2009-07-29 -%% -Type: language -Subtag: bqt -Description: Bamukumbit -Added: 2009-07-29 -%% -Type: language -Subtag: bqu -Description: Boguru -Added: 2009-07-29 -%% -Type: language -Subtag: bqv -Description: Koro Wachi -Description: Begbere-Ejar -Added: 2009-07-29 -%% -Type: language -Subtag: bqw -Description: Buru (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: bqx -Description: Baangi -Added: 2009-07-29 -%% -Type: language -Subtag: bqy -Description: Bengkala Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: bqz -Description: Bakaka -Added: 2009-07-29 -%% -Type: language -Subtag: bra -Description: Braj -Added: 2005-10-16 -%% -Type: language -Subtag: brb -Description: Lave -Added: 2009-07-29 -%% -Type: language -Subtag: brc -Description: Berbice Creole Dutch -Added: 2009-07-29 -%% -Type: language -Subtag: brd -Description: Baraamu -Added: 2009-07-29 -%% -Type: language -Subtag: brf -Description: Bera -Added: 2009-07-29 -%% -Type: language -Subtag: brg -Description: Baure -Added: 2009-07-29 -%% -Type: language -Subtag: brh -Description: Brahui -Added: 2009-07-29 -%% -Type: language -Subtag: bri -Description: Mokpwe -Added: 2009-07-29 -%% -Type: language -Subtag: brj -Description: Bieria -Added: 2009-07-29 -%% -Type: language -Subtag: brk -Description: Birked -Added: 2009-07-29 -%% -Type: language -Subtag: brl -Description: Birwa -Added: 2009-07-29 -%% -Type: language -Subtag: brm -Description: Barambu -Added: 2009-07-29 -%% -Type: language -Subtag: brn -Description: Boruca -Added: 2009-07-29 -%% -Type: language -Subtag: bro -Description: Brokkat -Added: 2009-07-29 -%% -Type: language -Subtag: brp -Description: Barapasi -Added: 2009-07-29 -%% -Type: language -Subtag: brq -Description: Breri -Added: 2009-07-29 -%% -Type: language -Subtag: brr -Description: Birao -Added: 2009-07-29 -%% -Type: language -Subtag: brs -Description: Baras -Added: 2009-07-29 -%% -Type: language -Subtag: brt -Description: Bitare -Added: 2009-07-29 -%% -Type: language -Subtag: bru -Description: Eastern Bru -Added: 2009-07-29 -%% -Type: language -Subtag: brv -Description: Western Bru -Added: 2009-07-29 -%% -Type: language -Subtag: brw -Description: Bellari -Added: 2009-07-29 -%% -Type: language -Subtag: brx -Description: Bodo (India) -Added: 2009-07-29 -%% -Type: language -Subtag: bry -Description: Burui -Added: 2009-07-29 -%% -Type: language -Subtag: brz -Description: Bilbil -Added: 2009-07-29 -%% -Type: language -Subtag: bsa -Description: Abinomn -Added: 2009-07-29 -%% -Type: language -Subtag: bsb -Description: Brunei Bisaya -Added: 2009-07-29 -%% -Type: language -Subtag: bsc -Description: Bassari -Description: Oniyan -Added: 2009-07-29 -%% -Type: language -Subtag: bse -Description: Wushi -Added: 2009-07-29 -%% -Type: language -Subtag: bsf -Description: Bauchi -Added: 2009-07-29 -%% -Type: language -Subtag: bsg -Description: Bashkardi -Added: 2009-07-29 -%% -Type: language -Subtag: bsh -Description: Kati -Added: 2009-07-29 -%% -Type: language -Subtag: bsi -Description: Bassossi -Added: 2009-07-29 -%% -Type: language -Subtag: bsj -Description: Bangwinji -Added: 2009-07-29 -%% -Type: language -Subtag: bsk -Description: Burushaski -Added: 2009-07-29 -%% -Type: language -Subtag: bsl -Description: Basa-Gumna -Added: 2009-07-29 -%% -Type: language -Subtag: bsm -Description: Busami -Added: 2009-07-29 -%% -Type: language -Subtag: bsn -Description: Barasana-Eduria -Added: 2009-07-29 -%% -Type: language -Subtag: bso -Description: Buso -Added: 2009-07-29 -%% -Type: language -Subtag: bsp -Description: Baga Sitemu -Added: 2009-07-29 -%% -Type: language -Subtag: bsq -Description: Bassa -Added: 2009-07-29 -%% -Type: language -Subtag: bsr -Description: Bassa-Kontagora -Added: 2009-07-29 -%% -Type: language -Subtag: bss -Description: Akoose -Added: 2009-07-29 -%% -Type: language -Subtag: bst -Description: Basketo -Added: 2009-07-29 -%% -Type: language -Subtag: bsu -Description: Bahonsuai -Added: 2009-07-29 -%% -Type: language -Subtag: bsv -Description: Baga Sobané -Added: 2009-07-29 -%% -Type: language -Subtag: bsw -Description: Baiso -Added: 2009-07-29 -%% -Type: language -Subtag: bsx -Description: Yangkam -Added: 2009-07-29 -%% -Type: language -Subtag: bsy -Description: Sabah Bisaya -Added: 2009-07-29 -%% -Type: language -Subtag: bta -Description: Bata -Added: 2009-07-29 -%% -Type: language -Subtag: btb -Description: Beti (Cameroon) -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see beb, bum, bxp, eto, ewo, fan, mct -%% -Type: language -Subtag: btc -Description: Bati (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: btd -Description: Batak Dairi -Added: 2009-07-29 -%% -Type: language -Subtag: bte -Description: Gamo-Ningi -Added: 2009-07-29 -%% -Type: language -Subtag: btf -Description: Birgit -Added: 2009-07-29 -%% -Type: language -Subtag: btg -Description: Gagnoa Bété -Added: 2009-07-29 -%% -Type: language -Subtag: bth -Description: Biatah Bidayuh -Added: 2009-07-29 -%% -Type: language -Subtag: bti -Description: Burate -Added: 2009-07-29 -%% -Type: language -Subtag: btj -Description: Bacanese Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: btk -Description: Batak languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: btl -Description: Bhatola -Added: 2009-07-29 -%% -Type: language -Subtag: btm -Description: Batak Mandailing -Added: 2009-07-29 -%% -Type: language -Subtag: btn -Description: Ratagnon -Added: 2009-07-29 -%% -Type: language -Subtag: bto -Description: Rinconada Bikol -Added: 2009-07-29 -Macrolanguage: bik -%% -Type: language -Subtag: btp -Description: Budibud -Added: 2009-07-29 -%% -Type: language -Subtag: btq -Description: Batek -Added: 2009-07-29 -%% -Type: language -Subtag: btr -Description: Baetora -Added: 2009-07-29 -%% -Type: language -Subtag: bts -Description: Batak Simalungun -Added: 2009-07-29 -%% -Type: language -Subtag: btt -Description: Bete-Bendi -Added: 2009-07-29 -%% -Type: language -Subtag: btu -Description: Batu -Added: 2009-07-29 -%% -Type: language -Subtag: btv -Description: Bateri -Added: 2009-07-29 -%% -Type: language -Subtag: btw -Description: Butuanon -Added: 2009-07-29 -%% -Type: language -Subtag: btx -Description: Batak Karo -Added: 2009-07-29 -%% -Type: language -Subtag: bty -Description: Bobot -Added: 2009-07-29 -%% -Type: language -Subtag: btz -Description: Batak Alas-Kluet -Added: 2009-07-29 -%% -Type: language -Subtag: bua -Description: Buriat -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: bub -Description: Bua -Added: 2009-07-29 -%% -Type: language -Subtag: buc -Description: Bushi -Added: 2009-07-29 -%% -Type: language -Subtag: bud -Description: Ntcham -Added: 2009-07-29 -%% -Type: language -Subtag: bue -Description: Beothuk -Added: 2009-07-29 -%% -Type: language -Subtag: buf -Description: Bushoong -Added: 2009-07-29 -%% -Type: language -Subtag: bug -Description: Buginese -Added: 2005-10-16 -%% -Type: language -Subtag: buh -Description: Younuo Bunu -Added: 2009-07-29 -%% -Type: language -Subtag: bui -Description: Bongili -Added: 2009-07-29 -%% -Type: language -Subtag: buj -Description: Basa-Gurmana -Added: 2009-07-29 -%% -Type: language -Subtag: buk -Description: Bugawac -Added: 2009-07-29 -%% -Type: language -Subtag: bum -Description: Bulu (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: bun -Description: Sherbro -Added: 2009-07-29 -%% -Type: language -Subtag: buo -Description: Terei -Added: 2009-07-29 -%% -Type: language -Subtag: bup -Description: Busoa -Added: 2009-07-29 -%% -Type: language -Subtag: buq -Description: Brem -Added: 2009-07-29 -%% -Type: language -Subtag: bus -Description: Bokobaru -Added: 2009-07-29 -%% -Type: language -Subtag: but -Description: Bungain -Added: 2009-07-29 -%% -Type: language -Subtag: buu -Description: Budu -Added: 2009-07-29 -%% -Type: language -Subtag: buv -Description: Bun -Added: 2009-07-29 -%% -Type: language -Subtag: buw -Description: Bubi -Added: 2009-07-29 -%% -Type: language -Subtag: bux -Description: Boghom -Added: 2009-07-29 -%% -Type: language -Subtag: buy -Description: Bullom So -Added: 2009-07-29 -%% -Type: language -Subtag: buz -Description: Bukwen -Added: 2009-07-29 -%% -Type: language -Subtag: bva -Description: Barein -Added: 2009-07-29 -%% -Type: language -Subtag: bvb -Description: Bube -Added: 2009-07-29 -%% -Type: language -Subtag: bvc -Description: Baelelea -Added: 2009-07-29 -%% -Type: language -Subtag: bvd -Description: Baeggu -Added: 2009-07-29 -%% -Type: language -Subtag: bve -Description: Berau Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: bvf -Description: Boor -Added: 2009-07-29 -%% -Type: language -Subtag: bvg -Description: Bonkeng -Added: 2009-07-29 -%% -Type: language -Subtag: bvh -Description: Bure -Added: 2009-07-29 -%% -Type: language -Subtag: bvi -Description: Belanda Viri -Added: 2009-07-29 -%% -Type: language -Subtag: bvj -Description: Baan -Added: 2009-07-29 -%% -Type: language -Subtag: bvk -Description: Bukat -Added: 2009-07-29 -%% -Type: language -Subtag: bvl -Description: Bolivian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: bvm -Description: Bamunka -Added: 2009-07-29 -%% -Type: language -Subtag: bvn -Description: Buna -Added: 2009-07-29 -%% -Type: language -Subtag: bvo -Description: Bolgo -Added: 2009-07-29 -%% -Type: language -Subtag: bvp -Description: Bumang -Added: 2013-09-10 -%% -Type: language -Subtag: bvq -Description: Birri -Added: 2009-07-29 -%% -Type: language -Subtag: bvr -Description: Burarra -Added: 2009-07-29 -%% -Type: language -Subtag: bvt -Description: Bati (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: bvu -Description: Bukit Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: bvv -Description: Baniva -Added: 2009-07-29 -%% -Type: language -Subtag: bvw -Description: Boga -Added: 2009-07-29 -%% -Type: language -Subtag: bvx -Description: Dibole -Added: 2009-07-29 -%% -Type: language -Subtag: bvy -Description: Baybayanon -Added: 2010-03-11 -%% -Type: language -Subtag: bvz -Description: Bauzi -Added: 2009-07-29 -%% -Type: language -Subtag: bwa -Description: Bwatoo -Added: 2009-07-29 -%% -Type: language -Subtag: bwb -Description: Namosi-Naitasiri-Serua -Added: 2009-07-29 -%% -Type: language -Subtag: bwc -Description: Bwile -Added: 2009-07-29 -%% -Type: language -Subtag: bwd -Description: Bwaidoka -Added: 2009-07-29 -%% -Type: language -Subtag: bwe -Description: Bwe Karen -Added: 2009-07-29 -%% -Type: language -Subtag: bwf -Description: Boselewa -Added: 2009-07-29 -%% -Type: language -Subtag: bwg -Description: Barwe -Added: 2009-07-29 -%% -Type: language -Subtag: bwh -Description: Bishuo -Added: 2009-07-29 -%% -Type: language -Subtag: bwi -Description: Baniwa -Added: 2009-07-29 -%% -Type: language -Subtag: bwj -Description: Láá Láá Bwamu -Added: 2009-07-29 -%% -Type: language -Subtag: bwk -Description: Bauwaki -Added: 2009-07-29 -%% -Type: language -Subtag: bwl -Description: Bwela -Added: 2009-07-29 -%% -Type: language -Subtag: bwm -Description: Biwat -Added: 2009-07-29 -%% -Type: language -Subtag: bwn -Description: Wunai Bunu -Added: 2009-07-29 -%% -Type: language -Subtag: bwo -Description: Boro (Ethiopia) -Description: Borna (Ethiopia) -Added: 2009-07-29 -%% -Type: language -Subtag: bwp -Description: Mandobo Bawah -Added: 2009-07-29 -%% -Type: language -Subtag: bwq -Description: Southern Bobo Madaré -Added: 2009-07-29 -%% -Type: language -Subtag: bwr -Description: Bura-Pabir -Added: 2009-07-29 -%% -Type: language -Subtag: bws -Description: Bomboma -Added: 2009-07-29 -%% -Type: language -Subtag: bwt -Description: Bafaw-Balong -Added: 2009-07-29 -%% -Type: language -Subtag: bwu -Description: Buli (Ghana) -Added: 2009-07-29 -%% -Type: language -Subtag: bww -Description: Bwa -Added: 2009-07-29 -%% -Type: language -Subtag: bwx -Description: Bu-Nao Bunu -Added: 2009-07-29 -%% -Type: language -Subtag: bwy -Description: Cwi Bwamu -Added: 2009-07-29 -%% -Type: language -Subtag: bwz -Description: Bwisi -Added: 2009-07-29 -%% -Type: language -Subtag: bxa -Description: Tairaha -Added: 2009-07-29 -%% -Type: language -Subtag: bxb -Description: Belanda Bor -Added: 2009-07-29 -%% -Type: language -Subtag: bxc -Description: Molengue -Added: 2009-07-29 -%% -Type: language -Subtag: bxd -Description: Pela -Added: 2009-07-29 -%% -Type: language -Subtag: bxe -Description: Birale -Added: 2009-07-29 -%% -Type: language -Subtag: bxf -Description: Bilur -Description: Minigir -Added: 2009-07-29 -Comments: see also vmg -%% -Type: language -Subtag: bxg -Description: Bangala -Added: 2009-07-29 -%% -Type: language -Subtag: bxh -Description: Buhutu -Added: 2009-07-29 -%% -Type: language -Subtag: bxi -Description: Pirlatapa -Added: 2009-07-29 -%% -Type: language -Subtag: bxj -Description: Bayungu -Added: 2009-07-29 -%% -Type: language -Subtag: bxk -Description: Bukusu -Description: Lubukusu -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: bxl -Description: Jalkunan -Added: 2009-07-29 -%% -Type: language -Subtag: bxm -Description: Mongolia Buriat -Added: 2009-07-29 -Macrolanguage: bua -%% -Type: language -Subtag: bxn -Description: Burduna -Added: 2009-07-29 -%% -Type: language -Subtag: bxo -Description: Barikanchi -Added: 2009-07-29 -%% -Type: language -Subtag: bxp -Description: Bebil -Added: 2009-07-29 -%% -Type: language -Subtag: bxq -Description: Beele -Added: 2009-07-29 -%% -Type: language -Subtag: bxr -Description: Russia Buriat -Added: 2009-07-29 -Macrolanguage: bua -%% -Type: language -Subtag: bxs -Description: Busam -Added: 2009-07-29 -%% -Type: language -Subtag: bxu -Description: China Buriat -Added: 2009-07-29 -Macrolanguage: bua -%% -Type: language -Subtag: bxv -Description: Berakou -Added: 2009-07-29 -%% -Type: language -Subtag: bxw -Description: Bankagooma -Added: 2009-07-29 -%% -Type: language -Subtag: bxx -Description: Borna (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: bxz -Description: Binahari -Added: 2009-07-29 -%% -Type: language -Subtag: bya -Description: Batak -Added: 2009-07-29 -%% -Type: language -Subtag: byb -Description: Bikya -Added: 2009-07-29 -%% -Type: language -Subtag: byc -Description: Ubaghara -Added: 2009-07-29 -%% -Type: language -Subtag: byd -Description: Benyadu' -Added: 2009-07-29 -%% -Type: language -Subtag: bye -Description: Pouye -Added: 2009-07-29 -%% -Type: language -Subtag: byf -Description: Bete -Added: 2009-07-29 -%% -Type: language -Subtag: byg -Description: Baygo -Added: 2009-07-29 -%% -Type: language -Subtag: byh -Description: Bhujel -Added: 2009-07-29 -%% -Type: language -Subtag: byi -Description: Buyu -Added: 2009-07-29 -%% -Type: language -Subtag: byj -Description: Bina (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: byk -Description: Biao -Added: 2009-07-29 -%% -Type: language -Subtag: byl -Description: Bayono -Added: 2009-07-29 -%% -Type: language -Subtag: bym -Description: Bidyara -Added: 2009-07-29 -%% -Type: language -Subtag: byn -Description: Bilin -Description: Blin -Added: 2005-10-16 -%% -Type: language -Subtag: byo -Description: Biyo -Added: 2009-07-29 -%% -Type: language -Subtag: byp -Description: Bumaji -Added: 2009-07-29 -%% -Type: language -Subtag: byq -Description: Basay -Added: 2009-07-29 -%% -Type: language -Subtag: byr -Description: Baruya -Description: Yipma -Added: 2009-07-29 -%% -Type: language -Subtag: bys -Description: Burak -Added: 2009-07-29 -%% -Type: language -Subtag: byt -Description: Berti -Added: 2009-07-29 -%% -Type: language -Subtag: byv -Description: Medumba -Added: 2009-07-29 -%% -Type: language -Subtag: byw -Description: Belhariya -Added: 2009-07-29 -%% -Type: language -Subtag: byx -Description: Qaqet -Added: 2009-07-29 -%% -Type: language -Subtag: byy -Description: Buya -Added: 2009-07-29 -%% -Type: language -Subtag: byz -Description: Banaro -Added: 2009-07-29 -%% -Type: language -Subtag: bza -Description: Bandi -Added: 2009-07-29 -%% -Type: language -Subtag: bzb -Description: Andio -Added: 2009-07-29 -%% -Type: language -Subtag: bzc -Description: Southern Betsimisaraka Malagasy -Added: 2011-08-16 -Macrolanguage: mg -%% -Type: language -Subtag: bzd -Description: Bribri -Added: 2009-07-29 -%% -Type: language -Subtag: bze -Description: Jenaama Bozo -Added: 2009-07-29 -%% -Type: language -Subtag: bzf -Description: Boikin -Added: 2009-07-29 -%% -Type: language -Subtag: bzg -Description: Babuza -Added: 2009-07-29 -%% -Type: language -Subtag: bzh -Description: Mapos Buang -Added: 2009-07-29 -%% -Type: language -Subtag: bzi -Description: Bisu -Added: 2009-07-29 -%% -Type: language -Subtag: bzj -Description: Belize Kriol English -Added: 2009-07-29 -%% -Type: language -Subtag: bzk -Description: Nicaragua Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: bzl -Description: Boano (Sulawesi) -Added: 2009-07-29 -%% -Type: language -Subtag: bzm -Description: Bolondo -Added: 2009-07-29 -%% -Type: language -Subtag: bzn -Description: Boano (Maluku) -Added: 2009-07-29 -%% -Type: language -Subtag: bzo -Description: Bozaba -Added: 2009-07-29 -%% -Type: language -Subtag: bzp -Description: Kemberano -Added: 2009-07-29 -%% -Type: language -Subtag: bzq -Description: Buli (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: bzr -Description: Biri -Added: 2009-07-29 -%% -Type: language -Subtag: bzs -Description: Brazilian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: bzt -Description: Brithenig -Added: 2009-07-29 -%% -Type: language -Subtag: bzu -Description: Burmeso -Added: 2009-07-29 -%% -Type: language -Subtag: bzv -Description: Naami -Added: 2009-07-29 -%% -Type: language -Subtag: bzw -Description: Basa (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: bzx -Description: Kɛlɛngaxo Bozo -Added: 2009-07-29 -%% -Type: language -Subtag: bzy -Description: Obanliku -Added: 2009-07-29 -%% -Type: language -Subtag: bzz -Description: Evant -Added: 2009-07-29 -%% -Type: language -Subtag: caa -Description: Chortí -Added: 2009-07-29 -%% -Type: language -Subtag: cab -Description: Garifuna -Added: 2009-07-29 -%% -Type: language -Subtag: cac -Description: Chuj -Added: 2009-07-29 -%% -Type: language -Subtag: cad -Description: Caddo -Added: 2005-10-16 -%% -Type: language -Subtag: cae -Description: Lehar -Description: Laalaa -Added: 2009-07-29 -%% -Type: language -Subtag: caf -Description: Southern Carrier -Added: 2009-07-29 -%% -Type: language -Subtag: cag -Description: Nivaclé -Added: 2009-07-29 -%% -Type: language -Subtag: cah -Description: Cahuarano -Added: 2009-07-29 -%% -Type: language -Subtag: cai -Description: Central American Indian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: caj -Description: Chané -Added: 2009-07-29 -%% -Type: language -Subtag: cak -Description: Kaqchikel -Description: Cakchiquel -Added: 2009-07-29 -%% -Type: language -Subtag: cal -Description: Carolinian -Added: 2009-07-29 -%% -Type: language -Subtag: cam -Description: Cemuhî -Added: 2009-07-29 -%% -Type: language -Subtag: can -Description: Chambri -Added: 2009-07-29 -%% -Type: language -Subtag: cao -Description: Chácobo -Added: 2009-07-29 -%% -Type: language -Subtag: cap -Description: Chipaya -Added: 2009-07-29 -%% -Type: language -Subtag: caq -Description: Car Nicobarese -Added: 2009-07-29 -%% -Type: language -Subtag: car -Description: Galibi Carib -Added: 2005-10-16 -%% -Type: language -Subtag: cas -Description: Tsimané -Added: 2009-07-29 -%% -Type: language -Subtag: cau -Description: Caucasian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: cav -Description: Cavineña -Added: 2009-07-29 -%% -Type: language -Subtag: caw -Description: Callawalla -Added: 2009-07-29 -%% -Type: language -Subtag: cax -Description: Chiquitano -Added: 2009-07-29 -%% -Type: language -Subtag: cay -Description: Cayuga -Added: 2009-07-29 -%% -Type: language -Subtag: caz -Description: Canichana -Added: 2009-07-29 -%% -Type: language -Subtag: cba -Description: Chibchan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: cbb -Description: Cabiyarí -Added: 2009-07-29 -%% -Type: language -Subtag: cbc -Description: Carapana -Added: 2009-07-29 -%% -Type: language -Subtag: cbd -Description: Carijona -Added: 2009-07-29 -%% -Type: language -Subtag: cbe -Description: Chipiajes -Added: 2009-07-29 -%% -Type: language -Subtag: cbg -Description: Chimila -Added: 2009-07-29 -%% -Type: language -Subtag: cbh -Description: Cagua -Added: 2009-07-29 -%% -Type: language -Subtag: cbi -Description: Chachi -Added: 2009-07-29 -%% -Type: language -Subtag: cbj -Description: Ede Cabe -Added: 2009-07-29 -%% -Type: language -Subtag: cbk -Description: Chavacano -Added: 2009-07-29 -%% -Type: language -Subtag: cbl -Description: Bualkhaw Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cbn -Description: Nyahkur -Added: 2009-07-29 -%% -Type: language -Subtag: cbo -Description: Izora -Added: 2009-07-29 -%% -Type: language -Subtag: cbr -Description: Cashibo-Cacataibo -Added: 2009-07-29 -%% -Type: language -Subtag: cbs -Description: Cashinahua -Added: 2009-07-29 -%% -Type: language -Subtag: cbt -Description: Chayahuita -Added: 2009-07-29 -%% -Type: language -Subtag: cbu -Description: Candoshi-Shapra -Added: 2009-07-29 -%% -Type: language -Subtag: cbv -Description: Cacua -Added: 2009-07-29 -%% -Type: language -Subtag: cbw -Description: Kinabalian -Added: 2010-03-11 -%% -Type: language -Subtag: cby -Description: Carabayo -Added: 2009-07-29 -%% -Type: language -Subtag: cca -Description: Cauca -Added: 2009-07-29 -%% -Type: language -Subtag: ccc -Description: Chamicuro -Added: 2009-07-29 -%% -Type: language -Subtag: ccd -Description: Cafundo Creole -Added: 2009-07-29 -%% -Type: language -Subtag: cce -Description: Chopi -Added: 2009-07-29 -%% -Type: language -Subtag: ccg -Description: Samba Daka -Added: 2009-07-29 -%% -Type: language -Subtag: cch -Description: Atsam -Added: 2009-07-29 -%% -Type: language -Subtag: ccj -Description: Kasanga -Added: 2009-07-29 -%% -Type: language -Subtag: ccl -Description: Cutchi-Swahili -Added: 2009-07-29 -%% -Type: language -Subtag: ccm -Description: Malaccan Creole Malay -Added: 2009-07-29 -%% -Type: language -Subtag: ccn -Description: North Caucasian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: cco -Description: Comaltepec Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: ccp -Description: Chakma -Added: 2009-07-29 -%% -Type: language -Subtag: ccq -Description: Chaungtha -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: rki -%% -Type: language -Subtag: ccr -Description: Cacaopera -Added: 2009-07-29 -%% -Type: language -Subtag: ccs -Description: South Caucasian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: cda -Description: Choni -Added: 2009-07-29 -%% -Type: language -Subtag: cdc -Description: Chadic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: cdd -Description: Caddoan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: cde -Description: Chenchu -Added: 2009-07-29 -%% -Type: language -Subtag: cdf -Description: Chiru -Added: 2009-07-29 -%% -Type: language -Subtag: cdg -Description: Chamari -Added: 2009-07-29 -%% -Type: language -Subtag: cdh -Description: Chambeali -Added: 2009-07-29 -%% -Type: language -Subtag: cdi -Description: Chodri -Added: 2009-07-29 -%% -Type: language -Subtag: cdj -Description: Churahi -Added: 2009-07-29 -%% -Type: language -Subtag: cdm -Description: Chepang -Added: 2009-07-29 -%% -Type: language -Subtag: cdn -Description: Chaudangsi -Added: 2009-07-29 -%% -Type: language -Subtag: cdo -Description: Min Dong Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: cdr -Description: Cinda-Regi-Tiyal -Added: 2009-07-29 -%% -Type: language -Subtag: cds -Description: Chadian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: cdy -Description: Chadong -Added: 2009-07-29 -%% -Type: language -Subtag: cdz -Description: Koda -Added: 2009-07-29 -%% -Type: language -Subtag: cea -Description: Lower Chehalis -Added: 2009-07-29 -%% -Type: language -Subtag: ceb -Description: Cebuano -Added: 2005-10-16 -%% -Type: language -Subtag: ceg -Description: Chamacoco -Added: 2009-07-29 -%% -Type: language -Subtag: cek -Description: Eastern Khumi Chin -Added: 2012-08-12 -%% -Type: language -Subtag: cel -Description: Celtic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: cen -Description: Cen -Added: 2009-07-29 -%% -Type: language -Subtag: cet -Description: Centúúm -Added: 2009-07-29 -%% -Type: language -Subtag: cfa -Description: Dijim-Bwilim -Added: 2009-07-29 -%% -Type: language -Subtag: cfd -Description: Cara -Added: 2009-07-29 -%% -Type: language -Subtag: cfg -Description: Como Karim -Added: 2009-07-29 -%% -Type: language -Subtag: cfm -Description: Falam Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cga -Description: Changriwa -Added: 2009-07-29 -%% -Type: language -Subtag: cgc -Description: Kagayanen -Added: 2009-07-29 -%% -Type: language -Subtag: cgg -Description: Chiga -Added: 2009-07-29 -%% -Type: language -Subtag: cgk -Description: Chocangacakha -Added: 2009-07-29 -%% -Type: language -Subtag: chb -Description: Chibcha -Added: 2005-10-16 -%% -Type: language -Subtag: chc -Description: Catawba -Added: 2009-07-29 -%% -Type: language -Subtag: chd -Description: Highland Oaxaca Chontal -Added: 2009-07-29 -%% -Type: language -Subtag: chf -Description: Tabasco Chontal -Added: 2009-07-29 -%% -Type: language -Subtag: chg -Description: Chagatai -Added: 2005-10-16 -%% -Type: language -Subtag: chh -Description: Chinook -Added: 2009-07-29 -%% -Type: language -Subtag: chj -Description: Ojitlán Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: chk -Description: Chuukese -Added: 2005-10-16 -%% -Type: language -Subtag: chl -Description: Cahuilla -Added: 2009-07-29 -%% -Type: language -Subtag: chm -Description: Mari (Russia) -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: chn -Description: Chinook jargon -Added: 2005-10-16 -%% -Type: language -Subtag: cho -Description: Choctaw -Added: 2005-10-16 -%% -Type: language -Subtag: chp -Description: Chipewyan -Description: Dene Suline -Added: 2005-10-16 -%% -Type: language -Subtag: chq -Description: Quiotepec Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: chr -Description: Cherokee -Added: 2005-10-16 -%% -Type: language -Subtag: cht -Description: Cholón -Added: 2009-07-29 -%% -Type: language -Subtag: chw -Description: Chuwabu -Added: 2009-07-29 -%% -Type: language -Subtag: chx -Description: Chantyal -Added: 2009-07-29 -%% -Type: language -Subtag: chy -Description: Cheyenne -Added: 2005-10-16 -%% -Type: language -Subtag: chz -Description: Ozumacín Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: cia -Description: Cia-Cia -Added: 2009-07-29 -%% -Type: language -Subtag: cib -Description: Ci Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: cic -Description: Chickasaw -Added: 2009-07-29 -%% -Type: language -Subtag: cid -Description: Chimariko -Added: 2009-07-29 -%% -Type: language -Subtag: cie -Description: Cineni -Added: 2009-07-29 -%% -Type: language -Subtag: cih -Description: Chinali -Added: 2009-07-29 -%% -Type: language -Subtag: cik -Description: Chitkuli Kinnauri -Added: 2009-07-29 -%% -Type: language -Subtag: cim -Description: Cimbrian -Added: 2009-07-29 -%% -Type: language -Subtag: cin -Description: Cinta Larga -Added: 2009-07-29 -%% -Type: language -Subtag: cip -Description: Chiapanec -Added: 2009-07-29 -%% -Type: language -Subtag: cir -Description: Tiri -Description: Haméa -Description: Méa -Added: 2009-07-29 -%% -Type: language -Subtag: ciw -Description: Chippewa -Added: 2009-07-29 -Macrolanguage: oj -%% -Type: language -Subtag: ciy -Description: Chaima -Added: 2009-07-29 -%% -Type: language -Subtag: cja -Description: Western Cham -Added: 2009-07-29 -%% -Type: language -Subtag: cje -Description: Chru -Added: 2009-07-29 -%% -Type: language -Subtag: cjh -Description: Upper Chehalis -Added: 2009-07-29 -%% -Type: language -Subtag: cji -Description: Chamalal -Added: 2009-07-29 -%% -Type: language -Subtag: cjk -Description: Chokwe -Added: 2009-07-29 -%% -Type: language -Subtag: cjm -Description: Eastern Cham -Added: 2009-07-29 -%% -Type: language -Subtag: cjn -Description: Chenapian -Added: 2009-07-29 -%% -Type: language -Subtag: cjo -Description: Ashéninka Pajonal -Added: 2009-07-29 -%% -Type: language -Subtag: cjp -Description: Cabécar -Added: 2009-07-29 -%% -Type: language -Subtag: cjr -Description: Chorotega -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: mom -%% -Type: language -Subtag: cjs -Description: Shor -Added: 2009-07-29 -%% -Type: language -Subtag: cjv -Description: Chuave -Added: 2009-07-29 -%% -Type: language -Subtag: cjy -Description: Jinyu Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: cka -Description: Khumi Awa Chin -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: cmr -%% -Type: language -Subtag: ckb -Description: Central Kurdish -Added: 2009-07-29 -Macrolanguage: ku -%% -Type: language -Subtag: ckh -Description: Chak -Added: 2009-07-29 -%% -Type: language -Subtag: ckl -Description: Cibak -Added: 2009-07-29 -%% -Type: language -Subtag: ckn -Description: Kaang Chin -Added: 2013-09-10 -%% -Type: language -Subtag: cko -Description: Anufo -Added: 2009-07-29 -%% -Type: language -Subtag: ckq -Description: Kajakse -Added: 2009-07-29 -%% -Type: language -Subtag: ckr -Description: Kairak -Added: 2009-07-29 -%% -Type: language -Subtag: cks -Description: Tayo -Added: 2009-07-29 -%% -Type: language -Subtag: ckt -Description: Chukot -Added: 2009-07-29 -%% -Type: language -Subtag: cku -Description: Koasati -Added: 2009-07-29 -%% -Type: language -Subtag: ckv -Description: Kavalan -Added: 2009-07-29 -%% -Type: language -Subtag: ckx -Description: Caka -Added: 2009-07-29 -%% -Type: language -Subtag: cky -Description: Cakfem-Mushere -Added: 2009-07-29 -%% -Type: language -Subtag: ckz -Description: Cakchiquel-Quiché Mixed Language -Added: 2009-07-29 -%% -Type: language -Subtag: cla -Description: Ron -Added: 2009-07-29 -%% -Type: language -Subtag: clc -Description: Chilcotin -Added: 2009-07-29 -%% -Type: language -Subtag: cld -Description: Chaldean Neo-Aramaic -Added: 2009-07-29 -Macrolanguage: syr -%% -Type: language -Subtag: cle -Description: Lealao Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: clh -Description: Chilisso -Added: 2009-07-29 -%% -Type: language -Subtag: cli -Description: Chakali -Added: 2009-07-29 -%% -Type: language -Subtag: clj -Description: Laitu Chin -Added: 2012-08-12 -%% -Type: language -Subtag: clk -Description: Idu-Mishmi -Added: 2009-07-29 -%% -Type: language -Subtag: cll -Description: Chala -Added: 2009-07-29 -%% -Type: language -Subtag: clm -Description: Clallam -Added: 2009-07-29 -%% -Type: language -Subtag: clo -Description: Lowland Oaxaca Chontal -Added: 2009-07-29 -%% -Type: language -Subtag: clt -Description: Lautu Chin -Added: 2012-08-12 -%% -Type: language -Subtag: clu -Description: Caluyanun -Added: 2009-07-29 -%% -Type: language -Subtag: clw -Description: Chulym -Added: 2009-07-29 -%% -Type: language -Subtag: cly -Description: Eastern Highland Chatino -Added: 2009-07-29 -%% -Type: language -Subtag: cma -Description: Maa -Added: 2009-07-29 -%% -Type: language -Subtag: cmc -Description: Chamic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: cme -Description: Cerma -Added: 2009-07-29 -%% -Type: language -Subtag: cmg -Description: Classical Mongolian -Added: 2009-07-29 -%% -Type: language -Subtag: cmi -Description: Emberá-Chamí -Added: 2009-07-29 -%% -Type: language -Subtag: cmk -Description: Chimakum -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: xch -%% -Type: language -Subtag: cml -Description: Campalagian -Added: 2009-07-29 -%% -Type: language -Subtag: cmm -Description: Michigamea -Added: 2009-07-29 -%% -Type: language -Subtag: cmn -Description: Mandarin Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: cmo -Description: Central Mnong -Added: 2009-07-29 -%% -Type: language -Subtag: cmr -Description: Mro-Khimi Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cms -Description: Messapic -Added: 2009-07-29 -%% -Type: language -Subtag: cmt -Description: Camtho -Added: 2009-07-29 -%% -Type: language -Subtag: cna -Description: Changthang -Added: 2009-07-29 -%% -Type: language -Subtag: cnb -Description: Chinbon Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cnc -Description: Côông -Added: 2009-07-29 -%% -Type: language -Subtag: cng -Description: Northern Qiang -Added: 2009-07-29 -%% -Type: language -Subtag: cnh -Description: Haka Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cni -Description: Asháninka -Added: 2009-07-29 -%% -Type: language -Subtag: cnk -Description: Khumi Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cnl -Description: Lalana Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: cno -Description: Con -Added: 2009-07-29 -%% -Type: language -Subtag: cns -Description: Central Asmat -Added: 2009-07-29 -%% -Type: language -Subtag: cnt -Description: Tepetotutla Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: cnu -Description: Chenoua -Added: 2009-07-29 -%% -Type: language -Subtag: cnw -Description: Ngawn Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cnx -Description: Middle Cornish -Added: 2009-07-29 -%% -Type: language -Subtag: coa -Description: Cocos Islands Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: cob -Description: Chicomuceltec -Added: 2009-07-29 -%% -Type: language -Subtag: coc -Description: Cocopa -Added: 2009-07-29 -%% -Type: language -Subtag: cod -Description: Cocama-Cocamilla -Added: 2009-07-29 -%% -Type: language -Subtag: coe -Description: Koreguaje -Added: 2009-07-29 -%% -Type: language -Subtag: cof -Description: Colorado -Added: 2009-07-29 -%% -Type: language -Subtag: cog -Description: Chong -Added: 2009-07-29 -%% -Type: language -Subtag: coh -Description: Chonyi-Dzihana-Kauma -Description: Chichonyi-Chidzihana-Chikauma -Added: 2009-07-29 -%% -Type: language -Subtag: coj -Description: Cochimi -Added: 2009-07-29 -%% -Type: language -Subtag: cok -Description: Santa Teresa Cora -Added: 2009-07-29 -%% -Type: language -Subtag: col -Description: Columbia-Wenatchi -Added: 2009-07-29 -%% -Type: language -Subtag: com -Description: Comanche -Added: 2009-07-29 -%% -Type: language -Subtag: con -Description: Cofán -Added: 2009-07-29 -%% -Type: language -Subtag: coo -Description: Comox -Added: 2009-07-29 -%% -Type: language -Subtag: cop -Description: Coptic -Added: 2005-10-16 -%% -Type: language -Subtag: coq -Description: Coquille -Added: 2009-07-29 -%% -Type: language -Subtag: cot -Description: Caquinte -Added: 2009-07-29 -%% -Type: language -Subtag: cou -Description: Wamey -Added: 2009-07-29 -%% -Type: language -Subtag: cov -Description: Cao Miao -Added: 2009-07-29 -%% -Type: language -Subtag: cow -Description: Cowlitz -Added: 2009-07-29 -%% -Type: language -Subtag: cox -Description: Nanti -Added: 2009-07-29 -%% -Type: language -Subtag: coy -Description: Coyaima -Added: 2009-07-29 -%% -Type: language -Subtag: coz -Description: Chochotec -Added: 2009-07-29 -%% -Type: language -Subtag: cpa -Description: Palantla Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: cpb -Description: Ucayali-Yurúa Ashéninka -Added: 2009-07-29 -%% -Type: language -Subtag: cpc -Description: Ajyíninka Apurucayali -Added: 2009-07-29 -%% -Type: language -Subtag: cpe -Description: English-based creoles and pidgins -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: cpf -Description: French-based creoles and pidgins -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: cpg -Description: Cappadocian Greek -Added: 2009-07-29 -%% -Type: language -Subtag: cpi -Description: Chinese Pidgin English -Added: 2009-07-29 -%% -Type: language -Subtag: cpn -Description: Cherepon -Added: 2009-07-29 -%% -Type: language -Subtag: cpo -Description: Kpeego -Added: 2013-09-10 -%% -Type: language -Subtag: cpp -Description: Portuguese-based creoles and pidgins -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: cps -Description: Capiznon -Added: 2009-07-29 -%% -Type: language -Subtag: cpu -Description: Pichis Ashéninka -Added: 2009-07-29 -%% -Type: language -Subtag: cpx -Description: Pu-Xian Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: cpy -Description: South Ucayali Ashéninka -Added: 2009-07-29 -%% -Type: language -Subtag: cqd -Description: Chuanqiandian Cluster Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: cqu -Description: Chilean Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: cra -Description: Chara -Added: 2009-07-29 -%% -Type: language -Subtag: crb -Description: Island Carib -Added: 2009-07-29 -%% -Type: language -Subtag: crc -Description: Lonwolwol -Added: 2009-07-29 -%% -Type: language -Subtag: crd -Description: Coeur d'Alene -Added: 2009-07-29 -%% -Type: language -Subtag: crf -Description: Caramanta -Added: 2009-07-29 -%% -Type: language -Subtag: crg -Description: Michif -Added: 2009-07-29 -%% -Type: language -Subtag: crh -Description: Crimean Tatar -Description: Crimean Turkish -Added: 2005-10-16 -%% -Type: language -Subtag: cri -Description: Sãotomense -Added: 2009-07-29 -%% -Type: language -Subtag: crj -Description: Southern East Cree -Added: 2009-07-29 -Macrolanguage: cr -%% -Type: language -Subtag: crk -Description: Plains Cree -Added: 2009-07-29 -Macrolanguage: cr -%% -Type: language -Subtag: crl -Description: Northern East Cree -Added: 2009-07-29 -Macrolanguage: cr -%% -Type: language -Subtag: crm -Description: Moose Cree -Added: 2009-07-29 -Macrolanguage: cr -%% -Type: language -Subtag: crn -Description: El Nayar Cora -Added: 2009-07-29 -%% -Type: language -Subtag: cro -Description: Crow -Added: 2009-07-29 -%% -Type: language -Subtag: crp -Description: Creoles and pidgins -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: crq -Description: Iyo'wujwa Chorote -Added: 2009-07-29 -%% -Type: language -Subtag: crr -Description: Carolina Algonquian -Added: 2009-07-29 -%% -Type: language -Subtag: crs -Description: Seselwa Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: crt -Description: Iyojwa'ja Chorote -Added: 2009-07-29 -%% -Type: language -Subtag: crv -Description: Chaura -Added: 2009-07-29 -%% -Type: language -Subtag: crw -Description: Chrau -Added: 2009-07-29 -%% -Type: language -Subtag: crx -Description: Carrier -Added: 2009-07-29 -%% -Type: language -Subtag: cry -Description: Cori -Added: 2009-07-29 -%% -Type: language -Subtag: crz -Description: Cruzeño -Added: 2009-07-29 -%% -Type: language -Subtag: csa -Description: Chiltepec Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: csb -Description: Kashubian -Added: 2005-10-16 -%% -Type: language -Subtag: csc -Description: Catalan Sign Language -Description: Lengua de señas catalana -Description: Llengua de Signes Catalana -Added: 2009-07-29 -%% -Type: language -Subtag: csd -Description: Chiangmai Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: cse -Description: Czech Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: csf -Description: Cuba Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: csg -Description: Chilean Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: csh -Description: Asho Chin -Added: 2009-07-29 -%% -Type: language -Subtag: csi -Description: Coast Miwok -Added: 2009-07-29 -%% -Type: language -Subtag: csj -Description: Songlai Chin -Added: 2013-09-10 -%% -Type: language -Subtag: csk -Description: Jola-Kasa -Added: 2009-07-29 -%% -Type: language -Subtag: csl -Description: Chinese Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: csm -Description: Central Sierra Miwok -Added: 2009-07-29 -%% -Type: language -Subtag: csn -Description: Colombian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: cso -Description: Sochiapam Chinantec -Description: Sochiapan Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: csq -Description: Croatia Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: csr -Description: Costa Rican Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: css -Description: Southern Ohlone -Added: 2009-07-29 -%% -Type: language -Subtag: cst -Description: Northern Ohlone -Added: 2009-07-29 -%% -Type: language -Subtag: csu -Description: Central Sudanic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: csv -Description: Sumtu Chin -Added: 2012-08-12 -%% -Type: language -Subtag: csw -Description: Swampy Cree -Added: 2009-07-29 -Macrolanguage: cr -%% -Type: language -Subtag: csy -Description: Siyin Chin -Added: 2009-07-29 -%% -Type: language -Subtag: csz -Description: Coos -Added: 2009-07-29 -%% -Type: language -Subtag: cta -Description: Tataltepec Chatino -Added: 2009-07-29 -%% -Type: language -Subtag: ctc -Description: Chetco -Added: 2009-07-29 -%% -Type: language -Subtag: ctd -Description: Tedim Chin -Added: 2009-07-29 -%% -Type: language -Subtag: cte -Description: Tepinapa Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: ctg -Description: Chittagonian -Added: 2009-07-29 -%% -Type: language -Subtag: cth -Description: Thaiphum Chin -Added: 2012-08-12 -%% -Type: language -Subtag: ctl -Description: Tlacoatzintepec Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: ctm -Description: Chitimacha -Added: 2009-07-29 -%% -Type: language -Subtag: ctn -Description: Chhintange -Added: 2009-07-29 -%% -Type: language -Subtag: cto -Description: Emberá-Catío -Added: 2009-07-29 -%% -Type: language -Subtag: ctp -Description: Western Highland Chatino -Added: 2009-07-29 -%% -Type: language -Subtag: cts -Description: Northern Catanduanes Bikol -Added: 2009-07-29 -Macrolanguage: bik -%% -Type: language -Subtag: ctt -Description: Wayanad Chetti -Added: 2009-07-29 -%% -Type: language -Subtag: ctu -Description: Chol -Added: 2009-07-29 -%% -Type: language -Subtag: ctz -Description: Zacatepec Chatino -Added: 2009-07-29 -%% -Type: language -Subtag: cua -Description: Cua -Added: 2009-07-29 -%% -Type: language -Subtag: cub -Description: Cubeo -Added: 2009-07-29 -%% -Type: language -Subtag: cuc -Description: Usila Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: cug -Description: Cung -Added: 2009-07-29 -%% -Type: language -Subtag: cuh -Description: Chuka -Description: Gichuka -Added: 2009-07-29 -%% -Type: language -Subtag: cui -Description: Cuiba -Added: 2009-07-29 -%% -Type: language -Subtag: cuj -Description: Mashco Piro -Added: 2009-07-29 -%% -Type: language -Subtag: cuk -Description: San Blas Kuna -Added: 2009-07-29 -%% -Type: language -Subtag: cul -Description: Culina -Description: Kulina -Added: 2009-07-29 -%% -Type: language -Subtag: cum -Description: Cumeral -Added: 2009-07-29 -%% -Type: language -Subtag: cuo -Description: Cumanagoto -Added: 2009-07-29 -%% -Type: language -Subtag: cup -Description: Cupeño -Added: 2009-07-29 -%% -Type: language -Subtag: cuq -Description: Cun -Added: 2009-07-29 -%% -Type: language -Subtag: cur -Description: Chhulung -Added: 2009-07-29 -%% -Type: language -Subtag: cus -Description: Cushitic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: cut -Description: Teutila Cuicatec -Added: 2009-07-29 -%% -Type: language -Subtag: cuu -Description: Tai Ya -Added: 2009-07-29 -%% -Type: language -Subtag: cuv -Description: Cuvok -Added: 2009-07-29 -%% -Type: language -Subtag: cuw -Description: Chukwa -Added: 2009-07-29 -%% -Type: language -Subtag: cux -Description: Tepeuxila Cuicatec -Added: 2009-07-29 -%% -Type: language -Subtag: cvg -Description: Chug -Added: 2009-07-29 -%% -Type: language -Subtag: cvn -Description: Valle Nacional Chinantec -Added: 2009-07-29 -%% -Type: language -Subtag: cwa -Description: Kabwa -Added: 2009-07-29 -%% -Type: language -Subtag: cwb -Description: Maindo -Added: 2009-07-29 -%% -Type: language -Subtag: cwd -Description: Woods Cree -Added: 2009-07-29 -Macrolanguage: cr -%% -Type: language -Subtag: cwe -Description: Kwere -Added: 2009-07-29 -%% -Type: language -Subtag: cwg -Description: Chewong -Description: Cheq Wong -Added: 2009-07-29 -%% -Type: language -Subtag: cwt -Description: Kuwaataay -Added: 2009-07-29 -%% -Type: language -Subtag: cya -Description: Nopala Chatino -Added: 2009-07-29 -%% -Type: language -Subtag: cyb -Description: Cayubaba -Added: 2009-07-29 -%% -Type: language -Subtag: cyo -Description: Cuyonon -Added: 2009-07-29 -%% -Type: language -Subtag: czh -Description: Huizhou Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: czk -Description: Knaanic -Added: 2009-07-29 -%% -Type: language -Subtag: czn -Description: Zenzontepec Chatino -Added: 2009-07-29 -%% -Type: language -Subtag: czo -Description: Min Zhong Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: czt -Description: Zotung Chin -Added: 2009-07-29 -%% -Type: language -Subtag: daa -Description: Dangaléat -Added: 2009-07-29 -%% -Type: language -Subtag: dac -Description: Dambi -Added: 2009-07-29 -%% -Type: language -Subtag: dad -Description: Marik -Added: 2009-07-29 -%% -Type: language -Subtag: dae -Description: Duupa -Added: 2009-07-29 -%% -Type: language -Subtag: daf -Description: Dan -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see dnj, lda -%% -Type: language -Subtag: dag -Description: Dagbani -Added: 2009-07-29 -%% -Type: language -Subtag: dah -Description: Gwahatike -Added: 2009-07-29 -%% -Type: language -Subtag: dai -Description: Day -Added: 2009-07-29 -%% -Type: language -Subtag: daj -Description: Dar Fur Daju -Added: 2009-07-29 -%% -Type: language -Subtag: dak -Description: Dakota -Added: 2005-10-16 -%% -Type: language -Subtag: dal -Description: Dahalo -Added: 2009-07-29 -%% -Type: language -Subtag: dam -Description: Damakawa -Added: 2009-07-29 -%% -Type: language -Subtag: dao -Description: Daai Chin -Added: 2009-07-29 -%% -Type: language -Subtag: dap -Description: Nisi (India) -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see njz, tgj -%% -Type: language -Subtag: daq -Description: Dandami Maria -Added: 2009-07-29 -%% -Type: language -Subtag: dar -Description: Dargwa -Added: 2005-10-16 -%% -Type: language -Subtag: das -Description: Daho-Doo -Added: 2009-07-29 -%% -Type: language -Subtag: dau -Description: Dar Sila Daju -Added: 2009-07-29 -%% -Type: language -Subtag: dav -Description: Taita -Description: Dawida -Added: 2009-07-29 -%% -Type: language -Subtag: daw -Description: Davawenyo -Added: 2009-07-29 -%% -Type: language -Subtag: dax -Description: Dayi -Added: 2009-07-29 -%% -Type: language -Subtag: day -Description: Land Dayak languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: daz -Description: Dao -Added: 2009-07-29 -%% -Type: language -Subtag: dba -Description: Bangime -Added: 2009-07-29 -%% -Type: language -Subtag: dbb -Description: Deno -Added: 2009-07-29 -%% -Type: language -Subtag: dbd -Description: Dadiya -Added: 2009-07-29 -%% -Type: language -Subtag: dbe -Description: Dabe -Added: 2009-07-29 -%% -Type: language -Subtag: dbf -Description: Edopi -Added: 2009-07-29 -%% -Type: language -Subtag: dbg -Description: Dogul Dom Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dbi -Description: Doka -Added: 2009-07-29 -%% -Type: language -Subtag: dbj -Description: Ida'an -Added: 2009-07-29 -%% -Type: language -Subtag: dbl -Description: Dyirbal -Added: 2009-07-29 -%% -Type: language -Subtag: dbm -Description: Duguri -Added: 2009-07-29 -%% -Type: language -Subtag: dbn -Description: Duriankere -Added: 2009-07-29 -%% -Type: language -Subtag: dbo -Description: Dulbu -Added: 2009-07-29 -%% -Type: language -Subtag: dbp -Description: Duwai -Added: 2009-07-29 -%% -Type: language -Subtag: dbq -Description: Daba -Added: 2009-07-29 -%% -Type: language -Subtag: dbr -Description: Dabarre -Added: 2009-07-29 -%% -Type: language -Subtag: dbt -Description: Ben Tey Dogon -Added: 2012-08-12 -%% -Type: language -Subtag: dbu -Description: Bondum Dom Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dbv -Description: Dungu -Added: 2009-07-29 -%% -Type: language -Subtag: dbw -Description: Bankan Tey Dogon -Added: 2012-08-12 -%% -Type: language -Subtag: dby -Description: Dibiyaso -Added: 2009-07-29 -%% -Type: language -Subtag: dcc -Description: Deccan -Added: 2009-07-29 -%% -Type: language -Subtag: dcr -Description: Negerhollands -Added: 2009-07-29 -%% -Type: language -Subtag: dda -Description: Dadi Dadi -Added: 2012-08-12 -%% -Type: language -Subtag: ddd -Description: Dongotono -Added: 2009-07-29 -%% -Type: language -Subtag: dde -Description: Doondo -Added: 2009-07-29 -%% -Type: language -Subtag: ddg -Description: Fataluku -Added: 2009-07-29 -%% -Type: language -Subtag: ddi -Description: West Goodenough -Added: 2009-07-29 -%% -Type: language -Subtag: ddj -Description: Jaru -Added: 2009-07-29 -%% -Type: language -Subtag: ddn -Description: Dendi (Benin) -Added: 2009-07-29 -%% -Type: language -Subtag: ddo -Description: Dido -Added: 2009-07-29 -%% -Type: language -Subtag: ddr -Description: Dhudhuroa -Added: 2012-08-12 -%% -Type: language -Subtag: dds -Description: Donno So Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: ddw -Description: Dawera-Daweloor -Added: 2009-07-29 -%% -Type: language -Subtag: dec -Description: Dagik -Added: 2009-07-29 -%% -Type: language -Subtag: ded -Description: Dedua -Added: 2009-07-29 -%% -Type: language -Subtag: dee -Description: Dewoin -Added: 2009-07-29 -%% -Type: language -Subtag: def -Description: Dezfuli -Added: 2009-07-29 -%% -Type: language -Subtag: deg -Description: Degema -Added: 2009-07-29 -%% -Type: language -Subtag: deh -Description: Dehwari -Added: 2009-07-29 -%% -Type: language -Subtag: dei -Description: Demisa -Added: 2009-07-29 -%% -Type: language -Subtag: dek -Description: Dek -Added: 2009-07-29 -%% -Type: language -Subtag: del -Description: Delaware -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: dem -Description: Dem -Added: 2009-07-29 -%% -Type: language -Subtag: den -Description: Slave (Athapascan) -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: dep -Description: Pidgin Delaware -Added: 2009-07-29 -%% -Type: language -Subtag: deq -Description: Dendi (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: der -Description: Deori -Added: 2009-07-29 -%% -Type: language -Subtag: des -Description: Desano -Added: 2009-07-29 -%% -Type: language -Subtag: dev -Description: Domung -Added: 2009-07-29 -%% -Type: language -Subtag: dez -Description: Dengese -Added: 2009-07-29 -%% -Type: language -Subtag: dga -Description: Southern Dagaare -Added: 2009-07-29 -%% -Type: language -Subtag: dgb -Description: Bunoge Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dgc -Description: Casiguran Dumagat Agta -Added: 2009-07-29 -%% -Type: language -Subtag: dgd -Description: Dagaari Dioula -Added: 2009-07-29 -%% -Type: language -Subtag: dge -Description: Degenan -Added: 2009-07-29 -%% -Type: language -Subtag: dgg -Description: Doga -Added: 2009-07-29 -%% -Type: language -Subtag: dgh -Description: Dghwede -Added: 2009-07-29 -%% -Type: language -Subtag: dgi -Description: Northern Dagara -Added: 2009-07-29 -%% -Type: language -Subtag: dgk -Description: Dagba -Added: 2009-07-29 -%% -Type: language -Subtag: dgl -Description: Andaandi -Description: Dongolawi -Added: 2012-08-12 -%% -Type: language -Subtag: dgn -Description: Dagoman -Added: 2009-07-29 -%% -Type: language -Subtag: dgo -Description: Dogri (individual language) -Added: 2009-07-29 -Macrolanguage: doi -%% -Type: language -Subtag: dgr -Description: Dogrib -Added: 2005-10-16 -%% -Type: language -Subtag: dgs -Description: Dogoso -Added: 2009-07-29 -%% -Type: language -Subtag: dgt -Description: Ndra'ngith -Added: 2012-08-12 -%% -Type: language -Subtag: dgu -Description: Degaru -Added: 2009-07-29 -%% -Type: language -Subtag: dgw -Description: Daungwurrung -Added: 2012-08-12 -%% -Type: language -Subtag: dgx -Description: Doghoro -Added: 2009-07-29 -%% -Type: language -Subtag: dgz -Description: Daga -Added: 2009-07-29 -%% -Type: language -Subtag: dha -Description: Dhanwar (India) -Added: 2009-07-29 -Deprecated: 2011-08-16 -%% -Type: language -Subtag: dhd -Description: Dhundari -Added: 2009-07-29 -Macrolanguage: mwr -%% -Type: language -Subtag: dhg -Description: Djangu -Description: Dhangu -Added: 2009-07-29 -%% -Type: language -Subtag: dhi -Description: Dhimal -Added: 2009-07-29 -%% -Type: language -Subtag: dhl -Description: Dhalandji -Added: 2009-07-29 -%% -Type: language -Subtag: dhm -Description: Zemba -Added: 2009-07-29 -%% -Type: language -Subtag: dhn -Description: Dhanki -Added: 2009-07-29 -%% -Type: language -Subtag: dho -Description: Dhodia -Added: 2009-07-29 -%% -Type: language -Subtag: dhr -Description: Dhargari -Added: 2009-07-29 -%% -Type: language -Subtag: dhs -Description: Dhaiso -Added: 2009-07-29 -%% -Type: language -Subtag: dhu -Description: Dhurga -Added: 2009-07-29 -%% -Type: language -Subtag: dhv -Description: Dehu -Description: Drehu -Added: 2009-07-29 -%% -Type: language -Subtag: dhw -Description: Dhanwar (Nepal) -Added: 2009-07-29 -%% -Type: language -Subtag: dhx -Description: Dhungaloo -Added: 2013-09-10 -%% -Type: language -Subtag: dia -Description: Dia -Added: 2009-07-29 -%% -Type: language -Subtag: dib -Description: South Central Dinka -Added: 2009-07-29 -Macrolanguage: din -%% -Type: language -Subtag: dic -Description: Lakota Dida -Added: 2009-07-29 -%% -Type: language -Subtag: did -Description: Didinga -Added: 2009-07-29 -%% -Type: language -Subtag: dif -Description: Dieri -Added: 2009-07-29 -%% -Type: language -Subtag: dig -Description: Digo -Description: Chidigo -Added: 2009-07-29 -%% -Type: language -Subtag: dih -Description: Kumiai -Added: 2009-07-29 -%% -Type: language -Subtag: dii -Description: Dimbong -Added: 2009-07-29 -%% -Type: language -Subtag: dij -Description: Dai -Added: 2009-07-29 -%% -Type: language -Subtag: dik -Description: Southwestern Dinka -Added: 2009-07-29 -Macrolanguage: din -%% -Type: language -Subtag: dil -Description: Dilling -Added: 2009-07-29 -%% -Type: language -Subtag: dim -Description: Dime -Added: 2009-07-29 -%% -Type: language -Subtag: din -Description: Dinka -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: dio -Description: Dibo -Added: 2009-07-29 -%% -Type: language -Subtag: dip -Description: Northeastern Dinka -Added: 2009-07-29 -Macrolanguage: din -%% -Type: language -Subtag: diq -Description: Dimli (individual language) -Added: 2009-07-29 -Macrolanguage: zza -%% -Type: language -Subtag: dir -Description: Dirim -Added: 2009-07-29 -%% -Type: language -Subtag: dis -Description: Dimasa -Added: 2009-07-29 -%% -Type: language -Subtag: dit -Description: Dirari -Added: 2009-07-29 -%% -Type: language -Subtag: diu -Description: Diriku -Added: 2009-07-29 -%% -Type: language -Subtag: diw -Description: Northwestern Dinka -Added: 2009-07-29 -Macrolanguage: din -%% -Type: language -Subtag: dix -Description: Dixon Reef -Added: 2009-07-29 -%% -Type: language -Subtag: diy -Description: Diuwe -Added: 2009-07-29 -%% -Type: language -Subtag: diz -Description: Ding -Added: 2009-07-29 -%% -Type: language -Subtag: dja -Description: Djadjawurrung -Added: 2012-08-12 -%% -Type: language -Subtag: djb -Description: Djinba -Added: 2009-07-29 -%% -Type: language -Subtag: djc -Description: Dar Daju Daju -Added: 2009-07-29 -%% -Type: language -Subtag: djd -Description: Djamindjung -Added: 2009-07-29 -%% -Type: language -Subtag: dje -Description: Zarma -Added: 2009-07-29 -%% -Type: language -Subtag: djf -Description: Djangun -Added: 2009-07-29 -%% -Type: language -Subtag: dji -Description: Djinang -Added: 2009-07-29 -%% -Type: language -Subtag: djj -Description: Djeebbana -Added: 2009-07-29 -%% -Type: language -Subtag: djk -Description: Eastern Maroon Creole -Description: Businenge Tongo -Description: Nenge -Added: 2009-07-29 -%% -Type: language -Subtag: djl -Description: Djiwarli -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see dze, iin -%% -Type: language -Subtag: djm -Description: Jamsay Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: djn -Description: Djauan -Added: 2009-07-29 -%% -Type: language -Subtag: djo -Description: Jangkang -Added: 2009-07-29 -%% -Type: language -Subtag: djr -Description: Djambarrpuyngu -Added: 2009-07-29 -%% -Type: language -Subtag: dju -Description: Kapriman -Added: 2009-07-29 -%% -Type: language -Subtag: djw -Description: Djawi -Added: 2009-07-29 -%% -Type: language -Subtag: dka -Description: Dakpakha -Added: 2009-07-29 -%% -Type: language -Subtag: dkk -Description: Dakka -Added: 2009-07-29 -%% -Type: language -Subtag: dkl -Description: Kolum So Dogon -Added: 2009-07-29 -Deprecated: 2011-08-16 -Comments: see aqd, dmb -%% -Type: language -Subtag: dkr -Description: Kuijau -Added: 2009-07-29 -%% -Type: language -Subtag: dks -Description: Southeastern Dinka -Added: 2009-07-29 -Macrolanguage: din -%% -Type: language -Subtag: dkx -Description: Mazagway -Added: 2009-07-29 -%% -Type: language -Subtag: dlg -Description: Dolgan -Added: 2009-07-29 -%% -Type: language -Subtag: dlk -Description: Dahalik -Added: 2013-09-10 -%% -Type: language -Subtag: dlm -Description: Dalmatian -Added: 2009-07-29 -%% -Type: language -Subtag: dln -Description: Darlong -Added: 2009-07-29 -%% -Type: language -Subtag: dma -Description: Duma -Added: 2009-07-29 -%% -Type: language -Subtag: dmb -Description: Mombo Dogon -Added: 2011-08-16 -%% -Type: language -Subtag: dmc -Description: Gavak -Added: 2009-07-29 -%% -Type: language -Subtag: dmd -Description: Madhi Madhi -Added: 2012-08-12 -%% -Type: language -Subtag: dme -Description: Dugwor -Added: 2009-07-29 -%% -Type: language -Subtag: dmg -Description: Upper Kinabatangan -Added: 2009-07-29 -%% -Type: language -Subtag: dmk -Description: Domaaki -Added: 2009-07-29 -%% -Type: language -Subtag: dml -Description: Dameli -Added: 2009-07-29 -%% -Type: language -Subtag: dmm -Description: Dama -Added: 2009-07-29 -%% -Type: language -Subtag: dmn -Description: Mande languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: dmo -Description: Kemedzung -Added: 2009-07-29 -%% -Type: language -Subtag: dmr -Description: East Damar -Added: 2009-07-29 -%% -Type: language -Subtag: dms -Description: Dampelas -Added: 2009-07-29 -%% -Type: language -Subtag: dmu -Description: Dubu -Description: Tebi -Added: 2009-07-29 -%% -Type: language -Subtag: dmv -Description: Dumpas -Added: 2009-07-29 -%% -Type: language -Subtag: dmw -Description: Mudburra -Added: 2013-09-10 -%% -Type: language -Subtag: dmx -Description: Dema -Added: 2009-07-29 -%% -Type: language -Subtag: dmy -Description: Demta -Description: Sowari -Added: 2009-07-29 -%% -Type: language -Subtag: dna -Description: Upper Grand Valley Dani -Added: 2009-07-29 -%% -Type: language -Subtag: dnd -Description: Daonda -Added: 2009-07-29 -%% -Type: language -Subtag: dne -Description: Ndendeule -Added: 2009-07-29 -%% -Type: language -Subtag: dng -Description: Dungan -Added: 2009-07-29 -%% -Type: language -Subtag: dni -Description: Lower Grand Valley Dani -Added: 2009-07-29 -%% -Type: language -Subtag: dnj -Description: Dan -Added: 2013-09-10 -%% -Type: language -Subtag: dnk -Description: Dengka -Added: 2009-07-29 -%% -Type: language -Subtag: dnn -Description: Dzùùngoo -Added: 2009-07-29 -%% -Type: language -Subtag: dnr -Description: Danaru -Added: 2009-07-29 -%% -Type: language -Subtag: dnt -Description: Mid Grand Valley Dani -Added: 2009-07-29 -%% -Type: language -Subtag: dnu -Description: Danau -Added: 2009-07-29 -%% -Type: language -Subtag: dnv -Description: Danu -Added: 2012-08-12 -%% -Type: language -Subtag: dnw -Description: Western Dani -Added: 2009-07-29 -%% -Type: language -Subtag: dny -Description: Dení -Added: 2009-07-29 -%% -Type: language -Subtag: doa -Description: Dom -Added: 2009-07-29 -%% -Type: language -Subtag: dob -Description: Dobu -Added: 2009-07-29 -%% -Type: language -Subtag: doc -Description: Northern Dong -Added: 2009-07-29 -%% -Type: language -Subtag: doe -Description: Doe -Added: 2009-07-29 -%% -Type: language -Subtag: dof -Description: Domu -Added: 2009-07-29 -%% -Type: language -Subtag: doh -Description: Dong -Added: 2009-07-29 -%% -Type: language -Subtag: doi -Description: Dogri (macrolanguage) -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: dok -Description: Dondo -Added: 2009-07-29 -%% -Type: language -Subtag: dol -Description: Doso -Added: 2009-07-29 -%% -Type: language -Subtag: don -Description: Toura (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: doo -Description: Dongo -Added: 2009-07-29 -%% -Type: language -Subtag: dop -Description: Lukpa -Added: 2009-07-29 -%% -Type: language -Subtag: doq -Description: Dominican Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: dor -Description: Dori'o -Added: 2009-07-29 -%% -Type: language -Subtag: dos -Description: Dogosé -Added: 2009-07-29 -%% -Type: language -Subtag: dot -Description: Dass -Added: 2009-07-29 -%% -Type: language -Subtag: dov -Description: Dombe -Added: 2009-07-29 -%% -Type: language -Subtag: dow -Description: Doyayo -Added: 2009-07-29 -%% -Type: language -Subtag: dox -Description: Bussa -Added: 2009-07-29 -%% -Type: language -Subtag: doy -Description: Dompo -Added: 2009-07-29 -%% -Type: language -Subtag: doz -Description: Dorze -Added: 2009-07-29 -%% -Type: language -Subtag: dpp -Description: Papar -Added: 2009-07-29 -%% -Type: language -Subtag: dra -Description: Dravidian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: drb -Description: Dair -Added: 2009-07-29 -%% -Type: language -Subtag: drc -Description: Minderico -Added: 2011-08-16 -%% -Type: language -Subtag: drd -Description: Darmiya -Added: 2009-07-29 -%% -Type: language -Subtag: dre -Description: Dolpo -Added: 2009-07-29 -%% -Type: language -Subtag: drg -Description: Rungus -Added: 2009-07-29 -%% -Type: language -Subtag: drh -Description: Darkhat -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: khk -%% -Type: language -Subtag: dri -Description: C'lela -Added: 2009-07-29 -%% -Type: language -Subtag: drl -Description: Paakantyi -Added: 2009-07-29 -%% -Type: language -Subtag: drn -Description: West Damar -Added: 2009-07-29 -%% -Type: language -Subtag: dro -Description: Daro-Matu Melanau -Added: 2009-07-29 -%% -Type: language -Subtag: drq -Description: Dura -Added: 2009-07-29 -%% -Type: language -Subtag: drr -Description: Dororo -Added: 2009-07-29 -%% -Type: language -Subtag: drs -Description: Gedeo -Added: 2009-07-29 -%% -Type: language -Subtag: drt -Description: Drents -Added: 2009-07-29 -%% -Type: language -Subtag: dru -Description: Rukai -Added: 2009-07-29 -%% -Type: language -Subtag: drw -Description: Darwazi -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: prs -%% -Type: language -Subtag: dry -Description: Darai -Added: 2009-07-29 -%% -Type: language -Subtag: dsb -Description: Lower Sorbian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: dse -Description: Dutch Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: dsh -Description: Daasanach -Added: 2009-07-29 -%% -Type: language -Subtag: dsi -Description: Disa -Added: 2009-07-29 -%% -Type: language -Subtag: dsl -Description: Danish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: dsn -Description: Dusner -Added: 2009-07-29 -%% -Type: language -Subtag: dso -Description: Desiya -Added: 2009-07-29 -%% -Type: language -Subtag: dsq -Description: Tadaksahak -Added: 2009-07-29 -%% -Type: language -Subtag: dta -Description: Daur -Added: 2009-07-29 -%% -Type: language -Subtag: dtb -Description: Labuk-Kinabatangan Kadazan -Added: 2009-07-29 -%% -Type: language -Subtag: dtd -Description: Ditidaht -Added: 2011-08-16 -%% -Type: language -Subtag: dth -Description: Adithinngithigh -Added: 2012-08-12 -%% -Type: language -Subtag: dti -Description: Ana Tinga Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dtk -Description: Tene Kan Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dtm -Description: Tomo Kan Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dto -Description: Tommo So Dogon -Added: 2012-08-12 -%% -Type: language -Subtag: dtp -Description: Central Dusun -Added: 2009-07-29 -%% -Type: language -Subtag: dtr -Description: Lotud -Added: 2009-07-29 -%% -Type: language -Subtag: dts -Description: Toro So Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dtt -Description: Toro Tegu Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dtu -Description: Tebul Ure Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dty -Description: Dotyali -Added: 2012-08-12 -Macrolanguage: ne -%% -Type: language -Subtag: dua -Description: Duala -Added: 2005-10-16 -%% -Type: language -Subtag: dub -Description: Dubli -Added: 2009-07-29 -%% -Type: language -Subtag: duc -Description: Duna -Added: 2009-07-29 -%% -Type: language -Subtag: dud -Description: Hun-Saare -Added: 2009-07-29 -%% -Type: language -Subtag: due -Description: Umiray Dumaget Agta -Added: 2009-07-29 -%% -Type: language -Subtag: duf -Description: Dumbea -Description: Drubea -Added: 2009-07-29 -%% -Type: language -Subtag: dug -Description: Duruma -Description: Chiduruma -Added: 2009-07-29 -%% -Type: language -Subtag: duh -Description: Dungra Bhil -Added: 2009-07-29 -%% -Type: language -Subtag: dui -Description: Dumun -Added: 2009-07-29 -%% -Type: language -Subtag: duj -Description: Dhuwal -Added: 2009-07-29 -%% -Type: language -Subtag: duk -Description: Uyajitaya -Added: 2009-07-29 -%% -Type: language -Subtag: dul -Description: Alabat Island Agta -Added: 2009-07-29 -%% -Type: language -Subtag: dum -Description: Middle Dutch (ca. 1050-1350) -Added: 2005-10-16 -%% -Type: language -Subtag: dun -Description: Dusun Deyah -Added: 2009-07-29 -%% -Type: language -Subtag: duo -Description: Dupaninan Agta -Added: 2009-07-29 -%% -Type: language -Subtag: dup -Description: Duano -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: duq -Description: Dusun Malang -Added: 2009-07-29 -%% -Type: language -Subtag: dur -Description: Dii -Added: 2009-07-29 -%% -Type: language -Subtag: dus -Description: Dumi -Added: 2009-07-29 -%% -Type: language -Subtag: duu -Description: Drung -Added: 2009-07-29 -%% -Type: language -Subtag: duv -Description: Duvle -Added: 2009-07-29 -%% -Type: language -Subtag: duw -Description: Dusun Witu -Added: 2009-07-29 -%% -Type: language -Subtag: dux -Description: Duungooma -Added: 2009-07-29 -%% -Type: language -Subtag: duy -Description: Dicamay Agta -Added: 2009-07-29 -%% -Type: language -Subtag: duz -Description: Duli -Added: 2009-07-29 -%% -Type: language -Subtag: dva -Description: Duau -Added: 2009-07-29 -%% -Type: language -Subtag: dwa -Description: Diri -Added: 2009-07-29 -%% -Type: language -Subtag: dwl -Description: Walo Kumbe Dogon -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see dbt, dbw -%% -Type: language -Subtag: dwr -Description: Dawro -Added: 2009-07-29 -%% -Type: language -Subtag: dws -Description: Dutton World Speedwords -Added: 2009-07-29 -%% -Type: language -Subtag: dww -Description: Dawawa -Added: 2009-07-29 -%% -Type: language -Subtag: dya -Description: Dyan -Added: 2009-07-29 -%% -Type: language -Subtag: dyb -Description: Dyaberdyaber -Added: 2009-07-29 -%% -Type: language -Subtag: dyd -Description: Dyugun -Added: 2009-07-29 -%% -Type: language -Subtag: dyg -Description: Villa Viciosa Agta -Added: 2009-07-29 -%% -Type: language -Subtag: dyi -Description: Djimini Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: dym -Description: Yanda Dom Dogon -Added: 2009-07-29 -%% -Type: language -Subtag: dyn -Description: Dyangadi -Added: 2009-07-29 -%% -Type: language -Subtag: dyo -Description: Jola-Fonyi -Added: 2009-07-29 -%% -Type: language -Subtag: dyu -Description: Dyula -Added: 2005-10-16 -%% -Type: language -Subtag: dyy -Description: Dyaabugay -Added: 2009-07-29 -%% -Type: language -Subtag: dza -Description: Tunzu -Added: 2009-07-29 -%% -Type: language -Subtag: dzd -Description: Daza -Added: 2009-07-29 -%% -Type: language -Subtag: dze -Description: Djiwarli -Added: 2013-09-10 -%% -Type: language -Subtag: dzg -Description: Dazaga -Added: 2009-07-29 -%% -Type: language -Subtag: dzl -Description: Dzalakha -Added: 2009-07-29 -%% -Type: language -Subtag: dzn -Description: Dzando -Added: 2009-07-29 -%% -Type: language -Subtag: eaa -Description: Karenggapa -Added: 2013-09-10 -%% -Type: language -Subtag: ebg -Description: Ebughu -Added: 2009-07-29 -%% -Type: language -Subtag: ebk -Description: Eastern Bontok -Added: 2010-03-11 -Macrolanguage: bnc -%% -Type: language -Subtag: ebo -Description: Teke-Ebo -Added: 2009-07-29 -%% -Type: language -Subtag: ebr -Description: Ebrié -Added: 2009-07-29 -%% -Type: language -Subtag: ebu -Description: Embu -Description: Kiembu -Added: 2009-07-29 -%% -Type: language -Subtag: ecr -Description: Eteocretan -Added: 2009-07-29 -%% -Type: language -Subtag: ecs -Description: Ecuadorian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: ecy -Description: Eteocypriot -Added: 2009-07-29 -%% -Type: language -Subtag: eee -Description: E -Added: 2009-07-29 -%% -Type: language -Subtag: efa -Description: Efai -Added: 2009-07-29 -%% -Type: language -Subtag: efe -Description: Efe -Added: 2009-07-29 -%% -Type: language -Subtag: efi -Description: Efik -Added: 2005-10-16 -%% -Type: language -Subtag: ega -Description: Ega -Added: 2009-07-29 -%% -Type: language -Subtag: egl -Description: Emilian -Added: 2009-07-29 -%% -Type: language -Subtag: ego -Description: Eggon -Added: 2009-07-29 -%% -Type: language -Subtag: egx -Description: Egyptian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: egy -Description: Egyptian (Ancient) -Added: 2005-10-16 -%% -Type: language -Subtag: ehu -Description: Ehueun -Added: 2009-07-29 -%% -Type: language -Subtag: eip -Description: Eipomek -Added: 2009-07-29 -%% -Type: language -Subtag: eit -Description: Eitiep -Added: 2009-07-29 -%% -Type: language -Subtag: eiv -Description: Askopan -Added: 2009-07-29 -%% -Type: language -Subtag: eja -Description: Ejamat -Added: 2009-07-29 -%% -Type: language -Subtag: eka -Description: Ekajuk -Added: 2005-10-16 -%% -Type: language -Subtag: ekc -Description: Eastern Karnic -Added: 2013-09-10 -%% -Type: language -Subtag: eke -Description: Ekit -Added: 2009-07-29 -%% -Type: language -Subtag: ekg -Description: Ekari -Added: 2009-07-29 -%% -Type: language -Subtag: eki -Description: Eki -Added: 2009-07-29 -%% -Type: language -Subtag: ekk -Description: Standard Estonian -Added: 2009-07-29 -Macrolanguage: et -%% -Type: language -Subtag: ekl -Description: Kol (Bangladesh) -Description: Kol -Added: 2009-07-29 -%% -Type: language -Subtag: ekm -Description: Elip -Added: 2009-07-29 -%% -Type: language -Subtag: eko -Description: Koti -Added: 2009-07-29 -%% -Type: language -Subtag: ekp -Description: Ekpeye -Added: 2009-07-29 -%% -Type: language -Subtag: ekr -Description: Yace -Added: 2009-07-29 -%% -Type: language -Subtag: eky -Description: Eastern Kayah -Added: 2009-07-29 -%% -Type: language -Subtag: ele -Description: Elepi -Added: 2009-07-29 -%% -Type: language -Subtag: elh -Description: El Hugeirat -Added: 2009-07-29 -%% -Type: language -Subtag: eli -Description: Nding -Added: 2009-07-29 -%% -Type: language -Subtag: elk -Description: Elkei -Added: 2009-07-29 -%% -Type: language -Subtag: elm -Description: Eleme -Added: 2009-07-29 -%% -Type: language -Subtag: elo -Description: El Molo -Added: 2009-07-29 -%% -Type: language -Subtag: elp -Description: Elpaputih -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see amq, plh -%% -Type: language -Subtag: elu -Description: Elu -Added: 2009-07-29 -%% -Type: language -Subtag: elx -Description: Elamite -Added: 2005-10-16 -%% -Type: language -Subtag: ema -Description: Emai-Iuleha-Ora -Added: 2009-07-29 -%% -Type: language -Subtag: emb -Description: Embaloh -Added: 2009-07-29 -%% -Type: language -Subtag: eme -Description: Emerillon -Added: 2009-07-29 -%% -Type: language -Subtag: emg -Description: Eastern Meohang -Added: 2009-07-29 -%% -Type: language -Subtag: emi -Description: Mussau-Emira -Added: 2009-07-29 -%% -Type: language -Subtag: emk -Description: Eastern Maninkakan -Added: 2009-07-29 -Macrolanguage: man -%% -Type: language -Subtag: emm -Description: Mamulique -Added: 2009-07-29 -%% -Type: language -Subtag: emn -Description: Eman -Added: 2009-07-29 -%% -Type: language -Subtag: emo -Description: Emok -Added: 2009-07-29 -%% -Type: language -Subtag: emp -Description: Northern Emberá -Added: 2009-07-29 -%% -Type: language -Subtag: ems -Description: Pacific Gulf Yupik -Added: 2009-07-29 -%% -Type: language -Subtag: emu -Description: Eastern Muria -Added: 2009-07-29 -%% -Type: language -Subtag: emw -Description: Emplawas -Added: 2009-07-29 -%% -Type: language -Subtag: emx -Description: Erromintxela -Added: 2010-03-11 -%% -Type: language -Subtag: emy -Description: Epigraphic Mayan -Added: 2009-07-29 -%% -Type: language -Subtag: ena -Description: Apali -Added: 2009-07-29 -%% -Type: language -Subtag: enb -Description: Markweeta -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: enc -Description: En -Added: 2009-07-29 -%% -Type: language -Subtag: end -Description: Ende -Added: 2009-07-29 -%% -Type: language -Subtag: enf -Description: Forest Enets -Added: 2009-07-29 -%% -Type: language -Subtag: enh -Description: Tundra Enets -Added: 2009-07-29 -%% -Type: language -Subtag: enm -Description: Middle English (1100-1500) -Added: 2005-10-16 -%% -Type: language -Subtag: enn -Description: Engenni -Added: 2009-07-29 -%% -Type: language -Subtag: eno -Description: Enggano -Added: 2009-07-29 -%% -Type: language -Subtag: enq -Description: Enga -Added: 2009-07-29 -%% -Type: language -Subtag: enr -Description: Emumu -Description: Emem -Added: 2009-07-29 -%% -Type: language -Subtag: enu -Description: Enu -Added: 2009-07-29 -%% -Type: language -Subtag: env -Description: Enwan (Edu State) -Added: 2009-07-29 -%% -Type: language -Subtag: enw -Description: Enwan (Akwa Ibom State) -Added: 2009-07-29 -%% -Type: language -Subtag: eot -Description: Beti (Côte d'Ivoire) -Added: 2009-07-29 -%% -Type: language -Subtag: epi -Description: Epie -Added: 2009-07-29 -%% -Type: language -Subtag: era -Description: Eravallan -Added: 2009-07-29 -%% -Type: language -Subtag: erg -Description: Sie -Added: 2009-07-29 -%% -Type: language -Subtag: erh -Description: Eruwa -Added: 2009-07-29 -%% -Type: language -Subtag: eri -Description: Ogea -Added: 2009-07-29 -%% -Type: language -Subtag: erk -Description: South Efate -Added: 2009-07-29 -%% -Type: language -Subtag: ero -Description: Horpa -Added: 2009-07-29 -%% -Type: language -Subtag: err -Description: Erre -Added: 2009-07-29 -%% -Type: language -Subtag: ers -Description: Ersu -Added: 2009-07-29 -%% -Type: language -Subtag: ert -Description: Eritai -Added: 2009-07-29 -%% -Type: language -Subtag: erw -Description: Erokwanas -Added: 2009-07-29 -%% -Type: language -Subtag: ese -Description: Ese Ejja -Added: 2009-07-29 -%% -Type: language -Subtag: esh -Description: Eshtehardi -Added: 2009-07-29 -%% -Type: language -Subtag: esi -Description: North Alaskan Inupiatun -Added: 2009-07-29 -Macrolanguage: ik -%% -Type: language -Subtag: esk -Description: Northwest Alaska Inupiatun -Added: 2009-07-29 -Macrolanguage: ik -%% -Type: language -Subtag: esl -Description: Egypt Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: esm -Description: Esuma -Added: 2009-07-29 -%% -Type: language -Subtag: esn -Description: Salvadoran Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: eso -Description: Estonian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: esq -Description: Esselen -Added: 2009-07-29 -%% -Type: language -Subtag: ess -Description: Central Siberian Yupik -Added: 2009-07-29 -%% -Type: language -Subtag: esu -Description: Central Yupik -Added: 2009-07-29 -%% -Type: language -Subtag: esx -Description: Eskimo-Aleut languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: etb -Description: Etebi -Added: 2009-07-29 -%% -Type: language -Subtag: etc -Description: Etchemin -Added: 2009-07-29 -%% -Type: language -Subtag: eth -Description: Ethiopian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: etn -Description: Eton (Vanuatu) -Added: 2009-07-29 -%% -Type: language -Subtag: eto -Description: Eton (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: etr -Description: Edolo -Added: 2009-07-29 -%% -Type: language -Subtag: ets -Description: Yekhee -Added: 2009-07-29 -%% -Type: language -Subtag: ett -Description: Etruscan -Added: 2009-07-29 -%% -Type: language -Subtag: etu -Description: Ejagham -Added: 2009-07-29 -%% -Type: language -Subtag: etx -Description: Eten -Added: 2009-07-29 -%% -Type: language -Subtag: etz -Description: Semimi -Added: 2009-07-29 -%% -Type: language -Subtag: euq -Description: Basque (family) -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: eve -Description: Even -Added: 2009-07-29 -%% -Type: language -Subtag: evh -Description: Uvbie -Added: 2009-07-29 -%% -Type: language -Subtag: evn -Description: Evenki -Added: 2009-07-29 -%% -Type: language -Subtag: ewo -Description: Ewondo -Added: 2005-10-16 -%% -Type: language -Subtag: ext -Description: Extremaduran -Added: 2009-07-29 -%% -Type: language -Subtag: eya -Description: Eyak -Added: 2009-07-29 -%% -Type: language -Subtag: eyo -Description: Keiyo -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: eza -Description: Ezaa -Added: 2013-09-10 -%% -Type: language -Subtag: eze -Description: Uzekwe -Added: 2009-07-29 -%% -Type: language -Subtag: faa -Description: Fasu -Added: 2009-07-29 -%% -Type: language -Subtag: fab -Description: Fa d'Ambu -Added: 2009-07-29 -%% -Type: language -Subtag: fad -Description: Wagi -Added: 2009-07-29 -%% -Type: language -Subtag: faf -Description: Fagani -Added: 2009-07-29 -%% -Type: language -Subtag: fag -Description: Finongan -Added: 2009-07-29 -%% -Type: language -Subtag: fah -Description: Baissa Fali -Added: 2009-07-29 -%% -Type: language -Subtag: fai -Description: Faiwol -Added: 2009-07-29 -%% -Type: language -Subtag: faj -Description: Faita -Added: 2009-07-29 -%% -Type: language -Subtag: fak -Description: Fang (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: fal -Description: South Fali -Added: 2009-07-29 -%% -Type: language -Subtag: fam -Description: Fam -Added: 2009-07-29 -%% -Type: language -Subtag: fan -Description: Fang (Equatorial Guinea) -Added: 2005-10-16 -%% -Type: language -Subtag: fap -Description: Palor -Added: 2009-07-29 -%% -Type: language -Subtag: far -Description: Fataleka -Added: 2009-07-29 -%% -Type: language -Subtag: fat -Description: Fanti -Added: 2005-10-16 -Macrolanguage: ak -%% -Type: language -Subtag: fau -Description: Fayu -Added: 2009-07-29 -%% -Type: language -Subtag: fax -Description: Fala -Added: 2009-07-29 -%% -Type: language -Subtag: fay -Description: Southwestern Fars -Added: 2009-07-29 -%% -Type: language -Subtag: faz -Description: Northwestern Fars -Added: 2009-07-29 -%% -Type: language -Subtag: fbl -Description: West Albay Bikol -Added: 2010-03-11 -Macrolanguage: bik -%% -Type: language -Subtag: fcs -Description: Quebec Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: fer -Description: Feroge -Added: 2009-07-29 -%% -Type: language -Subtag: ffi -Description: Foia Foia -Added: 2009-07-29 -%% -Type: language -Subtag: ffm -Description: Maasina Fulfulde -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fgr -Description: Fongoro -Added: 2009-07-29 -%% -Type: language -Subtag: fia -Description: Nobiin -Added: 2009-07-29 -%% -Type: language -Subtag: fie -Description: Fyer -Added: 2009-07-29 -%% -Type: language -Subtag: fil -Description: Filipino -Description: Pilipino -Added: 2005-10-16 -%% -Type: language -Subtag: fip -Description: Fipa -Added: 2009-07-29 -%% -Type: language -Subtag: fir -Description: Firan -Added: 2009-07-29 -%% -Type: language -Subtag: fit -Description: Tornedalen Finnish -Added: 2009-07-29 -%% -Type: language -Subtag: fiu -Description: Finno-Ugrian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: fiw -Description: Fiwaga -Added: 2009-07-29 -%% -Type: language -Subtag: fkk -Description: Kirya-Konzəl -Added: 2012-08-12 -%% -Type: language -Subtag: fkv -Description: Kven Finnish -Added: 2009-07-29 -%% -Type: language -Subtag: fla -Description: Kalispel-Pend d'Oreille -Added: 2009-07-29 -%% -Type: language -Subtag: flh -Description: Foau -Added: 2009-07-29 -%% -Type: language -Subtag: fli -Description: Fali -Added: 2009-07-29 -%% -Type: language -Subtag: fll -Description: North Fali -Added: 2009-07-29 -%% -Type: language -Subtag: fln -Description: Flinders Island -Added: 2009-07-29 -%% -Type: language -Subtag: flr -Description: Fuliiru -Added: 2009-07-29 -%% -Type: language -Subtag: fly -Description: Tsotsitaal -Added: 2009-07-29 -%% -Type: language -Subtag: fmp -Description: Fe'fe' -Added: 2009-07-29 -%% -Type: language -Subtag: fmu -Description: Far Western Muria -Added: 2009-07-29 -%% -Type: language -Subtag: fng -Description: Fanagalo -Added: 2009-07-29 -%% -Type: language -Subtag: fni -Description: Fania -Added: 2009-07-29 -%% -Type: language -Subtag: fod -Description: Foodo -Added: 2009-07-29 -%% -Type: language -Subtag: foi -Description: Foi -Added: 2009-07-29 -%% -Type: language -Subtag: fom -Description: Foma -Added: 2009-07-29 -%% -Type: language -Subtag: fon -Description: Fon -Added: 2005-10-16 -%% -Type: language -Subtag: for -Description: Fore -Added: 2009-07-29 -%% -Type: language -Subtag: fos -Description: Siraya -Added: 2009-07-29 -%% -Type: language -Subtag: fox -Description: Formosan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: fpe -Description: Fernando Po Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: fqs -Description: Fas -Added: 2009-07-29 -%% -Type: language -Subtag: frc -Description: Cajun French -Added: 2009-07-29 -%% -Type: language -Subtag: frd -Description: Fordata -Added: 2009-07-29 -%% -Type: language -Subtag: frk -Description: Frankish -Added: 2009-07-29 -%% -Type: language -Subtag: frm -Description: Middle French (ca. 1400-1600) -Added: 2005-10-16 -%% -Type: language -Subtag: fro -Description: Old French (842-ca. 1400) -Added: 2005-10-16 -%% -Type: language -Subtag: frp -Description: Arpitan -Description: Francoprovençal -Added: 2009-07-29 -%% -Type: language -Subtag: frq -Description: Forak -Added: 2009-07-29 -%% -Type: language -Subtag: frr -Description: Northern Frisian -Added: 2006-03-08 -Suppress-Script: Latn -%% -Type: language -Subtag: frs -Description: Eastern Frisian -Added: 2006-03-08 -Suppress-Script: Latn -%% -Type: language -Subtag: frt -Description: Fortsenal -Added: 2009-07-29 -%% -Type: language -Subtag: fse -Description: Finnish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: fsl -Description: French Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: fss -Description: Finland-Swedish Sign Language -Description: finlandssvenskt teckenspråk -Description: suomenruotsalainen viittomakieli -Added: 2009-07-29 -%% -Type: language -Subtag: fub -Description: Adamawa Fulfulde -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fuc -Description: Pulaar -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fud -Description: East Futuna -Added: 2009-07-29 -%% -Type: language -Subtag: fue -Description: Borgu Fulfulde -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fuf -Description: Pular -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fuh -Description: Western Niger Fulfulde -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fui -Description: Bagirmi Fulfulde -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fuj -Description: Ko -Added: 2009-07-29 -%% -Type: language -Subtag: fum -Description: Fum -Added: 2009-07-29 -%% -Type: language -Subtag: fun -Description: Fulniô -Added: 2009-07-29 -%% -Type: language -Subtag: fuq -Description: Central-Eastern Niger Fulfulde -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fur -Description: Friulian -Added: 2005-10-16 -%% -Type: language -Subtag: fut -Description: Futuna-Aniwa -Added: 2009-07-29 -%% -Type: language -Subtag: fuu -Description: Furu -Added: 2009-07-29 -%% -Type: language -Subtag: fuv -Description: Nigerian Fulfulde -Added: 2009-07-29 -Macrolanguage: ff -%% -Type: language -Subtag: fuy -Description: Fuyug -Added: 2009-07-29 -%% -Type: language -Subtag: fvr -Description: Fur -Added: 2009-07-29 -%% -Type: language -Subtag: fwa -Description: Fwâi -Added: 2009-07-29 -%% -Type: language -Subtag: fwe -Description: Fwe -Added: 2009-07-29 -%% -Type: language -Subtag: gaa -Description: Ga -Added: 2005-10-16 -%% -Type: language -Subtag: gab -Description: Gabri -Added: 2009-07-29 -%% -Type: language -Subtag: gac -Description: Mixed Great Andamanese -Added: 2010-03-11 -%% -Type: language -Subtag: gad -Description: Gaddang -Added: 2009-07-29 -%% -Type: language -Subtag: gae -Description: Guarequena -Added: 2009-07-29 -%% -Type: language -Subtag: gaf -Description: Gende -Added: 2009-07-29 -%% -Type: language -Subtag: gag -Description: Gagauz -Added: 2009-07-29 -%% -Type: language -Subtag: gah -Description: Alekano -Added: 2009-07-29 -%% -Type: language -Subtag: gai -Description: Borei -Added: 2009-07-29 -%% -Type: language -Subtag: gaj -Description: Gadsup -Added: 2009-07-29 -%% -Type: language -Subtag: gak -Description: Gamkonora -Added: 2009-07-29 -%% -Type: language -Subtag: gal -Description: Galolen -Added: 2009-07-29 -%% -Type: language -Subtag: gam -Description: Kandawo -Added: 2009-07-29 -%% -Type: language -Subtag: gan -Description: Gan Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: gao -Description: Gants -Added: 2009-07-29 -%% -Type: language -Subtag: gap -Description: Gal -Added: 2009-07-29 -%% -Type: language -Subtag: gaq -Description: Gata' -Added: 2009-07-29 -%% -Type: language -Subtag: gar -Description: Galeya -Added: 2009-07-29 -%% -Type: language -Subtag: gas -Description: Adiwasi Garasia -Added: 2009-07-29 -%% -Type: language -Subtag: gat -Description: Kenati -Added: 2009-07-29 -%% -Type: language -Subtag: gau -Description: Mudhili Gadaba -Added: 2009-07-29 -%% -Type: language -Subtag: gav -Description: Gabutamon -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: dev -%% -Type: language -Subtag: gaw -Description: Nobonob -Added: 2009-07-29 -%% -Type: language -Subtag: gax -Description: Borana-Arsi-Guji Oromo -Added: 2009-07-29 -Macrolanguage: om -%% -Type: language -Subtag: gay -Description: Gayo -Added: 2005-10-16 -%% -Type: language -Subtag: gaz -Description: West Central Oromo -Added: 2009-07-29 -Macrolanguage: om -%% -Type: language -Subtag: gba -Description: Gbaya (Central African Republic) -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: gbb -Description: Kaytetye -Added: 2009-07-29 -%% -Type: language -Subtag: gbc -Description: Garawa -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see wny, wrk -%% -Type: language -Subtag: gbd -Description: Karadjeri -Added: 2009-07-29 -%% -Type: language -Subtag: gbe -Description: Niksek -Added: 2009-07-29 -%% -Type: language -Subtag: gbf -Description: Gaikundi -Added: 2009-07-29 -%% -Type: language -Subtag: gbg -Description: Gbanziri -Added: 2009-07-29 -%% -Type: language -Subtag: gbh -Description: Defi Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: gbi -Description: Galela -Added: 2009-07-29 -%% -Type: language -Subtag: gbj -Description: Bodo Gadaba -Added: 2009-07-29 -%% -Type: language -Subtag: gbk -Description: Gaddi -Added: 2009-07-29 -%% -Type: language -Subtag: gbl -Description: Gamit -Added: 2009-07-29 -%% -Type: language -Subtag: gbm -Description: Garhwali -Added: 2009-07-29 -%% -Type: language -Subtag: gbn -Description: Mo'da -Added: 2009-07-29 -%% -Type: language -Subtag: gbo -Description: Northern Grebo -Added: 2009-07-29 -Macrolanguage: grb -%% -Type: language -Subtag: gbp -Description: Gbaya-Bossangoa -Added: 2009-07-29 -Macrolanguage: gba -%% -Type: language -Subtag: gbq -Description: Gbaya-Bozoum -Added: 2009-07-29 -Macrolanguage: gba -%% -Type: language -Subtag: gbr -Description: Gbagyi -Added: 2009-07-29 -%% -Type: language -Subtag: gbs -Description: Gbesi Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: gbu -Description: Gagadu -Added: 2009-07-29 -%% -Type: language -Subtag: gbv -Description: Gbanu -Added: 2009-07-29 -%% -Type: language -Subtag: gbw -Description: Gabi-Gabi -Added: 2013-09-10 -%% -Type: language -Subtag: gbx -Description: Eastern Xwla Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: gby -Description: Gbari -Added: 2009-07-29 -%% -Type: language -Subtag: gbz -Description: Zoroastrian Dari -Added: 2009-07-29 -%% -Type: language -Subtag: gcc -Description: Mali -Added: 2009-07-29 -%% -Type: language -Subtag: gcd -Description: Ganggalida -Added: 2009-07-29 -%% -Type: language -Subtag: gce -Description: Galice -Added: 2009-07-29 -%% -Type: language -Subtag: gcf -Description: Guadeloupean Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: gcl -Description: Grenadian Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: gcn -Description: Gaina -Added: 2009-07-29 -%% -Type: language -Subtag: gcr -Description: Guianese Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: gct -Description: Colonia Tovar German -Added: 2009-07-29 -%% -Type: language -Subtag: gda -Description: Gade Lohar -Added: 2009-07-29 -Macrolanguage: raj -%% -Type: language -Subtag: gdb -Description: Pottangi Ollar Gadaba -Added: 2009-07-29 -%% -Type: language -Subtag: gdc -Description: Gugu Badhun -Added: 2009-07-29 -%% -Type: language -Subtag: gdd -Description: Gedaged -Added: 2009-07-29 -%% -Type: language -Subtag: gde -Description: Gude -Added: 2009-07-29 -%% -Type: language -Subtag: gdf -Description: Guduf-Gava -Added: 2009-07-29 -%% -Type: language -Subtag: gdg -Description: Ga'dang -Added: 2009-07-29 -%% -Type: language -Subtag: gdh -Description: Gadjerawang -Added: 2009-07-29 -%% -Type: language -Subtag: gdi -Description: Gundi -Added: 2009-07-29 -%% -Type: language -Subtag: gdj -Description: Gurdjar -Added: 2009-07-29 -%% -Type: language -Subtag: gdk -Description: Gadang -Added: 2009-07-29 -%% -Type: language -Subtag: gdl -Description: Dirasha -Added: 2009-07-29 -%% -Type: language -Subtag: gdm -Description: Laal -Added: 2009-07-29 -%% -Type: language -Subtag: gdn -Description: Umanakaina -Added: 2009-07-29 -%% -Type: language -Subtag: gdo -Description: Ghodoberi -Added: 2009-07-29 -%% -Type: language -Subtag: gdq -Description: Mehri -Added: 2009-07-29 -%% -Type: language -Subtag: gdr -Description: Wipi -Added: 2009-07-29 -%% -Type: language -Subtag: gds -Description: Ghandruk Sign Language -Added: 2012-08-12 -%% -Type: language -Subtag: gdt -Description: Kungardutyi -Added: 2013-09-10 -%% -Type: language -Subtag: gdu -Description: Gudu -Added: 2009-07-29 -%% -Type: language -Subtag: gdx -Description: Godwari -Added: 2009-07-29 -%% -Type: language -Subtag: gea -Description: Geruma -Added: 2009-07-29 -%% -Type: language -Subtag: geb -Description: Kire -Added: 2009-07-29 -%% -Type: language -Subtag: gec -Description: Gboloo Grebo -Added: 2009-07-29 -Macrolanguage: grb -%% -Type: language -Subtag: ged -Description: Gade -Added: 2009-07-29 -%% -Type: language -Subtag: geg -Description: Gengle -Added: 2009-07-29 -%% -Type: language -Subtag: geh -Description: Hutterite German -Description: Hutterisch -Added: 2009-07-29 -%% -Type: language -Subtag: gei -Description: Gebe -Added: 2009-07-29 -%% -Type: language -Subtag: gej -Description: Gen -Added: 2009-07-29 -%% -Type: language -Subtag: gek -Description: Yiwom -Added: 2009-07-29 -%% -Type: language -Subtag: gel -Description: ut-Ma'in -Added: 2009-07-29 -%% -Type: language -Subtag: gem -Description: Germanic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: geq -Description: Geme -Added: 2009-07-29 -%% -Type: language -Subtag: ges -Description: Geser-Gorom -Added: 2009-07-29 -%% -Type: language -Subtag: gew -Description: Gera -Added: 2009-07-29 -%% -Type: language -Subtag: gex -Description: Garre -Added: 2009-07-29 -%% -Type: language -Subtag: gey -Description: Enya -Added: 2009-07-29 -%% -Type: language -Subtag: gez -Description: Geez -Added: 2005-10-16 -%% -Type: language -Subtag: gfk -Description: Patpatar -Added: 2009-07-29 -%% -Type: language -Subtag: gft -Description: Gafat -Added: 2009-07-29 -%% -Type: language -Subtag: gfx -Description: Mangetti Dune !Xung -Added: 2012-08-12 -%% -Type: language -Subtag: gga -Description: Gao -Added: 2009-07-29 -%% -Type: language -Subtag: ggb -Description: Gbii -Added: 2009-07-29 -%% -Type: language -Subtag: ggd -Description: Gugadj -Added: 2009-07-29 -%% -Type: language -Subtag: gge -Description: Guragone -Added: 2009-07-29 -%% -Type: language -Subtag: ggg -Description: Gurgula -Added: 2009-07-29 -%% -Type: language -Subtag: ggk -Description: Kungarakany -Added: 2009-07-29 -%% -Type: language -Subtag: ggl -Description: Ganglau -Added: 2009-07-29 -%% -Type: language -Subtag: ggn -Description: Eastern Gurung -Added: 2009-07-29 -%% -Type: language -Subtag: ggo -Description: Southern Gondi -Added: 2009-07-29 -Macrolanguage: gon -%% -Type: language -Subtag: ggr -Description: Aghu Tharnggalu -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see ggm, gtu, ikr -%% -Type: language -Subtag: ggt -Description: Gitua -Added: 2009-07-29 -%% -Type: language -Subtag: ggu -Description: Gagu -Description: Gban -Added: 2009-07-29 -%% -Type: language -Subtag: ggw -Description: Gogodala -Added: 2009-07-29 -%% -Type: language -Subtag: gha -Description: Ghadamès -Added: 2009-07-29 -%% -Type: language -Subtag: ghc -Description: Hiberno-Scottish Gaelic -Added: 2009-07-29 -%% -Type: language -Subtag: ghe -Description: Southern Ghale -Added: 2009-07-29 -%% -Type: language -Subtag: ghh -Description: Northern Ghale -Added: 2009-07-29 -%% -Type: language -Subtag: ghk -Description: Geko Karen -Added: 2009-07-29 -%% -Type: language -Subtag: ghl -Description: Ghulfan -Added: 2009-07-29 -%% -Type: language -Subtag: ghn -Description: Ghanongga -Added: 2009-07-29 -%% -Type: language -Subtag: gho -Description: Ghomara -Added: 2009-07-29 -%% -Type: language -Subtag: ghr -Description: Ghera -Added: 2009-07-29 -%% -Type: language -Subtag: ghs -Description: Guhu-Samane -Added: 2009-07-29 -%% -Type: language -Subtag: ght -Description: Kuke -Description: Kutang Ghale -Added: 2009-07-29 -%% -Type: language -Subtag: gia -Description: Kitja -Added: 2009-07-29 -%% -Type: language -Subtag: gib -Description: Gibanawa -Added: 2009-07-29 -%% -Type: language -Subtag: gic -Description: Gail -Added: 2009-07-29 -%% -Type: language -Subtag: gid -Description: Gidar -Added: 2009-07-29 -%% -Type: language -Subtag: gig -Description: Goaria -Added: 2009-07-29 -%% -Type: language -Subtag: gih -Description: Githabul -Added: 2013-09-10 -%% -Type: language -Subtag: gil -Description: Gilbertese -Added: 2005-10-16 -%% -Type: language -Subtag: gim -Description: Gimi (Eastern Highlands) -Added: 2009-07-29 -%% -Type: language -Subtag: gin -Description: Hinukh -Added: 2009-07-29 -%% -Type: language -Subtag: gio -Description: Gelao -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see aou, gqu -%% -Type: language -Subtag: gip -Description: Gimi (West New Britain) -Added: 2009-07-29 -%% -Type: language -Subtag: giq -Description: Green Gelao -Added: 2009-07-29 -%% -Type: language -Subtag: gir -Description: Red Gelao -Added: 2009-07-29 -%% -Type: language -Subtag: gis -Description: North Giziga -Added: 2009-07-29 -%% -Type: language -Subtag: git -Description: Gitxsan -Added: 2009-07-29 -%% -Type: language -Subtag: giu -Description: Mulao -Added: 2012-08-12 -%% -Type: language -Subtag: giw -Description: White Gelao -Added: 2009-07-29 -%% -Type: language -Subtag: gix -Description: Gilima -Added: 2009-07-29 -%% -Type: language -Subtag: giy -Description: Giyug -Added: 2009-07-29 -%% -Type: language -Subtag: giz -Description: South Giziga -Added: 2009-07-29 -%% -Type: language -Subtag: gji -Description: Geji -Added: 2009-07-29 -%% -Type: language -Subtag: gjk -Description: Kachi Koli -Added: 2009-07-29 -%% -Type: language -Subtag: gjm -Description: Gunditjmara -Added: 2013-09-10 -%% -Type: language -Subtag: gjn -Description: Gonja -Added: 2009-07-29 -%% -Type: language -Subtag: gju -Description: Gujari -Added: 2009-07-29 -Macrolanguage: raj -%% -Type: language -Subtag: gka -Description: Guya -Added: 2009-07-29 -%% -Type: language -Subtag: gke -Description: Ndai -Added: 2009-07-29 -%% -Type: language -Subtag: gkn -Description: Gokana -Added: 2009-07-29 -%% -Type: language -Subtag: gko -Description: Kok-Nar -Added: 2012-08-12 -%% -Type: language -Subtag: gkp -Description: Guinea Kpelle -Added: 2009-07-29 -Macrolanguage: kpe -%% -Type: language -Subtag: glc -Description: Bon Gula -Added: 2009-07-29 -%% -Type: language -Subtag: gld -Description: Nanai -Added: 2009-07-29 -%% -Type: language -Subtag: glh -Description: Northwest Pashayi -Added: 2009-07-29 -%% -Type: language -Subtag: gli -Description: Guliguli -Added: 2009-07-29 -%% -Type: language -Subtag: glj -Description: Gula Iro -Added: 2009-07-29 -%% -Type: language -Subtag: glk -Description: Gilaki -Added: 2009-07-29 -%% -Type: language -Subtag: gll -Description: Garlali -Added: 2013-09-10 -%% -Type: language -Subtag: glo -Description: Galambu -Added: 2009-07-29 -%% -Type: language -Subtag: glr -Description: Glaro-Twabo -Added: 2009-07-29 -%% -Type: language -Subtag: glu -Description: Gula (Chad) -Added: 2009-07-29 -%% -Type: language -Subtag: glw -Description: Glavda -Added: 2009-07-29 -%% -Type: language -Subtag: gly -Description: Gule -Added: 2009-07-29 -%% -Type: language -Subtag: gma -Description: Gambera -Added: 2009-07-29 -%% -Type: language -Subtag: gmb -Description: Gula'alaa -Added: 2009-07-29 -%% -Type: language -Subtag: gmd -Description: Mághdì -Added: 2009-07-29 -%% -Type: language -Subtag: gme -Description: East Germanic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: gmh -Description: Middle High German (ca. 1050-1500) -Added: 2005-10-16 -%% -Type: language -Subtag: gml -Description: Middle Low German -Added: 2009-07-29 -%% -Type: language -Subtag: gmm -Description: Gbaya-Mbodomo -Added: 2009-07-29 -Macrolanguage: gba -%% -Type: language -Subtag: gmn -Description: Gimnime -Added: 2009-07-29 -%% -Type: language -Subtag: gmq -Description: North Germanic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: gmu -Description: Gumalu -Added: 2009-07-29 -%% -Type: language -Subtag: gmv -Description: Gamo -Added: 2009-07-29 -%% -Type: language -Subtag: gmw -Description: West Germanic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: gmx -Description: Magoma -Added: 2009-07-29 -%% -Type: language -Subtag: gmy -Description: Mycenaean Greek -Added: 2009-07-29 -%% -Type: language -Subtag: gmz -Description: Mgbolizhia -Added: 2013-09-10 -%% -Type: language -Subtag: gna -Description: Kaansa -Added: 2009-07-29 -%% -Type: language -Subtag: gnb -Description: Gangte -Added: 2009-07-29 -%% -Type: language -Subtag: gnc -Description: Guanche -Added: 2009-07-29 -%% -Type: language -Subtag: gnd -Description: Zulgo-Gemzek -Added: 2009-07-29 -%% -Type: language -Subtag: gne -Description: Ganang -Added: 2009-07-29 -%% -Type: language -Subtag: gng -Description: Ngangam -Added: 2009-07-29 -%% -Type: language -Subtag: gnh -Description: Lere -Added: 2009-07-29 -%% -Type: language -Subtag: gni -Description: Gooniyandi -Added: 2009-07-29 -%% -Type: language -Subtag: gnk -Description: //Gana -Added: 2009-07-29 -%% -Type: language -Subtag: gnl -Description: Gangulu -Added: 2009-07-29 -%% -Type: language -Subtag: gnm -Description: Ginuman -Added: 2009-07-29 -%% -Type: language -Subtag: gnn -Description: Gumatj -Added: 2009-07-29 -%% -Type: language -Subtag: gno -Description: Northern Gondi -Added: 2009-07-29 -Macrolanguage: gon -%% -Type: language -Subtag: gnq -Description: Gana -Added: 2009-07-29 -%% -Type: language -Subtag: gnr -Description: Gureng Gureng -Added: 2009-07-29 -%% -Type: language -Subtag: gnt -Description: Guntai -Added: 2009-07-29 -%% -Type: language -Subtag: gnu -Description: Gnau -Added: 2009-07-29 -%% -Type: language -Subtag: gnw -Description: Western Bolivian Guaraní -Added: 2009-07-29 -Macrolanguage: gn -%% -Type: language -Subtag: gnz -Description: Ganzi -Added: 2009-07-29 -%% -Type: language -Subtag: goa -Description: Guro -Added: 2009-07-29 -%% -Type: language -Subtag: gob -Description: Playero -Added: 2009-07-29 -%% -Type: language -Subtag: goc -Description: Gorakor -Added: 2009-07-29 -%% -Type: language -Subtag: god -Description: Godié -Added: 2009-07-29 -%% -Type: language -Subtag: goe -Description: Gongduk -Added: 2009-07-29 -%% -Type: language -Subtag: gof -Description: Gofa -Added: 2009-07-29 -%% -Type: language -Subtag: gog -Description: Gogo -Added: 2009-07-29 -%% -Type: language -Subtag: goh -Description: Old High German (ca. 750-1050) -Added: 2005-10-16 -%% -Type: language -Subtag: goi -Description: Gobasi -Added: 2009-07-29 -%% -Type: language -Subtag: goj -Description: Gowlan -Added: 2009-07-29 -%% -Type: language -Subtag: gok -Description: Gowli -Added: 2009-07-29 -%% -Type: language -Subtag: gol -Description: Gola -Added: 2009-07-29 -%% -Type: language -Subtag: gom -Description: Goan Konkani -Added: 2009-07-29 -Macrolanguage: kok -%% -Type: language -Subtag: gon -Description: Gondi -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: goo -Description: Gone Dau -Added: 2009-07-29 -%% -Type: language -Subtag: gop -Description: Yeretuar -Added: 2009-07-29 -%% -Type: language -Subtag: goq -Description: Gorap -Added: 2009-07-29 -%% -Type: language -Subtag: gor -Description: Gorontalo -Added: 2005-10-16 -%% -Type: language -Subtag: gos -Description: Gronings -Added: 2009-07-29 -%% -Type: language -Subtag: got -Description: Gothic -Added: 2005-10-16 -%% -Type: language -Subtag: gou -Description: Gavar -Added: 2009-07-29 -%% -Type: language -Subtag: gow -Description: Gorowa -Added: 2009-07-29 -%% -Type: language -Subtag: gox -Description: Gobu -Added: 2009-07-29 -%% -Type: language -Subtag: goy -Description: Goundo -Added: 2009-07-29 -%% -Type: language -Subtag: goz -Description: Gozarkhani -Added: 2009-07-29 -%% -Type: language -Subtag: gpa -Description: Gupa-Abawa -Added: 2009-07-29 -%% -Type: language -Subtag: gpe -Description: Ghanaian Pidgin English -Added: 2012-08-12 -%% -Type: language -Subtag: gpn -Description: Taiap -Added: 2009-07-29 -%% -Type: language -Subtag: gqa -Description: Ga'anda -Added: 2009-07-29 -%% -Type: language -Subtag: gqi -Description: Guiqiong -Added: 2009-07-29 -%% -Type: language -Subtag: gqn -Description: Guana (Brazil) -Added: 2009-07-29 -%% -Type: language -Subtag: gqr -Description: Gor -Added: 2009-07-29 -%% -Type: language -Subtag: gqu -Description: Qau -Added: 2012-08-12 -%% -Type: language -Subtag: gra -Description: Rajput Garasia -Added: 2009-07-29 -%% -Type: language -Subtag: grb -Description: Grebo -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: grc -Description: Ancient Greek (to 1453) -Added: 2005-10-16 -%% -Type: language -Subtag: grd -Description: Guruntum-Mbaaru -Added: 2009-07-29 -%% -Type: language -Subtag: grg -Description: Madi -Added: 2009-07-29 -%% -Type: language -Subtag: grh -Description: Gbiri-Niragu -Added: 2009-07-29 -%% -Type: language -Subtag: gri -Description: Ghari -Added: 2009-07-29 -%% -Type: language -Subtag: grj -Description: Southern Grebo -Added: 2009-07-29 -Macrolanguage: grb -%% -Type: language -Subtag: grk -Description: Greek languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: grm -Description: Kota Marudu Talantang -Added: 2009-07-29 -%% -Type: language -Subtag: gro -Description: Groma -Added: 2009-07-29 -%% -Type: language -Subtag: grq -Description: Gorovu -Added: 2009-07-29 -%% -Type: language -Subtag: grr -Description: Taznatit -Added: 2009-07-29 -%% -Type: language -Subtag: grs -Description: Gresi -Added: 2009-07-29 -%% -Type: language -Subtag: grt -Description: Garo -Added: 2009-07-29 -%% -Type: language -Subtag: gru -Description: Kistane -Added: 2009-07-29 -%% -Type: language -Subtag: grv -Description: Central Grebo -Added: 2009-07-29 -Macrolanguage: grb -%% -Type: language -Subtag: grw -Description: Gweda -Added: 2009-07-29 -%% -Type: language -Subtag: grx -Description: Guriaso -Added: 2009-07-29 -%% -Type: language -Subtag: gry -Description: Barclayville Grebo -Added: 2009-07-29 -Macrolanguage: grb -%% -Type: language -Subtag: grz -Description: Guramalum -Added: 2009-07-29 -%% -Type: language -Subtag: gse -Description: Ghanaian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: gsg -Description: German Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: gsl -Description: Gusilay -Added: 2009-07-29 -%% -Type: language -Subtag: gsm -Description: Guatemalan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: gsn -Description: Gusan -Added: 2009-07-29 -%% -Type: language -Subtag: gso -Description: Southwest Gbaya -Added: 2009-07-29 -Macrolanguage: gba -%% -Type: language -Subtag: gsp -Description: Wasembo -Added: 2009-07-29 -%% -Type: language -Subtag: gss -Description: Greek Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: gsw -Description: Swiss German -Description: Alemannic -Description: Alsatian -Added: 2006-03-08 -Suppress-Script: Latn -%% -Type: language -Subtag: gta -Description: Guató -Added: 2009-07-29 -%% -Type: language -Subtag: gti -Description: Gbati-ri -Added: 2009-07-29 -%% -Type: language -Subtag: gtu -Description: Aghu-Tharnggala -Added: 2013-09-10 -%% -Type: language -Subtag: gua -Description: Shiki -Added: 2009-07-29 -%% -Type: language -Subtag: gub -Description: Guajajára -Added: 2009-07-29 -%% -Type: language -Subtag: guc -Description: Wayuu -Added: 2009-07-29 -%% -Type: language -Subtag: gud -Description: Yocoboué Dida -Added: 2009-07-29 -%% -Type: language -Subtag: gue -Description: Gurinji -Added: 2009-07-29 -%% -Type: language -Subtag: guf -Description: Gupapuyngu -Added: 2009-07-29 -%% -Type: language -Subtag: gug -Description: Paraguayan Guaraní -Added: 2009-07-29 -Macrolanguage: gn -%% -Type: language -Subtag: guh -Description: Guahibo -Added: 2009-07-29 -%% -Type: language -Subtag: gui -Description: Eastern Bolivian Guaraní -Added: 2009-07-29 -Macrolanguage: gn -%% -Type: language -Subtag: guk -Description: Gumuz -Added: 2009-07-29 -%% -Type: language -Subtag: gul -Description: Sea Island Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: gum -Description: Guambiano -Added: 2009-07-29 -%% -Type: language -Subtag: gun -Description: Mbyá Guaraní -Added: 2009-07-29 -Macrolanguage: gn -%% -Type: language -Subtag: guo -Description: Guayabero -Added: 2009-07-29 -%% -Type: language -Subtag: gup -Description: Gunwinggu -Added: 2009-07-29 -%% -Type: language -Subtag: guq -Description: Aché -Added: 2009-07-29 -%% -Type: language -Subtag: gur -Description: Farefare -Added: 2009-07-29 -%% -Type: language -Subtag: gus -Description: Guinean Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: gut -Description: Maléku Jaíka -Added: 2009-07-29 -%% -Type: language -Subtag: guu -Description: Yanomamö -Added: 2009-07-29 -%% -Type: language -Subtag: guv -Description: Gey -Added: 2009-07-29 -%% -Type: language -Subtag: guw -Description: Gun -Added: 2009-07-29 -%% -Type: language -Subtag: gux -Description: Gourmanchéma -Added: 2009-07-29 -%% -Type: language -Subtag: guz -Description: Gusii -Description: Ekegusii -Added: 2009-07-29 -%% -Type: language -Subtag: gva -Description: Guana (Paraguay) -Added: 2009-07-29 -%% -Type: language -Subtag: gvc -Description: Guanano -Added: 2009-07-29 -%% -Type: language -Subtag: gve -Description: Duwet -Added: 2009-07-29 -%% -Type: language -Subtag: gvf -Description: Golin -Added: 2009-07-29 -%% -Type: language -Subtag: gvj -Description: Guajá -Added: 2009-07-29 -%% -Type: language -Subtag: gvl -Description: Gulay -Added: 2009-07-29 -%% -Type: language -Subtag: gvm -Description: Gurmana -Added: 2009-07-29 -%% -Type: language -Subtag: gvn -Description: Kuku-Yalanji -Added: 2009-07-29 -%% -Type: language -Subtag: gvo -Description: Gavião Do Jiparaná -Added: 2009-07-29 -%% -Type: language -Subtag: gvp -Description: Pará Gavião -Added: 2009-07-29 -%% -Type: language -Subtag: gvr -Description: Western Gurung -Added: 2009-07-29 -%% -Type: language -Subtag: gvs -Description: Gumawana -Added: 2009-07-29 -%% -Type: language -Subtag: gvy -Description: Guyani -Added: 2009-07-29 -%% -Type: language -Subtag: gwa -Description: Mbato -Added: 2009-07-29 -%% -Type: language -Subtag: gwb -Description: Gwa -Added: 2009-07-29 -%% -Type: language -Subtag: gwc -Description: Kalami -Added: 2009-07-29 -%% -Type: language -Subtag: gwd -Description: Gawwada -Added: 2009-07-29 -%% -Type: language -Subtag: gwe -Description: Gweno -Added: 2009-07-29 -%% -Type: language -Subtag: gwf -Description: Gowro -Added: 2009-07-29 -%% -Type: language -Subtag: gwg -Description: Moo -Added: 2009-07-29 -%% -Type: language -Subtag: gwi -Description: Gwichʼin -Added: 2005-10-16 -%% -Type: language -Subtag: gwj -Description: /Gwi -Added: 2009-07-29 -%% -Type: language -Subtag: gwm -Description: Awngthim -Added: 2012-08-12 -%% -Type: language -Subtag: gwn -Description: Gwandara -Added: 2009-07-29 -%% -Type: language -Subtag: gwr -Description: Gwere -Added: 2009-07-29 -%% -Type: language -Subtag: gwt -Description: Gawar-Bati -Added: 2009-07-29 -%% -Type: language -Subtag: gwu -Description: Guwamu -Added: 2009-07-29 -%% -Type: language -Subtag: gww -Description: Kwini -Added: 2009-07-29 -%% -Type: language -Subtag: gwx -Description: Gua -Added: 2009-07-29 -%% -Type: language -Subtag: gxx -Description: Wè Southern -Added: 2009-07-29 -%% -Type: language -Subtag: gya -Description: Northwest Gbaya -Added: 2009-07-29 -Macrolanguage: gba -%% -Type: language -Subtag: gyb -Description: Garus -Added: 2009-07-29 -%% -Type: language -Subtag: gyd -Description: Kayardild -Added: 2009-07-29 -%% -Type: language -Subtag: gye -Description: Gyem -Added: 2009-07-29 -%% -Type: language -Subtag: gyf -Description: Gungabula -Added: 2009-07-29 -%% -Type: language -Subtag: gyg -Description: Gbayi -Added: 2009-07-29 -%% -Type: language -Subtag: gyi -Description: Gyele -Added: 2009-07-29 -%% -Type: language -Subtag: gyl -Description: Gayil -Added: 2009-07-29 -%% -Type: language -Subtag: gym -Description: Ngäbere -Added: 2009-07-29 -%% -Type: language -Subtag: gyn -Description: Guyanese Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: gyr -Description: Guarayu -Added: 2009-07-29 -%% -Type: language -Subtag: gyy -Description: Gunya -Added: 2009-07-29 -%% -Type: language -Subtag: gza -Description: Ganza -Added: 2009-07-29 -%% -Type: language -Subtag: gzi -Description: Gazi -Added: 2009-07-29 -%% -Type: language -Subtag: gzn -Description: Gane -Added: 2009-07-29 -%% -Type: language -Subtag: haa -Description: Han -Added: 2009-07-29 -%% -Type: language -Subtag: hab -Description: Hanoi Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: hac -Description: Gurani -Added: 2009-07-29 -%% -Type: language -Subtag: had -Description: Hatam -Added: 2009-07-29 -%% -Type: language -Subtag: hae -Description: Eastern Oromo -Added: 2009-07-29 -Macrolanguage: om -%% -Type: language -Subtag: haf -Description: Haiphong Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: hag -Description: Hanga -Added: 2009-07-29 -%% -Type: language -Subtag: hah -Description: Hahon -Added: 2009-07-29 -%% -Type: language -Subtag: hai -Description: Haida -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: haj -Description: Hajong -Added: 2009-07-29 -%% -Type: language -Subtag: hak -Description: Hakka Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: hal -Description: Halang -Added: 2009-07-29 -%% -Type: language -Subtag: ham -Description: Hewa -Added: 2009-07-29 -%% -Type: language -Subtag: han -Description: Hangaza -Added: 2009-07-29 -%% -Type: language -Subtag: hao -Description: Hakö -Added: 2009-07-29 -%% -Type: language -Subtag: hap -Description: Hupla -Added: 2009-07-29 -%% -Type: language -Subtag: haq -Description: Ha -Added: 2009-07-29 -%% -Type: language -Subtag: har -Description: Harari -Added: 2009-07-29 -%% -Type: language -Subtag: has -Description: Haisla -Added: 2009-07-29 -%% -Type: language -Subtag: hav -Description: Havu -Added: 2009-07-29 -%% -Type: language -Subtag: haw -Description: Hawaiian -Added: 2005-10-16 -%% -Type: language -Subtag: hax -Description: Southern Haida -Added: 2009-07-29 -Macrolanguage: hai -%% -Type: language -Subtag: hay -Description: Haya -Added: 2009-07-29 -%% -Type: language -Subtag: haz -Description: Hazaragi -Added: 2009-07-29 -%% -Type: language -Subtag: hba -Description: Hamba -Added: 2009-07-29 -%% -Type: language -Subtag: hbb -Description: Huba -Added: 2009-07-29 -%% -Type: language -Subtag: hbn -Description: Heiban -Added: 2009-07-29 -%% -Type: language -Subtag: hbo -Description: Ancient Hebrew -Added: 2009-07-29 -%% -Type: language -Subtag: hbu -Description: Habu -Added: 2009-07-29 -%% -Type: language -Subtag: hca -Description: Andaman Creole Hindi -Added: 2009-07-29 -%% -Type: language -Subtag: hch -Description: Huichol -Added: 2009-07-29 -%% -Type: language -Subtag: hdn -Description: Northern Haida -Added: 2009-07-29 -Macrolanguage: hai -%% -Type: language -Subtag: hds -Description: Honduras Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: hdy -Description: Hadiyya -Added: 2009-07-29 -%% -Type: language -Subtag: hea -Description: Northern Qiandong Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hed -Description: Herdé -Added: 2009-07-29 -%% -Type: language -Subtag: heg -Description: Helong -Added: 2009-07-29 -%% -Type: language -Subtag: heh -Description: Hehe -Added: 2009-07-29 -%% -Type: language -Subtag: hei -Description: Heiltsuk -Added: 2009-07-29 -%% -Type: language -Subtag: hem -Description: Hemba -Added: 2009-07-29 -%% -Type: language -Subtag: hgm -Description: Hai//om -Added: 2009-07-29 -%% -Type: language -Subtag: hgw -Description: Haigwai -Added: 2009-07-29 -%% -Type: language -Subtag: hhi -Description: Hoia Hoia -Added: 2009-07-29 -%% -Type: language -Subtag: hhr -Description: Kerak -Added: 2009-07-29 -%% -Type: language -Subtag: hhy -Description: Hoyahoya -Added: 2009-07-29 -%% -Type: language -Subtag: hia -Description: Lamang -Added: 2009-07-29 -%% -Type: language -Subtag: hib -Description: Hibito -Added: 2009-07-29 -%% -Type: language -Subtag: hid -Description: Hidatsa -Added: 2009-07-29 -%% -Type: language -Subtag: hif -Description: Fiji Hindi -Added: 2009-07-29 -%% -Type: language -Subtag: hig -Description: Kamwe -Added: 2009-07-29 -%% -Type: language -Subtag: hih -Description: Pamosu -Added: 2009-07-29 -%% -Type: language -Subtag: hii -Description: Hinduri -Added: 2009-07-29 -%% -Type: language -Subtag: hij -Description: Hijuk -Added: 2009-07-29 -%% -Type: language -Subtag: hik -Description: Seit-Kaitetu -Added: 2009-07-29 -%% -Type: language -Subtag: hil -Description: Hiligaynon -Added: 2005-10-16 -%% -Type: language -Subtag: him -Description: Himachali languages -Description: Western Pahari languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: hio -Description: Tsoa -Added: 2009-07-29 -%% -Type: language -Subtag: hir -Description: Himarimã -Added: 2009-07-29 -%% -Type: language -Subtag: hit -Description: Hittite -Added: 2005-10-16 -%% -Type: language -Subtag: hiw -Description: Hiw -Added: 2009-07-29 -%% -Type: language -Subtag: hix -Description: Hixkaryána -Added: 2009-07-29 -%% -Type: language -Subtag: hji -Description: Haji -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: hka -Description: Kahe -Added: 2009-07-29 -%% -Type: language -Subtag: hke -Description: Hunde -Added: 2009-07-29 -%% -Type: language -Subtag: hkk -Description: Hunjara-Kaina Ke -Added: 2009-07-29 -%% -Type: language -Subtag: hks -Description: Hong Kong Sign Language -Description: Heung Kong Sau Yue -Added: 2009-07-29 -%% -Type: language -Subtag: hla -Description: Halia -Added: 2009-07-29 -%% -Type: language -Subtag: hlb -Description: Halbi -Added: 2009-07-29 -%% -Type: language -Subtag: hld -Description: Halang Doan -Added: 2009-07-29 -%% -Type: language -Subtag: hle -Description: Hlersu -Added: 2009-07-29 -%% -Type: language -Subtag: hlt -Description: Matu Chin -Added: 2009-07-29 -%% -Type: language -Subtag: hlu -Description: Hieroglyphic Luwian -Added: 2009-07-29 -%% -Type: language -Subtag: hma -Description: Southern Mashan Hmong -Description: Southern Mashan Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmb -Description: Humburi Senni Songhay -Added: 2009-07-29 -%% -Type: language -Subtag: hmc -Description: Central Huishui Hmong -Description: Central Huishui Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmd -Description: Large Flowery Miao -Description: A-hmaos -Description: Da-Hua Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hme -Description: Eastern Huishui Hmong -Description: Eastern Huishui Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmf -Description: Hmong Don -Added: 2009-07-29 -%% -Type: language -Subtag: hmg -Description: Southwestern Guiyang Hmong -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmh -Description: Southwestern Huishui Hmong -Description: Southwestern Huishui Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmi -Description: Northern Huishui Hmong -Description: Northern Huishui Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmj -Description: Ge -Description: Gejia -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmk -Description: Maek -Added: 2009-07-29 -%% -Type: language -Subtag: hml -Description: Luopohe Hmong -Description: Luopohe Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmm -Description: Central Mashan Hmong -Description: Central Mashan Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmn -Description: Hmong -Description: Mong -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: hmp -Description: Northern Mashan Hmong -Description: Northern Mashan Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmq -Description: Eastern Qiandong Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmr -Description: Hmar -Added: 2009-07-29 -%% -Type: language -Subtag: hms -Description: Southern Qiandong Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmt -Description: Hamtai -Added: 2009-07-29 -%% -Type: language -Subtag: hmu -Description: Hamap -Added: 2009-07-29 -%% -Type: language -Subtag: hmv -Description: Hmong Dô -Added: 2009-07-29 -%% -Type: language -Subtag: hmw -Description: Western Mashan Hmong -Description: Western Mashan Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmx -Description: Hmong-Mien languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: hmy -Description: Southern Guiyang Hmong -Description: Southern Guiyang Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hmz -Description: Hmong Shua -Description: Sinicized Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hna -Description: Mina (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: hnd -Description: Southern Hindko -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: hne -Description: Chhattisgarhi -Added: 2009-07-29 -%% -Type: language -Subtag: hnh -Description: //Ani -Added: 2009-07-29 -%% -Type: language -Subtag: hni -Description: Hani -Added: 2009-07-29 -%% -Type: language -Subtag: hnj -Description: Hmong Njua -Description: Mong Leng -Description: Mong Njua -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hnn -Description: Hanunoo -Added: 2009-07-29 -%% -Type: language -Subtag: hno -Description: Northern Hindko -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: hns -Description: Caribbean Hindustani -Added: 2009-07-29 -%% -Type: language -Subtag: hnu -Description: Hung -Added: 2009-07-29 -%% -Type: language -Subtag: hoa -Description: Hoava -Added: 2009-07-29 -%% -Type: language -Subtag: hob -Description: Mari (Madang Province) -Added: 2009-07-29 -%% -Type: language -Subtag: hoc -Description: Ho -Added: 2009-07-29 -%% -Type: language -Subtag: hod -Description: Holma -Added: 2009-07-29 -%% -Type: language -Subtag: hoe -Description: Horom -Added: 2009-07-29 -%% -Type: language -Subtag: hoh -Description: Hobyót -Added: 2009-07-29 -%% -Type: language -Subtag: hoi -Description: Holikachuk -Added: 2009-07-29 -%% -Type: language -Subtag: hoj -Description: Hadothi -Description: Haroti -Added: 2009-07-29 -Macrolanguage: raj -%% -Type: language -Subtag: hok -Description: Hokan languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: hol -Description: Holu -Added: 2009-07-29 -%% -Type: language -Subtag: hom -Description: Homa -Added: 2009-07-29 -%% -Type: language -Subtag: hoo -Description: Holoholo -Added: 2009-07-29 -%% -Type: language -Subtag: hop -Description: Hopi -Added: 2009-07-29 -%% -Type: language -Subtag: hor -Description: Horo -Added: 2009-07-29 -%% -Type: language -Subtag: hos -Description: Ho Chi Minh City Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: hot -Description: Hote -Description: Malê -Added: 2009-07-29 -%% -Type: language -Subtag: hov -Description: Hovongan -Added: 2009-07-29 -%% -Type: language -Subtag: how -Description: Honi -Added: 2009-07-29 -%% -Type: language -Subtag: hoy -Description: Holiya -Added: 2009-07-29 -%% -Type: language -Subtag: hoz -Description: Hozo -Added: 2009-07-29 -%% -Type: language -Subtag: hpo -Description: Hpon -Added: 2009-07-29 -%% -Type: language -Subtag: hps -Description: Hawai'i Pidgin Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: hra -Description: Hrangkhol -Added: 2009-07-29 -%% -Type: language -Subtag: hrc -Description: Niwer Mil -Added: 2013-09-10 -%% -Type: language -Subtag: hre -Description: Hre -Added: 2009-07-29 -%% -Type: language -Subtag: hrk -Description: Haruku -Added: 2009-07-29 -%% -Type: language -Subtag: hrm -Description: Horned Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: hro -Description: Haroi -Added: 2009-07-29 -%% -Type: language -Subtag: hrp -Description: Nhirrpi -Added: 2013-09-10 -%% -Type: language -Subtag: hrr -Description: Horuru -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: jal -%% -Type: language -Subtag: hrt -Description: Hértevin -Added: 2009-07-29 -%% -Type: language -Subtag: hru -Description: Hruso -Added: 2009-07-29 -%% -Type: language -Subtag: hrw -Description: Warwar Feni -Added: 2013-09-10 -%% -Type: language -Subtag: hrx -Description: Hunsrik -Added: 2009-07-29 -%% -Type: language -Subtag: hrz -Description: Harzani -Added: 2009-07-29 -%% -Type: language -Subtag: hsb -Description: Upper Sorbian -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: hsh -Description: Hungarian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: hsl -Description: Hausa Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: hsn -Description: Xiang Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: hss -Description: Harsusi -Added: 2009-07-29 -%% -Type: language -Subtag: hti -Description: Hoti -Added: 2009-07-29 -%% -Type: language -Subtag: hto -Description: Minica Huitoto -Added: 2009-07-29 -%% -Type: language -Subtag: hts -Description: Hadza -Added: 2009-07-29 -%% -Type: language -Subtag: htu -Description: Hitu -Added: 2009-07-29 -%% -Type: language -Subtag: htx -Description: Middle Hittite -Added: 2009-07-29 -%% -Type: language -Subtag: hub -Description: Huambisa -Added: 2009-07-29 -%% -Type: language -Subtag: huc -Description: =/Hua -Added: 2009-07-29 -%% -Type: language -Subtag: hud -Description: Huaulu -Added: 2009-07-29 -%% -Type: language -Subtag: hue -Description: San Francisco Del Mar Huave -Added: 2009-07-29 -%% -Type: language -Subtag: huf -Description: Humene -Added: 2009-07-29 -%% -Type: language -Subtag: hug -Description: Huachipaeri -Added: 2009-07-29 -%% -Type: language -Subtag: huh -Description: Huilliche -Added: 2009-07-29 -%% -Type: language -Subtag: hui -Description: Huli -Added: 2009-07-29 -%% -Type: language -Subtag: huj -Description: Northern Guiyang Hmong -Description: Northern Guiyang Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: huk -Description: Hulung -Added: 2009-07-29 -%% -Type: language -Subtag: hul -Description: Hula -Added: 2009-07-29 -%% -Type: language -Subtag: hum -Description: Hungana -Added: 2009-07-29 -%% -Type: language -Subtag: huo -Description: Hu -Added: 2009-07-29 -%% -Type: language -Subtag: hup -Description: Hupa -Added: 2005-10-16 -%% -Type: language -Subtag: huq -Description: Tsat -Added: 2009-07-29 -%% -Type: language -Subtag: hur -Description: Halkomelem -Added: 2009-07-29 -%% -Type: language -Subtag: hus -Description: Huastec -Added: 2009-07-29 -%% -Type: language -Subtag: hut -Description: Humla -Added: 2009-07-29 -%% -Type: language -Subtag: huu -Description: Murui Huitoto -Added: 2009-07-29 -%% -Type: language -Subtag: huv -Description: San Mateo Del Mar Huave -Added: 2009-07-29 -%% -Type: language -Subtag: huw -Description: Hukumina -Added: 2009-07-29 -%% -Type: language -Subtag: hux -Description: Nüpode Huitoto -Added: 2009-07-29 -%% -Type: language -Subtag: huy -Description: Hulaulá -Added: 2009-07-29 -%% -Type: language -Subtag: huz -Description: Hunzib -Added: 2009-07-29 -%% -Type: language -Subtag: hvc -Description: Haitian Vodoun Culture Language -Added: 2009-07-29 -%% -Type: language -Subtag: hve -Description: San Dionisio Del Mar Huave -Added: 2009-07-29 -%% -Type: language -Subtag: hvk -Description: Haveke -Added: 2009-07-29 -%% -Type: language -Subtag: hvn -Description: Sabu -Added: 2009-07-29 -%% -Type: language -Subtag: hvv -Description: Santa María Del Mar Huave -Added: 2009-07-29 -%% -Type: language -Subtag: hwa -Description: Wané -Added: 2009-07-29 -%% -Type: language -Subtag: hwc -Description: Hawai'i Creole English -Description: Hawai'i Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: hwo -Description: Hwana -Added: 2009-07-29 -%% -Type: language -Subtag: hya -Description: Hya -Added: 2009-07-29 -%% -Type: language -Subtag: hyx -Description: Armenian (family) -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: iai -Description: Iaai -Added: 2009-07-29 -%% -Type: language -Subtag: ian -Description: Iatmul -Added: 2009-07-29 -%% -Type: language -Subtag: iap -Description: Iapama -Added: 2009-07-29 -%% -Type: language -Subtag: iar -Description: Purari -Added: 2009-07-29 -%% -Type: language -Subtag: iba -Description: Iban -Added: 2005-10-16 -%% -Type: language -Subtag: ibb -Description: Ibibio -Added: 2009-07-29 -%% -Type: language -Subtag: ibd -Description: Iwaidja -Added: 2009-07-29 -%% -Type: language -Subtag: ibe -Description: Akpes -Added: 2009-07-29 -%% -Type: language -Subtag: ibg -Description: Ibanag -Added: 2009-07-29 -%% -Type: language -Subtag: ibi -Description: Ibilo -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: opa -%% -Type: language -Subtag: ibl -Description: Ibaloi -Added: 2009-07-29 -%% -Type: language -Subtag: ibm -Description: Agoi -Added: 2009-07-29 -%% -Type: language -Subtag: ibn -Description: Ibino -Added: 2009-07-29 -%% -Type: language -Subtag: ibr -Description: Ibuoro -Added: 2009-07-29 -%% -Type: language -Subtag: ibu -Description: Ibu -Added: 2009-07-29 -%% -Type: language -Subtag: iby -Description: Ibani -Added: 2009-07-29 -%% -Type: language -Subtag: ica -Description: Ede Ica -Added: 2009-07-29 -%% -Type: language -Subtag: ich -Description: Etkywan -Added: 2009-07-29 -%% -Type: language -Subtag: icl -Description: Icelandic Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: icr -Description: Islander Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: ida -Description: Idakho-Isukha-Tiriki -Description: Luidakho-Luisukha-Lutirichi -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: idb -Description: Indo-Portuguese -Added: 2009-07-29 -%% -Type: language -Subtag: idc -Description: Idon -Description: Ajiya -Added: 2009-07-29 -%% -Type: language -Subtag: idd -Description: Ede Idaca -Added: 2009-07-29 -%% -Type: language -Subtag: ide -Description: Idere -Added: 2009-07-29 -%% -Type: language -Subtag: idi -Description: Idi -Added: 2009-07-29 -%% -Type: language -Subtag: idr -Description: Indri -Added: 2009-07-29 -%% -Type: language -Subtag: ids -Description: Idesa -Added: 2009-07-29 -%% -Type: language -Subtag: idt -Description: Idaté -Added: 2009-07-29 -%% -Type: language -Subtag: idu -Description: Idoma -Added: 2009-07-29 -%% -Type: language -Subtag: ifa -Description: Amganad Ifugao -Added: 2009-07-29 -%% -Type: language -Subtag: ifb -Description: Batad Ifugao -Description: Ayangan Ifugao -Added: 2009-07-29 -%% -Type: language -Subtag: ife -Description: Ifè -Added: 2009-07-29 -%% -Type: language -Subtag: iff -Description: Ifo -Added: 2009-07-29 -%% -Type: language -Subtag: ifk -Description: Tuwali Ifugao -Added: 2009-07-29 -%% -Type: language -Subtag: ifm -Description: Teke-Fuumu -Added: 2009-07-29 -%% -Type: language -Subtag: ifu -Description: Mayoyao Ifugao -Added: 2009-07-29 -%% -Type: language -Subtag: ify -Description: Keley-I Kallahan -Added: 2009-07-29 -%% -Type: language -Subtag: igb -Description: Ebira -Added: 2009-07-29 -%% -Type: language -Subtag: ige -Description: Igede -Added: 2009-07-29 -%% -Type: language -Subtag: igg -Description: Igana -Added: 2009-07-29 -%% -Type: language -Subtag: igl -Description: Igala -Added: 2009-07-29 -%% -Type: language -Subtag: igm -Description: Kanggape -Added: 2009-07-29 -%% -Type: language -Subtag: ign -Description: Ignaciano -Added: 2009-07-29 -%% -Type: language -Subtag: igo -Description: Isebe -Added: 2009-07-29 -%% -Type: language -Subtag: igs -Description: Interglossa -Added: 2009-07-29 -%% -Type: language -Subtag: igw -Description: Igwe -Added: 2009-07-29 -%% -Type: language -Subtag: ihb -Description: Iha Based Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: ihi -Description: Ihievbe -Added: 2009-07-29 -%% -Type: language -Subtag: ihp -Description: Iha -Added: 2009-07-29 -%% -Type: language -Subtag: ihw -Description: Bidhawal -Added: 2012-08-12 -%% -Type: language -Subtag: iin -Description: Thiin -Added: 2013-09-10 -%% -Type: language -Subtag: iir -Description: Indo-Iranian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: ijc -Description: Izon -Added: 2009-07-29 -%% -Type: language -Subtag: ije -Description: Biseni -Added: 2009-07-29 -%% -Type: language -Subtag: ijj -Description: Ede Ije -Added: 2009-07-29 -%% -Type: language -Subtag: ijn -Description: Kalabari -Added: 2009-07-29 -%% -Type: language -Subtag: ijo -Description: Ijo languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: ijs -Description: Southeast Ijo -Added: 2009-07-29 -%% -Type: language -Subtag: ike -Description: Eastern Canadian Inuktitut -Added: 2009-07-29 -Macrolanguage: iu -%% -Type: language -Subtag: iki -Description: Iko -Added: 2009-07-29 -%% -Type: language -Subtag: ikk -Description: Ika -Added: 2009-07-29 -%% -Type: language -Subtag: ikl -Description: Ikulu -Added: 2009-07-29 -%% -Type: language -Subtag: iko -Description: Olulumo-Ikom -Added: 2009-07-29 -%% -Type: language -Subtag: ikp -Description: Ikpeshi -Added: 2009-07-29 -%% -Type: language -Subtag: ikr -Description: Ikaranggal -Added: 2013-09-10 -%% -Type: language -Subtag: ikt -Description: Inuinnaqtun -Description: Western Canadian Inuktitut -Added: 2009-07-29 -Macrolanguage: iu -%% -Type: language -Subtag: ikv -Description: Iku-Gora-Ankwa -Added: 2009-07-29 -%% -Type: language -Subtag: ikw -Description: Ikwere -Added: 2009-07-29 -%% -Type: language -Subtag: ikx -Description: Ik -Added: 2009-07-29 -%% -Type: language -Subtag: ikz -Description: Ikizu -Added: 2009-07-29 -%% -Type: language -Subtag: ila -Description: Ile Ape -Added: 2009-07-29 -%% -Type: language -Subtag: ilb -Description: Ila -Added: 2009-07-29 -%% -Type: language -Subtag: ilg -Description: Garig-Ilgar -Added: 2009-07-29 -%% -Type: language -Subtag: ili -Description: Ili Turki -Added: 2009-07-29 -%% -Type: language -Subtag: ilk -Description: Ilongot -Added: 2009-07-29 -%% -Type: language -Subtag: ill -Description: Iranun -Added: 2009-07-29 -%% -Type: language -Subtag: ilo -Description: Iloko -Added: 2005-10-16 -%% -Type: language -Subtag: ils -Description: International Sign -Added: 2009-07-29 -%% -Type: language -Subtag: ilu -Description: Ili'uun -Added: 2009-07-29 -%% -Type: language -Subtag: ilv -Description: Ilue -Added: 2009-07-29 -%% -Type: language -Subtag: ilw -Description: Talur -Added: 2009-07-29 -Deprecated: 2013-09-10 -Preferred-Value: gal -%% -Type: language -Subtag: ima -Description: Mala Malasar -Added: 2009-07-29 -%% -Type: language -Subtag: ime -Description: Imeraguen -Added: 2009-07-29 -%% -Type: language -Subtag: imi -Description: Anamgura -Added: 2009-07-29 -%% -Type: language -Subtag: iml -Description: Miluk -Added: 2009-07-29 -%% -Type: language -Subtag: imn -Description: Imonda -Added: 2009-07-29 -%% -Type: language -Subtag: imo -Description: Imbongu -Added: 2009-07-29 -%% -Type: language -Subtag: imr -Description: Imroing -Added: 2009-07-29 -%% -Type: language -Subtag: ims -Description: Marsian -Added: 2009-07-29 -%% -Type: language -Subtag: imy -Description: Milyan -Added: 2009-07-29 -%% -Type: language -Subtag: inb -Description: Inga -Added: 2009-07-29 -%% -Type: language -Subtag: inc -Description: Indic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: ine -Description: Indo-European languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: ing -Description: Degexit'an -Added: 2009-07-29 -%% -Type: language -Subtag: inh -Description: Ingush -Added: 2005-10-16 -%% -Type: language -Subtag: inj -Description: Jungle Inga -Added: 2009-07-29 -%% -Type: language -Subtag: inl -Description: Indonesian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: inm -Description: Minaean -Added: 2009-07-29 -%% -Type: language -Subtag: inn -Description: Isinai -Added: 2009-07-29 -%% -Type: language -Subtag: ino -Description: Inoke-Yate -Added: 2009-07-29 -%% -Type: language -Subtag: inp -Description: Iñapari -Added: 2009-07-29 -%% -Type: language -Subtag: ins -Description: Indian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: int -Description: Intha -Added: 2009-07-29 -%% -Type: language -Subtag: inz -Description: Ineseño -Added: 2009-07-29 -%% -Type: language -Subtag: ior -Description: Inor -Added: 2009-07-29 -%% -Type: language -Subtag: iou -Description: Tuma-Irumu -Added: 2009-07-29 -%% -Type: language -Subtag: iow -Description: Iowa-Oto -Added: 2009-07-29 -%% -Type: language -Subtag: ipi -Description: Ipili -Added: 2009-07-29 -%% -Type: language -Subtag: ipo -Description: Ipiko -Added: 2009-07-29 -%% -Type: language -Subtag: iqu -Description: Iquito -Added: 2009-07-29 -%% -Type: language -Subtag: iqw -Description: Ikwo -Added: 2013-09-10 -%% -Type: language -Subtag: ira -Description: Iranian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: ire -Description: Iresim -Added: 2009-07-29 -%% -Type: language -Subtag: irh -Description: Irarutu -Added: 2009-07-29 -%% -Type: language -Subtag: iri -Description: Irigwe -Added: 2009-07-29 -%% -Type: language -Subtag: irk -Description: Iraqw -Added: 2009-07-29 -%% -Type: language -Subtag: irn -Description: Irántxe -Added: 2009-07-29 -%% -Type: language -Subtag: iro -Description: Iroquoian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: irr -Description: Ir -Added: 2009-07-29 -%% -Type: language -Subtag: iru -Description: Irula -Added: 2009-07-29 -%% -Type: language -Subtag: irx -Description: Kamberau -Added: 2009-07-29 -%% -Type: language -Subtag: iry -Description: Iraya -Added: 2009-07-29 -%% -Type: language -Subtag: isa -Description: Isabi -Added: 2009-07-29 -%% -Type: language -Subtag: isc -Description: Isconahua -Added: 2009-07-29 -%% -Type: language -Subtag: isd -Description: Isnag -Added: 2009-07-29 -%% -Type: language -Subtag: ise -Description: Italian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: isg -Description: Irish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: ish -Description: Esan -Added: 2009-07-29 -%% -Type: language -Subtag: isi -Description: Nkem-Nkum -Added: 2009-07-29 -%% -Type: language -Subtag: isk -Description: Ishkashimi -Added: 2010-03-11 -%% -Type: language -Subtag: ism -Description: Masimasi -Added: 2009-07-29 -%% -Type: language -Subtag: isn -Description: Isanzu -Added: 2009-07-29 -%% -Type: language -Subtag: iso -Description: Isoko -Added: 2009-07-29 -%% -Type: language -Subtag: isr -Description: Israeli Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: ist -Description: Istriot -Added: 2009-07-29 -%% -Type: language -Subtag: isu -Description: Isu (Menchum Division) -Added: 2009-07-29 -%% -Type: language -Subtag: itb -Description: Binongan Itneg -Added: 2009-07-29 -%% -Type: language -Subtag: itc -Description: Italic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: ite -Description: Itene -Added: 2009-07-29 -%% -Type: language -Subtag: iti -Description: Inlaod Itneg -Added: 2009-07-29 -%% -Type: language -Subtag: itk -Description: Judeo-Italian -Added: 2009-07-29 -%% -Type: language -Subtag: itl -Description: Itelmen -Added: 2009-07-29 -%% -Type: language -Subtag: itm -Description: Itu Mbon Uzo -Added: 2009-07-29 -%% -Type: language -Subtag: ito -Description: Itonama -Added: 2009-07-29 -%% -Type: language -Subtag: itr -Description: Iteri -Added: 2009-07-29 -%% -Type: language -Subtag: its -Description: Isekiri -Added: 2009-07-29 -%% -Type: language -Subtag: itt -Description: Maeng Itneg -Added: 2009-07-29 -%% -Type: language -Subtag: itv -Description: Itawit -Added: 2009-07-29 -%% -Type: language -Subtag: itw -Description: Ito -Added: 2009-07-29 -%% -Type: language -Subtag: itx -Description: Itik -Added: 2009-07-29 -%% -Type: language -Subtag: ity -Description: Moyadan Itneg -Added: 2009-07-29 -%% -Type: language -Subtag: itz -Description: Itzá -Added: 2009-07-29 -%% -Type: language -Subtag: ium -Description: Iu Mien -Added: 2009-07-29 -%% -Type: language -Subtag: ivb -Description: Ibatan -Added: 2009-07-29 -%% -Type: language -Subtag: ivv -Description: Ivatan -Added: 2009-07-29 -%% -Type: language -Subtag: iwk -Description: I-Wak -Added: 2009-07-29 -%% -Type: language -Subtag: iwm -Description: Iwam -Added: 2009-07-29 -%% -Type: language -Subtag: iwo -Description: Iwur -Added: 2009-07-29 -%% -Type: language -Subtag: iws -Description: Sepik Iwam -Added: 2009-07-29 -%% -Type: language -Subtag: ixc -Description: Ixcatec -Added: 2009-07-29 -%% -Type: language -Subtag: ixl -Description: Ixil -Added: 2009-07-29 -%% -Type: language -Subtag: iya -Description: Iyayu -Added: 2009-07-29 -%% -Type: language -Subtag: iyo -Description: Mesaka -Added: 2009-07-29 -%% -Type: language -Subtag: iyx -Description: Yaka (Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: izh -Description: Ingrian -Added: 2009-07-29 -%% -Type: language -Subtag: izi -Description: Izi-Ezaa-Ikwo-Mgbo -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see eza, gmz, iqw, izz -%% -Type: language -Subtag: izr -Description: Izere -Added: 2009-07-29 -%% -Type: language -Subtag: izz -Description: Izii -Added: 2013-09-10 -%% -Type: language -Subtag: jaa -Description: Jamamadí -Added: 2009-07-29 -%% -Type: language -Subtag: jab -Description: Hyam -Added: 2009-07-29 -%% -Type: language -Subtag: jac -Description: Popti' -Description: Jakalteko -Added: 2009-07-29 -%% -Type: language -Subtag: jad -Description: Jahanka -Added: 2009-07-29 -%% -Type: language -Subtag: jae -Description: Yabem -Added: 2009-07-29 -%% -Type: language -Subtag: jaf -Description: Jara -Added: 2009-07-29 -%% -Type: language -Subtag: jah -Description: Jah Hut -Added: 2009-07-29 -%% -Type: language -Subtag: jaj -Description: Zazao -Added: 2009-07-29 -%% -Type: language -Subtag: jak -Description: Jakun -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: jal -Description: Yalahatan -Added: 2009-07-29 -%% -Type: language -Subtag: jam -Description: Jamaican Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: jan -Description: Jandai -Added: 2012-08-12 -%% -Type: language -Subtag: jao -Description: Yanyuwa -Added: 2009-07-29 -%% -Type: language -Subtag: jaq -Description: Yaqay -Added: 2009-07-29 -%% -Type: language -Subtag: jar -Description: Jarawa (Nigeria) -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see jgk, jjr -%% -Type: language -Subtag: jas -Description: New Caledonian Javanese -Added: 2009-07-29 -%% -Type: language -Subtag: jat -Description: Jakati -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: jau -Description: Yaur -Added: 2009-07-29 -%% -Type: language -Subtag: jax -Description: Jambi Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: jay -Description: Yan-nhangu -Added: 2009-07-29 -%% -Type: language -Subtag: jaz -Description: Jawe -Added: 2009-07-29 -%% -Type: language -Subtag: jbe -Description: Judeo-Berber -Added: 2009-07-29 -%% -Type: language -Subtag: jbi -Description: Badjiri -Added: 2013-09-10 -%% -Type: language -Subtag: jbj -Description: Arandai -Added: 2009-07-29 -%% -Type: language -Subtag: jbk -Description: Barikewa -Added: 2012-08-12 -%% -Type: language -Subtag: jbn -Description: Nafusi -Added: 2009-07-29 -%% -Type: language -Subtag: jbo -Description: Lojban -Added: 2005-10-16 -%% -Type: language -Subtag: jbr -Description: Jofotek-Bromnya -Added: 2009-07-29 -%% -Type: language -Subtag: jbt -Description: Jabutí -Added: 2009-07-29 -%% -Type: language -Subtag: jbu -Description: Jukun Takum -Added: 2009-07-29 -%% -Type: language -Subtag: jbw -Description: Yawijibaya -Added: 2012-08-12 -%% -Type: language -Subtag: jcs -Description: Jamaican Country Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: jct -Description: Krymchak -Added: 2009-07-29 -%% -Type: language -Subtag: jda -Description: Jad -Added: 2009-07-29 -%% -Type: language -Subtag: jdg -Description: Jadgali -Added: 2009-07-29 -%% -Type: language -Subtag: jdt -Description: Judeo-Tat -Added: 2009-07-29 -%% -Type: language -Subtag: jeb -Description: Jebero -Added: 2009-07-29 -%% -Type: language -Subtag: jee -Description: Jerung -Added: 2009-07-29 -%% -Type: language -Subtag: jeg -Description: Jeng -Added: 2009-07-29 -%% -Type: language -Subtag: jeh -Description: Jeh -Added: 2009-07-29 -%% -Type: language -Subtag: jei -Description: Yei -Added: 2009-07-29 -%% -Type: language -Subtag: jek -Description: Jeri Kuo -Added: 2009-07-29 -%% -Type: language -Subtag: jel -Description: Yelmek -Added: 2009-07-29 -%% -Type: language -Subtag: jen -Description: Dza -Added: 2009-07-29 -%% -Type: language -Subtag: jer -Description: Jere -Added: 2009-07-29 -%% -Type: language -Subtag: jet -Description: Manem -Added: 2009-07-29 -%% -Type: language -Subtag: jeu -Description: Jonkor Bourmataguil -Added: 2009-07-29 -%% -Type: language -Subtag: jgb -Description: Ngbee -Added: 2009-07-29 -%% -Type: language -Subtag: jge -Description: Judeo-Georgian -Added: 2009-07-29 -%% -Type: language -Subtag: jgk -Description: Gwak -Added: 2012-08-12 -%% -Type: language -Subtag: jgo -Description: Ngomba -Added: 2009-07-29 -%% -Type: language -Subtag: jhi -Description: Jehai -Added: 2009-07-29 -%% -Type: language -Subtag: jhs -Description: Jhankot Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: jia -Description: Jina -Added: 2009-07-29 -%% -Type: language -Subtag: jib -Description: Jibu -Added: 2009-07-29 -%% -Type: language -Subtag: jic -Description: Tol -Added: 2009-07-29 -%% -Type: language -Subtag: jid -Description: Bu -Added: 2009-07-29 -%% -Type: language -Subtag: jie -Description: Jilbe -Added: 2009-07-29 -%% -Type: language -Subtag: jig -Description: Djingili -Added: 2009-07-29 -%% -Type: language -Subtag: jih -Description: sTodsde -Description: Shangzhai -Added: 2009-07-29 -%% -Type: language -Subtag: jii -Description: Jiiddu -Added: 2009-07-29 -%% -Type: language -Subtag: jil -Description: Jilim -Added: 2009-07-29 -%% -Type: language -Subtag: jim -Description: Jimi (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: jio -Description: Jiamao -Added: 2009-07-29 -%% -Type: language -Subtag: jiq -Description: Guanyinqiao -Description: Lavrung -Added: 2009-07-29 -%% -Type: language -Subtag: jit -Description: Jita -Added: 2009-07-29 -%% -Type: language -Subtag: jiu -Description: Youle Jinuo -Added: 2009-07-29 -%% -Type: language -Subtag: jiv -Description: Shuar -Added: 2009-07-29 -%% -Type: language -Subtag: jiy -Description: Buyuan Jinuo -Added: 2009-07-29 -%% -Type: language -Subtag: jjr -Description: Bankal -Added: 2012-08-12 -%% -Type: language -Subtag: jkm -Description: Mobwa Karen -Added: 2012-08-12 -%% -Type: language -Subtag: jko -Description: Kubo -Added: 2009-07-29 -%% -Type: language -Subtag: jkp -Description: Paku Karen -Added: 2012-08-12 -%% -Type: language -Subtag: jkr -Description: Koro (India) -Added: 2012-08-12 -%% -Type: language -Subtag: jku -Description: Labir -Added: 2009-07-29 -%% -Type: language -Subtag: jle -Description: Ngile -Added: 2009-07-29 -%% -Type: language -Subtag: jls -Description: Jamaican Sign Language -Added: 2010-03-11 -%% -Type: language -Subtag: jma -Description: Dima -Added: 2009-07-29 -%% -Type: language -Subtag: jmb -Description: Zumbun -Added: 2009-07-29 -%% -Type: language -Subtag: jmc -Description: Machame -Added: 2009-07-29 -%% -Type: language -Subtag: jmd -Description: Yamdena -Added: 2009-07-29 -%% -Type: language -Subtag: jmi -Description: Jimi (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: jml -Description: Jumli -Added: 2009-07-29 -%% -Type: language -Subtag: jmn -Description: Makuri Naga -Added: 2009-07-29 -%% -Type: language -Subtag: jmr -Description: Kamara -Added: 2009-07-29 -%% -Type: language -Subtag: jms -Description: Mashi (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: jmw -Description: Mouwase -Added: 2012-08-12 -%% -Type: language -Subtag: jmx -Description: Western Juxtlahuaca Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: jna -Description: Jangshung -Added: 2009-07-29 -%% -Type: language -Subtag: jnd -Description: Jandavra -Added: 2009-07-29 -%% -Type: language -Subtag: jng -Description: Yangman -Added: 2009-07-29 -%% -Type: language -Subtag: jni -Description: Janji -Added: 2009-07-29 -%% -Type: language -Subtag: jnj -Description: Yemsa -Added: 2009-07-29 -%% -Type: language -Subtag: jnl -Description: Rawat -Added: 2009-07-29 -%% -Type: language -Subtag: jns -Description: Jaunsari -Added: 2009-07-29 -%% -Type: language -Subtag: job -Description: Joba -Added: 2009-07-29 -%% -Type: language -Subtag: jod -Description: Wojenaka -Added: 2009-07-29 -%% -Type: language -Subtag: jor -Description: Jorá -Added: 2009-07-29 -%% -Type: language -Subtag: jos -Description: Jordanian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: jow -Description: Jowulu -Added: 2009-07-29 -%% -Type: language -Subtag: jpa -Description: Jewish Palestinian Aramaic -Added: 2009-07-29 -%% -Type: language -Subtag: jpr -Description: Judeo-Persian -Added: 2005-10-16 -%% -Type: language -Subtag: jpx -Description: Japanese (family) -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: jqr -Description: Jaqaru -Added: 2009-07-29 -%% -Type: language -Subtag: jra -Description: Jarai -Added: 2009-07-29 -%% -Type: language -Subtag: jrb -Description: Judeo-Arabic -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: jrr -Description: Jiru -Added: 2009-07-29 -%% -Type: language -Subtag: jrt -Description: Jorto -Added: 2009-07-29 -%% -Type: language -Subtag: jru -Description: Japrería -Added: 2009-07-29 -%% -Type: language -Subtag: jsl -Description: Japanese Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: jua -Description: Júma -Added: 2009-07-29 -%% -Type: language -Subtag: jub -Description: Wannu -Added: 2009-07-29 -%% -Type: language -Subtag: juc -Description: Jurchen -Added: 2009-07-29 -%% -Type: language -Subtag: jud -Description: Worodougou -Added: 2009-07-29 -%% -Type: language -Subtag: juh -Description: Hõne -Added: 2009-07-29 -%% -Type: language -Subtag: jui -Description: Ngadjuri -Added: 2012-08-12 -%% -Type: language -Subtag: juk -Description: Wapan -Added: 2009-07-29 -%% -Type: language -Subtag: jul -Description: Jirel -Added: 2009-07-29 -%% -Type: language -Subtag: jum -Description: Jumjum -Added: 2009-07-29 -%% -Type: language -Subtag: jun -Description: Juang -Added: 2009-07-29 -%% -Type: language -Subtag: juo -Description: Jiba -Added: 2009-07-29 -%% -Type: language -Subtag: jup -Description: Hupdë -Added: 2009-07-29 -%% -Type: language -Subtag: jur -Description: Jurúna -Added: 2009-07-29 -%% -Type: language -Subtag: jus -Description: Jumla Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: jut -Description: Jutish -Added: 2009-07-29 -%% -Type: language -Subtag: juu -Description: Ju -Added: 2009-07-29 -%% -Type: language -Subtag: juw -Description: Wãpha -Added: 2009-07-29 -%% -Type: language -Subtag: juy -Description: Juray -Added: 2009-07-29 -%% -Type: language -Subtag: jvd -Description: Javindo -Added: 2009-07-29 -%% -Type: language -Subtag: jvn -Description: Caribbean Javanese -Added: 2009-07-29 -%% -Type: language -Subtag: jwi -Description: Jwira-Pepesa -Added: 2009-07-29 -%% -Type: language -Subtag: jya -Description: Jiarong -Added: 2009-07-29 -%% -Type: language -Subtag: jye -Description: Judeo-Yemeni Arabic -Added: 2009-07-29 -Macrolanguage: jrb -%% -Type: language -Subtag: jyy -Description: Jaya -Added: 2009-07-29 -%% -Type: language -Subtag: kaa -Description: Kara-Kalpak -Added: 2005-10-16 -%% -Type: language -Subtag: kab -Description: Kabyle -Added: 2005-10-16 -%% -Type: language -Subtag: kac -Description: Kachin -Description: Jingpho -Added: 2005-10-16 -%% -Type: language -Subtag: kad -Description: Adara -Added: 2009-07-29 -%% -Type: language -Subtag: kae -Description: Ketangalan -Added: 2009-07-29 -%% -Type: language -Subtag: kaf -Description: Katso -Added: 2009-07-29 -%% -Type: language -Subtag: kag -Description: Kajaman -Added: 2009-07-29 -%% -Type: language -Subtag: kah -Description: Kara (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: kai -Description: Karekare -Added: 2009-07-29 -%% -Type: language -Subtag: kaj -Description: Jju -Added: 2009-07-29 -%% -Type: language -Subtag: kak -Description: Kayapa Kallahan -Added: 2009-07-29 -%% -Type: language -Subtag: kam -Description: Kamba (Kenya) -Added: 2005-10-16 -%% -Type: language -Subtag: kao -Description: Xaasongaxango -Added: 2009-07-29 -%% -Type: language -Subtag: kap -Description: Bezhta -Added: 2009-07-29 -%% -Type: language -Subtag: kaq -Description: Capanahua -Added: 2009-07-29 -%% -Type: language -Subtag: kar -Description: Karen languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: kav -Description: Katukína -Added: 2009-07-29 -%% -Type: language -Subtag: kaw -Description: Kawi -Added: 2005-10-16 -%% -Type: language -Subtag: kax -Description: Kao -Added: 2009-07-29 -%% -Type: language -Subtag: kay -Description: Kamayurá -Added: 2009-07-29 -%% -Type: language -Subtag: kba -Description: Kalarko -Added: 2009-07-29 -%% -Type: language -Subtag: kbb -Description: Kaxuiâna -Added: 2009-07-29 -%% -Type: language -Subtag: kbc -Description: Kadiwéu -Added: 2009-07-29 -%% -Type: language -Subtag: kbd -Description: Kabardian -Added: 2005-10-16 -%% -Type: language -Subtag: kbe -Description: Kanju -Added: 2009-07-29 -%% -Type: language -Subtag: kbf -Description: Kakauhua -Added: 2009-07-29 -%% -Type: language -Subtag: kbg -Description: Khamba -Added: 2009-07-29 -%% -Type: language -Subtag: kbh -Description: Camsá -Added: 2009-07-29 -%% -Type: language -Subtag: kbi -Description: Kaptiau -Added: 2009-07-29 -%% -Type: language -Subtag: kbj -Description: Kari -Added: 2009-07-29 -%% -Type: language -Subtag: kbk -Description: Grass Koiari -Added: 2009-07-29 -%% -Type: language -Subtag: kbl -Description: Kanembu -Added: 2009-07-29 -%% -Type: language -Subtag: kbm -Description: Iwal -Added: 2009-07-29 -%% -Type: language -Subtag: kbn -Description: Kare (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: kbo -Description: Keliko -Added: 2009-07-29 -%% -Type: language -Subtag: kbp -Description: Kabiyè -Added: 2009-07-29 -%% -Type: language -Subtag: kbq -Description: Kamano -Added: 2009-07-29 -%% -Type: language -Subtag: kbr -Description: Kafa -Added: 2009-07-29 -%% -Type: language -Subtag: kbs -Description: Kande -Added: 2009-07-29 -%% -Type: language -Subtag: kbt -Description: Abadi -Added: 2009-07-29 -%% -Type: language -Subtag: kbu -Description: Kabutra -Added: 2009-07-29 -%% -Type: language -Subtag: kbv -Description: Dera (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: kbw -Description: Kaiep -Added: 2009-07-29 -%% -Type: language -Subtag: kbx -Description: Ap Ma -Added: 2009-07-29 -%% -Type: language -Subtag: kby -Description: Manga Kanuri -Added: 2009-07-29 -Macrolanguage: kr -%% -Type: language -Subtag: kbz -Description: Duhwa -Added: 2009-07-29 -%% -Type: language -Subtag: kca -Description: Khanty -Added: 2009-07-29 -%% -Type: language -Subtag: kcb -Description: Kawacha -Added: 2009-07-29 -%% -Type: language -Subtag: kcc -Description: Lubila -Added: 2009-07-29 -%% -Type: language -Subtag: kcd -Description: Ngkâlmpw Kanum -Added: 2009-07-29 -%% -Type: language -Subtag: kce -Description: Kaivi -Added: 2009-07-29 -%% -Type: language -Subtag: kcf -Description: Ukaan -Added: 2009-07-29 -%% -Type: language -Subtag: kcg -Description: Tyap -Added: 2009-07-29 -%% -Type: language -Subtag: kch -Description: Vono -Added: 2009-07-29 -%% -Type: language -Subtag: kci -Description: Kamantan -Added: 2009-07-29 -%% -Type: language -Subtag: kcj -Description: Kobiana -Added: 2009-07-29 -%% -Type: language -Subtag: kck -Description: Kalanga -Added: 2009-07-29 -%% -Type: language -Subtag: kcl -Description: Kela (Papua New Guinea) -Description: Kala -Added: 2009-07-29 -%% -Type: language -Subtag: kcm -Description: Gula (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: kcn -Description: Nubi -Added: 2009-07-29 -%% -Type: language -Subtag: kco -Description: Kinalakna -Added: 2009-07-29 -%% -Type: language -Subtag: kcp -Description: Kanga -Added: 2009-07-29 -%% -Type: language -Subtag: kcq -Description: Kamo -Added: 2009-07-29 -%% -Type: language -Subtag: kcr -Description: Katla -Added: 2009-07-29 -%% -Type: language -Subtag: kcs -Description: Koenoem -Added: 2009-07-29 -%% -Type: language -Subtag: kct -Description: Kaian -Added: 2009-07-29 -%% -Type: language -Subtag: kcu -Description: Kami (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: kcv -Description: Kete -Added: 2009-07-29 -%% -Type: language -Subtag: kcw -Description: Kabwari -Added: 2009-07-29 -%% -Type: language -Subtag: kcx -Description: Kachama-Ganjule -Added: 2009-07-29 -%% -Type: language -Subtag: kcy -Description: Korandje -Added: 2009-07-29 -%% -Type: language -Subtag: kcz -Description: Konongo -Added: 2009-07-29 -%% -Type: language -Subtag: kda -Description: Worimi -Added: 2009-07-29 -%% -Type: language -Subtag: kdc -Description: Kutu -Added: 2009-07-29 -%% -Type: language -Subtag: kdd -Description: Yankunytjatjara -Added: 2009-07-29 -%% -Type: language -Subtag: kde -Description: Makonde -Added: 2009-07-29 -%% -Type: language -Subtag: kdf -Description: Mamusi -Added: 2009-07-29 -%% -Type: language -Subtag: kdg -Description: Seba -Added: 2009-07-29 -%% -Type: language -Subtag: kdh -Description: Tem -Added: 2009-07-29 -%% -Type: language -Subtag: kdi -Description: Kumam -Added: 2009-07-29 -%% -Type: language -Subtag: kdj -Description: Karamojong -Added: 2009-07-29 -%% -Type: language -Subtag: kdk -Description: Numèè -Description: Kwényi -Added: 2009-07-29 -%% -Type: language -Subtag: kdl -Description: Tsikimba -Added: 2009-07-29 -%% -Type: language -Subtag: kdm -Description: Kagoma -Added: 2009-07-29 -%% -Type: language -Subtag: kdn -Description: Kunda -Added: 2009-07-29 -%% -Type: language -Subtag: kdo -Description: Kordofanian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: kdp -Description: Kaningdon-Nindem -Added: 2009-07-29 -%% -Type: language -Subtag: kdq -Description: Koch -Added: 2009-07-29 -%% -Type: language -Subtag: kdr -Description: Karaim -Added: 2009-07-29 -%% -Type: language -Subtag: kdt -Description: Kuy -Added: 2009-07-29 -%% -Type: language -Subtag: kdu -Description: Kadaru -Added: 2009-07-29 -%% -Type: language -Subtag: kdv -Description: Kado -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see zkd, zkn -%% -Type: language -Subtag: kdw -Description: Koneraw -Added: 2009-07-29 -%% -Type: language -Subtag: kdx -Description: Kam -Added: 2009-07-29 -%% -Type: language -Subtag: kdy -Description: Keder -Description: Keijar -Added: 2009-07-29 -%% -Type: language -Subtag: kdz -Description: Kwaja -Added: 2009-07-29 -%% -Type: language -Subtag: kea -Description: Kabuverdianu -Added: 2009-07-29 -%% -Type: language -Subtag: keb -Description: Kélé -Added: 2009-07-29 -%% -Type: language -Subtag: kec -Description: Keiga -Added: 2009-07-29 -%% -Type: language -Subtag: ked -Description: Kerewe -Added: 2009-07-29 -%% -Type: language -Subtag: kee -Description: Eastern Keres -Added: 2009-07-29 -%% -Type: language -Subtag: kef -Description: Kpessi -Added: 2009-07-29 -%% -Type: language -Subtag: keg -Description: Tese -Added: 2009-07-29 -%% -Type: language -Subtag: keh -Description: Keak -Added: 2009-07-29 -%% -Type: language -Subtag: kei -Description: Kei -Added: 2009-07-29 -%% -Type: language -Subtag: kej -Description: Kadar -Added: 2009-07-29 -%% -Type: language -Subtag: kek -Description: Kekchí -Added: 2009-07-29 -%% -Type: language -Subtag: kel -Description: Kela (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: kem -Description: Kemak -Added: 2009-07-29 -%% -Type: language -Subtag: ken -Description: Kenyang -Added: 2009-07-29 -%% -Type: language -Subtag: keo -Description: Kakwa -Added: 2009-07-29 -%% -Type: language -Subtag: kep -Description: Kaikadi -Added: 2009-07-29 -%% -Type: language -Subtag: keq -Description: Kamar -Added: 2009-07-29 -%% -Type: language -Subtag: ker -Description: Kera -Added: 2009-07-29 -%% -Type: language -Subtag: kes -Description: Kugbo -Added: 2009-07-29 -%% -Type: language -Subtag: ket -Description: Ket -Added: 2009-07-29 -%% -Type: language -Subtag: keu -Description: Akebu -Added: 2009-07-29 -%% -Type: language -Subtag: kev -Description: Kanikkaran -Added: 2009-07-29 -%% -Type: language -Subtag: kew -Description: West Kewa -Added: 2009-07-29 -%% -Type: language -Subtag: kex -Description: Kukna -Added: 2009-07-29 -%% -Type: language -Subtag: key -Description: Kupia -Added: 2009-07-29 -%% -Type: language -Subtag: kez -Description: Kukele -Added: 2009-07-29 -%% -Type: language -Subtag: kfa -Description: Kodava -Added: 2009-07-29 -%% -Type: language -Subtag: kfb -Description: Northwestern Kolami -Added: 2009-07-29 -%% -Type: language -Subtag: kfc -Description: Konda-Dora -Added: 2009-07-29 -%% -Type: language -Subtag: kfd -Description: Korra Koraga -Added: 2009-07-29 -%% -Type: language -Subtag: kfe -Description: Kota (India) -Added: 2009-07-29 -%% -Type: language -Subtag: kff -Description: Koya -Added: 2009-07-29 -%% -Type: language -Subtag: kfg -Description: Kudiya -Added: 2009-07-29 -%% -Type: language -Subtag: kfh -Description: Kurichiya -Added: 2009-07-29 -%% -Type: language -Subtag: kfi -Description: Kannada Kurumba -Added: 2009-07-29 -%% -Type: language -Subtag: kfj -Description: Kemiehua -Added: 2009-07-29 -%% -Type: language -Subtag: kfk -Description: Kinnauri -Added: 2009-07-29 -%% -Type: language -Subtag: kfl -Description: Kung -Added: 2009-07-29 -%% -Type: language -Subtag: kfm -Description: Khunsari -Added: 2009-07-29 -%% -Type: language -Subtag: kfn -Description: Kuk -Added: 2009-07-29 -%% -Type: language -Subtag: kfo -Description: Koro (Côte d'Ivoire) -Added: 2009-07-29 -%% -Type: language -Subtag: kfp -Description: Korwa -Added: 2009-07-29 -%% -Type: language -Subtag: kfq -Description: Korku -Added: 2009-07-29 -%% -Type: language -Subtag: kfr -Description: Kachchi -Added: 2009-07-29 -%% -Type: language -Subtag: kfs -Description: Bilaspuri -Added: 2009-07-29 -%% -Type: language -Subtag: kft -Description: Kanjari -Added: 2009-07-29 -%% -Type: language -Subtag: kfu -Description: Katkari -Added: 2009-07-29 -%% -Type: language -Subtag: kfv -Description: Kurmukar -Added: 2009-07-29 -%% -Type: language -Subtag: kfw -Description: Kharam Naga -Added: 2009-07-29 -%% -Type: language -Subtag: kfx -Description: Kullu Pahari -Added: 2009-07-29 -%% -Type: language -Subtag: kfy -Description: Kumaoni -Added: 2009-07-29 -%% -Type: language -Subtag: kfz -Description: Koromfé -Added: 2009-07-29 -%% -Type: language -Subtag: kga -Description: Koyaga -Added: 2009-07-29 -%% -Type: language -Subtag: kgb -Description: Kawe -Added: 2009-07-29 -%% -Type: language -Subtag: kgc -Description: Kasseng -Added: 2009-07-29 -%% -Type: language -Subtag: kgd -Description: Kataang -Added: 2009-07-29 -%% -Type: language -Subtag: kge -Description: Komering -Added: 2009-07-29 -%% -Type: language -Subtag: kgf -Description: Kube -Added: 2009-07-29 -%% -Type: language -Subtag: kgg -Description: Kusunda -Added: 2009-07-29 -%% -Type: language -Subtag: kgh -Description: Upper Tanudan Kalinga -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: kml -%% -Type: language -Subtag: kgi -Description: Selangor Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: kgj -Description: Gamale Kham -Added: 2009-07-29 -%% -Type: language -Subtag: kgk -Description: Kaiwá -Added: 2009-07-29 -%% -Type: language -Subtag: kgl -Description: Kunggari -Added: 2009-07-29 -%% -Type: language -Subtag: kgm -Description: Karipúna -Added: 2009-07-29 -%% -Type: language -Subtag: kgn -Description: Karingani -Added: 2009-07-29 -%% -Type: language -Subtag: kgo -Description: Krongo -Added: 2009-07-29 -%% -Type: language -Subtag: kgp -Description: Kaingang -Added: 2009-07-29 -%% -Type: language -Subtag: kgq -Description: Kamoro -Added: 2009-07-29 -%% -Type: language -Subtag: kgr -Description: Abun -Added: 2009-07-29 -%% -Type: language -Subtag: kgs -Description: Kumbainggar -Added: 2009-07-29 -%% -Type: language -Subtag: kgt -Description: Somyev -Added: 2009-07-29 -%% -Type: language -Subtag: kgu -Description: Kobol -Added: 2009-07-29 -%% -Type: language -Subtag: kgv -Description: Karas -Added: 2009-07-29 -%% -Type: language -Subtag: kgw -Description: Karon Dori -Added: 2009-07-29 -%% -Type: language -Subtag: kgx -Description: Kamaru -Added: 2009-07-29 -%% -Type: language -Subtag: kgy -Description: Kyerung -Added: 2009-07-29 -%% -Type: language -Subtag: kha -Description: Khasi -Added: 2005-10-16 -Comments: as of 2008-04-21 this subtag does not include Lyngngam; see - lyg -%% -Type: language -Subtag: khb -Description: Lü -Added: 2009-07-29 -%% -Type: language -Subtag: khc -Description: Tukang Besi North -Added: 2009-07-29 -%% -Type: language -Subtag: khd -Description: Bädi Kanum -Added: 2009-07-29 -%% -Type: language -Subtag: khe -Description: Korowai -Added: 2009-07-29 -%% -Type: language -Subtag: khf -Description: Khuen -Added: 2009-07-29 -%% -Type: language -Subtag: khg -Description: Khams Tibetan -Added: 2009-07-29 -%% -Type: language -Subtag: khh -Description: Kehu -Added: 2009-07-29 -%% -Type: language -Subtag: khi -Description: Khoisan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: khj -Description: Kuturmi -Added: 2009-07-29 -%% -Type: language -Subtag: khk -Description: Halh Mongolian -Added: 2009-07-29 -Macrolanguage: mn -%% -Type: language -Subtag: khl -Description: Lusi -Added: 2009-07-29 -%% -Type: language -Subtag: khn -Description: Khandesi -Added: 2009-07-29 -%% -Type: language -Subtag: kho -Description: Khotanese -Description: Sakan -Added: 2005-10-16 -%% -Type: language -Subtag: khp -Description: Kapori -Description: Kapauri -Added: 2009-07-29 -%% -Type: language -Subtag: khq -Description: Koyra Chiini Songhay -Added: 2009-07-29 -%% -Type: language -Subtag: khr -Description: Kharia -Added: 2009-07-29 -%% -Type: language -Subtag: khs -Description: Kasua -Added: 2009-07-29 -%% -Type: language -Subtag: kht -Description: Khamti -Added: 2009-07-29 -%% -Type: language -Subtag: khu -Description: Nkhumbi -Added: 2009-07-29 -%% -Type: language -Subtag: khv -Description: Khvarshi -Added: 2009-07-29 -%% -Type: language -Subtag: khw -Description: Khowar -Added: 2009-07-29 -%% -Type: language -Subtag: khx -Description: Kanu -Added: 2009-07-29 -%% -Type: language -Subtag: khy -Description: Kele (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: khz -Description: Keapara -Added: 2009-07-29 -%% -Type: language -Subtag: kia -Description: Kim -Added: 2009-07-29 -%% -Type: language -Subtag: kib -Description: Koalib -Added: 2009-07-29 -%% -Type: language -Subtag: kic -Description: Kickapoo -Added: 2009-07-29 -%% -Type: language -Subtag: kid -Description: Koshin -Added: 2009-07-29 -%% -Type: language -Subtag: kie -Description: Kibet -Added: 2009-07-29 -%% -Type: language -Subtag: kif -Description: Eastern Parbate Kham -Added: 2009-07-29 -%% -Type: language -Subtag: kig -Description: Kimaama -Description: Kimaghima -Added: 2009-07-29 -%% -Type: language -Subtag: kih -Description: Kilmeri -Added: 2009-07-29 -%% -Type: language -Subtag: kii -Description: Kitsai -Added: 2009-07-29 -%% -Type: language -Subtag: kij -Description: Kilivila -Added: 2009-07-29 -%% -Type: language -Subtag: kil -Description: Kariya -Added: 2009-07-29 -%% -Type: language -Subtag: kim -Description: Karagas -Added: 2009-07-29 -%% -Type: language -Subtag: kio -Description: Kiowa -Added: 2009-07-29 -%% -Type: language -Subtag: kip -Description: Sheshi Kham -Added: 2009-07-29 -%% -Type: language -Subtag: kiq -Description: Kosadle -Description: Kosare -Added: 2009-07-29 -%% -Type: language -Subtag: kis -Description: Kis -Added: 2009-07-29 -%% -Type: language -Subtag: kit -Description: Agob -Added: 2009-07-29 -%% -Type: language -Subtag: kiu -Description: Kirmanjki (individual language) -Added: 2009-07-29 -Macrolanguage: zza -%% -Type: language -Subtag: kiv -Description: Kimbu -Added: 2009-07-29 -%% -Type: language -Subtag: kiw -Description: Northeast Kiwai -Added: 2009-07-29 -%% -Type: language -Subtag: kix -Description: Khiamniungan Naga -Added: 2009-07-29 -%% -Type: language -Subtag: kiy -Description: Kirikiri -Added: 2009-07-29 -%% -Type: language -Subtag: kiz -Description: Kisi -Added: 2009-07-29 -%% -Type: language -Subtag: kja -Description: Mlap -Added: 2009-07-29 -%% -Type: language -Subtag: kjb -Description: Q'anjob'al -Description: Kanjobal -Added: 2009-07-29 -%% -Type: language -Subtag: kjc -Description: Coastal Konjo -Added: 2009-07-29 -%% -Type: language -Subtag: kjd -Description: Southern Kiwai -Added: 2009-07-29 -%% -Type: language -Subtag: kje -Description: Kisar -Added: 2009-07-29 -%% -Type: language -Subtag: kjf -Description: Khalaj -Added: 2009-07-29 -%% -Type: language -Subtag: kjg -Description: Khmu -Added: 2009-07-29 -%% -Type: language -Subtag: kjh -Description: Khakas -Added: 2009-07-29 -%% -Type: language -Subtag: kji -Description: Zabana -Added: 2009-07-29 -%% -Type: language -Subtag: kjj -Description: Khinalugh -Added: 2009-07-29 -%% -Type: language -Subtag: kjk -Description: Highland Konjo -Added: 2009-07-29 -%% -Type: language -Subtag: kjl -Description: Western Parbate Kham -Added: 2009-07-29 -%% -Type: language -Subtag: kjm -Description: Kháng -Added: 2009-07-29 -%% -Type: language -Subtag: kjn -Description: Kunjen -Added: 2009-07-29 -%% -Type: language -Subtag: kjo -Description: Harijan Kinnauri -Added: 2009-07-29 -%% -Type: language -Subtag: kjp -Description: Pwo Eastern Karen -Added: 2009-07-29 -%% -Type: language -Subtag: kjq -Description: Western Keres -Added: 2009-07-29 -%% -Type: language -Subtag: kjr -Description: Kurudu -Added: 2009-07-29 -%% -Type: language -Subtag: kjs -Description: East Kewa -Added: 2009-07-29 -%% -Type: language -Subtag: kjt -Description: Phrae Pwo Karen -Added: 2009-07-29 -%% -Type: language -Subtag: kju -Description: Kashaya -Added: 2009-07-29 -%% -Type: language -Subtag: kjx -Description: Ramopa -Added: 2009-07-29 -%% -Type: language -Subtag: kjy -Description: Erave -Added: 2009-07-29 -%% -Type: language -Subtag: kjz -Description: Bumthangkha -Added: 2009-07-29 -%% -Type: language -Subtag: kka -Description: Kakanda -Added: 2009-07-29 -%% -Type: language -Subtag: kkb -Description: Kwerisa -Added: 2009-07-29 -%% -Type: language -Subtag: kkc -Description: Odoodee -Added: 2009-07-29 -%% -Type: language -Subtag: kkd -Description: Kinuku -Added: 2009-07-29 -%% -Type: language -Subtag: kke -Description: Kakabe -Added: 2009-07-29 -%% -Type: language -Subtag: kkf -Description: Kalaktang Monpa -Added: 2009-07-29 -%% -Type: language -Subtag: kkg -Description: Mabaka Valley Kalinga -Added: 2009-07-29 -%% -Type: language -Subtag: kkh -Description: Khün -Added: 2009-07-29 -%% -Type: language -Subtag: kki -Description: Kagulu -Added: 2009-07-29 -%% -Type: language -Subtag: kkj -Description: Kako -Added: 2009-07-29 -%% -Type: language -Subtag: kkk -Description: Kokota -Added: 2009-07-29 -%% -Type: language -Subtag: kkl -Description: Kosarek Yale -Added: 2009-07-29 -%% -Type: language -Subtag: kkm -Description: Kiong -Added: 2009-07-29 -%% -Type: language -Subtag: kkn -Description: Kon Keu -Added: 2009-07-29 -%% -Type: language -Subtag: kko -Description: Karko -Added: 2009-07-29 -%% -Type: language -Subtag: kkp -Description: Gugubera -Added: 2009-07-29 -%% -Type: language -Subtag: kkq -Description: Kaiku -Added: 2009-07-29 -%% -Type: language -Subtag: kkr -Description: Kir-Balar -Added: 2009-07-29 -%% -Type: language -Subtag: kks -Description: Giiwo -Added: 2009-07-29 -%% -Type: language -Subtag: kkt -Description: Koi -Added: 2009-07-29 -%% -Type: language -Subtag: kku -Description: Tumi -Added: 2009-07-29 -%% -Type: language -Subtag: kkv -Description: Kangean -Added: 2009-07-29 -%% -Type: language -Subtag: kkw -Description: Teke-Kukuya -Added: 2009-07-29 -%% -Type: language -Subtag: kkx -Description: Kohin -Added: 2009-07-29 -%% -Type: language -Subtag: kky -Description: Guguyimidjir -Added: 2009-07-29 -%% -Type: language -Subtag: kkz -Description: Kaska -Added: 2009-07-29 -%% -Type: language -Subtag: kla -Description: Klamath-Modoc -Added: 2009-07-29 -%% -Type: language -Subtag: klb -Description: Kiliwa -Added: 2009-07-29 -%% -Type: language -Subtag: klc -Description: Kolbila -Added: 2009-07-29 -%% -Type: language -Subtag: kld -Description: Gamilaraay -Added: 2009-07-29 -%% -Type: language -Subtag: kle -Description: Kulung (Nepal) -Added: 2009-07-29 -%% -Type: language -Subtag: klf -Description: Kendeje -Added: 2009-07-29 -%% -Type: language -Subtag: klg -Description: Tagakaulo -Added: 2009-07-29 -%% -Type: language -Subtag: klh -Description: Weliki -Added: 2009-07-29 -%% -Type: language -Subtag: kli -Description: Kalumpang -Added: 2009-07-29 -%% -Type: language -Subtag: klj -Description: Turkic Khalaj -Added: 2009-07-29 -%% -Type: language -Subtag: klk -Description: Kono (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: kll -Description: Kagan Kalagan -Added: 2009-07-29 -%% -Type: language -Subtag: klm -Description: Migum -Added: 2009-07-29 -%% -Type: language -Subtag: kln -Description: Kalenjin -Added: 2009-07-29 -Scope: macrolanguage -%% -Type: language -Subtag: klo -Description: Kapya -Added: 2009-07-29 -%% -Type: language -Subtag: klp -Description: Kamasa -Added: 2009-07-29 -%% -Type: language -Subtag: klq -Description: Rumu -Added: 2009-07-29 -%% -Type: language -Subtag: klr -Description: Khaling -Added: 2009-07-29 -%% -Type: language -Subtag: kls -Description: Kalasha -Added: 2009-07-29 -%% -Type: language -Subtag: klt -Description: Nukna -Added: 2009-07-29 -%% -Type: language -Subtag: klu -Description: Klao -Added: 2009-07-29 -%% -Type: language -Subtag: klv -Description: Maskelynes -Added: 2009-07-29 -%% -Type: language -Subtag: klw -Description: Lindu -Added: 2009-07-29 -%% -Type: language -Subtag: klx -Description: Koluwawa -Added: 2009-07-29 -%% -Type: language -Subtag: kly -Description: Kalao -Added: 2009-07-29 -%% -Type: language -Subtag: klz -Description: Kabola -Added: 2009-07-29 -%% -Type: language -Subtag: kma -Description: Konni -Added: 2009-07-29 -%% -Type: language -Subtag: kmb -Description: Kimbundu -Added: 2005-10-16 -%% -Type: language -Subtag: kmc -Description: Southern Dong -Added: 2009-07-29 -%% -Type: language -Subtag: kmd -Description: Majukayang Kalinga -Added: 2009-07-29 -%% -Type: language -Subtag: kme -Description: Bakole -Added: 2009-07-29 -%% -Type: language -Subtag: kmf -Description: Kare (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: kmg -Description: Kâte -Added: 2009-07-29 -%% -Type: language -Subtag: kmh -Description: Kalam -Added: 2009-07-29 -%% -Type: language -Subtag: kmi -Description: Kami (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: kmj -Description: Kumarbhag Paharia -Added: 2009-07-29 -%% -Type: language -Subtag: kmk -Description: Limos Kalinga -Added: 2009-07-29 -%% -Type: language -Subtag: kml -Description: Tanudan Kalinga -Added: 2009-07-29 -%% -Type: language -Subtag: kmm -Description: Kom (India) -Added: 2009-07-29 -%% -Type: language -Subtag: kmn -Description: Awtuw -Added: 2009-07-29 -%% -Type: language -Subtag: kmo -Description: Kwoma -Added: 2009-07-29 -%% -Type: language -Subtag: kmp -Description: Gimme -Added: 2009-07-29 -%% -Type: language -Subtag: kmq -Description: Kwama -Added: 2009-07-29 -%% -Type: language -Subtag: kmr -Description: Northern Kurdish -Added: 2009-07-29 -Macrolanguage: ku -%% -Type: language -Subtag: kms -Description: Kamasau -Added: 2009-07-29 -%% -Type: language -Subtag: kmt -Description: Kemtuik -Added: 2009-07-29 -%% -Type: language -Subtag: kmu -Description: Kanite -Added: 2009-07-29 -%% -Type: language -Subtag: kmv -Description: Karipúna Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: kmw -Description: Komo (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: kmx -Description: Waboda -Added: 2009-07-29 -%% -Type: language -Subtag: kmy -Description: Koma -Added: 2009-07-29 -%% -Type: language -Subtag: kmz -Description: Khorasani Turkish -Added: 2009-07-29 -%% -Type: language -Subtag: kna -Description: Dera (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: knb -Description: Lubuagan Kalinga -Added: 2009-07-29 -%% -Type: language -Subtag: knc -Description: Central Kanuri -Added: 2009-07-29 -Macrolanguage: kr -%% -Type: language -Subtag: knd -Description: Konda -Added: 2009-07-29 -%% -Type: language -Subtag: kne -Description: Kankanaey -Added: 2009-07-29 -%% -Type: language -Subtag: knf -Description: Mankanya -Added: 2009-07-29 -%% -Type: language -Subtag: kng -Description: Koongo -Added: 2009-07-29 -Macrolanguage: kg -%% -Type: language -Subtag: kni -Description: Kanufi -Added: 2009-07-29 -%% -Type: language -Subtag: knj -Description: Western Kanjobal -Added: 2009-07-29 -%% -Type: language -Subtag: knk -Description: Kuranko -Added: 2009-07-29 -%% -Type: language -Subtag: knl -Description: Keninjal -Added: 2009-07-29 -%% -Type: language -Subtag: knm -Description: Kanamarí -Added: 2009-07-29 -%% -Type: language -Subtag: knn -Description: Konkani (individual language) -Added: 2009-07-29 -Macrolanguage: kok -%% -Type: language -Subtag: kno -Description: Kono (Sierra Leone) -Added: 2009-07-29 -%% -Type: language -Subtag: knp -Description: Kwanja -Added: 2009-07-29 -%% -Type: language -Subtag: knq -Description: Kintaq -Added: 2009-07-29 -%% -Type: language -Subtag: knr -Description: Kaningra -Added: 2009-07-29 -%% -Type: language -Subtag: kns -Description: Kensiu -Added: 2009-07-29 -%% -Type: language -Subtag: knt -Description: Panoan Katukína -Added: 2009-07-29 -%% -Type: language -Subtag: knu -Description: Kono (Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: knv -Description: Tabo -Added: 2009-07-29 -%% -Type: language -Subtag: knw -Description: Kung-Ekoka -Added: 2009-07-29 -%% -Type: language -Subtag: knx -Description: Kendayan -Description: Salako -Added: 2009-07-29 -%% -Type: language -Subtag: kny -Description: Kanyok -Added: 2009-07-29 -%% -Type: language -Subtag: knz -Description: Kalamsé -Added: 2009-07-29 -%% -Type: language -Subtag: koa -Description: Konomala -Added: 2009-07-29 -%% -Type: language -Subtag: koc -Description: Kpati -Added: 2009-07-29 -%% -Type: language -Subtag: kod -Description: Kodi -Added: 2009-07-29 -%% -Type: language -Subtag: koe -Description: Kacipo-Balesi -Added: 2009-07-29 -%% -Type: language -Subtag: kof -Description: Kubi -Added: 2009-07-29 -%% -Type: language -Subtag: kog -Description: Cogui -Description: Kogi -Added: 2009-07-29 -%% -Type: language -Subtag: koh -Description: Koyo -Added: 2009-07-29 -%% -Type: language -Subtag: koi -Description: Komi-Permyak -Added: 2009-07-29 -Macrolanguage: kv -%% -Type: language -Subtag: koj -Description: Sara Dunjo -Added: 2009-07-29 -%% -Type: language -Subtag: kok -Description: Konkani (macrolanguage) -Added: 2005-10-16 -Suppress-Script: Deva -Scope: macrolanguage -%% -Type: language -Subtag: kol -Description: Kol (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: koo -Description: Konzo -Added: 2009-07-29 -%% -Type: language -Subtag: kop -Description: Waube -Added: 2009-07-29 -%% -Type: language -Subtag: koq -Description: Kota (Gabon) -Added: 2009-07-29 -%% -Type: language -Subtag: kos -Description: Kosraean -Added: 2005-10-16 -%% -Type: language -Subtag: kot -Description: Lagwan -Added: 2009-07-29 -%% -Type: language -Subtag: kou -Description: Koke -Added: 2009-07-29 -%% -Type: language -Subtag: kov -Description: Kudu-Camo -Added: 2009-07-29 -%% -Type: language -Subtag: kow -Description: Kugama -Added: 2009-07-29 -%% -Type: language -Subtag: kox -Description: Coxima -Added: 2009-07-29 -%% -Type: language -Subtag: koy -Description: Koyukon -Added: 2009-07-29 -%% -Type: language -Subtag: koz -Description: Korak -Added: 2009-07-29 -%% -Type: language -Subtag: kpa -Description: Kutto -Added: 2009-07-29 -%% -Type: language -Subtag: kpb -Description: Mullu Kurumba -Added: 2009-07-29 -%% -Type: language -Subtag: kpc -Description: Curripaco -Added: 2009-07-29 -%% -Type: language -Subtag: kpd -Description: Koba -Added: 2009-07-29 -%% -Type: language -Subtag: kpe -Description: Kpelle -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: kpf -Description: Komba -Added: 2009-07-29 -%% -Type: language -Subtag: kpg -Description: Kapingamarangi -Added: 2009-07-29 -%% -Type: language -Subtag: kph -Description: Kplang -Added: 2009-07-29 -%% -Type: language -Subtag: kpi -Description: Kofei -Added: 2009-07-29 -%% -Type: language -Subtag: kpj -Description: Karajá -Added: 2009-07-29 -%% -Type: language -Subtag: kpk -Description: Kpan -Added: 2009-07-29 -%% -Type: language -Subtag: kpl -Description: Kpala -Added: 2009-07-29 -%% -Type: language -Subtag: kpm -Description: Koho -Added: 2009-07-29 -%% -Type: language -Subtag: kpn -Description: Kepkiriwát -Added: 2009-07-29 -%% -Type: language -Subtag: kpo -Description: Ikposo -Added: 2009-07-29 -%% -Type: language -Subtag: kpp -Description: Paku Karen -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see jkm, jkp -%% -Type: language -Subtag: kpq -Description: Korupun-Sela -Added: 2009-07-29 -%% -Type: language -Subtag: kpr -Description: Korafe-Yegha -Added: 2009-07-29 -%% -Type: language -Subtag: kps -Description: Tehit -Added: 2009-07-29 -%% -Type: language -Subtag: kpt -Description: Karata -Added: 2009-07-29 -%% -Type: language -Subtag: kpu -Description: Kafoa -Added: 2009-07-29 -%% -Type: language -Subtag: kpv -Description: Komi-Zyrian -Added: 2009-07-29 -Macrolanguage: kv -%% -Type: language -Subtag: kpw -Description: Kobon -Added: 2009-07-29 -%% -Type: language -Subtag: kpx -Description: Mountain Koiali -Added: 2009-07-29 -%% -Type: language -Subtag: kpy -Description: Koryak -Added: 2009-07-29 -%% -Type: language -Subtag: kpz -Description: Kupsabiny -Added: 2009-07-29 -%% -Type: language -Subtag: kqa -Description: Mum -Added: 2009-07-29 -%% -Type: language -Subtag: kqb -Description: Kovai -Added: 2009-07-29 -%% -Type: language -Subtag: kqc -Description: Doromu-Koki -Added: 2009-07-29 -%% -Type: language -Subtag: kqd -Description: Koy Sanjaq Surat -Added: 2009-07-29 -%% -Type: language -Subtag: kqe -Description: Kalagan -Added: 2009-07-29 -%% -Type: language -Subtag: kqf -Description: Kakabai -Added: 2009-07-29 -%% -Type: language -Subtag: kqg -Description: Khe -Added: 2009-07-29 -%% -Type: language -Subtag: kqh -Description: Kisankasa -Added: 2009-07-29 -%% -Type: language -Subtag: kqi -Description: Koitabu -Added: 2009-07-29 -%% -Type: language -Subtag: kqj -Description: Koromira -Added: 2009-07-29 -%% -Type: language -Subtag: kqk -Description: Kotafon Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: kql -Description: Kyenele -Added: 2009-07-29 -%% -Type: language -Subtag: kqm -Description: Khisa -Added: 2009-07-29 -%% -Type: language -Subtag: kqn -Description: Kaonde -Added: 2009-07-29 -%% -Type: language -Subtag: kqo -Description: Eastern Krahn -Added: 2009-07-29 -%% -Type: language -Subtag: kqp -Description: Kimré -Added: 2009-07-29 -%% -Type: language -Subtag: kqq -Description: Krenak -Added: 2009-07-29 -%% -Type: language -Subtag: kqr -Description: Kimaragang -Added: 2009-07-29 -%% -Type: language -Subtag: kqs -Description: Northern Kissi -Added: 2009-07-29 -%% -Type: language -Subtag: kqt -Description: Klias River Kadazan -Added: 2009-07-29 -%% -Type: language -Subtag: kqu -Description: Seroa -Added: 2009-07-29 -%% -Type: language -Subtag: kqv -Description: Okolod -Added: 2009-07-29 -%% -Type: language -Subtag: kqw -Description: Kandas -Added: 2009-07-29 -%% -Type: language -Subtag: kqx -Description: Mser -Added: 2009-07-29 -%% -Type: language -Subtag: kqy -Description: Koorete -Added: 2009-07-29 -%% -Type: language -Subtag: kqz -Description: Korana -Added: 2009-07-29 -%% -Type: language -Subtag: kra -Description: Kumhali -Added: 2009-07-29 -%% -Type: language -Subtag: krb -Description: Karkin -Added: 2009-07-29 -%% -Type: language -Subtag: krc -Description: Karachay-Balkar -Added: 2005-10-16 -%% -Type: language -Subtag: krd -Description: Kairui-Midiki -Added: 2009-07-29 -%% -Type: language -Subtag: kre -Description: Panará -Added: 2009-07-29 -%% -Type: language -Subtag: krf -Description: Koro (Vanuatu) -Added: 2009-07-29 -%% -Type: language -Subtag: krh -Description: Kurama -Added: 2009-07-29 -%% -Type: language -Subtag: kri -Description: Krio -Added: 2009-07-29 -%% -Type: language -Subtag: krj -Description: Kinaray-A -Added: 2009-07-29 -%% -Type: language -Subtag: krk -Description: Kerek -Added: 2009-07-29 -%% -Type: language -Subtag: krl -Description: Karelian -Added: 2006-03-08 -%% -Type: language -Subtag: krm -Description: Krim -Added: 2009-07-29 -%% -Type: language -Subtag: krn -Description: Sapo -Added: 2009-07-29 -%% -Type: language -Subtag: kro -Description: Kru languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: krp -Description: Korop -Added: 2009-07-29 -%% -Type: language -Subtag: krr -Description: Kru'ng 2 -Added: 2009-07-29 -%% -Type: language -Subtag: krs -Description: Gbaya (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: krt -Description: Tumari Kanuri -Added: 2009-07-29 -Macrolanguage: kr -%% -Type: language -Subtag: kru -Description: Kurukh -Added: 2005-10-16 -%% -Type: language -Subtag: krv -Description: Kavet -Added: 2009-07-29 -%% -Type: language -Subtag: krw -Description: Western Krahn -Added: 2009-07-29 -%% -Type: language -Subtag: krx -Description: Karon -Added: 2009-07-29 -%% -Type: language -Subtag: kry -Description: Kryts -Added: 2009-07-29 -%% -Type: language -Subtag: krz -Description: Sota Kanum -Added: 2009-07-29 -%% -Type: language -Subtag: ksa -Description: Shuwa-Zamani -Added: 2009-07-29 -%% -Type: language -Subtag: ksb -Description: Shambala -Added: 2009-07-29 -%% -Type: language -Subtag: ksc -Description: Southern Kalinga -Added: 2009-07-29 -%% -Type: language -Subtag: ksd -Description: Kuanua -Added: 2009-07-29 -%% -Type: language -Subtag: kse -Description: Kuni -Added: 2009-07-29 -%% -Type: language -Subtag: ksf -Description: Bafia -Added: 2009-07-29 -%% -Type: language -Subtag: ksg -Description: Kusaghe -Added: 2009-07-29 -%% -Type: language -Subtag: ksh -Description: Kölsch -Added: 2009-07-29 -%% -Type: language -Subtag: ksi -Description: Krisa -Description: I'saka -Added: 2009-07-29 -%% -Type: language -Subtag: ksj -Description: Uare -Added: 2009-07-29 -%% -Type: language -Subtag: ksk -Description: Kansa -Added: 2009-07-29 -%% -Type: language -Subtag: ksl -Description: Kumalu -Added: 2009-07-29 -%% -Type: language -Subtag: ksm -Description: Kumba -Added: 2009-07-29 -%% -Type: language -Subtag: ksn -Description: Kasiguranin -Added: 2009-07-29 -%% -Type: language -Subtag: kso -Description: Kofa -Added: 2009-07-29 -%% -Type: language -Subtag: ksp -Description: Kaba -Added: 2009-07-29 -%% -Type: language -Subtag: ksq -Description: Kwaami -Added: 2009-07-29 -%% -Type: language -Subtag: ksr -Description: Borong -Added: 2009-07-29 -%% -Type: language -Subtag: kss -Description: Southern Kisi -Added: 2009-07-29 -%% -Type: language -Subtag: kst -Description: Winyé -Added: 2009-07-29 -%% -Type: language -Subtag: ksu -Description: Khamyang -Added: 2009-07-29 -%% -Type: language -Subtag: ksv -Description: Kusu -Added: 2009-07-29 -%% -Type: language -Subtag: ksw -Description: S'gaw Karen -Added: 2009-07-29 -%% -Type: language -Subtag: ksx -Description: Kedang -Added: 2009-07-29 -%% -Type: language -Subtag: ksy -Description: Kharia Thar -Added: 2009-07-29 -%% -Type: language -Subtag: ksz -Description: Kodaku -Added: 2009-07-29 -%% -Type: language -Subtag: kta -Description: Katua -Added: 2009-07-29 -%% -Type: language -Subtag: ktb -Description: Kambaata -Added: 2009-07-29 -%% -Type: language -Subtag: ktc -Description: Kholok -Added: 2009-07-29 -%% -Type: language -Subtag: ktd -Description: Kokata -Added: 2009-07-29 -%% -Type: language -Subtag: kte -Description: Nubri -Added: 2009-07-29 -%% -Type: language -Subtag: ktf -Description: Kwami -Added: 2009-07-29 -%% -Type: language -Subtag: ktg -Description: Kalkutung -Added: 2009-07-29 -%% -Type: language -Subtag: kth -Description: Karanga -Added: 2009-07-29 -%% -Type: language -Subtag: kti -Description: North Muyu -Added: 2009-07-29 -%% -Type: language -Subtag: ktj -Description: Plapo Krumen -Added: 2009-07-29 -%% -Type: language -Subtag: ktk -Description: Kaniet -Added: 2009-07-29 -%% -Type: language -Subtag: ktl -Description: Koroshi -Added: 2009-07-29 -%% -Type: language -Subtag: ktm -Description: Kurti -Added: 2009-07-29 -%% -Type: language -Subtag: ktn -Description: Karitiâna -Added: 2009-07-29 -%% -Type: language -Subtag: kto -Description: Kuot -Added: 2009-07-29 -%% -Type: language -Subtag: ktp -Description: Kaduo -Added: 2009-07-29 -%% -Type: language -Subtag: ktq -Description: Katabaga -Added: 2009-07-29 -%% -Type: language -Subtag: ktr -Description: Kota Marudu Tinagas -Added: 2009-07-29 -%% -Type: language -Subtag: kts -Description: South Muyu -Added: 2009-07-29 -%% -Type: language -Subtag: ktt -Description: Ketum -Added: 2009-07-29 -%% -Type: language -Subtag: ktu -Description: Kituba (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: ktv -Description: Eastern Katu -Added: 2009-07-29 -%% -Type: language -Subtag: ktw -Description: Kato -Added: 2009-07-29 -%% -Type: language -Subtag: ktx -Description: Kaxararí -Added: 2009-07-29 -%% -Type: language -Subtag: kty -Description: Kango (Bas-Uélé District) -Added: 2009-07-29 -%% -Type: language -Subtag: ktz -Description: Ju/'hoan -Added: 2009-07-29 -%% -Type: language -Subtag: kub -Description: Kutep -Added: 2009-07-29 -%% -Type: language -Subtag: kuc -Description: Kwinsu -Added: 2009-07-29 -%% -Type: language -Subtag: kud -Description: 'Auhelawa -Added: 2009-07-29 -%% -Type: language -Subtag: kue -Description: Kuman -Added: 2009-07-29 -%% -Type: language -Subtag: kuf -Description: Western Katu -Added: 2009-07-29 -%% -Type: language -Subtag: kug -Description: Kupa -Added: 2009-07-29 -%% -Type: language -Subtag: kuh -Description: Kushi -Added: 2009-07-29 -%% -Type: language -Subtag: kui -Description: Kuikúro-Kalapálo -Added: 2009-07-29 -%% -Type: language -Subtag: kuj -Description: Kuria -Added: 2009-07-29 -%% -Type: language -Subtag: kuk -Description: Kepo' -Added: 2009-07-29 -%% -Type: language -Subtag: kul -Description: Kulere -Added: 2009-07-29 -%% -Type: language -Subtag: kum -Description: Kumyk -Added: 2005-10-16 -%% -Type: language -Subtag: kun -Description: Kunama -Added: 2009-07-29 -%% -Type: language -Subtag: kuo -Description: Kumukio -Added: 2009-07-29 -%% -Type: language -Subtag: kup -Description: Kunimaipa -Added: 2009-07-29 -%% -Type: language -Subtag: kuq -Description: Karipuna -Added: 2009-07-29 -%% -Type: language -Subtag: kus -Description: Kusaal -Added: 2009-07-29 -%% -Type: language -Subtag: kut -Description: Kutenai -Added: 2005-10-16 -%% -Type: language -Subtag: kuu -Description: Upper Kuskokwim -Added: 2009-07-29 -%% -Type: language -Subtag: kuv -Description: Kur -Added: 2009-07-29 -%% -Type: language -Subtag: kuw -Description: Kpagua -Added: 2009-07-29 -%% -Type: language -Subtag: kux -Description: Kukatja -Added: 2009-07-29 -%% -Type: language -Subtag: kuy -Description: Kuuku-Ya'u -Added: 2009-07-29 -%% -Type: language -Subtag: kuz -Description: Kunza -Added: 2009-07-29 -%% -Type: language -Subtag: kva -Description: Bagvalal -Added: 2009-07-29 -%% -Type: language -Subtag: kvb -Description: Kubu -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: kvc -Description: Kove -Added: 2009-07-29 -%% -Type: language -Subtag: kvd -Description: Kui (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: kve -Description: Kalabakan -Added: 2009-07-29 -%% -Type: language -Subtag: kvf -Description: Kabalai -Added: 2009-07-29 -%% -Type: language -Subtag: kvg -Description: Kuni-Boazi -Added: 2009-07-29 -%% -Type: language -Subtag: kvh -Description: Komodo -Added: 2009-07-29 -%% -Type: language -Subtag: kvi -Description: Kwang -Added: 2009-07-29 -%% -Type: language -Subtag: kvj -Description: Psikye -Added: 2009-07-29 -%% -Type: language -Subtag: kvk -Description: Korean Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: kvl -Description: Kayaw -Added: 2009-07-29 -%% -Type: language -Subtag: kvm -Description: Kendem -Added: 2009-07-29 -%% -Type: language -Subtag: kvn -Description: Border Kuna -Added: 2009-07-29 -%% -Type: language -Subtag: kvo -Description: Dobel -Added: 2009-07-29 -%% -Type: language -Subtag: kvp -Description: Kompane -Added: 2009-07-29 -%% -Type: language -Subtag: kvq -Description: Geba Karen -Added: 2009-07-29 -%% -Type: language -Subtag: kvr -Description: Kerinci -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: kvs -Description: Kunggara -Added: 2009-07-29 -%% -Type: language -Subtag: kvt -Description: Lahta Karen -Description: Lahta -Added: 2009-07-29 -%% -Type: language -Subtag: kvu -Description: Yinbaw Karen -Added: 2009-07-29 -%% -Type: language -Subtag: kvv -Description: Kola -Added: 2009-07-29 -%% -Type: language -Subtag: kvw -Description: Wersing -Added: 2009-07-29 -%% -Type: language -Subtag: kvx -Description: Parkari Koli -Added: 2009-07-29 -%% -Type: language -Subtag: kvy -Description: Yintale Karen -Description: Yintale -Added: 2009-07-29 -%% -Type: language -Subtag: kvz -Description: Tsakwambo -Description: Tsaukambo -Added: 2009-07-29 -%% -Type: language -Subtag: kwa -Description: Dâw -Added: 2009-07-29 -%% -Type: language -Subtag: kwb -Description: Kwa -Added: 2009-07-29 -%% -Type: language -Subtag: kwc -Description: Likwala -Added: 2009-07-29 -%% -Type: language -Subtag: kwd -Description: Kwaio -Added: 2009-07-29 -%% -Type: language -Subtag: kwe -Description: Kwerba -Added: 2009-07-29 -%% -Type: language -Subtag: kwf -Description: Kwara'ae -Added: 2009-07-29 -%% -Type: language -Subtag: kwg -Description: Sara Kaba Deme -Added: 2009-07-29 -%% -Type: language -Subtag: kwh -Description: Kowiai -Added: 2009-07-29 -%% -Type: language -Subtag: kwi -Description: Awa-Cuaiquer -Added: 2009-07-29 -%% -Type: language -Subtag: kwj -Description: Kwanga -Added: 2009-07-29 -%% -Type: language -Subtag: kwk -Description: Kwakiutl -Added: 2009-07-29 -%% -Type: language -Subtag: kwl -Description: Kofyar -Added: 2009-07-29 -%% -Type: language -Subtag: kwm -Description: Kwambi -Added: 2009-07-29 -%% -Type: language -Subtag: kwn -Description: Kwangali -Added: 2009-07-29 -%% -Type: language -Subtag: kwo -Description: Kwomtari -Added: 2009-07-29 -%% -Type: language -Subtag: kwp -Description: Kodia -Added: 2009-07-29 -%% -Type: language -Subtag: kwq -Description: Kwak -Added: 2009-07-29 -%% -Type: language -Subtag: kwr -Description: Kwer -Added: 2009-07-29 -%% -Type: language -Subtag: kws -Description: Kwese -Added: 2009-07-29 -%% -Type: language -Subtag: kwt -Description: Kwesten -Added: 2009-07-29 -%% -Type: language -Subtag: kwu -Description: Kwakum -Added: 2009-07-29 -%% -Type: language -Subtag: kwv -Description: Sara Kaba Náà -Added: 2009-07-29 -%% -Type: language -Subtag: kww -Description: Kwinti -Added: 2009-07-29 -%% -Type: language -Subtag: kwx -Description: Khirwar -Added: 2009-07-29 -%% -Type: language -Subtag: kwy -Description: San Salvador Kongo -Added: 2009-07-29 -Macrolanguage: kg -%% -Type: language -Subtag: kwz -Description: Kwadi -Added: 2009-07-29 -%% -Type: language -Subtag: kxa -Description: Kairiru -Added: 2009-07-29 -%% -Type: language -Subtag: kxb -Description: Krobu -Added: 2009-07-29 -%% -Type: language -Subtag: kxc -Description: Konso -Description: Khonso -Added: 2009-07-29 -%% -Type: language -Subtag: kxd -Description: Brunei -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: kxe -Description: Kakihum -Added: 2009-07-29 -%% -Type: language -Subtag: kxf -Description: Manumanaw Karen -Description: Manumanaw -Added: 2009-07-29 -%% -Type: language -Subtag: kxh -Description: Karo (Ethiopia) -Added: 2009-07-29 -%% -Type: language -Subtag: kxi -Description: Keningau Murut -Added: 2009-07-29 -%% -Type: language -Subtag: kxj -Description: Kulfa -Added: 2009-07-29 -%% -Type: language -Subtag: kxk -Description: Zayein Karen -Added: 2009-07-29 -%% -Type: language -Subtag: kxl -Description: Nepali Kurux -Added: 2009-07-29 -%% -Type: language -Subtag: kxm -Description: Northern Khmer -Added: 2009-07-29 -%% -Type: language -Subtag: kxn -Description: Kanowit-Tanjong Melanau -Added: 2009-07-29 -%% -Type: language -Subtag: kxo -Description: Kanoé -Added: 2009-07-29 -%% -Type: language -Subtag: kxp -Description: Wadiyara Koli -Added: 2009-07-29 -%% -Type: language -Subtag: kxq -Description: Smärky Kanum -Added: 2009-07-29 -%% -Type: language -Subtag: kxr -Description: Koro (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: kxs -Description: Kangjia -Added: 2009-07-29 -%% -Type: language -Subtag: kxt -Description: Koiwat -Added: 2009-07-29 -%% -Type: language -Subtag: kxu -Description: Kui (India) -Added: 2009-07-29 -%% -Type: language -Subtag: kxv -Description: Kuvi -Added: 2009-07-29 -%% -Type: language -Subtag: kxw -Description: Konai -Added: 2009-07-29 -%% -Type: language -Subtag: kxx -Description: Likuba -Added: 2009-07-29 -%% -Type: language -Subtag: kxy -Description: Kayong -Added: 2009-07-29 -%% -Type: language -Subtag: kxz -Description: Kerewo -Added: 2009-07-29 -%% -Type: language -Subtag: kya -Description: Kwaya -Added: 2009-07-29 -%% -Type: language -Subtag: kyb -Description: Butbut Kalinga -Added: 2009-07-29 -%% -Type: language -Subtag: kyc -Description: Kyaka -Added: 2009-07-29 -%% -Type: language -Subtag: kyd -Description: Karey -Added: 2009-07-29 -%% -Type: language -Subtag: kye -Description: Krache -Added: 2009-07-29 -%% -Type: language -Subtag: kyf -Description: Kouya -Added: 2009-07-29 -%% -Type: language -Subtag: kyg -Description: Keyagana -Added: 2009-07-29 -%% -Type: language -Subtag: kyh -Description: Karok -Added: 2009-07-29 -%% -Type: language -Subtag: kyi -Description: Kiput -Added: 2009-07-29 -%% -Type: language -Subtag: kyj -Description: Karao -Added: 2009-07-29 -%% -Type: language -Subtag: kyk -Description: Kamayo -Added: 2009-07-29 -%% -Type: language -Subtag: kyl -Description: Kalapuya -Added: 2009-07-29 -%% -Type: language -Subtag: kym -Description: Kpatili -Added: 2009-07-29 -%% -Type: language -Subtag: kyn -Description: Northern Binukidnon -Added: 2009-07-29 -%% -Type: language -Subtag: kyo -Description: Kelon -Added: 2009-07-29 -%% -Type: language -Subtag: kyp -Description: Kang -Added: 2009-07-29 -%% -Type: language -Subtag: kyq -Description: Kenga -Added: 2009-07-29 -%% -Type: language -Subtag: kyr -Description: Kuruáya -Added: 2009-07-29 -%% -Type: language -Subtag: kys -Description: Baram Kayan -Added: 2009-07-29 -%% -Type: language -Subtag: kyt -Description: Kayagar -Added: 2009-07-29 -%% -Type: language -Subtag: kyu -Description: Western Kayah -Added: 2009-07-29 -%% -Type: language -Subtag: kyv -Description: Kayort -Added: 2009-07-29 -%% -Type: language -Subtag: kyw -Description: Kudmali -Added: 2009-07-29 -%% -Type: language -Subtag: kyx -Description: Rapoisi -Added: 2009-07-29 -%% -Type: language -Subtag: kyy -Description: Kambaira -Added: 2009-07-29 -%% -Type: language -Subtag: kyz -Description: Kayabí -Added: 2009-07-29 -%% -Type: language -Subtag: kza -Description: Western Karaboro -Added: 2009-07-29 -%% -Type: language -Subtag: kzb -Description: Kaibobo -Added: 2009-07-29 -%% -Type: language -Subtag: kzc -Description: Bondoukou Kulango -Added: 2009-07-29 -%% -Type: language -Subtag: kzd -Description: Kadai -Added: 2009-07-29 -%% -Type: language -Subtag: kze -Description: Kosena -Added: 2009-07-29 -%% -Type: language -Subtag: kzf -Description: Da'a Kaili -Added: 2009-07-29 -%% -Type: language -Subtag: kzg -Description: Kikai -Added: 2009-07-29 -%% -Type: language -Subtag: kzh -Description: Kenuzi-Dongola -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see dgl, xnz -%% -Type: language -Subtag: kzi -Description: Kelabit -Added: 2009-07-29 -%% -Type: language -Subtag: kzj -Description: Coastal Kadazan -Added: 2009-07-29 -%% -Type: language -Subtag: kzk -Description: Kazukuru -Added: 2009-07-29 -%% -Type: language -Subtag: kzl -Description: Kayeli -Added: 2009-07-29 -%% -Type: language -Subtag: kzm -Description: Kais -Added: 2009-07-29 -%% -Type: language -Subtag: kzn -Description: Kokola -Added: 2009-07-29 -%% -Type: language -Subtag: kzo -Description: Kaningi -Added: 2009-07-29 -%% -Type: language -Subtag: kzp -Description: Kaidipang -Added: 2009-07-29 -%% -Type: language -Subtag: kzq -Description: Kaike -Added: 2009-07-29 -%% -Type: language -Subtag: kzr -Description: Karang -Added: 2009-07-29 -%% -Type: language -Subtag: kzs -Description: Sugut Dusun -Added: 2009-07-29 -%% -Type: language -Subtag: kzt -Description: Tambunan Dusun -Added: 2009-07-29 -%% -Type: language -Subtag: kzu -Description: Kayupulau -Added: 2009-07-29 -%% -Type: language -Subtag: kzv -Description: Komyandaret -Added: 2009-07-29 -%% -Type: language -Subtag: kzw -Description: Karirí-Xocó -Added: 2009-07-29 -%% -Type: language -Subtag: kzx -Description: Kamarian -Added: 2009-07-29 -%% -Type: language -Subtag: kzy -Description: Kango (Tshopo District) -Added: 2009-07-29 -%% -Type: language -Subtag: kzz -Description: Kalabra -Added: 2009-07-29 -%% -Type: language -Subtag: laa -Description: Southern Subanen -Added: 2009-07-29 -%% -Type: language -Subtag: lab -Description: Linear A -Added: 2009-07-29 -%% -Type: language -Subtag: lac -Description: Lacandon -Added: 2009-07-29 -%% -Type: language -Subtag: lad -Description: Ladino -Added: 2005-10-16 -%% -Type: language -Subtag: lae -Description: Pattani -Added: 2009-07-29 -%% -Type: language -Subtag: laf -Description: Lafofa -Added: 2009-07-29 -%% -Type: language -Subtag: lag -Description: Langi -Added: 2009-07-29 -%% -Type: language -Subtag: lah -Description: Lahnda -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: lai -Description: Lambya -Added: 2009-07-29 -%% -Type: language -Subtag: laj -Description: Lango (Uganda) -Added: 2009-07-29 -%% -Type: language -Subtag: lak -Description: Laka (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: lal -Description: Lalia -Added: 2009-07-29 -%% -Type: language -Subtag: lam -Description: Lamba -Added: 2005-10-16 -%% -Type: language -Subtag: lan -Description: Laru -Added: 2009-07-29 -%% -Type: language -Subtag: lap -Description: Laka (Chad) -Added: 2009-07-29 -%% -Type: language -Subtag: laq -Description: Qabiao -Added: 2009-07-29 -%% -Type: language -Subtag: lar -Description: Larteh -Added: 2009-07-29 -%% -Type: language -Subtag: las -Description: Lama (Togo) -Added: 2009-07-29 -%% -Type: language -Subtag: lau -Description: Laba -Added: 2009-07-29 -%% -Type: language -Subtag: law -Description: Lauje -Added: 2009-07-29 -%% -Type: language -Subtag: lax -Description: Tiwa -Added: 2009-07-29 -%% -Type: language -Subtag: lay -Description: Lama (Myanmar) -Added: 2009-07-29 -%% -Type: language -Subtag: laz -Description: Aribwatsa -Added: 2009-07-29 -%% -Type: language -Subtag: lba -Description: Lui -Added: 2009-07-29 -%% -Type: language -Subtag: lbb -Description: Label -Added: 2009-07-29 -%% -Type: language -Subtag: lbc -Description: Lakkia -Added: 2009-07-29 -%% -Type: language -Subtag: lbe -Description: Lak -Added: 2009-07-29 -%% -Type: language -Subtag: lbf -Description: Tinani -Added: 2009-07-29 -%% -Type: language -Subtag: lbg -Description: Laopang -Added: 2009-07-29 -%% -Type: language -Subtag: lbi -Description: La'bi -Added: 2009-07-29 -%% -Type: language -Subtag: lbj -Description: Ladakhi -Added: 2009-07-29 -%% -Type: language -Subtag: lbk -Description: Central Bontok -Added: 2010-03-11 -Macrolanguage: bnc -%% -Type: language -Subtag: lbl -Description: Libon Bikol -Added: 2010-03-11 -Macrolanguage: bik -%% -Type: language -Subtag: lbm -Description: Lodhi -Added: 2009-07-29 -%% -Type: language -Subtag: lbn -Description: Lamet -Added: 2009-07-29 -%% -Type: language -Subtag: lbo -Description: Laven -Added: 2009-07-29 -%% -Type: language -Subtag: lbq -Description: Wampar -Added: 2009-07-29 -%% -Type: language -Subtag: lbr -Description: Lohorung -Added: 2009-07-29 -%% -Type: language -Subtag: lbs -Description: Libyan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: lbt -Description: Lachi -Added: 2009-07-29 -%% -Type: language -Subtag: lbu -Description: Labu -Added: 2009-07-29 -%% -Type: language -Subtag: lbv -Description: Lavatbura-Lamusong -Added: 2009-07-29 -%% -Type: language -Subtag: lbw -Description: Tolaki -Added: 2009-07-29 -%% -Type: language -Subtag: lbx -Description: Lawangan -Added: 2009-07-29 -%% -Type: language -Subtag: lby -Description: Lamu-Lamu -Added: 2009-07-29 -%% -Type: language -Subtag: lbz -Description: Lardil -Added: 2009-07-29 -%% -Type: language -Subtag: lcc -Description: Legenyem -Added: 2009-07-29 -%% -Type: language -Subtag: lcd -Description: Lola -Added: 2009-07-29 -%% -Type: language -Subtag: lce -Description: Loncong -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: lcf -Description: Lubu -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: lch -Description: Luchazi -Added: 2009-07-29 -%% -Type: language -Subtag: lcl -Description: Lisela -Added: 2009-07-29 -%% -Type: language -Subtag: lcm -Description: Tungag -Added: 2009-07-29 -%% -Type: language -Subtag: lcp -Description: Western Lawa -Added: 2009-07-29 -%% -Type: language -Subtag: lcq -Description: Luhu -Added: 2009-07-29 -%% -Type: language -Subtag: lcs -Description: Lisabata-Nuniali -Added: 2009-07-29 -%% -Type: language -Subtag: lda -Description: Kla-Dan -Added: 2013-09-10 -%% -Type: language -Subtag: ldb -Description: Dũya -Added: 2009-07-29 -%% -Type: language -Subtag: ldd -Description: Luri -Added: 2009-07-29 -%% -Type: language -Subtag: ldg -Description: Lenyima -Added: 2009-07-29 -%% -Type: language -Subtag: ldh -Description: Lamja-Dengsa-Tola -Added: 2009-07-29 -%% -Type: language -Subtag: ldi -Description: Laari -Added: 2009-07-29 -Macrolanguage: kg -%% -Type: language -Subtag: ldj -Description: Lemoro -Added: 2009-07-29 -%% -Type: language -Subtag: ldk -Description: Leelau -Added: 2009-07-29 -%% -Type: language -Subtag: ldl -Description: Kaan -Added: 2009-07-29 -%% -Type: language -Subtag: ldm -Description: Landoma -Added: 2009-07-29 -%% -Type: language -Subtag: ldn -Description: Láadan -Added: 2009-07-29 -%% -Type: language -Subtag: ldo -Description: Loo -Added: 2009-07-29 -%% -Type: language -Subtag: ldp -Description: Tso -Added: 2009-07-29 -%% -Type: language -Subtag: ldq -Description: Lufu -Added: 2009-07-29 -%% -Type: language -Subtag: lea -Description: Lega-Shabunda -Added: 2009-07-29 -%% -Type: language -Subtag: leb -Description: Lala-Bisa -Added: 2009-07-29 -%% -Type: language -Subtag: lec -Description: Leco -Added: 2009-07-29 -%% -Type: language -Subtag: led -Description: Lendu -Added: 2009-07-29 -%% -Type: language -Subtag: lee -Description: Lyélé -Added: 2009-07-29 -%% -Type: language -Subtag: lef -Description: Lelemi -Added: 2009-07-29 -%% -Type: language -Subtag: leg -Description: Lengua -Added: 2009-07-29 -%% -Type: language -Subtag: leh -Description: Lenje -Added: 2009-07-29 -%% -Type: language -Subtag: lei -Description: Lemio -Added: 2009-07-29 -%% -Type: language -Subtag: lej -Description: Lengola -Added: 2009-07-29 -%% -Type: language -Subtag: lek -Description: Leipon -Added: 2009-07-29 -%% -Type: language -Subtag: lel -Description: Lele (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: lem -Description: Nomaande -Added: 2009-07-29 -%% -Type: language -Subtag: len -Description: Lenca -Added: 2009-07-29 -%% -Type: language -Subtag: leo -Description: Leti (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: lep -Description: Lepcha -Added: 2009-07-29 -%% -Type: language -Subtag: leq -Description: Lembena -Added: 2009-07-29 -%% -Type: language -Subtag: ler -Description: Lenkau -Added: 2009-07-29 -%% -Type: language -Subtag: les -Description: Lese -Added: 2009-07-29 -%% -Type: language -Subtag: let -Description: Lesing-Gelimi -Description: Amio-Gelimi -Added: 2009-07-29 -%% -Type: language -Subtag: leu -Description: Kara (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: lev -Description: Lamma -Added: 2009-07-29 -%% -Type: language -Subtag: lew -Description: Ledo Kaili -Added: 2009-07-29 -%% -Type: language -Subtag: lex -Description: Luang -Added: 2009-07-29 -%% -Type: language -Subtag: ley -Description: Lemolang -Added: 2009-07-29 -%% -Type: language -Subtag: lez -Description: Lezghian -Added: 2005-10-16 -%% -Type: language -Subtag: lfa -Description: Lefa -Added: 2009-07-29 -%% -Type: language -Subtag: lfn -Description: Lingua Franca Nova -Added: 2009-07-29 -%% -Type: language -Subtag: lga -Description: Lungga -Added: 2009-07-29 -%% -Type: language -Subtag: lgb -Description: Laghu -Added: 2009-07-29 -%% -Type: language -Subtag: lgg -Description: Lugbara -Added: 2009-07-29 -%% -Type: language -Subtag: lgh -Description: Laghuu -Added: 2009-07-29 -%% -Type: language -Subtag: lgi -Description: Lengilu -Added: 2009-07-29 -%% -Type: language -Subtag: lgk -Description: Lingarak -Description: Neverver -Added: 2009-07-29 -%% -Type: language -Subtag: lgl -Description: Wala -Added: 2009-07-29 -%% -Type: language -Subtag: lgm -Description: Lega-Mwenga -Added: 2009-07-29 -%% -Type: language -Subtag: lgn -Description: Opuuo -Added: 2009-07-29 -%% -Type: language -Subtag: lgq -Description: Logba -Added: 2009-07-29 -%% -Type: language -Subtag: lgr -Description: Lengo -Added: 2009-07-29 -%% -Type: language -Subtag: lgt -Description: Pahi -Added: 2009-07-29 -%% -Type: language -Subtag: lgu -Description: Longgu -Added: 2009-07-29 -%% -Type: language -Subtag: lgz -Description: Ligenza -Added: 2009-07-29 -%% -Type: language -Subtag: lha -Description: Laha (Viet Nam) -Added: 2009-07-29 -%% -Type: language -Subtag: lhh -Description: Laha (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: lhi -Description: Lahu Shi -Added: 2009-07-29 -%% -Type: language -Subtag: lhl -Description: Lahul Lohar -Added: 2009-07-29 -%% -Type: language -Subtag: lhm -Description: Lhomi -Added: 2009-07-29 -%% -Type: language -Subtag: lhn -Description: Lahanan -Added: 2009-07-29 -%% -Type: language -Subtag: lhp -Description: Lhokpu -Added: 2009-07-29 -%% -Type: language -Subtag: lhs -Description: Mlahsö -Added: 2009-07-29 -%% -Type: language -Subtag: lht -Description: Lo-Toga -Added: 2009-07-29 -%% -Type: language -Subtag: lhu -Description: Lahu -Added: 2009-07-29 -%% -Type: language -Subtag: lia -Description: West-Central Limba -Added: 2009-07-29 -%% -Type: language -Subtag: lib -Description: Likum -Added: 2009-07-29 -%% -Type: language -Subtag: lic -Description: Hlai -Added: 2009-07-29 -%% -Type: language -Subtag: lid -Description: Nyindrou -Added: 2009-07-29 -%% -Type: language -Subtag: lie -Description: Likila -Added: 2009-07-29 -%% -Type: language -Subtag: lif -Description: Limbu -Added: 2009-07-29 -%% -Type: language -Subtag: lig -Description: Ligbi -Added: 2009-07-29 -%% -Type: language -Subtag: lih -Description: Lihir -Added: 2009-07-29 -%% -Type: language -Subtag: lii -Description: Lingkhim -Added: 2009-07-29 -%% -Type: language -Subtag: lij -Description: Ligurian -Added: 2009-07-29 -%% -Type: language -Subtag: lik -Description: Lika -Added: 2009-07-29 -%% -Type: language -Subtag: lil -Description: Lillooet -Added: 2009-07-29 -%% -Type: language -Subtag: lio -Description: Liki -Added: 2009-07-29 -%% -Type: language -Subtag: lip -Description: Sekpele -Added: 2009-07-29 -%% -Type: language -Subtag: liq -Description: Libido -Added: 2009-07-29 -%% -Type: language -Subtag: lir -Description: Liberian English -Added: 2009-07-29 -%% -Type: language -Subtag: lis -Description: Lisu -Added: 2009-07-29 -%% -Type: language -Subtag: liu -Description: Logorik -Added: 2009-07-29 -%% -Type: language -Subtag: liv -Description: Liv -Added: 2009-07-29 -%% -Type: language -Subtag: liw -Description: Col -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: lix -Description: Liabuku -Added: 2009-07-29 -%% -Type: language -Subtag: liy -Description: Banda-Bambari -Added: 2009-07-29 -%% -Type: language -Subtag: liz -Description: Libinza -Added: 2009-07-29 -%% -Type: language -Subtag: lja -Description: Golpa -Added: 2013-09-10 -%% -Type: language -Subtag: lje -Description: Rampi -Added: 2009-07-29 -%% -Type: language -Subtag: lji -Description: Laiyolo -Added: 2009-07-29 -%% -Type: language -Subtag: ljl -Description: Li'o -Added: 2009-07-29 -%% -Type: language -Subtag: ljp -Description: Lampung Api -Added: 2009-07-29 -%% -Type: language -Subtag: ljw -Description: Yirandali -Added: 2013-09-10 -%% -Type: language -Subtag: ljx -Description: Yuru -Added: 2013-09-10 -%% -Type: language -Subtag: lka -Description: Lakalei -Added: 2009-07-29 -%% -Type: language -Subtag: lkb -Description: Kabras -Description: Lukabaras -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lkc -Description: Kucong -Added: 2009-07-29 -%% -Type: language -Subtag: lkd -Description: Lakondê -Added: 2009-07-29 -%% -Type: language -Subtag: lke -Description: Kenyi -Added: 2009-07-29 -%% -Type: language -Subtag: lkh -Description: Lakha -Added: 2009-07-29 -%% -Type: language -Subtag: lki -Description: Laki -Added: 2009-07-29 -%% -Type: language -Subtag: lkj -Description: Remun -Added: 2009-07-29 -%% -Type: language -Subtag: lkl -Description: Laeko-Libuat -Added: 2009-07-29 -%% -Type: language -Subtag: lkm -Description: Kalaamaya -Added: 2013-09-10 -%% -Type: language -Subtag: lkn -Description: Lakon -Description: Vure -Added: 2009-07-29 -%% -Type: language -Subtag: lko -Description: Khayo -Description: Olukhayo -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lkr -Description: Päri -Added: 2009-07-29 -%% -Type: language -Subtag: lks -Description: Kisa -Description: Olushisa -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lkt -Description: Lakota -Added: 2009-07-29 -%% -Type: language -Subtag: lku -Description: Kungkari -Added: 2013-09-10 -%% -Type: language -Subtag: lky -Description: Lokoya -Added: 2009-07-29 -%% -Type: language -Subtag: lla -Description: Lala-Roba -Added: 2009-07-29 -%% -Type: language -Subtag: llb -Description: Lolo -Added: 2009-07-29 -%% -Type: language -Subtag: llc -Description: Lele (Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: lld -Description: Ladin -Added: 2009-07-29 -%% -Type: language -Subtag: lle -Description: Lele (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: llf -Description: Hermit -Added: 2009-07-29 -%% -Type: language -Subtag: llg -Description: Lole -Added: 2009-07-29 -%% -Type: language -Subtag: llh -Description: Lamu -Added: 2009-07-29 -%% -Type: language -Subtag: lli -Description: Teke-Laali -Added: 2009-07-29 -%% -Type: language -Subtag: llj -Description: Ladji Ladji -Added: 2012-08-12 -%% -Type: language -Subtag: llk -Description: Lelak -Added: 2009-07-29 -%% -Type: language -Subtag: lll -Description: Lilau -Added: 2009-07-29 -%% -Type: language -Subtag: llm -Description: Lasalimu -Added: 2009-07-29 -%% -Type: language -Subtag: lln -Description: Lele (Chad) -Added: 2009-07-29 -%% -Type: language -Subtag: llo -Description: Khlor -Added: 2009-07-29 -%% -Type: language -Subtag: llp -Description: North Efate -Added: 2009-07-29 -%% -Type: language -Subtag: llq -Description: Lolak -Added: 2009-07-29 -%% -Type: language -Subtag: lls -Description: Lithuanian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: llu -Description: Lau -Added: 2009-07-29 -%% -Type: language -Subtag: llx -Description: Lauan -Added: 2009-07-29 -%% -Type: language -Subtag: lma -Description: East Limba -Added: 2009-07-29 -%% -Type: language -Subtag: lmb -Description: Merei -Added: 2009-07-29 -%% -Type: language -Subtag: lmc -Description: Limilngan -Added: 2009-07-29 -%% -Type: language -Subtag: lmd -Description: Lumun -Added: 2009-07-29 -%% -Type: language -Subtag: lme -Description: Pévé -Added: 2009-07-29 -%% -Type: language -Subtag: lmf -Description: South Lembata -Added: 2009-07-29 -%% -Type: language -Subtag: lmg -Description: Lamogai -Added: 2009-07-29 -%% -Type: language -Subtag: lmh -Description: Lambichhong -Added: 2009-07-29 -%% -Type: language -Subtag: lmi -Description: Lombi -Added: 2009-07-29 -%% -Type: language -Subtag: lmj -Description: West Lembata -Added: 2009-07-29 -%% -Type: language -Subtag: lmk -Description: Lamkang -Added: 2009-07-29 -%% -Type: language -Subtag: lml -Description: Hano -Added: 2009-07-29 -%% -Type: language -Subtag: lmm -Description: Lamam -Added: 2009-07-29 -%% -Type: language -Subtag: lmn -Description: Lambadi -Added: 2009-07-29 -%% -Type: language -Subtag: lmo -Description: Lombard -Added: 2009-07-29 -%% -Type: language -Subtag: lmp -Description: Limbum -Added: 2009-07-29 -%% -Type: language -Subtag: lmq -Description: Lamatuka -Added: 2009-07-29 -%% -Type: language -Subtag: lmr -Description: Lamalera -Added: 2009-07-29 -%% -Type: language -Subtag: lmu -Description: Lamenu -Added: 2009-07-29 -%% -Type: language -Subtag: lmv -Description: Lomaiviti -Added: 2009-07-29 -%% -Type: language -Subtag: lmw -Description: Lake Miwok -Added: 2009-07-29 -%% -Type: language -Subtag: lmx -Description: Laimbue -Added: 2009-07-29 -%% -Type: language -Subtag: lmy -Description: Lamboya -Added: 2009-07-29 -%% -Type: language -Subtag: lmz -Description: Lumbee -Added: 2009-07-29 -%% -Type: language -Subtag: lna -Description: Langbashe -Added: 2009-07-29 -%% -Type: language -Subtag: lnb -Description: Mbalanhu -Added: 2009-07-29 -%% -Type: language -Subtag: lnd -Description: Lundayeh -Description: Lun Bawang -Added: 2009-07-29 -%% -Type: language -Subtag: lng -Description: Langobardic -Added: 2009-07-29 -%% -Type: language -Subtag: lnh -Description: Lanoh -Added: 2009-07-29 -%% -Type: language -Subtag: lni -Description: Daantanai' -Added: 2009-07-29 -%% -Type: language -Subtag: lnj -Description: Leningitij -Added: 2009-07-29 -%% -Type: language -Subtag: lnl -Description: South Central Banda -Added: 2009-07-29 -%% -Type: language -Subtag: lnm -Description: Langam -Added: 2009-07-29 -%% -Type: language -Subtag: lnn -Description: Lorediakarkar -Added: 2009-07-29 -%% -Type: language -Subtag: lno -Description: Lango (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: lns -Description: Lamnso' -Added: 2009-07-29 -%% -Type: language -Subtag: lnu -Description: Longuda -Added: 2009-07-29 -%% -Type: language -Subtag: lnw -Description: Lanima -Added: 2013-09-10 -%% -Type: language -Subtag: lnz -Description: Lonzo -Added: 2009-07-29 -%% -Type: language -Subtag: loa -Description: Loloda -Added: 2009-07-29 -%% -Type: language -Subtag: lob -Description: Lobi -Added: 2009-07-29 -%% -Type: language -Subtag: loc -Description: Inonhan -Added: 2009-07-29 -%% -Type: language -Subtag: loe -Description: Saluan -Added: 2009-07-29 -%% -Type: language -Subtag: lof -Description: Logol -Added: 2009-07-29 -%% -Type: language -Subtag: log -Description: Logo -Added: 2009-07-29 -%% -Type: language -Subtag: loh -Description: Narim -Added: 2009-07-29 -%% -Type: language -Subtag: loi -Description: Loma (Côte d'Ivoire) -Added: 2009-07-29 -%% -Type: language -Subtag: loj -Description: Lou -Added: 2009-07-29 -%% -Type: language -Subtag: lok -Description: Loko -Added: 2009-07-29 -%% -Type: language -Subtag: lol -Description: Mongo -Added: 2005-10-16 -%% -Type: language -Subtag: lom -Description: Loma (Liberia) -Added: 2009-07-29 -%% -Type: language -Subtag: lon -Description: Malawi Lomwe -Added: 2009-07-29 -%% -Type: language -Subtag: loo -Description: Lombo -Added: 2009-07-29 -%% -Type: language -Subtag: lop -Description: Lopa -Added: 2009-07-29 -%% -Type: language -Subtag: loq -Description: Lobala -Added: 2009-07-29 -%% -Type: language -Subtag: lor -Description: Téén -Added: 2009-07-29 -%% -Type: language -Subtag: los -Description: Loniu -Added: 2009-07-29 -%% -Type: language -Subtag: lot -Description: Otuho -Added: 2009-07-29 -%% -Type: language -Subtag: lou -Description: Louisiana Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: lov -Description: Lopi -Added: 2009-07-29 -%% -Type: language -Subtag: low -Description: Tampias Lobu -Added: 2009-07-29 -%% -Type: language -Subtag: lox -Description: Loun -Added: 2009-07-29 -%% -Type: language -Subtag: loy -Description: Loke -Added: 2009-07-29 -%% -Type: language -Subtag: loz -Description: Lozi -Added: 2005-10-16 -%% -Type: language -Subtag: lpa -Description: Lelepa -Added: 2009-07-29 -%% -Type: language -Subtag: lpe -Description: Lepki -Added: 2009-07-29 -%% -Type: language -Subtag: lpn -Description: Long Phuri Naga -Added: 2009-07-29 -%% -Type: language -Subtag: lpo -Description: Lipo -Added: 2009-07-29 -%% -Type: language -Subtag: lpx -Description: Lopit -Added: 2009-07-29 -%% -Type: language -Subtag: lra -Description: Rara Bakati' -Added: 2009-07-29 -%% -Type: language -Subtag: lrc -Description: Northern Luri -Added: 2009-07-29 -%% -Type: language -Subtag: lre -Description: Laurentian -Added: 2009-07-29 -%% -Type: language -Subtag: lrg -Description: Laragia -Added: 2009-07-29 -%% -Type: language -Subtag: lri -Description: Marachi -Description: Olumarachi -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lrk -Description: Loarki -Added: 2009-07-29 -%% -Type: language -Subtag: lrl -Description: Lari -Added: 2009-07-29 -%% -Type: language -Subtag: lrm -Description: Marama -Description: Olumarama -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lrn -Description: Lorang -Added: 2009-07-29 -%% -Type: language -Subtag: lro -Description: Laro -Added: 2009-07-29 -%% -Type: language -Subtag: lrr -Description: Southern Yamphu -Added: 2009-07-29 -%% -Type: language -Subtag: lrt -Description: Larantuka Malay -Added: 2009-07-29 -%% -Type: language -Subtag: lrv -Description: Larevat -Added: 2009-07-29 -%% -Type: language -Subtag: lrz -Description: Lemerig -Added: 2009-07-29 -%% -Type: language -Subtag: lsa -Description: Lasgerdi -Added: 2009-07-29 -%% -Type: language -Subtag: lsd -Description: Lishana Deni -Added: 2009-07-29 -%% -Type: language -Subtag: lse -Description: Lusengo -Added: 2009-07-29 -%% -Type: language -Subtag: lsg -Description: Lyons Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: lsh -Description: Lish -Added: 2009-07-29 -%% -Type: language -Subtag: lsi -Description: Lashi -Added: 2009-07-29 -%% -Type: language -Subtag: lsl -Description: Latvian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: lsm -Description: Saamia -Description: Olusamia -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lso -Description: Laos Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: lsp -Description: Panamanian Sign Language -Description: Lengua de Señas Panameñas -Added: 2009-07-29 -%% -Type: language -Subtag: lsr -Description: Aruop -Added: 2009-07-29 -%% -Type: language -Subtag: lss -Description: Lasi -Added: 2009-07-29 -%% -Type: language -Subtag: lst -Description: Trinidad and Tobago Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: lsy -Description: Mauritian Sign Language -Added: 2010-03-11 -%% -Type: language -Subtag: ltc -Description: Late Middle Chinese -Added: 2009-07-29 -%% -Type: language -Subtag: ltg -Description: Latgalian -Added: 2010-03-11 -Macrolanguage: lv -%% -Type: language -Subtag: lti -Description: Leti (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: ltn -Description: Latundê -Added: 2009-07-29 -%% -Type: language -Subtag: lto -Description: Tsotso -Description: Olutsotso -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lts -Description: Tachoni -Description: Lutachoni -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: ltu -Description: Latu -Added: 2009-07-29 -%% -Type: language -Subtag: lua -Description: Luba-Lulua -Added: 2005-10-16 -%% -Type: language -Subtag: luc -Description: Aringa -Added: 2009-07-29 -%% -Type: language -Subtag: lud -Description: Ludian -Added: 2009-07-29 -%% -Type: language -Subtag: lue -Description: Luvale -Added: 2009-07-29 -%% -Type: language -Subtag: luf -Description: Laua -Added: 2009-07-29 -%% -Type: language -Subtag: lui -Description: Luiseno -Added: 2005-10-16 -%% -Type: language -Subtag: luj -Description: Luna -Added: 2009-07-29 -%% -Type: language -Subtag: luk -Description: Lunanakha -Added: 2009-07-29 -%% -Type: language -Subtag: lul -Description: Olu'bo -Added: 2009-07-29 -%% -Type: language -Subtag: lum -Description: Luimbi -Added: 2009-07-29 -%% -Type: language -Subtag: lun -Description: Lunda -Added: 2005-10-16 -%% -Type: language -Subtag: luo -Description: Luo (Kenya and Tanzania) -Description: Dholuo -Added: 2005-10-16 -%% -Type: language -Subtag: lup -Description: Lumbu -Added: 2009-07-29 -%% -Type: language -Subtag: luq -Description: Lucumi -Added: 2009-07-29 -%% -Type: language -Subtag: lur -Description: Laura -Added: 2009-07-29 -%% -Type: language -Subtag: lus -Description: Lushai -Added: 2005-10-16 -%% -Type: language -Subtag: lut -Description: Lushootseed -Added: 2009-07-29 -%% -Type: language -Subtag: luu -Description: Lumba-Yakkha -Added: 2009-07-29 -%% -Type: language -Subtag: luv -Description: Luwati -Added: 2009-07-29 -%% -Type: language -Subtag: luw -Description: Luo (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: luy -Description: Luyia -Description: Oluluyia -Added: 2009-07-29 -Scope: macrolanguage -%% -Type: language -Subtag: luz -Description: Southern Luri -Added: 2009-07-29 -%% -Type: language -Subtag: lva -Description: Maku'a -Added: 2009-07-29 -%% -Type: language -Subtag: lvk -Description: Lavukaleve -Added: 2009-07-29 -%% -Type: language -Subtag: lvs -Description: Standard Latvian -Added: 2010-03-11 -Macrolanguage: lv -%% -Type: language -Subtag: lvu -Description: Levuka -Added: 2009-07-29 -%% -Type: language -Subtag: lwa -Description: Lwalu -Added: 2009-07-29 -%% -Type: language -Subtag: lwe -Description: Lewo Eleng -Added: 2009-07-29 -%% -Type: language -Subtag: lwg -Description: Wanga -Description: Oluwanga -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: lwh -Description: White Lachi -Added: 2009-07-29 -%% -Type: language -Subtag: lwl -Description: Eastern Lawa -Added: 2009-07-29 -%% -Type: language -Subtag: lwm -Description: Laomian -Added: 2009-07-29 -%% -Type: language -Subtag: lwo -Description: Luwo -Added: 2009-07-29 -%% -Type: language -Subtag: lwt -Description: Lewotobi -Added: 2009-07-29 -%% -Type: language -Subtag: lwu -Description: Lawu -Added: 2013-09-10 -%% -Type: language -Subtag: lww -Description: Lewo -Added: 2009-07-29 -%% -Type: language -Subtag: lya -Description: Layakha -Added: 2009-07-29 -%% -Type: language -Subtag: lyg -Description: Lyngngam -Added: 2009-07-29 -%% -Type: language -Subtag: lyn -Description: Luyana -Added: 2009-07-29 -%% -Type: language -Subtag: lzh -Description: Literary Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: lzl -Description: Litzlitz -Added: 2009-07-29 -%% -Type: language -Subtag: lzn -Description: Leinong Naga -Added: 2009-07-29 -%% -Type: language -Subtag: lzz -Description: Laz -Added: 2009-07-29 -%% -Type: language -Subtag: maa -Description: San Jerónimo Tecóatl Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: mab -Description: Yutanduchi Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mad -Description: Madurese -Added: 2005-10-16 -%% -Type: language -Subtag: mae -Description: Bo-Rukul -Added: 2009-07-29 -%% -Type: language -Subtag: maf -Description: Mafa -Added: 2009-07-29 -%% -Type: language -Subtag: mag -Description: Magahi -Added: 2005-10-16 -%% -Type: language -Subtag: mai -Description: Maithili -Added: 2005-10-16 -Suppress-Script: Deva -%% -Type: language -Subtag: maj -Description: Jalapa De Díaz Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: mak -Description: Makasar -Added: 2005-10-16 -%% -Type: language -Subtag: mam -Description: Mam -Added: 2009-07-29 -%% -Type: language -Subtag: man -Description: Mandingo -Description: Manding -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: map -Description: Austronesian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: maq -Description: Chiquihuitlán Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: mas -Description: Masai -Added: 2005-10-16 -%% -Type: language -Subtag: mat -Description: San Francisco Matlatzinca -Added: 2009-07-29 -%% -Type: language -Subtag: mau -Description: Huautla Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: mav -Description: Sateré-Mawé -Added: 2009-07-29 -%% -Type: language -Subtag: maw -Description: Mampruli -Added: 2009-07-29 -%% -Type: language -Subtag: max -Description: North Moluccan Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: maz -Description: Central Mazahua -Added: 2009-07-29 -%% -Type: language -Subtag: mba -Description: Higaonon -Added: 2009-07-29 -%% -Type: language -Subtag: mbb -Description: Western Bukidnon Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mbc -Description: Macushi -Added: 2009-07-29 -%% -Type: language -Subtag: mbd -Description: Dibabawon Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mbe -Description: Molale -Added: 2009-07-29 -%% -Type: language -Subtag: mbf -Description: Baba Malay -Added: 2009-07-29 -%% -Type: language -Subtag: mbh -Description: Mangseng -Added: 2009-07-29 -%% -Type: language -Subtag: mbi -Description: Ilianen Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mbj -Description: Nadëb -Added: 2009-07-29 -%% -Type: language -Subtag: mbk -Description: Malol -Added: 2009-07-29 -%% -Type: language -Subtag: mbl -Description: Maxakalí -Added: 2009-07-29 -%% -Type: language -Subtag: mbm -Description: Ombamba -Added: 2009-07-29 -%% -Type: language -Subtag: mbn -Description: Macaguán -Added: 2009-07-29 -%% -Type: language -Subtag: mbo -Description: Mbo (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: mbp -Description: Malayo -Added: 2009-07-29 -%% -Type: language -Subtag: mbq -Description: Maisin -Added: 2009-07-29 -%% -Type: language -Subtag: mbr -Description: Nukak Makú -Added: 2009-07-29 -%% -Type: language -Subtag: mbs -Description: Sarangani Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mbt -Description: Matigsalug Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mbu -Description: Mbula-Bwazza -Added: 2009-07-29 -%% -Type: language -Subtag: mbv -Description: Mbulungish -Added: 2009-07-29 -%% -Type: language -Subtag: mbw -Description: Maring -Added: 2009-07-29 -%% -Type: language -Subtag: mbx -Description: Mari (East Sepik Province) -Added: 2009-07-29 -%% -Type: language -Subtag: mby -Description: Memoni -Added: 2009-07-29 -%% -Type: language -Subtag: mbz -Description: Amoltepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mca -Description: Maca -Added: 2009-07-29 -%% -Type: language -Subtag: mcb -Description: Machiguenga -Added: 2009-07-29 -%% -Type: language -Subtag: mcc -Description: Bitur -Added: 2009-07-29 -%% -Type: language -Subtag: mcd -Description: Sharanahua -Added: 2009-07-29 -%% -Type: language -Subtag: mce -Description: Itundujia Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mcf -Description: Matsés -Added: 2009-07-29 -%% -Type: language -Subtag: mcg -Description: Mapoyo -Added: 2009-07-29 -%% -Type: language -Subtag: mch -Description: Maquiritari -Added: 2009-07-29 -%% -Type: language -Subtag: mci -Description: Mese -Added: 2009-07-29 -%% -Type: language -Subtag: mcj -Description: Mvanip -Added: 2009-07-29 -%% -Type: language -Subtag: mck -Description: Mbunda -Added: 2009-07-29 -%% -Type: language -Subtag: mcl -Description: Macaguaje -Added: 2009-07-29 -%% -Type: language -Subtag: mcm -Description: Malaccan Creole Portuguese -Added: 2009-07-29 -%% -Type: language -Subtag: mcn -Description: Masana -Added: 2009-07-29 -%% -Type: language -Subtag: mco -Description: Coatlán Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: mcp -Description: Makaa -Added: 2009-07-29 -%% -Type: language -Subtag: mcq -Description: Ese -Added: 2009-07-29 -%% -Type: language -Subtag: mcr -Description: Menya -Added: 2009-07-29 -%% -Type: language -Subtag: mcs -Description: Mambai -Added: 2009-07-29 -%% -Type: language -Subtag: mct -Description: Mengisa -Added: 2009-07-29 -%% -Type: language -Subtag: mcu -Description: Cameroon Mambila -Added: 2009-07-29 -%% -Type: language -Subtag: mcv -Description: Minanibai -Added: 2009-07-29 -%% -Type: language -Subtag: mcw -Description: Mawa (Chad) -Added: 2009-07-29 -%% -Type: language -Subtag: mcx -Description: Mpiemo -Added: 2009-07-29 -%% -Type: language -Subtag: mcy -Description: South Watut -Added: 2009-07-29 -%% -Type: language -Subtag: mcz -Description: Mawan -Added: 2009-07-29 -%% -Type: language -Subtag: mda -Description: Mada (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: mdb -Description: Morigi -Added: 2009-07-29 -%% -Type: language -Subtag: mdc -Description: Male (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: mdd -Description: Mbum -Added: 2009-07-29 -%% -Type: language -Subtag: mde -Description: Maba (Chad) -Added: 2009-07-29 -%% -Type: language -Subtag: mdf -Description: Moksha -Added: 2005-10-16 -%% -Type: language -Subtag: mdg -Description: Massalat -Added: 2009-07-29 -%% -Type: language -Subtag: mdh -Description: Maguindanaon -Added: 2009-07-29 -%% -Type: language -Subtag: mdi -Description: Mamvu -Added: 2009-07-29 -%% -Type: language -Subtag: mdj -Description: Mangbetu -Added: 2009-07-29 -%% -Type: language -Subtag: mdk -Description: Mangbutu -Added: 2009-07-29 -%% -Type: language -Subtag: mdl -Description: Maltese Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mdm -Description: Mayogo -Added: 2009-07-29 -%% -Type: language -Subtag: mdn -Description: Mbati -Added: 2009-07-29 -%% -Type: language -Subtag: mdp -Description: Mbala -Added: 2009-07-29 -%% -Type: language -Subtag: mdq -Description: Mbole -Added: 2009-07-29 -%% -Type: language -Subtag: mdr -Description: Mandar -Added: 2005-10-16 -%% -Type: language -Subtag: mds -Description: Maria (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: mdt -Description: Mbere -Added: 2009-07-29 -%% -Type: language -Subtag: mdu -Description: Mboko -Added: 2009-07-29 -%% -Type: language -Subtag: mdv -Description: Santa Lucía Monteverde Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mdw -Description: Mbosi -Added: 2009-07-29 -%% -Type: language -Subtag: mdx -Description: Dizin -Added: 2009-07-29 -%% -Type: language -Subtag: mdy -Description: Male (Ethiopia) -Added: 2009-07-29 -%% -Type: language -Subtag: mdz -Description: Suruí Do Pará -Added: 2009-07-29 -%% -Type: language -Subtag: mea -Description: Menka -Added: 2009-07-29 -%% -Type: language -Subtag: meb -Description: Ikobi -Added: 2009-07-29 -%% -Type: language -Subtag: mec -Description: Mara -Added: 2009-07-29 -%% -Type: language -Subtag: med -Description: Melpa -Added: 2009-07-29 -%% -Type: language -Subtag: mee -Description: Mengen -Added: 2009-07-29 -%% -Type: language -Subtag: mef -Description: Megam -Added: 2009-07-29 -%% -Type: language -Subtag: meg -Description: Mea -Added: 2009-07-29 -Deprecated: 2013-09-10 -Preferred-Value: cir -%% -Type: language -Subtag: meh -Description: Southwestern Tlaxiaco Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mei -Description: Midob -Added: 2009-07-29 -%% -Type: language -Subtag: mej -Description: Meyah -Added: 2009-07-29 -%% -Type: language -Subtag: mek -Description: Mekeo -Added: 2009-07-29 -%% -Type: language -Subtag: mel -Description: Central Melanau -Added: 2009-07-29 -%% -Type: language -Subtag: mem -Description: Mangala -Added: 2009-07-29 -%% -Type: language -Subtag: men -Description: Mende (Sierra Leone) -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: meo -Description: Kedah Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: mep -Description: Miriwung -Added: 2009-07-29 -%% -Type: language -Subtag: meq -Description: Merey -Added: 2009-07-29 -%% -Type: language -Subtag: mer -Description: Meru -Added: 2009-07-29 -%% -Type: language -Subtag: mes -Description: Masmaje -Added: 2009-07-29 -%% -Type: language -Subtag: met -Description: Mato -Added: 2009-07-29 -%% -Type: language -Subtag: meu -Description: Motu -Added: 2009-07-29 -%% -Type: language -Subtag: mev -Description: Mano -Added: 2009-07-29 -%% -Type: language -Subtag: mew -Description: Maaka -Added: 2009-07-29 -%% -Type: language -Subtag: mey -Description: Hassaniyya -Added: 2009-07-29 -%% -Type: language -Subtag: mez -Description: Menominee -Added: 2009-07-29 -%% -Type: language -Subtag: mfa -Description: Pattani Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: mfb -Description: Bangka -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: mfc -Description: Mba -Added: 2009-07-29 -%% -Type: language -Subtag: mfd -Description: Mendankwe-Nkwen -Added: 2009-07-29 -%% -Type: language -Subtag: mfe -Description: Morisyen -Added: 2009-07-29 -%% -Type: language -Subtag: mff -Description: Naki -Added: 2009-07-29 -%% -Type: language -Subtag: mfg -Description: Mogofin -Added: 2009-07-29 -%% -Type: language -Subtag: mfh -Description: Matal -Added: 2009-07-29 -%% -Type: language -Subtag: mfi -Description: Wandala -Added: 2009-07-29 -%% -Type: language -Subtag: mfj -Description: Mefele -Added: 2009-07-29 -%% -Type: language -Subtag: mfk -Description: North Mofu -Added: 2009-07-29 -%% -Type: language -Subtag: mfl -Description: Putai -Added: 2009-07-29 -%% -Type: language -Subtag: mfm -Description: Marghi South -Added: 2009-07-29 -%% -Type: language -Subtag: mfn -Description: Cross River Mbembe -Added: 2009-07-29 -%% -Type: language -Subtag: mfo -Description: Mbe -Added: 2009-07-29 -%% -Type: language -Subtag: mfp -Description: Makassar Malay -Added: 2009-07-29 -%% -Type: language -Subtag: mfq -Description: Moba -Added: 2009-07-29 -%% -Type: language -Subtag: mfr -Description: Marithiel -Added: 2009-07-29 -%% -Type: language -Subtag: mfs -Description: Mexican Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mft -Description: Mokerang -Added: 2009-07-29 -%% -Type: language -Subtag: mfu -Description: Mbwela -Added: 2009-07-29 -%% -Type: language -Subtag: mfv -Description: Mandjak -Added: 2009-07-29 -%% -Type: language -Subtag: mfw -Description: Mulaha -Added: 2009-07-29 -%% -Type: language -Subtag: mfx -Description: Melo -Added: 2009-07-29 -%% -Type: language -Subtag: mfy -Description: Mayo -Added: 2009-07-29 -%% -Type: language -Subtag: mfz -Description: Mabaan -Added: 2009-07-29 -%% -Type: language -Subtag: mga -Description: Middle Irish (900-1200) -Added: 2005-10-16 -%% -Type: language -Subtag: mgb -Description: Mararit -Added: 2009-07-29 -%% -Type: language -Subtag: mgc -Description: Morokodo -Added: 2009-07-29 -%% -Type: language -Subtag: mgd -Description: Moru -Added: 2009-07-29 -%% -Type: language -Subtag: mge -Description: Mango -Added: 2009-07-29 -%% -Type: language -Subtag: mgf -Description: Maklew -Added: 2009-07-29 -%% -Type: language -Subtag: mgg -Description: Mpumpong -Added: 2009-07-29 -%% -Type: language -Subtag: mgh -Description: Makhuwa-Meetto -Added: 2009-07-29 -%% -Type: language -Subtag: mgi -Description: Lijili -Added: 2009-07-29 -%% -Type: language -Subtag: mgj -Description: Abureni -Added: 2009-07-29 -%% -Type: language -Subtag: mgk -Description: Mawes -Added: 2009-07-29 -%% -Type: language -Subtag: mgl -Description: Maleu-Kilenge -Added: 2009-07-29 -%% -Type: language -Subtag: mgm -Description: Mambae -Added: 2009-07-29 -%% -Type: language -Subtag: mgn -Description: Mbangi -Added: 2009-07-29 -%% -Type: language -Subtag: mgo -Description: Meta' -Added: 2009-07-29 -%% -Type: language -Subtag: mgp -Description: Eastern Magar -Added: 2009-07-29 -%% -Type: language -Subtag: mgq -Description: Malila -Added: 2009-07-29 -%% -Type: language -Subtag: mgr -Description: Mambwe-Lungu -Added: 2009-07-29 -%% -Type: language -Subtag: mgs -Description: Manda (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: mgt -Description: Mongol -Added: 2009-07-29 -%% -Type: language -Subtag: mgu -Description: Mailu -Added: 2009-07-29 -%% -Type: language -Subtag: mgv -Description: Matengo -Added: 2009-07-29 -%% -Type: language -Subtag: mgw -Description: Matumbi -Added: 2009-07-29 -%% -Type: language -Subtag: mgx -Description: Omati -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see jbk, jmw -%% -Type: language -Subtag: mgy -Description: Mbunga -Added: 2009-07-29 -%% -Type: language -Subtag: mgz -Description: Mbugwe -Added: 2009-07-29 -%% -Type: language -Subtag: mha -Description: Manda (India) -Added: 2009-07-29 -%% -Type: language -Subtag: mhb -Description: Mahongwe -Added: 2009-07-29 -%% -Type: language -Subtag: mhc -Description: Mocho -Added: 2009-07-29 -%% -Type: language -Subtag: mhd -Description: Mbugu -Added: 2009-07-29 -%% -Type: language -Subtag: mhe -Description: Besisi -Description: Mah Meri -Added: 2009-07-29 -%% -Type: language -Subtag: mhf -Description: Mamaa -Added: 2009-07-29 -%% -Type: language -Subtag: mhg -Description: Margu -Added: 2009-07-29 -%% -Type: language -Subtag: mhh -Description: Maskoy Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: mhi -Description: Ma'di -Added: 2009-07-29 -%% -Type: language -Subtag: mhj -Description: Mogholi -Added: 2009-07-29 -%% -Type: language -Subtag: mhk -Description: Mungaka -Added: 2009-07-29 -%% -Type: language -Subtag: mhl -Description: Mauwake -Added: 2009-07-29 -%% -Type: language -Subtag: mhm -Description: Makhuwa-Moniga -Added: 2009-07-29 -%% -Type: language -Subtag: mhn -Description: Mócheno -Added: 2009-07-29 -%% -Type: language -Subtag: mho -Description: Mashi (Zambia) -Added: 2009-07-29 -%% -Type: language -Subtag: mhp -Description: Balinese Malay -Added: 2009-07-29 -%% -Type: language -Subtag: mhq -Description: Mandan -Added: 2009-07-29 -%% -Type: language -Subtag: mhr -Description: Eastern Mari -Added: 2009-07-29 -Macrolanguage: chm -%% -Type: language -Subtag: mhs -Description: Buru (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: mht -Description: Mandahuaca -Added: 2009-07-29 -%% -Type: language -Subtag: mhu -Description: Digaro-Mishmi -Description: Darang Deng -Added: 2009-07-29 -%% -Type: language -Subtag: mhw -Description: Mbukushu -Added: 2009-07-29 -%% -Type: language -Subtag: mhx -Description: Maru -Description: Lhaovo -Added: 2009-07-29 -%% -Type: language -Subtag: mhy -Description: Ma'anyan -Added: 2009-07-29 -%% -Type: language -Subtag: mhz -Description: Mor (Mor Islands) -Added: 2009-07-29 -%% -Type: language -Subtag: mia -Description: Miami -Added: 2009-07-29 -%% -Type: language -Subtag: mib -Description: Atatláhuca Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mic -Description: Mi'kmaq -Description: Micmac -Added: 2005-10-16 -%% -Type: language -Subtag: mid -Description: Mandaic -Added: 2009-07-29 -%% -Type: language -Subtag: mie -Description: Ocotepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mif -Description: Mofu-Gudur -Added: 2009-07-29 -%% -Type: language -Subtag: mig -Description: San Miguel El Grande Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mih -Description: Chayuco Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mii -Description: Chigmecatitlán Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mij -Description: Abar -Description: Mungbam -Added: 2009-07-29 -%% -Type: language -Subtag: mik -Description: Mikasuki -Added: 2009-07-29 -%% -Type: language -Subtag: mil -Description: Peñoles Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mim -Description: Alacatlatzala Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: min -Description: Minangkabau -Added: 2005-10-16 -Macrolanguage: ms -%% -Type: language -Subtag: mio -Description: Pinotepa Nacional Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mip -Description: Apasco-Apoala Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: miq -Description: Mískito -Added: 2009-07-29 -%% -Type: language -Subtag: mir -Description: Isthmus Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: mis -Description: Uncoded languages -Added: 2005-10-16 -Scope: special -%% -Type: language -Subtag: mit -Description: Southern Puebla Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: miu -Description: Cacaloxtepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: miw -Description: Akoye -Added: 2009-07-29 -%% -Type: language -Subtag: mix -Description: Mixtepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: miy -Description: Ayutla Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: miz -Description: Coatzospan Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mja -Description: Mahei -Added: 2009-07-29 -Deprecated: 2011-08-16 -%% -Type: language -Subtag: mjc -Description: San Juan Colorado Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mjd -Description: Northwest Maidu -Added: 2009-07-29 -%% -Type: language -Subtag: mje -Description: Muskum -Added: 2009-07-29 -%% -Type: language -Subtag: mjg -Description: Tu -Added: 2009-07-29 -%% -Type: language -Subtag: mjh -Description: Mwera (Nyasa) -Added: 2009-07-29 -%% -Type: language -Subtag: mji -Description: Kim Mun -Added: 2009-07-29 -%% -Type: language -Subtag: mjj -Description: Mawak -Added: 2009-07-29 -%% -Type: language -Subtag: mjk -Description: Matukar -Added: 2009-07-29 -%% -Type: language -Subtag: mjl -Description: Mandeali -Added: 2009-07-29 -%% -Type: language -Subtag: mjm -Description: Medebur -Added: 2009-07-29 -%% -Type: language -Subtag: mjn -Description: Ma (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: mjo -Description: Malankuravan -Added: 2009-07-29 -%% -Type: language -Subtag: mjp -Description: Malapandaram -Added: 2009-07-29 -%% -Type: language -Subtag: mjq -Description: Malaryan -Added: 2009-07-29 -%% -Type: language -Subtag: mjr -Description: Malavedan -Added: 2009-07-29 -%% -Type: language -Subtag: mjs -Description: Miship -Added: 2009-07-29 -%% -Type: language -Subtag: mjt -Description: Sauria Paharia -Added: 2009-07-29 -%% -Type: language -Subtag: mju -Description: Manna-Dora -Added: 2009-07-29 -%% -Type: language -Subtag: mjv -Description: Mannan -Added: 2009-07-29 -%% -Type: language -Subtag: mjw -Description: Karbi -Added: 2009-07-29 -%% -Type: language -Subtag: mjx -Description: Mahali -Added: 2009-07-29 -%% -Type: language -Subtag: mjy -Description: Mahican -Added: 2009-07-29 -%% -Type: language -Subtag: mjz -Description: Majhi -Added: 2009-07-29 -%% -Type: language -Subtag: mka -Description: Mbre -Added: 2009-07-29 -%% -Type: language -Subtag: mkb -Description: Mal Paharia -Added: 2009-07-29 -%% -Type: language -Subtag: mkc -Description: Siliput -Added: 2009-07-29 -%% -Type: language -Subtag: mke -Description: Mawchi -Added: 2009-07-29 -%% -Type: language -Subtag: mkf -Description: Miya -Added: 2009-07-29 -%% -Type: language -Subtag: mkg -Description: Mak (China) -Added: 2009-07-29 -%% -Type: language -Subtag: mkh -Description: Mon-Khmer languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: mki -Description: Dhatki -Added: 2009-07-29 -%% -Type: language -Subtag: mkj -Description: Mokilese -Added: 2009-07-29 -%% -Type: language -Subtag: mkk -Description: Byep -Added: 2009-07-29 -%% -Type: language -Subtag: mkl -Description: Mokole -Added: 2009-07-29 -%% -Type: language -Subtag: mkm -Description: Moklen -Added: 2009-07-29 -%% -Type: language -Subtag: mkn -Description: Kupang Malay -Added: 2009-07-29 -%% -Type: language -Subtag: mko -Description: Mingang Doso -Added: 2009-07-29 -%% -Type: language -Subtag: mkp -Description: Moikodi -Added: 2009-07-29 -%% -Type: language -Subtag: mkq -Description: Bay Miwok -Added: 2009-07-29 -%% -Type: language -Subtag: mkr -Description: Malas -Added: 2009-07-29 -%% -Type: language -Subtag: mks -Description: Silacayoapan Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mkt -Description: Vamale -Added: 2009-07-29 -%% -Type: language -Subtag: mku -Description: Konyanka Maninka -Added: 2009-07-29 -Macrolanguage: man -%% -Type: language -Subtag: mkv -Description: Mafea -Added: 2009-07-29 -%% -Type: language -Subtag: mkw -Description: Kituba (Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: mkx -Description: Kinamiging Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mky -Description: East Makian -Added: 2009-07-29 -%% -Type: language -Subtag: mkz -Description: Makasae -Added: 2009-07-29 -%% -Type: language -Subtag: mla -Description: Malo -Added: 2009-07-29 -%% -Type: language -Subtag: mlb -Description: Mbule -Added: 2009-07-29 -%% -Type: language -Subtag: mlc -Description: Cao Lan -Added: 2009-07-29 -%% -Type: language -Subtag: mld -Description: Malakhel -Added: 2009-07-29 -Deprecated: 2013-09-10 -%% -Type: language -Subtag: mle -Description: Manambu -Added: 2009-07-29 -%% -Type: language -Subtag: mlf -Description: Mal -Added: 2009-07-29 -%% -Type: language -Subtag: mlh -Description: Mape -Added: 2009-07-29 -%% -Type: language -Subtag: mli -Description: Malimpung -Added: 2009-07-29 -%% -Type: language -Subtag: mlj -Description: Miltu -Added: 2009-07-29 -%% -Type: language -Subtag: mlk -Description: Ilwana -Description: Kiwilwana -Added: 2009-07-29 -%% -Type: language -Subtag: mll -Description: Malua Bay -Added: 2009-07-29 -%% -Type: language -Subtag: mlm -Description: Mulam -Added: 2009-07-29 -%% -Type: language -Subtag: mln -Description: Malango -Added: 2009-07-29 -%% -Type: language -Subtag: mlo -Description: Mlomp -Added: 2009-07-29 -%% -Type: language -Subtag: mlp -Description: Bargam -Added: 2009-07-29 -%% -Type: language -Subtag: mlq -Description: Western Maninkakan -Added: 2009-07-29 -Macrolanguage: man -%% -Type: language -Subtag: mlr -Description: Vame -Added: 2009-07-29 -%% -Type: language -Subtag: mls -Description: Masalit -Added: 2009-07-29 -%% -Type: language -Subtag: mlu -Description: To'abaita -Added: 2009-07-29 -%% -Type: language -Subtag: mlv -Description: Motlav -Description: Mwotlap -Added: 2009-07-29 -%% -Type: language -Subtag: mlw -Description: Moloko -Added: 2009-07-29 -%% -Type: language -Subtag: mlx -Description: Malfaxal -Description: Naha'ai -Added: 2009-07-29 -%% -Type: language -Subtag: mlz -Description: Malaynon -Added: 2009-07-29 -%% -Type: language -Subtag: mma -Description: Mama -Added: 2009-07-29 -%% -Type: language -Subtag: mmb -Description: Momina -Added: 2009-07-29 -%% -Type: language -Subtag: mmc -Description: Michoacán Mazahua -Added: 2009-07-29 -%% -Type: language -Subtag: mmd -Description: Maonan -Added: 2009-07-29 -%% -Type: language -Subtag: mme -Description: Mae -Added: 2009-07-29 -%% -Type: language -Subtag: mmf -Description: Mundat -Added: 2009-07-29 -%% -Type: language -Subtag: mmg -Description: North Ambrym -Added: 2009-07-29 -%% -Type: language -Subtag: mmh -Description: Mehináku -Added: 2009-07-29 -%% -Type: language -Subtag: mmi -Description: Musar -Added: 2009-07-29 -%% -Type: language -Subtag: mmj -Description: Majhwar -Added: 2009-07-29 -%% -Type: language -Subtag: mmk -Description: Mukha-Dora -Added: 2009-07-29 -%% -Type: language -Subtag: mml -Description: Man Met -Added: 2009-07-29 -%% -Type: language -Subtag: mmm -Description: Maii -Added: 2009-07-29 -%% -Type: language -Subtag: mmn -Description: Mamanwa -Added: 2009-07-29 -%% -Type: language -Subtag: mmo -Description: Mangga Buang -Added: 2009-07-29 -%% -Type: language -Subtag: mmp -Description: Siawi -Added: 2009-07-29 -%% -Type: language -Subtag: mmq -Description: Musak -Added: 2009-07-29 -%% -Type: language -Subtag: mmr -Description: Western Xiangxi Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: mmt -Description: Malalamai -Added: 2009-07-29 -%% -Type: language -Subtag: mmu -Description: Mmaala -Added: 2009-07-29 -%% -Type: language -Subtag: mmv -Description: Miriti -Added: 2009-07-29 -%% -Type: language -Subtag: mmw -Description: Emae -Added: 2009-07-29 -%% -Type: language -Subtag: mmx -Description: Madak -Added: 2009-07-29 -%% -Type: language -Subtag: mmy -Description: Migaama -Added: 2009-07-29 -%% -Type: language -Subtag: mmz -Description: Mabaale -Added: 2009-07-29 -%% -Type: language -Subtag: mna -Description: Mbula -Added: 2009-07-29 -%% -Type: language -Subtag: mnb -Description: Muna -Added: 2009-07-29 -%% -Type: language -Subtag: mnc -Description: Manchu -Added: 2005-10-16 -%% -Type: language -Subtag: mnd -Description: Mondé -Added: 2009-07-29 -%% -Type: language -Subtag: mne -Description: Naba -Added: 2009-07-29 -%% -Type: language -Subtag: mnf -Description: Mundani -Added: 2009-07-29 -%% -Type: language -Subtag: mng -Description: Eastern Mnong -Added: 2009-07-29 -%% -Type: language -Subtag: mnh -Description: Mono (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: mni -Description: Manipuri -Added: 2005-10-16 -%% -Type: language -Subtag: mnj -Description: Munji -Added: 2009-07-29 -%% -Type: language -Subtag: mnk -Description: Mandinka -Added: 2009-07-29 -Macrolanguage: man -%% -Type: language -Subtag: mnl -Description: Tiale -Added: 2009-07-29 -%% -Type: language -Subtag: mnm -Description: Mapena -Added: 2009-07-29 -%% -Type: language -Subtag: mnn -Description: Southern Mnong -Added: 2009-07-29 -%% -Type: language -Subtag: mno -Description: Manobo languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: mnp -Description: Min Bei Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: mnq -Description: Minriq -Added: 2009-07-29 -%% -Type: language -Subtag: mnr -Description: Mono (USA) -Added: 2009-07-29 -%% -Type: language -Subtag: mns -Description: Mansi -Added: 2009-07-29 -%% -Type: language -Subtag: mnt -Description: Maykulan -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see wnn, xyj, xyk, xyt -%% -Type: language -Subtag: mnu -Description: Mer -Added: 2009-07-29 -%% -Type: language -Subtag: mnv -Description: Rennell-Bellona -Added: 2009-07-29 -%% -Type: language -Subtag: mnw -Description: Mon -Added: 2009-07-29 -%% -Type: language -Subtag: mnx -Description: Manikion -Added: 2009-07-29 -%% -Type: language -Subtag: mny -Description: Manyawa -Added: 2009-07-29 -%% -Type: language -Subtag: mnz -Description: Moni -Added: 2009-07-29 -%% -Type: language -Subtag: moa -Description: Mwan -Added: 2009-07-29 -%% -Type: language -Subtag: moc -Description: Mocoví -Added: 2009-07-29 -%% -Type: language -Subtag: mod -Description: Mobilian -Added: 2009-07-29 -%% -Type: language -Subtag: moe -Description: Montagnais -Added: 2009-07-29 -%% -Type: language -Subtag: mof -Description: Mohegan-Montauk-Narragansett -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see xnt, xpq -%% -Type: language -Subtag: mog -Description: Mongondow -Added: 2009-07-29 -%% -Type: language -Subtag: moh -Description: Mohawk -Added: 2005-10-16 -%% -Type: language -Subtag: moi -Description: Mboi -Added: 2009-07-29 -%% -Type: language -Subtag: moj -Description: Monzombo -Added: 2009-07-29 -%% -Type: language -Subtag: mok -Description: Morori -Added: 2009-07-29 -%% -Type: language -Subtag: mom -Description: Mangue -Added: 2009-07-29 -%% -Type: language -Subtag: moo -Description: Monom -Added: 2009-07-29 -%% -Type: language -Subtag: mop -Description: Mopán Maya -Added: 2009-07-29 -%% -Type: language -Subtag: moq -Description: Mor (Bomberai Peninsula) -Added: 2009-07-29 -%% -Type: language -Subtag: mor -Description: Moro -Added: 2009-07-29 -%% -Type: language -Subtag: mos -Description: Mossi -Added: 2005-10-16 -%% -Type: language -Subtag: mot -Description: Barí -Added: 2009-07-29 -%% -Type: language -Subtag: mou -Description: Mogum -Added: 2009-07-29 -%% -Type: language -Subtag: mov -Description: Mohave -Added: 2009-07-29 -%% -Type: language -Subtag: mow -Description: Moi (Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: mox -Description: Molima -Added: 2009-07-29 -%% -Type: language -Subtag: moy -Description: Shekkacho -Added: 2009-07-29 -%% -Type: language -Subtag: moz -Description: Mukulu -Description: Gergiko -Added: 2009-07-29 -%% -Type: language -Subtag: mpa -Description: Mpoto -Added: 2009-07-29 -%% -Type: language -Subtag: mpb -Description: Mullukmulluk -Added: 2009-07-29 -%% -Type: language -Subtag: mpc -Description: Mangarayi -Added: 2009-07-29 -%% -Type: language -Subtag: mpd -Description: Machinere -Added: 2009-07-29 -%% -Type: language -Subtag: mpe -Description: Majang -Added: 2009-07-29 -%% -Type: language -Subtag: mpg -Description: Marba -Added: 2009-07-29 -%% -Type: language -Subtag: mph -Description: Maung -Added: 2009-07-29 -%% -Type: language -Subtag: mpi -Description: Mpade -Added: 2009-07-29 -%% -Type: language -Subtag: mpj -Description: Martu Wangka -Added: 2009-07-29 -%% -Type: language -Subtag: mpk -Description: Mbara (Chad) -Added: 2009-07-29 -%% -Type: language -Subtag: mpl -Description: Middle Watut -Added: 2009-07-29 -%% -Type: language -Subtag: mpm -Description: Yosondúa Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mpn -Description: Mindiri -Added: 2009-07-29 -%% -Type: language -Subtag: mpo -Description: Miu -Added: 2009-07-29 -%% -Type: language -Subtag: mpp -Description: Migabac -Added: 2009-07-29 -%% -Type: language -Subtag: mpq -Description: Matís -Added: 2009-07-29 -%% -Type: language -Subtag: mpr -Description: Vangunu -Added: 2009-07-29 -%% -Type: language -Subtag: mps -Description: Dadibi -Added: 2009-07-29 -%% -Type: language -Subtag: mpt -Description: Mian -Added: 2009-07-29 -%% -Type: language -Subtag: mpu -Description: Makuráp -Added: 2009-07-29 -%% -Type: language -Subtag: mpv -Description: Mungkip -Added: 2009-07-29 -%% -Type: language -Subtag: mpw -Description: Mapidian -Added: 2009-07-29 -%% -Type: language -Subtag: mpx -Description: Misima-Panaeati -Added: 2009-07-29 -%% -Type: language -Subtag: mpy -Description: Mapia -Added: 2009-07-29 -%% -Type: language -Subtag: mpz -Description: Mpi -Added: 2009-07-29 -%% -Type: language -Subtag: mqa -Description: Maba (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: mqb -Description: Mbuko -Added: 2009-07-29 -%% -Type: language -Subtag: mqc -Description: Mangole -Added: 2009-07-29 -%% -Type: language -Subtag: mqe -Description: Matepi -Added: 2009-07-29 -%% -Type: language -Subtag: mqf -Description: Momuna -Added: 2009-07-29 -%% -Type: language -Subtag: mqg -Description: Kota Bangun Kutai Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: mqh -Description: Tlazoyaltepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mqi -Description: Mariri -Added: 2009-07-29 -%% -Type: language -Subtag: mqj -Description: Mamasa -Added: 2009-07-29 -%% -Type: language -Subtag: mqk -Description: Rajah Kabunsuwan Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mql -Description: Mbelime -Added: 2009-07-29 -%% -Type: language -Subtag: mqm -Description: South Marquesan -Added: 2009-07-29 -%% -Type: language -Subtag: mqn -Description: Moronene -Added: 2009-07-29 -%% -Type: language -Subtag: mqo -Description: Modole -Added: 2009-07-29 -%% -Type: language -Subtag: mqp -Description: Manipa -Added: 2009-07-29 -%% -Type: language -Subtag: mqq -Description: Minokok -Added: 2009-07-29 -%% -Type: language -Subtag: mqr -Description: Mander -Added: 2009-07-29 -%% -Type: language -Subtag: mqs -Description: West Makian -Added: 2009-07-29 -%% -Type: language -Subtag: mqt -Description: Mok -Added: 2009-07-29 -%% -Type: language -Subtag: mqu -Description: Mandari -Added: 2009-07-29 -%% -Type: language -Subtag: mqv -Description: Mosimo -Added: 2009-07-29 -%% -Type: language -Subtag: mqw -Description: Murupi -Added: 2009-07-29 -%% -Type: language -Subtag: mqx -Description: Mamuju -Added: 2009-07-29 -%% -Type: language -Subtag: mqy -Description: Manggarai -Added: 2009-07-29 -%% -Type: language -Subtag: mqz -Description: Pano -Added: 2009-07-29 -%% -Type: language -Subtag: mra -Description: Mlabri -Added: 2009-07-29 -%% -Type: language -Subtag: mrb -Description: Marino -Added: 2009-07-29 -%% -Type: language -Subtag: mrc -Description: Maricopa -Added: 2009-07-29 -%% -Type: language -Subtag: mrd -Description: Western Magar -Added: 2009-07-29 -%% -Type: language -Subtag: mre -Description: Martha's Vineyard Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mrf -Description: Elseng -Added: 2009-07-29 -%% -Type: language -Subtag: mrg -Description: Mising -Added: 2009-07-29 -%% -Type: language -Subtag: mrh -Description: Mara Chin -Added: 2009-07-29 -%% -Type: language -Subtag: mrj -Description: Western Mari -Added: 2009-07-29 -Macrolanguage: chm -%% -Type: language -Subtag: mrk -Description: Hmwaveke -Added: 2009-07-29 -%% -Type: language -Subtag: mrl -Description: Mortlockese -Added: 2009-07-29 -%% -Type: language -Subtag: mrm -Description: Merlav -Description: Mwerlap -Added: 2009-07-29 -%% -Type: language -Subtag: mrn -Description: Cheke Holo -Added: 2009-07-29 -%% -Type: language -Subtag: mro -Description: Mru -Added: 2009-07-29 -%% -Type: language -Subtag: mrp -Description: Morouas -Added: 2009-07-29 -%% -Type: language -Subtag: mrq -Description: North Marquesan -Added: 2009-07-29 -%% -Type: language -Subtag: mrr -Description: Maria (India) -Added: 2009-07-29 -%% -Type: language -Subtag: mrs -Description: Maragus -Added: 2009-07-29 -%% -Type: language -Subtag: mrt -Description: Marghi Central -Added: 2009-07-29 -%% -Type: language -Subtag: mru -Description: Mono (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: mrv -Description: Mangareva -Added: 2009-07-29 -%% -Type: language -Subtag: mrw -Description: Maranao -Added: 2009-07-29 -%% -Type: language -Subtag: mrx -Description: Maremgi -Description: Dineor -Added: 2009-07-29 -%% -Type: language -Subtag: mry -Description: Mandaya -Added: 2009-07-29 -%% -Type: language -Subtag: mrz -Description: Marind -Added: 2009-07-29 -%% -Type: language -Subtag: msb -Description: Masbatenyo -Added: 2009-07-29 -%% -Type: language -Subtag: msc -Description: Sankaran Maninka -Added: 2009-07-29 -Macrolanguage: man -%% -Type: language -Subtag: msd -Description: Yucatec Maya Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mse -Description: Musey -Added: 2009-07-29 -%% -Type: language -Subtag: msf -Description: Mekwei -Added: 2009-07-29 -%% -Type: language -Subtag: msg -Description: Moraid -Added: 2009-07-29 -%% -Type: language -Subtag: msh -Description: Masikoro Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: msi -Description: Sabah Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: msj -Description: Ma (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: msk -Description: Mansaka -Added: 2009-07-29 -%% -Type: language -Subtag: msl -Description: Molof -Description: Poule -Added: 2009-07-29 -%% -Type: language -Subtag: msm -Description: Agusan Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: msn -Description: Vurës -Added: 2009-07-29 -%% -Type: language -Subtag: mso -Description: Mombum -Added: 2009-07-29 -%% -Type: language -Subtag: msp -Description: Maritsauá -Added: 2009-07-29 -%% -Type: language -Subtag: msq -Description: Caac -Added: 2009-07-29 -%% -Type: language -Subtag: msr -Description: Mongolian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mss -Description: West Masela -Added: 2009-07-29 -%% -Type: language -Subtag: mst -Description: Cataelano Mandaya -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: mry -%% -Type: language -Subtag: msu -Description: Musom -Added: 2009-07-29 -%% -Type: language -Subtag: msv -Description: Maslam -Added: 2009-07-29 -%% -Type: language -Subtag: msw -Description: Mansoanka -Added: 2009-07-29 -%% -Type: language -Subtag: msx -Description: Moresada -Added: 2009-07-29 -%% -Type: language -Subtag: msy -Description: Aruamu -Added: 2009-07-29 -%% -Type: language -Subtag: msz -Description: Momare -Added: 2009-07-29 -%% -Type: language -Subtag: mta -Description: Cotabato Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: mtb -Description: Anyin Morofo -Added: 2009-07-29 -%% -Type: language -Subtag: mtc -Description: Munit -Added: 2009-07-29 -%% -Type: language -Subtag: mtd -Description: Mualang -Added: 2009-07-29 -%% -Type: language -Subtag: mte -Description: Mono (Solomon Islands) -Added: 2009-07-29 -%% -Type: language -Subtag: mtf -Description: Murik (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: mtg -Description: Una -Added: 2009-07-29 -%% -Type: language -Subtag: mth -Description: Munggui -Added: 2009-07-29 -%% -Type: language -Subtag: mti -Description: Maiwa (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: mtj -Description: Moskona -Added: 2009-07-29 -%% -Type: language -Subtag: mtk -Description: Mbe' -Added: 2009-07-29 -%% -Type: language -Subtag: mtl -Description: Montol -Added: 2009-07-29 -%% -Type: language -Subtag: mtm -Description: Mator -Added: 2009-07-29 -%% -Type: language -Subtag: mtn -Description: Matagalpa -Added: 2009-07-29 -%% -Type: language -Subtag: mto -Description: Totontepec Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: mtp -Description: Wichí Lhamtés Nocten -Added: 2009-07-29 -%% -Type: language -Subtag: mtq -Description: Muong -Added: 2009-07-29 -%% -Type: language -Subtag: mtr -Description: Mewari -Added: 2009-07-29 -Macrolanguage: mwr -%% -Type: language -Subtag: mts -Description: Yora -Added: 2009-07-29 -%% -Type: language -Subtag: mtt -Description: Mota -Added: 2009-07-29 -%% -Type: language -Subtag: mtu -Description: Tututepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mtv -Description: Asaro'o -Added: 2009-07-29 -%% -Type: language -Subtag: mtw -Description: Southern Binukidnon -Added: 2009-07-29 -%% -Type: language -Subtag: mtx -Description: Tidaá Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mty -Description: Nabi -Added: 2009-07-29 -%% -Type: language -Subtag: mua -Description: Mundang -Added: 2009-07-29 -%% -Type: language -Subtag: mub -Description: Mubi -Added: 2009-07-29 -%% -Type: language -Subtag: muc -Description: Ajumbu -Added: 2009-07-29 -%% -Type: language -Subtag: mud -Description: Mednyj Aleut -Added: 2009-07-29 -%% -Type: language -Subtag: mue -Description: Media Lengua -Added: 2009-07-29 -%% -Type: language -Subtag: mug -Description: Musgu -Added: 2009-07-29 -%% -Type: language -Subtag: muh -Description: Mündü -Added: 2009-07-29 -%% -Type: language -Subtag: mui -Description: Musi -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: muj -Description: Mabire -Added: 2009-07-29 -%% -Type: language -Subtag: muk -Description: Mugom -Added: 2009-07-29 -%% -Type: language -Subtag: mul -Description: Multiple languages -Added: 2005-10-16 -Scope: special -%% -Type: language -Subtag: mum -Description: Maiwala -Added: 2009-07-29 -%% -Type: language -Subtag: mun -Description: Munda languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: muo -Description: Nyong -Added: 2009-07-29 -%% -Type: language -Subtag: mup -Description: Malvi -Added: 2009-07-29 -Macrolanguage: raj -%% -Type: language -Subtag: muq -Description: Eastern Xiangxi Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: mur -Description: Murle -Added: 2009-07-29 -%% -Type: language -Subtag: mus -Description: Creek -Added: 2005-10-16 -%% -Type: language -Subtag: mut -Description: Western Muria -Added: 2009-07-29 -%% -Type: language -Subtag: muu -Description: Yaaku -Added: 2009-07-29 -%% -Type: language -Subtag: muv -Description: Muthuvan -Added: 2009-07-29 -%% -Type: language -Subtag: mux -Description: Bo-Ung -Added: 2009-07-29 -%% -Type: language -Subtag: muy -Description: Muyang -Added: 2009-07-29 -%% -Type: language -Subtag: muz -Description: Mursi -Added: 2009-07-29 -%% -Type: language -Subtag: mva -Description: Manam -Added: 2009-07-29 -%% -Type: language -Subtag: mvb -Description: Mattole -Added: 2009-07-29 -%% -Type: language -Subtag: mvd -Description: Mamboru -Added: 2009-07-29 -%% -Type: language -Subtag: mve -Description: Marwari (Pakistan) -Added: 2009-07-29 -Macrolanguage: mwr -%% -Type: language -Subtag: mvf -Description: Peripheral Mongolian -Added: 2009-07-29 -Macrolanguage: mn -%% -Type: language -Subtag: mvg -Description: Yucuañe Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mvh -Description: Mulgi -Added: 2009-07-29 -%% -Type: language -Subtag: mvi -Description: Miyako -Added: 2009-07-29 -%% -Type: language -Subtag: mvk -Description: Mekmek -Added: 2009-07-29 -%% -Type: language -Subtag: mvl -Description: Mbara (Australia) -Added: 2009-07-29 -%% -Type: language -Subtag: mvm -Description: Muya -Added: 2009-07-29 -%% -Type: language -Subtag: mvn -Description: Minaveha -Added: 2009-07-29 -%% -Type: language -Subtag: mvo -Description: Marovo -Added: 2009-07-29 -%% -Type: language -Subtag: mvp -Description: Duri -Added: 2009-07-29 -%% -Type: language -Subtag: mvq -Description: Moere -Added: 2009-07-29 -%% -Type: language -Subtag: mvr -Description: Marau -Added: 2009-07-29 -%% -Type: language -Subtag: mvs -Description: Massep -Added: 2009-07-29 -%% -Type: language -Subtag: mvt -Description: Mpotovoro -Added: 2009-07-29 -%% -Type: language -Subtag: mvu -Description: Marfa -Added: 2009-07-29 -%% -Type: language -Subtag: mvv -Description: Tagal Murut -Added: 2009-07-29 -%% -Type: language -Subtag: mvw -Description: Machinga -Added: 2009-07-29 -%% -Type: language -Subtag: mvx -Description: Meoswar -Added: 2009-07-29 -%% -Type: language -Subtag: mvy -Description: Indus Kohistani -Added: 2009-07-29 -%% -Type: language -Subtag: mvz -Description: Mesqan -Added: 2009-07-29 -%% -Type: language -Subtag: mwa -Description: Mwatebu -Added: 2009-07-29 -%% -Type: language -Subtag: mwb -Description: Juwal -Added: 2009-07-29 -%% -Type: language -Subtag: mwc -Description: Are -Added: 2009-07-29 -%% -Type: language -Subtag: mwd -Description: Mudbura -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see dmw, xrq -%% -Type: language -Subtag: mwe -Description: Mwera (Chimwera) -Added: 2009-07-29 -%% -Type: language -Subtag: mwf -Description: Murrinh-Patha -Added: 2009-07-29 -%% -Type: language -Subtag: mwg -Description: Aiklep -Added: 2009-07-29 -%% -Type: language -Subtag: mwh -Description: Mouk-Aria -Added: 2009-07-29 -%% -Type: language -Subtag: mwi -Description: Labo -Description: Ninde -Added: 2009-07-29 -%% -Type: language -Subtag: mwj -Description: Maligo -Added: 2009-07-29 -%% -Type: language -Subtag: mwk -Description: Kita Maninkakan -Added: 2009-07-29 -Macrolanguage: man -%% -Type: language -Subtag: mwl -Description: Mirandese -Added: 2005-10-16 -%% -Type: language -Subtag: mwm -Description: Sar -Added: 2009-07-29 -%% -Type: language -Subtag: mwn -Description: Nyamwanga -Added: 2009-07-29 -%% -Type: language -Subtag: mwo -Description: Central Maewo -Added: 2009-07-29 -%% -Type: language -Subtag: mwp -Description: Kala Lagaw Ya -Added: 2009-07-29 -%% -Type: language -Subtag: mwq -Description: Mün Chin -Added: 2009-07-29 -%% -Type: language -Subtag: mwr -Description: Marwari -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: mws -Description: Mwimbi-Muthambi -Added: 2009-07-29 -%% -Type: language -Subtag: mwt -Description: Moken -Added: 2009-07-29 -%% -Type: language -Subtag: mwu -Description: Mittu -Added: 2009-07-29 -%% -Type: language -Subtag: mwv -Description: Mentawai -Added: 2009-07-29 -%% -Type: language -Subtag: mww -Description: Hmong Daw -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: mwx -Description: Mediak -Added: 2009-07-29 -%% -Type: language -Subtag: mwy -Description: Mosiro -Added: 2009-07-29 -%% -Type: language -Subtag: mwz -Description: Moingi -Added: 2009-07-29 -%% -Type: language -Subtag: mxa -Description: Northwest Oaxaca Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mxb -Description: Tezoatlán Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mxc -Description: Manyika -Added: 2009-07-29 -%% -Type: language -Subtag: mxd -Description: Modang -Added: 2009-07-29 -%% -Type: language -Subtag: mxe -Description: Mele-Fila -Added: 2009-07-29 -%% -Type: language -Subtag: mxf -Description: Malgbe -Added: 2009-07-29 -%% -Type: language -Subtag: mxg -Description: Mbangala -Added: 2009-07-29 -%% -Type: language -Subtag: mxh -Description: Mvuba -Added: 2009-07-29 -%% -Type: language -Subtag: mxi -Description: Mozarabic -Added: 2009-07-29 -%% -Type: language -Subtag: mxj -Description: Miju-Mishmi -Description: Geman Deng -Added: 2009-07-29 -%% -Type: language -Subtag: mxk -Description: Monumbo -Added: 2009-07-29 -%% -Type: language -Subtag: mxl -Description: Maxi Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: mxm -Description: Meramera -Added: 2009-07-29 -%% -Type: language -Subtag: mxn -Description: Moi (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: mxo -Description: Mbowe -Added: 2009-07-29 -%% -Type: language -Subtag: mxp -Description: Tlahuitoltepec Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: mxq -Description: Juquila Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: mxr -Description: Murik (Malaysia) -Added: 2009-07-29 -%% -Type: language -Subtag: mxs -Description: Huitepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mxt -Description: Jamiltepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mxu -Description: Mada (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: mxv -Description: Metlatónoc Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mxw -Description: Namo -Added: 2009-07-29 -%% -Type: language -Subtag: mxx -Description: Mahou -Description: Mawukakan -Added: 2009-07-29 -%% -Type: language -Subtag: mxy -Description: Southeastern Nochixtlán Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mxz -Description: Central Masela -Added: 2009-07-29 -%% -Type: language -Subtag: myb -Description: Mbay -Added: 2009-07-29 -%% -Type: language -Subtag: myc -Description: Mayeka -Added: 2009-07-29 -%% -Type: language -Subtag: myd -Description: Maramba -Added: 2009-07-29 -%% -Type: language -Subtag: mye -Description: Myene -Added: 2009-07-29 -%% -Type: language -Subtag: myf -Description: Bambassi -Added: 2009-07-29 -%% -Type: language -Subtag: myg -Description: Manta -Added: 2009-07-29 -%% -Type: language -Subtag: myh -Description: Makah -Added: 2009-07-29 -%% -Type: language -Subtag: myi -Description: Mina (India) -Added: 2009-07-29 -%% -Type: language -Subtag: myj -Description: Mangayat -Added: 2009-07-29 -%% -Type: language -Subtag: myk -Description: Mamara Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: myl -Description: Moma -Added: 2009-07-29 -%% -Type: language -Subtag: mym -Description: Me'en -Added: 2009-07-29 -%% -Type: language -Subtag: myn -Description: Mayan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: myo -Description: Anfillo -Added: 2009-07-29 -%% -Type: language -Subtag: myp -Description: Pirahã -Added: 2009-07-29 -%% -Type: language -Subtag: myq -Description: Forest Maninka -Added: 2009-07-29 -Deprecated: 2013-09-10 -Macrolanguage: man -%% -Type: language -Subtag: myr -Description: Muniche -Added: 2009-07-29 -%% -Type: language -Subtag: mys -Description: Mesmes -Added: 2009-07-29 -%% -Type: language -Subtag: myt -Description: Sangab Mandaya -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: mry -%% -Type: language -Subtag: myu -Description: Mundurukú -Added: 2009-07-29 -%% -Type: language -Subtag: myv -Description: Erzya -Added: 2005-10-16 -%% -Type: language -Subtag: myw -Description: Muyuw -Added: 2009-07-29 -%% -Type: language -Subtag: myx -Description: Masaaba -Added: 2009-07-29 -%% -Type: language -Subtag: myy -Description: Macuna -Added: 2009-07-29 -%% -Type: language -Subtag: myz -Description: Classical Mandaic -Added: 2009-07-29 -%% -Type: language -Subtag: mza -Description: Santa María Zacatepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: mzb -Description: Tumzabt -Added: 2009-07-29 -%% -Type: language -Subtag: mzc -Description: Madagascar Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mzd -Description: Malimba -Added: 2009-07-29 -%% -Type: language -Subtag: mze -Description: Morawa -Added: 2009-07-29 -%% -Type: language -Subtag: mzg -Description: Monastic Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mzh -Description: Wichí Lhamtés Güisnay -Added: 2009-07-29 -%% -Type: language -Subtag: mzi -Description: Ixcatlán Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: mzj -Description: Manya -Added: 2009-07-29 -%% -Type: language -Subtag: mzk -Description: Nigeria Mambila -Added: 2009-07-29 -%% -Type: language -Subtag: mzl -Description: Mazatlán Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: mzm -Description: Mumuye -Added: 2009-07-29 -%% -Type: language -Subtag: mzn -Description: Mazanderani -Added: 2009-07-29 -%% -Type: language -Subtag: mzo -Description: Matipuhy -Added: 2009-07-29 -%% -Type: language -Subtag: mzp -Description: Movima -Added: 2009-07-29 -%% -Type: language -Subtag: mzq -Description: Mori Atas -Added: 2009-07-29 -%% -Type: language -Subtag: mzr -Description: Marúbo -Added: 2009-07-29 -%% -Type: language -Subtag: mzs -Description: Macanese -Added: 2009-07-29 -%% -Type: language -Subtag: mzt -Description: Mintil -Added: 2009-07-29 -%% -Type: language -Subtag: mzu -Description: Inapang -Added: 2009-07-29 -%% -Type: language -Subtag: mzv -Description: Manza -Added: 2009-07-29 -%% -Type: language -Subtag: mzw -Description: Deg -Added: 2009-07-29 -%% -Type: language -Subtag: mzx -Description: Mawayana -Added: 2009-07-29 -%% -Type: language -Subtag: mzy -Description: Mozambican Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: mzz -Description: Maiadomu -Added: 2009-07-29 -%% -Type: language -Subtag: naa -Description: Namla -Added: 2009-07-29 -%% -Type: language -Subtag: nab -Description: Southern Nambikuára -Added: 2009-07-29 -%% -Type: language -Subtag: nac -Description: Narak -Added: 2009-07-29 -%% -Type: language -Subtag: nad -Description: Nijadali -Added: 2009-07-29 -%% -Type: language -Subtag: nae -Description: Naka'ela -Added: 2009-07-29 -%% -Type: language -Subtag: naf -Description: Nabak -Added: 2009-07-29 -%% -Type: language -Subtag: nag -Description: Naga Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: nah -Description: Nahuatl languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: nai -Description: North American Indian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: naj -Description: Nalu -Added: 2009-07-29 -%% -Type: language -Subtag: nak -Description: Nakanai -Added: 2009-07-29 -%% -Type: language -Subtag: nal -Description: Nalik -Added: 2009-07-29 -%% -Type: language -Subtag: nam -Description: Ngan'gityemerri -Added: 2009-07-29 -%% -Type: language -Subtag: nan -Description: Min Nan Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: nao -Description: Naaba -Added: 2009-07-29 -%% -Type: language -Subtag: nap -Description: Neapolitan -Added: 2005-10-16 -%% -Type: language -Subtag: naq -Description: Nama (Namibia) -Added: 2009-07-29 -%% -Type: language -Subtag: nar -Description: Iguta -Added: 2009-07-29 -%% -Type: language -Subtag: nas -Description: Naasioi -Added: 2009-07-29 -%% -Type: language -Subtag: nat -Description: Hungworo -Added: 2009-07-29 -%% -Type: language -Subtag: naw -Description: Nawuri -Added: 2009-07-29 -%% -Type: language -Subtag: nax -Description: Nakwi -Added: 2009-07-29 -%% -Type: language -Subtag: nay -Description: Narrinyeri -Added: 2009-07-29 -%% -Type: language -Subtag: naz -Description: Coatepec Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nba -Description: Nyemba -Added: 2009-07-29 -%% -Type: language -Subtag: nbb -Description: Ndoe -Added: 2009-07-29 -%% -Type: language -Subtag: nbc -Description: Chang Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nbd -Description: Ngbinda -Added: 2009-07-29 -%% -Type: language -Subtag: nbe -Description: Konyak Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nbf -Description: Naxi -Added: 2009-07-29 -Deprecated: 2011-08-16 -Comments: see nru, nxq -%% -Type: language -Subtag: nbg -Description: Nagarchal -Added: 2009-07-29 -%% -Type: language -Subtag: nbh -Description: Ngamo -Added: 2009-07-29 -%% -Type: language -Subtag: nbi -Description: Mao Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nbj -Description: Ngarinman -Added: 2009-07-29 -%% -Type: language -Subtag: nbk -Description: Nake -Added: 2009-07-29 -%% -Type: language -Subtag: nbm -Description: Ngbaka Ma'bo -Added: 2009-07-29 -%% -Type: language -Subtag: nbn -Description: Kuri -Added: 2009-07-29 -%% -Type: language -Subtag: nbo -Description: Nkukoli -Added: 2009-07-29 -%% -Type: language -Subtag: nbp -Description: Nnam -Added: 2009-07-29 -%% -Type: language -Subtag: nbq -Description: Nggem -Added: 2009-07-29 -%% -Type: language -Subtag: nbr -Description: Numana-Nunku-Gbantu-Numbu -Added: 2009-07-29 -%% -Type: language -Subtag: nbs -Description: Namibian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: nbt -Description: Na -Added: 2009-07-29 -%% -Type: language -Subtag: nbu -Description: Rongmei Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nbv -Description: Ngamambo -Added: 2009-07-29 -%% -Type: language -Subtag: nbw -Description: Southern Ngbandi -Added: 2009-07-29 -%% -Type: language -Subtag: nbx -Description: Ngura -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see ekc, gll, jbi, xpt, xwk -%% -Type: language -Subtag: nby -Description: Ningera -Added: 2009-07-29 -%% -Type: language -Subtag: nca -Description: Iyo -Added: 2009-07-29 -%% -Type: language -Subtag: ncb -Description: Central Nicobarese -Added: 2009-07-29 -%% -Type: language -Subtag: ncc -Description: Ponam -Added: 2009-07-29 -%% -Type: language -Subtag: ncd -Description: Nachering -Added: 2009-07-29 -%% -Type: language -Subtag: nce -Description: Yale -Added: 2009-07-29 -%% -Type: language -Subtag: ncf -Description: Notsi -Added: 2009-07-29 -%% -Type: language -Subtag: ncg -Description: Nisga'a -Added: 2009-07-29 -%% -Type: language -Subtag: nch -Description: Central Huasteca Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nci -Description: Classical Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: ncj -Description: Northern Puebla Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nck -Description: Nakara -Added: 2009-07-29 -%% -Type: language -Subtag: ncl -Description: Michoacán Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: ncm -Description: Nambo -Added: 2009-07-29 -%% -Type: language -Subtag: ncn -Description: Nauna -Added: 2009-07-29 -%% -Type: language -Subtag: nco -Description: Sibe -Added: 2009-07-29 -%% -Type: language -Subtag: ncp -Description: Ndaktup -Added: 2009-07-29 -%% -Type: language -Subtag: ncr -Description: Ncane -Added: 2009-07-29 -%% -Type: language -Subtag: ncs -Description: Nicaraguan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: nct -Description: Chothe Naga -Added: 2009-07-29 -%% -Type: language -Subtag: ncu -Description: Chumburung -Added: 2009-07-29 -%% -Type: language -Subtag: ncx -Description: Central Puebla Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: ncz -Description: Natchez -Added: 2009-07-29 -%% -Type: language -Subtag: nda -Description: Ndasa -Added: 2009-07-29 -%% -Type: language -Subtag: ndb -Description: Kenswei Nsei -Added: 2009-07-29 -%% -Type: language -Subtag: ndc -Description: Ndau -Added: 2009-07-29 -%% -Type: language -Subtag: ndd -Description: Nde-Nsele-Nta -Added: 2009-07-29 -%% -Type: language -Subtag: ndf -Description: Nadruvian -Added: 2009-07-29 -%% -Type: language -Subtag: ndg -Description: Ndengereko -Added: 2009-07-29 -%% -Type: language -Subtag: ndh -Description: Ndali -Added: 2009-07-29 -%% -Type: language -Subtag: ndi -Description: Samba Leko -Added: 2009-07-29 -%% -Type: language -Subtag: ndj -Description: Ndamba -Added: 2009-07-29 -%% -Type: language -Subtag: ndk -Description: Ndaka -Added: 2009-07-29 -%% -Type: language -Subtag: ndl -Description: Ndolo -Added: 2009-07-29 -%% -Type: language -Subtag: ndm -Description: Ndam -Added: 2009-07-29 -%% -Type: language -Subtag: ndn -Description: Ngundi -Added: 2009-07-29 -%% -Type: language -Subtag: ndp -Description: Ndo -Added: 2009-07-29 -%% -Type: language -Subtag: ndq -Description: Ndombe -Added: 2009-07-29 -%% -Type: language -Subtag: ndr -Description: Ndoola -Added: 2009-07-29 -%% -Type: language -Subtag: nds -Description: Low German -Description: Low Saxon -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ndt -Description: Ndunga -Added: 2009-07-29 -%% -Type: language -Subtag: ndu -Description: Dugun -Added: 2009-07-29 -%% -Type: language -Subtag: ndv -Description: Ndut -Added: 2009-07-29 -%% -Type: language -Subtag: ndw -Description: Ndobo -Added: 2009-07-29 -%% -Type: language -Subtag: ndx -Description: Nduga -Added: 2009-07-29 -%% -Type: language -Subtag: ndy -Description: Lutos -Added: 2009-07-29 -%% -Type: language -Subtag: ndz -Description: Ndogo -Added: 2009-07-29 -%% -Type: language -Subtag: nea -Description: Eastern Ngad'a -Added: 2009-07-29 -%% -Type: language -Subtag: neb -Description: Toura (Côte d'Ivoire) -Added: 2009-07-29 -%% -Type: language -Subtag: nec -Description: Nedebang -Added: 2009-07-29 -%% -Type: language -Subtag: ned -Description: Nde-Gbite -Added: 2009-07-29 -%% -Type: language -Subtag: nee -Description: Nêlêmwa-Nixumwak -Added: 2009-07-29 -%% -Type: language -Subtag: nef -Description: Nefamese -Added: 2009-07-29 -%% -Type: language -Subtag: neg -Description: Negidal -Added: 2009-07-29 -%% -Type: language -Subtag: neh -Description: Nyenkha -Added: 2009-07-29 -%% -Type: language -Subtag: nei -Description: Neo-Hittite -Added: 2009-07-29 -%% -Type: language -Subtag: nej -Description: Neko -Added: 2009-07-29 -%% -Type: language -Subtag: nek -Description: Neku -Added: 2009-07-29 -%% -Type: language -Subtag: nem -Description: Nemi -Added: 2009-07-29 -%% -Type: language -Subtag: nen -Description: Nengone -Added: 2009-07-29 -%% -Type: language -Subtag: neo -Description: Ná-Meo -Added: 2009-07-29 -%% -Type: language -Subtag: neq -Description: North Central Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: ner -Description: Yahadian -Added: 2009-07-29 -%% -Type: language -Subtag: nes -Description: Bhoti Kinnauri -Added: 2009-07-29 -%% -Type: language -Subtag: net -Description: Nete -Added: 2009-07-29 -%% -Type: language -Subtag: neu -Description: Neo -Added: 2012-08-12 -%% -Type: language -Subtag: nev -Description: Nyaheun -Added: 2009-07-29 -%% -Type: language -Subtag: new -Description: Newari -Description: Nepal Bhasa -Added: 2005-10-16 -%% -Type: language -Subtag: nex -Description: Neme -Added: 2009-07-29 -%% -Type: language -Subtag: ney -Description: Neyo -Added: 2009-07-29 -%% -Type: language -Subtag: nez -Description: Nez Perce -Added: 2009-07-29 -%% -Type: language -Subtag: nfa -Description: Dhao -Added: 2009-07-29 -%% -Type: language -Subtag: nfd -Description: Ahwai -Added: 2009-07-29 -%% -Type: language -Subtag: nfl -Description: Ayiwo -Description: Äiwoo -Added: 2009-07-29 -%% -Type: language -Subtag: nfr -Description: Nafaanra -Added: 2009-07-29 -%% -Type: language -Subtag: nfu -Description: Mfumte -Added: 2009-07-29 -%% -Type: language -Subtag: nga -Description: Ngbaka -Added: 2009-07-29 -%% -Type: language -Subtag: ngb -Description: Northern Ngbandi -Added: 2009-07-29 -%% -Type: language -Subtag: ngc -Description: Ngombe (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: ngd -Description: Ngando (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: nge -Description: Ngemba -Added: 2009-07-29 -%% -Type: language -Subtag: ngf -Description: Trans-New Guinea languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: ngg -Description: Ngbaka Manza -Added: 2009-07-29 -%% -Type: language -Subtag: ngh -Description: N/u -Added: 2009-07-29 -%% -Type: language -Subtag: ngi -Description: Ngizim -Added: 2009-07-29 -%% -Type: language -Subtag: ngj -Description: Ngie -Added: 2009-07-29 -%% -Type: language -Subtag: ngk -Description: Dalabon -Added: 2009-07-29 -%% -Type: language -Subtag: ngl -Description: Lomwe -Added: 2009-07-29 -%% -Type: language -Subtag: ngm -Description: Ngatik Men's Creole -Added: 2009-07-29 -%% -Type: language -Subtag: ngn -Description: Ngwo -Added: 2009-07-29 -%% -Type: language -Subtag: ngo -Description: Ngoni -Added: 2009-07-29 -%% -Type: language -Subtag: ngp -Description: Ngulu -Added: 2009-07-29 -%% -Type: language -Subtag: ngq -Description: Ngurimi -Description: Ngoreme -Added: 2009-07-29 -%% -Type: language -Subtag: ngr -Description: Engdewu -Added: 2009-07-29 -%% -Type: language -Subtag: ngs -Description: Gvoko -Added: 2009-07-29 -%% -Type: language -Subtag: ngt -Description: Ngeq -Added: 2009-07-29 -%% -Type: language -Subtag: ngu -Description: Guerrero Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: ngv -Description: Nagumi -Added: 2009-07-29 -%% -Type: language -Subtag: ngw -Description: Ngwaba -Added: 2009-07-29 -%% -Type: language -Subtag: ngx -Description: Nggwahyi -Added: 2009-07-29 -%% -Type: language -Subtag: ngy -Description: Tibea -Added: 2009-07-29 -%% -Type: language -Subtag: ngz -Description: Ngungwel -Added: 2009-07-29 -%% -Type: language -Subtag: nha -Description: Nhanda -Added: 2009-07-29 -%% -Type: language -Subtag: nhb -Description: Beng -Added: 2009-07-29 -%% -Type: language -Subtag: nhc -Description: Tabasco Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhd -Description: Chiripá -Description: Ava Guaraní -Added: 2009-07-29 -Macrolanguage: gn -%% -Type: language -Subtag: nhe -Description: Eastern Huasteca Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhf -Description: Nhuwala -Added: 2009-07-29 -%% -Type: language -Subtag: nhg -Description: Tetelcingo Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhh -Description: Nahari -Added: 2009-07-29 -%% -Type: language -Subtag: nhi -Description: Zacatlán-Ahuacatlán-Tepetzintla Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhk -Description: Isthmus-Cosoleacaque Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhm -Description: Morelos Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhn -Description: Central Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nho -Description: Takuu -Added: 2009-07-29 -%% -Type: language -Subtag: nhp -Description: Isthmus-Pajapan Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhq -Description: Huaxcaleca Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhr -Description: Naro -Added: 2009-07-29 -%% -Type: language -Subtag: nht -Description: Ometepec Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhu -Description: Noone -Added: 2009-07-29 -%% -Type: language -Subtag: nhv -Description: Temascaltepec Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhw -Description: Western Huasteca Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhx -Description: Isthmus-Mecayapan Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhy -Description: Northern Oaxaca Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nhz -Description: Santa María La Alta Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nia -Description: Nias -Added: 2005-10-16 -%% -Type: language -Subtag: nib -Description: Nakame -Added: 2009-07-29 -%% -Type: language -Subtag: nic -Description: Niger-Kordofanian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: nid -Description: Ngandi -Added: 2009-07-29 -%% -Type: language -Subtag: nie -Description: Niellim -Added: 2009-07-29 -%% -Type: language -Subtag: nif -Description: Nek -Added: 2009-07-29 -%% -Type: language -Subtag: nig -Description: Ngalakan -Added: 2009-07-29 -%% -Type: language -Subtag: nih -Description: Nyiha (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: nii -Description: Nii -Added: 2009-07-29 -%% -Type: language -Subtag: nij -Description: Ngaju -Added: 2009-07-29 -%% -Type: language -Subtag: nik -Description: Southern Nicobarese -Added: 2009-07-29 -%% -Type: language -Subtag: nil -Description: Nila -Added: 2009-07-29 -%% -Type: language -Subtag: nim -Description: Nilamba -Added: 2009-07-29 -%% -Type: language -Subtag: nin -Description: Ninzo -Added: 2009-07-29 -%% -Type: language -Subtag: nio -Description: Nganasan -Added: 2009-07-29 -%% -Type: language -Subtag: niq -Description: Nandi -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: nir -Description: Nimboran -Added: 2009-07-29 -%% -Type: language -Subtag: nis -Description: Nimi -Added: 2009-07-29 -%% -Type: language -Subtag: nit -Description: Southeastern Kolami -Added: 2009-07-29 -%% -Type: language -Subtag: niu -Description: Niuean -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: niv -Description: Gilyak -Added: 2009-07-29 -%% -Type: language -Subtag: niw -Description: Nimo -Added: 2009-07-29 -%% -Type: language -Subtag: nix -Description: Hema -Added: 2009-07-29 -%% -Type: language -Subtag: niy -Description: Ngiti -Added: 2009-07-29 -%% -Type: language -Subtag: niz -Description: Ningil -Added: 2009-07-29 -%% -Type: language -Subtag: nja -Description: Nzanyi -Added: 2009-07-29 -%% -Type: language -Subtag: njb -Description: Nocte Naga -Added: 2009-07-29 -%% -Type: language -Subtag: njd -Description: Ndonde Hamba -Added: 2009-07-29 -%% -Type: language -Subtag: njh -Description: Lotha Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nji -Description: Gudanji -Added: 2009-07-29 -%% -Type: language -Subtag: njj -Description: Njen -Added: 2009-07-29 -%% -Type: language -Subtag: njl -Description: Njalgulgule -Added: 2009-07-29 -%% -Type: language -Subtag: njm -Description: Angami Naga -Added: 2009-07-29 -%% -Type: language -Subtag: njn -Description: Liangmai Naga -Added: 2009-07-29 -%% -Type: language -Subtag: njo -Description: Ao Naga -Added: 2009-07-29 -%% -Type: language -Subtag: njr -Description: Njerep -Added: 2009-07-29 -%% -Type: language -Subtag: njs -Description: Nisa -Added: 2009-07-29 -%% -Type: language -Subtag: njt -Description: Ndyuka-Trio Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: nju -Description: Ngadjunmaya -Added: 2009-07-29 -%% -Type: language -Subtag: njx -Description: Kunyi -Added: 2009-07-29 -%% -Type: language -Subtag: njy -Description: Njyem -Added: 2009-07-29 -%% -Type: language -Subtag: njz -Description: Nyishi -Added: 2012-08-12 -%% -Type: language -Subtag: nka -Description: Nkoya -Added: 2009-07-29 -%% -Type: language -Subtag: nkb -Description: Khoibu Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nkc -Description: Nkongho -Added: 2009-07-29 -%% -Type: language -Subtag: nkd -Description: Koireng -Added: 2009-07-29 -%% -Type: language -Subtag: nke -Description: Duke -Added: 2009-07-29 -%% -Type: language -Subtag: nkf -Description: Inpui Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nkg -Description: Nekgini -Added: 2009-07-29 -%% -Type: language -Subtag: nkh -Description: Khezha Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nki -Description: Thangal Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nkj -Description: Nakai -Added: 2009-07-29 -%% -Type: language -Subtag: nkk -Description: Nokuku -Added: 2009-07-29 -%% -Type: language -Subtag: nkm -Description: Namat -Added: 2009-07-29 -%% -Type: language -Subtag: nkn -Description: Nkangala -Added: 2009-07-29 -%% -Type: language -Subtag: nko -Description: Nkonya -Added: 2009-07-29 -%% -Type: language -Subtag: nkp -Description: Niuatoputapu -Added: 2009-07-29 -%% -Type: language -Subtag: nkq -Description: Nkami -Added: 2010-04-16 -%% -Type: language -Subtag: nkr -Description: Nukuoro -Added: 2009-07-29 -%% -Type: language -Subtag: nks -Description: North Asmat -Added: 2009-07-29 -%% -Type: language -Subtag: nkt -Description: Nyika (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: nku -Description: Bouna Kulango -Added: 2009-07-29 -%% -Type: language -Subtag: nkv -Description: Nyika (Malawi and Zambia) -Added: 2009-07-29 -%% -Type: language -Subtag: nkw -Description: Nkutu -Added: 2009-07-29 -%% -Type: language -Subtag: nkx -Description: Nkoroo -Added: 2009-07-29 -%% -Type: language -Subtag: nkz -Description: Nkari -Added: 2009-07-29 -%% -Type: language -Subtag: nla -Description: Ngombale -Added: 2009-07-29 -%% -Type: language -Subtag: nlc -Description: Nalca -Added: 2009-07-29 -%% -Type: language -Subtag: nle -Description: East Nyala -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: nlg -Description: Gela -Added: 2009-07-29 -%% -Type: language -Subtag: nli -Description: Grangali -Added: 2009-07-29 -%% -Type: language -Subtag: nlj -Description: Nyali -Added: 2009-07-29 -%% -Type: language -Subtag: nlk -Description: Ninia Yali -Added: 2009-07-29 -%% -Type: language -Subtag: nll -Description: Nihali -Added: 2009-07-29 -%% -Type: language -Subtag: nln -Description: Durango Nahuatl -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see azd, azn -%% -Type: language -Subtag: nlo -Description: Ngul -Added: 2009-07-29 -%% -Type: language -Subtag: nlq -Description: Lao Naga -Added: 2013-09-10 -%% -Type: language -Subtag: nlr -Description: Ngarla -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see nrk, ywg -%% -Type: language -Subtag: nlu -Description: Nchumbulu -Added: 2009-07-29 -%% -Type: language -Subtag: nlv -Description: Orizaba Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nlw -Description: Walangama -Added: 2013-09-10 -%% -Type: language -Subtag: nlx -Description: Nahali -Added: 2009-07-29 -%% -Type: language -Subtag: nly -Description: Nyamal -Added: 2009-07-29 -%% -Type: language -Subtag: nlz -Description: Nalögo -Added: 2009-07-29 -%% -Type: language -Subtag: nma -Description: Maram Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nmb -Description: Big Nambas -Description: V'ënen Taut -Added: 2009-07-29 -%% -Type: language -Subtag: nmc -Description: Ngam -Added: 2009-07-29 -%% -Type: language -Subtag: nmd -Description: Ndumu -Added: 2009-07-29 -%% -Type: language -Subtag: nme -Description: Mzieme Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nmf -Description: Tangkhul Naga (India) -Added: 2009-07-29 -Comments: see ntx -%% -Type: language -Subtag: nmg -Description: Kwasio -Added: 2009-07-29 -%% -Type: language -Subtag: nmh -Description: Monsang Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nmi -Description: Nyam -Added: 2009-07-29 -%% -Type: language -Subtag: nmj -Description: Ngombe (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: nmk -Description: Namakura -Added: 2009-07-29 -%% -Type: language -Subtag: nml -Description: Ndemli -Added: 2009-07-29 -%% -Type: language -Subtag: nmm -Description: Manangba -Added: 2009-07-29 -%% -Type: language -Subtag: nmn -Description: !Xóõ -Added: 2009-07-29 -%% -Type: language -Subtag: nmo -Description: Moyon Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nmp -Description: Nimanbur -Added: 2009-07-29 -%% -Type: language -Subtag: nmq -Description: Nambya -Added: 2009-07-29 -%% -Type: language -Subtag: nmr -Description: Nimbari -Added: 2009-07-29 -%% -Type: language -Subtag: nms -Description: Letemboi -Added: 2009-07-29 -%% -Type: language -Subtag: nmt -Description: Namonuito -Added: 2009-07-29 -%% -Type: language -Subtag: nmu -Description: Northeast Maidu -Added: 2009-07-29 -%% -Type: language -Subtag: nmv -Description: Ngamini -Added: 2009-07-29 -%% -Type: language -Subtag: nmw -Description: Nimoa -Added: 2009-07-29 -%% -Type: language -Subtag: nmx -Description: Nama (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: nmy -Description: Namuyi -Added: 2009-07-29 -%% -Type: language -Subtag: nmz -Description: Nawdm -Added: 2009-07-29 -%% -Type: language -Subtag: nna -Description: Nyangumarta -Added: 2009-07-29 -%% -Type: language -Subtag: nnb -Description: Nande -Added: 2009-07-29 -%% -Type: language -Subtag: nnc -Description: Nancere -Added: 2009-07-29 -%% -Type: language -Subtag: nnd -Description: West Ambae -Added: 2009-07-29 -%% -Type: language -Subtag: nne -Description: Ngandyera -Added: 2009-07-29 -%% -Type: language -Subtag: nnf -Description: Ngaing -Added: 2009-07-29 -%% -Type: language -Subtag: nng -Description: Maring Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nnh -Description: Ngiemboon -Added: 2009-07-29 -%% -Type: language -Subtag: nni -Description: North Nuaulu -Added: 2009-07-29 -%% -Type: language -Subtag: nnj -Description: Nyangatom -Added: 2009-07-29 -%% -Type: language -Subtag: nnk -Description: Nankina -Added: 2009-07-29 -%% -Type: language -Subtag: nnl -Description: Northern Rengma Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nnm -Description: Namia -Added: 2009-07-29 -%% -Type: language -Subtag: nnn -Description: Ngete -Added: 2009-07-29 -%% -Type: language -Subtag: nnp -Description: Wancho Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nnq -Description: Ngindo -Added: 2009-07-29 -%% -Type: language -Subtag: nnr -Description: Narungga -Added: 2009-07-29 -%% -Type: language -Subtag: nns -Description: Ningye -Added: 2009-07-29 -%% -Type: language -Subtag: nnt -Description: Nanticoke -Added: 2009-07-29 -%% -Type: language -Subtag: nnu -Description: Dwang -Added: 2009-07-29 -%% -Type: language -Subtag: nnv -Description: Nugunu (Australia) -Added: 2009-07-29 -%% -Type: language -Subtag: nnw -Description: Southern Nuni -Added: 2009-07-29 -%% -Type: language -Subtag: nnx -Description: Ngong -Added: 2009-07-29 -%% -Type: language -Subtag: nny -Description: Nyangga -Added: 2009-07-29 -%% -Type: language -Subtag: nnz -Description: Nda'nda' -Added: 2009-07-29 -%% -Type: language -Subtag: noa -Description: Woun Meu -Added: 2009-07-29 -%% -Type: language -Subtag: noc -Description: Nuk -Added: 2009-07-29 -%% -Type: language -Subtag: nod -Description: Northern Thai -Added: 2009-07-29 -%% -Type: language -Subtag: noe -Description: Nimadi -Added: 2009-07-29 -%% -Type: language -Subtag: nof -Description: Nomane -Added: 2009-07-29 -%% -Type: language -Subtag: nog -Description: Nogai -Added: 2005-10-16 -%% -Type: language -Subtag: noh -Description: Nomu -Added: 2009-07-29 -%% -Type: language -Subtag: noi -Description: Noiri -Added: 2009-07-29 -%% -Type: language -Subtag: noj -Description: Nonuya -Added: 2010-03-11 -%% -Type: language -Subtag: nok -Description: Nooksack -Added: 2009-07-29 -%% -Type: language -Subtag: nol -Description: Nomlaki -Added: 2013-09-10 -%% -Type: language -Subtag: nom -Description: Nocamán -Added: 2009-07-29 -%% -Type: language -Subtag: non -Description: Old Norse -Added: 2005-10-16 -%% -Type: language -Subtag: noo -Description: Nootka -Added: 2009-07-29 -Deprecated: 2011-08-16 -Comments: see dtd, nuk -%% -Type: language -Subtag: nop -Description: Numanggang -Added: 2009-07-29 -%% -Type: language -Subtag: noq -Description: Ngongo -Added: 2009-07-29 -%% -Type: language -Subtag: nos -Description: Eastern Nisu -Added: 2009-07-29 -%% -Type: language -Subtag: not -Description: Nomatsiguenga -Added: 2009-07-29 -%% -Type: language -Subtag: nou -Description: Ewage-Notu -Added: 2009-07-29 -%% -Type: language -Subtag: nov -Description: Novial -Added: 2009-07-29 -%% -Type: language -Subtag: now -Description: Nyambo -Added: 2009-07-29 -%% -Type: language -Subtag: noy -Description: Noy -Added: 2009-07-29 -%% -Type: language -Subtag: noz -Description: Nayi -Added: 2009-07-29 -%% -Type: language -Subtag: npa -Description: Nar Phu -Added: 2009-07-29 -%% -Type: language -Subtag: npb -Description: Nupbikha -Added: 2009-07-29 -%% -Type: language -Subtag: npg -Description: Ponyo-Gongwang Naga -Added: 2012-08-12 -%% -Type: language -Subtag: nph -Description: Phom Naga -Added: 2009-07-29 -%% -Type: language -Subtag: npi -Description: Nepali (individual language) -Added: 2012-08-12 -Macrolanguage: ne -%% -Type: language -Subtag: npl -Description: Southeastern Puebla Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: npn -Description: Mondropolon -Added: 2009-07-29 -%% -Type: language -Subtag: npo -Description: Pochuri Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nps -Description: Nipsan -Added: 2009-07-29 -%% -Type: language -Subtag: npu -Description: Puimei Naga -Added: 2009-07-29 -%% -Type: language -Subtag: npy -Description: Napu -Added: 2009-07-29 -%% -Type: language -Subtag: nqg -Description: Southern Nago -Added: 2009-07-29 -%% -Type: language -Subtag: nqk -Description: Kura Ede Nago -Added: 2009-07-29 -%% -Type: language -Subtag: nqm -Description: Ndom -Added: 2009-07-29 -%% -Type: language -Subtag: nqn -Description: Nen -Added: 2009-07-29 -%% -Type: language -Subtag: nqo -Description: N'Ko -Description: N’Ko -Added: 2006-06-05 -Suppress-Script: Nkoo -%% -Type: language -Subtag: nqq -Description: Kyan-Karyaw Naga -Added: 2013-09-10 -%% -Type: language -Subtag: nqy -Description: Akyaung Ari Naga -Added: 2012-08-12 -%% -Type: language -Subtag: nra -Description: Ngom -Added: 2009-07-29 -%% -Type: language -Subtag: nrb -Description: Nara -Added: 2009-07-29 -%% -Type: language -Subtag: nrc -Description: Noric -Added: 2009-07-29 -%% -Type: language -Subtag: nre -Description: Southern Rengma Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nrg -Description: Narango -Added: 2009-07-29 -%% -Type: language -Subtag: nri -Description: Chokri Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nrk -Description: Ngarla -Added: 2013-09-10 -%% -Type: language -Subtag: nrl -Description: Ngarluma -Added: 2009-07-29 -%% -Type: language -Subtag: nrm -Description: Narom -Added: 2009-07-29 -%% -Type: language -Subtag: nrn -Description: Norn -Added: 2009-07-29 -%% -Type: language -Subtag: nrp -Description: North Picene -Added: 2009-07-29 -%% -Type: language -Subtag: nrr -Description: Norra -Description: Nora -Added: 2009-07-29 -%% -Type: language -Subtag: nrt -Description: Northern Kalapuya -Added: 2009-07-29 -%% -Type: language -Subtag: nru -Description: Narua -Added: 2011-08-16 -%% -Type: language -Subtag: nrx -Description: Ngurmbur -Added: 2009-07-29 -%% -Type: language -Subtag: nrz -Description: Lala -Added: 2009-07-29 -%% -Type: language -Subtag: nsa -Description: Sangtam Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nsc -Description: Nshi -Added: 2009-07-29 -%% -Type: language -Subtag: nsd -Description: Southern Nisu -Added: 2009-07-29 -%% -Type: language -Subtag: nse -Description: Nsenga -Added: 2009-07-29 -%% -Type: language -Subtag: nsf -Description: Northwestern Nisu -Added: 2012-08-12 -%% -Type: language -Subtag: nsg -Description: Ngasa -Added: 2009-07-29 -%% -Type: language -Subtag: nsh -Description: Ngoshie -Added: 2009-07-29 -%% -Type: language -Subtag: nsi -Description: Nigerian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: nsk -Description: Naskapi -Added: 2009-07-29 -%% -Type: language -Subtag: nsl -Description: Norwegian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: nsm -Description: Sumi Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nsn -Description: Nehan -Added: 2009-07-29 -%% -Type: language -Subtag: nso -Description: Pedi -Description: Northern Sotho -Description: Sepedi -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: nsp -Description: Nepalese Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: nsq -Description: Northern Sierra Miwok -Added: 2009-07-29 -%% -Type: language -Subtag: nsr -Description: Maritime Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: nss -Description: Nali -Added: 2009-07-29 -%% -Type: language -Subtag: nst -Description: Tase Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nsu -Description: Sierra Negra Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nsv -Description: Southwestern Nisu -Added: 2009-07-29 -%% -Type: language -Subtag: nsw -Description: Navut -Added: 2009-07-29 -%% -Type: language -Subtag: nsx -Description: Nsongo -Added: 2009-07-29 -%% -Type: language -Subtag: nsy -Description: Nasal -Added: 2009-07-29 -%% -Type: language -Subtag: nsz -Description: Nisenan -Added: 2009-07-29 -%% -Type: language -Subtag: nte -Description: Nathembo -Added: 2009-07-29 -%% -Type: language -Subtag: ntg -Description: Ngantangarra -Added: 2013-09-10 -%% -Type: language -Subtag: nti -Description: Natioro -Added: 2009-07-29 -%% -Type: language -Subtag: ntj -Description: Ngaanyatjarra -Added: 2009-07-29 -%% -Type: language -Subtag: ntk -Description: Ikoma-Nata-Isenye -Added: 2009-07-29 -%% -Type: language -Subtag: ntm -Description: Nateni -Added: 2009-07-29 -%% -Type: language -Subtag: nto -Description: Ntomba -Added: 2009-07-29 -%% -Type: language -Subtag: ntp -Description: Northern Tepehuan -Added: 2009-07-29 -%% -Type: language -Subtag: ntr -Description: Delo -Added: 2009-07-29 -%% -Type: language -Subtag: nts -Description: Natagaimas -Added: 2009-07-29 -%% -Type: language -Subtag: ntu -Description: Natügu -Added: 2009-07-29 -%% -Type: language -Subtag: ntw -Description: Nottoway -Added: 2009-07-29 -%% -Type: language -Subtag: ntx -Description: Tangkhul Naga (Myanmar) -Added: 2012-08-12 -Comments: see nmf -%% -Type: language -Subtag: nty -Description: Mantsi -Added: 2009-07-29 -%% -Type: language -Subtag: ntz -Description: Natanzi -Added: 2009-07-29 -%% -Type: language -Subtag: nua -Description: Yuanga -Added: 2009-07-29 -%% -Type: language -Subtag: nub -Description: Nubian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: nuc -Description: Nukuini -Added: 2009-07-29 -%% -Type: language -Subtag: nud -Description: Ngala -Added: 2009-07-29 -%% -Type: language -Subtag: nue -Description: Ngundu -Added: 2009-07-29 -%% -Type: language -Subtag: nuf -Description: Nusu -Added: 2009-07-29 -%% -Type: language -Subtag: nug -Description: Nungali -Added: 2009-07-29 -%% -Type: language -Subtag: nuh -Description: Ndunda -Added: 2009-07-29 -%% -Type: language -Subtag: nui -Description: Ngumbi -Added: 2009-07-29 -%% -Type: language -Subtag: nuj -Description: Nyole -Added: 2009-07-29 -%% -Type: language -Subtag: nuk -Description: Nuu-chah-nulth -Description: Nuuchahnulth -Added: 2011-08-16 -%% -Type: language -Subtag: nul -Description: Nusa Laut -Added: 2009-07-29 -%% -Type: language -Subtag: num -Description: Niuafo'ou -Added: 2009-07-29 -%% -Type: language -Subtag: nun -Description: Anong -Added: 2009-07-29 -%% -Type: language -Subtag: nuo -Description: Nguôn -Added: 2009-07-29 -%% -Type: language -Subtag: nup -Description: Nupe-Nupe-Tako -Added: 2009-07-29 -%% -Type: language -Subtag: nuq -Description: Nukumanu -Added: 2009-07-29 -%% -Type: language -Subtag: nur -Description: Nukuria -Added: 2009-07-29 -%% -Type: language -Subtag: nus -Description: Nuer -Added: 2009-07-29 -%% -Type: language -Subtag: nut -Description: Nung (Viet Nam) -Added: 2009-07-29 -%% -Type: language -Subtag: nuu -Description: Ngbundu -Added: 2009-07-29 -%% -Type: language -Subtag: nuv -Description: Northern Nuni -Added: 2009-07-29 -%% -Type: language -Subtag: nuw -Description: Nguluwan -Added: 2009-07-29 -%% -Type: language -Subtag: nux -Description: Mehek -Added: 2009-07-29 -%% -Type: language -Subtag: nuy -Description: Nunggubuyu -Added: 2009-07-29 -%% -Type: language -Subtag: nuz -Description: Tlamacazapa Nahuatl -Added: 2009-07-29 -%% -Type: language -Subtag: nvh -Description: Nasarian -Added: 2009-07-29 -%% -Type: language -Subtag: nvm -Description: Namiae -Added: 2009-07-29 -%% -Type: language -Subtag: nvo -Description: Nyokon -Added: 2012-08-12 -%% -Type: language -Subtag: nwa -Description: Nawathinehena -Added: 2009-07-29 -%% -Type: language -Subtag: nwb -Description: Nyabwa -Added: 2009-07-29 -%% -Type: language -Subtag: nwc -Description: Classical Newari -Description: Classical Nepal Bhasa -Description: Old Newari -Added: 2005-10-16 -%% -Type: language -Subtag: nwe -Description: Ngwe -Added: 2009-07-29 -%% -Type: language -Subtag: nwg -Description: Ngayawung -Added: 2012-08-12 -%% -Type: language -Subtag: nwi -Description: Southwest Tanna -Added: 2009-07-29 -%% -Type: language -Subtag: nwm -Description: Nyamusa-Molo -Added: 2009-07-29 -%% -Type: language -Subtag: nwo -Description: Nauo -Added: 2012-08-12 -%% -Type: language -Subtag: nwr -Description: Nawaru -Added: 2009-07-29 -%% -Type: language -Subtag: nwx -Description: Middle Newar -Added: 2009-07-29 -%% -Type: language -Subtag: nwy -Description: Nottoway-Meherrin -Added: 2009-07-29 -%% -Type: language -Subtag: nxa -Description: Nauete -Added: 2009-07-29 -%% -Type: language -Subtag: nxd -Description: Ngando (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: nxe -Description: Nage -Added: 2009-07-29 -%% -Type: language -Subtag: nxg -Description: Ngad'a -Added: 2009-07-29 -%% -Type: language -Subtag: nxi -Description: Nindi -Added: 2009-07-29 -%% -Type: language -Subtag: nxk -Description: Koki Naga -Added: 2012-08-12 -%% -Type: language -Subtag: nxl -Description: South Nuaulu -Added: 2009-07-29 -%% -Type: language -Subtag: nxm -Description: Numidian -Added: 2009-07-29 -%% -Type: language -Subtag: nxn -Description: Ngawun -Added: 2009-07-29 -%% -Type: language -Subtag: nxq -Description: Naxi -Added: 2011-08-16 -%% -Type: language -Subtag: nxr -Description: Ninggerum -Added: 2009-07-29 -%% -Type: language -Subtag: nxu -Description: Narau -Added: 2009-07-29 -%% -Type: language -Subtag: nxx -Description: Nafri -Added: 2009-07-29 -%% -Type: language -Subtag: nyb -Description: Nyangbo -Added: 2009-07-29 -%% -Type: language -Subtag: nyc -Description: Nyanga-li -Added: 2009-07-29 -%% -Type: language -Subtag: nyd -Description: Nyore -Description: Olunyole -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: nye -Description: Nyengo -Added: 2009-07-29 -%% -Type: language -Subtag: nyf -Description: Giryama -Description: Kigiryama -Added: 2009-07-29 -%% -Type: language -Subtag: nyg -Description: Nyindu -Added: 2009-07-29 -%% -Type: language -Subtag: nyh -Description: Nyigina -Added: 2009-07-29 -%% -Type: language -Subtag: nyi -Description: Ama (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: nyj -Description: Nyanga -Added: 2009-07-29 -%% -Type: language -Subtag: nyk -Description: Nyaneka -Added: 2009-07-29 -%% -Type: language -Subtag: nyl -Description: Nyeu -Added: 2009-07-29 -%% -Type: language -Subtag: nym -Description: Nyamwezi -Added: 2005-10-16 -%% -Type: language -Subtag: nyn -Description: Nyankole -Added: 2005-10-16 -%% -Type: language -Subtag: nyo -Description: Nyoro -Added: 2005-10-16 -%% -Type: language -Subtag: nyp -Description: Nyang'i -Added: 2009-07-29 -%% -Type: language -Subtag: nyq -Description: Nayini -Added: 2009-07-29 -%% -Type: language -Subtag: nyr -Description: Nyiha (Malawi) -Added: 2009-07-29 -%% -Type: language -Subtag: nys -Description: Nyunga -Added: 2009-07-29 -%% -Type: language -Subtag: nyt -Description: Nyawaygi -Added: 2009-07-29 -%% -Type: language -Subtag: nyu -Description: Nyungwe -Added: 2009-07-29 -%% -Type: language -Subtag: nyv -Description: Nyulnyul -Added: 2009-07-29 -%% -Type: language -Subtag: nyw -Description: Nyaw -Added: 2009-07-29 -%% -Type: language -Subtag: nyx -Description: Nganyaywana -Added: 2009-07-29 -%% -Type: language -Subtag: nyy -Description: Nyakyusa-Ngonde -Added: 2009-07-29 -%% -Type: language -Subtag: nza -Description: Tigon Mbembe -Added: 2009-07-29 -%% -Type: language -Subtag: nzb -Description: Njebi -Added: 2009-07-29 -%% -Type: language -Subtag: nzi -Description: Nzima -Added: 2005-10-16 -%% -Type: language -Subtag: nzk -Description: Nzakara -Added: 2009-07-29 -%% -Type: language -Subtag: nzm -Description: Zeme Naga -Added: 2009-07-29 -%% -Type: language -Subtag: nzs -Description: New Zealand Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: nzu -Description: Teke-Nzikou -Added: 2009-07-29 -%% -Type: language -Subtag: nzy -Description: Nzakambay -Added: 2009-07-29 -%% -Type: language -Subtag: nzz -Description: Nanga Dama Dogon -Added: 2010-03-11 -%% -Type: language -Subtag: oaa -Description: Orok -Added: 2009-07-29 -%% -Type: language -Subtag: oac -Description: Oroch -Added: 2009-07-29 -%% -Type: language -Subtag: oar -Description: Old Aramaic (up to 700 BCE) -Description: Ancient Aramaic (up to 700 BCE) -Added: 2009-07-29 -%% -Type: language -Subtag: oav -Description: Old Avar -Added: 2009-07-29 -%% -Type: language -Subtag: obi -Description: Obispeño -Added: 2009-07-29 -%% -Type: language -Subtag: obk -Description: Southern Bontok -Added: 2010-03-11 -Macrolanguage: bnc -%% -Type: language -Subtag: obl -Description: Oblo -Added: 2009-07-29 -%% -Type: language -Subtag: obm -Description: Moabite -Added: 2009-07-29 -%% -Type: language -Subtag: obo -Description: Obo Manobo -Added: 2009-07-29 -%% -Type: language -Subtag: obr -Description: Old Burmese -Added: 2009-07-29 -%% -Type: language -Subtag: obt -Description: Old Breton -Added: 2009-07-29 -%% -Type: language -Subtag: obu -Description: Obulom -Added: 2009-07-29 -%% -Type: language -Subtag: oca -Description: Ocaina -Added: 2009-07-29 -%% -Type: language -Subtag: och -Description: Old Chinese -Added: 2009-07-29 -%% -Type: language -Subtag: oco -Description: Old Cornish -Added: 2009-07-29 -%% -Type: language -Subtag: ocu -Description: Atzingo Matlatzinca -Added: 2009-07-29 -%% -Type: language -Subtag: oda -Description: Odut -Added: 2009-07-29 -%% -Type: language -Subtag: odk -Description: Od -Added: 2009-07-29 -%% -Type: language -Subtag: odt -Description: Old Dutch -Added: 2009-07-29 -%% -Type: language -Subtag: odu -Description: Odual -Added: 2009-07-29 -%% -Type: language -Subtag: ofo -Description: Ofo -Added: 2009-07-29 -%% -Type: language -Subtag: ofs -Description: Old Frisian -Added: 2009-07-29 -%% -Type: language -Subtag: ofu -Description: Efutop -Added: 2009-07-29 -%% -Type: language -Subtag: ogb -Description: Ogbia -Added: 2009-07-29 -%% -Type: language -Subtag: ogc -Description: Ogbah -Added: 2009-07-29 -%% -Type: language -Subtag: oge -Description: Old Georgian -Added: 2009-07-29 -%% -Type: language -Subtag: ogg -Description: Ogbogolo -Added: 2009-07-29 -%% -Type: language -Subtag: ogo -Description: Khana -Added: 2009-07-29 -%% -Type: language -Subtag: ogu -Description: Ogbronuagum -Added: 2009-07-29 -%% -Type: language -Subtag: oht -Description: Old Hittite -Added: 2009-07-29 -%% -Type: language -Subtag: ohu -Description: Old Hungarian -Added: 2009-07-29 -%% -Type: language -Subtag: oia -Description: Oirata -Added: 2009-07-29 -%% -Type: language -Subtag: oin -Description: Inebu One -Added: 2009-07-29 -%% -Type: language -Subtag: ojb -Description: Northwestern Ojibwa -Added: 2009-07-29 -Macrolanguage: oj -%% -Type: language -Subtag: ojc -Description: Central Ojibwa -Added: 2009-07-29 -Macrolanguage: oj -%% -Type: language -Subtag: ojg -Description: Eastern Ojibwa -Added: 2009-07-29 -Macrolanguage: oj -%% -Type: language -Subtag: ojp -Description: Old Japanese -Added: 2009-07-29 -%% -Type: language -Subtag: ojs -Description: Severn Ojibwa -Added: 2009-07-29 -Macrolanguage: oj -%% -Type: language -Subtag: ojv -Description: Ontong Java -Added: 2009-07-29 -%% -Type: language -Subtag: ojw -Description: Western Ojibwa -Added: 2009-07-29 -Macrolanguage: oj -%% -Type: language -Subtag: oka -Description: Okanagan -Added: 2009-07-29 -%% -Type: language -Subtag: okb -Description: Okobo -Added: 2009-07-29 -%% -Type: language -Subtag: okd -Description: Okodia -Added: 2009-07-29 -%% -Type: language -Subtag: oke -Description: Okpe (Southwestern Edo) -Added: 2009-07-29 -%% -Type: language -Subtag: okg -Description: Koko Babangk -Added: 2012-08-12 -%% -Type: language -Subtag: okh -Description: Koresh-e Rostam -Added: 2009-07-29 -%% -Type: language -Subtag: oki -Description: Okiek -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: okj -Description: Oko-Juwoi -Added: 2009-07-29 -%% -Type: language -Subtag: okk -Description: Kwamtim One -Added: 2009-07-29 -%% -Type: language -Subtag: okl -Description: Old Kentish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: okm -Description: Middle Korean (10th-16th cent.) -Added: 2009-07-29 -%% -Type: language -Subtag: okn -Description: Oki-No-Erabu -Added: 2009-07-29 -%% -Type: language -Subtag: oko -Description: Old Korean (3rd-9th cent.) -Added: 2009-07-29 -%% -Type: language -Subtag: okr -Description: Kirike -Added: 2009-07-29 -%% -Type: language -Subtag: oks -Description: Oko-Eni-Osayen -Added: 2009-07-29 -%% -Type: language -Subtag: oku -Description: Oku -Added: 2009-07-29 -%% -Type: language -Subtag: okv -Description: Orokaiva -Added: 2009-07-29 -%% -Type: language -Subtag: okx -Description: Okpe (Northwestern Edo) -Added: 2009-07-29 -%% -Type: language -Subtag: ola -Description: Walungge -Added: 2009-07-29 -%% -Type: language -Subtag: old -Description: Mochi -Added: 2009-07-29 -%% -Type: language -Subtag: ole -Description: Olekha -Added: 2009-07-29 -%% -Type: language -Subtag: olk -Description: Olkol -Added: 2013-09-10 -%% -Type: language -Subtag: olm -Description: Oloma -Added: 2009-07-29 -%% -Type: language -Subtag: olo -Description: Livvi -Added: 2009-07-29 -%% -Type: language -Subtag: olr -Description: Olrat -Added: 2009-07-29 -%% -Type: language -Subtag: oma -Description: Omaha-Ponca -Added: 2009-07-29 -%% -Type: language -Subtag: omb -Description: East Ambae -Added: 2009-07-29 -%% -Type: language -Subtag: omc -Description: Mochica -Added: 2009-07-29 -%% -Type: language -Subtag: ome -Description: Omejes -Added: 2009-07-29 -%% -Type: language -Subtag: omg -Description: Omagua -Added: 2009-07-29 -%% -Type: language -Subtag: omi -Description: Omi -Added: 2009-07-29 -%% -Type: language -Subtag: omk -Description: Omok -Added: 2009-07-29 -%% -Type: language -Subtag: oml -Description: Ombo -Added: 2009-07-29 -%% -Type: language -Subtag: omn -Description: Minoan -Added: 2009-07-29 -%% -Type: language -Subtag: omo -Description: Utarmbung -Added: 2009-07-29 -%% -Type: language -Subtag: omp -Description: Old Manipuri -Added: 2009-07-29 -%% -Type: language -Subtag: omq -Description: Oto-Manguean languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: omr -Description: Old Marathi -Added: 2009-07-29 -%% -Type: language -Subtag: omt -Description: Omotik -Added: 2009-07-29 -%% -Type: language -Subtag: omu -Description: Omurano -Added: 2009-07-29 -%% -Type: language -Subtag: omv -Description: Omotic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: omw -Description: South Tairora -Added: 2009-07-29 -%% -Type: language -Subtag: omx -Description: Old Mon -Added: 2009-07-29 -%% -Type: language -Subtag: ona -Description: Ona -Added: 2009-07-29 -%% -Type: language -Subtag: onb -Description: Lingao -Added: 2009-07-29 -%% -Type: language -Subtag: one -Description: Oneida -Added: 2009-07-29 -%% -Type: language -Subtag: ong -Description: Olo -Added: 2009-07-29 -%% -Type: language -Subtag: oni -Description: Onin -Added: 2009-07-29 -%% -Type: language -Subtag: onj -Description: Onjob -Added: 2009-07-29 -%% -Type: language -Subtag: onk -Description: Kabore One -Added: 2009-07-29 -%% -Type: language -Subtag: onn -Description: Onobasulu -Added: 2009-07-29 -%% -Type: language -Subtag: ono -Description: Onondaga -Added: 2009-07-29 -%% -Type: language -Subtag: onp -Description: Sartang -Added: 2009-07-29 -%% -Type: language -Subtag: onr -Description: Northern One -Added: 2009-07-29 -%% -Type: language -Subtag: ons -Description: Ono -Added: 2009-07-29 -%% -Type: language -Subtag: ont -Description: Ontenu -Added: 2009-07-29 -%% -Type: language -Subtag: onu -Description: Unua -Added: 2009-07-29 -%% -Type: language -Subtag: onw -Description: Old Nubian -Added: 2009-07-29 -%% -Type: language -Subtag: onx -Description: Onin Based Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: ood -Description: Tohono O'odham -Added: 2009-07-29 -%% -Type: language -Subtag: oog -Description: Ong -Added: 2009-07-29 -%% -Type: language -Subtag: oon -Description: Önge -Added: 2009-07-29 -%% -Type: language -Subtag: oor -Description: Oorlams -Added: 2009-07-29 -%% -Type: language -Subtag: oos -Description: Old Ossetic -Added: 2009-07-29 -%% -Type: language -Subtag: opa -Description: Okpamheri -Added: 2009-07-29 -%% -Type: language -Subtag: opk -Description: Kopkaka -Added: 2009-07-29 -%% -Type: language -Subtag: opm -Description: Oksapmin -Added: 2009-07-29 -%% -Type: language -Subtag: opo -Description: Opao -Added: 2009-07-29 -%% -Type: language -Subtag: opt -Description: Opata -Added: 2009-07-29 -%% -Type: language -Subtag: opy -Description: Ofayé -Added: 2009-07-29 -%% -Type: language -Subtag: ora -Description: Oroha -Added: 2009-07-29 -%% -Type: language -Subtag: orc -Description: Orma -Added: 2009-07-29 -Macrolanguage: om -%% -Type: language -Subtag: ore -Description: Orejón -Added: 2009-07-29 -%% -Type: language -Subtag: org -Description: Oring -Added: 2009-07-29 -%% -Type: language -Subtag: orh -Description: Oroqen -Added: 2009-07-29 -%% -Type: language -Subtag: orn -Description: Orang Kanaq -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: oro -Description: Orokolo -Added: 2009-07-29 -%% -Type: language -Subtag: orr -Description: Oruma -Added: 2009-07-29 -%% -Type: language -Subtag: ors -Description: Orang Seletar -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: ort -Description: Adivasi Oriya -Added: 2009-07-29 -%% -Type: language -Subtag: oru -Description: Ormuri -Added: 2009-07-29 -%% -Type: language -Subtag: orv -Description: Old Russian -Added: 2009-07-29 -%% -Type: language -Subtag: orw -Description: Oro Win -Added: 2009-07-29 -%% -Type: language -Subtag: orx -Description: Oro -Added: 2009-07-29 -%% -Type: language -Subtag: ory -Description: Oriya (individual language) -Added: 2012-08-12 -Macrolanguage: or -%% -Type: language -Subtag: orz -Description: Ormu -Added: 2009-07-29 -%% -Type: language -Subtag: osa -Description: Osage -Added: 2005-10-16 -%% -Type: language -Subtag: osc -Description: Oscan -Added: 2009-07-29 -%% -Type: language -Subtag: osi -Description: Osing -Added: 2009-07-29 -%% -Type: language -Subtag: oso -Description: Ososo -Added: 2009-07-29 -%% -Type: language -Subtag: osp -Description: Old Spanish -Added: 2009-07-29 -%% -Type: language -Subtag: ost -Description: Osatu -Added: 2009-07-29 -%% -Type: language -Subtag: osu -Description: Southern One -Added: 2009-07-29 -%% -Type: language -Subtag: osx -Description: Old Saxon -Added: 2009-07-29 -%% -Type: language -Subtag: ota -Description: Ottoman Turkish (1500-1928) -Added: 2005-10-16 -%% -Type: language -Subtag: otb -Description: Old Tibetan -Added: 2009-07-29 -%% -Type: language -Subtag: otd -Description: Ot Danum -Added: 2009-07-29 -%% -Type: language -Subtag: ote -Description: Mezquital Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: oti -Description: Oti -Added: 2009-07-29 -%% -Type: language -Subtag: otk -Description: Old Turkish -Added: 2009-07-29 -%% -Type: language -Subtag: otl -Description: Tilapa Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: otm -Description: Eastern Highland Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: otn -Description: Tenango Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: oto -Description: Otomian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: otq -Description: Querétaro Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: otr -Description: Otoro -Added: 2009-07-29 -%% -Type: language -Subtag: ots -Description: Estado de México Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: ott -Description: Temoaya Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: otu -Description: Otuke -Added: 2009-07-29 -%% -Type: language -Subtag: otw -Description: Ottawa -Added: 2009-07-29 -Macrolanguage: oj -%% -Type: language -Subtag: otx -Description: Texcatepec Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: oty -Description: Old Tamil -Added: 2009-07-29 -%% -Type: language -Subtag: otz -Description: Ixtenco Otomi -Added: 2009-07-29 -%% -Type: language -Subtag: oua -Description: Tagargrent -Added: 2009-07-29 -%% -Type: language -Subtag: oub -Description: Glio-Oubi -Added: 2009-07-29 -%% -Type: language -Subtag: oue -Description: Oune -Added: 2009-07-29 -%% -Type: language -Subtag: oui -Description: Old Uighur -Added: 2009-07-29 -%% -Type: language -Subtag: oum -Description: Ouma -Added: 2009-07-29 -%% -Type: language -Subtag: oun -Description: !O!ung -Added: 2009-07-29 -%% -Type: language -Subtag: owi -Description: Owiniga -Added: 2009-07-29 -%% -Type: language -Subtag: owl -Description: Old Welsh -Added: 2009-07-29 -%% -Type: language -Subtag: oyb -Description: Oy -Added: 2009-07-29 -%% -Type: language -Subtag: oyd -Description: Oyda -Added: 2009-07-29 -%% -Type: language -Subtag: oym -Description: Wayampi -Added: 2009-07-29 -%% -Type: language -Subtag: oyy -Description: Oya'oya -Added: 2009-07-29 -%% -Type: language -Subtag: ozm -Description: Koonzime -Added: 2009-07-29 -%% -Type: language -Subtag: paa -Description: Papuan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: pab -Description: Parecís -Added: 2009-07-29 -%% -Type: language -Subtag: pac -Description: Pacoh -Added: 2009-07-29 -%% -Type: language -Subtag: pad -Description: Paumarí -Added: 2009-07-29 -%% -Type: language -Subtag: pae -Description: Pagibete -Added: 2009-07-29 -%% -Type: language -Subtag: paf -Description: Paranawát -Added: 2009-07-29 -%% -Type: language -Subtag: pag -Description: Pangasinan -Added: 2005-10-16 -%% -Type: language -Subtag: pah -Description: Tenharim -Added: 2009-07-29 -%% -Type: language -Subtag: pai -Description: Pe -Added: 2009-07-29 -%% -Type: language -Subtag: pak -Description: Parakanã -Added: 2009-07-29 -%% -Type: language -Subtag: pal -Description: Pahlavi -Added: 2005-10-16 -%% -Type: language -Subtag: pam -Description: Pampanga -Description: Kapampangan -Added: 2005-10-16 -%% -Type: language -Subtag: pao -Description: Northern Paiute -Added: 2009-07-29 -%% -Type: language -Subtag: pap -Description: Papiamento -Added: 2005-10-16 -%% -Type: language -Subtag: paq -Description: Parya -Added: 2009-07-29 -%% -Type: language -Subtag: par -Description: Panamint -Description: Timbisha -Added: 2009-07-29 -%% -Type: language -Subtag: pas -Description: Papasena -Added: 2009-07-29 -%% -Type: language -Subtag: pat -Description: Papitalai -Added: 2009-07-29 -%% -Type: language -Subtag: pau -Description: Palauan -Added: 2005-10-16 -%% -Type: language -Subtag: pav -Description: Pakaásnovos -Added: 2009-07-29 -%% -Type: language -Subtag: paw -Description: Pawnee -Added: 2009-07-29 -%% -Type: language -Subtag: pax -Description: Pankararé -Added: 2009-07-29 -%% -Type: language -Subtag: pay -Description: Pech -Added: 2009-07-29 -%% -Type: language -Subtag: paz -Description: Pankararú -Added: 2009-07-29 -%% -Type: language -Subtag: pbb -Description: Páez -Added: 2009-07-29 -%% -Type: language -Subtag: pbc -Description: Patamona -Added: 2009-07-29 -%% -Type: language -Subtag: pbe -Description: Mezontla Popoloca -Added: 2009-07-29 -%% -Type: language -Subtag: pbf -Description: Coyotepec Popoloca -Added: 2009-07-29 -%% -Type: language -Subtag: pbg -Description: Paraujano -Added: 2009-07-29 -%% -Type: language -Subtag: pbh -Description: E'ñapa Woromaipu -Added: 2009-07-29 -%% -Type: language -Subtag: pbi -Description: Parkwa -Added: 2009-07-29 -%% -Type: language -Subtag: pbl -Description: Mak (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: pbn -Description: Kpasam -Added: 2009-07-29 -%% -Type: language -Subtag: pbo -Description: Papel -Added: 2009-07-29 -%% -Type: language -Subtag: pbp -Description: Badyara -Added: 2009-07-29 -%% -Type: language -Subtag: pbr -Description: Pangwa -Added: 2009-07-29 -%% -Type: language -Subtag: pbs -Description: Central Pame -Added: 2009-07-29 -%% -Type: language -Subtag: pbt -Description: Southern Pashto -Added: 2009-07-29 -Macrolanguage: ps -%% -Type: language -Subtag: pbu -Description: Northern Pashto -Added: 2009-07-29 -Macrolanguage: ps -%% -Type: language -Subtag: pbv -Description: Pnar -Added: 2009-07-29 -%% -Type: language -Subtag: pby -Description: Pyu -Added: 2009-07-29 -%% -Type: language -Subtag: pbz -Description: Palu -Added: 2009-07-29 -Deprecated: 2012-08-12 -%% -Type: language -Subtag: pca -Description: Santa Inés Ahuatempan Popoloca -Added: 2009-07-29 -%% -Type: language -Subtag: pcb -Description: Pear -Added: 2009-07-29 -%% -Type: language -Subtag: pcc -Description: Bouyei -Added: 2009-07-29 -%% -Type: language -Subtag: pcd -Description: Picard -Added: 2009-07-29 -%% -Type: language -Subtag: pce -Description: Ruching Palaung -Added: 2009-07-29 -%% -Type: language -Subtag: pcf -Description: Paliyan -Added: 2009-07-29 -%% -Type: language -Subtag: pcg -Description: Paniya -Added: 2009-07-29 -%% -Type: language -Subtag: pch -Description: Pardhan -Added: 2009-07-29 -%% -Type: language -Subtag: pci -Description: Duruwa -Added: 2009-07-29 -%% -Type: language -Subtag: pcj -Description: Parenga -Added: 2009-07-29 -%% -Type: language -Subtag: pck -Description: Paite Chin -Added: 2009-07-29 -%% -Type: language -Subtag: pcl -Description: Pardhi -Added: 2009-07-29 -%% -Type: language -Subtag: pcm -Description: Nigerian Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: pcn -Description: Piti -Added: 2009-07-29 -%% -Type: language -Subtag: pcp -Description: Pacahuara -Added: 2009-07-29 -%% -Type: language -Subtag: pcr -Description: Panang -Added: 2009-07-29 -Deprecated: 2013-09-10 -Preferred-Value: adx -%% -Type: language -Subtag: pcw -Description: Pyapun -Added: 2009-07-29 -%% -Type: language -Subtag: pda -Description: Anam -Added: 2009-07-29 -%% -Type: language -Subtag: pdc -Description: Pennsylvania German -Added: 2009-07-29 -%% -Type: language -Subtag: pdi -Description: Pa Di -Added: 2009-07-29 -%% -Type: language -Subtag: pdn -Description: Podena -Description: Fedan -Added: 2009-07-29 -%% -Type: language -Subtag: pdo -Description: Padoe -Added: 2009-07-29 -%% -Type: language -Subtag: pdt -Description: Plautdietsch -Added: 2009-07-29 -%% -Type: language -Subtag: pdu -Description: Kayan -Added: 2009-07-29 -%% -Type: language -Subtag: pea -Description: Peranakan Indonesian -Added: 2009-07-29 -%% -Type: language -Subtag: peb -Description: Eastern Pomo -Added: 2009-07-29 -%% -Type: language -Subtag: ped -Description: Mala (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: pee -Description: Taje -Added: 2009-07-29 -%% -Type: language -Subtag: pef -Description: Northeastern Pomo -Added: 2009-07-29 -%% -Type: language -Subtag: peg -Description: Pengo -Added: 2009-07-29 -%% -Type: language -Subtag: peh -Description: Bonan -Added: 2009-07-29 -%% -Type: language -Subtag: pei -Description: Chichimeca-Jonaz -Added: 2009-07-29 -%% -Type: language -Subtag: pej -Description: Northern Pomo -Added: 2009-07-29 -%% -Type: language -Subtag: pek -Description: Penchal -Added: 2009-07-29 -%% -Type: language -Subtag: pel -Description: Pekal -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: pem -Description: Phende -Added: 2009-07-29 -%% -Type: language -Subtag: peo -Description: Old Persian (ca. 600-400 B.C.) -Added: 2005-10-16 -%% -Type: language -Subtag: pep -Description: Kunja -Added: 2009-07-29 -%% -Type: language -Subtag: peq -Description: Southern Pomo -Added: 2009-07-29 -%% -Type: language -Subtag: pes -Description: Iranian Persian -Added: 2009-07-29 -Macrolanguage: fa -%% -Type: language -Subtag: pev -Description: Pémono -Added: 2009-07-29 -%% -Type: language -Subtag: pex -Description: Petats -Added: 2009-07-29 -%% -Type: language -Subtag: pey -Description: Petjo -Added: 2009-07-29 -%% -Type: language -Subtag: pez -Description: Eastern Penan -Added: 2009-07-29 -%% -Type: language -Subtag: pfa -Description: Pááfang -Added: 2009-07-29 -%% -Type: language -Subtag: pfe -Description: Peere -Added: 2009-07-29 -%% -Type: language -Subtag: pfl -Description: Pfaelzisch -Added: 2009-07-29 -%% -Type: language -Subtag: pga -Description: Sudanese Creole Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: pgg -Description: Pangwali -Added: 2009-07-29 -%% -Type: language -Subtag: pgi -Description: Pagi -Added: 2009-07-29 -%% -Type: language -Subtag: pgk -Description: Rerep -Added: 2009-07-29 -%% -Type: language -Subtag: pgl -Description: Primitive Irish -Added: 2011-08-16 -%% -Type: language -Subtag: pgn -Description: Paelignian -Added: 2009-07-29 -%% -Type: language -Subtag: pgs -Description: Pangseng -Added: 2009-07-29 -%% -Type: language -Subtag: pgu -Description: Pagu -Added: 2009-07-29 -%% -Type: language -Subtag: pgy -Description: Pongyong -Added: 2009-07-29 -Deprecated: 2012-08-12 -%% -Type: language -Subtag: pha -Description: Pa-Hng -Added: 2009-07-29 -%% -Type: language -Subtag: phd -Description: Phudagi -Added: 2009-07-29 -%% -Type: language -Subtag: phg -Description: Phuong -Added: 2009-07-29 -%% -Type: language -Subtag: phh -Description: Phukha -Added: 2009-07-29 -%% -Type: language -Subtag: phi -Description: Philippine languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: phk -Description: Phake -Added: 2009-07-29 -%% -Type: language -Subtag: phl -Description: Phalura -Description: Palula -Added: 2009-07-29 -%% -Type: language -Subtag: phm -Description: Phimbi -Added: 2009-07-29 -%% -Type: language -Subtag: phn -Description: Phoenician -Added: 2005-10-16 -%% -Type: language -Subtag: pho -Description: Phunoi -Added: 2009-07-29 -%% -Type: language -Subtag: phq -Description: Phana' -Added: 2009-07-29 -%% -Type: language -Subtag: phr -Description: Pahari-Potwari -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: pht -Description: Phu Thai -Added: 2009-07-29 -%% -Type: language -Subtag: phu -Description: Phuan -Added: 2009-07-29 -%% -Type: language -Subtag: phv -Description: Pahlavani -Added: 2009-07-29 -%% -Type: language -Subtag: phw -Description: Phangduwali -Added: 2009-07-29 -%% -Type: language -Subtag: pia -Description: Pima Bajo -Added: 2009-07-29 -%% -Type: language -Subtag: pib -Description: Yine -Added: 2009-07-29 -%% -Type: language -Subtag: pic -Description: Pinji -Added: 2009-07-29 -%% -Type: language -Subtag: pid -Description: Piaroa -Added: 2009-07-29 -%% -Type: language -Subtag: pie -Description: Piro -Added: 2009-07-29 -%% -Type: language -Subtag: pif -Description: Pingelapese -Added: 2009-07-29 -%% -Type: language -Subtag: pig -Description: Pisabo -Added: 2009-07-29 -%% -Type: language -Subtag: pih -Description: Pitcairn-Norfolk -Added: 2009-07-29 -%% -Type: language -Subtag: pii -Description: Pini -Added: 2009-07-29 -%% -Type: language -Subtag: pij -Description: Pijao -Added: 2009-07-29 -%% -Type: language -Subtag: pil -Description: Yom -Added: 2009-07-29 -%% -Type: language -Subtag: pim -Description: Powhatan -Added: 2009-07-29 -%% -Type: language -Subtag: pin -Description: Piame -Added: 2009-07-29 -%% -Type: language -Subtag: pio -Description: Piapoco -Added: 2009-07-29 -%% -Type: language -Subtag: pip -Description: Pero -Added: 2009-07-29 -%% -Type: language -Subtag: pir -Description: Piratapuyo -Added: 2009-07-29 -%% -Type: language -Subtag: pis -Description: Pijin -Added: 2009-07-29 -%% -Type: language -Subtag: pit -Description: Pitta Pitta -Added: 2009-07-29 -%% -Type: language -Subtag: piu -Description: Pintupi-Luritja -Added: 2009-07-29 -%% -Type: language -Subtag: piv -Description: Pileni -Description: Vaeakau-Taumako -Added: 2009-07-29 -%% -Type: language -Subtag: piw -Description: Pimbwe -Added: 2009-07-29 -%% -Type: language -Subtag: pix -Description: Piu -Added: 2009-07-29 -%% -Type: language -Subtag: piy -Description: Piya-Kwonci -Added: 2009-07-29 -%% -Type: language -Subtag: piz -Description: Pije -Added: 2009-07-29 -%% -Type: language -Subtag: pjt -Description: Pitjantjatjara -Added: 2009-07-29 -%% -Type: language -Subtag: pka -Description: Ardhamāgadhī Prākrit -Added: 2009-07-29 -%% -Type: language -Subtag: pkb -Description: Pokomo -Description: Kipfokomo -Added: 2009-07-29 -%% -Type: language -Subtag: pkc -Description: Paekche -Added: 2009-07-29 -%% -Type: language -Subtag: pkg -Description: Pak-Tong -Added: 2009-07-29 -%% -Type: language -Subtag: pkh -Description: Pankhu -Added: 2009-07-29 -%% -Type: language -Subtag: pkn -Description: Pakanha -Added: 2009-07-29 -%% -Type: language -Subtag: pko -Description: Pökoot -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: pkp -Description: Pukapuka -Added: 2009-07-29 -%% -Type: language -Subtag: pkr -Description: Attapady Kurumba -Added: 2009-07-29 -%% -Type: language -Subtag: pks -Description: Pakistan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: pkt -Description: Maleng -Added: 2009-07-29 -%% -Type: language -Subtag: pku -Description: Paku -Added: 2009-07-29 -%% -Type: language -Subtag: pla -Description: Miani -Added: 2009-07-29 -%% -Type: language -Subtag: plb -Description: Polonombauk -Added: 2009-07-29 -%% -Type: language -Subtag: plc -Description: Central Palawano -Added: 2009-07-29 -%% -Type: language -Subtag: pld -Description: Polari -Added: 2009-07-29 -%% -Type: language -Subtag: ple -Description: Palu'e -Added: 2009-07-29 -%% -Type: language -Subtag: plf -Description: Central Malayo-Polynesian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: plg -Description: Pilagá -Added: 2009-07-29 -%% -Type: language -Subtag: plh -Description: Paulohi -Added: 2009-07-29 -%% -Type: language -Subtag: plj -Description: Polci -Added: 2009-07-29 -%% -Type: language -Subtag: plk -Description: Kohistani Shina -Added: 2009-07-29 -%% -Type: language -Subtag: pll -Description: Shwe Palaung -Added: 2009-07-29 -%% -Type: language -Subtag: pln -Description: Palenquero -Added: 2009-07-29 -%% -Type: language -Subtag: plo -Description: Oluta Popoluca -Added: 2009-07-29 -%% -Type: language -Subtag: plp -Description: Palpa -Added: 2009-07-29 -%% -Type: language -Subtag: plq -Description: Palaic -Added: 2009-07-29 -%% -Type: language -Subtag: plr -Description: Palaka Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: pls -Description: San Marcos Tlalcoyalco Popoloca -Added: 2009-07-29 -%% -Type: language -Subtag: plt -Description: Plateau Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: plu -Description: Palikúr -Added: 2009-07-29 -%% -Type: language -Subtag: plv -Description: Southwest Palawano -Added: 2009-07-29 -%% -Type: language -Subtag: plw -Description: Brooke's Point Palawano -Added: 2009-07-29 -%% -Type: language -Subtag: ply -Description: Bolyu -Added: 2009-07-29 -%% -Type: language -Subtag: plz -Description: Paluan -Added: 2009-07-29 -%% -Type: language -Subtag: pma -Description: Paama -Added: 2009-07-29 -%% -Type: language -Subtag: pmb -Description: Pambia -Added: 2009-07-29 -%% -Type: language -Subtag: pmc -Description: Palumata -Added: 2009-07-29 -%% -Type: language -Subtag: pmd -Description: Pallanganmiddang -Added: 2012-08-12 -%% -Type: language -Subtag: pme -Description: Pwaamei -Added: 2009-07-29 -%% -Type: language -Subtag: pmf -Description: Pamona -Added: 2009-07-29 -%% -Type: language -Subtag: pmh -Description: Māhārāṣṭri Prākrit -Added: 2009-07-29 -%% -Type: language -Subtag: pmi -Description: Northern Pumi -Added: 2009-07-29 -%% -Type: language -Subtag: pmj -Description: Southern Pumi -Added: 2009-07-29 -%% -Type: language -Subtag: pmk -Description: Pamlico -Added: 2009-07-29 -%% -Type: language -Subtag: pml -Description: Lingua Franca -Added: 2009-07-29 -%% -Type: language -Subtag: pmm -Description: Pomo -Added: 2009-07-29 -%% -Type: language -Subtag: pmn -Description: Pam -Added: 2009-07-29 -%% -Type: language -Subtag: pmo -Description: Pom -Added: 2009-07-29 -%% -Type: language -Subtag: pmq -Description: Northern Pame -Added: 2009-07-29 -%% -Type: language -Subtag: pmr -Description: Paynamar -Added: 2009-07-29 -%% -Type: language -Subtag: pms -Description: Piemontese -Added: 2009-07-29 -%% -Type: language -Subtag: pmt -Description: Tuamotuan -Added: 2009-07-29 -%% -Type: language -Subtag: pmu -Description: Mirpur Panjabi -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: pmw -Description: Plains Miwok -Added: 2009-07-29 -%% -Type: language -Subtag: pmx -Description: Poumei Naga -Added: 2009-07-29 -%% -Type: language -Subtag: pmy -Description: Papuan Malay -Added: 2009-07-29 -%% -Type: language -Subtag: pmz -Description: Southern Pame -Added: 2009-07-29 -%% -Type: language -Subtag: pna -Description: Punan Bah-Biau -Added: 2009-07-29 -%% -Type: language -Subtag: pnb -Description: Western Panjabi -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: pnc -Description: Pannei -Added: 2009-07-29 -%% -Type: language -Subtag: pne -Description: Western Penan -Added: 2009-07-29 -%% -Type: language -Subtag: png -Description: Pongu -Added: 2009-07-29 -%% -Type: language -Subtag: pnh -Description: Penrhyn -Added: 2009-07-29 -%% -Type: language -Subtag: pni -Description: Aoheng -Added: 2009-07-29 -%% -Type: language -Subtag: pnj -Description: Pinjarup -Added: 2013-09-10 -%% -Type: language -Subtag: pnk -Description: Paunaka -Added: 2012-08-12 -%% -Type: language -Subtag: pnl -Description: Paleni -Added: 2013-09-10 -Comments: see also wbf -%% -Type: language -Subtag: pnm -Description: Punan Batu 1 -Added: 2009-07-29 -%% -Type: language -Subtag: pnn -Description: Pinai-Hagahai -Added: 2009-07-29 -%% -Type: language -Subtag: pno -Description: Panobo -Added: 2009-07-29 -%% -Type: language -Subtag: pnp -Description: Pancana -Added: 2009-07-29 -%% -Type: language -Subtag: pnq -Description: Pana (Burkina Faso) -Added: 2009-07-29 -%% -Type: language -Subtag: pnr -Description: Panim -Added: 2009-07-29 -%% -Type: language -Subtag: pns -Description: Ponosakan -Added: 2009-07-29 -%% -Type: language -Subtag: pnt -Description: Pontic -Added: 2009-07-29 -%% -Type: language -Subtag: pnu -Description: Jiongnai Bunu -Added: 2009-07-29 -%% -Type: language -Subtag: pnv -Description: Pinigura -Added: 2009-07-29 -%% -Type: language -Subtag: pnw -Description: Panytyima -Added: 2009-07-29 -%% -Type: language -Subtag: pnx -Description: Phong-Kniang -Added: 2009-07-29 -%% -Type: language -Subtag: pny -Description: Pinyin -Added: 2009-07-29 -Comments: a Niger-Congo language spoken in Cameroon; not to be confused - with the Pinyin romanization systems used for Chinese and Tibetan -%% -Type: language -Subtag: pnz -Description: Pana (Central African Republic) -Added: 2009-07-29 -%% -Type: language -Subtag: poc -Description: Poqomam -Added: 2009-07-29 -%% -Type: language -Subtag: pod -Description: Ponares -Added: 2009-07-29 -%% -Type: language -Subtag: poe -Description: San Juan Atzingo Popoloca -Added: 2009-07-29 -%% -Type: language -Subtag: pof -Description: Poke -Added: 2009-07-29 -%% -Type: language -Subtag: pog -Description: Potiguára -Added: 2009-07-29 -%% -Type: language -Subtag: poh -Description: Poqomchi' -Added: 2009-07-29 -%% -Type: language -Subtag: poi -Description: Highland Popoluca -Added: 2009-07-29 -%% -Type: language -Subtag: pok -Description: Pokangá -Added: 2009-07-29 -%% -Type: language -Subtag: pom -Description: Southeastern Pomo -Added: 2009-07-29 -%% -Type: language -Subtag: pon -Description: Pohnpeian -Added: 2005-10-16 -%% -Type: language -Subtag: poo -Description: Central Pomo -Added: 2009-07-29 -%% -Type: language -Subtag: pop -Description: Pwapwâ -Added: 2009-07-29 -%% -Type: language -Subtag: poq -Description: Texistepec Popoluca -Added: 2009-07-29 -%% -Type: language -Subtag: pos -Description: Sayula Popoluca -Added: 2009-07-29 -%% -Type: language -Subtag: pot -Description: Potawatomi -Added: 2009-07-29 -%% -Type: language -Subtag: pov -Description: Upper Guinea Crioulo -Added: 2009-07-29 -%% -Type: language -Subtag: pow -Description: San Felipe Otlaltepec Popoloca -Added: 2009-07-29 -%% -Type: language -Subtag: pox -Description: Polabian -Added: 2009-07-29 -%% -Type: language -Subtag: poy -Description: Pogolo -Added: 2009-07-29 -%% -Type: language -Subtag: poz -Description: Malayo-Polynesian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: ppa -Description: Pao -Added: 2009-07-29 -%% -Type: language -Subtag: ppe -Description: Papi -Added: 2009-07-29 -%% -Type: language -Subtag: ppi -Description: Paipai -Added: 2009-07-29 -%% -Type: language -Subtag: ppk -Description: Uma -Added: 2009-07-29 -%% -Type: language -Subtag: ppl -Description: Pipil -Description: Nicarao -Added: 2009-07-29 -%% -Type: language -Subtag: ppm -Description: Papuma -Added: 2009-07-29 -%% -Type: language -Subtag: ppn -Description: Papapana -Added: 2009-07-29 -%% -Type: language -Subtag: ppo -Description: Folopa -Added: 2009-07-29 -%% -Type: language -Subtag: ppp -Description: Pelende -Added: 2009-07-29 -%% -Type: language -Subtag: ppq -Description: Pei -Added: 2009-07-29 -%% -Type: language -Subtag: ppr -Description: Piru -Added: 2009-07-29 -Deprecated: 2013-09-10 -Preferred-Value: lcq -%% -Type: language -Subtag: pps -Description: San Luís Temalacayuca Popoloca -Added: 2009-07-29 -%% -Type: language -Subtag: ppt -Description: Pare -Added: 2009-07-29 -%% -Type: language -Subtag: ppu -Description: Papora -Added: 2009-07-29 -%% -Type: language -Subtag: pqa -Description: Pa'a -Added: 2009-07-29 -%% -Type: language -Subtag: pqe -Description: Eastern Malayo-Polynesian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: pqm -Description: Malecite-Passamaquoddy -Added: 2009-07-29 -%% -Type: language -Subtag: pqw -Description: Western Malayo-Polynesian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: pra -Description: Prakrit languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: prb -Description: Lua' -Added: 2009-07-29 -%% -Type: language -Subtag: prc -Description: Parachi -Added: 2009-07-29 -%% -Type: language -Subtag: prd -Description: Parsi-Dari -Added: 2009-07-29 -%% -Type: language -Subtag: pre -Description: Principense -Added: 2009-07-29 -%% -Type: language -Subtag: prf -Description: Paranan -Added: 2010-03-11 -%% -Type: language -Subtag: prg -Description: Prussian -Added: 2009-07-29 -%% -Type: language -Subtag: prh -Description: Porohanon -Added: 2009-07-29 -%% -Type: language -Subtag: pri -Description: Paicî -Added: 2009-07-29 -%% -Type: language -Subtag: prk -Description: Parauk -Added: 2009-07-29 -%% -Type: language -Subtag: prl -Description: Peruvian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: prm -Description: Kibiri -Added: 2009-07-29 -%% -Type: language -Subtag: prn -Description: Prasuni -Added: 2009-07-29 -%% -Type: language -Subtag: pro -Description: Old Provençal (to 1500) -Description: Old Occitan (to 1500) -Added: 2005-10-16 -%% -Type: language -Subtag: prp -Description: Parsi -Added: 2009-07-29 -%% -Type: language -Subtag: prq -Description: Ashéninka Perené -Added: 2009-07-29 -%% -Type: language -Subtag: prr -Description: Puri -Added: 2009-07-29 -%% -Type: language -Subtag: prs -Description: Dari -Description: Afghan Persian -Added: 2009-07-29 -Macrolanguage: fa -%% -Type: language -Subtag: prt -Description: Phai -Added: 2009-07-29 -%% -Type: language -Subtag: pru -Description: Puragi -Added: 2009-07-29 -%% -Type: language -Subtag: prw -Description: Parawen -Added: 2009-07-29 -%% -Type: language -Subtag: prx -Description: Purik -Added: 2009-07-29 -%% -Type: language -Subtag: pry -Description: Pray 3 -Added: 2009-07-29 -%% -Type: language -Subtag: prz -Description: Providencia Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: psa -Description: Asue Awyu -Added: 2009-07-29 -%% -Type: language -Subtag: psc -Description: Persian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: psd -Description: Plains Indian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: pse -Description: Central Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: psg -Description: Penang Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: psh -Description: Southwest Pashayi -Added: 2009-07-29 -%% -Type: language -Subtag: psi -Description: Southeast Pashayi -Added: 2009-07-29 -%% -Type: language -Subtag: psl -Description: Puerto Rican Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: psm -Description: Pauserna -Added: 2009-07-29 -%% -Type: language -Subtag: psn -Description: Panasuan -Added: 2009-07-29 -%% -Type: language -Subtag: pso -Description: Polish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: psp -Description: Philippine Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: psq -Description: Pasi -Added: 2009-07-29 -%% -Type: language -Subtag: psr -Description: Portuguese Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: pss -Description: Kaulong -Added: 2009-07-29 -%% -Type: language -Subtag: pst -Description: Central Pashto -Added: 2009-07-29 -Macrolanguage: ps -%% -Type: language -Subtag: psu -Description: Sauraseni Prākrit -Added: 2009-07-29 -%% -Type: language -Subtag: psw -Description: Port Sandwich -Added: 2009-07-29 -%% -Type: language -Subtag: psy -Description: Piscataway -Added: 2009-07-29 -%% -Type: language -Subtag: pta -Description: Pai Tavytera -Added: 2009-07-29 -%% -Type: language -Subtag: pth -Description: Pataxó Hã-Ha-Hãe -Added: 2009-07-29 -%% -Type: language -Subtag: pti -Description: Pintiini -Added: 2009-07-29 -%% -Type: language -Subtag: ptn -Description: Patani -Added: 2009-07-29 -%% -Type: language -Subtag: pto -Description: Zo'é -Added: 2009-07-29 -%% -Type: language -Subtag: ptp -Description: Patep -Added: 2009-07-29 -%% -Type: language -Subtag: ptr -Description: Piamatsina -Added: 2009-07-29 -%% -Type: language -Subtag: ptt -Description: Enrekang -Added: 2009-07-29 -%% -Type: language -Subtag: ptu -Description: Bambam -Added: 2009-07-29 -%% -Type: language -Subtag: ptv -Description: Port Vato -Added: 2009-07-29 -%% -Type: language -Subtag: ptw -Description: Pentlatch -Added: 2009-07-29 -%% -Type: language -Subtag: pty -Description: Pathiya -Added: 2009-07-29 -%% -Type: language -Subtag: pua -Description: Western Highland Purepecha -Added: 2009-07-29 -%% -Type: language -Subtag: pub -Description: Purum -Added: 2009-07-29 -%% -Type: language -Subtag: puc -Description: Punan Merap -Added: 2009-07-29 -%% -Type: language -Subtag: pud -Description: Punan Aput -Added: 2009-07-29 -%% -Type: language -Subtag: pue -Description: Puelche -Added: 2009-07-29 -%% -Type: language -Subtag: puf -Description: Punan Merah -Added: 2009-07-29 -%% -Type: language -Subtag: pug -Description: Phuie -Added: 2009-07-29 -%% -Type: language -Subtag: pui -Description: Puinave -Added: 2009-07-29 -%% -Type: language -Subtag: puj -Description: Punan Tubu -Added: 2009-07-29 -%% -Type: language -Subtag: puk -Description: Pu Ko -Added: 2009-07-29 -%% -Type: language -Subtag: pum -Description: Puma -Added: 2009-07-29 -%% -Type: language -Subtag: puo -Description: Puoc -Added: 2009-07-29 -%% -Type: language -Subtag: pup -Description: Pulabu -Added: 2009-07-29 -%% -Type: language -Subtag: puq -Description: Puquina -Added: 2009-07-29 -%% -Type: language -Subtag: pur -Description: Puruborá -Added: 2009-07-29 -%% -Type: language -Subtag: put -Description: Putoh -Added: 2009-07-29 -%% -Type: language -Subtag: puu -Description: Punu -Added: 2009-07-29 -%% -Type: language -Subtag: puw -Description: Puluwatese -Added: 2009-07-29 -%% -Type: language -Subtag: pux -Description: Puare -Added: 2009-07-29 -%% -Type: language -Subtag: puy -Description: Purisimeño -Added: 2009-07-29 -%% -Type: language -Subtag: puz -Description: Purum Naga -Added: 2009-07-29 -%% -Type: language -Subtag: pwa -Description: Pawaia -Added: 2009-07-29 -%% -Type: language -Subtag: pwb -Description: Panawa -Added: 2009-07-29 -%% -Type: language -Subtag: pwg -Description: Gapapaiwa -Added: 2009-07-29 -%% -Type: language -Subtag: pwi -Description: Patwin -Added: 2013-09-10 -%% -Type: language -Subtag: pwm -Description: Molbog -Added: 2009-07-29 -%% -Type: language -Subtag: pwn -Description: Paiwan -Added: 2009-07-29 -%% -Type: language -Subtag: pwo -Description: Pwo Western Karen -Added: 2009-07-29 -%% -Type: language -Subtag: pwr -Description: Powari -Added: 2009-07-29 -%% -Type: language -Subtag: pww -Description: Pwo Northern Karen -Added: 2009-07-29 -%% -Type: language -Subtag: pxm -Description: Quetzaltepec Mixe -Added: 2009-07-29 -%% -Type: language -Subtag: pye -Description: Pye Krumen -Added: 2009-07-29 -%% -Type: language -Subtag: pym -Description: Fyam -Added: 2009-07-29 -%% -Type: language -Subtag: pyn -Description: Poyanáwa -Added: 2009-07-29 -%% -Type: language -Subtag: pys -Description: Paraguayan Sign Language -Description: Lengua de Señas del Paraguay -Added: 2010-03-11 -%% -Type: language -Subtag: pyu -Description: Puyuma -Added: 2009-07-29 -%% -Type: language -Subtag: pyx -Description: Pyu (Myanmar) -Added: 2009-07-29 -%% -Type: language -Subtag: pyy -Description: Pyen -Added: 2009-07-29 -%% -Type: language -Subtag: pzn -Description: Para Naga -Added: 2009-07-29 -%% -Type: language -Subtag: qaa..qtz -Description: Private use -Added: 2005-10-16 -Scope: private-use -%% -Type: language -Subtag: qua -Description: Quapaw -Added: 2009-07-29 -%% -Type: language -Subtag: qub -Description: Huallaga Huánuco Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: quc -Description: K'iche' -Description: Quiché -Added: 2009-07-29 -%% -Type: language -Subtag: qud -Description: Calderón Highland Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: quf -Description: Lambayeque Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qug -Description: Chimborazo Highland Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: quh -Description: South Bolivian Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qui -Description: Quileute -Added: 2009-07-29 -%% -Type: language -Subtag: quk -Description: Chachapoyas Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qul -Description: North Bolivian Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qum -Description: Sipacapense -Added: 2009-07-29 -%% -Type: language -Subtag: qun -Description: Quinault -Added: 2009-07-29 -%% -Type: language -Subtag: qup -Description: Southern Pastaza Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: quq -Description: Quinqui -Added: 2009-07-29 -%% -Type: language -Subtag: qur -Description: Yanahuanca Pasco Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qus -Description: Santiago del Estero Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: quv -Description: Sacapulteco -Added: 2009-07-29 -%% -Type: language -Subtag: quw -Description: Tena Lowland Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qux -Description: Yauyos Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: quy -Description: Ayacucho Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: quz -Description: Cusco Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qva -Description: Ambo-Pasco Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvc -Description: Cajamarca Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qve -Description: Eastern Apurímac Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvh -Description: Huamalíes-Dos de Mayo Huánuco Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvi -Description: Imbabura Highland Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvj -Description: Loja Highland Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvl -Description: Cajatambo North Lima Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvm -Description: Margos-Yarowilca-Lauricocha Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvn -Description: North Junín Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvo -Description: Napo Lowland Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvp -Description: Pacaraos Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvs -Description: San Martín Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvw -Description: Huaylla Wanca Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qvy -Description: Queyu -Added: 2009-07-29 -%% -Type: language -Subtag: qvz -Description: Northern Pastaza Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qwa -Description: Corongo Ancash Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qwc -Description: Classical Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qwe -Description: Quechuan (family) -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: qwh -Description: Huaylas Ancash Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qwm -Description: Kuman (Russia) -Added: 2009-07-29 -%% -Type: language -Subtag: qws -Description: Sihuas Ancash Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qwt -Description: Kwalhioqua-Tlatskanai -Added: 2009-07-29 -%% -Type: language -Subtag: qxa -Description: Chiquián Ancash Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxc -Description: Chincha Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxh -Description: Panao Huánuco Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxl -Description: Salasaca Highland Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxn -Description: Northern Conchucos Ancash Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxo -Description: Southern Conchucos Ancash Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxp -Description: Puno Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxq -Description: Qashqa'i -Added: 2009-07-29 -%% -Type: language -Subtag: qxr -Description: Cañar Highland Quichua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxs -Description: Southern Qiang -Added: 2009-07-29 -%% -Type: language -Subtag: qxt -Description: Santa Ana de Tusi Pasco Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxu -Description: Arequipa-La Unión Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qxw -Description: Jauja Wanca Quechua -Added: 2009-07-29 -Macrolanguage: qu -%% -Type: language -Subtag: qya -Description: Quenya -Added: 2009-07-29 -%% -Type: language -Subtag: qyp -Description: Quiripi -Added: 2009-07-29 -%% -Type: language -Subtag: raa -Description: Dungmali -Added: 2009-07-29 -%% -Type: language -Subtag: rab -Description: Camling -Added: 2009-07-29 -%% -Type: language -Subtag: rac -Description: Rasawa -Added: 2009-07-29 -%% -Type: language -Subtag: rad -Description: Rade -Added: 2009-07-29 -%% -Type: language -Subtag: raf -Description: Western Meohang -Added: 2009-07-29 -%% -Type: language -Subtag: rag -Description: Logooli -Description: Lulogooli -Added: 2009-07-29 -Macrolanguage: luy -%% -Type: language -Subtag: rah -Description: Rabha -Added: 2009-07-29 -%% -Type: language -Subtag: rai -Description: Ramoaaina -Added: 2009-07-29 -%% -Type: language -Subtag: raj -Description: Rajasthani -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: rak -Description: Tulu-Bohuai -Added: 2009-07-29 -%% -Type: language -Subtag: ral -Description: Ralte -Added: 2009-07-29 -%% -Type: language -Subtag: ram -Description: Canela -Added: 2009-07-29 -%% -Type: language -Subtag: ran -Description: Riantana -Added: 2009-07-29 -%% -Type: language -Subtag: rao -Description: Rao -Added: 2009-07-29 -%% -Type: language -Subtag: rap -Description: Rapanui -Added: 2005-10-16 -%% -Type: language -Subtag: raq -Description: Saam -Added: 2009-07-29 -%% -Type: language -Subtag: rar -Description: Rarotongan -Description: Cook Islands Maori -Added: 2005-10-16 -%% -Type: language -Subtag: ras -Description: Tegali -Added: 2009-07-29 -%% -Type: language -Subtag: rat -Description: Razajerdi -Added: 2009-07-29 -%% -Type: language -Subtag: rau -Description: Raute -Added: 2009-07-29 -%% -Type: language -Subtag: rav -Description: Sampang -Added: 2009-07-29 -%% -Type: language -Subtag: raw -Description: Rawang -Added: 2009-07-29 -%% -Type: language -Subtag: rax -Description: Rang -Added: 2009-07-29 -%% -Type: language -Subtag: ray -Description: Rapa -Added: 2009-07-29 -%% -Type: language -Subtag: raz -Description: Rahambuu -Added: 2009-07-29 -%% -Type: language -Subtag: rbb -Description: Rumai Palaung -Added: 2009-07-29 -%% -Type: language -Subtag: rbk -Description: Northern Bontok -Added: 2010-03-11 -Macrolanguage: bnc -%% -Type: language -Subtag: rbl -Description: Miraya Bikol -Added: 2010-03-11 -Macrolanguage: bik -%% -Type: language -Subtag: rbp -Description: Barababaraba -Added: 2012-08-12 -%% -Type: language -Subtag: rcf -Description: Réunion Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: rdb -Description: Rudbari -Added: 2009-07-29 -%% -Type: language -Subtag: rea -Description: Rerau -Added: 2009-07-29 -%% -Type: language -Subtag: reb -Description: Rembong -Added: 2009-07-29 -%% -Type: language -Subtag: ree -Description: Rejang Kayan -Added: 2009-07-29 -%% -Type: language -Subtag: reg -Description: Kara (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: rei -Description: Reli -Added: 2009-07-29 -%% -Type: language -Subtag: rej -Description: Rejang -Added: 2009-07-29 -%% -Type: language -Subtag: rel -Description: Rendille -Added: 2009-07-29 -%% -Type: language -Subtag: rem -Description: Remo -Added: 2009-07-29 -%% -Type: language -Subtag: ren -Description: Rengao -Added: 2009-07-29 -%% -Type: language -Subtag: rer -Description: Rer Bare -Added: 2009-07-29 -%% -Type: language -Subtag: res -Description: Reshe -Added: 2009-07-29 -%% -Type: language -Subtag: ret -Description: Retta -Added: 2009-07-29 -%% -Type: language -Subtag: rey -Description: Reyesano -Added: 2009-07-29 -%% -Type: language -Subtag: rga -Description: Roria -Added: 2009-07-29 -%% -Type: language -Subtag: rge -Description: Romano-Greek -Added: 2009-07-29 -%% -Type: language -Subtag: rgk -Description: Rangkas -Added: 2009-07-29 -%% -Type: language -Subtag: rgn -Description: Romagnol -Added: 2009-07-29 -%% -Type: language -Subtag: rgr -Description: Resígaro -Added: 2009-07-29 -%% -Type: language -Subtag: rgs -Description: Southern Roglai -Added: 2009-07-29 -%% -Type: language -Subtag: rgu -Description: Ringgou -Added: 2009-07-29 -%% -Type: language -Subtag: rhg -Description: Rohingya -Added: 2009-07-29 -%% -Type: language -Subtag: rhp -Description: Yahang -Added: 2009-07-29 -%% -Type: language -Subtag: ria -Description: Riang (India) -Added: 2009-07-29 -%% -Type: language -Subtag: rie -Description: Rien -Added: 2009-07-29 -%% -Type: language -Subtag: rif -Description: Tarifit -Added: 2009-07-29 -%% -Type: language -Subtag: ril -Description: Riang (Myanmar) -Added: 2009-07-29 -%% -Type: language -Subtag: rim -Description: Nyaturu -Added: 2009-07-29 -%% -Type: language -Subtag: rin -Description: Nungu -Added: 2009-07-29 -%% -Type: language -Subtag: rir -Description: Ribun -Added: 2009-07-29 -%% -Type: language -Subtag: rit -Description: Ritarungo -Added: 2009-07-29 -%% -Type: language -Subtag: riu -Description: Riung -Added: 2009-07-29 -%% -Type: language -Subtag: rjg -Description: Rajong -Added: 2009-07-29 -%% -Type: language -Subtag: rji -Description: Raji -Added: 2009-07-29 -%% -Type: language -Subtag: rjs -Description: Rajbanshi -Added: 2009-07-29 -%% -Type: language -Subtag: rka -Description: Kraol -Added: 2009-07-29 -%% -Type: language -Subtag: rkb -Description: Rikbaktsa -Added: 2009-07-29 -%% -Type: language -Subtag: rkh -Description: Rakahanga-Manihiki -Added: 2009-07-29 -%% -Type: language -Subtag: rki -Description: Rakhine -Added: 2009-07-29 -%% -Type: language -Subtag: rkm -Description: Marka -Added: 2009-07-29 -%% -Type: language -Subtag: rkt -Description: Rangpuri -Description: Kamta -Added: 2009-07-29 -%% -Type: language -Subtag: rkw -Description: Arakwal -Added: 2013-09-10 -%% -Type: language -Subtag: rma -Description: Rama -Added: 2009-07-29 -%% -Type: language -Subtag: rmb -Description: Rembarunga -Added: 2009-07-29 -%% -Type: language -Subtag: rmc -Description: Carpathian Romani -Added: 2009-07-29 -Macrolanguage: rom -%% -Type: language -Subtag: rmd -Description: Traveller Danish -Added: 2009-07-29 -%% -Type: language -Subtag: rme -Description: Angloromani -Added: 2009-07-29 -%% -Type: language -Subtag: rmf -Description: Kalo Finnish Romani -Added: 2009-07-29 -Macrolanguage: rom -%% -Type: language -Subtag: rmg -Description: Traveller Norwegian -Added: 2009-07-29 -%% -Type: language -Subtag: rmh -Description: Murkim -Added: 2009-07-29 -%% -Type: language -Subtag: rmi -Description: Lomavren -Added: 2009-07-29 -%% -Type: language -Subtag: rmk -Description: Romkun -Added: 2009-07-29 -%% -Type: language -Subtag: rml -Description: Baltic Romani -Added: 2009-07-29 -Macrolanguage: rom -%% -Type: language -Subtag: rmm -Description: Roma -Added: 2009-07-29 -%% -Type: language -Subtag: rmn -Description: Balkan Romani -Added: 2009-07-29 -Macrolanguage: rom -%% -Type: language -Subtag: rmo -Description: Sinte Romani -Added: 2009-07-29 -Macrolanguage: rom -%% -Type: language -Subtag: rmp -Description: Rempi -Added: 2009-07-29 -%% -Type: language -Subtag: rmq -Description: Caló -Added: 2010-03-11 -%% -Type: language -Subtag: rmr -Description: Caló -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see emx, rmq -%% -Type: language -Subtag: rms -Description: Romanian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: rmt -Description: Domari -Added: 2009-07-29 -%% -Type: language -Subtag: rmu -Description: Tavringer Romani -Added: 2009-07-29 -%% -Type: language -Subtag: rmv -Description: Romanova -Added: 2009-07-29 -%% -Type: language -Subtag: rmw -Description: Welsh Romani -Added: 2009-07-29 -Macrolanguage: rom -%% -Type: language -Subtag: rmx -Description: Romam -Added: 2009-07-29 -%% -Type: language -Subtag: rmy -Description: Vlax Romani -Added: 2009-07-29 -Macrolanguage: rom -%% -Type: language -Subtag: rmz -Description: Marma -Added: 2009-07-29 -%% -Type: language -Subtag: rna -Description: Runa -Added: 2009-07-29 -%% -Type: language -Subtag: rnd -Description: Ruund -Added: 2009-07-29 -%% -Type: language -Subtag: rng -Description: Ronga -Added: 2009-07-29 -%% -Type: language -Subtag: rnl -Description: Ranglong -Added: 2009-07-29 -%% -Type: language -Subtag: rnn -Description: Roon -Added: 2009-07-29 -%% -Type: language -Subtag: rnp -Description: Rongpo -Added: 2009-07-29 -%% -Type: language -Subtag: rnr -Description: Nari Nari -Added: 2012-08-20 -%% -Type: language -Subtag: rnw -Description: Rungwa -Added: 2009-07-29 -%% -Type: language -Subtag: roa -Description: Romance languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: rob -Description: Tae' -Added: 2009-07-29 -%% -Type: language -Subtag: roc -Description: Cacgia Roglai -Added: 2009-07-29 -%% -Type: language -Subtag: rod -Description: Rogo -Added: 2009-07-29 -%% -Type: language -Subtag: roe -Description: Ronji -Added: 2009-07-29 -%% -Type: language -Subtag: rof -Description: Rombo -Added: 2009-07-29 -%% -Type: language -Subtag: rog -Description: Northern Roglai -Added: 2009-07-29 -%% -Type: language -Subtag: rol -Description: Romblomanon -Added: 2009-07-29 -%% -Type: language -Subtag: rom -Description: Romany -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: roo -Description: Rotokas -Added: 2009-07-29 -%% -Type: language -Subtag: rop -Description: Kriol -Added: 2009-07-29 -%% -Type: language -Subtag: ror -Description: Rongga -Added: 2009-07-29 -%% -Type: language -Subtag: rou -Description: Runga -Added: 2009-07-29 -%% -Type: language -Subtag: row -Description: Dela-Oenale -Added: 2009-07-29 -%% -Type: language -Subtag: rpn -Description: Repanbitip -Added: 2009-07-29 -%% -Type: language -Subtag: rpt -Description: Rapting -Added: 2009-07-29 -%% -Type: language -Subtag: rri -Description: Ririo -Added: 2009-07-29 -%% -Type: language -Subtag: rro -Description: Waima -Added: 2009-07-29 -%% -Type: language -Subtag: rrt -Description: Arritinngithigh -Added: 2012-08-12 -%% -Type: language -Subtag: rsb -Description: Romano-Serbian -Added: 2009-07-29 -%% -Type: language -Subtag: rsi -Description: Rennellese Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: rsl -Description: Russian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: rtc -Description: Rungtu Chin -Added: 2012-08-12 -%% -Type: language -Subtag: rth -Description: Ratahan -Added: 2009-07-29 -%% -Type: language -Subtag: rtm -Description: Rotuman -Added: 2009-07-29 -%% -Type: language -Subtag: rtw -Description: Rathawi -Added: 2009-07-29 -%% -Type: language -Subtag: rub -Description: Gungu -Added: 2009-07-29 -%% -Type: language -Subtag: ruc -Description: Ruuli -Added: 2009-07-29 -%% -Type: language -Subtag: rue -Description: Rusyn -Added: 2009-07-29 -%% -Type: language -Subtag: ruf -Description: Luguru -Added: 2009-07-29 -%% -Type: language -Subtag: rug -Description: Roviana -Added: 2009-07-29 -%% -Type: language -Subtag: ruh -Description: Ruga -Added: 2009-07-29 -%% -Type: language -Subtag: rui -Description: Rufiji -Added: 2009-07-29 -%% -Type: language -Subtag: ruk -Description: Che -Added: 2009-07-29 -%% -Type: language -Subtag: ruo -Description: Istro Romanian -Added: 2009-07-29 -%% -Type: language -Subtag: rup -Description: Macedo-Romanian -Description: Aromanian -Description: Arumanian -Added: 2005-10-16 -%% -Type: language -Subtag: ruq -Description: Megleno Romanian -Added: 2009-07-29 -%% -Type: language -Subtag: rut -Description: Rutul -Added: 2009-07-29 -%% -Type: language -Subtag: ruu -Description: Lanas Lobu -Added: 2009-07-29 -%% -Type: language -Subtag: ruy -Description: Mala (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: ruz -Description: Ruma -Added: 2009-07-29 -%% -Type: language -Subtag: rwa -Description: Rawo -Added: 2009-07-29 -%% -Type: language -Subtag: rwk -Description: Rwa -Added: 2009-07-29 -%% -Type: language -Subtag: rwm -Description: Amba (Uganda) -Added: 2009-07-29 -%% -Type: language -Subtag: rwo -Description: Rawa -Added: 2009-07-29 -%% -Type: language -Subtag: rwr -Description: Marwari (India) -Added: 2009-07-29 -Macrolanguage: mwr -%% -Type: language -Subtag: rxd -Description: Ngardi -Added: 2013-09-10 -%% -Type: language -Subtag: rxw -Description: Karuwali -Added: 2013-09-10 -%% -Type: language -Subtag: ryn -Description: Northern Amami-Oshima -Added: 2009-07-29 -%% -Type: language -Subtag: rys -Description: Yaeyama -Added: 2009-07-29 -%% -Type: language -Subtag: ryu -Description: Central Okinawan -Added: 2009-07-29 -%% -Type: language -Subtag: saa -Description: Saba -Added: 2009-07-29 -%% -Type: language -Subtag: sab -Description: Buglere -Added: 2009-07-29 -%% -Type: language -Subtag: sac -Description: Meskwaki -Added: 2009-07-29 -%% -Type: language -Subtag: sad -Description: Sandawe -Added: 2005-10-16 -%% -Type: language -Subtag: sae -Description: Sabanê -Added: 2009-07-29 -%% -Type: language -Subtag: saf -Description: Safaliba -Added: 2009-07-29 -%% -Type: language -Subtag: sah -Description: Yakut -Added: 2005-10-16 -%% -Type: language -Subtag: sai -Description: South American Indian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: saj -Description: Sahu -Added: 2009-07-29 -%% -Type: language -Subtag: sak -Description: Sake -Added: 2009-07-29 -%% -Type: language -Subtag: sal -Description: Salishan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: sam -Description: Samaritan Aramaic -Added: 2005-10-16 -%% -Type: language -Subtag: sao -Description: Sause -Added: 2009-07-29 -%% -Type: language -Subtag: sap -Description: Sanapaná -Added: 2009-07-29 -%% -Type: language -Subtag: saq -Description: Samburu -Added: 2009-07-29 -%% -Type: language -Subtag: sar -Description: Saraveca -Added: 2009-07-29 -%% -Type: language -Subtag: sas -Description: Sasak -Added: 2005-10-16 -%% -Type: language -Subtag: sat -Description: Santali -Added: 2005-10-16 -%% -Type: language -Subtag: sau -Description: Saleman -Added: 2009-07-29 -%% -Type: language -Subtag: sav -Description: Saafi-Saafi -Added: 2009-07-29 -%% -Type: language -Subtag: saw -Description: Sawi -Added: 2009-07-29 -%% -Type: language -Subtag: sax -Description: Sa -Added: 2009-07-29 -%% -Type: language -Subtag: say -Description: Saya -Added: 2009-07-29 -%% -Type: language -Subtag: saz -Description: Saurashtra -Added: 2009-07-29 -%% -Type: language -Subtag: sba -Description: Ngambay -Added: 2009-07-29 -%% -Type: language -Subtag: sbb -Description: Simbo -Added: 2009-07-29 -%% -Type: language -Subtag: sbc -Description: Kele (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: sbd -Description: Southern Samo -Added: 2009-07-29 -%% -Type: language -Subtag: sbe -Description: Saliba -Added: 2009-07-29 -%% -Type: language -Subtag: sbf -Description: Shabo -Added: 2009-07-29 -%% -Type: language -Subtag: sbg -Description: Seget -Added: 2009-07-29 -%% -Type: language -Subtag: sbh -Description: Sori-Harengan -Added: 2009-07-29 -%% -Type: language -Subtag: sbi -Description: Seti -Added: 2009-07-29 -%% -Type: language -Subtag: sbj -Description: Surbakhal -Added: 2009-07-29 -%% -Type: language -Subtag: sbk -Description: Safwa -Added: 2009-07-29 -%% -Type: language -Subtag: sbl -Description: Botolan Sambal -Added: 2009-07-29 -%% -Type: language -Subtag: sbm -Description: Sagala -Added: 2009-07-29 -%% -Type: language -Subtag: sbn -Description: Sindhi Bhil -Added: 2009-07-29 -%% -Type: language -Subtag: sbo -Description: Sabüm -Added: 2009-07-29 -%% -Type: language -Subtag: sbp -Description: Sangu (Tanzania) -Added: 2009-07-29 -%% -Type: language -Subtag: sbq -Description: Sileibi -Added: 2009-07-29 -%% -Type: language -Subtag: sbr -Description: Sembakung Murut -Added: 2009-07-29 -%% -Type: language -Subtag: sbs -Description: Subiya -Added: 2009-07-29 -%% -Type: language -Subtag: sbt -Description: Kimki -Added: 2009-07-29 -%% -Type: language -Subtag: sbu -Description: Stod Bhoti -Added: 2009-07-29 -%% -Type: language -Subtag: sbv -Description: Sabine -Added: 2009-07-29 -%% -Type: language -Subtag: sbw -Description: Simba -Added: 2009-07-29 -%% -Type: language -Subtag: sbx -Description: Seberuang -Added: 2009-07-29 -%% -Type: language -Subtag: sby -Description: Soli -Added: 2009-07-29 -%% -Type: language -Subtag: sbz -Description: Sara Kaba -Added: 2009-07-29 -%% -Type: language -Subtag: sca -Description: Sansu -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: hle -%% -Type: language -Subtag: scb -Description: Chut -Added: 2009-07-29 -%% -Type: language -Subtag: sce -Description: Dongxiang -Added: 2009-07-29 -%% -Type: language -Subtag: scf -Description: San Miguel Creole French -Added: 2009-07-29 -%% -Type: language -Subtag: scg -Description: Sanggau -Added: 2009-07-29 -%% -Type: language -Subtag: sch -Description: Sakachep -Added: 2009-07-29 -%% -Type: language -Subtag: sci -Description: Sri Lankan Creole Malay -Added: 2009-07-29 -%% -Type: language -Subtag: sck -Description: Sadri -Added: 2009-07-29 -%% -Type: language -Subtag: scl -Description: Shina -Added: 2009-07-29 -%% -Type: language -Subtag: scn -Description: Sicilian -Added: 2005-10-16 -%% -Type: language -Subtag: sco -Description: Scots -Added: 2005-10-16 -%% -Type: language -Subtag: scp -Description: Helambu Sherpa -Added: 2009-07-29 -%% -Type: language -Subtag: scq -Description: Sa'och -Added: 2009-07-29 -%% -Type: language -Subtag: scs -Description: North Slavey -Added: 2009-07-29 -Macrolanguage: den -%% -Type: language -Subtag: scu -Description: Shumcho -Added: 2009-07-29 -%% -Type: language -Subtag: scv -Description: Sheni -Added: 2009-07-29 -%% -Type: language -Subtag: scw -Description: Sha -Added: 2009-07-29 -%% -Type: language -Subtag: scx -Description: Sicel -Added: 2009-07-29 -%% -Type: language -Subtag: sda -Description: Toraja-Sa'dan -Added: 2009-07-29 -%% -Type: language -Subtag: sdb -Description: Shabak -Added: 2009-07-29 -%% -Type: language -Subtag: sdc -Description: Sassarese Sardinian -Added: 2009-07-29 -Macrolanguage: sc -%% -Type: language -Subtag: sde -Description: Surubu -Added: 2009-07-29 -%% -Type: language -Subtag: sdf -Description: Sarli -Added: 2009-07-29 -%% -Type: language -Subtag: sdg -Description: Savi -Added: 2009-07-29 -%% -Type: language -Subtag: sdh -Description: Southern Kurdish -Added: 2009-07-29 -Macrolanguage: ku -%% -Type: language -Subtag: sdj -Description: Suundi -Added: 2009-07-29 -%% -Type: language -Subtag: sdk -Description: Sos Kundi -Added: 2009-07-29 -%% -Type: language -Subtag: sdl -Description: Saudi Arabian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sdm -Description: Semandang -Added: 2009-07-29 -%% -Type: language -Subtag: sdn -Description: Gallurese Sardinian -Added: 2009-07-29 -Macrolanguage: sc -%% -Type: language -Subtag: sdo -Description: Bukar-Sadung Bidayuh -Added: 2009-07-29 -%% -Type: language -Subtag: sdp -Description: Sherdukpen -Added: 2009-07-29 -%% -Type: language -Subtag: sdr -Description: Oraon Sadri -Added: 2009-07-29 -%% -Type: language -Subtag: sds -Description: Sened -Added: 2009-07-29 -%% -Type: language -Subtag: sdt -Description: Shuadit -Added: 2009-07-29 -%% -Type: language -Subtag: sdu -Description: Sarudu -Added: 2009-07-29 -%% -Type: language -Subtag: sdv -Description: Eastern Sudanic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: sdx -Description: Sibu Melanau -Added: 2009-07-29 -%% -Type: language -Subtag: sdz -Description: Sallands -Added: 2009-07-29 -%% -Type: language -Subtag: sea -Description: Semai -Added: 2009-07-29 -%% -Type: language -Subtag: seb -Description: Shempire Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: sec -Description: Sechelt -Added: 2009-07-29 -%% -Type: language -Subtag: sed -Description: Sedang -Added: 2009-07-29 -%% -Type: language -Subtag: see -Description: Seneca -Added: 2009-07-29 -%% -Type: language -Subtag: sef -Description: Cebaara Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: seg -Description: Segeju -Added: 2009-07-29 -%% -Type: language -Subtag: seh -Description: Sena -Added: 2009-07-29 -%% -Type: language -Subtag: sei -Description: Seri -Added: 2009-07-29 -%% -Type: language -Subtag: sej -Description: Sene -Added: 2009-07-29 -%% -Type: language -Subtag: sek -Description: Sekani -Added: 2009-07-29 -%% -Type: language -Subtag: sel -Description: Selkup -Added: 2005-10-16 -%% -Type: language -Subtag: sem -Description: Semitic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: sen -Description: Nanerigé Sénoufo -Added: 2009-07-29 -%% -Type: language -Subtag: seo -Description: Suarmin -Added: 2009-07-29 -%% -Type: language -Subtag: sep -Description: Sìcìté Sénoufo -Added: 2009-07-29 -%% -Type: language -Subtag: seq -Description: Senara Sénoufo -Added: 2009-07-29 -%% -Type: language -Subtag: ser -Description: Serrano -Added: 2009-07-29 -%% -Type: language -Subtag: ses -Description: Koyraboro Senni Songhai -Added: 2009-07-29 -%% -Type: language -Subtag: set -Description: Sentani -Added: 2009-07-29 -%% -Type: language -Subtag: seu -Description: Serui-Laut -Added: 2009-07-29 -%% -Type: language -Subtag: sev -Description: Nyarafolo Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: sew -Description: Sewa Bay -Added: 2009-07-29 -%% -Type: language -Subtag: sey -Description: Secoya -Added: 2009-07-29 -%% -Type: language -Subtag: sez -Description: Senthang Chin -Added: 2009-07-29 -%% -Type: language -Subtag: sfb -Description: Langue des signes de Belgique Francophone -Description: French Belgian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sfe -Description: Eastern Subanen -Added: 2012-08-12 -%% -Type: language -Subtag: sfm -Description: Small Flowery Miao -Added: 2009-07-29 -Macrolanguage: hmn -%% -Type: language -Subtag: sfs -Description: South African Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sfw -Description: Sehwi -Added: 2009-07-29 -%% -Type: language -Subtag: sga -Description: Old Irish (to 900) -Added: 2005-10-16 -%% -Type: language -Subtag: sgb -Description: Mag-antsi Ayta -Added: 2009-07-29 -%% -Type: language -Subtag: sgc -Description: Kipsigis -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: sgd -Description: Surigaonon -Added: 2010-03-11 -%% -Type: language -Subtag: sge -Description: Segai -Added: 2009-07-29 -%% -Type: language -Subtag: sgg -Description: Swiss-German Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sgh -Description: Shughni -Added: 2009-07-29 -%% -Type: language -Subtag: sgi -Description: Suga -Added: 2009-07-29 -%% -Type: language -Subtag: sgj -Description: Surgujia -Added: 2012-08-12 -%% -Type: language -Subtag: sgk -Description: Sangkong -Added: 2009-07-29 -%% -Type: language -Subtag: sgl -Description: Sanglechi-Ishkashimi -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see isk, sgy -%% -Type: language -Subtag: sgm -Description: Singa -Added: 2009-07-29 -%% -Type: language -Subtag: sgn -Description: Sign languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: sgo -Description: Songa -Added: 2009-07-29 -%% -Type: language -Subtag: sgp -Description: Singpho -Added: 2009-07-29 -%% -Type: language -Subtag: sgr -Description: Sangisari -Added: 2009-07-29 -%% -Type: language -Subtag: sgs -Description: Samogitian -Added: 2010-07-26 -%% -Type: language -Subtag: sgt -Description: Brokpake -Added: 2009-07-29 -%% -Type: language -Subtag: sgu -Description: Salas -Added: 2009-07-29 -%% -Type: language -Subtag: sgw -Description: Sebat Bet Gurage -Added: 2009-07-29 -%% -Type: language -Subtag: sgx -Description: Sierra Leone Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sgy -Description: Sanglechi -Added: 2010-03-11 -%% -Type: language -Subtag: sgz -Description: Sursurunga -Added: 2009-07-29 -%% -Type: language -Subtag: sha -Description: Shall-Zwall -Added: 2009-07-29 -%% -Type: language -Subtag: shb -Description: Ninam -Added: 2009-07-29 -%% -Type: language -Subtag: shc -Description: Sonde -Added: 2009-07-29 -%% -Type: language -Subtag: shd -Description: Kundal Shahi -Added: 2010-03-11 -%% -Type: language -Subtag: she -Description: Sheko -Added: 2009-07-29 -%% -Type: language -Subtag: shg -Description: Shua -Added: 2009-07-29 -%% -Type: language -Subtag: shh -Description: Shoshoni -Added: 2009-07-29 -%% -Type: language -Subtag: shi -Description: Tachelhit -Added: 2009-07-29 -%% -Type: language -Subtag: shj -Description: Shatt -Added: 2009-07-29 -%% -Type: language -Subtag: shk -Description: Shilluk -Added: 2009-07-29 -%% -Type: language -Subtag: shl -Description: Shendu -Added: 2009-07-29 -%% -Type: language -Subtag: shm -Description: Shahrudi -Added: 2009-07-29 -%% -Type: language -Subtag: shn -Description: Shan -Added: 2005-10-16 -%% -Type: language -Subtag: sho -Description: Shanga -Added: 2009-07-29 -%% -Type: language -Subtag: shp -Description: Shipibo-Conibo -Added: 2009-07-29 -%% -Type: language -Subtag: shq -Description: Sala -Added: 2009-07-29 -%% -Type: language -Subtag: shr -Description: Shi -Added: 2009-07-29 -%% -Type: language -Subtag: shs -Description: Shuswap -Added: 2009-07-29 -%% -Type: language -Subtag: sht -Description: Shasta -Added: 2009-07-29 -%% -Type: language -Subtag: shu -Description: Chadian Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: shv -Description: Shehri -Added: 2009-07-29 -%% -Type: language -Subtag: shw -Description: Shwai -Added: 2009-07-29 -%% -Type: language -Subtag: shx -Description: She -Added: 2009-07-29 -%% -Type: language -Subtag: shy -Description: Tachawit -Added: 2009-07-29 -%% -Type: language -Subtag: shz -Description: Syenara Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: sia -Description: Akkala Sami -Added: 2009-07-29 -%% -Type: language -Subtag: sib -Description: Sebop -Added: 2009-07-29 -%% -Type: language -Subtag: sid -Description: Sidamo -Added: 2005-10-16 -%% -Type: language -Subtag: sie -Description: Simaa -Added: 2009-07-29 -%% -Type: language -Subtag: sif -Description: Siamou -Added: 2009-07-29 -%% -Type: language -Subtag: sig -Description: Paasaal -Added: 2009-07-29 -%% -Type: language -Subtag: sih -Description: Zire -Description: Sîshëë -Added: 2009-07-29 -%% -Type: language -Subtag: sii -Description: Shom Peng -Added: 2009-07-29 -%% -Type: language -Subtag: sij -Description: Numbami -Added: 2009-07-29 -%% -Type: language -Subtag: sik -Description: Sikiana -Added: 2009-07-29 -%% -Type: language -Subtag: sil -Description: Tumulung Sisaala -Added: 2009-07-29 -%% -Type: language -Subtag: sim -Description: Mende (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: sio -Description: Siouan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: sip -Description: Sikkimese -Added: 2009-07-29 -%% -Type: language -Subtag: siq -Description: Sonia -Added: 2009-07-29 -%% -Type: language -Subtag: sir -Description: Siri -Added: 2009-07-29 -%% -Type: language -Subtag: sis -Description: Siuslaw -Added: 2009-07-29 -%% -Type: language -Subtag: sit -Description: Sino-Tibetan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: siu -Description: Sinagen -Added: 2009-07-29 -%% -Type: language -Subtag: siv -Description: Sumariup -Added: 2009-07-29 -%% -Type: language -Subtag: siw -Description: Siwai -Added: 2009-07-29 -%% -Type: language -Subtag: six -Description: Sumau -Added: 2009-07-29 -%% -Type: language -Subtag: siy -Description: Sivandi -Added: 2009-07-29 -%% -Type: language -Subtag: siz -Description: Siwi -Added: 2009-07-29 -%% -Type: language -Subtag: sja -Description: Epena -Added: 2009-07-29 -%% -Type: language -Subtag: sjb -Description: Sajau Basap -Added: 2009-07-29 -%% -Type: language -Subtag: sjd -Description: Kildin Sami -Added: 2009-07-29 -%% -Type: language -Subtag: sje -Description: Pite Sami -Added: 2009-07-29 -%% -Type: language -Subtag: sjg -Description: Assangori -Added: 2009-07-29 -%% -Type: language -Subtag: sjk -Description: Kemi Sami -Added: 2009-07-29 -%% -Type: language -Subtag: sjl -Description: Sajalong -Description: Miji -Added: 2009-07-29 -%% -Type: language -Subtag: sjm -Description: Mapun -Added: 2009-07-29 -%% -Type: language -Subtag: sjn -Description: Sindarin -Added: 2009-07-29 -%% -Type: language -Subtag: sjo -Description: Xibe -Added: 2009-07-29 -%% -Type: language -Subtag: sjp -Description: Surjapuri -Added: 2009-07-29 -%% -Type: language -Subtag: sjr -Description: Siar-Lak -Added: 2009-07-29 -%% -Type: language -Subtag: sjs -Description: Senhaja De Srair -Added: 2009-07-29 -%% -Type: language -Subtag: sjt -Description: Ter Sami -Added: 2009-07-29 -%% -Type: language -Subtag: sju -Description: Ume Sami -Added: 2009-07-29 -%% -Type: language -Subtag: sjw -Description: Shawnee -Added: 2009-07-29 -%% -Type: language -Subtag: ska -Description: Skagit -Added: 2009-07-29 -%% -Type: language -Subtag: skb -Description: Saek -Added: 2009-07-29 -%% -Type: language -Subtag: skc -Description: Ma Manda -Added: 2009-07-29 -%% -Type: language -Subtag: skd -Description: Southern Sierra Miwok -Added: 2009-07-29 -%% -Type: language -Subtag: ske -Description: Seke (Vanuatu) -Added: 2009-07-29 -%% -Type: language -Subtag: skf -Description: Sakirabiá -Added: 2009-07-29 -%% -Type: language -Subtag: skg -Description: Sakalava Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: skh -Description: Sikule -Added: 2009-07-29 -%% -Type: language -Subtag: ski -Description: Sika -Added: 2009-07-29 -%% -Type: language -Subtag: skj -Description: Seke (Nepal) -Added: 2009-07-29 -%% -Type: language -Subtag: skk -Description: Sok -Added: 2009-07-29 -%% -Type: language -Subtag: skm -Description: Kutong -Added: 2009-07-29 -%% -Type: language -Subtag: skn -Description: Kolibugan Subanon -Added: 2009-07-29 -%% -Type: language -Subtag: sko -Description: Seko Tengah -Added: 2009-07-29 -%% -Type: language -Subtag: skp -Description: Sekapan -Added: 2009-07-29 -%% -Type: language -Subtag: skq -Description: Sininkere -Added: 2009-07-29 -%% -Type: language -Subtag: skr -Description: Seraiki -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: sks -Description: Maia -Added: 2009-07-29 -%% -Type: language -Subtag: skt -Description: Sakata -Added: 2009-07-29 -%% -Type: language -Subtag: sku -Description: Sakao -Added: 2009-07-29 -%% -Type: language -Subtag: skv -Description: Skou -Added: 2009-07-29 -%% -Type: language -Subtag: skw -Description: Skepi Creole Dutch -Added: 2009-07-29 -%% -Type: language -Subtag: skx -Description: Seko Padang -Added: 2009-07-29 -%% -Type: language -Subtag: sky -Description: Sikaiana -Added: 2009-07-29 -%% -Type: language -Subtag: skz -Description: Sekar -Added: 2009-07-29 -%% -Type: language -Subtag: sla -Description: Slavic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: slc -Description: Sáliba -Added: 2009-07-29 -%% -Type: language -Subtag: sld -Description: Sissala -Added: 2009-07-29 -%% -Type: language -Subtag: sle -Description: Sholaga -Added: 2009-07-29 -%% -Type: language -Subtag: slf -Description: Swiss-Italian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: slg -Description: Selungai Murut -Added: 2009-07-29 -%% -Type: language -Subtag: slh -Description: Southern Puget Sound Salish -Added: 2009-07-29 -%% -Type: language -Subtag: sli -Description: Lower Silesian -Added: 2009-07-29 -%% -Type: language -Subtag: slj -Description: Salumá -Added: 2009-07-29 -%% -Type: language -Subtag: sll -Description: Salt-Yui -Added: 2009-07-29 -%% -Type: language -Subtag: slm -Description: Pangutaran Sama -Added: 2009-07-29 -%% -Type: language -Subtag: sln -Description: Salinan -Added: 2009-07-29 -%% -Type: language -Subtag: slp -Description: Lamaholot -Added: 2009-07-29 -%% -Type: language -Subtag: slq -Description: Salchuq -Added: 2009-07-29 -%% -Type: language -Subtag: slr -Description: Salar -Added: 2009-07-29 -%% -Type: language -Subtag: sls -Description: Singapore Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: slt -Description: Sila -Added: 2009-07-29 -%% -Type: language -Subtag: slu -Description: Selaru -Added: 2009-07-29 -%% -Type: language -Subtag: slw -Description: Sialum -Added: 2009-07-29 -%% -Type: language -Subtag: slx -Description: Salampasu -Added: 2009-07-29 -%% -Type: language -Subtag: sly -Description: Selayar -Added: 2009-07-29 -%% -Type: language -Subtag: slz -Description: Ma'ya -Added: 2009-07-29 -%% -Type: language -Subtag: sma -Description: Southern Sami -Added: 2005-10-16 -%% -Type: language -Subtag: smb -Description: Simbari -Added: 2009-07-29 -%% -Type: language -Subtag: smc -Description: Som -Added: 2009-07-29 -%% -Type: language -Subtag: smd -Description: Sama -Added: 2009-07-29 -%% -Type: language -Subtag: smf -Description: Auwe -Added: 2009-07-29 -%% -Type: language -Subtag: smg -Description: Simbali -Added: 2009-07-29 -%% -Type: language -Subtag: smh -Description: Samei -Added: 2009-07-29 -%% -Type: language -Subtag: smi -Description: Sami languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: smj -Description: Lule Sami -Added: 2005-10-16 -%% -Type: language -Subtag: smk -Description: Bolinao -Added: 2009-07-29 -%% -Type: language -Subtag: sml -Description: Central Sama -Added: 2009-07-29 -%% -Type: language -Subtag: smm -Description: Musasa -Added: 2009-07-29 -%% -Type: language -Subtag: smn -Description: Inari Sami -Added: 2005-10-16 -%% -Type: language -Subtag: smp -Description: Samaritan -Added: 2009-07-29 -%% -Type: language -Subtag: smq -Description: Samo -Added: 2009-07-29 -%% -Type: language -Subtag: smr -Description: Simeulue -Added: 2009-07-29 -%% -Type: language -Subtag: sms -Description: Skolt Sami -Added: 2005-10-16 -%% -Type: language -Subtag: smt -Description: Simte -Added: 2009-07-29 -%% -Type: language -Subtag: smu -Description: Somray -Added: 2009-07-29 -%% -Type: language -Subtag: smv -Description: Samvedi -Added: 2009-07-29 -%% -Type: language -Subtag: smw -Description: Sumbawa -Added: 2009-07-29 -%% -Type: language -Subtag: smx -Description: Samba -Added: 2009-07-29 -%% -Type: language -Subtag: smy -Description: Semnani -Added: 2009-07-29 -%% -Type: language -Subtag: smz -Description: Simeku -Added: 2009-07-29 -%% -Type: language -Subtag: snb -Description: Sebuyau -Added: 2009-07-29 -%% -Type: language -Subtag: snc -Description: Sinaugoro -Added: 2009-07-29 -%% -Type: language -Subtag: sne -Description: Bau Bidayuh -Added: 2009-07-29 -%% -Type: language -Subtag: snf -Description: Noon -Added: 2009-07-29 -%% -Type: language -Subtag: sng -Description: Sanga (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: snh -Description: Shinabo -Added: 2009-07-29 -%% -Type: language -Subtag: sni -Description: Sensi -Added: 2009-07-29 -%% -Type: language -Subtag: snj -Description: Riverain Sango -Added: 2009-07-29 -%% -Type: language -Subtag: snk -Description: Soninke -Added: 2005-10-16 -%% -Type: language -Subtag: snl -Description: Sangil -Added: 2009-07-29 -%% -Type: language -Subtag: snm -Description: Southern Ma'di -Added: 2009-07-29 -%% -Type: language -Subtag: snn -Description: Siona -Added: 2009-07-29 -%% -Type: language -Subtag: sno -Description: Snohomish -Added: 2009-07-29 -%% -Type: language -Subtag: snp -Description: Siane -Added: 2009-07-29 -%% -Type: language -Subtag: snq -Description: Sangu (Gabon) -Added: 2009-07-29 -%% -Type: language -Subtag: snr -Description: Sihan -Added: 2009-07-29 -%% -Type: language -Subtag: sns -Description: South West Bay -Description: Nahavaq -Added: 2009-07-29 -%% -Type: language -Subtag: snu -Description: Senggi -Description: Viid -Added: 2009-07-29 -%% -Type: language -Subtag: snv -Description: Sa'ban -Added: 2009-07-29 -%% -Type: language -Subtag: snw -Description: Selee -Added: 2009-07-29 -%% -Type: language -Subtag: snx -Description: Sam -Added: 2009-07-29 -%% -Type: language -Subtag: sny -Description: Saniyo-Hiyewe -Added: 2009-07-29 -%% -Type: language -Subtag: snz -Description: Sinsauru -Added: 2009-07-29 -%% -Type: language -Subtag: soa -Description: Thai Song -Added: 2009-07-29 -%% -Type: language -Subtag: sob -Description: Sobei -Added: 2009-07-29 -%% -Type: language -Subtag: soc -Description: So (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: sod -Description: Songoora -Added: 2009-07-29 -%% -Type: language -Subtag: soe -Description: Songomeno -Added: 2009-07-29 -%% -Type: language -Subtag: sog -Description: Sogdian -Added: 2005-10-16 -%% -Type: language -Subtag: soh -Description: Aka -Added: 2009-07-29 -%% -Type: language -Subtag: soi -Description: Sonha -Added: 2009-07-29 -%% -Type: language -Subtag: soj -Description: Soi -Added: 2009-07-29 -%% -Type: language -Subtag: sok -Description: Sokoro -Added: 2009-07-29 -%% -Type: language -Subtag: sol -Description: Solos -Added: 2009-07-29 -%% -Type: language -Subtag: son -Description: Songhai languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: soo -Description: Songo -Added: 2009-07-29 -%% -Type: language -Subtag: sop -Description: Songe -Added: 2009-07-29 -%% -Type: language -Subtag: soq -Description: Kanasi -Added: 2009-07-29 -%% -Type: language -Subtag: sor -Description: Somrai -Added: 2009-07-29 -%% -Type: language -Subtag: sos -Description: Seeku -Added: 2009-07-29 -%% -Type: language -Subtag: sou -Description: Southern Thai -Added: 2009-07-29 -%% -Type: language -Subtag: sov -Description: Sonsorol -Added: 2009-07-29 -%% -Type: language -Subtag: sow -Description: Sowanda -Added: 2009-07-29 -%% -Type: language -Subtag: sox -Description: Swo -Added: 2009-07-29 -%% -Type: language -Subtag: soy -Description: Miyobe -Added: 2009-07-29 -%% -Type: language -Subtag: soz -Description: Temi -Added: 2009-07-29 -%% -Type: language -Subtag: spb -Description: Sepa (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: spc -Description: Sapé -Added: 2009-07-29 -%% -Type: language -Subtag: spd -Description: Saep -Added: 2009-07-29 -%% -Type: language -Subtag: spe -Description: Sepa (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: spg -Description: Sian -Added: 2009-07-29 -%% -Type: language -Subtag: spi -Description: Saponi -Added: 2009-07-29 -%% -Type: language -Subtag: spk -Description: Sengo -Added: 2009-07-29 -%% -Type: language -Subtag: spl -Description: Selepet -Added: 2009-07-29 -%% -Type: language -Subtag: spm -Description: Akukem -Added: 2009-07-29 -%% -Type: language -Subtag: spo -Description: Spokane -Added: 2009-07-29 -%% -Type: language -Subtag: spp -Description: Supyire Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: spq -Description: Loreto-Ucayali Spanish -Added: 2009-07-29 -%% -Type: language -Subtag: spr -Description: Saparua -Added: 2009-07-29 -%% -Type: language -Subtag: sps -Description: Saposa -Added: 2009-07-29 -%% -Type: language -Subtag: spt -Description: Spiti Bhoti -Added: 2009-07-29 -%% -Type: language -Subtag: spu -Description: Sapuan -Added: 2009-07-29 -%% -Type: language -Subtag: spv -Description: Sambalpuri -Description: Kosli -Added: 2012-08-12 -Macrolanguage: or -%% -Type: language -Subtag: spx -Description: South Picene -Added: 2009-07-29 -%% -Type: language -Subtag: spy -Description: Sabaot -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: sqa -Description: Shama-Sambuga -Added: 2009-07-29 -%% -Type: language -Subtag: sqh -Description: Shau -Added: 2009-07-29 -%% -Type: language -Subtag: sqj -Description: Albanian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: sqk -Description: Albanian Sign Language -Added: 2012-08-12 -%% -Type: language -Subtag: sqm -Description: Suma -Added: 2009-07-29 -%% -Type: language -Subtag: sqn -Description: Susquehannock -Added: 2009-07-29 -%% -Type: language -Subtag: sqo -Description: Sorkhei -Added: 2009-07-29 -%% -Type: language -Subtag: sqq -Description: Sou -Added: 2009-07-29 -%% -Type: language -Subtag: sqr -Description: Siculo Arabic -Added: 2009-07-29 -%% -Type: language -Subtag: sqs -Description: Sri Lankan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sqt -Description: Soqotri -Added: 2009-07-29 -%% -Type: language -Subtag: squ -Description: Squamish -Added: 2009-07-29 -%% -Type: language -Subtag: sra -Description: Saruga -Added: 2009-07-29 -%% -Type: language -Subtag: srb -Description: Sora -Added: 2009-07-29 -%% -Type: language -Subtag: src -Description: Logudorese Sardinian -Added: 2009-07-29 -Macrolanguage: sc -%% -Type: language -Subtag: sre -Description: Sara -Added: 2009-07-29 -%% -Type: language -Subtag: srf -Description: Nafi -Added: 2009-07-29 -%% -Type: language -Subtag: srg -Description: Sulod -Added: 2009-07-29 -%% -Type: language -Subtag: srh -Description: Sarikoli -Added: 2009-07-29 -%% -Type: language -Subtag: sri -Description: Siriano -Added: 2009-07-29 -%% -Type: language -Subtag: srk -Description: Serudung Murut -Added: 2009-07-29 -%% -Type: language -Subtag: srl -Description: Isirawa -Added: 2009-07-29 -%% -Type: language -Subtag: srm -Description: Saramaccan -Added: 2009-07-29 -%% -Type: language -Subtag: srn -Description: Sranan Tongo -Added: 2005-10-16 -%% -Type: language -Subtag: sro -Description: Campidanese Sardinian -Added: 2009-07-29 -Macrolanguage: sc -%% -Type: language -Subtag: srq -Description: Sirionó -Added: 2009-07-29 -%% -Type: language -Subtag: srr -Description: Serer -Added: 2005-10-16 -%% -Type: language -Subtag: srs -Description: Sarsi -Added: 2009-07-29 -%% -Type: language -Subtag: srt -Description: Sauri -Added: 2009-07-29 -%% -Type: language -Subtag: sru -Description: Suruí -Added: 2009-07-29 -%% -Type: language -Subtag: srv -Description: Southern Sorsoganon -Added: 2009-07-29 -%% -Type: language -Subtag: srw -Description: Serua -Added: 2009-07-29 -%% -Type: language -Subtag: srx -Description: Sirmauri -Added: 2009-07-29 -%% -Type: language -Subtag: sry -Description: Sera -Added: 2009-07-29 -%% -Type: language -Subtag: srz -Description: Shahmirzadi -Added: 2009-07-29 -%% -Type: language -Subtag: ssa -Description: Nilo-Saharan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: ssb -Description: Southern Sama -Added: 2009-07-29 -%% -Type: language -Subtag: ssc -Description: Suba-Simbiti -Added: 2009-07-29 -%% -Type: language -Subtag: ssd -Description: Siroi -Added: 2009-07-29 -%% -Type: language -Subtag: sse -Description: Balangingi -Description: Bangingih Sama -Added: 2009-07-29 -%% -Type: language -Subtag: ssf -Description: Thao -Added: 2009-07-29 -%% -Type: language -Subtag: ssg -Description: Seimat -Added: 2009-07-29 -%% -Type: language -Subtag: ssh -Description: Shihhi Arabic -Added: 2009-07-29 -Macrolanguage: ar -%% -Type: language -Subtag: ssi -Description: Sansi -Added: 2009-07-29 -%% -Type: language -Subtag: ssj -Description: Sausi -Added: 2009-07-29 -%% -Type: language -Subtag: ssk -Description: Sunam -Added: 2009-07-29 -%% -Type: language -Subtag: ssl -Description: Western Sisaala -Added: 2009-07-29 -%% -Type: language -Subtag: ssm -Description: Semnam -Added: 2009-07-29 -%% -Type: language -Subtag: ssn -Description: Waata -Added: 2009-07-29 -%% -Type: language -Subtag: sso -Description: Sissano -Added: 2009-07-29 -%% -Type: language -Subtag: ssp -Description: Spanish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: ssq -Description: So'a -Added: 2009-07-29 -%% -Type: language -Subtag: ssr -Description: Swiss-French Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sss -Description: Sô -Added: 2009-07-29 -%% -Type: language -Subtag: sst -Description: Sinasina -Added: 2009-07-29 -%% -Type: language -Subtag: ssu -Description: Susuami -Added: 2009-07-29 -%% -Type: language -Subtag: ssv -Description: Shark Bay -Added: 2009-07-29 -%% -Type: language -Subtag: ssx -Description: Samberigi -Added: 2009-07-29 -%% -Type: language -Subtag: ssy -Description: Saho -Added: 2009-07-29 -%% -Type: language -Subtag: ssz -Description: Sengseng -Added: 2009-07-29 -%% -Type: language -Subtag: sta -Description: Settla -Added: 2009-07-29 -%% -Type: language -Subtag: stb -Description: Northern Subanen -Added: 2009-07-29 -%% -Type: language -Subtag: std -Description: Sentinel -Added: 2009-07-29 -%% -Type: language -Subtag: ste -Description: Liana-Seti -Added: 2009-07-29 -%% -Type: language -Subtag: stf -Description: Seta -Added: 2009-07-29 -%% -Type: language -Subtag: stg -Description: Trieng -Added: 2009-07-29 -%% -Type: language -Subtag: sth -Description: Shelta -Added: 2009-07-29 -%% -Type: language -Subtag: sti -Description: Bulo Stieng -Added: 2009-07-29 -%% -Type: language -Subtag: stj -Description: Matya Samo -Added: 2009-07-29 -%% -Type: language -Subtag: stk -Description: Arammba -Added: 2009-07-29 -%% -Type: language -Subtag: stl -Description: Stellingwerfs -Added: 2009-07-29 -%% -Type: language -Subtag: stm -Description: Setaman -Added: 2009-07-29 -%% -Type: language -Subtag: stn -Description: Owa -Added: 2009-07-29 -%% -Type: language -Subtag: sto -Description: Stoney -Added: 2009-07-29 -%% -Type: language -Subtag: stp -Description: Southeastern Tepehuan -Added: 2009-07-29 -%% -Type: language -Subtag: stq -Description: Saterfriesisch -Added: 2009-07-29 -%% -Type: language -Subtag: str -Description: Straits Salish -Added: 2009-07-29 -%% -Type: language -Subtag: sts -Description: Shumashti -Added: 2009-07-29 -%% -Type: language -Subtag: stt -Description: Budeh Stieng -Added: 2009-07-29 -%% -Type: language -Subtag: stu -Description: Samtao -Added: 2009-07-29 -%% -Type: language -Subtag: stv -Description: Silt'e -Added: 2009-07-29 -%% -Type: language -Subtag: stw -Description: Satawalese -Added: 2009-07-29 -%% -Type: language -Subtag: sty -Description: Siberian Tatar -Added: 2013-09-10 -%% -Type: language -Subtag: sua -Description: Sulka -Added: 2009-07-29 -%% -Type: language -Subtag: sub -Description: Suku -Added: 2009-07-29 -%% -Type: language -Subtag: suc -Description: Western Subanon -Added: 2009-07-29 -%% -Type: language -Subtag: sue -Description: Suena -Added: 2009-07-29 -%% -Type: language -Subtag: sug -Description: Suganga -Added: 2009-07-29 -%% -Type: language -Subtag: sui -Description: Suki -Added: 2009-07-29 -%% -Type: language -Subtag: suj -Description: Shubi -Added: 2009-07-29 -%% -Type: language -Subtag: suk -Description: Sukuma -Added: 2005-10-16 -%% -Type: language -Subtag: sul -Description: Surigaonon -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see sgd, tgn -%% -Type: language -Subtag: sum -Description: Sumo-Mayangna -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see ulw, yan -%% -Type: language -Subtag: suq -Description: Suri -Added: 2009-07-29 -%% -Type: language -Subtag: sur -Description: Mwaghavul -Added: 2009-07-29 -%% -Type: language -Subtag: sus -Description: Susu -Added: 2005-10-16 -%% -Type: language -Subtag: sut -Description: Subtiaba -Added: 2009-07-29 -%% -Type: language -Subtag: suv -Description: Puroik -Added: 2009-07-29 -%% -Type: language -Subtag: suw -Description: Sumbwa -Added: 2009-07-29 -%% -Type: language -Subtag: sux -Description: Sumerian -Added: 2005-10-16 -%% -Type: language -Subtag: suy -Description: Suyá -Added: 2009-07-29 -%% -Type: language -Subtag: suz -Description: Sunwar -Added: 2009-07-29 -%% -Type: language -Subtag: sva -Description: Svan -Added: 2009-07-29 -%% -Type: language -Subtag: svb -Description: Ulau-Suain -Added: 2009-07-29 -%% -Type: language -Subtag: svc -Description: Vincentian Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: sve -Description: Serili -Added: 2009-07-29 -%% -Type: language -Subtag: svk -Description: Slovakian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: svm -Description: Slavomolisano -Added: 2013-09-10 -%% -Type: language -Subtag: svr -Description: Savara -Added: 2009-07-29 -%% -Type: language -Subtag: svs -Description: Savosavo -Added: 2009-07-29 -%% -Type: language -Subtag: svx -Description: Skalvian -Added: 2009-07-29 -%% -Type: language -Subtag: swb -Description: Maore Comorian -Added: 2009-07-29 -%% -Type: language -Subtag: swc -Description: Congo Swahili -Added: 2009-07-29 -Macrolanguage: sw -%% -Type: language -Subtag: swf -Description: Sere -Added: 2009-07-29 -%% -Type: language -Subtag: swg -Description: Swabian -Added: 2009-07-29 -%% -Type: language -Subtag: swh -Description: Swahili (individual language) -Description: Kiswahili -Added: 2009-07-29 -Macrolanguage: sw -%% -Type: language -Subtag: swi -Description: Sui -Added: 2009-07-29 -%% -Type: language -Subtag: swj -Description: Sira -Added: 2009-07-29 -%% -Type: language -Subtag: swk -Description: Malawi Sena -Added: 2009-07-29 -%% -Type: language -Subtag: swl -Description: Swedish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: swm -Description: Samosa -Added: 2009-07-29 -%% -Type: language -Subtag: swn -Description: Sawknah -Added: 2009-07-29 -%% -Type: language -Subtag: swo -Description: Shanenawa -Added: 2009-07-29 -%% -Type: language -Subtag: swp -Description: Suau -Added: 2009-07-29 -%% -Type: language -Subtag: swq -Description: Sharwa -Added: 2009-07-29 -%% -Type: language -Subtag: swr -Description: Saweru -Added: 2009-07-29 -%% -Type: language -Subtag: sws -Description: Seluwasan -Added: 2009-07-29 -%% -Type: language -Subtag: swt -Description: Sawila -Added: 2009-07-29 -%% -Type: language -Subtag: swu -Description: Suwawa -Added: 2009-07-29 -%% -Type: language -Subtag: swv -Description: Shekhawati -Added: 2009-07-29 -Macrolanguage: mwr -%% -Type: language -Subtag: sww -Description: Sowa -Added: 2009-07-29 -%% -Type: language -Subtag: swx -Description: Suruahá -Added: 2009-07-29 -%% -Type: language -Subtag: swy -Description: Sarua -Added: 2009-07-29 -%% -Type: language -Subtag: sxb -Description: Suba -Added: 2009-07-29 -%% -Type: language -Subtag: sxc -Description: Sicanian -Added: 2009-07-29 -%% -Type: language -Subtag: sxe -Description: Sighu -Added: 2009-07-29 -%% -Type: language -Subtag: sxg -Description: Shixing -Added: 2009-07-29 -%% -Type: language -Subtag: sxk -Description: Southern Kalapuya -Added: 2009-07-29 -%% -Type: language -Subtag: sxl -Description: Selian -Added: 2009-07-29 -%% -Type: language -Subtag: sxm -Description: Samre -Added: 2009-07-29 -%% -Type: language -Subtag: sxn -Description: Sangir -Added: 2009-07-29 -%% -Type: language -Subtag: sxo -Description: Sorothaptic -Added: 2009-07-29 -%% -Type: language -Subtag: sxr -Description: Saaroa -Added: 2009-07-29 -%% -Type: language -Subtag: sxs -Description: Sasaru -Added: 2009-07-29 -%% -Type: language -Subtag: sxu -Description: Upper Saxon -Added: 2009-07-29 -%% -Type: language -Subtag: sxw -Description: Saxwe Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: sya -Description: Siang -Added: 2009-07-29 -%% -Type: language -Subtag: syb -Description: Central Subanen -Added: 2009-07-29 -%% -Type: language -Subtag: syc -Description: Classical Syriac -Added: 2007-04-03 -%% -Type: language -Subtag: syd -Description: Samoyedic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: syi -Description: Seki -Added: 2009-07-29 -%% -Type: language -Subtag: syk -Description: Sukur -Added: 2009-07-29 -%% -Type: language -Subtag: syl -Description: Sylheti -Added: 2009-07-29 -%% -Type: language -Subtag: sym -Description: Maya Samo -Added: 2009-07-29 -%% -Type: language -Subtag: syn -Description: Senaya -Added: 2009-07-29 -%% -Type: language -Subtag: syo -Description: Suoy -Added: 2009-07-29 -%% -Type: language -Subtag: syr -Description: Syriac -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: sys -Description: Sinyar -Added: 2009-07-29 -%% -Type: language -Subtag: syw -Description: Kagate -Added: 2009-07-29 -%% -Type: language -Subtag: syy -Description: Al-Sayyid Bedouin Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: sza -Description: Semelai -Added: 2009-07-29 -%% -Type: language -Subtag: szb -Description: Ngalum -Added: 2009-07-29 -%% -Type: language -Subtag: szc -Description: Semaq Beri -Added: 2009-07-29 -%% -Type: language -Subtag: szd -Description: Seru -Added: 2009-07-29 -%% -Type: language -Subtag: sze -Description: Seze -Added: 2009-07-29 -%% -Type: language -Subtag: szg -Description: Sengele -Added: 2009-07-29 -%% -Type: language -Subtag: szl -Description: Silesian -Added: 2009-07-29 -%% -Type: language -Subtag: szn -Description: Sula -Added: 2009-07-29 -%% -Type: language -Subtag: szp -Description: Suabo -Added: 2009-07-29 -%% -Type: language -Subtag: szv -Description: Isu (Fako Division) -Added: 2009-07-29 -%% -Type: language -Subtag: szw -Description: Sawai -Added: 2009-07-29 -%% -Type: language -Subtag: taa -Description: Lower Tanana -Added: 2009-07-29 -%% -Type: language -Subtag: tab -Description: Tabassaran -Added: 2009-07-29 -%% -Type: language -Subtag: tac -Description: Lowland Tarahumara -Added: 2009-07-29 -%% -Type: language -Subtag: tad -Description: Tause -Added: 2009-07-29 -%% -Type: language -Subtag: tae -Description: Tariana -Added: 2009-07-29 -%% -Type: language -Subtag: taf -Description: Tapirapé -Added: 2009-07-29 -%% -Type: language -Subtag: tag -Description: Tagoi -Added: 2009-07-29 -%% -Type: language -Subtag: tai -Description: Tai languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: taj -Description: Eastern Tamang -Added: 2009-07-29 -%% -Type: language -Subtag: tak -Description: Tala -Added: 2009-07-29 -%% -Type: language -Subtag: tal -Description: Tal -Added: 2009-07-29 -%% -Type: language -Subtag: tan -Description: Tangale -Added: 2009-07-29 -%% -Type: language -Subtag: tao -Description: Yami -Added: 2009-07-29 -%% -Type: language -Subtag: tap -Description: Taabwa -Added: 2009-07-29 -%% -Type: language -Subtag: taq -Description: Tamasheq -Added: 2009-07-29 -Macrolanguage: tmh -%% -Type: language -Subtag: tar -Description: Central Tarahumara -Added: 2009-07-29 -%% -Type: language -Subtag: tas -Description: Tay Boi -Added: 2009-07-29 -%% -Type: language -Subtag: tau -Description: Upper Tanana -Added: 2009-07-29 -%% -Type: language -Subtag: tav -Description: Tatuyo -Added: 2009-07-29 -%% -Type: language -Subtag: taw -Description: Tai -Added: 2009-07-29 -%% -Type: language -Subtag: tax -Description: Tamki -Added: 2009-07-29 -%% -Type: language -Subtag: tay -Description: Atayal -Added: 2009-07-29 -%% -Type: language -Subtag: taz -Description: Tocho -Added: 2009-07-29 -%% -Type: language -Subtag: tba -Description: Aikanã -Added: 2009-07-29 -%% -Type: language -Subtag: tbb -Description: Tapeba -Added: 2009-07-29 -%% -Type: language -Subtag: tbc -Description: Takia -Added: 2009-07-29 -%% -Type: language -Subtag: tbd -Description: Kaki Ae -Added: 2009-07-29 -%% -Type: language -Subtag: tbe -Description: Tanimbili -Added: 2009-07-29 -%% -Type: language -Subtag: tbf -Description: Mandara -Added: 2009-07-29 -%% -Type: language -Subtag: tbg -Description: North Tairora -Added: 2009-07-29 -%% -Type: language -Subtag: tbh -Description: Thurawal -Added: 2009-07-29 -%% -Type: language -Subtag: tbi -Description: Gaam -Added: 2009-07-29 -%% -Type: language -Subtag: tbj -Description: Tiang -Added: 2009-07-29 -%% -Type: language -Subtag: tbk -Description: Calamian Tagbanwa -Added: 2009-07-29 -%% -Type: language -Subtag: tbl -Description: Tboli -Added: 2009-07-29 -%% -Type: language -Subtag: tbm -Description: Tagbu -Added: 2009-07-29 -%% -Type: language -Subtag: tbn -Description: Barro Negro Tunebo -Added: 2009-07-29 -%% -Type: language -Subtag: tbo -Description: Tawala -Added: 2009-07-29 -%% -Type: language -Subtag: tbp -Description: Taworta -Description: Diebroud -Added: 2009-07-29 -%% -Type: language -Subtag: tbq -Description: Tibeto-Burman languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: tbr -Description: Tumtum -Added: 2009-07-29 -%% -Type: language -Subtag: tbs -Description: Tanguat -Added: 2009-07-29 -%% -Type: language -Subtag: tbt -Description: Tembo (Kitembo) -Added: 2009-07-29 -%% -Type: language -Subtag: tbu -Description: Tubar -Added: 2009-07-29 -%% -Type: language -Subtag: tbv -Description: Tobo -Added: 2009-07-29 -%% -Type: language -Subtag: tbw -Description: Tagbanwa -Added: 2009-07-29 -%% -Type: language -Subtag: tbx -Description: Kapin -Added: 2009-07-29 -%% -Type: language -Subtag: tby -Description: Tabaru -Added: 2009-07-29 -%% -Type: language -Subtag: tbz -Description: Ditammari -Added: 2009-07-29 -%% -Type: language -Subtag: tca -Description: Ticuna -Added: 2009-07-29 -%% -Type: language -Subtag: tcb -Description: Tanacross -Added: 2009-07-29 -%% -Type: language -Subtag: tcc -Description: Datooga -Added: 2009-07-29 -%% -Type: language -Subtag: tcd -Description: Tafi -Added: 2009-07-29 -%% -Type: language -Subtag: tce -Description: Southern Tutchone -Added: 2009-07-29 -%% -Type: language -Subtag: tcf -Description: Malinaltepec Me'phaa -Description: Malinaltepec Tlapanec -Added: 2009-07-29 -%% -Type: language -Subtag: tcg -Description: Tamagario -Added: 2009-07-29 -%% -Type: language -Subtag: tch -Description: Turks And Caicos Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: tci -Description: Wára -Added: 2009-07-29 -%% -Type: language -Subtag: tck -Description: Tchitchege -Added: 2009-07-29 -%% -Type: language -Subtag: tcl -Description: Taman (Myanmar) -Added: 2009-07-29 -%% -Type: language -Subtag: tcm -Description: Tanahmerah -Added: 2009-07-29 -%% -Type: language -Subtag: tcn -Description: Tichurong -Added: 2009-07-29 -%% -Type: language -Subtag: tco -Description: Taungyo -Added: 2009-07-29 -%% -Type: language -Subtag: tcp -Description: Tawr Chin -Added: 2009-07-29 -%% -Type: language -Subtag: tcq -Description: Kaiy -Added: 2009-07-29 -%% -Type: language -Subtag: tcs -Description: Torres Strait Creole -Added: 2009-07-29 -%% -Type: language -Subtag: tct -Description: T'en -Added: 2009-07-29 -%% -Type: language -Subtag: tcu -Description: Southeastern Tarahumara -Added: 2009-07-29 -%% -Type: language -Subtag: tcw -Description: Tecpatlán Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: tcx -Description: Toda -Added: 2009-07-29 -%% -Type: language -Subtag: tcy -Description: Tulu -Added: 2009-07-29 -%% -Type: language -Subtag: tcz -Description: Thado Chin -Added: 2009-07-29 -%% -Type: language -Subtag: tda -Description: Tagdal -Added: 2009-07-29 -%% -Type: language -Subtag: tdb -Description: Panchpargania -Added: 2009-07-29 -%% -Type: language -Subtag: tdc -Description: Emberá-Tadó -Added: 2009-07-29 -%% -Type: language -Subtag: tdd -Description: Tai Nüa -Added: 2009-07-29 -%% -Type: language -Subtag: tde -Description: Tiranige Diga Dogon -Added: 2010-03-11 -%% -Type: language -Subtag: tdf -Description: Talieng -Added: 2009-07-29 -%% -Type: language -Subtag: tdg -Description: Western Tamang -Added: 2009-07-29 -%% -Type: language -Subtag: tdh -Description: Thulung -Added: 2009-07-29 -%% -Type: language -Subtag: tdi -Description: Tomadino -Added: 2009-07-29 -%% -Type: language -Subtag: tdj -Description: Tajio -Added: 2009-07-29 -%% -Type: language -Subtag: tdk -Description: Tambas -Added: 2009-07-29 -%% -Type: language -Subtag: tdl -Description: Sur -Added: 2009-07-29 -%% -Type: language -Subtag: tdn -Description: Tondano -Added: 2009-07-29 -%% -Type: language -Subtag: tdo -Description: Teme -Added: 2009-07-29 -%% -Type: language -Subtag: tdq -Description: Tita -Added: 2009-07-29 -%% -Type: language -Subtag: tdr -Description: Todrah -Added: 2009-07-29 -%% -Type: language -Subtag: tds -Description: Doutai -Added: 2009-07-29 -%% -Type: language -Subtag: tdt -Description: Tetun Dili -Added: 2009-07-29 -%% -Type: language -Subtag: tdu -Description: Tempasuk Dusun -Added: 2009-07-29 -%% -Type: language -Subtag: tdv -Description: Toro -Added: 2009-07-29 -%% -Type: language -Subtag: tdx -Description: Tandroy-Mahafaly Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: tdy -Description: Tadyawan -Added: 2009-07-29 -%% -Type: language -Subtag: tea -Description: Temiar -Added: 2009-07-29 -%% -Type: language -Subtag: teb -Description: Tetete -Added: 2009-07-29 -%% -Type: language -Subtag: tec -Description: Terik -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: ted -Description: Tepo Krumen -Added: 2009-07-29 -%% -Type: language -Subtag: tee -Description: Huehuetla Tepehua -Added: 2009-07-29 -%% -Type: language -Subtag: tef -Description: Teressa -Added: 2009-07-29 -%% -Type: language -Subtag: teg -Description: Teke-Tege -Added: 2009-07-29 -%% -Type: language -Subtag: teh -Description: Tehuelche -Added: 2009-07-29 -%% -Type: language -Subtag: tei -Description: Torricelli -Added: 2009-07-29 -%% -Type: language -Subtag: tek -Description: Ibali Teke -Added: 2009-07-29 -%% -Type: language -Subtag: tem -Description: Timne -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: ten -Description: Tama (Colombia) -Added: 2009-07-29 -%% -Type: language -Subtag: teo -Description: Teso -Added: 2009-07-29 -%% -Type: language -Subtag: tep -Description: Tepecano -Added: 2009-07-29 -%% -Type: language -Subtag: teq -Description: Temein -Added: 2009-07-29 -%% -Type: language -Subtag: ter -Description: Tereno -Added: 2005-10-16 -%% -Type: language -Subtag: tes -Description: Tengger -Added: 2009-07-29 -%% -Type: language -Subtag: tet -Description: Tetum -Added: 2005-10-16 -%% -Type: language -Subtag: teu -Description: Soo -Added: 2009-07-29 -%% -Type: language -Subtag: tev -Description: Teor -Added: 2009-07-29 -%% -Type: language -Subtag: tew -Description: Tewa (USA) -Added: 2009-07-29 -%% -Type: language -Subtag: tex -Description: Tennet -Added: 2009-07-29 -%% -Type: language -Subtag: tey -Description: Tulishi -Added: 2009-07-29 -%% -Type: language -Subtag: tfi -Description: Tofin Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: tfn -Description: Tanaina -Added: 2009-07-29 -%% -Type: language -Subtag: tfo -Description: Tefaro -Added: 2009-07-29 -%% -Type: language -Subtag: tfr -Description: Teribe -Added: 2009-07-29 -%% -Type: language -Subtag: tft -Description: Ternate -Added: 2009-07-29 -%% -Type: language -Subtag: tga -Description: Sagalla -Added: 2009-07-29 -%% -Type: language -Subtag: tgb -Description: Tobilung -Added: 2009-07-29 -%% -Type: language -Subtag: tgc -Description: Tigak -Added: 2009-07-29 -%% -Type: language -Subtag: tgd -Description: Ciwogai -Added: 2009-07-29 -%% -Type: language -Subtag: tge -Description: Eastern Gorkha Tamang -Added: 2009-07-29 -%% -Type: language -Subtag: tgf -Description: Chalikha -Added: 2009-07-29 -%% -Type: language -Subtag: tgg -Description: Tangga -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see bjp, hrc, hrw -%% -Type: language -Subtag: tgh -Description: Tobagonian Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: tgi -Description: Lawunuia -Added: 2009-07-29 -%% -Type: language -Subtag: tgj -Description: Tagin -Added: 2012-08-12 -%% -Type: language -Subtag: tgn -Description: Tandaganon -Added: 2010-03-11 -%% -Type: language -Subtag: tgo -Description: Sudest -Added: 2009-07-29 -%% -Type: language -Subtag: tgp -Description: Tangoa -Added: 2009-07-29 -%% -Type: language -Subtag: tgq -Description: Tring -Added: 2009-07-29 -%% -Type: language -Subtag: tgr -Description: Tareng -Added: 2009-07-29 -%% -Type: language -Subtag: tgs -Description: Nume -Added: 2009-07-29 -%% -Type: language -Subtag: tgt -Description: Central Tagbanwa -Added: 2009-07-29 -%% -Type: language -Subtag: tgu -Description: Tanggu -Added: 2009-07-29 -%% -Type: language -Subtag: tgv -Description: Tingui-Boto -Added: 2009-07-29 -%% -Type: language -Subtag: tgw -Description: Tagwana Senoufo -Added: 2009-07-29 -%% -Type: language -Subtag: tgx -Description: Tagish -Added: 2009-07-29 -%% -Type: language -Subtag: tgy -Description: Togoyo -Added: 2009-07-29 -%% -Type: language -Subtag: tgz -Description: Tagalaka -Added: 2012-08-12 -%% -Type: language -Subtag: thc -Description: Tai Hang Tong -Added: 2009-07-29 -%% -Type: language -Subtag: thd -Description: Thayore -Added: 2009-07-29 -%% -Type: language -Subtag: the -Description: Chitwania Tharu -Added: 2009-07-29 -%% -Type: language -Subtag: thf -Description: Thangmi -Added: 2009-07-29 -%% -Type: language -Subtag: thh -Description: Northern Tarahumara -Added: 2009-07-29 -%% -Type: language -Subtag: thi -Description: Tai Long -Added: 2009-07-29 -%% -Type: language -Subtag: thk -Description: Tharaka -Description: Kitharaka -Added: 2009-07-29 -%% -Type: language -Subtag: thl -Description: Dangaura Tharu -Added: 2009-07-29 -%% -Type: language -Subtag: thm -Description: Aheu -Added: 2009-07-29 -%% -Type: language -Subtag: thn -Description: Thachanadan -Added: 2009-07-29 -%% -Type: language -Subtag: thp -Description: Thompson -Added: 2009-07-29 -%% -Type: language -Subtag: thq -Description: Kochila Tharu -Added: 2009-07-29 -%% -Type: language -Subtag: thr -Description: Rana Tharu -Added: 2009-07-29 -%% -Type: language -Subtag: ths -Description: Thakali -Added: 2009-07-29 -%% -Type: language -Subtag: tht -Description: Tahltan -Added: 2009-07-29 -%% -Type: language -Subtag: thu -Description: Thuri -Added: 2009-07-29 -%% -Type: language -Subtag: thv -Description: Tahaggart Tamahaq -Added: 2009-07-29 -Macrolanguage: tmh -%% -Type: language -Subtag: thw -Description: Thudam -Added: 2009-07-29 -%% -Type: language -Subtag: thx -Description: The -Added: 2009-07-29 -%% -Type: language -Subtag: thy -Description: Tha -Added: 2009-07-29 -%% -Type: language -Subtag: thz -Description: Tayart Tamajeq -Added: 2009-07-29 -Macrolanguage: tmh -%% -Type: language -Subtag: tia -Description: Tidikelt Tamazight -Added: 2009-07-29 -%% -Type: language -Subtag: tic -Description: Tira -Added: 2009-07-29 -%% -Type: language -Subtag: tid -Description: Tidong -Added: 2009-07-29 -%% -Type: language -Subtag: tie -Description: Tingal -Added: 2009-07-29 -Deprecated: 2011-08-16 -Preferred-Value: ras -%% -Type: language -Subtag: tif -Description: Tifal -Added: 2009-07-29 -%% -Type: language -Subtag: tig -Description: Tigre -Added: 2005-10-16 -%% -Type: language -Subtag: tih -Description: Timugon Murut -Added: 2009-07-29 -%% -Type: language -Subtag: tii -Description: Tiene -Added: 2009-07-29 -%% -Type: language -Subtag: tij -Description: Tilung -Added: 2009-07-29 -%% -Type: language -Subtag: tik -Description: Tikar -Added: 2009-07-29 -%% -Type: language -Subtag: til -Description: Tillamook -Added: 2009-07-29 -%% -Type: language -Subtag: tim -Description: Timbe -Added: 2009-07-29 -%% -Type: language -Subtag: tin -Description: Tindi -Added: 2009-07-29 -%% -Type: language -Subtag: tio -Description: Teop -Added: 2009-07-29 -%% -Type: language -Subtag: tip -Description: Trimuris -Added: 2009-07-29 -%% -Type: language -Subtag: tiq -Description: Tiéfo -Added: 2009-07-29 -%% -Type: language -Subtag: tis -Description: Masadiit Itneg -Added: 2009-07-29 -%% -Type: language -Subtag: tit -Description: Tinigua -Added: 2009-07-29 -%% -Type: language -Subtag: tiu -Description: Adasen -Added: 2009-07-29 -%% -Type: language -Subtag: tiv -Description: Tiv -Added: 2005-10-16 -%% -Type: language -Subtag: tiw -Description: Tiwi -Added: 2009-07-29 -%% -Type: language -Subtag: tix -Description: Southern Tiwa -Added: 2009-07-29 -%% -Type: language -Subtag: tiy -Description: Tiruray -Added: 2009-07-29 -%% -Type: language -Subtag: tiz -Description: Tai Hongjin -Added: 2009-07-29 -%% -Type: language -Subtag: tja -Description: Tajuasohn -Added: 2009-07-29 -%% -Type: language -Subtag: tjg -Description: Tunjung -Added: 2009-07-29 -%% -Type: language -Subtag: tji -Description: Northern Tujia -Added: 2009-07-29 -%% -Type: language -Subtag: tjl -Description: Tai Laing -Added: 2012-08-12 -%% -Type: language -Subtag: tjm -Description: Timucua -Added: 2009-07-29 -%% -Type: language -Subtag: tjn -Description: Tonjon -Added: 2009-07-29 -%% -Type: language -Subtag: tjo -Description: Temacine Tamazight -Added: 2009-07-29 -%% -Type: language -Subtag: tjs -Description: Southern Tujia -Added: 2009-07-29 -%% -Type: language -Subtag: tju -Description: Tjurruru -Added: 2009-07-29 -%% -Type: language -Subtag: tjw -Description: Djabwurrung -Added: 2013-09-10 -%% -Type: language -Subtag: tka -Description: Truká -Added: 2009-07-29 -%% -Type: language -Subtag: tkb -Description: Buksa -Added: 2009-07-29 -%% -Type: language -Subtag: tkd -Description: Tukudede -Added: 2009-07-29 -%% -Type: language -Subtag: tke -Description: Takwane -Added: 2009-07-29 -%% -Type: language -Subtag: tkf -Description: Tukumanféd -Added: 2009-07-29 -%% -Type: language -Subtag: tkg -Description: Tesaka Malagasy -Added: 2011-08-16 -Macrolanguage: mg -%% -Type: language -Subtag: tkk -Description: Takpa -Added: 2009-07-29 -Deprecated: 2011-08-16 -Preferred-Value: twm -%% -Type: language -Subtag: tkl -Description: Tokelau -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: tkm -Description: Takelma -Added: 2009-07-29 -%% -Type: language -Subtag: tkn -Description: Toku-No-Shima -Added: 2009-07-29 -%% -Type: language -Subtag: tkp -Description: Tikopia -Added: 2009-07-29 -%% -Type: language -Subtag: tkq -Description: Tee -Added: 2009-07-29 -%% -Type: language -Subtag: tkr -Description: Tsakhur -Added: 2009-07-29 -%% -Type: language -Subtag: tks -Description: Takestani -Added: 2009-07-29 -%% -Type: language -Subtag: tkt -Description: Kathoriya Tharu -Added: 2009-07-29 -%% -Type: language -Subtag: tku -Description: Upper Necaxa Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: tkw -Description: Teanu -Added: 2009-07-29 -%% -Type: language -Subtag: tkx -Description: Tangko -Added: 2009-07-29 -%% -Type: language -Subtag: tkz -Description: Takua -Added: 2009-07-29 -%% -Type: language -Subtag: tla -Description: Southwestern Tepehuan -Added: 2009-07-29 -%% -Type: language -Subtag: tlb -Description: Tobelo -Added: 2009-07-29 -%% -Type: language -Subtag: tlc -Description: Yecuatla Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: tld -Description: Talaud -Added: 2009-07-29 -%% -Type: language -Subtag: tlf -Description: Telefol -Added: 2009-07-29 -%% -Type: language -Subtag: tlg -Description: Tofanma -Added: 2009-07-29 -%% -Type: language -Subtag: tlh -Description: Klingon -Description: tlhIngan-Hol -Added: 2005-10-16 -%% -Type: language -Subtag: tli -Description: Tlingit -Added: 2005-10-16 -%% -Type: language -Subtag: tlj -Description: Talinga-Bwisi -Added: 2009-07-29 -%% -Type: language -Subtag: tlk -Description: Taloki -Added: 2009-07-29 -%% -Type: language -Subtag: tll -Description: Tetela -Added: 2009-07-29 -%% -Type: language -Subtag: tlm -Description: Tolomako -Added: 2009-07-29 -%% -Type: language -Subtag: tln -Description: Talondo' -Added: 2009-07-29 -%% -Type: language -Subtag: tlo -Description: Talodi -Added: 2009-07-29 -%% -Type: language -Subtag: tlp -Description: Filomena Mata-Coahuitlán Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: tlq -Description: Tai Loi -Added: 2009-07-29 -%% -Type: language -Subtag: tlr -Description: Talise -Added: 2009-07-29 -%% -Type: language -Subtag: tls -Description: Tambotalo -Added: 2009-07-29 -%% -Type: language -Subtag: tlt -Description: Teluti -Added: 2009-07-29 -%% -Type: language -Subtag: tlu -Description: Tulehu -Added: 2009-07-29 -%% -Type: language -Subtag: tlv -Description: Taliabu -Added: 2009-07-29 -%% -Type: language -Subtag: tlw -Description: South Wemale -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: weo -%% -Type: language -Subtag: tlx -Description: Khehek -Added: 2009-07-29 -%% -Type: language -Subtag: tly -Description: Talysh -Added: 2009-07-29 -%% -Type: language -Subtag: tma -Description: Tama (Chad) -Added: 2009-07-29 -%% -Type: language -Subtag: tmb -Description: Katbol -Description: Avava -Added: 2009-07-29 -%% -Type: language -Subtag: tmc -Description: Tumak -Added: 2009-07-29 -%% -Type: language -Subtag: tmd -Description: Haruai -Added: 2009-07-29 -%% -Type: language -Subtag: tme -Description: Tremembé -Added: 2009-07-29 -%% -Type: language -Subtag: tmf -Description: Toba-Maskoy -Added: 2009-07-29 -%% -Type: language -Subtag: tmg -Description: Ternateño -Added: 2009-07-29 -%% -Type: language -Subtag: tmh -Description: Tamashek -Added: 2005-10-16 -Suppress-Script: Latn -Scope: macrolanguage -%% -Type: language -Subtag: tmi -Description: Tutuba -Added: 2009-07-29 -%% -Type: language -Subtag: tmj -Description: Samarokena -Added: 2009-07-29 -%% -Type: language -Subtag: tmk -Description: Northwestern Tamang -Added: 2009-07-29 -%% -Type: language -Subtag: tml -Description: Tamnim Citak -Added: 2009-07-29 -%% -Type: language -Subtag: tmm -Description: Tai Thanh -Added: 2009-07-29 -%% -Type: language -Subtag: tmn -Description: Taman (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: tmo -Description: Temoq -Added: 2009-07-29 -%% -Type: language -Subtag: tmp -Description: Tai Mène -Added: 2009-07-29 -%% -Type: language -Subtag: tmq -Description: Tumleo -Added: 2009-07-29 -%% -Type: language -Subtag: tmr -Description: Jewish Babylonian Aramaic (ca. 200-1200 CE) -Added: 2009-07-29 -%% -Type: language -Subtag: tms -Description: Tima -Added: 2009-07-29 -%% -Type: language -Subtag: tmt -Description: Tasmate -Added: 2009-07-29 -%% -Type: language -Subtag: tmu -Description: Iau -Added: 2009-07-29 -%% -Type: language -Subtag: tmv -Description: Tembo (Motembo) -Added: 2009-07-29 -%% -Type: language -Subtag: tmw -Description: Temuan -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: tmy -Description: Tami -Added: 2009-07-29 -%% -Type: language -Subtag: tmz -Description: Tamanaku -Added: 2009-07-29 -%% -Type: language -Subtag: tna -Description: Tacana -Added: 2009-07-29 -%% -Type: language -Subtag: tnb -Description: Western Tunebo -Added: 2009-07-29 -%% -Type: language -Subtag: tnc -Description: Tanimuca-Retuarã -Added: 2009-07-29 -%% -Type: language -Subtag: tnd -Description: Angosturas Tunebo -Added: 2009-07-29 -%% -Type: language -Subtag: tne -Description: Tinoc Kallahan -Added: 2009-07-29 -%% -Type: language -Subtag: tnf -Description: Tangshewi -Added: 2009-07-29 -Deprecated: 2010-03-11 -Preferred-Value: prs -%% -Type: language -Subtag: tng -Description: Tobanga -Added: 2009-07-29 -%% -Type: language -Subtag: tnh -Description: Maiani -Added: 2009-07-29 -%% -Type: language -Subtag: tni -Description: Tandia -Added: 2009-07-29 -%% -Type: language -Subtag: tnk -Description: Kwamera -Added: 2009-07-29 -%% -Type: language -Subtag: tnl -Description: Lenakel -Added: 2009-07-29 -%% -Type: language -Subtag: tnm -Description: Tabla -Added: 2009-07-29 -%% -Type: language -Subtag: tnn -Description: North Tanna -Added: 2009-07-29 -%% -Type: language -Subtag: tno -Description: Toromono -Added: 2009-07-29 -%% -Type: language -Subtag: tnp -Description: Whitesands -Added: 2009-07-29 -%% -Type: language -Subtag: tnq -Description: Taino -Added: 2009-07-29 -%% -Type: language -Subtag: tnr -Description: Ménik -Added: 2009-07-29 -%% -Type: language -Subtag: tns -Description: Tenis -Added: 2009-07-29 -%% -Type: language -Subtag: tnt -Description: Tontemboan -Added: 2009-07-29 -%% -Type: language -Subtag: tnu -Description: Tay Khang -Added: 2009-07-29 -%% -Type: language -Subtag: tnv -Description: Tangchangya -Added: 2009-07-29 -%% -Type: language -Subtag: tnw -Description: Tonsawang -Added: 2009-07-29 -%% -Type: language -Subtag: tnx -Description: Tanema -Added: 2009-07-29 -%% -Type: language -Subtag: tny -Description: Tongwe -Added: 2009-07-29 -%% -Type: language -Subtag: tnz -Description: Tonga (Thailand) -Added: 2009-07-29 -%% -Type: language -Subtag: tob -Description: Toba -Added: 2009-07-29 -%% -Type: language -Subtag: toc -Description: Coyutla Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: tod -Description: Toma -Added: 2009-07-29 -%% -Type: language -Subtag: toe -Description: Tomedes -Added: 2009-07-29 -%% -Type: language -Subtag: tof -Description: Gizrra -Added: 2009-07-29 -%% -Type: language -Subtag: tog -Description: Tonga (Nyasa) -Added: 2005-10-16 -%% -Type: language -Subtag: toh -Description: Gitonga -Added: 2009-07-29 -%% -Type: language -Subtag: toi -Description: Tonga (Zambia) -Added: 2009-07-29 -%% -Type: language -Subtag: toj -Description: Tojolabal -Added: 2009-07-29 -%% -Type: language -Subtag: tol -Description: Tolowa -Added: 2009-07-29 -%% -Type: language -Subtag: tom -Description: Tombulu -Added: 2009-07-29 -%% -Type: language -Subtag: too -Description: Xicotepec De Juárez Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: top -Description: Papantla Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: toq -Description: Toposa -Added: 2009-07-29 -%% -Type: language -Subtag: tor -Description: Togbo-Vara Banda -Added: 2009-07-29 -%% -Type: language -Subtag: tos -Description: Highland Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: tou -Description: Tho -Added: 2009-07-29 -%% -Type: language -Subtag: tov -Description: Upper Taromi -Added: 2009-07-29 -%% -Type: language -Subtag: tow -Description: Jemez -Added: 2009-07-29 -%% -Type: language -Subtag: tox -Description: Tobian -Added: 2009-07-29 -%% -Type: language -Subtag: toy -Description: Topoiyo -Added: 2009-07-29 -%% -Type: language -Subtag: toz -Description: To -Added: 2009-07-29 -%% -Type: language -Subtag: tpa -Description: Taupota -Added: 2009-07-29 -%% -Type: language -Subtag: tpc -Description: Azoyú Me'phaa -Description: Azoyú Tlapanec -Added: 2009-07-29 -%% -Type: language -Subtag: tpe -Description: Tippera -Added: 2009-07-29 -%% -Type: language -Subtag: tpf -Description: Tarpia -Added: 2009-07-29 -%% -Type: language -Subtag: tpg -Description: Kula -Added: 2009-07-29 -%% -Type: language -Subtag: tpi -Description: Tok Pisin -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: tpj -Description: Tapieté -Added: 2009-07-29 -%% -Type: language -Subtag: tpk -Description: Tupinikin -Added: 2009-07-29 -%% -Type: language -Subtag: tpl -Description: Tlacoapa Me'phaa -Description: Tlacoapa Tlapanec -Added: 2009-07-29 -%% -Type: language -Subtag: tpm -Description: Tampulma -Added: 2009-07-29 -%% -Type: language -Subtag: tpn -Description: Tupinambá -Added: 2009-07-29 -%% -Type: language -Subtag: tpo -Description: Tai Pao -Added: 2009-07-29 -%% -Type: language -Subtag: tpp -Description: Pisaflores Tepehua -Added: 2009-07-29 -%% -Type: language -Subtag: tpq -Description: Tukpa -Added: 2009-07-29 -%% -Type: language -Subtag: tpr -Description: Tuparí -Added: 2009-07-29 -%% -Type: language -Subtag: tpt -Description: Tlachichilco Tepehua -Added: 2009-07-29 -%% -Type: language -Subtag: tpu -Description: Tampuan -Added: 2009-07-29 -%% -Type: language -Subtag: tpv -Description: Tanapag -Added: 2009-07-29 -%% -Type: language -Subtag: tpw -Description: Tupí -Added: 2009-07-29 -%% -Type: language -Subtag: tpx -Description: Acatepec Me'phaa -Description: Acatepec Tlapanec -Added: 2009-07-29 -%% -Type: language -Subtag: tpy -Description: Trumai -Added: 2009-07-29 -%% -Type: language -Subtag: tpz -Description: Tinputz -Added: 2009-07-29 -%% -Type: language -Subtag: tqb -Description: Tembé -Added: 2009-07-29 -%% -Type: language -Subtag: tql -Description: Lehali -Added: 2009-07-29 -%% -Type: language -Subtag: tqm -Description: Turumsa -Added: 2009-07-29 -%% -Type: language -Subtag: tqn -Description: Tenino -Added: 2009-07-29 -%% -Type: language -Subtag: tqo -Description: Toaripi -Added: 2009-07-29 -%% -Type: language -Subtag: tqp -Description: Tomoip -Added: 2009-07-29 -%% -Type: language -Subtag: tqq -Description: Tunni -Added: 2009-07-29 -%% -Type: language -Subtag: tqr -Description: Torona -Added: 2009-07-29 -%% -Type: language -Subtag: tqt -Description: Western Totonac -Added: 2009-07-29 -%% -Type: language -Subtag: tqu -Description: Touo -Added: 2009-07-29 -%% -Type: language -Subtag: tqw -Description: Tonkawa -Added: 2009-07-29 -%% -Type: language -Subtag: tra -Description: Tirahi -Added: 2009-07-29 -%% -Type: language -Subtag: trb -Description: Terebu -Added: 2009-07-29 -%% -Type: language -Subtag: trc -Description: Copala Triqui -Added: 2009-07-29 -%% -Type: language -Subtag: trd -Description: Turi -Added: 2009-07-29 -%% -Type: language -Subtag: tre -Description: East Tarangan -Added: 2009-07-29 -%% -Type: language -Subtag: trf -Description: Trinidadian Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: trg -Description: Lishán Didán -Added: 2009-07-29 -%% -Type: language -Subtag: trh -Description: Turaka -Added: 2009-07-29 -%% -Type: language -Subtag: tri -Description: Trió -Added: 2009-07-29 -%% -Type: language -Subtag: trj -Description: Toram -Added: 2009-07-29 -%% -Type: language -Subtag: trk -Description: Turkic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: trl -Description: Traveller Scottish -Added: 2009-07-29 -%% -Type: language -Subtag: trm -Description: Tregami -Added: 2009-07-29 -%% -Type: language -Subtag: trn -Description: Trinitario -Added: 2009-07-29 -%% -Type: language -Subtag: tro -Description: Tarao Naga -Added: 2009-07-29 -%% -Type: language -Subtag: trp -Description: Kok Borok -Added: 2009-07-29 -%% -Type: language -Subtag: trq -Description: San Martín Itunyoso Triqui -Added: 2009-07-29 -%% -Type: language -Subtag: trr -Description: Taushiro -Added: 2009-07-29 -%% -Type: language -Subtag: trs -Description: Chicahuaxtla Triqui -Added: 2009-07-29 -%% -Type: language -Subtag: trt -Description: Tunggare -Added: 2009-07-29 -%% -Type: language -Subtag: tru -Description: Turoyo -Description: Surayt -Added: 2009-07-29 -%% -Type: language -Subtag: trv -Description: Taroko -Added: 2009-07-29 -%% -Type: language -Subtag: trw -Description: Torwali -Added: 2009-07-29 -%% -Type: language -Subtag: trx -Description: Tringgus-Sembaan Bidayuh -Added: 2009-07-29 -%% -Type: language -Subtag: try -Description: Turung -Added: 2009-07-29 -%% -Type: language -Subtag: trz -Description: Torá -Added: 2009-07-29 -%% -Type: language -Subtag: tsa -Description: Tsaangi -Added: 2009-07-29 -%% -Type: language -Subtag: tsb -Description: Tsamai -Added: 2009-07-29 -%% -Type: language -Subtag: tsc -Description: Tswa -Added: 2009-07-29 -%% -Type: language -Subtag: tsd -Description: Tsakonian -Added: 2009-07-29 -%% -Type: language -Subtag: tse -Description: Tunisian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: tsf -Description: Southwestern Tamang -Added: 2009-07-29 -%% -Type: language -Subtag: tsg -Description: Tausug -Added: 2009-07-29 -%% -Type: language -Subtag: tsh -Description: Tsuvan -Added: 2009-07-29 -%% -Type: language -Subtag: tsi -Description: Tsimshian -Added: 2005-10-16 -%% -Type: language -Subtag: tsj -Description: Tshangla -Added: 2009-07-29 -%% -Type: language -Subtag: tsk -Description: Tseku -Added: 2009-07-29 -%% -Type: language -Subtag: tsl -Description: Ts'ün-Lao -Added: 2009-07-29 -%% -Type: language -Subtag: tsm -Description: Turkish Sign Language -Description: Türk İşaret Dili -Added: 2009-07-29 -%% -Type: language -Subtag: tsp -Description: Northern Toussian -Added: 2009-07-29 -%% -Type: language -Subtag: tsq -Description: Thai Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: tsr -Description: Akei -Added: 2009-07-29 -%% -Type: language -Subtag: tss -Description: Taiwan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: tst -Description: Tondi Songway Kiini -Added: 2011-08-16 -%% -Type: language -Subtag: tsu -Description: Tsou -Added: 2009-07-29 -%% -Type: language -Subtag: tsv -Description: Tsogo -Added: 2009-07-29 -%% -Type: language -Subtag: tsw -Description: Tsishingini -Added: 2009-07-29 -%% -Type: language -Subtag: tsx -Description: Mubami -Added: 2009-07-29 -%% -Type: language -Subtag: tsy -Description: Tebul Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: tsz -Description: Purepecha -Added: 2009-07-29 -%% -Type: language -Subtag: tta -Description: Tutelo -Added: 2009-07-29 -%% -Type: language -Subtag: ttb -Description: Gaa -Added: 2009-07-29 -%% -Type: language -Subtag: ttc -Description: Tektiteko -Added: 2009-07-29 -%% -Type: language -Subtag: ttd -Description: Tauade -Added: 2009-07-29 -%% -Type: language -Subtag: tte -Description: Bwanabwana -Added: 2009-07-29 -%% -Type: language -Subtag: ttf -Description: Tuotomb -Added: 2009-07-29 -%% -Type: language -Subtag: ttg -Description: Tutong -Added: 2009-07-29 -%% -Type: language -Subtag: tth -Description: Upper Ta'oih -Added: 2009-07-29 -%% -Type: language -Subtag: tti -Description: Tobati -Added: 2009-07-29 -%% -Type: language -Subtag: ttj -Description: Tooro -Added: 2009-07-29 -%% -Type: language -Subtag: ttk -Description: Totoro -Added: 2009-07-29 -%% -Type: language -Subtag: ttl -Description: Totela -Added: 2009-07-29 -%% -Type: language -Subtag: ttm -Description: Northern Tutchone -Added: 2009-07-29 -%% -Type: language -Subtag: ttn -Description: Towei -Added: 2009-07-29 -%% -Type: language -Subtag: tto -Description: Lower Ta'oih -Added: 2009-07-29 -%% -Type: language -Subtag: ttp -Description: Tombelala -Added: 2009-07-29 -%% -Type: language -Subtag: ttq -Description: Tawallammat Tamajaq -Added: 2009-07-29 -Macrolanguage: tmh -%% -Type: language -Subtag: ttr -Description: Tera -Added: 2009-07-29 -%% -Type: language -Subtag: tts -Description: Northeastern Thai -Added: 2009-07-29 -%% -Type: language -Subtag: ttt -Description: Muslim Tat -Added: 2009-07-29 -%% -Type: language -Subtag: ttu -Description: Torau -Added: 2009-07-29 -%% -Type: language -Subtag: ttv -Description: Titan -Added: 2009-07-29 -%% -Type: language -Subtag: ttw -Description: Long Wat -Added: 2009-07-29 -%% -Type: language -Subtag: tty -Description: Sikaritai -Added: 2009-07-29 -%% -Type: language -Subtag: ttz -Description: Tsum -Added: 2009-07-29 -%% -Type: language -Subtag: tua -Description: Wiarumus -Added: 2009-07-29 -%% -Type: language -Subtag: tub -Description: Tübatulabal -Added: 2009-07-29 -%% -Type: language -Subtag: tuc -Description: Mutu -Added: 2009-07-29 -%% -Type: language -Subtag: tud -Description: Tuxá -Added: 2009-07-29 -%% -Type: language -Subtag: tue -Description: Tuyuca -Added: 2009-07-29 -%% -Type: language -Subtag: tuf -Description: Central Tunebo -Added: 2009-07-29 -%% -Type: language -Subtag: tug -Description: Tunia -Added: 2009-07-29 -%% -Type: language -Subtag: tuh -Description: Taulil -Added: 2009-07-29 -%% -Type: language -Subtag: tui -Description: Tupuri -Added: 2009-07-29 -%% -Type: language -Subtag: tuj -Description: Tugutil -Added: 2009-07-29 -%% -Type: language -Subtag: tul -Description: Tula -Added: 2009-07-29 -%% -Type: language -Subtag: tum -Description: Tumbuka -Added: 2005-10-16 -%% -Type: language -Subtag: tun -Description: Tunica -Added: 2009-07-29 -%% -Type: language -Subtag: tuo -Description: Tucano -Added: 2009-07-29 -%% -Type: language -Subtag: tup -Description: Tupi languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: tuq -Description: Tedaga -Added: 2009-07-29 -%% -Type: language -Subtag: tus -Description: Tuscarora -Added: 2009-07-29 -%% -Type: language -Subtag: tut -Description: Altaic languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: tuu -Description: Tututni -Added: 2009-07-29 -%% -Type: language -Subtag: tuv -Description: Turkana -Added: 2009-07-29 -%% -Type: language -Subtag: tuw -Description: Tungus languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: tux -Description: Tuxináwa -Added: 2009-07-29 -%% -Type: language -Subtag: tuy -Description: Tugen -Added: 2009-07-29 -Macrolanguage: kln -%% -Type: language -Subtag: tuz -Description: Turka -Added: 2009-07-29 -%% -Type: language -Subtag: tva -Description: Vaghua -Added: 2009-07-29 -%% -Type: language -Subtag: tvd -Description: Tsuvadi -Added: 2009-07-29 -%% -Type: language -Subtag: tve -Description: Te'un -Added: 2009-07-29 -%% -Type: language -Subtag: tvk -Description: Southeast Ambrym -Added: 2009-07-29 -%% -Type: language -Subtag: tvl -Description: Tuvalu -Added: 2005-10-16 -Suppress-Script: Latn -%% -Type: language -Subtag: tvm -Description: Tela-Masbuar -Added: 2009-07-29 -%% -Type: language -Subtag: tvn -Description: Tavoyan -Added: 2009-07-29 -%% -Type: language -Subtag: tvo -Description: Tidore -Added: 2009-07-29 -%% -Type: language -Subtag: tvs -Description: Taveta -Added: 2009-07-29 -%% -Type: language -Subtag: tvt -Description: Tutsa Naga -Added: 2009-07-29 -%% -Type: language -Subtag: tvu -Description: Tunen -Added: 2012-08-12 -%% -Type: language -Subtag: tvw -Description: Sedoa -Added: 2009-07-29 -%% -Type: language -Subtag: tvy -Description: Timor Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: twa -Description: Twana -Added: 2009-07-29 -%% -Type: language -Subtag: twb -Description: Western Tawbuid -Added: 2009-07-29 -%% -Type: language -Subtag: twc -Description: Teshenawa -Added: 2009-07-29 -%% -Type: language -Subtag: twd -Description: Twents -Added: 2009-07-29 -%% -Type: language -Subtag: twe -Description: Tewa (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: twf -Description: Northern Tiwa -Added: 2009-07-29 -%% -Type: language -Subtag: twg -Description: Tereweng -Added: 2009-07-29 -%% -Type: language -Subtag: twh -Description: Tai Dón -Added: 2009-07-29 -%% -Type: language -Subtag: twl -Description: Tawara -Added: 2009-07-29 -%% -Type: language -Subtag: twm -Description: Tawang Monpa -Added: 2009-07-29 -%% -Type: language -Subtag: twn -Description: Twendi -Added: 2009-07-29 -%% -Type: language -Subtag: two -Description: Tswapong -Added: 2009-07-29 -%% -Type: language -Subtag: twp -Description: Ere -Added: 2009-07-29 -%% -Type: language -Subtag: twq -Description: Tasawaq -Added: 2009-07-29 -%% -Type: language -Subtag: twr -Description: Southwestern Tarahumara -Added: 2009-07-29 -%% -Type: language -Subtag: twt -Description: Turiwára -Added: 2009-07-29 -%% -Type: language -Subtag: twu -Description: Termanu -Added: 2009-07-29 -%% -Type: language -Subtag: tww -Description: Tuwari -Added: 2009-07-29 -%% -Type: language -Subtag: twx -Description: Tewe -Added: 2009-07-29 -%% -Type: language -Subtag: twy -Description: Tawoyan -Added: 2009-07-29 -%% -Type: language -Subtag: txa -Description: Tombonuo -Added: 2009-07-29 -%% -Type: language -Subtag: txb -Description: Tokharian B -Added: 2009-07-29 -%% -Type: language -Subtag: txc -Description: Tsetsaut -Added: 2009-07-29 -%% -Type: language -Subtag: txe -Description: Totoli -Added: 2009-07-29 -%% -Type: language -Subtag: txg -Description: Tangut -Added: 2009-07-29 -%% -Type: language -Subtag: txh -Description: Thracian -Added: 2009-07-29 -%% -Type: language -Subtag: txi -Description: Ikpeng -Added: 2009-07-29 -%% -Type: language -Subtag: txm -Description: Tomini -Added: 2009-07-29 -%% -Type: language -Subtag: txn -Description: West Tarangan -Added: 2009-07-29 -%% -Type: language -Subtag: txo -Description: Toto -Added: 2009-07-29 -%% -Type: language -Subtag: txq -Description: Tii -Added: 2009-07-29 -%% -Type: language -Subtag: txr -Description: Tartessian -Added: 2009-07-29 -%% -Type: language -Subtag: txs -Description: Tonsea -Added: 2009-07-29 -%% -Type: language -Subtag: txt -Description: Citak -Added: 2009-07-29 -%% -Type: language -Subtag: txu -Description: Kayapó -Added: 2009-07-29 -%% -Type: language -Subtag: txx -Description: Tatana -Added: 2009-07-29 -%% -Type: language -Subtag: txy -Description: Tanosy Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: tya -Description: Tauya -Added: 2009-07-29 -%% -Type: language -Subtag: tye -Description: Kyanga -Added: 2009-07-29 -%% -Type: language -Subtag: tyh -Description: O'du -Added: 2009-07-29 -%% -Type: language -Subtag: tyi -Description: Teke-Tsaayi -Added: 2009-07-29 -%% -Type: language -Subtag: tyj -Description: Tai Do -Added: 2009-07-29 -%% -Type: language -Subtag: tyl -Description: Thu Lao -Added: 2009-07-29 -%% -Type: language -Subtag: tyn -Description: Kombai -Added: 2009-07-29 -%% -Type: language -Subtag: typ -Description: Thaypan -Added: 2009-07-29 -%% -Type: language -Subtag: tyr -Description: Tai Daeng -Added: 2009-07-29 -%% -Type: language -Subtag: tys -Description: Tày Sa Pa -Added: 2009-07-29 -%% -Type: language -Subtag: tyt -Description: Tày Tac -Added: 2009-07-29 -%% -Type: language -Subtag: tyu -Description: Kua -Added: 2009-07-29 -%% -Type: language -Subtag: tyv -Description: Tuvinian -Added: 2005-10-16 -%% -Type: language -Subtag: tyx -Description: Teke-Tyee -Added: 2009-07-29 -%% -Type: language -Subtag: tyz -Description: Tày -Added: 2009-07-29 -%% -Type: language -Subtag: tza -Description: Tanzanian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: tzh -Description: Tzeltal -Added: 2009-07-29 -%% -Type: language -Subtag: tzj -Description: Tz'utujil -Added: 2009-07-29 -%% -Type: language -Subtag: tzl -Description: Talossan -Added: 2013-09-10 -%% -Type: language -Subtag: tzm -Description: Central Atlas Tamazight -Added: 2009-07-29 -%% -Type: language -Subtag: tzn -Description: Tugun -Added: 2009-07-29 -%% -Type: language -Subtag: tzo -Description: Tzotzil -Added: 2009-07-29 -%% -Type: language -Subtag: tzx -Description: Tabriak -Added: 2009-07-29 -%% -Type: language -Subtag: uam -Description: Uamué -Added: 2009-07-29 -%% -Type: language -Subtag: uan -Description: Kuan -Added: 2009-07-29 -%% -Type: language -Subtag: uar -Description: Tairuma -Added: 2009-07-29 -%% -Type: language -Subtag: uba -Description: Ubang -Added: 2009-07-29 -%% -Type: language -Subtag: ubi -Description: Ubi -Added: 2009-07-29 -%% -Type: language -Subtag: ubl -Description: Buhi'non Bikol -Added: 2010-03-11 -Macrolanguage: bik -%% -Type: language -Subtag: ubr -Description: Ubir -Added: 2009-07-29 -%% -Type: language -Subtag: ubu -Description: Umbu-Ungu -Added: 2009-07-29 -%% -Type: language -Subtag: uby -Description: Ubykh -Added: 2009-07-29 -%% -Type: language -Subtag: uda -Description: Uda -Added: 2009-07-29 -%% -Type: language -Subtag: ude -Description: Udihe -Added: 2009-07-29 -%% -Type: language -Subtag: udg -Description: Muduga -Added: 2009-07-29 -%% -Type: language -Subtag: udi -Description: Udi -Added: 2009-07-29 -%% -Type: language -Subtag: udj -Description: Ujir -Added: 2009-07-29 -%% -Type: language -Subtag: udl -Description: Wuzlam -Added: 2009-07-29 -%% -Type: language -Subtag: udm -Description: Udmurt -Added: 2005-10-16 -%% -Type: language -Subtag: udu -Description: Uduk -Added: 2009-07-29 -%% -Type: language -Subtag: ues -Description: Kioko -Added: 2009-07-29 -%% -Type: language -Subtag: ufi -Description: Ufim -Added: 2009-07-29 -%% -Type: language -Subtag: uga -Description: Ugaritic -Added: 2005-10-16 -%% -Type: language -Subtag: ugb -Description: Kuku-Ugbanh -Added: 2009-07-29 -%% -Type: language -Subtag: uge -Description: Ughele -Added: 2009-07-29 -%% -Type: language -Subtag: ugn -Description: Ugandan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: ugo -Description: Ugong -Added: 2009-07-29 -%% -Type: language -Subtag: ugy -Description: Uruguayan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: uha -Description: Uhami -Added: 2009-07-29 -%% -Type: language -Subtag: uhn -Description: Damal -Added: 2009-07-29 -%% -Type: language -Subtag: uis -Description: Uisai -Added: 2009-07-29 -%% -Type: language -Subtag: uiv -Description: Iyive -Added: 2009-07-29 -%% -Type: language -Subtag: uji -Description: Tanjijili -Added: 2009-07-29 -%% -Type: language -Subtag: uka -Description: Kaburi -Added: 2009-07-29 -%% -Type: language -Subtag: ukg -Description: Ukuriguma -Added: 2009-07-29 -%% -Type: language -Subtag: ukh -Description: Ukhwejo -Added: 2009-07-29 -%% -Type: language -Subtag: ukl -Description: Ukrainian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: ukp -Description: Ukpe-Bayobiri -Added: 2009-07-29 -%% -Type: language -Subtag: ukq -Description: Ukwa -Added: 2009-07-29 -%% -Type: language -Subtag: uks -Description: Urubú-Kaapor Sign Language -Description: Kaapor Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: uku -Description: Ukue -Added: 2009-07-29 -%% -Type: language -Subtag: ukw -Description: Ukwuani-Aboh-Ndoni -Added: 2009-07-29 -%% -Type: language -Subtag: uky -Description: Kuuk-Yak -Added: 2012-08-12 -%% -Type: language -Subtag: ula -Description: Fungwa -Added: 2009-07-29 -%% -Type: language -Subtag: ulb -Description: Ulukwumi -Added: 2009-07-29 -%% -Type: language -Subtag: ulc -Description: Ulch -Added: 2009-07-29 -%% -Type: language -Subtag: ule -Description: Lule -Added: 2013-09-10 -%% -Type: language -Subtag: ulf -Description: Usku -Description: Afra -Added: 2009-07-29 -%% -Type: language -Subtag: uli -Description: Ulithian -Added: 2009-07-29 -%% -Type: language -Subtag: ulk -Description: Meriam -Added: 2009-07-29 -%% -Type: language -Subtag: ull -Description: Ullatan -Added: 2009-07-29 -%% -Type: language -Subtag: ulm -Description: Ulumanda' -Added: 2009-07-29 -%% -Type: language -Subtag: uln -Description: Unserdeutsch -Added: 2009-07-29 -%% -Type: language -Subtag: ulu -Description: Uma' Lung -Added: 2009-07-29 -%% -Type: language -Subtag: ulw -Description: Ulwa -Added: 2010-03-11 -%% -Type: language -Subtag: uma -Description: Umatilla -Added: 2009-07-29 -%% -Type: language -Subtag: umb -Description: Umbundu -Added: 2005-10-16 -%% -Type: language -Subtag: umc -Description: Marrucinian -Added: 2009-07-29 -%% -Type: language -Subtag: umd -Description: Umbindhamu -Added: 2009-07-29 -%% -Type: language -Subtag: umg -Description: Umbuygamu -Added: 2009-07-29 -%% -Type: language -Subtag: umi -Description: Ukit -Added: 2009-07-29 -%% -Type: language -Subtag: umm -Description: Umon -Added: 2009-07-29 -%% -Type: language -Subtag: umn -Description: Makyan Naga -Added: 2009-07-29 -%% -Type: language -Subtag: umo -Description: Umotína -Added: 2009-07-29 -%% -Type: language -Subtag: ump -Description: Umpila -Added: 2009-07-29 -%% -Type: language -Subtag: umr -Description: Umbugarla -Added: 2009-07-29 -%% -Type: language -Subtag: ums -Description: Pendau -Added: 2009-07-29 -%% -Type: language -Subtag: umu -Description: Munsee -Added: 2009-07-29 -Macrolanguage: del -%% -Type: language -Subtag: una -Description: North Watut -Added: 2009-07-29 -%% -Type: language -Subtag: und -Description: Undetermined -Added: 2005-10-16 -Scope: special -%% -Type: language -Subtag: une -Description: Uneme -Added: 2009-07-29 -%% -Type: language -Subtag: ung -Description: Ngarinyin -Added: 2009-07-29 -%% -Type: language -Subtag: unk -Description: Enawené-Nawé -Added: 2009-07-29 -%% -Type: language -Subtag: unm -Description: Unami -Added: 2009-07-29 -Macrolanguage: del -%% -Type: language -Subtag: unn -Description: Kurnai -Added: 2013-09-10 -%% -Type: language -Subtag: unp -Description: Worora -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see wro, xgu -%% -Type: language -Subtag: unr -Description: Mundari -Added: 2009-07-29 -%% -Type: language -Subtag: unu -Description: Unubahe -Added: 2013-09-10 -%% -Type: language -Subtag: unx -Description: Munda -Added: 2009-07-29 -%% -Type: language -Subtag: unz -Description: Unde Kaili -Added: 2009-07-29 -%% -Type: language -Subtag: uok -Description: Uokha -Added: 2009-07-29 -%% -Type: language -Subtag: upi -Description: Umeda -Added: 2009-07-29 -%% -Type: language -Subtag: upv -Description: Uripiv-Wala-Rano-Atchin -Added: 2009-07-29 -%% -Type: language -Subtag: ura -Description: Urarina -Added: 2009-07-29 -%% -Type: language -Subtag: urb -Description: Urubú-Kaapor -Description: Kaapor -Added: 2009-07-29 -%% -Type: language -Subtag: urc -Description: Urningangg -Added: 2009-07-29 -%% -Type: language -Subtag: ure -Description: Uru -Added: 2009-07-29 -%% -Type: language -Subtag: urf -Description: Uradhi -Added: 2009-07-29 -%% -Type: language -Subtag: urg -Description: Urigina -Added: 2009-07-29 -%% -Type: language -Subtag: urh -Description: Urhobo -Added: 2009-07-29 -%% -Type: language -Subtag: uri -Description: Urim -Added: 2009-07-29 -%% -Type: language -Subtag: urj -Description: Uralic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: urk -Description: Urak Lawoi' -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: url -Description: Urali -Added: 2009-07-29 -%% -Type: language -Subtag: urm -Description: Urapmin -Added: 2009-07-29 -%% -Type: language -Subtag: urn -Description: Uruangnirin -Added: 2009-07-29 -%% -Type: language -Subtag: uro -Description: Ura (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: urp -Description: Uru-Pa-In -Added: 2009-07-29 -%% -Type: language -Subtag: urr -Description: Lehalurup -Description: Löyöp -Added: 2009-07-29 -%% -Type: language -Subtag: urt -Description: Urat -Added: 2009-07-29 -%% -Type: language -Subtag: uru -Description: Urumi -Added: 2009-07-29 -%% -Type: language -Subtag: urv -Description: Uruava -Added: 2009-07-29 -%% -Type: language -Subtag: urw -Description: Sop -Added: 2009-07-29 -%% -Type: language -Subtag: urx -Description: Urimo -Added: 2009-07-29 -%% -Type: language -Subtag: ury -Description: Orya -Added: 2009-07-29 -%% -Type: language -Subtag: urz -Description: Uru-Eu-Wau-Wau -Added: 2009-07-29 -%% -Type: language -Subtag: usa -Description: Usarufa -Added: 2009-07-29 -%% -Type: language -Subtag: ush -Description: Ushojo -Added: 2009-07-29 -%% -Type: language -Subtag: usi -Description: Usui -Added: 2009-07-29 -%% -Type: language -Subtag: usk -Description: Usaghade -Added: 2009-07-29 -%% -Type: language -Subtag: usp -Description: Uspanteco -Added: 2009-07-29 -%% -Type: language -Subtag: usu -Description: Uya -Added: 2009-07-29 -%% -Type: language -Subtag: uta -Description: Otank -Added: 2009-07-29 -%% -Type: language -Subtag: ute -Description: Ute-Southern Paiute -Added: 2009-07-29 -%% -Type: language -Subtag: utp -Description: Amba (Solomon Islands) -Added: 2009-07-29 -%% -Type: language -Subtag: utr -Description: Etulo -Added: 2009-07-29 -%% -Type: language -Subtag: utu -Description: Utu -Added: 2009-07-29 -%% -Type: language -Subtag: uum -Description: Urum -Added: 2009-07-29 -%% -Type: language -Subtag: uun -Description: Kulon-Pazeh -Added: 2009-07-29 -%% -Type: language -Subtag: uur -Description: Ura (Vanuatu) -Added: 2009-07-29 -%% -Type: language -Subtag: uuu -Description: U -Added: 2009-07-29 -%% -Type: language -Subtag: uve -Description: West Uvean -Description: Fagauvea -Added: 2009-07-29 -%% -Type: language -Subtag: uvh -Description: Uri -Added: 2009-07-29 -%% -Type: language -Subtag: uvl -Description: Lote -Added: 2009-07-29 -%% -Type: language -Subtag: uwa -Description: Kuku-Uwanh -Added: 2009-07-29 -%% -Type: language -Subtag: uya -Description: Doko-Uyanga -Added: 2009-07-29 -%% -Type: language -Subtag: uzn -Description: Northern Uzbek -Added: 2009-07-29 -Macrolanguage: uz -%% -Type: language -Subtag: uzs -Description: Southern Uzbek -Added: 2009-07-29 -Macrolanguage: uz -%% -Type: language -Subtag: vaa -Description: Vaagri Booli -Added: 2009-07-29 -%% -Type: language -Subtag: vae -Description: Vale -Added: 2009-07-29 -%% -Type: language -Subtag: vaf -Description: Vafsi -Added: 2009-07-29 -%% -Type: language -Subtag: vag -Description: Vagla -Added: 2009-07-29 -%% -Type: language -Subtag: vah -Description: Varhadi-Nagpuri -Added: 2009-07-29 -%% -Type: language -Subtag: vai -Description: Vai -Added: 2005-10-16 -%% -Type: language -Subtag: vaj -Description: Vasekela Bushman -Added: 2009-07-29 -%% -Type: language -Subtag: val -Description: Vehes -Added: 2009-07-29 -%% -Type: language -Subtag: vam -Description: Vanimo -Added: 2009-07-29 -%% -Type: language -Subtag: van -Description: Valman -Added: 2009-07-29 -%% -Type: language -Subtag: vao -Description: Vao -Added: 2009-07-29 -%% -Type: language -Subtag: vap -Description: Vaiphei -Added: 2009-07-29 -%% -Type: language -Subtag: var -Description: Huarijio -Added: 2009-07-29 -%% -Type: language -Subtag: vas -Description: Vasavi -Added: 2009-07-29 -%% -Type: language -Subtag: vau -Description: Vanuma -Added: 2009-07-29 -%% -Type: language -Subtag: vav -Description: Varli -Added: 2009-07-29 -%% -Type: language -Subtag: vay -Description: Wayu -Added: 2009-07-29 -%% -Type: language -Subtag: vbb -Description: Southeast Babar -Added: 2009-07-29 -%% -Type: language -Subtag: vbk -Description: Southwestern Bontok -Added: 2010-03-11 -Macrolanguage: bnc -%% -Type: language -Subtag: vec -Description: Venetian -Added: 2009-07-29 -%% -Type: language -Subtag: ved -Description: Veddah -Added: 2009-07-29 -%% -Type: language -Subtag: vel -Description: Veluws -Added: 2009-07-29 -%% -Type: language -Subtag: vem -Description: Vemgo-Mabas -Added: 2009-07-29 -%% -Type: language -Subtag: veo -Description: Ventureño -Added: 2009-07-29 -%% -Type: language -Subtag: vep -Description: Veps -Added: 2009-07-29 -%% -Type: language -Subtag: ver -Description: Mom Jango -Added: 2009-07-29 -%% -Type: language -Subtag: vgr -Description: Vaghri -Added: 2009-07-29 -%% -Type: language -Subtag: vgt -Description: Vlaamse Gebarentaal -Description: Flemish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: vic -Description: Virgin Islands Creole English -Added: 2009-07-29 -%% -Type: language -Subtag: vid -Description: Vidunda -Added: 2009-07-29 -%% -Type: language -Subtag: vif -Description: Vili -Added: 2009-07-29 -%% -Type: language -Subtag: vig -Description: Viemo -Added: 2009-07-29 -%% -Type: language -Subtag: vil -Description: Vilela -Added: 2009-07-29 -%% -Type: language -Subtag: vin -Description: Vinza -Added: 2009-07-29 -%% -Type: language -Subtag: vis -Description: Vishavan -Added: 2009-07-29 -%% -Type: language -Subtag: vit -Description: Viti -Added: 2009-07-29 -%% -Type: language -Subtag: viv -Description: Iduna -Added: 2009-07-29 -%% -Type: language -Subtag: vka -Description: Kariyarra -Added: 2009-07-29 -%% -Type: language -Subtag: vki -Description: Ija-Zuba -Added: 2009-07-29 -%% -Type: language -Subtag: vkj -Description: Kujarge -Added: 2009-07-29 -%% -Type: language -Subtag: vkk -Description: Kaur -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: vkl -Description: Kulisusu -Added: 2009-07-29 -%% -Type: language -Subtag: vkm -Description: Kamakan -Added: 2009-07-29 -%% -Type: language -Subtag: vko -Description: Kodeoha -Added: 2009-07-29 -%% -Type: language -Subtag: vkp -Description: Korlai Creole Portuguese -Added: 2009-07-29 -%% -Type: language -Subtag: vkt -Description: Tenggarong Kutai Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: vku -Description: Kurrama -Added: 2009-07-29 -%% -Type: language -Subtag: vlp -Description: Valpei -Added: 2009-07-29 -%% -Type: language -Subtag: vls -Description: Vlaams -Added: 2009-07-29 -%% -Type: language -Subtag: vma -Description: Martuyhunira -Added: 2009-07-29 -%% -Type: language -Subtag: vmb -Description: Barbaram -Added: 2009-07-29 -%% -Type: language -Subtag: vmc -Description: Juxtlahuaca Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: vmd -Description: Mudu Koraga -Added: 2009-07-29 -%% -Type: language -Subtag: vme -Description: East Masela -Added: 2009-07-29 -%% -Type: language -Subtag: vmf -Description: Mainfränkisch -Added: 2009-07-29 -%% -Type: language -Subtag: vmg -Description: Lungalunga -Added: 2009-07-29 -Comments: see also bxf -%% -Type: language -Subtag: vmh -Description: Maraghei -Added: 2009-07-29 -%% -Type: language -Subtag: vmi -Description: Miwa -Added: 2009-07-29 -%% -Type: language -Subtag: vmj -Description: Ixtayutla Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: vmk -Description: Makhuwa-Shirima -Added: 2009-07-29 -%% -Type: language -Subtag: vml -Description: Malgana -Added: 2009-07-29 -%% -Type: language -Subtag: vmm -Description: Mitlatongo Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: vmp -Description: Soyaltepec Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: vmq -Description: Soyaltepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: vmr -Description: Marenje -Added: 2009-07-29 -%% -Type: language -Subtag: vms -Description: Moksela -Added: 2009-07-29 -%% -Type: language -Subtag: vmu -Description: Muluridyi -Added: 2009-07-29 -%% -Type: language -Subtag: vmv -Description: Valley Maidu -Added: 2009-07-29 -%% -Type: language -Subtag: vmw -Description: Makhuwa -Added: 2009-07-29 -%% -Type: language -Subtag: vmx -Description: Tamazola Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: vmy -Description: Ayautla Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: vmz -Description: Mazatlán Mazatec -Added: 2009-07-29 -%% -Type: language -Subtag: vnk -Description: Vano -Description: Lovono -Added: 2009-07-29 -%% -Type: language -Subtag: vnm -Description: Vinmavis -Description: Neve'ei -Added: 2009-07-29 -%% -Type: language -Subtag: vnp -Description: Vunapu -Added: 2009-07-29 -%% -Type: language -Subtag: vor -Description: Voro -Added: 2009-07-29 -%% -Type: language -Subtag: vot -Description: Votic -Added: 2005-10-16 -%% -Type: language -Subtag: vra -Description: Vera'a -Added: 2009-07-29 -%% -Type: language -Subtag: vro -Description: Võro -Added: 2009-07-29 -Macrolanguage: et -%% -Type: language -Subtag: vrs -Description: Varisi -Added: 2009-07-29 -%% -Type: language -Subtag: vrt -Description: Burmbar -Description: Banam Bay -Added: 2009-07-29 -%% -Type: language -Subtag: vsi -Description: Moldova Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: vsl -Description: Venezuelan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: vsv -Description: Valencian Sign Language -Description: Llengua de signes valenciana -Added: 2009-07-29 -%% -Type: language -Subtag: vto -Description: Vitou -Added: 2009-07-29 -%% -Type: language -Subtag: vum -Description: Vumbu -Added: 2009-07-29 -%% -Type: language -Subtag: vun -Description: Vunjo -Added: 2009-07-29 -%% -Type: language -Subtag: vut -Description: Vute -Added: 2009-07-29 -%% -Type: language -Subtag: vwa -Description: Awa (China) -Added: 2009-07-29 -%% -Type: language -Subtag: waa -Description: Walla Walla -Added: 2009-07-29 -%% -Type: language -Subtag: wab -Description: Wab -Added: 2009-07-29 -%% -Type: language -Subtag: wac -Description: Wasco-Wishram -Added: 2009-07-29 -%% -Type: language -Subtag: wad -Description: Wandamen -Added: 2009-07-29 -%% -Type: language -Subtag: wae -Description: Walser -Added: 2009-07-29 -%% -Type: language -Subtag: waf -Description: Wakoná -Added: 2009-07-29 -%% -Type: language -Subtag: wag -Description: Wa'ema -Added: 2009-07-29 -%% -Type: language -Subtag: wah -Description: Watubela -Added: 2009-07-29 -%% -Type: language -Subtag: wai -Description: Wares -Added: 2009-07-29 -%% -Type: language -Subtag: waj -Description: Waffa -Added: 2009-07-29 -%% -Type: language -Subtag: wak -Description: Wakashan languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: wal -Description: Wolaytta -Description: Wolaitta -Added: 2005-10-16 -%% -Type: language -Subtag: wam -Description: Wampanoag -Added: 2009-07-29 -%% -Type: language -Subtag: wan -Description: Wan -Added: 2009-07-29 -%% -Type: language -Subtag: wao -Description: Wappo -Added: 2009-07-29 -%% -Type: language -Subtag: wap -Description: Wapishana -Added: 2009-07-29 -%% -Type: language -Subtag: waq -Description: Wageman -Added: 2009-07-29 -%% -Type: language -Subtag: war -Description: Waray (Philippines) -Added: 2005-10-16 -%% -Type: language -Subtag: was -Description: Washo -Added: 2005-10-16 -%% -Type: language -Subtag: wat -Description: Kaninuwa -Added: 2009-07-29 -%% -Type: language -Subtag: wau -Description: Waurá -Added: 2009-07-29 -%% -Type: language -Subtag: wav -Description: Waka -Added: 2009-07-29 -%% -Type: language -Subtag: waw -Description: Waiwai -Added: 2009-07-29 -%% -Type: language -Subtag: wax -Description: Watam -Description: Marangis -Added: 2009-07-29 -%% -Type: language -Subtag: way -Description: Wayana -Added: 2009-07-29 -%% -Type: language -Subtag: waz -Description: Wampur -Added: 2009-07-29 -%% -Type: language -Subtag: wba -Description: Warao -Added: 2009-07-29 -%% -Type: language -Subtag: wbb -Description: Wabo -Added: 2009-07-29 -%% -Type: language -Subtag: wbe -Description: Waritai -Added: 2009-07-29 -%% -Type: language -Subtag: wbf -Description: Wara -Added: 2009-07-29 -Comments: see also pnl -%% -Type: language -Subtag: wbh -Description: Wanda -Added: 2009-07-29 -%% -Type: language -Subtag: wbi -Description: Vwanji -Added: 2009-07-29 -%% -Type: language -Subtag: wbj -Description: Alagwa -Added: 2009-07-29 -%% -Type: language -Subtag: wbk -Description: Waigali -Added: 2009-07-29 -%% -Type: language -Subtag: wbl -Description: Wakhi -Added: 2009-07-29 -%% -Type: language -Subtag: wbm -Description: Wa -Added: 2009-07-29 -%% -Type: language -Subtag: wbp -Description: Warlpiri -Added: 2009-07-29 -%% -Type: language -Subtag: wbq -Description: Waddar -Added: 2009-07-29 -%% -Type: language -Subtag: wbr -Description: Wagdi -Added: 2009-07-29 -Macrolanguage: raj -%% -Type: language -Subtag: wbt -Description: Wanman -Added: 2009-07-29 -%% -Type: language -Subtag: wbv -Description: Wajarri -Added: 2009-07-29 -%% -Type: language -Subtag: wbw -Description: Woi -Added: 2009-07-29 -%% -Type: language -Subtag: wca -Description: Yanomámi -Added: 2009-07-29 -%% -Type: language -Subtag: wci -Description: Waci Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: wdd -Description: Wandji -Added: 2009-07-29 -%% -Type: language -Subtag: wdg -Description: Wadaginam -Added: 2009-07-29 -%% -Type: language -Subtag: wdj -Description: Wadjiginy -Added: 2009-07-29 -%% -Type: language -Subtag: wdk -Description: Wadikali -Added: 2013-09-10 -%% -Type: language -Subtag: wdu -Description: Wadjigu -Added: 2009-07-29 -%% -Type: language -Subtag: wdy -Description: Wadjabangayi -Added: 2013-09-10 -%% -Type: language -Subtag: wea -Description: Wewaw -Added: 2009-07-29 -%% -Type: language -Subtag: wec -Description: Wè Western -Added: 2009-07-29 -%% -Type: language -Subtag: wed -Description: Wedau -Added: 2009-07-29 -%% -Type: language -Subtag: weg -Description: Wergaia -Added: 2013-09-10 -%% -Type: language -Subtag: weh -Description: Weh -Added: 2009-07-29 -%% -Type: language -Subtag: wei -Description: Kiunum -Added: 2009-07-29 -%% -Type: language -Subtag: wem -Description: Weme Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: wen -Description: Sorbian languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: weo -Description: Wemale -Added: 2009-07-29 -%% -Type: language -Subtag: wep -Description: Westphalien -Added: 2009-07-29 -%% -Type: language -Subtag: wer -Description: Weri -Added: 2009-07-29 -%% -Type: language -Subtag: wes -Description: Cameroon Pidgin -Added: 2009-07-29 -%% -Type: language -Subtag: wet -Description: Perai -Added: 2009-07-29 -%% -Type: language -Subtag: weu -Description: Rawngtu Chin -Added: 2009-07-29 -%% -Type: language -Subtag: wew -Description: Wejewa -Added: 2009-07-29 -%% -Type: language -Subtag: wfg -Description: Yafi -Description: Zorop -Added: 2009-07-29 -%% -Type: language -Subtag: wga -Description: Wagaya -Added: 2009-07-29 -%% -Type: language -Subtag: wgb -Description: Wagawaga -Added: 2010-03-11 -%% -Type: language -Subtag: wgg -Description: Wangganguru -Added: 2009-07-29 -%% -Type: language -Subtag: wgi -Description: Wahgi -Added: 2009-07-29 -%% -Type: language -Subtag: wgo -Description: Waigeo -Added: 2009-07-29 -%% -Type: language -Subtag: wgu -Description: Wirangu -Added: 2012-08-12 -%% -Type: language -Subtag: wgw -Description: Wagawaga -Added: 2009-07-29 -Deprecated: 2010-03-11 -Comments: see wgb, ylb -%% -Type: language -Subtag: wgy -Description: Warrgamay -Added: 2009-07-29 -%% -Type: language -Subtag: wha -Description: Manusela -Added: 2009-07-29 -%% -Type: language -Subtag: whg -Description: North Wahgi -Added: 2009-07-29 -%% -Type: language -Subtag: whk -Description: Wahau Kenyah -Added: 2009-07-29 -%% -Type: language -Subtag: whu -Description: Wahau Kayan -Added: 2009-07-29 -%% -Type: language -Subtag: wib -Description: Southern Toussian -Added: 2009-07-29 -%% -Type: language -Subtag: wic -Description: Wichita -Added: 2009-07-29 -%% -Type: language -Subtag: wie -Description: Wik-Epa -Added: 2009-07-29 -%% -Type: language -Subtag: wif -Description: Wik-Keyangan -Added: 2009-07-29 -%% -Type: language -Subtag: wig -Description: Wik-Ngathana -Added: 2009-07-29 -%% -Type: language -Subtag: wih -Description: Wik-Me'anha -Added: 2009-07-29 -%% -Type: language -Subtag: wii -Description: Minidien -Added: 2009-07-29 -%% -Type: language -Subtag: wij -Description: Wik-Iiyanh -Added: 2009-07-29 -%% -Type: language -Subtag: wik -Description: Wikalkan -Added: 2009-07-29 -%% -Type: language -Subtag: wil -Description: Wilawila -Added: 2009-07-29 -%% -Type: language -Subtag: wim -Description: Wik-Mungkan -Added: 2009-07-29 -%% -Type: language -Subtag: win -Description: Ho-Chunk -Added: 2009-07-29 -%% -Type: language -Subtag: wir -Description: Wiraféd -Added: 2009-07-29 -%% -Type: language -Subtag: wit -Description: Wintu -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see nol, pwi, wnw -%% -Type: language -Subtag: wiu -Description: Wiru -Added: 2009-07-29 -%% -Type: language -Subtag: wiv -Description: Vitu -Added: 2009-07-29 -%% -Type: language -Subtag: wiw -Description: Wirangu -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see nwo, wgu -%% -Type: language -Subtag: wiy -Description: Wiyot -Added: 2009-07-29 -%% -Type: language -Subtag: wja -Description: Waja -Added: 2009-07-29 -%% -Type: language -Subtag: wji -Description: Warji -Added: 2009-07-29 -%% -Type: language -Subtag: wka -Description: Kw'adza -Added: 2009-07-29 -%% -Type: language -Subtag: wkb -Description: Kumbaran -Added: 2009-07-29 -%% -Type: language -Subtag: wkd -Description: Wakde -Description: Mo -Added: 2009-07-29 -%% -Type: language -Subtag: wkl -Description: Kalanadi -Added: 2009-07-29 -%% -Type: language -Subtag: wku -Description: Kunduvadi -Added: 2009-07-29 -%% -Type: language -Subtag: wkw -Description: Wakawaka -Added: 2009-07-29 -%% -Type: language -Subtag: wky -Description: Wangkayutyuru -Added: 2013-09-10 -%% -Type: language -Subtag: wla -Description: Walio -Added: 2009-07-29 -%% -Type: language -Subtag: wlc -Description: Mwali Comorian -Added: 2009-07-29 -%% -Type: language -Subtag: wle -Description: Wolane -Added: 2009-07-29 -%% -Type: language -Subtag: wlg -Description: Kunbarlang -Added: 2009-07-29 -%% -Type: language -Subtag: wli -Description: Waioli -Added: 2009-07-29 -%% -Type: language -Subtag: wlk -Description: Wailaki -Added: 2009-07-29 -%% -Type: language -Subtag: wll -Description: Wali (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: wlm -Description: Middle Welsh -Added: 2009-07-29 -%% -Type: language -Subtag: wlo -Description: Wolio -Added: 2009-07-29 -%% -Type: language -Subtag: wlr -Description: Wailapa -Added: 2009-07-29 -%% -Type: language -Subtag: wls -Description: Wallisian -Added: 2009-07-29 -%% -Type: language -Subtag: wlu -Description: Wuliwuli -Added: 2009-07-29 -%% -Type: language -Subtag: wlv -Description: Wichí Lhamtés Vejoz -Added: 2009-07-29 -%% -Type: language -Subtag: wlw -Description: Walak -Added: 2009-07-29 -%% -Type: language -Subtag: wlx -Description: Wali (Ghana) -Added: 2009-07-29 -%% -Type: language -Subtag: wly -Description: Waling -Added: 2009-07-29 -%% -Type: language -Subtag: wma -Description: Mawa (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: wmb -Description: Wambaya -Added: 2009-07-29 -%% -Type: language -Subtag: wmc -Description: Wamas -Added: 2009-07-29 -%% -Type: language -Subtag: wmd -Description: Mamaindé -Added: 2009-07-29 -%% -Type: language -Subtag: wme -Description: Wambule -Added: 2009-07-29 -%% -Type: language -Subtag: wmh -Description: Waima'a -Added: 2009-07-29 -%% -Type: language -Subtag: wmi -Description: Wamin -Added: 2009-07-29 -%% -Type: language -Subtag: wmm -Description: Maiwa (Indonesia) -Added: 2009-07-29 -%% -Type: language -Subtag: wmn -Description: Waamwang -Added: 2009-07-29 -%% -Type: language -Subtag: wmo -Description: Wom (Papua New Guinea) -Added: 2009-07-29 -%% -Type: language -Subtag: wms -Description: Wambon -Added: 2009-07-29 -%% -Type: language -Subtag: wmt -Description: Walmajarri -Added: 2009-07-29 -%% -Type: language -Subtag: wmw -Description: Mwani -Added: 2009-07-29 -%% -Type: language -Subtag: wmx -Description: Womo -Added: 2009-07-29 -%% -Type: language -Subtag: wnb -Description: Wanambre -Added: 2009-07-29 -%% -Type: language -Subtag: wnc -Description: Wantoat -Added: 2009-07-29 -%% -Type: language -Subtag: wnd -Description: Wandarang -Added: 2009-07-29 -%% -Type: language -Subtag: wne -Description: Waneci -Added: 2009-07-29 -%% -Type: language -Subtag: wng -Description: Wanggom -Added: 2009-07-29 -%% -Type: language -Subtag: wni -Description: Ndzwani Comorian -Added: 2009-07-29 -%% -Type: language -Subtag: wnk -Description: Wanukaka -Added: 2009-07-29 -%% -Type: language -Subtag: wnm -Description: Wanggamala -Added: 2009-07-29 -%% -Type: language -Subtag: wnn -Description: Wunumara -Added: 2013-09-10 -%% -Type: language -Subtag: wno -Description: Wano -Added: 2009-07-29 -%% -Type: language -Subtag: wnp -Description: Wanap -Added: 2009-07-29 -%% -Type: language -Subtag: wnu -Description: Usan -Added: 2009-07-29 -%% -Type: language -Subtag: wnw -Description: Wintu -Added: 2013-09-10 -%% -Type: language -Subtag: wny -Description: Wanyi -Added: 2012-08-12 -%% -Type: language -Subtag: woa -Description: Tyaraity -Added: 2009-07-29 -%% -Type: language -Subtag: wob -Description: Wè Northern -Added: 2009-07-29 -%% -Type: language -Subtag: woc -Description: Wogeo -Added: 2009-07-29 -%% -Type: language -Subtag: wod -Description: Wolani -Added: 2009-07-29 -%% -Type: language -Subtag: woe -Description: Woleaian -Added: 2009-07-29 -%% -Type: language -Subtag: wof -Description: Gambian Wolof -Added: 2009-07-29 -%% -Type: language -Subtag: wog -Description: Wogamusin -Added: 2009-07-29 -%% -Type: language -Subtag: woi -Description: Kamang -Added: 2009-07-29 -%% -Type: language -Subtag: wok -Description: Longto -Added: 2009-07-29 -%% -Type: language -Subtag: wom -Description: Wom (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: won -Description: Wongo -Added: 2009-07-29 -%% -Type: language -Subtag: woo -Description: Manombai -Added: 2009-07-29 -%% -Type: language -Subtag: wor -Description: Woria -Added: 2009-07-29 -%% -Type: language -Subtag: wos -Description: Hanga Hundi -Added: 2009-07-29 -%% -Type: language -Subtag: wow -Description: Wawonii -Added: 2009-07-29 -%% -Type: language -Subtag: woy -Description: Weyto -Added: 2009-07-29 -%% -Type: language -Subtag: wpc -Description: Maco -Added: 2009-07-29 -%% -Type: language -Subtag: wra -Description: Warapu -Added: 2009-07-29 -%% -Type: language -Subtag: wrb -Description: Warluwara -Added: 2009-07-29 -%% -Type: language -Subtag: wrd -Description: Warduji -Added: 2009-07-29 -%% -Type: language -Subtag: wrg -Description: Warungu -Added: 2009-07-29 -%% -Type: language -Subtag: wrh -Description: Wiradhuri -Added: 2009-07-29 -%% -Type: language -Subtag: wri -Description: Wariyangga -Added: 2009-07-29 -%% -Type: language -Subtag: wrk -Description: Garrwa -Added: 2012-08-12 -%% -Type: language -Subtag: wrl -Description: Warlmanpa -Added: 2009-07-29 -%% -Type: language -Subtag: wrm -Description: Warumungu -Added: 2009-07-29 -%% -Type: language -Subtag: wrn -Description: Warnang -Added: 2009-07-29 -%% -Type: language -Subtag: wro -Description: Worrorra -Added: 2012-08-12 -%% -Type: language -Subtag: wrp -Description: Waropen -Added: 2009-07-29 -%% -Type: language -Subtag: wrr -Description: Wardaman -Added: 2009-07-29 -%% -Type: language -Subtag: wrs -Description: Waris -Added: 2009-07-29 -%% -Type: language -Subtag: wru -Description: Waru -Added: 2009-07-29 -%% -Type: language -Subtag: wrv -Description: Waruna -Added: 2009-07-29 -%% -Type: language -Subtag: wrw -Description: Gugu Warra -Added: 2009-07-29 -%% -Type: language -Subtag: wrx -Description: Wae Rana -Added: 2009-07-29 -%% -Type: language -Subtag: wry -Description: Merwari -Added: 2009-07-29 -Macrolanguage: mwr -%% -Type: language -Subtag: wrz -Description: Waray (Australia) -Added: 2009-07-29 -%% -Type: language -Subtag: wsa -Description: Warembori -Added: 2009-07-29 -%% -Type: language -Subtag: wsi -Description: Wusi -Added: 2009-07-29 -%% -Type: language -Subtag: wsk -Description: Waskia -Added: 2009-07-29 -%% -Type: language -Subtag: wsr -Description: Owenia -Added: 2009-07-29 -%% -Type: language -Subtag: wss -Description: Wasa -Added: 2009-07-29 -%% -Type: language -Subtag: wsu -Description: Wasu -Added: 2009-07-29 -%% -Type: language -Subtag: wsv -Description: Wotapuri-Katarqalai -Added: 2009-07-29 -%% -Type: language -Subtag: wtf -Description: Watiwa -Added: 2009-07-29 -%% -Type: language -Subtag: wth -Description: Wathawurrung -Added: 2013-09-10 -%% -Type: language -Subtag: wti -Description: Berta -Added: 2009-07-29 -%% -Type: language -Subtag: wtk -Description: Watakataui -Added: 2009-07-29 -%% -Type: language -Subtag: wtm -Description: Mewati -Added: 2009-07-29 -%% -Type: language -Subtag: wtw -Description: Wotu -Added: 2009-07-29 -%% -Type: language -Subtag: wua -Description: Wikngenchera -Added: 2009-07-29 -%% -Type: language -Subtag: wub -Description: Wunambal -Added: 2009-07-29 -%% -Type: language -Subtag: wud -Description: Wudu -Added: 2009-07-29 -%% -Type: language -Subtag: wuh -Description: Wutunhua -Added: 2009-07-29 -%% -Type: language -Subtag: wul -Description: Silimo -Added: 2009-07-29 -%% -Type: language -Subtag: wum -Description: Wumbvu -Added: 2009-07-29 -%% -Type: language -Subtag: wun -Description: Bungu -Added: 2009-07-29 -%% -Type: language -Subtag: wur -Description: Wurrugu -Added: 2009-07-29 -%% -Type: language -Subtag: wut -Description: Wutung -Added: 2009-07-29 -%% -Type: language -Subtag: wuu -Description: Wu Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: wuv -Description: Wuvulu-Aua -Added: 2009-07-29 -%% -Type: language -Subtag: wux -Description: Wulna -Added: 2009-07-29 -%% -Type: language -Subtag: wuy -Description: Wauyai -Added: 2009-07-29 -%% -Type: language -Subtag: wwa -Description: Waama -Added: 2009-07-29 -%% -Type: language -Subtag: wwb -Description: Wakabunga -Added: 2012-08-12 -%% -Type: language -Subtag: wwo -Description: Wetamut -Description: Dorig -Added: 2009-07-29 -%% -Type: language -Subtag: wwr -Description: Warrwa -Added: 2009-07-29 -%% -Type: language -Subtag: www -Description: Wawa -Added: 2009-07-29 -%% -Type: language -Subtag: wxa -Description: Waxianghua -Added: 2009-07-29 -%% -Type: language -Subtag: wxw -Description: Wardandi -Added: 2013-09-10 -%% -Type: language -Subtag: wya -Description: Wyandot -Added: 2009-07-29 -%% -Type: language -Subtag: wyb -Description: Wangaaybuwan-Ngiyambaa -Added: 2009-07-29 -%% -Type: language -Subtag: wyi -Description: Woiwurrung -Added: 2013-09-10 -%% -Type: language -Subtag: wym -Description: Wymysorys -Added: 2009-07-29 -%% -Type: language -Subtag: wyr -Description: Wayoró -Added: 2009-07-29 -%% -Type: language -Subtag: wyy -Description: Western Fijian -Added: 2009-07-29 -%% -Type: language -Subtag: xaa -Description: Andalusian Arabic -Added: 2009-07-29 -%% -Type: language -Subtag: xab -Description: Sambe -Added: 2009-07-29 -%% -Type: language -Subtag: xac -Description: Kachari -Added: 2009-07-29 -%% -Type: language -Subtag: xad -Description: Adai -Added: 2009-07-29 -%% -Type: language -Subtag: xae -Description: Aequian -Added: 2009-07-29 -%% -Type: language -Subtag: xag -Description: Aghwan -Added: 2009-07-29 -%% -Type: language -Subtag: xai -Description: Kaimbé -Added: 2009-07-29 -%% -Type: language -Subtag: xal -Description: Kalmyk -Description: Oirat -Added: 2005-10-16 -%% -Type: language -Subtag: xam -Description: /Xam -Added: 2009-07-29 -%% -Type: language -Subtag: xan -Description: Xamtanga -Added: 2009-07-29 -%% -Type: language -Subtag: xao -Description: Khao -Added: 2009-07-29 -%% -Type: language -Subtag: xap -Description: Apalachee -Added: 2009-07-29 -%% -Type: language -Subtag: xaq -Description: Aquitanian -Added: 2009-07-29 -%% -Type: language -Subtag: xar -Description: Karami -Added: 2009-07-29 -%% -Type: language -Subtag: xas -Description: Kamas -Added: 2009-07-29 -%% -Type: language -Subtag: xat -Description: Katawixi -Added: 2009-07-29 -%% -Type: language -Subtag: xau -Description: Kauwera -Added: 2009-07-29 -%% -Type: language -Subtag: xav -Description: Xavánte -Added: 2009-07-29 -%% -Type: language -Subtag: xaw -Description: Kawaiisu -Added: 2009-07-29 -%% -Type: language -Subtag: xay -Description: Kayan Mahakam -Added: 2009-07-29 -%% -Type: language -Subtag: xba -Description: Kamba (Brazil) -Added: 2009-07-29 -%% -Type: language -Subtag: xbb -Description: Lower Burdekin -Added: 2010-03-11 -%% -Type: language -Subtag: xbc -Description: Bactrian -Added: 2009-07-29 -%% -Type: language -Subtag: xbd -Description: Bindal -Added: 2013-09-10 -%% -Type: language -Subtag: xbe -Description: Bigambal -Added: 2013-09-10 -%% -Type: language -Subtag: xbg -Description: Bunganditj -Added: 2013-09-10 -%% -Type: language -Subtag: xbi -Description: Kombio -Added: 2009-07-29 -%% -Type: language -Subtag: xbj -Description: Birrpayi -Added: 2013-09-10 -%% -Type: language -Subtag: xbm -Description: Middle Breton -Added: 2009-07-29 -%% -Type: language -Subtag: xbn -Description: Kenaboi -Added: 2010-03-11 -%% -Type: language -Subtag: xbo -Description: Bolgarian -Added: 2009-07-29 -%% -Type: language -Subtag: xbp -Description: Bibbulman -Added: 2013-09-10 -%% -Type: language -Subtag: xbr -Description: Kambera -Added: 2009-07-29 -%% -Type: language -Subtag: xbw -Description: Kambiwá -Added: 2009-07-29 -%% -Type: language -Subtag: xbx -Description: Kabixí -Added: 2009-07-29 -%% -Type: language -Subtag: xby -Description: Batyala -Added: 2013-09-10 -%% -Type: language -Subtag: xcb -Description: Cumbric -Added: 2009-07-29 -%% -Type: language -Subtag: xcc -Description: Camunic -Added: 2009-07-29 -%% -Type: language -Subtag: xce -Description: Celtiberian -Added: 2009-07-29 -%% -Type: language -Subtag: xcg -Description: Cisalpine Gaulish -Added: 2009-07-29 -%% -Type: language -Subtag: xch -Description: Chemakum -Description: Chimakum -Added: 2009-07-29 -%% -Type: language -Subtag: xcl -Description: Classical Armenian -Added: 2009-07-29 -%% -Type: language -Subtag: xcm -Description: Comecrudo -Added: 2009-07-29 -%% -Type: language -Subtag: xcn -Description: Cotoname -Added: 2009-07-29 -%% -Type: language -Subtag: xco -Description: Chorasmian -Added: 2009-07-29 -%% -Type: language -Subtag: xcr -Description: Carian -Added: 2009-07-29 -%% -Type: language -Subtag: xct -Description: Classical Tibetan -Added: 2009-07-29 -%% -Type: language -Subtag: xcu -Description: Curonian -Added: 2009-07-29 -%% -Type: language -Subtag: xcv -Description: Chuvantsy -Added: 2009-07-29 -%% -Type: language -Subtag: xcw -Description: Coahuilteco -Added: 2009-07-29 -%% -Type: language -Subtag: xcy -Description: Cayuse -Added: 2009-07-29 -%% -Type: language -Subtag: xda -Description: Darkinyung -Added: 2013-09-10 -%% -Type: language -Subtag: xdc -Description: Dacian -Added: 2009-07-29 -%% -Type: language -Subtag: xdk -Description: Dharuk -Added: 2013-09-10 -%% -Type: language -Subtag: xdm -Description: Edomite -Added: 2009-07-29 -%% -Type: language -Subtag: xdy -Description: Malayic Dayak -Added: 2009-07-29 -%% -Type: language -Subtag: xeb -Description: Eblan -Added: 2009-07-29 -%% -Type: language -Subtag: xed -Description: Hdi -Added: 2009-07-29 -%% -Type: language -Subtag: xeg -Description: //Xegwi -Added: 2009-07-29 -%% -Type: language -Subtag: xel -Description: Kelo -Added: 2009-07-29 -%% -Type: language -Subtag: xem -Description: Kembayan -Added: 2009-07-29 -%% -Type: language -Subtag: xep -Description: Epi-Olmec -Added: 2009-07-29 -%% -Type: language -Subtag: xer -Description: Xerénte -Added: 2009-07-29 -%% -Type: language -Subtag: xes -Description: Kesawai -Added: 2009-07-29 -%% -Type: language -Subtag: xet -Description: Xetá -Added: 2009-07-29 -%% -Type: language -Subtag: xeu -Description: Keoru-Ahia -Added: 2009-07-29 -%% -Type: language -Subtag: xfa -Description: Faliscan -Added: 2009-07-29 -%% -Type: language -Subtag: xga -Description: Galatian -Added: 2009-07-29 -%% -Type: language -Subtag: xgb -Description: Gbin -Added: 2012-08-12 -%% -Type: language -Subtag: xgd -Description: Gudang -Added: 2013-09-10 -%% -Type: language -Subtag: xgf -Description: Gabrielino-Fernandeño -Added: 2009-07-29 -%% -Type: language -Subtag: xgg -Description: Goreng -Added: 2013-09-10 -%% -Type: language -Subtag: xgi -Description: Garingbal -Added: 2013-09-10 -%% -Type: language -Subtag: xgl -Description: Galindan -Added: 2009-07-29 -%% -Type: language -Subtag: xgm -Description: Guwinmal -Added: 2013-09-10 -%% -Type: language -Subtag: xgn -Description: Mongolian languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: xgr -Description: Garza -Added: 2009-07-29 -%% -Type: language -Subtag: xgu -Description: Unggumi -Added: 2012-08-12 -%% -Type: language -Subtag: xgw -Description: Guwa -Added: 2013-09-10 -%% -Type: language -Subtag: xha -Description: Harami -Added: 2009-07-29 -%% -Type: language -Subtag: xhc -Description: Hunnic -Added: 2009-07-29 -%% -Type: language -Subtag: xhd -Description: Hadrami -Added: 2009-07-29 -%% -Type: language -Subtag: xhe -Description: Khetrani -Added: 2009-07-29 -Macrolanguage: lah -%% -Type: language -Subtag: xhr -Description: Hernican -Added: 2009-07-29 -%% -Type: language -Subtag: xht -Description: Hattic -Added: 2009-07-29 -%% -Type: language -Subtag: xhu -Description: Hurrian -Added: 2009-07-29 -%% -Type: language -Subtag: xhv -Description: Khua -Added: 2009-07-29 -%% -Type: language -Subtag: xia -Description: Xiandao -Added: 2009-07-29 -Deprecated: 2013-09-10 -Preferred-Value: acn -%% -Type: language -Subtag: xib -Description: Iberian -Added: 2009-07-29 -%% -Type: language -Subtag: xii -Description: Xiri -Added: 2009-07-29 -%% -Type: language -Subtag: xil -Description: Illyrian -Added: 2009-07-29 -%% -Type: language -Subtag: xin -Description: Xinca -Added: 2009-07-29 -%% -Type: language -Subtag: xip -Description: Xipináwa -Added: 2009-07-29 -%% -Type: language -Subtag: xir -Description: Xiriâna -Added: 2009-07-29 -%% -Type: language -Subtag: xiv -Description: Indus Valley Language -Added: 2009-07-29 -%% -Type: language -Subtag: xiy -Description: Xipaya -Added: 2009-07-29 -%% -Type: language -Subtag: xjb -Description: Minjungbal -Added: 2013-09-10 -%% -Type: language -Subtag: xjt -Description: Jaitmatang -Added: 2013-09-10 -%% -Type: language -Subtag: xka -Description: Kalkoti -Added: 2009-07-29 -%% -Type: language -Subtag: xkb -Description: Northern Nago -Added: 2009-07-29 -%% -Type: language -Subtag: xkc -Description: Kho'ini -Added: 2009-07-29 -%% -Type: language -Subtag: xkd -Description: Mendalam Kayan -Added: 2009-07-29 -%% -Type: language -Subtag: xke -Description: Kereho -Added: 2009-07-29 -%% -Type: language -Subtag: xkf -Description: Khengkha -Added: 2009-07-29 -%% -Type: language -Subtag: xkg -Description: Kagoro -Added: 2009-07-29 -%% -Type: language -Subtag: xkh -Description: Karahawyana -Added: 2009-07-29 -%% -Type: language -Subtag: xki -Description: Kenyan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: xkj -Description: Kajali -Added: 2009-07-29 -%% -Type: language -Subtag: xkk -Description: Kaco' -Added: 2009-07-29 -%% -Type: language -Subtag: xkl -Description: Mainstream Kenyah -Added: 2009-07-29 -%% -Type: language -Subtag: xkn -Description: Kayan River Kayan -Added: 2009-07-29 -%% -Type: language -Subtag: xko -Description: Kiorr -Added: 2009-07-29 -%% -Type: language -Subtag: xkp -Description: Kabatei -Added: 2009-07-29 -%% -Type: language -Subtag: xkq -Description: Koroni -Added: 2009-07-29 -%% -Type: language -Subtag: xkr -Description: Xakriabá -Added: 2009-07-29 -%% -Type: language -Subtag: xks -Description: Kumbewaha -Added: 2009-07-29 -%% -Type: language -Subtag: xkt -Description: Kantosi -Added: 2009-07-29 -%% -Type: language -Subtag: xku -Description: Kaamba -Added: 2009-07-29 -%% -Type: language -Subtag: xkv -Description: Kgalagadi -Added: 2009-07-29 -%% -Type: language -Subtag: xkw -Description: Kembra -Added: 2009-07-29 -%% -Type: language -Subtag: xkx -Description: Karore -Added: 2009-07-29 -%% -Type: language -Subtag: xky -Description: Uma' Lasan -Added: 2009-07-29 -%% -Type: language -Subtag: xkz -Description: Kurtokha -Added: 2009-07-29 -%% -Type: language -Subtag: xla -Description: Kamula -Added: 2009-07-29 -%% -Type: language -Subtag: xlb -Description: Loup B -Added: 2009-07-29 -%% -Type: language -Subtag: xlc -Description: Lycian -Added: 2009-07-29 -%% -Type: language -Subtag: xld -Description: Lydian -Added: 2009-07-29 -%% -Type: language -Subtag: xle -Description: Lemnian -Added: 2009-07-29 -%% -Type: language -Subtag: xlg -Description: Ligurian (Ancient) -Added: 2009-07-29 -%% -Type: language -Subtag: xli -Description: Liburnian -Added: 2009-07-29 -%% -Type: language -Subtag: xln -Description: Alanic -Added: 2009-07-29 -%% -Type: language -Subtag: xlo -Description: Loup A -Added: 2009-07-29 -%% -Type: language -Subtag: xlp -Description: Lepontic -Added: 2009-07-29 -%% -Type: language -Subtag: xls -Description: Lusitanian -Added: 2009-07-29 -%% -Type: language -Subtag: xlu -Description: Cuneiform Luwian -Added: 2009-07-29 -%% -Type: language -Subtag: xly -Description: Elymian -Added: 2009-07-29 -%% -Type: language -Subtag: xma -Description: Mushungulu -Added: 2009-07-29 -%% -Type: language -Subtag: xmb -Description: Mbonga -Added: 2009-07-29 -%% -Type: language -Subtag: xmc -Description: Makhuwa-Marrevone -Added: 2009-07-29 -%% -Type: language -Subtag: xmd -Description: Mbudum -Added: 2009-07-29 -%% -Type: language -Subtag: xme -Description: Median -Added: 2009-07-29 -%% -Type: language -Subtag: xmf -Description: Mingrelian -Added: 2009-07-29 -%% -Type: language -Subtag: xmg -Description: Mengaka -Added: 2009-07-29 -%% -Type: language -Subtag: xmh -Description: Kuku-Muminh -Added: 2009-07-29 -%% -Type: language -Subtag: xmj -Description: Majera -Added: 2009-07-29 -%% -Type: language -Subtag: xmk -Description: Ancient Macedonian -Added: 2009-07-29 -%% -Type: language -Subtag: xml -Description: Malaysian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: xmm -Description: Manado Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: xmn -Description: Manichaean Middle Persian -Added: 2009-07-29 -%% -Type: language -Subtag: xmo -Description: Morerebi -Added: 2009-07-29 -%% -Type: language -Subtag: xmp -Description: Kuku-Mu'inh -Added: 2009-07-29 -%% -Type: language -Subtag: xmq -Description: Kuku-Mangk -Added: 2009-07-29 -%% -Type: language -Subtag: xmr -Description: Meroitic -Added: 2009-07-29 -%% -Type: language -Subtag: xms -Description: Moroccan Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: xmt -Description: Matbat -Added: 2009-07-29 -%% -Type: language -Subtag: xmu -Description: Kamu -Added: 2009-07-29 -%% -Type: language -Subtag: xmv -Description: Antankarana Malagasy -Description: Tankarana Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: xmw -Description: Tsimihety Malagasy -Added: 2009-07-29 -Macrolanguage: mg -%% -Type: language -Subtag: xmx -Description: Maden -Added: 2009-07-29 -%% -Type: language -Subtag: xmy -Description: Mayaguduna -Added: 2009-07-29 -%% -Type: language -Subtag: xmz -Description: Mori Bawah -Added: 2009-07-29 -%% -Type: language -Subtag: xna -Description: Ancient North Arabian -Added: 2009-07-29 -%% -Type: language -Subtag: xnb -Description: Kanakanabu -Added: 2009-07-29 -%% -Type: language -Subtag: xnd -Description: Na-Dene languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: xng -Description: Middle Mongolian -Added: 2009-07-29 -%% -Type: language -Subtag: xnh -Description: Kuanhua -Added: 2009-07-29 -%% -Type: language -Subtag: xni -Description: Ngarigu -Added: 2013-09-10 -%% -Type: language -Subtag: xnk -Description: Nganakarti -Added: 2013-09-10 -%% -Type: language -Subtag: xnn -Description: Northern Kankanay -Added: 2009-07-29 -%% -Type: language -Subtag: xno -Description: Anglo-Norman -Added: 2009-07-29 -%% -Type: language -Subtag: xnr -Description: Kangri -Added: 2009-07-29 -Macrolanguage: doi -%% -Type: language -Subtag: xns -Description: Kanashi -Added: 2009-07-29 -%% -Type: language -Subtag: xnt -Description: Narragansett -Added: 2010-03-11 -%% -Type: language -Subtag: xnu -Description: Nukunul -Added: 2013-09-10 -%% -Type: language -Subtag: xny -Description: Nyiyaparli -Added: 2013-09-10 -%% -Type: language -Subtag: xnz -Description: Kenzi -Description: Mattoki -Added: 2012-08-12 -%% -Type: language -Subtag: xoc -Description: O'chi'chi' -Added: 2009-07-29 -%% -Type: language -Subtag: xod -Description: Kokoda -Added: 2009-07-29 -%% -Type: language -Subtag: xog -Description: Soga -Added: 2009-07-29 -%% -Type: language -Subtag: xoi -Description: Kominimung -Added: 2009-07-29 -%% -Type: language -Subtag: xok -Description: Xokleng -Added: 2009-07-29 -%% -Type: language -Subtag: xom -Description: Komo (Sudan) -Added: 2009-07-29 -%% -Type: language -Subtag: xon -Description: Konkomba -Added: 2009-07-29 -%% -Type: language -Subtag: xoo -Description: Xukurú -Added: 2009-07-29 -%% -Type: language -Subtag: xop -Description: Kopar -Added: 2009-07-29 -%% -Type: language -Subtag: xor -Description: Korubo -Added: 2009-07-29 -%% -Type: language -Subtag: xow -Description: Kowaki -Added: 2009-07-29 -%% -Type: language -Subtag: xpa -Description: Pirriya -Added: 2013-09-10 -%% -Type: language -Subtag: xpc -Description: Pecheneg -Added: 2009-07-29 -%% -Type: language -Subtag: xpe -Description: Liberia Kpelle -Added: 2009-07-29 -Macrolanguage: kpe -%% -Type: language -Subtag: xpg -Description: Phrygian -Added: 2009-07-29 -%% -Type: language -Subtag: xpi -Description: Pictish -Added: 2009-07-29 -%% -Type: language -Subtag: xpj -Description: Mpalitjanh -Added: 2012-08-12 -%% -Type: language -Subtag: xpk -Description: Kulina Pano -Added: 2009-07-29 -%% -Type: language -Subtag: xpm -Description: Pumpokol -Added: 2009-07-29 -%% -Type: language -Subtag: xpn -Description: Kapinawá -Added: 2009-07-29 -%% -Type: language -Subtag: xpo -Description: Pochutec -Added: 2009-07-29 -%% -Type: language -Subtag: xpp -Description: Puyo-Paekche -Added: 2009-07-29 -%% -Type: language -Subtag: xpq -Description: Mohegan-Pequot -Added: 2010-03-11 -%% -Type: language -Subtag: xpr -Description: Parthian -Added: 2009-07-29 -%% -Type: language -Subtag: xps -Description: Pisidian -Added: 2009-07-29 -%% -Type: language -Subtag: xpt -Description: Punthamara -Added: 2013-09-10 -%% -Type: language -Subtag: xpu -Description: Punic -Added: 2009-07-29 -%% -Type: language -Subtag: xpy -Description: Puyo -Added: 2009-07-29 -%% -Type: language -Subtag: xqa -Description: Karakhanid -Added: 2009-07-29 -%% -Type: language -Subtag: xqt -Description: Qatabanian -Added: 2009-07-29 -%% -Type: language -Subtag: xra -Description: Krahô -Added: 2009-07-29 -%% -Type: language -Subtag: xrb -Description: Eastern Karaboro -Added: 2009-07-29 -%% -Type: language -Subtag: xrd -Description: Gundungurra -Added: 2013-09-10 -%% -Type: language -Subtag: xre -Description: Kreye -Added: 2009-07-29 -%% -Type: language -Subtag: xrg -Description: Minang -Added: 2013-09-10 -%% -Type: language -Subtag: xri -Description: Krikati-Timbira -Added: 2009-07-29 -%% -Type: language -Subtag: xrm -Description: Armazic -Added: 2009-07-29 -%% -Type: language -Subtag: xrn -Description: Arin -Added: 2009-07-29 -%% -Type: language -Subtag: xrq -Description: Karranga -Added: 2013-09-10 -%% -Type: language -Subtag: xrr -Description: Raetic -Added: 2009-07-29 -%% -Type: language -Subtag: xrt -Description: Aranama-Tamique -Added: 2009-07-29 -%% -Type: language -Subtag: xru -Description: Marriammu -Added: 2009-07-29 -%% -Type: language -Subtag: xrw -Description: Karawa -Added: 2009-07-29 -%% -Type: language -Subtag: xsa -Description: Sabaean -Added: 2009-07-29 -%% -Type: language -Subtag: xsb -Description: Sambal -Added: 2009-07-29 -%% -Type: language -Subtag: xsc -Description: Scythian -Added: 2009-07-29 -%% -Type: language -Subtag: xsd -Description: Sidetic -Added: 2009-07-29 -%% -Type: language -Subtag: xse -Description: Sempan -Added: 2009-07-29 -%% -Type: language -Subtag: xsh -Description: Shamang -Added: 2009-07-29 -%% -Type: language -Subtag: xsi -Description: Sio -Added: 2009-07-29 -%% -Type: language -Subtag: xsj -Description: Subi -Added: 2009-07-29 -%% -Type: language -Subtag: xsl -Description: South Slavey -Added: 2009-07-29 -Macrolanguage: den -%% -Type: language -Subtag: xsm -Description: Kasem -Added: 2009-07-29 -%% -Type: language -Subtag: xsn -Description: Sanga (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: xso -Description: Solano -Added: 2009-07-29 -%% -Type: language -Subtag: xsp -Description: Silopi -Added: 2009-07-29 -%% -Type: language -Subtag: xsq -Description: Makhuwa-Saka -Added: 2009-07-29 -%% -Type: language -Subtag: xsr -Description: Sherpa -Added: 2009-07-29 -%% -Type: language -Subtag: xss -Description: Assan -Added: 2009-07-29 -%% -Type: language -Subtag: xsu -Description: Sanumá -Added: 2009-07-29 -%% -Type: language -Subtag: xsv -Description: Sudovian -Added: 2009-07-29 -%% -Type: language -Subtag: xsy -Description: Saisiyat -Added: 2009-07-29 -%% -Type: language -Subtag: xta -Description: Alcozauca Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtb -Description: Chazumba Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtc -Description: Katcha-Kadugli-Miri -Added: 2009-07-29 -%% -Type: language -Subtag: xtd -Description: Diuxi-Tilantongo Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xte -Description: Ketengban -Added: 2009-07-29 -%% -Type: language -Subtag: xtg -Description: Transalpine Gaulish -Added: 2009-07-29 -%% -Type: language -Subtag: xth -Description: Yitha Yitha -Added: 2013-09-10 -%% -Type: language -Subtag: xti -Description: Sinicahua Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtj -Description: San Juan Teita Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtl -Description: Tijaltepec Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtm -Description: Magdalena Peñasco Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtn -Description: Northern Tlaxiaco Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xto -Description: Tokharian A -Added: 2009-07-29 -%% -Type: language -Subtag: xtp -Description: San Miguel Piedras Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtq -Description: Tumshuqese -Added: 2009-07-29 -%% -Type: language -Subtag: xtr -Description: Early Tripuri -Added: 2009-07-29 -%% -Type: language -Subtag: xts -Description: Sindihui Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtt -Description: Tacahua Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtu -Description: Cuyamecalco Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtv -Description: Thawa -Added: 2013-09-10 -%% -Type: language -Subtag: xtw -Description: Tawandê -Added: 2009-07-29 -%% -Type: language -Subtag: xty -Description: Yoloxochitl Mixtec -Added: 2009-07-29 -%% -Type: language -Subtag: xtz -Description: Tasmanian -Added: 2009-07-29 -%% -Type: language -Subtag: xua -Description: Alu Kurumba -Added: 2009-07-29 -%% -Type: language -Subtag: xub -Description: Betta Kurumba -Added: 2009-07-29 -%% -Type: language -Subtag: xud -Description: Umiida -Added: 2012-08-12 -%% -Type: language -Subtag: xug -Description: Kunigami -Added: 2009-07-29 -%% -Type: language -Subtag: xuj -Description: Jennu Kurumba -Added: 2009-07-29 -%% -Type: language -Subtag: xul -Description: Ngunawal -Added: 2013-09-10 -%% -Type: language -Subtag: xum -Description: Umbrian -Added: 2009-07-29 -%% -Type: language -Subtag: xun -Description: Unggaranggu -Added: 2012-08-12 -%% -Type: language -Subtag: xuo -Description: Kuo -Added: 2009-07-29 -%% -Type: language -Subtag: xup -Description: Upper Umpqua -Added: 2009-07-29 -%% -Type: language -Subtag: xur -Description: Urartian -Added: 2009-07-29 -%% -Type: language -Subtag: xut -Description: Kuthant -Added: 2009-07-29 -%% -Type: language -Subtag: xuu -Description: Kxoe -Added: 2009-07-29 -%% -Type: language -Subtag: xve -Description: Venetic -Added: 2009-07-29 -%% -Type: language -Subtag: xvi -Description: Kamviri -Added: 2009-07-29 -%% -Type: language -Subtag: xvn -Description: Vandalic -Added: 2009-07-29 -%% -Type: language -Subtag: xvo -Description: Volscian -Added: 2009-07-29 -%% -Type: language -Subtag: xvs -Description: Vestinian -Added: 2009-07-29 -%% -Type: language -Subtag: xwa -Description: Kwaza -Added: 2009-07-29 -%% -Type: language -Subtag: xwc -Description: Woccon -Added: 2009-07-29 -%% -Type: language -Subtag: xwd -Description: Wadi Wadi -Added: 2013-09-10 -%% -Type: language -Subtag: xwe -Description: Xwela Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: xwg -Description: Kwegu -Added: 2009-07-29 -%% -Type: language -Subtag: xwj -Description: Wajuk -Added: 2013-09-10 -%% -Type: language -Subtag: xwk -Description: Wangkumara -Added: 2013-09-10 -%% -Type: language -Subtag: xwl -Description: Western Xwla Gbe -Added: 2009-07-29 -%% -Type: language -Subtag: xwo -Description: Written Oirat -Added: 2009-07-29 -%% -Type: language -Subtag: xwr -Description: Kwerba Mamberamo -Added: 2009-07-29 -%% -Type: language -Subtag: xwt -Description: Wotjobaluk -Added: 2013-09-10 -%% -Type: language -Subtag: xww -Description: Wemba Wemba -Added: 2013-09-10 -%% -Type: language -Subtag: xxb -Description: Boro (Ghana) -Added: 2009-07-29 -%% -Type: language -Subtag: xxk -Description: Ke'o -Added: 2009-07-29 -%% -Type: language -Subtag: xxm -Description: Minkin -Added: 2013-09-10 -%% -Type: language -Subtag: xxr -Description: Koropó -Added: 2009-07-29 -%% -Type: language -Subtag: xxt -Description: Tambora -Added: 2009-07-29 -%% -Type: language -Subtag: xya -Description: Yaygir -Added: 2013-09-10 -%% -Type: language -Subtag: xyb -Description: Yandjibara -Added: 2013-09-10 -%% -Type: language -Subtag: xyj -Description: Mayi-Yapi -Added: 2013-09-10 -%% -Type: language -Subtag: xyk -Description: Mayi-Kulan -Added: 2013-09-10 -%% -Type: language -Subtag: xyl -Description: Yalakalore -Added: 2009-07-29 -%% -Type: language -Subtag: xyt -Description: Mayi-Thakurti -Added: 2013-09-10 -%% -Type: language -Subtag: xyy -Description: Yorta Yorta -Added: 2012-08-12 -%% -Type: language -Subtag: xzh -Description: Zhang-Zhung -Added: 2009-07-29 -%% -Type: language -Subtag: xzm -Description: Zemgalian -Added: 2009-07-29 -%% -Type: language -Subtag: xzp -Description: Ancient Zapotec -Added: 2009-07-29 -%% -Type: language -Subtag: yaa -Description: Yaminahua -Added: 2009-07-29 -%% -Type: language -Subtag: yab -Description: Yuhup -Added: 2009-07-29 -%% -Type: language -Subtag: yac -Description: Pass Valley Yali -Added: 2009-07-29 -%% -Type: language -Subtag: yad -Description: Yagua -Added: 2009-07-29 -%% -Type: language -Subtag: yae -Description: Pumé -Added: 2009-07-29 -%% -Type: language -Subtag: yaf -Description: Yaka (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: yag -Description: Yámana -Added: 2009-07-29 -%% -Type: language -Subtag: yah -Description: Yazgulyam -Added: 2009-07-29 -%% -Type: language -Subtag: yai -Description: Yagnobi -Added: 2009-07-29 -%% -Type: language -Subtag: yaj -Description: Banda-Yangere -Added: 2009-07-29 -%% -Type: language -Subtag: yak -Description: Yakama -Added: 2009-07-29 -%% -Type: language -Subtag: yal -Description: Yalunka -Added: 2009-07-29 -%% -Type: language -Subtag: yam -Description: Yamba -Added: 2009-07-29 -%% -Type: language -Subtag: yan -Description: Mayangna -Added: 2010-03-11 -%% -Type: language -Subtag: yao -Description: Yao -Added: 2005-10-16 -%% -Type: language -Subtag: yap -Description: Yapese -Added: 2005-10-16 -%% -Type: language -Subtag: yaq -Description: Yaqui -Added: 2009-07-29 -%% -Type: language -Subtag: yar -Description: Yabarana -Added: 2009-07-29 -%% -Type: language -Subtag: yas -Description: Nugunu (Cameroon) -Added: 2009-07-29 -%% -Type: language -Subtag: yat -Description: Yambeta -Added: 2009-07-29 -%% -Type: language -Subtag: yau -Description: Yuwana -Added: 2009-07-29 -%% -Type: language -Subtag: yav -Description: Yangben -Added: 2009-07-29 -%% -Type: language -Subtag: yaw -Description: Yawalapití -Added: 2009-07-29 -%% -Type: language -Subtag: yax -Description: Yauma -Added: 2009-07-29 -%% -Type: language -Subtag: yay -Description: Agwagwune -Added: 2009-07-29 -%% -Type: language -Subtag: yaz -Description: Lokaa -Added: 2009-07-29 -%% -Type: language -Subtag: yba -Description: Yala -Added: 2009-07-29 -%% -Type: language -Subtag: ybb -Description: Yemba -Added: 2009-07-29 -%% -Type: language -Subtag: ybd -Description: Yangbye -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: rki -%% -Type: language -Subtag: ybe -Description: West Yugur -Added: 2009-07-29 -%% -Type: language -Subtag: ybh -Description: Yakha -Added: 2009-07-29 -%% -Type: language -Subtag: ybi -Description: Yamphu -Added: 2009-07-29 -%% -Type: language -Subtag: ybj -Description: Hasha -Added: 2009-07-29 -%% -Type: language -Subtag: ybk -Description: Bokha -Added: 2009-07-29 -%% -Type: language -Subtag: ybl -Description: Yukuben -Added: 2009-07-29 -%% -Type: language -Subtag: ybm -Description: Yaben -Added: 2009-07-29 -%% -Type: language -Subtag: ybn -Description: Yabaâna -Added: 2009-07-29 -%% -Type: language -Subtag: ybo -Description: Yabong -Added: 2009-07-29 -%% -Type: language -Subtag: ybx -Description: Yawiyo -Added: 2009-07-29 -%% -Type: language -Subtag: yby -Description: Yaweyuha -Added: 2009-07-29 -%% -Type: language -Subtag: ych -Description: Chesu -Added: 2009-07-29 -%% -Type: language -Subtag: ycl -Description: Lolopo -Added: 2009-07-29 -%% -Type: language -Subtag: ycn -Description: Yucuna -Added: 2009-07-29 -%% -Type: language -Subtag: ycp -Description: Chepya -Added: 2009-07-29 -%% -Type: language -Subtag: yda -Description: Yanda -Added: 2013-09-10 -%% -Type: language -Subtag: ydd -Description: Eastern Yiddish -Added: 2009-07-29 -Macrolanguage: yi -%% -Type: language -Subtag: yde -Description: Yangum Dey -Added: 2009-07-29 -%% -Type: language -Subtag: ydg -Description: Yidgha -Added: 2009-07-29 -%% -Type: language -Subtag: ydk -Description: Yoidik -Added: 2009-07-29 -%% -Type: language -Subtag: yds -Description: Yiddish Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: yea -Description: Ravula -Added: 2009-07-29 -%% -Type: language -Subtag: yec -Description: Yeniche -Added: 2009-07-29 -%% -Type: language -Subtag: yee -Description: Yimas -Added: 2009-07-29 -%% -Type: language -Subtag: yei -Description: Yeni -Added: 2009-07-29 -%% -Type: language -Subtag: yej -Description: Yevanic -Added: 2009-07-29 -%% -Type: language -Subtag: yel -Description: Yela -Added: 2009-07-29 -%% -Type: language -Subtag: yen -Description: Yendang -Added: 2009-07-29 -Deprecated: 2012-08-12 -Comments: see ynq, yot -%% -Type: language -Subtag: yer -Description: Tarok -Added: 2009-07-29 -%% -Type: language -Subtag: yes -Description: Nyankpa -Added: 2009-07-29 -%% -Type: language -Subtag: yet -Description: Yetfa -Added: 2009-07-29 -%% -Type: language -Subtag: yeu -Description: Yerukula -Added: 2009-07-29 -%% -Type: language -Subtag: yev -Description: Yapunda -Added: 2009-07-29 -%% -Type: language -Subtag: yey -Description: Yeyi -Added: 2009-07-29 -%% -Type: language -Subtag: yga -Description: Malyangapa -Added: 2012-08-12 -%% -Type: language -Subtag: ygi -Description: Yiningayi -Added: 2013-09-10 -%% -Type: language -Subtag: ygl -Description: Yangum Gel -Added: 2009-07-29 -%% -Type: language -Subtag: ygm -Description: Yagomi -Added: 2009-07-29 -%% -Type: language -Subtag: ygp -Description: Gepo -Added: 2009-07-29 -%% -Type: language -Subtag: ygr -Description: Yagaria -Added: 2009-07-29 -%% -Type: language -Subtag: ygu -Description: Yugul -Added: 2013-09-10 -%% -Type: language -Subtag: ygw -Description: Yagwoia -Added: 2009-07-29 -%% -Type: language -Subtag: yha -Description: Baha Buyang -Added: 2009-07-29 -%% -Type: language -Subtag: yhd -Description: Judeo-Iraqi Arabic -Added: 2009-07-29 -Macrolanguage: jrb -%% -Type: language -Subtag: yhl -Description: Hlepho Phowa -Added: 2009-07-29 -%% -Type: language -Subtag: yia -Description: Yinggarda -Added: 2009-07-29 -%% -Type: language -Subtag: yif -Description: Ache -Added: 2009-07-29 -%% -Type: language -Subtag: yig -Description: Wusa Nasu -Added: 2009-07-29 -%% -Type: language -Subtag: yih -Description: Western Yiddish -Added: 2009-07-29 -Macrolanguage: yi -%% -Type: language -Subtag: yii -Description: Yidiny -Added: 2009-07-29 -%% -Type: language -Subtag: yij -Description: Yindjibarndi -Added: 2009-07-29 -%% -Type: language -Subtag: yik -Description: Dongshanba Lalo -Added: 2009-07-29 -%% -Type: language -Subtag: yil -Description: Yindjilandji -Added: 2009-07-29 -%% -Type: language -Subtag: yim -Description: Yimchungru Naga -Added: 2009-07-29 -%% -Type: language -Subtag: yin -Description: Yinchia -Added: 2009-07-29 -%% -Type: language -Subtag: yip -Description: Pholo -Added: 2009-07-29 -%% -Type: language -Subtag: yiq -Description: Miqie -Added: 2009-07-29 -%% -Type: language -Subtag: yir -Description: North Awyu -Added: 2009-07-29 -%% -Type: language -Subtag: yis -Description: Yis -Added: 2009-07-29 -%% -Type: language -Subtag: yit -Description: Eastern Lalu -Added: 2009-07-29 -%% -Type: language -Subtag: yiu -Description: Awu -Added: 2009-07-29 -%% -Type: language -Subtag: yiv -Description: Northern Nisu -Added: 2009-07-29 -%% -Type: language -Subtag: yix -Description: Axi Yi -Added: 2009-07-29 -%% -Type: language -Subtag: yiy -Description: Yir Yoront -Added: 2009-07-29 -Deprecated: 2013-09-10 -Comments: see yrm, yyr -%% -Type: language -Subtag: yiz -Description: Azhe -Added: 2009-07-29 -%% -Type: language -Subtag: yka -Description: Yakan -Added: 2009-07-29 -%% -Type: language -Subtag: ykg -Description: Northern Yukaghir -Added: 2009-07-29 -%% -Type: language -Subtag: yki -Description: Yoke -Added: 2009-07-29 -%% -Type: language -Subtag: ykk -Description: Yakaikeke -Added: 2009-07-29 -%% -Type: language -Subtag: ykl -Description: Khlula -Added: 2009-07-29 -%% -Type: language -Subtag: ykm -Description: Kap -Added: 2009-07-29 -%% -Type: language -Subtag: ykn -Description: Kua-nsi -Added: 2012-08-12 -%% -Type: language -Subtag: yko -Description: Yasa -Added: 2009-07-29 -%% -Type: language -Subtag: ykr -Description: Yekora -Added: 2009-07-29 -%% -Type: language -Subtag: ykt -Description: Kathu -Added: 2009-07-29 -%% -Type: language -Subtag: yku -Description: Kuamasi -Added: 2012-08-12 -%% -Type: language -Subtag: yky -Description: Yakoma -Added: 2009-07-29 -%% -Type: language -Subtag: yla -Description: Yaul -Added: 2009-07-29 -%% -Type: language -Subtag: ylb -Description: Yaleba -Added: 2010-03-11 -%% -Type: language -Subtag: yle -Description: Yele -Added: 2009-07-29 -%% -Type: language -Subtag: ylg -Description: Yelogu -Added: 2009-07-29 -%% -Type: language -Subtag: yli -Description: Angguruk Yali -Added: 2009-07-29 -%% -Type: language -Subtag: yll -Description: Yil -Added: 2009-07-29 -%% -Type: language -Subtag: ylm -Description: Limi -Added: 2009-07-29 -%% -Type: language -Subtag: yln -Description: Langnian Buyang -Added: 2009-07-29 -%% -Type: language -Subtag: ylo -Description: Naluo Yi -Added: 2009-07-29 -%% -Type: language -Subtag: ylr -Description: Yalarnnga -Added: 2009-07-29 -%% -Type: language -Subtag: ylu -Description: Aribwaung -Added: 2009-07-29 -%% -Type: language -Subtag: yly -Description: Nyâlayu -Description: Nyelâyu -Added: 2009-07-29 -%% -Type: language -Subtag: yma -Description: Yamphe -Added: 2009-07-29 -Deprecated: 2012-08-12 -Preferred-Value: lrr -%% -Type: language -Subtag: ymb -Description: Yambes -Added: 2009-07-29 -%% -Type: language -Subtag: ymc -Description: Southern Muji -Added: 2009-07-29 -%% -Type: language -Subtag: ymd -Description: Muda -Added: 2009-07-29 -%% -Type: language -Subtag: yme -Description: Yameo -Added: 2009-07-29 -%% -Type: language -Subtag: ymg -Description: Yamongeri -Added: 2009-07-29 -%% -Type: language -Subtag: ymh -Description: Mili -Added: 2009-07-29 -%% -Type: language -Subtag: ymi -Description: Moji -Added: 2009-07-29 -%% -Type: language -Subtag: ymk -Description: Makwe -Added: 2009-07-29 -%% -Type: language -Subtag: yml -Description: Iamalele -Added: 2009-07-29 -%% -Type: language -Subtag: ymm -Description: Maay -Added: 2009-07-29 -%% -Type: language -Subtag: ymn -Description: Yamna -Description: Sunum -Added: 2009-07-29 -%% -Type: language -Subtag: ymo -Description: Yangum Mon -Added: 2009-07-29 -%% -Type: language -Subtag: ymp -Description: Yamap -Added: 2009-07-29 -%% -Type: language -Subtag: ymq -Description: Qila Muji -Added: 2009-07-29 -%% -Type: language -Subtag: ymr -Description: Malasar -Added: 2009-07-29 -%% -Type: language -Subtag: yms -Description: Mysian -Added: 2009-07-29 -%% -Type: language -Subtag: ymt -Description: Mator-Taygi-Karagas -Added: 2009-07-29 -%% -Type: language -Subtag: ymx -Description: Northern Muji -Added: 2009-07-29 -%% -Type: language -Subtag: ymz -Description: Muzi -Added: 2009-07-29 -%% -Type: language -Subtag: yna -Description: Aluo -Added: 2009-07-29 -%% -Type: language -Subtag: ynd -Description: Yandruwandha -Added: 2009-07-29 -%% -Type: language -Subtag: yne -Description: Lang'e -Added: 2009-07-29 -%% -Type: language -Subtag: yng -Description: Yango -Added: 2009-07-29 -%% -Type: language -Subtag: ynh -Description: Yangho -Added: 2009-07-29 -%% -Type: language -Subtag: ynk -Description: Naukan Yupik -Added: 2009-07-29 -%% -Type: language -Subtag: ynl -Description: Yangulam -Added: 2009-07-29 -%% -Type: language -Subtag: ynn -Description: Yana -Added: 2009-07-29 -%% -Type: language -Subtag: yno -Description: Yong -Added: 2009-07-29 -%% -Type: language -Subtag: ynq -Description: Yendang -Added: 2012-08-12 -%% -Type: language -Subtag: yns -Description: Yansi -Added: 2009-07-29 -%% -Type: language -Subtag: ynu -Description: Yahuna -Added: 2009-07-29 -%% -Type: language -Subtag: yob -Description: Yoba -Added: 2009-07-29 -%% -Type: language -Subtag: yog -Description: Yogad -Added: 2009-07-29 -%% -Type: language -Subtag: yoi -Description: Yonaguni -Added: 2009-07-29 -%% -Type: language -Subtag: yok -Description: Yokuts -Added: 2009-07-29 -%% -Type: language -Subtag: yol -Description: Yola -Added: 2009-07-29 -%% -Type: language -Subtag: yom -Description: Yombe -Added: 2009-07-29 -%% -Type: language -Subtag: yon -Description: Yongkom -Added: 2009-07-29 -%% -Type: language -Subtag: yos -Description: Yos -Added: 2009-07-29 -Deprecated: 2013-09-10 -Preferred-Value: zom -%% -Type: language -Subtag: yot -Description: Yotti -Added: 2012-08-12 -%% -Type: language -Subtag: yox -Description: Yoron -Added: 2009-07-29 -%% -Type: language -Subtag: yoy -Description: Yoy -Added: 2009-07-29 -%% -Type: language -Subtag: ypa -Description: Phala -Added: 2009-07-29 -%% -Type: language -Subtag: ypb -Description: Labo Phowa -Added: 2009-07-29 -%% -Type: language -Subtag: ypg -Description: Phola -Added: 2009-07-29 -%% -Type: language -Subtag: yph -Description: Phupha -Added: 2009-07-29 -%% -Type: language -Subtag: ypk -Description: Yupik languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: ypm -Description: Phuma -Added: 2009-07-29 -%% -Type: language -Subtag: ypn -Description: Ani Phowa -Added: 2009-07-29 -%% -Type: language -Subtag: ypo -Description: Alo Phola -Added: 2009-07-29 -%% -Type: language -Subtag: ypp -Description: Phupa -Added: 2009-07-29 -%% -Type: language -Subtag: ypz -Description: Phuza -Added: 2009-07-29 -%% -Type: language -Subtag: yra -Description: Yerakai -Added: 2009-07-29 -%% -Type: language -Subtag: yrb -Description: Yareba -Added: 2009-07-29 -%% -Type: language -Subtag: yre -Description: Yaouré -Added: 2009-07-29 -%% -Type: language -Subtag: yri -Description: Yarí -Added: 2009-07-29 -%% -Type: language -Subtag: yrk -Description: Nenets -Added: 2009-07-29 -%% -Type: language -Subtag: yrl -Description: Nhengatu -Added: 2009-07-29 -%% -Type: language -Subtag: yrm -Description: Yirrk-Mel -Added: 2013-09-10 -%% -Type: language -Subtag: yrn -Description: Yerong -Added: 2009-07-29 -%% -Type: language -Subtag: yrs -Description: Yarsun -Added: 2009-07-29 -%% -Type: language -Subtag: yrw -Description: Yarawata -Added: 2009-07-29 -%% -Type: language -Subtag: yry -Description: Yarluyandi -Added: 2013-09-10 -%% -Type: language -Subtag: ysc -Description: Yassic -Added: 2009-07-29 -%% -Type: language -Subtag: ysd -Description: Samatao -Added: 2009-07-29 -%% -Type: language -Subtag: ysg -Description: Sonaga -Added: 2012-08-12 -%% -Type: language -Subtag: ysl -Description: Yugoslavian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: ysn -Description: Sani -Added: 2009-07-29 -%% -Type: language -Subtag: yso -Description: Nisi (China) -Added: 2009-07-29 -%% -Type: language -Subtag: ysp -Description: Southern Lolopo -Added: 2009-07-29 -%% -Type: language -Subtag: ysr -Description: Sirenik Yupik -Added: 2009-07-29 -%% -Type: language -Subtag: yss -Description: Yessan-Mayo -Added: 2009-07-29 -%% -Type: language -Subtag: ysy -Description: Sanie -Added: 2009-07-29 -%% -Type: language -Subtag: yta -Description: Talu -Added: 2009-07-29 -%% -Type: language -Subtag: ytl -Description: Tanglang -Added: 2009-07-29 -%% -Type: language -Subtag: ytp -Description: Thopho -Added: 2009-07-29 -%% -Type: language -Subtag: ytw -Description: Yout Wam -Added: 2010-03-11 -%% -Type: language -Subtag: yty -Description: Yatay -Added: 2013-09-10 -%% -Type: language -Subtag: yua -Description: Yucateco -Description: Yucatec Maya -Added: 2009-07-29 -%% -Type: language -Subtag: yub -Description: Yugambal -Added: 2009-07-29 -%% -Type: language -Subtag: yuc -Description: Yuchi -Added: 2009-07-29 -%% -Type: language -Subtag: yud -Description: Judeo-Tripolitanian Arabic -Added: 2009-07-29 -Macrolanguage: jrb -%% -Type: language -Subtag: yue -Description: Yue Chinese -Added: 2009-07-29 -Macrolanguage: zh -%% -Type: language -Subtag: yuf -Description: Havasupai-Walapai-Yavapai -Added: 2009-07-29 -%% -Type: language -Subtag: yug -Description: Yug -Added: 2009-07-29 -%% -Type: language -Subtag: yui -Description: Yurutí -Added: 2009-07-29 -%% -Type: language -Subtag: yuj -Description: Karkar-Yuri -Added: 2009-07-29 -%% -Type: language -Subtag: yuk -Description: Yuki -Added: 2009-07-29 -%% -Type: language -Subtag: yul -Description: Yulu -Added: 2009-07-29 -%% -Type: language -Subtag: yum -Description: Quechan -Added: 2009-07-29 -%% -Type: language -Subtag: yun -Description: Bena (Nigeria) -Added: 2009-07-29 -%% -Type: language -Subtag: yup -Description: Yukpa -Added: 2009-07-29 -%% -Type: language -Subtag: yuq -Description: Yuqui -Added: 2009-07-29 -%% -Type: language -Subtag: yur -Description: Yurok -Added: 2009-07-29 -%% -Type: language -Subtag: yut -Description: Yopno -Added: 2009-07-29 -%% -Type: language -Subtag: yuu -Description: Yugh -Added: 2009-07-29 -%% -Type: language -Subtag: yuw -Description: Yau (Morobe Province) -Added: 2009-07-29 -%% -Type: language -Subtag: yux -Description: Southern Yukaghir -Added: 2009-07-29 -%% -Type: language -Subtag: yuy -Description: East Yugur -Added: 2009-07-29 -%% -Type: language -Subtag: yuz -Description: Yuracare -Added: 2009-07-29 -%% -Type: language -Subtag: yva -Description: Yawa -Added: 2009-07-29 -%% -Type: language -Subtag: yvt -Description: Yavitero -Added: 2009-07-29 -%% -Type: language -Subtag: ywa -Description: Kalou -Added: 2009-07-29 -%% -Type: language -Subtag: ywg -Description: Yinhawangka -Added: 2013-09-10 -%% -Type: language -Subtag: ywl -Description: Western Lalu -Added: 2009-07-29 -%% -Type: language -Subtag: ywn -Description: Yawanawa -Added: 2009-07-29 -%% -Type: language -Subtag: ywq -Description: Wuding-Luquan Yi -Added: 2009-07-29 -%% -Type: language -Subtag: ywr -Description: Yawuru -Added: 2009-07-29 -%% -Type: language -Subtag: ywt -Description: Xishanba Lalo -Description: Central Lalo -Added: 2009-07-29 -%% -Type: language -Subtag: ywu -Description: Wumeng Nasu -Added: 2009-07-29 -%% -Type: language -Subtag: yww -Description: Yawarawarga -Added: 2009-07-29 -%% -Type: language -Subtag: yxa -Description: Mayawali -Added: 2013-09-10 -%% -Type: language -Subtag: yxg -Description: Yagara -Added: 2012-08-12 -%% -Type: language -Subtag: yxl -Description: Yardliyawarra -Added: 2013-09-10 -%% -Type: language -Subtag: yxm -Description: Yinwum -Added: 2013-09-10 -%% -Type: language -Subtag: yxu -Description: Yuyu -Added: 2013-09-10 -%% -Type: language -Subtag: yxy -Description: Yabula Yabula -Added: 2012-08-12 -%% -Type: language -Subtag: yyr -Description: Yir Yoront -Added: 2013-09-03 -%% -Type: language -Subtag: yyu -Description: Yau (Sandaun Province) -Added: 2009-07-29 -%% -Type: language -Subtag: yyz -Description: Ayizi -Added: 2009-07-29 -%% -Type: language -Subtag: yzg -Description: E'ma Buyang -Added: 2009-07-29 -%% -Type: language -Subtag: yzk -Description: Zokhuo -Added: 2009-07-29 -%% -Type: language -Subtag: zaa -Description: Sierra de Juárez Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zab -Description: San Juan Guelavía Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zac -Description: Ocotlán Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zad -Description: Cajonos Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zae -Description: Yareni Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zaf -Description: Ayoquesco Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zag -Description: Zaghawa -Added: 2009-07-29 -%% -Type: language -Subtag: zah -Description: Zangwal -Added: 2009-07-29 -%% -Type: language -Subtag: zai -Description: Isthmus Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zaj -Description: Zaramo -Added: 2009-07-29 -%% -Type: language -Subtag: zak -Description: Zanaki -Added: 2009-07-29 -%% -Type: language -Subtag: zal -Description: Zauzou -Added: 2009-07-29 -%% -Type: language -Subtag: zam -Description: Miahuatlán Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zao -Description: Ozolotepec Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zap -Description: Zapotec -Added: 2005-10-16 -Scope: macrolanguage -%% -Type: language -Subtag: zaq -Description: Aloápam Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zar -Description: Rincón Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zas -Description: Santo Domingo Albarradas Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zat -Description: Tabaa Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zau -Description: Zangskari -Added: 2009-07-29 -%% -Type: language -Subtag: zav -Description: Yatzachi Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zaw -Description: Mitla Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zax -Description: Xadani Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zay -Description: Zayse-Zergulla -Description: Zaysete -Added: 2009-07-29 -%% -Type: language -Subtag: zaz -Description: Zari -Added: 2009-07-29 -%% -Type: language -Subtag: zbc -Description: Central Berawan -Added: 2009-07-29 -%% -Type: language -Subtag: zbe -Description: East Berawan -Added: 2009-07-29 -%% -Type: language -Subtag: zbl -Description: Blissymbols -Description: Bliss -Description: Blissymbolics -Added: 2007-08-21 -Suppress-Script: Blis -%% -Type: language -Subtag: zbt -Description: Batui -Added: 2009-07-29 -%% -Type: language -Subtag: zbw -Description: West Berawan -Added: 2009-07-29 -%% -Type: language -Subtag: zca -Description: Coatecas Altas Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zch -Description: Central Hongshuihe Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zdj -Description: Ngazidja Comorian -Added: 2009-07-29 -%% -Type: language -Subtag: zea -Description: Zeeuws -Added: 2009-07-29 -%% -Type: language -Subtag: zeg -Description: Zenag -Added: 2009-07-29 -%% -Type: language -Subtag: zeh -Description: Eastern Hongshuihe Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zen -Description: Zenaga -Added: 2005-10-16 -%% -Type: language -Subtag: zga -Description: Kinga -Added: 2009-07-29 -%% -Type: language -Subtag: zgb -Description: Guibei Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zgh -Description: Standard Moroccan Tamazight -Added: 2013-01-25 -%% -Type: language -Subtag: zgm -Description: Minz Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zgn -Description: Guibian Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zgr -Description: Magori -Added: 2009-07-29 -%% -Type: language -Subtag: zhb -Description: Zhaba -Added: 2009-07-29 -%% -Type: language -Subtag: zhd -Description: Dai Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zhi -Description: Zhire -Added: 2009-07-29 -%% -Type: language -Subtag: zhn -Description: Nong Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zhw -Description: Zhoa -Added: 2009-07-29 -%% -Type: language -Subtag: zhx -Description: Chinese (family) -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: zia -Description: Zia -Added: 2009-07-29 -%% -Type: language -Subtag: zib -Description: Zimbabwe Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: zik -Description: Zimakani -Added: 2009-07-29 -%% -Type: language -Subtag: zil -Description: Zialo -Added: 2011-08-16 -%% -Type: language -Subtag: zim -Description: Mesme -Added: 2009-07-29 -%% -Type: language -Subtag: zin -Description: Zinza -Added: 2009-07-29 -%% -Type: language -Subtag: zir -Description: Ziriya -Added: 2009-07-29 -%% -Type: language -Subtag: ziw -Description: Zigula -Added: 2009-07-29 -%% -Type: language -Subtag: ziz -Description: Zizilivakan -Added: 2009-07-29 -%% -Type: language -Subtag: zka -Description: Kaimbulawa -Added: 2009-07-29 -%% -Type: language -Subtag: zkb -Description: Koibal -Added: 2009-07-29 -%% -Type: language -Subtag: zkd -Description: Kadu -Added: 2012-08-12 -%% -Type: language -Subtag: zkg -Description: Koguryo -Added: 2009-07-29 -%% -Type: language -Subtag: zkh -Description: Khorezmian -Added: 2009-07-29 -%% -Type: language -Subtag: zkk -Description: Karankawa -Added: 2009-07-29 -%% -Type: language -Subtag: zkn -Description: Kanan -Added: 2012-08-12 -%% -Type: language -Subtag: zko -Description: Kott -Added: 2009-07-29 -%% -Type: language -Subtag: zkp -Description: São Paulo Kaingáng -Added: 2009-07-29 -%% -Type: language -Subtag: zkr -Description: Zakhring -Added: 2009-07-29 -%% -Type: language -Subtag: zkt -Description: Kitan -Added: 2009-07-29 -%% -Type: language -Subtag: zku -Description: Kaurna -Added: 2009-07-29 -%% -Type: language -Subtag: zkv -Description: Krevinian -Added: 2009-07-29 -%% -Type: language -Subtag: zkz -Description: Khazar -Added: 2009-07-29 -%% -Type: language -Subtag: zle -Description: East Slavic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: zlj -Description: Liujiang Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zlm -Description: Malay (individual language) -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: zln -Description: Lianshan Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zlq -Description: Liuqian Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zls -Description: South Slavic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: zlw -Description: West Slavic languages -Added: 2009-07-29 -Scope: collection -%% -Type: language -Subtag: zma -Description: Manda (Australia) -Added: 2009-07-29 -%% -Type: language -Subtag: zmb -Description: Zimba -Added: 2009-07-29 -%% -Type: language -Subtag: zmc -Description: Margany -Added: 2009-07-29 -%% -Type: language -Subtag: zmd -Description: Maridan -Added: 2009-07-29 -%% -Type: language -Subtag: zme -Description: Mangerr -Added: 2009-07-29 -%% -Type: language -Subtag: zmf -Description: Mfinu -Added: 2009-07-29 -%% -Type: language -Subtag: zmg -Description: Marti Ke -Added: 2009-07-29 -%% -Type: language -Subtag: zmh -Description: Makolkol -Added: 2009-07-29 -%% -Type: language -Subtag: zmi -Description: Negeri Sembilan Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: zmj -Description: Maridjabin -Added: 2009-07-29 -%% -Type: language -Subtag: zmk -Description: Mandandanyi -Added: 2009-07-29 -%% -Type: language -Subtag: zml -Description: Madngele -Added: 2009-07-29 -%% -Type: language -Subtag: zmm -Description: Marimanindji -Added: 2009-07-29 -%% -Type: language -Subtag: zmn -Description: Mbangwe -Added: 2009-07-29 -%% -Type: language -Subtag: zmo -Description: Molo -Added: 2009-07-29 -%% -Type: language -Subtag: zmp -Description: Mpuono -Added: 2009-07-29 -%% -Type: language -Subtag: zmq -Description: Mituku -Added: 2009-07-29 -%% -Type: language -Subtag: zmr -Description: Maranunggu -Added: 2009-07-29 -%% -Type: language -Subtag: zms -Description: Mbesa -Added: 2009-07-29 -%% -Type: language -Subtag: zmt -Description: Maringarr -Added: 2009-07-29 -%% -Type: language -Subtag: zmu -Description: Muruwari -Added: 2009-07-29 -%% -Type: language -Subtag: zmv -Description: Mbariman-Gudhinma -Added: 2009-07-29 -%% -Type: language -Subtag: zmw -Description: Mbo (Democratic Republic of Congo) -Added: 2009-07-29 -%% -Type: language -Subtag: zmx -Description: Bomitaba -Added: 2009-07-29 -%% -Type: language -Subtag: zmy -Description: Mariyedi -Added: 2009-07-29 -%% -Type: language -Subtag: zmz -Description: Mbandja -Added: 2009-07-29 -%% -Type: language -Subtag: zna -Description: Zan Gula -Added: 2009-07-29 -%% -Type: language -Subtag: znd -Description: Zande languages -Added: 2005-10-16 -Scope: collection -%% -Type: language -Subtag: zne -Description: Zande (individual language) -Added: 2009-07-29 -%% -Type: language -Subtag: zng -Description: Mang -Added: 2009-07-29 -%% -Type: language -Subtag: znk -Description: Manangkari -Added: 2009-07-29 -%% -Type: language -Subtag: zns -Description: Mangas -Added: 2009-07-29 -%% -Type: language -Subtag: zoc -Description: Copainalá Zoque -Added: 2009-07-29 -%% -Type: language -Subtag: zoh -Description: Chimalapa Zoque -Added: 2009-07-29 -%% -Type: language -Subtag: zom -Description: Zou -Added: 2009-07-29 -%% -Type: language -Subtag: zoo -Description: Asunción Mixtepec Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zoq -Description: Tabasco Zoque -Added: 2009-07-29 -%% -Type: language -Subtag: zor -Description: Rayón Zoque -Added: 2009-07-29 -%% -Type: language -Subtag: zos -Description: Francisco León Zoque -Added: 2009-07-29 -%% -Type: language -Subtag: zpa -Description: Lachiguiri Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpb -Description: Yautepec Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpc -Description: Choapan Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpd -Description: Southeastern Ixtlán Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpe -Description: Petapa Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpf -Description: San Pedro Quiatoni Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpg -Description: Guevea De Humboldt Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zph -Description: Totomachapan Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpi -Description: Santa María Quiegolani Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpj -Description: Quiavicuzas Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpk -Description: Tlacolulita Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpl -Description: Lachixío Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpm -Description: Mixtepec Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpn -Description: Santa Inés Yatzechi Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpo -Description: Amatlán Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpp -Description: El Alto Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpq -Description: Zoogocho Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpr -Description: Santiago Xanica Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zps -Description: Coatlán Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpt -Description: San Vicente Coatlán Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpu -Description: Yalálag Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpv -Description: Chichicapan Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpw -Description: Zaniza Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpx -Description: San Baltazar Loxicha Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpy -Description: Mazaltepec Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zpz -Description: Texmelucan Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zqe -Description: Qiubei Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zra -Description: Kara (Korea) -Added: 2009-07-29 -%% -Type: language -Subtag: zrg -Description: Mirgan -Added: 2009-07-29 -%% -Type: language -Subtag: zrn -Description: Zerenkel -Added: 2009-07-29 -%% -Type: language -Subtag: zro -Description: Záparo -Added: 2009-07-29 -%% -Type: language -Subtag: zrp -Description: Zarphatic -Added: 2009-07-29 -%% -Type: language -Subtag: zrs -Description: Mairasi -Added: 2009-07-29 -%% -Type: language -Subtag: zsa -Description: Sarasira -Added: 2009-07-29 -%% -Type: language -Subtag: zsk -Description: Kaskean -Added: 2009-07-29 -%% -Type: language -Subtag: zsl -Description: Zambian Sign Language -Added: 2009-07-29 -%% -Type: language -Subtag: zsm -Description: Standard Malay -Added: 2009-07-29 -Macrolanguage: ms -%% -Type: language -Subtag: zsr -Description: Southern Rincon Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zsu -Description: Sukurum -Added: 2009-07-29 -%% -Type: language -Subtag: zte -Description: Elotepec Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztg -Description: Xanaguía Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztl -Description: Lapaguía-Guivini Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztm -Description: San Agustín Mixtepec Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztn -Description: Santa Catarina Albarradas Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztp -Description: Loxicha Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztq -Description: Quioquitani-Quierí Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zts -Description: Tilquiapan Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztt -Description: Tejalapan Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztu -Description: Güilá Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: ztx -Description: Zaachila Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zty -Description: Yatee Zapotec -Added: 2009-07-29 -Macrolanguage: zap -%% -Type: language -Subtag: zua -Description: Zeem -Added: 2009-07-29 -%% -Type: language -Subtag: zuh -Description: Tokano -Added: 2009-07-29 -%% -Type: language -Subtag: zum -Description: Kumzari -Added: 2009-07-29 -%% -Type: language -Subtag: zun -Description: Zuni -Added: 2005-10-16 -%% -Type: language -Subtag: zuy -Description: Zumaya -Added: 2009-07-29 -%% -Type: language -Subtag: zwa -Description: Zay -Added: 2009-07-29 -%% -Type: language -Subtag: zxx -Description: No linguistic content -Description: Not applicable -Added: 2006-03-08 -Scope: special -%% -Type: language -Subtag: zyb -Description: Yongbei Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zyg -Description: Yang Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zyj -Description: Youjiang Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zyn -Description: Yongnan Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: language -Subtag: zyp -Description: Zyphe Chin -Added: 2009-07-29 -%% -Type: language -Subtag: zza -Description: Zaza -Description: Dimili -Description: Dimli (macrolanguage) -Description: Kirdki -Description: Kirmanjki (macrolanguage) -Description: Zazaki -Added: 2006-08-24 -Scope: macrolanguage -%% -Type: language -Subtag: zzj -Description: Zuojiang Zhuang -Added: 2009-07-29 -Macrolanguage: za -%% -Type: extlang -Subtag: aao -Description: Algerian Saharan Arabic -Added: 2009-07-29 -Preferred-Value: aao -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: abh -Description: Tajiki Arabic -Added: 2009-07-29 -Preferred-Value: abh -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: abv -Description: Baharna Arabic -Added: 2009-07-29 -Preferred-Value: abv -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: acm -Description: Mesopotamian Arabic -Added: 2009-07-29 -Preferred-Value: acm -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: acq -Description: Ta'izzi-Adeni Arabic -Added: 2009-07-29 -Preferred-Value: acq -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: acw -Description: Hijazi Arabic -Added: 2009-07-29 -Preferred-Value: acw -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: acx -Description: Omani Arabic -Added: 2009-07-29 -Preferred-Value: acx -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: acy -Description: Cypriot Arabic -Added: 2009-07-29 -Preferred-Value: acy -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: adf -Description: Dhofari Arabic -Added: 2009-07-29 -Preferred-Value: adf -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ads -Description: Adamorobe Sign Language -Added: 2009-07-29 -Preferred-Value: ads -Prefix: sgn -%% -Type: extlang -Subtag: aeb -Description: Tunisian Arabic -Added: 2009-07-29 -Preferred-Value: aeb -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: aec -Description: Saidi Arabic -Added: 2009-07-29 -Preferred-Value: aec -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: aed -Description: Argentine Sign Language -Added: 2009-07-29 -Preferred-Value: aed -Prefix: sgn -%% -Type: extlang -Subtag: aen -Description: Armenian Sign Language -Added: 2009-07-29 -Preferred-Value: aen -Prefix: sgn -%% -Type: extlang -Subtag: afb -Description: Gulf Arabic -Added: 2009-07-29 -Preferred-Value: afb -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: afg -Description: Afghan Sign Language -Added: 2009-07-29 -Preferred-Value: afg -Prefix: sgn -%% -Type: extlang -Subtag: ajp -Description: South Levantine Arabic -Added: 2009-07-29 -Preferred-Value: ajp -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: apc -Description: North Levantine Arabic -Added: 2009-07-29 -Preferred-Value: apc -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: apd -Description: Sudanese Arabic -Added: 2009-07-29 -Preferred-Value: apd -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: arb -Description: Standard Arabic -Added: 2009-07-29 -Preferred-Value: arb -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: arq -Description: Algerian Arabic -Added: 2009-07-29 -Preferred-Value: arq -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ars -Description: Najdi Arabic -Added: 2009-07-29 -Preferred-Value: ars -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ary -Description: Moroccan Arabic -Added: 2009-07-29 -Preferred-Value: ary -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: arz -Description: Egyptian Arabic -Added: 2009-07-29 -Preferred-Value: arz -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ase -Description: American Sign Language -Added: 2009-07-29 -Preferred-Value: ase -Prefix: sgn -%% -Type: extlang -Subtag: asf -Description: Australian Sign Language -Added: 2009-07-29 -Preferred-Value: asf -Prefix: sgn -%% -Type: extlang -Subtag: asp -Description: Algerian Sign Language -Added: 2009-07-29 -Preferred-Value: asp -Prefix: sgn -%% -Type: extlang -Subtag: asq -Description: Austrian Sign Language -Added: 2009-07-29 -Preferred-Value: asq -Prefix: sgn -%% -Type: extlang -Subtag: asw -Description: Australian Aborigines Sign Language -Added: 2009-07-29 -Preferred-Value: asw -Prefix: sgn -%% -Type: extlang -Subtag: auz -Description: Uzbeki Arabic -Added: 2009-07-29 -Preferred-Value: auz -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: avl -Description: Eastern Egyptian Bedawi Arabic -Added: 2009-07-29 -Preferred-Value: avl -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ayh -Description: Hadrami Arabic -Added: 2009-07-29 -Preferred-Value: ayh -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ayl -Description: Libyan Arabic -Added: 2009-07-29 -Preferred-Value: ayl -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ayn -Description: Sanaani Arabic -Added: 2009-07-29 -Preferred-Value: ayn -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ayp -Description: North Mesopotamian Arabic -Added: 2009-07-29 -Preferred-Value: ayp -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: bbz -Description: Babalia Creole Arabic -Added: 2009-07-29 -Preferred-Value: bbz -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: bfi -Description: British Sign Language -Added: 2009-07-29 -Preferred-Value: bfi -Prefix: sgn -%% -Type: extlang -Subtag: bfk -Description: Ban Khor Sign Language -Added: 2009-07-29 -Preferred-Value: bfk -Prefix: sgn -%% -Type: extlang -Subtag: bjn -Description: Banjar -Added: 2009-07-29 -Preferred-Value: bjn -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: bog -Description: Bamako Sign Language -Added: 2009-07-29 -Preferred-Value: bog -Prefix: sgn -%% -Type: extlang -Subtag: bqn -Description: Bulgarian Sign Language -Added: 2009-07-29 -Preferred-Value: bqn -Prefix: sgn -%% -Type: extlang -Subtag: bqy -Description: Bengkala Sign Language -Added: 2009-07-29 -Preferred-Value: bqy -Prefix: sgn -%% -Type: extlang -Subtag: btj -Description: Bacanese Malay -Added: 2009-07-29 -Preferred-Value: btj -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: bve -Description: Berau Malay -Added: 2009-07-29 -Preferred-Value: bve -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: bvl -Description: Bolivian Sign Language -Added: 2009-07-29 -Preferred-Value: bvl -Prefix: sgn -%% -Type: extlang -Subtag: bvu -Description: Bukit Malay -Added: 2009-07-29 -Preferred-Value: bvu -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: bzs -Description: Brazilian Sign Language -Added: 2009-07-29 -Preferred-Value: bzs -Prefix: sgn -%% -Type: extlang -Subtag: cdo -Description: Min Dong Chinese -Added: 2009-07-29 -Preferred-Value: cdo -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: cds -Description: Chadian Sign Language -Added: 2009-07-29 -Preferred-Value: cds -Prefix: sgn -%% -Type: extlang -Subtag: cjy -Description: Jinyu Chinese -Added: 2009-07-29 -Preferred-Value: cjy -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: cmn -Description: Mandarin Chinese -Added: 2009-07-29 -Preferred-Value: cmn -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: coa -Description: Cocos Islands Malay -Added: 2009-07-29 -Preferred-Value: coa -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: cpx -Description: Pu-Xian Chinese -Added: 2009-07-29 -Preferred-Value: cpx -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: csc -Description: Catalan Sign Language -Description: Lengua de señas catalana -Description: Llengua de Signes Catalana -Added: 2009-07-29 -Preferred-Value: csc -Prefix: sgn -%% -Type: extlang -Subtag: csd -Description: Chiangmai Sign Language -Added: 2009-07-29 -Preferred-Value: csd -Prefix: sgn -%% -Type: extlang -Subtag: cse -Description: Czech Sign Language -Added: 2009-07-29 -Preferred-Value: cse -Prefix: sgn -%% -Type: extlang -Subtag: csf -Description: Cuba Sign Language -Added: 2009-07-29 -Preferred-Value: csf -Prefix: sgn -%% -Type: extlang -Subtag: csg -Description: Chilean Sign Language -Added: 2009-07-29 -Preferred-Value: csg -Prefix: sgn -%% -Type: extlang -Subtag: csl -Description: Chinese Sign Language -Added: 2009-07-29 -Preferred-Value: csl -Prefix: sgn -%% -Type: extlang -Subtag: csn -Description: Colombian Sign Language -Added: 2009-07-29 -Preferred-Value: csn -Prefix: sgn -%% -Type: extlang -Subtag: csq -Description: Croatia Sign Language -Added: 2009-07-29 -Preferred-Value: csq -Prefix: sgn -%% -Type: extlang -Subtag: csr -Description: Costa Rican Sign Language -Added: 2009-07-29 -Preferred-Value: csr -Prefix: sgn -%% -Type: extlang -Subtag: czh -Description: Huizhou Chinese -Added: 2009-07-29 -Preferred-Value: czh -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: czo -Description: Min Zhong Chinese -Added: 2009-07-29 -Preferred-Value: czo -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: doq -Description: Dominican Sign Language -Added: 2009-07-29 -Preferred-Value: doq -Prefix: sgn -%% -Type: extlang -Subtag: dse -Description: Dutch Sign Language -Added: 2009-07-29 -Preferred-Value: dse -Prefix: sgn -%% -Type: extlang -Subtag: dsl -Description: Danish Sign Language -Added: 2009-07-29 -Preferred-Value: dsl -Prefix: sgn -%% -Type: extlang -Subtag: dup -Description: Duano -Added: 2009-07-29 -Preferred-Value: dup -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: ecs -Description: Ecuadorian Sign Language -Added: 2009-07-29 -Preferred-Value: ecs -Prefix: sgn -%% -Type: extlang -Subtag: esl -Description: Egypt Sign Language -Added: 2009-07-29 -Preferred-Value: esl -Prefix: sgn -%% -Type: extlang -Subtag: esn -Description: Salvadoran Sign Language -Added: 2009-07-29 -Preferred-Value: esn -Prefix: sgn -%% -Type: extlang -Subtag: eso -Description: Estonian Sign Language -Added: 2009-07-29 -Preferred-Value: eso -Prefix: sgn -%% -Type: extlang -Subtag: eth -Description: Ethiopian Sign Language -Added: 2009-07-29 -Preferred-Value: eth -Prefix: sgn -%% -Type: extlang -Subtag: fcs -Description: Quebec Sign Language -Added: 2009-07-29 -Preferred-Value: fcs -Prefix: sgn -%% -Type: extlang -Subtag: fse -Description: Finnish Sign Language -Added: 2009-07-29 -Preferred-Value: fse -Prefix: sgn -%% -Type: extlang -Subtag: fsl -Description: French Sign Language -Added: 2009-07-29 -Preferred-Value: fsl -Prefix: sgn -%% -Type: extlang -Subtag: fss -Description: Finland-Swedish Sign Language -Description: finlandssvenskt teckenspråk -Description: suomenruotsalainen viittomakieli -Added: 2009-07-29 -Preferred-Value: fss -Prefix: sgn -%% -Type: extlang -Subtag: gan -Description: Gan Chinese -Added: 2009-07-29 -Preferred-Value: gan -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: gds -Description: Ghandruk Sign Language -Added: 2012-08-12 -Preferred-Value: gds -Prefix: sgn -%% -Type: extlang -Subtag: gom -Description: Goan Konkani -Added: 2009-07-29 -Preferred-Value: gom -Prefix: kok -Macrolanguage: kok -%% -Type: extlang -Subtag: gse -Description: Ghanaian Sign Language -Added: 2009-07-29 -Preferred-Value: gse -Prefix: sgn -%% -Type: extlang -Subtag: gsg -Description: German Sign Language -Added: 2009-07-29 -Preferred-Value: gsg -Prefix: sgn -%% -Type: extlang -Subtag: gsm -Description: Guatemalan Sign Language -Added: 2009-07-29 -Preferred-Value: gsm -Prefix: sgn -%% -Type: extlang -Subtag: gss -Description: Greek Sign Language -Added: 2009-07-29 -Preferred-Value: gss -Prefix: sgn -%% -Type: extlang -Subtag: gus -Description: Guinean Sign Language -Added: 2009-07-29 -Preferred-Value: gus -Prefix: sgn -%% -Type: extlang -Subtag: hab -Description: Hanoi Sign Language -Added: 2009-07-29 -Preferred-Value: hab -Prefix: sgn -%% -Type: extlang -Subtag: haf -Description: Haiphong Sign Language -Added: 2009-07-29 -Preferred-Value: haf -Prefix: sgn -%% -Type: extlang -Subtag: hak -Description: Hakka Chinese -Added: 2009-07-29 -Preferred-Value: hak -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: hds -Description: Honduras Sign Language -Added: 2009-07-29 -Preferred-Value: hds -Prefix: sgn -%% -Type: extlang -Subtag: hji -Description: Haji -Added: 2009-07-29 -Preferred-Value: hji -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: hks -Description: Hong Kong Sign Language -Description: Heung Kong Sau Yue -Added: 2009-07-29 -Preferred-Value: hks -Prefix: sgn -%% -Type: extlang -Subtag: hos -Description: Ho Chi Minh City Sign Language -Added: 2009-07-29 -Preferred-Value: hos -Prefix: sgn -%% -Type: extlang -Subtag: hps -Description: Hawai'i Pidgin Sign Language -Added: 2009-07-29 -Preferred-Value: hps -Prefix: sgn -%% -Type: extlang -Subtag: hsh -Description: Hungarian Sign Language -Added: 2009-07-29 -Preferred-Value: hsh -Prefix: sgn -%% -Type: extlang -Subtag: hsl -Description: Hausa Sign Language -Added: 2009-07-29 -Preferred-Value: hsl -Prefix: sgn -%% -Type: extlang -Subtag: hsn -Description: Xiang Chinese -Added: 2009-07-29 -Preferred-Value: hsn -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: icl -Description: Icelandic Sign Language -Added: 2009-07-29 -Preferred-Value: icl -Prefix: sgn -%% -Type: extlang -Subtag: ils -Description: International Sign -Added: 2009-07-29 -Preferred-Value: ils -Prefix: sgn -%% -Type: extlang -Subtag: inl -Description: Indonesian Sign Language -Added: 2009-07-29 -Preferred-Value: inl -Prefix: sgn -%% -Type: extlang -Subtag: ins -Description: Indian Sign Language -Added: 2009-07-29 -Preferred-Value: ins -Prefix: sgn -%% -Type: extlang -Subtag: ise -Description: Italian Sign Language -Added: 2009-07-29 -Preferred-Value: ise -Prefix: sgn -%% -Type: extlang -Subtag: isg -Description: Irish Sign Language -Added: 2009-07-29 -Preferred-Value: isg -Prefix: sgn -%% -Type: extlang -Subtag: isr -Description: Israeli Sign Language -Added: 2009-07-29 -Preferred-Value: isr -Prefix: sgn -%% -Type: extlang -Subtag: jak -Description: Jakun -Added: 2009-07-29 -Preferred-Value: jak -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: jax -Description: Jambi Malay -Added: 2009-07-29 -Preferred-Value: jax -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: jcs -Description: Jamaican Country Sign Language -Added: 2009-07-29 -Preferred-Value: jcs -Prefix: sgn -%% -Type: extlang -Subtag: jhs -Description: Jhankot Sign Language -Added: 2009-07-29 -Preferred-Value: jhs -Prefix: sgn -%% -Type: extlang -Subtag: jls -Description: Jamaican Sign Language -Added: 2010-03-11 -Preferred-Value: jls -Prefix: sgn -%% -Type: extlang -Subtag: jos -Description: Jordanian Sign Language -Added: 2009-07-29 -Preferred-Value: jos -Prefix: sgn -%% -Type: extlang -Subtag: jsl -Description: Japanese Sign Language -Added: 2009-07-29 -Preferred-Value: jsl -Prefix: sgn -%% -Type: extlang -Subtag: jus -Description: Jumla Sign Language -Added: 2009-07-29 -Preferred-Value: jus -Prefix: sgn -%% -Type: extlang -Subtag: kgi -Description: Selangor Sign Language -Added: 2009-07-29 -Preferred-Value: kgi -Prefix: sgn -%% -Type: extlang -Subtag: knn -Description: Konkani (individual language) -Added: 2009-07-29 -Preferred-Value: knn -Prefix: kok -Macrolanguage: kok -%% -Type: extlang -Subtag: kvb -Description: Kubu -Added: 2009-07-29 -Preferred-Value: kvb -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: kvk -Description: Korean Sign Language -Added: 2009-07-29 -Preferred-Value: kvk -Prefix: sgn -%% -Type: extlang -Subtag: kvr -Description: Kerinci -Added: 2009-07-29 -Preferred-Value: kvr -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: kxd -Description: Brunei -Added: 2009-07-29 -Preferred-Value: kxd -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: lbs -Description: Libyan Sign Language -Added: 2009-07-29 -Preferred-Value: lbs -Prefix: sgn -%% -Type: extlang -Subtag: lce -Description: Loncong -Added: 2009-07-29 -Preferred-Value: lce -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: lcf -Description: Lubu -Added: 2009-07-29 -Preferred-Value: lcf -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: liw -Description: Col -Added: 2009-07-29 -Preferred-Value: liw -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: lls -Description: Lithuanian Sign Language -Added: 2009-07-29 -Preferred-Value: lls -Prefix: sgn -%% -Type: extlang -Subtag: lsg -Description: Lyons Sign Language -Added: 2009-07-29 -Preferred-Value: lsg -Prefix: sgn -%% -Type: extlang -Subtag: lsl -Description: Latvian Sign Language -Added: 2009-07-29 -Preferred-Value: lsl -Prefix: sgn -%% -Type: extlang -Subtag: lso -Description: Laos Sign Language -Added: 2009-07-29 -Preferred-Value: lso -Prefix: sgn -%% -Type: extlang -Subtag: lsp -Description: Panamanian Sign Language -Description: Lengua de Señas Panameñas -Added: 2009-07-29 -Preferred-Value: lsp -Prefix: sgn -%% -Type: extlang -Subtag: lst -Description: Trinidad and Tobago Sign Language -Added: 2009-07-29 -Preferred-Value: lst -Prefix: sgn -%% -Type: extlang -Subtag: lsy -Description: Mauritian Sign Language -Added: 2010-03-11 -Preferred-Value: lsy -Prefix: sgn -%% -Type: extlang -Subtag: ltg -Description: Latgalian -Added: 2010-03-11 -Preferred-Value: ltg -Prefix: lv -Macrolanguage: lv -%% -Type: extlang -Subtag: lvs -Description: Standard Latvian -Added: 2010-03-11 -Preferred-Value: lvs -Prefix: lv -Macrolanguage: lv -%% -Type: extlang -Subtag: lzh -Description: Literary Chinese -Added: 2009-07-29 -Preferred-Value: lzh -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: max -Description: North Moluccan Malay -Added: 2009-07-29 -Preferred-Value: max -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: mdl -Description: Maltese Sign Language -Added: 2009-07-29 -Preferred-Value: mdl -Prefix: sgn -%% -Type: extlang -Subtag: meo -Description: Kedah Malay -Added: 2009-07-29 -Preferred-Value: meo -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: mfa -Description: Pattani Malay -Added: 2009-07-29 -Preferred-Value: mfa -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: mfb -Description: Bangka -Added: 2009-07-29 -Preferred-Value: mfb -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: mfs -Description: Mexican Sign Language -Added: 2009-07-29 -Preferred-Value: mfs -Prefix: sgn -%% -Type: extlang -Subtag: min -Description: Minangkabau -Added: 2009-07-29 -Preferred-Value: min -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: mnp -Description: Min Bei Chinese -Added: 2009-07-29 -Preferred-Value: mnp -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: mqg -Description: Kota Bangun Kutai Malay -Added: 2009-07-29 -Preferred-Value: mqg -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: mre -Description: Martha's Vineyard Sign Language -Added: 2009-07-29 -Preferred-Value: mre -Prefix: sgn -%% -Type: extlang -Subtag: msd -Description: Yucatec Maya Sign Language -Added: 2009-07-29 -Preferred-Value: msd -Prefix: sgn -%% -Type: extlang -Subtag: msi -Description: Sabah Malay -Added: 2009-07-29 -Preferred-Value: msi -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: msr -Description: Mongolian Sign Language -Added: 2009-07-29 -Preferred-Value: msr -Prefix: sgn -%% -Type: extlang -Subtag: mui -Description: Musi -Added: 2009-07-29 -Preferred-Value: mui -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: mzc -Description: Madagascar Sign Language -Added: 2009-07-29 -Preferred-Value: mzc -Prefix: sgn -%% -Type: extlang -Subtag: mzg -Description: Monastic Sign Language -Added: 2009-07-29 -Preferred-Value: mzg -Prefix: sgn -%% -Type: extlang -Subtag: mzy -Description: Mozambican Sign Language -Added: 2009-07-29 -Preferred-Value: mzy -Prefix: sgn -%% -Type: extlang -Subtag: nan -Description: Min Nan Chinese -Added: 2009-07-29 -Preferred-Value: nan -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: nbs -Description: Namibian Sign Language -Added: 2009-07-29 -Preferred-Value: nbs -Prefix: sgn -%% -Type: extlang -Subtag: ncs -Description: Nicaraguan Sign Language -Added: 2009-07-29 -Preferred-Value: ncs -Prefix: sgn -%% -Type: extlang -Subtag: nsi -Description: Nigerian Sign Language -Added: 2009-07-29 -Preferred-Value: nsi -Prefix: sgn -%% -Type: extlang -Subtag: nsl -Description: Norwegian Sign Language -Added: 2009-07-29 -Preferred-Value: nsl -Prefix: sgn -%% -Type: extlang -Subtag: nsp -Description: Nepalese Sign Language -Added: 2009-07-29 -Preferred-Value: nsp -Prefix: sgn -%% -Type: extlang -Subtag: nsr -Description: Maritime Sign Language -Added: 2009-07-29 -Preferred-Value: nsr -Prefix: sgn -%% -Type: extlang -Subtag: nzs -Description: New Zealand Sign Language -Added: 2009-07-29 -Preferred-Value: nzs -Prefix: sgn -%% -Type: extlang -Subtag: okl -Description: Old Kentish Sign Language -Added: 2009-07-29 -Preferred-Value: okl -Prefix: sgn -%% -Type: extlang -Subtag: orn -Description: Orang Kanaq -Added: 2009-07-29 -Preferred-Value: orn -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: ors -Description: Orang Seletar -Added: 2009-07-29 -Preferred-Value: ors -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: pel -Description: Pekal -Added: 2009-07-29 -Preferred-Value: pel -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: pga -Description: Sudanese Creole Arabic -Added: 2009-07-29 -Preferred-Value: pga -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: pks -Description: Pakistan Sign Language -Added: 2009-07-29 -Preferred-Value: pks -Prefix: sgn -%% -Type: extlang -Subtag: prl -Description: Peruvian Sign Language -Added: 2009-07-29 -Preferred-Value: prl -Prefix: sgn -%% -Type: extlang -Subtag: prz -Description: Providencia Sign Language -Added: 2009-07-29 -Preferred-Value: prz -Prefix: sgn -%% -Type: extlang -Subtag: psc -Description: Persian Sign Language -Added: 2009-07-29 -Preferred-Value: psc -Prefix: sgn -%% -Type: extlang -Subtag: psd -Description: Plains Indian Sign Language -Added: 2009-07-29 -Preferred-Value: psd -Prefix: sgn -%% -Type: extlang -Subtag: pse -Description: Central Malay -Added: 2009-07-29 -Preferred-Value: pse -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: psg -Description: Penang Sign Language -Added: 2009-07-29 -Preferred-Value: psg -Prefix: sgn -%% -Type: extlang -Subtag: psl -Description: Puerto Rican Sign Language -Added: 2009-07-29 -Preferred-Value: psl -Prefix: sgn -%% -Type: extlang -Subtag: pso -Description: Polish Sign Language -Added: 2009-07-29 -Preferred-Value: pso -Prefix: sgn -%% -Type: extlang -Subtag: psp -Description: Philippine Sign Language -Added: 2009-07-29 -Preferred-Value: psp -Prefix: sgn -%% -Type: extlang -Subtag: psr -Description: Portuguese Sign Language -Added: 2009-07-29 -Preferred-Value: psr -Prefix: sgn -%% -Type: extlang -Subtag: pys -Description: Paraguayan Sign Language -Description: Lengua de Señas del Paraguay -Added: 2010-03-11 -Preferred-Value: pys -Prefix: sgn -%% -Type: extlang -Subtag: rms -Description: Romanian Sign Language -Added: 2009-07-29 -Preferred-Value: rms -Prefix: sgn -%% -Type: extlang -Subtag: rsi -Description: Rennellese Sign Language -Added: 2009-07-29 -Preferred-Value: rsi -Prefix: sgn -%% -Type: extlang -Subtag: rsl -Description: Russian Sign Language -Added: 2009-07-29 -Preferred-Value: rsl -Prefix: sgn -%% -Type: extlang -Subtag: sdl -Description: Saudi Arabian Sign Language -Added: 2009-07-29 -Preferred-Value: sdl -Prefix: sgn -%% -Type: extlang -Subtag: sfb -Description: Langue des signes de Belgique Francophone -Description: French Belgian Sign Language -Added: 2009-07-29 -Preferred-Value: sfb -Prefix: sgn -%% -Type: extlang -Subtag: sfs -Description: South African Sign Language -Added: 2009-07-29 -Preferred-Value: sfs -Prefix: sgn -%% -Type: extlang -Subtag: sgg -Description: Swiss-German Sign Language -Added: 2009-07-29 -Preferred-Value: sgg -Prefix: sgn -%% -Type: extlang -Subtag: sgx -Description: Sierra Leone Sign Language -Added: 2009-07-29 -Preferred-Value: sgx -Prefix: sgn -%% -Type: extlang -Subtag: shu -Description: Chadian Arabic -Added: 2009-07-29 -Preferred-Value: shu -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: slf -Description: Swiss-Italian Sign Language -Added: 2009-07-29 -Preferred-Value: slf -Prefix: sgn -%% -Type: extlang -Subtag: sls -Description: Singapore Sign Language -Added: 2009-07-29 -Preferred-Value: sls -Prefix: sgn -%% -Type: extlang -Subtag: sqk -Description: Albanian Sign Language -Added: 2012-08-12 -Preferred-Value: sqk -Prefix: sgn -%% -Type: extlang -Subtag: sqs -Description: Sri Lankan Sign Language -Added: 2009-07-29 -Preferred-Value: sqs -Prefix: sgn -%% -Type: extlang -Subtag: ssh -Description: Shihhi Arabic -Added: 2009-07-29 -Preferred-Value: ssh -Prefix: ar -Macrolanguage: ar -%% -Type: extlang -Subtag: ssp -Description: Spanish Sign Language -Added: 2009-07-29 -Preferred-Value: ssp -Prefix: sgn -%% -Type: extlang -Subtag: ssr -Description: Swiss-French Sign Language -Added: 2009-07-29 -Preferred-Value: ssr -Prefix: sgn -%% -Type: extlang -Subtag: svk -Description: Slovakian Sign Language -Added: 2009-07-29 -Preferred-Value: svk -Prefix: sgn -%% -Type: extlang -Subtag: swc -Description: Congo Swahili -Added: 2009-07-29 -Preferred-Value: swc -Prefix: sw -Macrolanguage: sw -%% -Type: extlang -Subtag: swh -Description: Swahili (individual language) -Description: Kiswahili -Added: 2009-07-29 -Preferred-Value: swh -Prefix: sw -Macrolanguage: sw -%% -Type: extlang -Subtag: swl -Description: Swedish Sign Language -Added: 2009-07-29 -Preferred-Value: swl -Prefix: sgn -%% -Type: extlang -Subtag: syy -Description: Al-Sayyid Bedouin Sign Language -Added: 2009-07-29 -Preferred-Value: syy -Prefix: sgn -%% -Type: extlang -Subtag: tmw -Description: Temuan -Added: 2009-07-29 -Preferred-Value: tmw -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: tse -Description: Tunisian Sign Language -Added: 2009-07-29 -Preferred-Value: tse -Prefix: sgn -%% -Type: extlang -Subtag: tsm -Description: Turkish Sign Language -Description: Türk İşaret Dili -Added: 2009-07-29 -Preferred-Value: tsm -Prefix: sgn -%% -Type: extlang -Subtag: tsq -Description: Thai Sign Language -Added: 2009-07-29 -Preferred-Value: tsq -Prefix: sgn -%% -Type: extlang -Subtag: tss -Description: Taiwan Sign Language -Added: 2009-07-29 -Preferred-Value: tss -Prefix: sgn -%% -Type: extlang -Subtag: tsy -Description: Tebul Sign Language -Added: 2009-07-29 -Preferred-Value: tsy -Prefix: sgn -%% -Type: extlang -Subtag: tza -Description: Tanzanian Sign Language -Added: 2009-07-29 -Preferred-Value: tza -Prefix: sgn -%% -Type: extlang -Subtag: ugn -Description: Ugandan Sign Language -Added: 2009-07-29 -Preferred-Value: ugn -Prefix: sgn -%% -Type: extlang -Subtag: ugy -Description: Uruguayan Sign Language -Added: 2009-07-29 -Preferred-Value: ugy -Prefix: sgn -%% -Type: extlang -Subtag: ukl -Description: Ukrainian Sign Language -Added: 2009-07-29 -Preferred-Value: ukl -Prefix: sgn -%% -Type: extlang -Subtag: uks -Description: Urubú-Kaapor Sign Language -Description: Kaapor Sign Language -Added: 2009-07-29 -Preferred-Value: uks -Prefix: sgn -%% -Type: extlang -Subtag: urk -Description: Urak Lawoi' -Added: 2009-07-29 -Preferred-Value: urk -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: uzn -Description: Northern Uzbek -Added: 2009-07-29 -Preferred-Value: uzn -Prefix: uz -Macrolanguage: uz -%% -Type: extlang -Subtag: uzs -Description: Southern Uzbek -Added: 2009-07-29 -Preferred-Value: uzs -Prefix: uz -Macrolanguage: uz -%% -Type: extlang -Subtag: vgt -Description: Vlaamse Gebarentaal -Description: Flemish Sign Language -Added: 2009-07-29 -Preferred-Value: vgt -Prefix: sgn -%% -Type: extlang -Subtag: vkk -Description: Kaur -Added: 2009-07-29 -Preferred-Value: vkk -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: vkt -Description: Tenggarong Kutai Malay -Added: 2009-07-29 -Preferred-Value: vkt -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: vsi -Description: Moldova Sign Language -Added: 2009-07-29 -Preferred-Value: vsi -Prefix: sgn -%% -Type: extlang -Subtag: vsl -Description: Venezuelan Sign Language -Added: 2009-07-29 -Preferred-Value: vsl -Prefix: sgn -%% -Type: extlang -Subtag: vsv -Description: Valencian Sign Language -Description: Llengua de signes valenciana -Added: 2009-07-29 -Preferred-Value: vsv -Prefix: sgn -%% -Type: extlang -Subtag: wuu -Description: Wu Chinese -Added: 2009-07-29 -Preferred-Value: wuu -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: xki -Description: Kenyan Sign Language -Added: 2009-07-29 -Preferred-Value: xki -Prefix: sgn -%% -Type: extlang -Subtag: xml -Description: Malaysian Sign Language -Added: 2009-07-29 -Preferred-Value: xml -Prefix: sgn -%% -Type: extlang -Subtag: xmm -Description: Manado Malay -Added: 2009-07-29 -Preferred-Value: xmm -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: xms -Description: Moroccan Sign Language -Added: 2009-07-29 -Preferred-Value: xms -Prefix: sgn -%% -Type: extlang -Subtag: yds -Description: Yiddish Sign Language -Added: 2009-07-29 -Preferred-Value: yds -Prefix: sgn -%% -Type: extlang -Subtag: ysl -Description: Yugoslavian Sign Language -Added: 2009-07-29 -Preferred-Value: ysl -Prefix: sgn -%% -Type: extlang -Subtag: yue -Description: Yue Chinese -Added: 2009-07-29 -Preferred-Value: yue -Prefix: zh -Macrolanguage: zh -%% -Type: extlang -Subtag: zib -Description: Zimbabwe Sign Language -Added: 2009-07-29 -Preferred-Value: zib -Prefix: sgn -%% -Type: extlang -Subtag: zlm -Description: Malay (individual language) -Added: 2009-07-29 -Preferred-Value: zlm -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: zmi -Description: Negeri Sembilan Malay -Added: 2009-07-29 -Preferred-Value: zmi -Prefix: ms -Macrolanguage: ms -%% -Type: extlang -Subtag: zsl -Description: Zambian Sign Language -Added: 2009-07-29 -Preferred-Value: zsl -Prefix: sgn -%% -Type: extlang -Subtag: zsm -Description: Standard Malay -Added: 2009-07-29 -Preferred-Value: zsm -Prefix: ms -Macrolanguage: ms -%% -Type: script -Subtag: Afak -Description: Afaka -Added: 2011-01-07 -%% -Type: script -Subtag: Aghb -Description: Caucasian Albanian -Added: 2012-11-01 -%% -Type: script -Subtag: Arab -Description: Arabic -Added: 2005-10-16 -%% -Type: script -Subtag: Armi -Description: Imperial Aramaic -Added: 2007-12-05 -%% -Type: script -Subtag: Armn -Description: Armenian -Added: 2005-10-16 -%% -Type: script -Subtag: Avst -Description: Avestan -Added: 2007-07-28 -%% -Type: script -Subtag: Bali -Description: Balinese -Added: 2005-10-16 -%% -Type: script -Subtag: Bamu -Description: Bamum -Added: 2009-07-30 -%% -Type: script -Subtag: Bass -Description: Bassa Vah -Added: 2010-04-10 -%% -Type: script -Subtag: Batk -Description: Batak -Added: 2005-10-16 -%% -Type: script -Subtag: Beng -Description: Bengali -Added: 2005-10-16 -%% -Type: script -Subtag: Blis -Description: Blissymbols -Added: 2005-10-16 -%% -Type: script -Subtag: Bopo -Description: Bopomofo -Added: 2005-10-16 -%% -Type: script -Subtag: Brah -Description: Brahmi -Added: 2005-10-16 -%% -Type: script -Subtag: Brai -Description: Braille -Added: 2005-10-16 -%% -Type: script -Subtag: Bugi -Description: Buginese -Added: 2005-10-16 -%% -Type: script -Subtag: Buhd -Description: Buhid -Added: 2005-10-16 -%% -Type: script -Subtag: Cakm -Description: Chakma -Added: 2007-12-05 -%% -Type: script -Subtag: Cans -Description: Unified Canadian Aboriginal Syllabics -Added: 2005-10-16 -%% -Type: script -Subtag: Cari -Description: Carian -Added: 2006-07-21 -%% -Type: script -Subtag: Cham -Description: Cham -Added: 2005-10-16 -%% -Type: script -Subtag: Cher -Description: Cherokee -Added: 2005-10-16 -%% -Type: script -Subtag: Cirt -Description: Cirth -Added: 2005-10-16 -%% -Type: script -Subtag: Copt -Description: Coptic -Added: 2005-10-16 -%% -Type: script -Subtag: Cprt -Description: Cypriot -Added: 2005-10-16 -%% -Type: script -Subtag: Cyrl -Description: Cyrillic -Added: 2005-10-16 -%% -Type: script -Subtag: Cyrs -Description: Cyrillic (Old Church Slavonic variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Deva -Description: Devanagari -Description: Nagari -Added: 2005-10-16 -%% -Type: script -Subtag: Dsrt -Description: Deseret -Description: Mormon -Added: 2005-10-16 -%% -Type: script -Subtag: Dupl -Description: Duployan shorthand -Description: Duployan stenography -Added: 2010-08-16 -%% -Type: script -Subtag: Egyd -Description: Egyptian demotic -Added: 2005-10-16 -%% -Type: script -Subtag: Egyh -Description: Egyptian hieratic -Added: 2005-10-16 -%% -Type: script -Subtag: Egyp -Description: Egyptian hieroglyphs -Added: 2005-10-16 -%% -Type: script -Subtag: Elba -Description: Elbasan -Added: 2010-08-16 -%% -Type: script -Subtag: Ethi -Description: Ethiopic -Description: Geʻez -Description: Ge'ez -Added: 2005-10-16 -%% -Type: script -Subtag: Geok -Description: Khutsuri (Asomtavruli and Nuskhuri) -Added: 2005-10-16 -%% -Type: script -Subtag: Geor -Description: Georgian (Mkhedruli) -Added: 2005-10-16 -%% -Type: script -Subtag: Glag -Description: Glagolitic -Added: 2005-10-16 -%% -Type: script -Subtag: Goth -Description: Gothic -Added: 2005-10-16 -%% -Type: script -Subtag: Gran -Description: Grantha -Added: 2009-12-09 -%% -Type: script -Subtag: Grek -Description: Greek -Added: 2005-10-16 -%% -Type: script -Subtag: Gujr -Description: Gujarati -Added: 2005-10-16 -%% -Type: script -Subtag: Guru -Description: Gurmukhi -Added: 2005-10-16 -%% -Type: script -Subtag: Hang -Description: Hangul -Description: Hangŭl -Description: Hangeul -Added: 2005-10-16 -%% -Type: script -Subtag: Hani -Description: Han -Description: Hanzi -Description: Kanji -Description: Hanja -Added: 2005-10-16 -%% -Type: script -Subtag: Hano -Description: Hanunoo -Description: Hanunóo -Added: 2005-10-16 -%% -Type: script -Subtag: Hans -Description: Han (Simplified variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Hant -Description: Han (Traditional variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Hebr -Description: Hebrew -Added: 2005-10-16 -%% -Type: script -Subtag: Hira -Description: Hiragana -Added: 2005-10-16 -%% -Type: script -Subtag: Hluw -Description: Anatolian Hieroglyphs -Description: Luwian Hieroglyphs -Description: Hittite Hieroglyphs -Added: 2011-12-28 -%% -Type: script -Subtag: Hmng -Description: Pahawh Hmong -Added: 2005-10-16 -%% -Type: script -Subtag: Hrkt -Description: Japanese syllabaries (alias for Hiragana + Katakana) -Added: 2005-10-16 -%% -Type: script -Subtag: Hung -Description: Old Hungarian -Description: Hungarian Runic -Added: 2005-10-16 -%% -Type: script -Subtag: Inds -Description: Indus -Description: Harappan -Added: 2005-10-16 -%% -Type: script -Subtag: Ital -Description: Old Italic (Etruscan, Oscan, etc.) -Added: 2005-10-16 -%% -Type: script -Subtag: Java -Description: Javanese -Added: 2005-10-16 -%% -Type: script -Subtag: Jpan -Description: Japanese (alias for Han + Hiragana + Katakana) -Added: 2006-07-21 -%% -Type: script -Subtag: Jurc -Description: Jurchen -Added: 2011-01-07 -%% -Type: script -Subtag: Kali -Description: Kayah Li -Added: 2005-10-16 -%% -Type: script -Subtag: Kana -Description: Katakana -Added: 2005-10-16 -%% -Type: script -Subtag: Khar -Description: Kharoshthi -Added: 2005-10-16 -%% -Type: script -Subtag: Khmr -Description: Khmer -Added: 2005-10-16 -%% -Type: script -Subtag: Khoj -Description: Khojki -Added: 2011-08-16 -%% -Type: script -Subtag: Knda -Description: Kannada -Added: 2005-10-16 -%% -Type: script -Subtag: Kore -Description: Korean (alias for Hangul + Han) -Added: 2007-07-05 -%% -Type: script -Subtag: Kpel -Description: Kpelle -Added: 2010-04-10 -%% -Type: script -Subtag: Kthi -Description: Kaithi -Added: 2007-12-05 -%% -Type: script -Subtag: Lana -Description: Tai Tham -Description: Lanna -Added: 2006-07-21 -%% -Type: script -Subtag: Laoo -Description: Lao -Added: 2005-10-16 -%% -Type: script -Subtag: Latf -Description: Latin (Fraktur variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Latg -Description: Latin (Gaelic variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Latn -Description: Latin -Added: 2005-10-16 -%% -Type: script -Subtag: Lepc -Description: Lepcha -Description: Róng -Added: 2005-10-16 -%% -Type: script -Subtag: Limb -Description: Limbu -Added: 2005-10-16 -%% -Type: script -Subtag: Lina -Description: Linear A -Added: 2005-10-16 -%% -Type: script -Subtag: Linb -Description: Linear B -Added: 2005-10-16 -%% -Type: script -Subtag: Lisu -Description: Lisu -Description: Fraser -Added: 2009-03-13 -%% -Type: script -Subtag: Loma -Description: Loma -Added: 2010-04-10 -%% -Type: script -Subtag: Lyci -Description: Lycian -Added: 2006-07-21 -%% -Type: script -Subtag: Lydi -Description: Lydian -Added: 2006-07-21 -%% -Type: script -Subtag: Mahj -Description: Mahajani -Added: 2012-11-01 -%% -Type: script -Subtag: Mand -Description: Mandaic -Description: Mandaean -Added: 2005-10-16 -%% -Type: script -Subtag: Mani -Description: Manichaean -Added: 2007-07-28 -%% -Type: script -Subtag: Maya -Description: Mayan hieroglyphs -Added: 2005-10-16 -%% -Type: script -Subtag: Mend -Description: Mende -Added: 2010-04-10 -%% -Type: script -Subtag: Merc -Description: Meroitic Cursive -Added: 2009-12-09 -%% -Type: script -Subtag: Mero -Description: Meroitic Hieroglyphs -Added: 2005-10-16 -%% -Type: script -Subtag: Mlym -Description: Malayalam -Added: 2005-10-16 -%% -Type: script -Subtag: Mong -Description: Mongolian -Added: 2005-10-16 -%% -Type: script -Subtag: Moon -Description: Moon -Description: Moon code -Description: Moon script -Description: Moon type -Added: 2007-01-26 -%% -Type: script -Subtag: Mroo -Description: Mro -Description: Mru -Added: 2011-01-07 -%% -Type: script -Subtag: Mtei -Description: Meitei Mayek -Description: Meithei -Description: Meetei -Added: 2007-01-26 -%% -Type: script -Subtag: Mymr -Description: Myanmar -Description: Burmese -Added: 2005-10-16 -%% -Type: script -Subtag: Narb -Description: Old North Arabian -Description: Ancient North Arabian -Added: 2010-04-10 -%% -Type: script -Subtag: Nbat -Description: Nabataean -Added: 2010-04-10 -%% -Type: script -Subtag: Nkgb -Description: Nakhi Geba -Description: 'Na-'Khi ²Ggŏ-¹baw -Description: Naxi Geba -Added: 2009-03-13 -%% -Type: script -Subtag: Nkoo -Description: N’Ko -Description: N'Ko -Added: 2005-10-16 -%% -Type: script -Subtag: Nshu -Description: Nüshu -Added: 2011-01-07 -%% -Type: script -Subtag: Ogam -Description: Ogham -Added: 2005-10-16 -%% -Type: script -Subtag: Olck -Description: Ol Chiki -Description: Ol Cemet' -Description: Ol -Description: Santali -Added: 2006-07-21 -%% -Type: script -Subtag: Orkh -Description: Old Turkic -Description: Orkhon Runic -Added: 2009-07-30 -%% -Type: script -Subtag: Orya -Description: Oriya -Added: 2005-10-16 -%% -Type: script -Subtag: Osma -Description: Osmanya -Added: 2005-10-16 -%% -Type: script -Subtag: Palm -Description: Palmyrene -Added: 2010-04-10 -%% -Type: script -Subtag: Perm -Description: Old Permic -Added: 2005-10-16 -%% -Type: script -Subtag: Phag -Description: Phags-pa -Added: 2005-10-16 -%% -Type: script -Subtag: Phli -Description: Inscriptional Pahlavi -Added: 2007-12-05 -%% -Type: script -Subtag: Phlp -Description: Psalter Pahlavi -Added: 2007-12-05 -%% -Type: script -Subtag: Phlv -Description: Book Pahlavi -Added: 2007-07-28 -%% -Type: script -Subtag: Phnx -Description: Phoenician -Added: 2005-10-16 -%% -Type: script -Subtag: Plrd -Description: Miao -Description: Pollard -Added: 2005-10-16 -%% -Type: script -Subtag: Prti -Description: Inscriptional Parthian -Added: 2007-12-05 -%% -Type: script -Subtag: Qaaa..Qabx -Description: Private use -Added: 2005-10-16 -%% -Type: script -Subtag: Rjng -Description: Rejang -Description: Redjang -Description: Kaganga -Added: 2006-10-17 -%% -Type: script -Subtag: Roro -Description: Rongorongo -Added: 2005-10-16 -%% -Type: script -Subtag: Runr -Description: Runic -Added: 2005-10-16 -%% -Type: script -Subtag: Samr -Description: Samaritan -Added: 2007-07-28 -%% -Type: script -Subtag: Sara -Description: Sarati -Added: 2005-10-16 -%% -Type: script -Subtag: Sarb -Description: Old South Arabian -Added: 2009-07-30 -%% -Type: script -Subtag: Saur -Description: Saurashtra -Added: 2006-07-21 -%% -Type: script -Subtag: Sgnw -Description: SignWriting -Added: 2006-10-17 -%% -Type: script -Subtag: Shaw -Description: Shavian -Description: Shaw -Added: 2005-10-16 -%% -Type: script -Subtag: Shrd -Description: Sharada -Description: Śāradā -Added: 2011-01-07 -%% -Type: script -Subtag: Sind -Description: Khudawadi -Description: Sindhi -Added: 2010-08-16 -%% -Type: script -Subtag: Sinh -Description: Sinhala -Added: 2005-10-16 -%% -Type: script -Subtag: Sora -Description: Sora Sompeng -Added: 2011-01-07 -%% -Type: script -Subtag: Sund -Description: Sundanese -Added: 2006-07-21 -%% -Type: script -Subtag: Sylo -Description: Syloti Nagri -Added: 2005-10-16 -%% -Type: script -Subtag: Syrc -Description: Syriac -Added: 2005-10-16 -%% -Type: script -Subtag: Syre -Description: Syriac (Estrangelo variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Syrj -Description: Syriac (Western variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Syrn -Description: Syriac (Eastern variant) -Added: 2005-10-16 -%% -Type: script -Subtag: Tagb -Description: Tagbanwa -Added: 2005-10-16 -%% -Type: script -Subtag: Takr -Description: Takri -Description: Ṭākrī -Description: Ṭāṅkrī -Added: 2011-01-07 -%% -Type: script -Subtag: Tale -Description: Tai Le -Added: 2005-10-16 -%% -Type: script -Subtag: Talu -Description: New Tai Lue -Added: 2005-10-16 -%% -Type: script -Subtag: Taml -Description: Tamil -Added: 2005-10-16 -%% -Type: script -Subtag: Tang -Description: Tangut -Added: 2011-01-07 -%% -Type: script -Subtag: Tavt -Description: Tai Viet -Added: 2007-12-05 -%% -Type: script -Subtag: Telu -Description: Telugu -Added: 2005-10-16 -%% -Type: script -Subtag: Teng -Description: Tengwar -Added: 2005-10-16 -%% -Type: script -Subtag: Tfng -Description: Tifinagh -Description: Berber -Added: 2005-10-16 -%% -Type: script -Subtag: Tglg -Description: Tagalog -Description: Baybayin -Description: Alibata -Added: 2005-10-16 -%% -Type: script -Subtag: Thaa -Description: Thaana -Added: 2005-10-16 -%% -Type: script -Subtag: Thai -Description: Thai -Added: 2005-10-16 -%% -Type: script -Subtag: Tibt -Description: Tibetan -Added: 2005-10-16 -%% -Type: script -Subtag: Tirh -Description: Tirhuta -Added: 2011-08-16 -%% -Type: script -Subtag: Ugar -Description: Ugaritic -Added: 2005-10-16 -%% -Type: script -Subtag: Vaii -Description: Vai -Added: 2005-10-16 -%% -Type: script -Subtag: Visp -Description: Visible Speech -Added: 2005-10-16 -%% -Type: script -Subtag: Wara -Description: Warang Citi -Description: Varang Kshiti -Added: 2009-12-09 -%% -Type: script -Subtag: Wole -Description: Woleai -Added: 2011-01-07 -%% -Type: script -Subtag: Xpeo -Description: Old Persian -Added: 2005-10-16 -%% -Type: script -Subtag: Xsux -Description: Sumero-Akkadian cuneiform -Added: 2005-10-16 -%% -Type: script -Subtag: Yiii -Description: Yi -Added: 2005-10-16 -%% -Type: script -Subtag: Zinh -Description: Code for inherited script -Added: 2009-04-03 -Comments: Not intended for use as a language subtag -%% -Type: script -Subtag: Zmth -Description: Mathematical notation -Added: 2007-12-05 -%% -Type: script -Subtag: Zsym -Description: Symbols -Added: 2007-12-05 -%% -Type: script -Subtag: Zxxx -Description: Code for unwritten documents -Added: 2005-10-16 -%% -Type: script -Subtag: Zyyy -Description: Code for undetermined script -Added: 2005-10-16 -%% -Type: script -Subtag: Zzzz -Description: Code for uncoded script -Added: 2005-10-16 -%% -Type: region -Subtag: AA -Description: Private use -Added: 2005-10-16 -%% -Type: region -Subtag: AC -Description: Ascension Island -Added: 2009-07-29 -%% -Type: region -Subtag: AD -Description: Andorra -Added: 2005-10-16 -%% -Type: region -Subtag: AE -Description: United Arab Emirates -Added: 2005-10-16 -%% -Type: region -Subtag: AF -Description: Afghanistan -Added: 2005-10-16 -%% -Type: region -Subtag: AG -Description: Antigua and Barbuda -Added: 2005-10-16 -%% -Type: region -Subtag: AI -Description: Anguilla -Added: 2005-10-16 -%% -Type: region -Subtag: AL -Description: Albania -Added: 2005-10-16 -%% -Type: region -Subtag: AM -Description: Armenia -Added: 2005-10-16 -%% -Type: region -Subtag: AN -Description: Netherlands Antilles -Added: 2005-10-16 -Deprecated: 2011-01-07 -Comments: see BQ, CW, and SX -%% -Type: region -Subtag: AO -Description: Angola -Added: 2005-10-16 -%% -Type: region -Subtag: AQ -Description: Antarctica -Added: 2005-10-16 -%% -Type: region -Subtag: AR -Description: Argentina -Added: 2005-10-16 -%% -Type: region -Subtag: AS -Description: American Samoa -Added: 2005-10-16 -%% -Type: region -Subtag: AT -Description: Austria -Added: 2005-10-16 -%% -Type: region -Subtag: AU -Description: Australia -Added: 2005-10-16 -%% -Type: region -Subtag: AW -Description: Aruba -Added: 2005-10-16 -%% -Type: region -Subtag: AX -Description: Åland Islands -Added: 2005-10-16 -%% -Type: region -Subtag: AZ -Description: Azerbaijan -Added: 2005-10-16 -%% -Type: region -Subtag: BA -Description: Bosnia and Herzegovina -Added: 2005-10-16 -%% -Type: region -Subtag: BB -Description: Barbados -Added: 2005-10-16 -%% -Type: region -Subtag: BD -Description: Bangladesh -Added: 2005-10-16 -%% -Type: region -Subtag: BE -Description: Belgium -Added: 2005-10-16 -%% -Type: region -Subtag: BF -Description: Burkina Faso -Added: 2005-10-16 -%% -Type: region -Subtag: BG -Description: Bulgaria -Added: 2005-10-16 -%% -Type: region -Subtag: BH -Description: Bahrain -Added: 2005-10-16 -%% -Type: region -Subtag: BI -Description: Burundi -Added: 2005-10-16 -%% -Type: region -Subtag: BJ -Description: Benin -Added: 2005-10-16 -%% -Type: region -Subtag: BL -Description: Saint Barthélemy -Added: 2007-11-02 -%% -Type: region -Subtag: BM -Description: Bermuda -Added: 2005-10-16 -%% -Type: region -Subtag: BN -Description: Brunei Darussalam -Added: 2005-10-16 -%% -Type: region -Subtag: BO -Description: Bolivia -Added: 2005-10-16 -%% -Type: region -Subtag: BQ -Description: Bonaire, Sint Eustatius and Saba -Added: 2011-01-07 -%% -Type: region -Subtag: BR -Description: Brazil -Added: 2005-10-16 -%% -Type: region -Subtag: BS -Description: Bahamas -Added: 2005-10-16 -%% -Type: region -Subtag: BT -Description: Bhutan -Added: 2005-10-16 -%% -Type: region -Subtag: BU -Description: Burma -Added: 2005-10-16 -Deprecated: 1989-12-05 -Preferred-Value: MM -%% -Type: region -Subtag: BV -Description: Bouvet Island -Added: 2005-10-16 -%% -Type: region -Subtag: BW -Description: Botswana -Added: 2005-10-16 -%% -Type: region -Subtag: BY -Description: Belarus -Added: 2005-10-16 -%% -Type: region -Subtag: BZ -Description: Belize -Added: 2005-10-16 -%% -Type: region -Subtag: CA -Description: Canada -Added: 2005-10-16 -%% -Type: region -Subtag: CC -Description: Cocos (Keeling) Islands -Added: 2005-10-16 -%% -Type: region -Subtag: CD -Description: The Democratic Republic of the Congo -Added: 2005-10-16 -%% -Type: region -Subtag: CF -Description: Central African Republic -Added: 2005-10-16 -%% -Type: region -Subtag: CG -Description: Congo -Added: 2005-10-16 -%% -Type: region -Subtag: CH -Description: Switzerland -Added: 2005-10-16 -%% -Type: region -Subtag: CI -Description: Côte d'Ivoire -Added: 2005-10-16 -%% -Type: region -Subtag: CK -Description: Cook Islands -Added: 2005-10-16 -%% -Type: region -Subtag: CL -Description: Chile -Added: 2005-10-16 -%% -Type: region -Subtag: CM -Description: Cameroon -Added: 2005-10-16 -%% -Type: region -Subtag: CN -Description: China -Added: 2005-10-16 -%% -Type: region -Subtag: CO -Description: Colombia -Added: 2005-10-16 -%% -Type: region -Subtag: CP -Description: Clipperton Island -Added: 2009-07-29 -%% -Type: region -Subtag: CR -Description: Costa Rica -Added: 2005-10-16 -%% -Type: region -Subtag: CS -Description: Serbia and Montenegro -Added: 2005-10-16 -Deprecated: 2006-10-05 -Comments: see RS for Serbia or ME for Montenegro -%% -Type: region -Subtag: CU -Description: Cuba -Added: 2005-10-16 -%% -Type: region -Subtag: CV -Description: Cape Verde -Added: 2005-10-16 -%% -Type: region -Subtag: CW -Description: Curaçao -Added: 2011-01-07 -%% -Type: region -Subtag: CX -Description: Christmas Island -Added: 2005-10-16 -%% -Type: region -Subtag: CY -Description: Cyprus -Added: 2005-10-16 -%% -Type: region -Subtag: CZ -Description: Czech Republic -Added: 2005-10-16 -%% -Type: region -Subtag: DD -Description: German Democratic Republic -Added: 2005-10-16 -Deprecated: 1990-10-30 -Preferred-Value: DE -%% -Type: region -Subtag: DE -Description: Germany -Added: 2005-10-16 -%% -Type: region -Subtag: DG -Description: Diego Garcia -Added: 2009-07-29 -%% -Type: region -Subtag: DJ -Description: Djibouti -Added: 2005-10-16 -%% -Type: region -Subtag: DK -Description: Denmark -Added: 2005-10-16 -%% -Type: region -Subtag: DM -Description: Dominica -Added: 2005-10-16 -%% -Type: region -Subtag: DO -Description: Dominican Republic -Added: 2005-10-16 -%% -Type: region -Subtag: DZ -Description: Algeria -Added: 2005-10-16 -%% -Type: region -Subtag: EA -Description: Ceuta, Melilla -Added: 2009-07-29 -%% -Type: region -Subtag: EC -Description: Ecuador -Added: 2005-10-16 -%% -Type: region -Subtag: EE -Description: Estonia -Added: 2005-10-16 -%% -Type: region -Subtag: EG -Description: Egypt -Added: 2005-10-16 -%% -Type: region -Subtag: EH -Description: Western Sahara -Added: 2005-10-16 -%% -Type: region -Subtag: ER -Description: Eritrea -Added: 2005-10-16 -%% -Type: region -Subtag: ES -Description: Spain -Added: 2005-10-16 -%% -Type: region -Subtag: ET -Description: Ethiopia -Added: 2005-10-16 -%% -Type: region -Subtag: EU -Description: European Union -Added: 2009-07-29 -%% -Type: region -Subtag: FI -Description: Finland -Added: 2005-10-16 -%% -Type: region -Subtag: FJ -Description: Fiji -Added: 2005-10-16 -%% -Type: region -Subtag: FK -Description: Falkland Islands (Malvinas) -Added: 2005-10-16 -%% -Type: region -Subtag: FM -Description: Federated States of Micronesia -Added: 2005-10-16 -%% -Type: region -Subtag: FO -Description: Faroe Islands -Added: 2005-10-16 -%% -Type: region -Subtag: FR -Description: France -Added: 2005-10-16 -%% -Type: region -Subtag: FX -Description: Metropolitan France -Added: 2005-10-16 -Deprecated: 1997-07-14 -Preferred-Value: FR -%% -Type: region -Subtag: GA -Description: Gabon -Added: 2005-10-16 -%% -Type: region -Subtag: GB -Description: United Kingdom -Added: 2005-10-16 -Comments: as of 2006-03-29 GB no longer includes the Channel Islands and - Isle of Man; see GG, JE, IM -%% -Type: region -Subtag: GD -Description: Grenada -Added: 2005-10-16 -%% -Type: region -Subtag: GE -Description: Georgia -Added: 2005-10-16 -%% -Type: region -Subtag: GF -Description: French Guiana -Added: 2005-10-16 -%% -Type: region -Subtag: GG -Description: Guernsey -Added: 2006-03-29 -%% -Type: region -Subtag: GH -Description: Ghana -Added: 2005-10-16 -%% -Type: region -Subtag: GI -Description: Gibraltar -Added: 2005-10-16 -%% -Type: region -Subtag: GL -Description: Greenland -Added: 2005-10-16 -%% -Type: region -Subtag: GM -Description: Gambia -Added: 2005-10-16 -%% -Type: region -Subtag: GN -Description: Guinea -Added: 2005-10-16 -%% -Type: region -Subtag: GP -Description: Guadeloupe -Added: 2005-10-16 -%% -Type: region -Subtag: GQ -Description: Equatorial Guinea -Added: 2005-10-16 -%% -Type: region -Subtag: GR -Description: Greece -Added: 2005-10-16 -%% -Type: region -Subtag: GS -Description: South Georgia and the South Sandwich Islands -Added: 2005-10-16 -%% -Type: region -Subtag: GT -Description: Guatemala -Added: 2005-10-16 -%% -Type: region -Subtag: GU -Description: Guam -Added: 2005-10-16 -%% -Type: region -Subtag: GW -Description: Guinea-Bissau -Added: 2005-10-16 -%% -Type: region -Subtag: GY -Description: Guyana -Added: 2005-10-16 -%% -Type: region -Subtag: HK -Description: Hong Kong -Added: 2005-10-16 -%% -Type: region -Subtag: HM -Description: Heard Island and McDonald Islands -Added: 2005-10-16 -%% -Type: region -Subtag: HN -Description: Honduras -Added: 2005-10-16 -%% -Type: region -Subtag: HR -Description: Croatia -Added: 2005-10-16 -%% -Type: region -Subtag: HT -Description: Haiti -Added: 2005-10-16 -%% -Type: region -Subtag: HU -Description: Hungary -Added: 2005-10-16 -%% -Type: region -Subtag: IC -Description: Canary Islands -Added: 2009-07-29 -%% -Type: region -Subtag: ID -Description: Indonesia -Added: 2005-10-16 -%% -Type: region -Subtag: IE -Description: Ireland -Added: 2005-10-16 -%% -Type: region -Subtag: IL -Description: Israel -Added: 2005-10-16 -%% -Type: region -Subtag: IM -Description: Isle of Man -Added: 2006-03-29 -%% -Type: region -Subtag: IN -Description: India -Added: 2005-10-16 -%% -Type: region -Subtag: IO -Description: British Indian Ocean Territory -Added: 2005-10-16 -%% -Type: region -Subtag: IQ -Description: Iraq -Added: 2005-10-16 -%% -Type: region -Subtag: IR -Description: Islamic Republic of Iran -Added: 2005-10-16 -%% -Type: region -Subtag: IS -Description: Iceland -Added: 2005-10-16 -%% -Type: region -Subtag: IT -Description: Italy -Added: 2005-10-16 -%% -Type: region -Subtag: JE -Description: Jersey -Added: 2006-03-29 -%% -Type: region -Subtag: JM -Description: Jamaica -Added: 2005-10-16 -%% -Type: region -Subtag: JO -Description: Jordan -Added: 2005-10-16 -%% -Type: region -Subtag: JP -Description: Japan -Added: 2005-10-16 -%% -Type: region -Subtag: KE -Description: Kenya -Added: 2005-10-16 -%% -Type: region -Subtag: KG -Description: Kyrgyzstan -Added: 2005-10-16 -%% -Type: region -Subtag: KH -Description: Cambodia -Added: 2005-10-16 -%% -Type: region -Subtag: KI -Description: Kiribati -Added: 2005-10-16 -%% -Type: region -Subtag: KM -Description: Comoros -Added: 2005-10-16 -%% -Type: region -Subtag: KN -Description: Saint Kitts and Nevis -Added: 2005-10-16 -%% -Type: region -Subtag: KP -Description: Democratic People's Republic of Korea -Added: 2005-10-16 -%% -Type: region -Subtag: KR -Description: Republic of Korea -Added: 2005-10-16 -%% -Type: region -Subtag: KW -Description: Kuwait -Added: 2005-10-16 -%% -Type: region -Subtag: KY -Description: Cayman Islands -Added: 2005-10-16 -%% -Type: region -Subtag: KZ -Description: Kazakhstan -Added: 2005-10-16 -%% -Type: region -Subtag: LA -Description: Lao People's Democratic Republic -Added: 2005-10-16 -%% -Type: region -Subtag: LB -Description: Lebanon -Added: 2005-10-16 -%% -Type: region -Subtag: LC -Description: Saint Lucia -Added: 2005-10-16 -%% -Type: region -Subtag: LI -Description: Liechtenstein -Added: 2005-10-16 -%% -Type: region -Subtag: LK -Description: Sri Lanka -Added: 2005-10-16 -%% -Type: region -Subtag: LR -Description: Liberia -Added: 2005-10-16 -%% -Type: region -Subtag: LS -Description: Lesotho -Added: 2005-10-16 -%% -Type: region -Subtag: LT -Description: Lithuania -Added: 2005-10-16 -%% -Type: region -Subtag: LU -Description: Luxembourg -Added: 2005-10-16 -%% -Type: region -Subtag: LV -Description: Latvia -Added: 2005-10-16 -%% -Type: region -Subtag: LY -Description: Libya -Added: 2005-10-16 -%% -Type: region -Subtag: MA -Description: Morocco -Added: 2005-10-16 -%% -Type: region -Subtag: MC -Description: Monaco -Added: 2005-10-16 -%% -Type: region -Subtag: MD -Description: Moldova -Added: 2005-10-16 -%% -Type: region -Subtag: ME -Description: Montenegro -Added: 2006-10-05 -%% -Type: region -Subtag: MF -Description: Saint Martin (French part) -Added: 2007-11-02 -%% -Type: region -Subtag: MG -Description: Madagascar -Added: 2005-10-16 -%% -Type: region -Subtag: MH -Description: Marshall Islands -Added: 2005-10-16 -%% -Type: region -Subtag: MK -Description: The Former Yugoslav Republic of Macedonia -Added: 2005-10-16 -%% -Type: region -Subtag: ML -Description: Mali -Added: 2005-10-16 -%% -Type: region -Subtag: MM -Description: Myanmar -Added: 2005-10-16 -%% -Type: region -Subtag: MN -Description: Mongolia -Added: 2005-10-16 -%% -Type: region -Subtag: MO -Description: Macao -Added: 2005-10-16 -%% -Type: region -Subtag: MP -Description: Northern Mariana Islands -Added: 2005-10-16 -%% -Type: region -Subtag: MQ -Description: Martinique -Added: 2005-10-16 -%% -Type: region -Subtag: MR -Description: Mauritania -Added: 2005-10-16 -%% -Type: region -Subtag: MS -Description: Montserrat -Added: 2005-10-16 -%% -Type: region -Subtag: MT -Description: Malta -Added: 2005-10-16 -%% -Type: region -Subtag: MU -Description: Mauritius -Added: 2005-10-16 -%% -Type: region -Subtag: MV -Description: Maldives -Added: 2005-10-16 -%% -Type: region -Subtag: MW -Description: Malawi -Added: 2005-10-16 -%% -Type: region -Subtag: MX -Description: Mexico -Added: 2005-10-16 -%% -Type: region -Subtag: MY -Description: Malaysia -Added: 2005-10-16 -%% -Type: region -Subtag: MZ -Description: Mozambique -Added: 2005-10-16 -%% -Type: region -Subtag: NA -Description: Namibia -Added: 2005-10-16 -%% -Type: region -Subtag: NC -Description: New Caledonia -Added: 2005-10-16 -%% -Type: region -Subtag: NE -Description: Niger -Added: 2005-10-16 -%% -Type: region -Subtag: NF -Description: Norfolk Island -Added: 2005-10-16 -%% -Type: region -Subtag: NG -Description: Nigeria -Added: 2005-10-16 -%% -Type: region -Subtag: NI -Description: Nicaragua -Added: 2005-10-16 -%% -Type: region -Subtag: NL -Description: Netherlands -Added: 2005-10-16 -%% -Type: region -Subtag: NO -Description: Norway -Added: 2005-10-16 -%% -Type: region -Subtag: NP -Description: Nepal -Added: 2005-10-16 -%% -Type: region -Subtag: NR -Description: Nauru -Added: 2005-10-16 -%% -Type: region -Subtag: NT -Description: Neutral Zone -Added: 2005-10-16 -Deprecated: 1993-07-12 -%% -Type: region -Subtag: NU -Description: Niue -Added: 2005-10-16 -%% -Type: region -Subtag: NZ -Description: New Zealand -Added: 2005-10-16 -%% -Type: region -Subtag: OM -Description: Oman -Added: 2005-10-16 -%% -Type: region -Subtag: PA -Description: Panama -Added: 2005-10-16 -%% -Type: region -Subtag: PE -Description: Peru -Added: 2005-10-16 -%% -Type: region -Subtag: PF -Description: French Polynesia -Added: 2005-10-16 -%% -Type: region -Subtag: PG -Description: Papua New Guinea -Added: 2005-10-16 -%% -Type: region -Subtag: PH -Description: Philippines -Added: 2005-10-16 -%% -Type: region -Subtag: PK -Description: Pakistan -Added: 2005-10-16 -%% -Type: region -Subtag: PL -Description: Poland -Added: 2005-10-16 -%% -Type: region -Subtag: PM -Description: Saint Pierre and Miquelon -Added: 2005-10-16 -%% -Type: region -Subtag: PN -Description: Pitcairn -Added: 2005-10-16 -%% -Type: region -Subtag: PR -Description: Puerto Rico -Added: 2005-10-16 -%% -Type: region -Subtag: PS -Description: State of Palestine -Added: 2005-10-16 -%% -Type: region -Subtag: PT -Description: Portugal -Added: 2005-10-16 -%% -Type: region -Subtag: PW -Description: Palau -Added: 2005-10-16 -%% -Type: region -Subtag: PY -Description: Paraguay -Added: 2005-10-16 -%% -Type: region -Subtag: QA -Description: Qatar -Added: 2005-10-16 -%% -Type: region -Subtag: QM..QZ -Description: Private use -Added: 2005-10-16 -%% -Type: region -Subtag: RE -Description: Réunion -Added: 2005-10-16 -%% -Type: region -Subtag: RO -Description: Romania -Added: 2005-10-16 -%% -Type: region -Subtag: RS -Description: Serbia -Added: 2006-10-05 -%% -Type: region -Subtag: RU -Description: Russian Federation -Added: 2005-10-16 -%% -Type: region -Subtag: RW -Description: Rwanda -Added: 2005-10-16 -%% -Type: region -Subtag: SA -Description: Saudi Arabia -Added: 2005-10-16 -%% -Type: region -Subtag: SB -Description: Solomon Islands -Added: 2005-10-16 -%% -Type: region -Subtag: SC -Description: Seychelles -Added: 2005-10-16 -%% -Type: region -Subtag: SD -Description: Sudan -Added: 2005-10-16 -%% -Type: region -Subtag: SE -Description: Sweden -Added: 2005-10-16 -%% -Type: region -Subtag: SG -Description: Singapore -Added: 2005-10-16 -%% -Type: region -Subtag: SH -Description: Saint Helena, Ascension and Tristan da Cunha -Added: 2005-10-16 -%% -Type: region -Subtag: SI -Description: Slovenia -Added: 2005-10-16 -%% -Type: region -Subtag: SJ -Description: Svalbard and Jan Mayen -Added: 2005-10-16 -%% -Type: region -Subtag: SK -Description: Slovakia -Added: 2005-10-16 -%% -Type: region -Subtag: SL -Description: Sierra Leone -Added: 2005-10-16 -%% -Type: region -Subtag: SM -Description: San Marino -Added: 2005-10-16 -%% -Type: region -Subtag: SN -Description: Senegal -Added: 2005-10-16 -%% -Type: region -Subtag: SO -Description: Somalia -Added: 2005-10-16 -%% -Type: region -Subtag: SR -Description: Suriname -Added: 2005-10-16 -%% -Type: region -Subtag: SS -Description: South Sudan -Added: 2011-08-25 -%% -Type: region -Subtag: ST -Description: Sao Tome and Principe -Added: 2005-10-16 -%% -Type: region -Subtag: SU -Description: Union of Soviet Socialist Republics -Added: 2005-10-16 -Deprecated: 1992-08-30 -%% -Type: region -Subtag: SV -Description: El Salvador -Added: 2005-10-16 -%% -Type: region -Subtag: SX -Description: Sint Maarten (Dutch part) -Added: 2011-01-07 -%% -Type: region -Subtag: SY -Description: Syrian Arab Republic -Added: 2005-10-16 -%% -Type: region -Subtag: SZ -Description: Swaziland -Added: 2005-10-16 -%% -Type: region -Subtag: TA -Description: Tristan da Cunha -Added: 2009-07-29 -%% -Type: region -Subtag: TC -Description: Turks and Caicos Islands -Added: 2005-10-16 -%% -Type: region -Subtag: TD -Description: Chad -Added: 2005-10-16 -%% -Type: region -Subtag: TF -Description: French Southern Territories -Added: 2005-10-16 -%% -Type: region -Subtag: TG -Description: Togo -Added: 2005-10-16 -%% -Type: region -Subtag: TH -Description: Thailand -Added: 2005-10-16 -%% -Type: region -Subtag: TJ -Description: Tajikistan -Added: 2005-10-16 -%% -Type: region -Subtag: TK -Description: Tokelau -Added: 2005-10-16 -%% -Type: region -Subtag: TL -Description: Timor-Leste -Added: 2005-10-16 -%% -Type: region -Subtag: TM -Description: Turkmenistan -Added: 2005-10-16 -%% -Type: region -Subtag: TN -Description: Tunisia -Added: 2005-10-16 -%% -Type: region -Subtag: TO -Description: Tonga -Added: 2005-10-16 -%% -Type: region -Subtag: TP -Description: East Timor -Added: 2005-10-16 -Deprecated: 2002-05-20 -Preferred-Value: TL -%% -Type: region -Subtag: TR -Description: Turkey -Added: 2005-10-16 -%% -Type: region -Subtag: TT -Description: Trinidad and Tobago -Added: 2005-10-16 -%% -Type: region -Subtag: TV -Description: Tuvalu -Added: 2005-10-16 -%% -Type: region -Subtag: TW -Description: Taiwan, Province of China -Added: 2005-10-16 -%% -Type: region -Subtag: TZ -Description: United Republic of Tanzania -Added: 2005-10-16 -%% -Type: region -Subtag: UA -Description: Ukraine -Added: 2005-10-16 -%% -Type: region -Subtag: UG -Description: Uganda -Added: 2005-10-16 -%% -Type: region -Subtag: UM -Description: United States Minor Outlying Islands -Added: 2005-10-16 -%% -Type: region -Subtag: US -Description: United States -Added: 2005-10-16 -%% -Type: region -Subtag: UY -Description: Uruguay -Added: 2005-10-16 -%% -Type: region -Subtag: UZ -Description: Uzbekistan -Added: 2005-10-16 -%% -Type: region -Subtag: VA -Description: Holy See (Vatican City State) -Added: 2005-10-16 -%% -Type: region -Subtag: VC -Description: Saint Vincent and the Grenadines -Added: 2005-10-16 -%% -Type: region -Subtag: VE -Description: Venezuela -Added: 2005-10-16 -%% -Type: region -Subtag: VG -Description: British Virgin Islands -Added: 2005-10-16 -%% -Type: region -Subtag: VI -Description: U.S. Virgin Islands -Added: 2005-10-16 -%% -Type: region -Subtag: VN -Description: Viet Nam -Added: 2005-10-16 -%% -Type: region -Subtag: VU -Description: Vanuatu -Added: 2005-10-16 -%% -Type: region -Subtag: WF -Description: Wallis and Futuna -Added: 2005-10-16 -%% -Type: region -Subtag: WS -Description: Samoa -Added: 2005-10-16 -%% -Type: region -Subtag: XA..XZ -Description: Private use -Added: 2005-10-16 -%% -Type: region -Subtag: YD -Description: Democratic Yemen -Added: 2005-10-16 -Deprecated: 1990-08-14 -Preferred-Value: YE -%% -Type: region -Subtag: YE -Description: Yemen -Added: 2005-10-16 -%% -Type: region -Subtag: YT -Description: Mayotte -Added: 2005-10-16 -%% -Type: region -Subtag: YU -Description: Yugoslavia -Added: 2005-10-16 -Deprecated: 2003-07-23 -Comments: see BA, HR, ME, MK, RS, or SI -%% -Type: region -Subtag: ZA -Description: South Africa -Added: 2005-10-16 -%% -Type: region -Subtag: ZM -Description: Zambia -Added: 2005-10-16 -%% -Type: region -Subtag: ZR -Description: Zaire -Added: 2005-10-16 -Deprecated: 1997-07-14 -Preferred-Value: CD -%% -Type: region -Subtag: ZW -Description: Zimbabwe -Added: 2005-10-16 -%% -Type: region -Subtag: ZZ -Description: Private use -Added: 2005-10-16 -%% -Type: region -Subtag: 001 -Description: World -Added: 2005-10-16 -%% -Type: region -Subtag: 002 -Description: Africa -Added: 2005-10-16 -%% -Type: region -Subtag: 003 -Description: North America -Added: 2010-08-16 -Comments: Includes Northern America (021), Caribbean (029), and Central - America (013); see also 021 -%% -Type: region -Subtag: 005 -Description: South America -Added: 2005-10-16 -%% -Type: region -Subtag: 009 -Description: Oceania -Added: 2005-10-16 -%% -Type: region -Subtag: 011 -Description: Western Africa -Added: 2005-10-16 -%% -Type: region -Subtag: 013 -Description: Central America -Added: 2005-10-16 -%% -Type: region -Subtag: 014 -Description: Eastern Africa -Added: 2005-10-16 -%% -Type: region -Subtag: 015 -Description: Northern Africa -Added: 2005-10-16 -%% -Type: region -Subtag: 017 -Description: Middle Africa -Added: 2005-10-16 -%% -Type: region -Subtag: 018 -Description: Southern Africa -Added: 2005-10-16 -%% -Type: region -Subtag: 019 -Description: Americas -Added: 2005-10-16 -%% -Type: region -Subtag: 021 -Description: Northern America -Added: 2005-10-16 -Comments: Does not include Caribbean (029) or Central America (013); see - also 003 -%% -Type: region -Subtag: 029 -Description: Caribbean -Added: 2005-10-16 -%% -Type: region -Subtag: 030 -Description: Eastern Asia -Added: 2005-10-16 -%% -Type: region -Subtag: 034 -Description: Southern Asia -Added: 2005-10-16 -%% -Type: region -Subtag: 035 -Description: South-Eastern Asia -Added: 2005-10-16 -%% -Type: region -Subtag: 039 -Description: Southern Europe -Added: 2005-10-16 -%% -Type: region -Subtag: 053 -Description: Australia and New Zealand -Added: 2005-10-16 -%% -Type: region -Subtag: 054 -Description: Melanesia -Added: 2005-10-16 -%% -Type: region -Subtag: 057 -Description: Micronesia -Added: 2005-10-16 -%% -Type: region -Subtag: 061 -Description: Polynesia -Added: 2005-10-16 -%% -Type: region -Subtag: 142 -Description: Asia -Added: 2005-10-16 -%% -Type: region -Subtag: 143 -Description: Central Asia -Added: 2005-10-16 -%% -Type: region -Subtag: 145 -Description: Western Asia -Added: 2005-10-16 -%% -Type: region -Subtag: 150 -Description: Europe -Added: 2005-10-16 -%% -Type: region -Subtag: 151 -Description: Eastern Europe -Added: 2005-10-16 -%% -Type: region -Subtag: 154 -Description: Northern Europe -Added: 2005-10-16 -%% -Type: region -Subtag: 155 -Description: Western Europe -Added: 2005-10-16 -%% -Type: region -Subtag: 419 -Description: Latin America and the Caribbean -Added: 2005-10-16 -%% -Type: variant -Subtag: 1606nict -Description: Late Middle French (to 1606) -Added: 2007-03-20 -Prefix: frm -Comments: 16th century French as in Jean Nicot, "Thresor de la langue - francoyse", 1606, but also including some French similar to that of - Rabelais -%% -Type: variant -Subtag: 1694acad -Description: Early Modern French -Added: 2007-03-20 -Prefix: fr -Comments: 17th century French, as catalogued in the "Dictionnaire de - l'académie françoise", 4eme ed. 1694; frequently includes - elements of Middle French, as this is a transitional period -%% -Type: variant -Subtag: 1901 -Description: Traditional German orthography -Added: 2005-10-16 -Prefix: de -%% -Type: variant -Subtag: 1959acad -Description: "Academic" ("governmental") variant of Belarusian as - codified in 1959 -Added: 2008-09-30 -Prefix: be -%% -Type: variant -Subtag: 1994 -Description: Standardized Resian orthography -Added: 2007-07-28 -Prefix: sl-rozaj -Prefix: sl-rozaj-biske -Prefix: sl-rozaj-njiva -Prefix: sl-rozaj-osojs -Prefix: sl-rozaj-solba -Comments: For standardized Resian an orthography was published in 1994. -%% -Type: variant -Subtag: 1996 -Description: German orthography of 1996 -Added: 2005-10-16 -Prefix: de -%% -Type: variant -Subtag: alalc97 -Description: ALA-LC Romanization, 1997 edition -Added: 2009-12-09 -Comments: Romanizations recommended by the American Library Association - and the Library of Congress, in "ALA-LC Romanization Tables: - Transliteration Schemes for Non-Roman Scripts" (1997), ISBN - 978-0-8444-0940-5. -%% -Type: variant -Subtag: aluku -Description: Aluku dialect -Description: Boni dialect -Added: 2009-09-05 -Prefix: djk -Comments: Aluku dialect of the "Busi Nenge Tongo" English-based Creole - continuum in Eastern Suriname and Western French Guiana -%% -Type: variant -Subtag: arevela -Description: Eastern Armenian -Added: 2006-09-18 -Prefix: hy -%% -Type: variant -Subtag: arevmda -Description: Western Armenian -Added: 2006-09-18 -Prefix: hy -%% -Type: variant -Subtag: baku1926 -Description: Unified Turkic Latin Alphabet (Historical) -Added: 2007-04-18 -Prefix: az -Prefix: ba -Prefix: crh -Prefix: kk -Prefix: krc -Prefix: ky -Prefix: sah -Prefix: tk -Prefix: tt -Prefix: uz -Comments: Denotes alphabet used in Turkic republics/regions of the - former USSR in late 1920s, and throughout 1930s, which aspired to - represent equivalent phonemes in a unified fashion. Also known as: New - Turkic Alphabet; Birlәşdirilmiş Jeni Tyrk - Әlifbasь (Birlesdirilmis Jeni Tyrk Elifbasi); - Jaŋalif (Janalif). -%% -Type: variant -Subtag: bauddha -Description: Buddhist Hybrid Sanskrit -Added: 2010-07-28 -Prefix: sa -%% -Type: variant -Subtag: biscayan -Description: Biscayan dialect of Basque -Added: 2010-04-13 -Prefix: eu -%% -Type: variant -Subtag: biske -Description: The San Giorgio dialect of Resian -Description: The Bila dialect of Resian -Added: 2007-07-05 -Prefix: sl-rozaj -Comments: The dialect of San Giorgio/Bila is one of the four major local - dialects of Resian -%% -Type: variant -Subtag: bohoric -Description: Slovene in Bohorič alphabet -Added: 2012-06-27 -Prefix: sl -Comments: The subtag represents the alphabet codified by Adam Bohorič in - 1584 and used from the first printed Slovene book and up to the mid- - 19th century. -%% -Type: variant -Subtag: boont -Description: Boontling -Added: 2006-09-18 -Prefix: en -Comments: Jargon embedded in American English -%% -Type: variant -Subtag: dajnko -Description: Slovene in Dajnko alphabet -Added: 2012-06-27 -Prefix: sl -Comments: The subtag represents the alphabet codified by Peter Dajnko - and used from 1824 to 1839 mostly in Styria (in what is now Eastern - Slovenia). -%% -Type: variant -Subtag: emodeng -Description: Early Modern English (1500-1700) -Added: 2012-02-05 -Prefix: en -%% -Type: variant -Subtag: fonipa -Description: International Phonetic Alphabet -Added: 2006-12-11 -%% -Type: variant -Subtag: fonupa -Description: Uralic Phonetic Alphabet -Added: 2006-12-11 -%% -Type: variant -Subtag: fonxsamp -Description: X-SAMPA transcription -Added: 2010-10-23 -Comments: Indicates that the content is transcribed according to X-SAMPA -%% -Type: variant -Subtag: hepburn -Description: Hepburn romanization -Added: 2009-10-01 -Prefix: ja-Latn -%% -Type: variant -Subtag: heploc -Description: Hepburn romanization, Library of Congress method -Added: 2009-10-01 -Deprecated: 2010-02-07 -Preferred-Value: alalc97 -Prefix: ja-Latn-hepburn -Comments: Preferred tag is ja-Latn-alalc97 -%% -Type: variant -Subtag: hognorsk -Description: Norwegian in Høgnorsk (High Norwegian) orthography -Added: 2010-01-02 -Prefix: nn -Comments: Norwegian following Ivar Aasen's orthographical principles, - including modern usage. -%% -Type: variant -Subtag: itihasa -Description: Epic Sanskrit -Added: 2010-07-28 -Prefix: sa -%% -Type: variant -Subtag: jauer -Description: Jauer dialect of Romansh -Added: 2010-06-29 -Prefix: rm -Comments: The spoken dialect of the Val Müstair, which has no written - standard. -%% -Type: variant -Subtag: jyutping -Description: Jyutping Cantonese Romanization -Added: 2010-10-23 -Prefix: yue -Comments: Jyutping romanization of Cantonese -%% -Type: variant -Subtag: kkcor -Description: Common Cornish orthography of Revived Cornish -Added: 2008-10-14 -Prefix: kw -%% -Type: variant -Subtag: kscor -Description: Standard Cornish orthography of Revived Cornish -Description: Kernowek Standard -Added: 2012-06-27 -Prefix: kw -%% -Type: variant -Subtag: laukika -Description: Classical Sanskrit -Added: 2010-07-28 -Prefix: sa -%% -Type: variant -Subtag: lipaw -Description: The Lipovaz dialect of Resian -Description: The Lipovec dialect of Resian -Added: 2007-08-11 -Prefix: sl-rozaj -Comments: The dialect of Lipovaz/Lipovec is one of the minor local - dialects of Resian -%% -Type: variant -Subtag: luna1918 -Description: Post-1917 Russian orthography -Added: 2010-10-10 -Prefix: ru -Comments: Russian orthography as established by the 1917/1918 - orthographic reforms -%% -Type: variant -Subtag: metelko -Description: Slovene in Metelko alphabet -Added: 2012-06-27 -Prefix: sl -Comments: The subtag represents the alphabet codified by Franc Serafin - Metelko and used from 1825 to 1833. -%% -Type: variant -Subtag: monoton -Description: Monotonic Greek -Added: 2006-12-11 -Prefix: el -%% -Type: variant -Subtag: ndyuka -Description: Ndyuka dialect -Description: Aukan dialect -Added: 2009-09-05 -Prefix: djk -Comments: Ndyuka dialect of the "Busi Nenge Tongo" English-based - Creole continuum in Eastern Suriname and Western French Guiana -%% -Type: variant -Subtag: nedis -Description: Natisone dialect -Description: Nadiza dialect -Added: 2005-10-16 -Prefix: sl -%% -Type: variant -Subtag: njiva -Description: The Gniva dialect of Resian -Description: The Njiva dialect of Resian -Added: 2007-07-05 -Prefix: sl-rozaj -Comments: The dialect of Gniva/Njiva is one of the four major local - dialects of Resian -%% -Type: variant -Subtag: nulik -Description: Volapük nulik -Description: Volapük perevidöl -Description: Volapük nulädik -Description: de Jong's Volapük -Description: New Volapük -Description: Revised Volapük -Description: Modern Volapük -Added: 2012-01-28 -Prefix: vo -%% -Type: variant -Subtag: osojs -Description: The Oseacco dialect of Resian -Description: The Osojane dialect of Resian -Added: 2007-07-05 -Prefix: sl-rozaj -Comments: The dialect of Oseacco/Osojane is one of the four major local - dialects of Resian -%% -Type: variant -Subtag: pamaka -Description: Pamaka dialect -Added: 2009-09-05 -Prefix: djk -Comments: Pamaka dialect of the "Busi Nenge Tongo" English-based - Creole continuum in Eastern Suriname and Western French Guiana -%% -Type: variant -Subtag: petr1708 -Description: Petrine orthography -Added: 2010-10-10 -Prefix: ru -Comments: Russian orthography from the Petrine orthographic reforms of - 1708 to the 1917 orthographic reform -%% -Type: variant -Subtag: pinyin -Description: Pinyin romanization -Added: 2008-10-14 -Prefix: zh-Latn -Prefix: bo-Latn -%% -Type: variant -Subtag: polyton -Description: Polytonic Greek -Added: 2006-12-11 -Prefix: el -%% -Type: variant -Subtag: puter -Description: Puter idiom of Romansh -Added: 2010-06-29 -Prefix: rm -Comments: Puter is one of the five traditional written standards or - "idioms" of the Romansh language. -%% -Type: variant -Subtag: rigik -Description: Volapük rigik -Description: Schleyer's Volapük -Description: Original Volapük -Description: Classic Volapük -Added: 2012-01-28 -Prefix: vo -%% -Type: variant -Subtag: rozaj -Description: Resian -Description: Resianic -Description: Rezijan -Added: 2005-10-16 -Prefix: sl -%% -Type: variant -Subtag: rumgr -Description: Rumantsch Grischun -Added: 2010-06-29 -Prefix: rm -Comments: Supraregional Romansh written standard -%% -Type: variant -Subtag: scotland -Description: Scottish Standard English -Added: 2007-08-31 -Prefix: en -%% -Type: variant -Subtag: scouse -Description: Scouse -Added: 2006-09-18 -Prefix: en -Comments: English Liverpudlian dialect known as 'Scouse' -%% -Type: variant -Subtag: solba -Description: The Stolvizza dialect of Resian -Description: The Solbica dialect of Resian -Added: 2007-07-05 -Prefix: sl-rozaj -Comments: The dialect of Stolvizza/Solbica is one of the four major - local dialects of Resian -%% -Type: variant -Subtag: surmiran -Description: Surmiran idiom of Romansh -Added: 2010-06-29 -Prefix: rm -Comments: Surmiran is one of the five traditional written standards or - "idioms" of the Romansh language. -%% -Type: variant -Subtag: sursilv -Description: Sursilvan idiom of Romansh -Added: 2010-06-29 -Prefix: rm -Comments: Sursilvan is one of the five traditional written standards or - "idioms" of the Romansh language. -%% -Type: variant -Subtag: sutsilv -Description: Sutsilvan idiom of Romansh -Added: 2010-06-29 -Prefix: rm -Comments: Sutsilvan is one of the five traditional written standards or - "idioms" of the Romansh language. -%% -Type: variant -Subtag: tarask -Description: Belarusian in Taraskievica orthography -Added: 2007-04-27 -Prefix: be -Comments: The subtag represents Branislau Taraskievic's Belarusian - orthography as published in "Bielaruski klasycny pravapis" by Juras - Buslakou, Vincuk Viacorka, Zmicier Sanko, and Zmicier Sauka (Vilnia- - Miensk 2005). -%% -Type: variant -Subtag: uccor -Description: Unified Cornish orthography of Revived Cornish -Added: 2008-10-14 -Prefix: kw -%% -Type: variant -Subtag: ucrcor -Description: Unified Cornish Revised orthography of Revived Cornish -Added: 2008-10-14 -Prefix: kw -%% -Type: variant -Subtag: ulster -Description: Ulster dialect of Scots -Added: 2010-04-10 -Prefix: sco -%% -Type: variant -Subtag: vaidika -Description: Vedic Sanskrit -Added: 2010-07-28 -Prefix: sa -Comments: The most ancient dialect of Sanskrit used in verse and prose - composed until about the 4th century B.C.E. -%% -Type: variant -Subtag: valencia -Description: Valencian -Added: 2007-03-06 -Prefix: ca -Comments: Variety spoken in the "Comunidad Valenciana" region of Spain, - where it is co-official with Spanish. -%% -Type: variant -Subtag: vallader -Description: Vallader idiom of Romansh -Added: 2010-06-29 -Prefix: rm -Comments: Vallader is one of the five traditional written standards or - "idioms" of the Romansh language. -%% -Type: variant -Subtag: wadegile -Description: Wade-Giles romanization -Added: 2008-10-03 -Prefix: zh-Latn -%% -Type: grandfathered -Tag: art-lojban -Description: Lojban -Added: 2001-11-11 -Deprecated: 2003-09-02 -Preferred-Value: jbo -%% -Type: grandfathered -Tag: cel-gaulish -Description: Gaulish -Added: 2001-05-25 -%% -Type: grandfathered -Tag: en-GB-oed -Description: English, Oxford English Dictionary spelling -Added: 2003-07-09 -%% -Type: grandfathered -Tag: i-ami -Description: Amis -Added: 1999-05-25 -Deprecated: 2009-07-29 -Preferred-Value: ami -%% -Type: grandfathered -Tag: i-bnn -Description: Bunun -Added: 1999-05-25 -Deprecated: 2009-07-29 -Preferred-Value: bnn -%% -Type: grandfathered -Tag: i-default -Description: Default Language -Added: 1998-03-10 -%% -Type: grandfathered -Tag: i-enochian -Description: Enochian -Added: 2002-07-03 -%% -Type: grandfathered -Tag: i-hak -Description: Hakka -Added: 1999-01-31 -Deprecated: 2000-01-10 -Preferred-Value: hak -%% -Type: grandfathered -Tag: i-klingon -Description: Klingon -Added: 1999-05-26 -Deprecated: 2004-02-24 -Preferred-Value: tlh -%% -Type: grandfathered -Tag: i-lux -Description: Luxembourgish -Added: 1997-09-19 -Deprecated: 1998-09-09 -Preferred-Value: lb -%% -Type: grandfathered -Tag: i-mingo -Description: Mingo -Added: 1997-09-19 -%% -Type: grandfathered -Tag: i-navajo -Description: Navajo -Added: 1997-09-19 -Deprecated: 2000-02-18 -Preferred-Value: nv -%% -Type: grandfathered -Tag: i-pwn -Description: Paiwan -Added: 1999-05-25 -Deprecated: 2009-07-29 -Preferred-Value: pwn -%% -Type: grandfathered -Tag: i-tao -Description: Tao -Added: 1999-05-25 -Deprecated: 2009-07-29 -Preferred-Value: tao -%% -Type: grandfathered -Tag: i-tay -Description: Tayal -Added: 1999-05-25 -Deprecated: 2009-07-29 -Preferred-Value: tay -%% -Type: grandfathered -Tag: i-tsu -Description: Tsou -Added: 1999-05-25 -Deprecated: 2009-07-29 -Preferred-Value: tsu -%% -Type: grandfathered -Tag: no-bok -Description: Norwegian Bokmal -Added: 1995-08-23 -Deprecated: 2000-02-18 -Preferred-Value: nb -%% -Type: grandfathered -Tag: no-nyn -Description: Norwegian Nynorsk -Added: 1995-08-23 -Deprecated: 2000-02-18 -Preferred-Value: nn -%% -Type: grandfathered -Tag: sgn-BE-FR -Description: Belgian-French Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: sfb -%% -Type: grandfathered -Tag: sgn-BE-NL -Description: Belgian-Flemish Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: vgt -%% -Type: grandfathered -Tag: sgn-CH-DE -Description: Swiss German Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: sgg -%% -Type: grandfathered -Tag: zh-guoyu -Description: Mandarin or Standard Chinese -Added: 1999-12-18 -Deprecated: 2005-07-15 -Preferred-Value: cmn -%% -Type: grandfathered -Tag: zh-hakka -Description: Hakka -Added: 1999-12-18 -Deprecated: 2009-07-29 -Preferred-Value: hak -%% -Type: grandfathered -Tag: zh-min -Description: Min, Fuzhou, Hokkien, Amoy, or Taiwanese -Added: 1999-12-18 -Deprecated: 2009-07-29 -%% -Type: grandfathered -Tag: zh-min-nan -Description: Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern - Fujian, Hoklo, Southern Fukien, Ho-lo -Added: 2001-03-26 -Deprecated: 2009-07-29 -Preferred-Value: nan -%% -Type: grandfathered -Tag: zh-xiang -Description: Xiang or Hunanese -Added: 1999-12-18 -Deprecated: 2009-07-29 -Preferred-Value: hsn -%% -Type: redundant -Tag: az-Arab -Description: Azerbaijani in Arabic script -Added: 2003-05-30 -%% -Type: redundant -Tag: az-Cyrl -Description: Azerbaijani in Cyrillic script -Added: 2003-05-30 -%% -Type: redundant -Tag: az-Latn -Description: Azerbaijani in Latin script -Added: 2003-05-30 -%% -Type: redundant -Tag: be-Latn -Description: Belarusian in Latin script -Added: 2005-01-06 -%% -Type: redundant -Tag: bs-Cyrl -Description: Bosnian in Cyrillic script -Added: 2005-02-17 -%% -Type: redundant -Tag: bs-Latn -Description: Bosnian in Latin script -Added: 2005-02-17 -%% -Type: redundant -Tag: de-1901 -Description: German, traditional orthography -Added: 2001-07-17 -%% -Type: redundant -Tag: de-1996 -Description: German, orthography of 1996 -Added: 2001-07-17 -%% -Type: redundant -Tag: de-AT-1901 -Description: German, Austrian variant, traditional orthography -Added: 2001-07-17 -%% -Type: redundant -Tag: de-AT-1996 -Description: German, Austrian variant, orthography of 1996 -Added: 2001-07-17 -%% -Type: redundant -Tag: de-CH-1901 -Description: German, Swiss variant, traditional orthography -Added: 2001-07-17 -%% -Type: redundant -Tag: de-CH-1996 -Description: German, Swiss variant, orthography of 1996 -Added: 2001-07-17 -%% -Type: redundant -Tag: de-DE-1901 -Description: German, German variant, traditional orthography -Added: 2001-07-17 -%% -Type: redundant -Tag: de-DE-1996 -Description: German, German variant, orthography of 1996 -Added: 2001-07-17 -%% -Type: redundant -Tag: en-boont -Description: Boontling -Added: 2003-02-14 -%% -Type: redundant -Tag: en-scouse -Description: Scouse -Added: 2000-05-25 -%% -Type: redundant -Tag: es-419 -Description: Latin American Spanish -Added: 2005-07-15 -%% -Type: redundant -Tag: iu-Cans -Description: Inuktitut in Canadian Aboriginal Syllabic script -Added: 2005-02-17 -%% -Type: redundant -Tag: iu-Latn -Description: Inuktitut in Latin script -Added: 2005-02-17 -%% -Type: redundant -Tag: mn-Cyrl -Description: Mongolian in Cyrillic script -Added: 2005-02-17 -%% -Type: redundant -Tag: mn-Mong -Description: Mongolian in Mongolian script -Added: 2005-02-17 -%% -Type: redundant -Tag: sgn-BR -Description: Brazilian Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: bzs -%% -Type: redundant -Tag: sgn-CO -Description: Colombian Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: csn -%% -Type: redundant -Tag: sgn-DE -Description: German Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: gsg -%% -Type: redundant -Tag: sgn-DK -Description: Danish Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: dsl -%% -Type: redundant -Tag: sgn-ES -Description: Spanish Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: ssp -%% -Type: redundant -Tag: sgn-FR -Description: French Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: fsl -%% -Type: redundant -Tag: sgn-GB -Description: British Sign Language -Added: 2001-03-02 -Deprecated: 2009-07-29 -Preferred-Value: bfi -%% -Type: redundant -Tag: sgn-GR -Description: Greek Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: gss -%% -Type: redundant -Tag: sgn-IE -Description: Irish Sign Language -Added: 2001-03-02 -Deprecated: 2009-07-29 -Preferred-Value: isg -%% -Type: redundant -Tag: sgn-IT -Description: Italian Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: ise -%% -Type: redundant -Tag: sgn-JP -Description: Japanese Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: jsl -%% -Type: redundant -Tag: sgn-MX -Description: Mexican Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: mfs -%% -Type: redundant -Tag: sgn-NI -Description: Nicaraguan Sign Language -Added: 2001-03-02 -Deprecated: 2009-07-29 -Preferred-Value: ncs -%% -Type: redundant -Tag: sgn-NL -Description: Dutch Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: dse -%% -Type: redundant -Tag: sgn-NO -Description: Norwegian Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: nsl -%% -Type: redundant -Tag: sgn-PT -Description: Portuguese Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: psr -%% -Type: redundant -Tag: sgn-SE -Description: Swedish Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: swl -%% -Type: redundant -Tag: sgn-US -Description: American Sign Language -Added: 2001-03-02 -Deprecated: 2009-07-29 -Preferred-Value: ase -%% -Type: redundant -Tag: sgn-ZA -Description: South African Sign Language -Added: 2001-11-11 -Deprecated: 2009-07-29 -Preferred-Value: sfs -%% -Type: redundant -Tag: sl-nedis -Description: Natisone dialect, Nadiza dialect -Added: 2004-06-01 -%% -Type: redundant -Tag: sl-rozaj -Description: Resian, Resianic, Rezijan -Added: 2003-10-09 -%% -Type: redundant -Tag: sr-Cyrl -Description: Serbian in Cyrillic script -Added: 2003-05-30 -%% -Type: redundant -Tag: sr-Latn -Description: Serbian in Latin script -Added: 2003-05-30 -%% -Type: redundant -Tag: tg-Arab -Description: Tajik in Arabic script -Added: 2005-02-17 -%% -Type: redundant -Tag: tg-Cyrl -Description: Tajik in Cyrillic script -Added: 2005-02-17 -%% -Type: redundant -Tag: uz-Cyrl -Description: Uzbek in Cyrillic script -Added: 2003-05-30 -%% -Type: redundant -Tag: uz-Latn -Description: Uzbek in Latin script -Added: 2003-05-30 -%% -Type: redundant -Tag: yi-Latn -Description: Yiddish, in Latin script -Added: 2003-01-07 -%% -Type: redundant -Tag: zh-cmn -Description: Mandarin Chinese -Added: 2005-07-15 -Deprecated: 2009-07-29 -Preferred-Value: cmn -%% -Type: redundant -Tag: zh-cmn-Hans -Description: Mandarin Chinese (Simplified) -Added: 2005-07-15 -Deprecated: 2009-07-29 -Preferred-Value: cmn-Hans -%% -Type: redundant -Tag: zh-cmn-Hant -Description: Mandarin Chinese (Traditional) -Added: 2005-07-15 -Deprecated: 2009-07-29 -Preferred-Value: cmn-Hant -%% -Type: redundant -Tag: zh-gan -Description: Kan or Gan -Added: 1999-12-18 -Deprecated: 2009-07-29 -Preferred-Value: gan -%% -Type: redundant -Tag: zh-Hans -Description: simplified Chinese -Added: 2003-05-30 -%% -Type: redundant -Tag: zh-Hans-CN -Description: PRC Mainland Chinese in simplified script -Added: 2005-04-13 -%% -Type: redundant -Tag: zh-Hans-HK -Description: Hong Kong Chinese in simplified script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-Hans-MO -Description: Macao Chinese in simplified script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-Hans-SG -Description: Singapore Chinese in simplified script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-Hans-TW -Description: Taiwan Chinese in simplified script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-Hant -Description: traditional Chinese -Added: 2003-05-30 -%% -Type: redundant -Tag: zh-Hant-CN -Description: PRC Mainland Chinese in traditional script -Added: 2005-04-13 -%% -Type: redundant -Tag: zh-Hant-HK -Description: Hong Kong Chinese in traditional script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-Hant-MO -Description: Macao Chinese in traditional script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-Hant-SG -Description: Singapore Chinese in traditional script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-Hant-TW -Description: Taiwan Chinese in traditional script -Added: 2005-04-11 -%% -Type: redundant -Tag: zh-wuu -Description: Shanghaiese or Wu -Added: 1999-12-18 -Deprecated: 2009-07-29 -Preferred-Value: wuu -%% -Type: redundant -Tag: zh-yue -Description: Cantonese -Added: 1999-12-18 -Deprecated: 2009-07-29 -Preferred-Value: yue diff --git a/test/java/util/Objects/CheckIndex.java b/test/java/util/Objects/CheckIndex.java new file mode 100644 index 0000000000..bb11386139 --- /dev/null +++ b/test/java/util/Objects/CheckIndex.java @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary com.sun.crypto.provider.Preconditions.checkIndex tests + * @run testng CheckIndex + * @bug 8135248 8142493 8155794 + */ + +import com.sun.crypto.provider.Preconditions; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.IntSupplier; + +import static org.testng.Assert.*; + +public class CheckIndex { + + static class AssertingOutOfBoundsException extends RuntimeException { + public AssertingOutOfBoundsException(String message) { + super(message); + } + } + + static BiFunction<String, List<Integer>, AssertingOutOfBoundsException> assertingOutOfBounds( + String message, String expCheckKind, Integer... expArgs) { + return (checkKind, args) -> { + assertEquals(checkKind, expCheckKind); + assertEquals(args, Collections.unmodifiableList(Arrays.asList(expArgs))); + try { + args.clear(); + fail("Out of bounds List<Integer> argument should be unmodifiable"); + } catch (Exception e) { + } + return new AssertingOutOfBoundsException(message); + }; + } + + static BiFunction<String, List<Integer>, AssertingOutOfBoundsException> assertingOutOfBoundsReturnNull( + String expCheckKind, Integer... expArgs) { + return (checkKind, args) -> { + assertEquals(checkKind, expCheckKind); + assertEquals(args, Collections.unmodifiableList(Arrays.asList(expArgs))); + return null; + }; + } + + static final int[] VALUES = {0, 1, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, -1, Integer.MIN_VALUE + 1, Integer.MIN_VALUE}; + + @DataProvider + static Object[][] checkIndexProvider() { + List<Object[]> l = new ArrayList<>(); + for (int index : VALUES) { + for (int length : VALUES) { + boolean withinBounds = index >= 0 && + length >= 0 && + index < length; + l.add(new Object[]{index, length, withinBounds}); + } + } + return l.toArray(new Object[0][0]); + } + + interface X { + int apply(int a, int b, int c); + } + + @Test(dataProvider = "checkIndexProvider") + public void testCheckIndex(int index, int length, boolean withinBounds) { + List<Integer> list = Collections.unmodifiableList(Arrays.asList(new Integer[] { index, length })); + String expectedMessage = withinBounds + ? null + : Preconditions.outOfBoundsExceptionFormatter(IndexOutOfBoundsException::new). + apply("checkIndex", list).getMessage(); + + BiConsumer<Class<? extends RuntimeException>, IntSupplier> checker = (ec, s) -> { + try { + int rIndex = s.getAsInt(); + if (!withinBounds) + fail(String.format( + "Index %d is out of bounds of [0, %d), but was reported to be within bounds", index, length)); + assertEquals(rIndex, index); + } + catch (RuntimeException e) { + assertTrue(ec.isInstance(e)); + if (withinBounds) + fail(String.format( + "Index %d is within bounds of [0, %d), but was reported to be out of bounds", index, length)); + else + assertEquals(e.getMessage(), expectedMessage); + } + }; + + checker.accept(AssertingOutOfBoundsException.class, + () -> Preconditions.checkIndex(index, length, + assertingOutOfBounds(expectedMessage, "checkIndex", index, length))); + checker.accept(IndexOutOfBoundsException.class, + () -> Preconditions.checkIndex(index, length, + assertingOutOfBoundsReturnNull("checkIndex", index, length))); + checker.accept(IndexOutOfBoundsException.class, + () -> Preconditions.checkIndex(index, length, null)); + checker.accept(ArrayIndexOutOfBoundsException.class, + () -> Preconditions.checkIndex(index, length, + Preconditions.outOfBoundsExceptionFormatter(ArrayIndexOutOfBoundsException::new))); + checker.accept(StringIndexOutOfBoundsException.class, + () -> Preconditions.checkIndex(index, length, + Preconditions.outOfBoundsExceptionFormatter(StringIndexOutOfBoundsException::new))); + } + + + @DataProvider + static Object[][] checkFromToIndexProvider() { + List<Object[]> l = new ArrayList<>(); + for (int fromIndex : VALUES) { + for (int toIndex : VALUES) { + for (int length : VALUES) { + boolean withinBounds = fromIndex >= 0 && + toIndex >= 0 && + length >= 0 && + fromIndex <= toIndex && + toIndex <= length; + l.add(new Object[]{fromIndex, toIndex, length, withinBounds}); + } + } + } + return l.toArray(new Object[0][0]); + } + + @Test(dataProvider = "checkFromToIndexProvider") + public void testCheckFromToIndex(int fromIndex, int toIndex, int length, boolean withinBounds) { + List<Integer> list = Collections.unmodifiableList(Arrays.asList(new Integer[] { fromIndex, toIndex, length })); + String expectedMessage = withinBounds + ? null + : Preconditions.outOfBoundsExceptionFormatter(IndexOutOfBoundsException::new). + apply("checkFromToIndex", list).getMessage(); + + BiConsumer<Class<? extends RuntimeException>, IntSupplier> check = (ec, s) -> { + try { + int rIndex = s.getAsInt(); + if (!withinBounds) + fail(String.format( + "Range [%d, %d) is out of bounds of [0, %d), but was reported to be withing bounds", fromIndex, toIndex, length)); + assertEquals(rIndex, fromIndex); + } + catch (RuntimeException e) { + assertTrue(ec.isInstance(e)); + if (withinBounds) + fail(String.format( + "Range [%d, %d) is within bounds of [0, %d), but was reported to be out of bounds", fromIndex, toIndex, length)); + else + assertEquals(e.getMessage(), expectedMessage); + } + }; + + check.accept(AssertingOutOfBoundsException.class, + () -> Preconditions.checkFromToIndex(fromIndex, toIndex, length, + assertingOutOfBounds(expectedMessage, "checkFromToIndex", fromIndex, toIndex, length))); + check.accept(IndexOutOfBoundsException.class, + () -> Preconditions.checkFromToIndex(fromIndex, toIndex, length, + assertingOutOfBoundsReturnNull("checkFromToIndex", fromIndex, toIndex, length))); + check.accept(IndexOutOfBoundsException.class, + () -> Preconditions.checkFromToIndex(fromIndex, toIndex, length, null)); + check.accept(ArrayIndexOutOfBoundsException.class, + () -> Preconditions.checkFromToIndex(fromIndex, toIndex, length, + Preconditions.outOfBoundsExceptionFormatter(ArrayIndexOutOfBoundsException::new))); + check.accept(StringIndexOutOfBoundsException.class, + () -> Preconditions.checkFromToIndex(fromIndex, toIndex, length, + Preconditions.outOfBoundsExceptionFormatter(StringIndexOutOfBoundsException::new))); + } + + + @DataProvider + static Object[][] checkFromIndexSizeProvider() { + List<Object[]> l = new ArrayList<>(); + for (int fromIndex : VALUES) { + for (int size : VALUES) { + for (int length : VALUES) { + // Explicitly convert to long + long lFromIndex = fromIndex; + long lSize = size; + long lLength = length; + // Avoid overflow + long lToIndex = lFromIndex + lSize; + + boolean withinBounds = lFromIndex >= 0L && + lSize >= 0L && + lLength >= 0L && + lFromIndex <= lToIndex && + lToIndex <= lLength; + l.add(new Object[]{fromIndex, size, length, withinBounds}); + } + } + } + return l.toArray(new Object[0][0]); + } + + @Test(dataProvider = "checkFromIndexSizeProvider") + public void testCheckFromIndexSize(int fromIndex, int size, int length, boolean withinBounds) { + List<Integer> list = Collections.unmodifiableList(Arrays.asList(new Integer[] { fromIndex, size, length })); + String expectedMessage = withinBounds + ? null + : Preconditions.outOfBoundsExceptionFormatter(IndexOutOfBoundsException::new). + apply("checkFromIndexSize", list).getMessage(); + + BiConsumer<Class<? extends RuntimeException>, IntSupplier> check = (ec, s) -> { + try { + int rIndex = s.getAsInt(); + if (!withinBounds) + fail(String.format( + "Range [%d, %d + %d) is out of bounds of [0, %d), but was reported to be withing bounds", fromIndex, fromIndex, size, length)); + assertEquals(rIndex, fromIndex); + } + catch (RuntimeException e) { + assertTrue(ec.isInstance(e)); + if (withinBounds) + fail(String.format( + "Range [%d, %d + %d) is within bounds of [0, %d), but was reported to be out of bounds", fromIndex, fromIndex, size, length)); + else + assertEquals(e.getMessage(), expectedMessage); + } + }; + + check.accept(AssertingOutOfBoundsException.class, + () -> Preconditions.checkFromIndexSize(fromIndex, size, length, + assertingOutOfBounds(expectedMessage, "checkFromIndexSize", fromIndex, size, length))); + check.accept(IndexOutOfBoundsException.class, + () -> Preconditions.checkFromIndexSize(fromIndex, size, length, + assertingOutOfBoundsReturnNull("checkFromIndexSize", fromIndex, size, length))); + check.accept(IndexOutOfBoundsException.class, + () -> Preconditions.checkFromIndexSize(fromIndex, size, length, null)); + check.accept(ArrayIndexOutOfBoundsException.class, + () -> Preconditions.checkFromIndexSize(fromIndex, size, length, + Preconditions.outOfBoundsExceptionFormatter(ArrayIndexOutOfBoundsException::new))); + check.accept(StringIndexOutOfBoundsException.class, + () -> Preconditions.checkFromIndexSize(fromIndex, size, length, + Preconditions.outOfBoundsExceptionFormatter(StringIndexOutOfBoundsException::new))); + } + + @Test + public void uniqueMessagesForCheckKinds() { + BiFunction<String, List<Integer>, IndexOutOfBoundsException> f = + Preconditions.outOfBoundsExceptionFormatter(IndexOutOfBoundsException::new); + + List<String> messages = new ArrayList<>(); + List<Integer> arg1 = Collections.unmodifiableList(Arrays.asList(new Integer[] { -1 })); + List<Integer> arg2 = Collections.unmodifiableList(Arrays.asList(new Integer[] { -1, 0 })); + List<Integer> arg3 = Collections.unmodifiableList(Arrays.asList(new Integer[] { -1, 0, 0 })); + List<Integer> arg4 = Collections.unmodifiableList(Arrays.asList(new Integer[] { -1, 0, 0, 0 })); + // Exact arguments + messages.add(f.apply("checkIndex", arg2).getMessage()); + messages.add(f.apply("checkFromToIndex", arg3).getMessage()); + messages.add(f.apply("checkFromIndexSize", arg3).getMessage()); + // Unknown check kind + messages.add(f.apply("checkUnknown", arg3).getMessage()); + // Known check kind with more arguments + messages.add(f.apply("checkIndex", arg3).getMessage()); + messages.add(f.apply("checkFromToIndex", arg4).getMessage()); + messages.add(f.apply("checkFromIndexSize", arg4).getMessage()); + // Known check kind with fewer arguments + messages.add(f.apply("checkIndex", arg1).getMessage()); + messages.add(f.apply("checkFromToIndex", arg2).getMessage()); + messages.add(f.apply("checkFromIndexSize", arg2).getMessage()); + // Null arguments + messages.add(f.apply(null, null).getMessage()); + messages.add(f.apply("checkNullArguments", null).getMessage()); + messages.add(f.apply(null, arg1).getMessage()); + + assertEquals(messages.size(), messages.stream().distinct().count()); + } +} diff --git a/test/java/util/TimeZone/Bug4322313.java b/test/java/util/TimeZone/Bug4322313.java new file mode 100644 index 0000000000..fdd1f7c92c --- /dev/null +++ b/test/java/util/TimeZone/Bug4322313.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4322313 + * @summary Make sure that new implementation of custom time zone + * support for TimeZone.getTimeZone() works correctly and the + * getDisplayName() methods are locale independent. + * @library /java/text/testlib + */ + +import java.io.*; +import java.text.*; +import java.util.*; + +public class Bug4322313 extends IntlTest { + private static final int MPM = 60 * 1000; /* Milliseconds per minute */ + private static final Object[][] VALIDS = { + /* given ID rawOffset normalized ID */ + {"GMT+00:00", 0, "GMT+00:00"}, + {"GMT+3:04", 184 * MPM, "GMT+03:04"}, + {"GMT+03:04", 184 * MPM, "GMT+03:04"}, + {"GMT+13:42", 822 * MPM, "GMT+13:42"}, + /* ISO-LATIN-1 digits */ + {"GMT+\u0030\u0031:\u0032\u0033", 83 * MPM, "GMT+01:23"}, + + {"GMT+0", 0, "GMT+00:00"}, + {"GMT+3", 180 * MPM, "GMT+03:00"}, + {"GMT+13", 780 * MPM, "GMT+13:00"}, + {"GMT+034", 34 * MPM, "GMT+00:34"}, + {"GMT+1034", 634 * MPM, "GMT+10:34"}, + + {"GMT-00:00", 0, "GMT-00:00"}, + {"GMT-3:04", -184 * MPM, "GMT-03:04"}, + {"GMT-03:04", -184 * MPM, "GMT-03:04"}, + {"GMT-13:42", -822 * MPM, "GMT-13:42"}, + /* ISO-LATIN-1 digits */ + {"GMT-\u0030\u0031:\u0032\u0033", -83 * MPM, "GMT-01:23"}, + + {"GMT-0", 0, "GMT-00:00"}, + {"GMT-3", -180 * MPM, "GMT-03:00"}, + {"GMT-13", -780 * MPM, "GMT-13:00"}, + {"GMT-034", -34 * MPM, "GMT-00:34"}, + {"GMT-1034", -634 * MPM, "GMT-10:34"}, + }; + + private static final String[] INVALIDS = { + "GMT+5:8", "GMT+11:1", "GMT+23:60", "GMT+24:13", + "GMT+0a:0A", "GMT +13:42", "GMT+ 13:42", "GMT+13 :42", + "GMT+13: 42", "GMT+421:950", "GMT+-13:42", "GMT+!13:42", + "GMT+a", "GMT+24", "GMT+060", "GMT+3003", + "GMT+42195", "GMT+-1", "GMT+-15", " GMT", + + "GMT-5:8", "GMT-11:1", "GMT-23:60", "GMT-24:13", + "GMT-0a:0A", "GMT -13:42", "GMT- 13:42", "GMT-13 :42", + "GMT-13: 42", "GMT-421:950", "GMT-+13:42", "GMT-#13:42", + "GMT-a", "GMT-24", "GMT-060", "GMT-2403", + "GMT-42195", "GMT-+1", "GMT-+15", "G M T", + "GMT+09:00 ", + }; + + void Test4322313() { + Locale savedLocale = Locale.getDefault(); + TimeZone savedTimeZone = TimeZone.getDefault(); + boolean err = false; + + Locale[] locs = Locale.getAvailableLocales(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + + for (int i = 0; i < locs.length; i++) { + Locale.setDefault(locs[i]); + + /* Okay case */ + for (int k = 0; k < VALIDS.length; k++) { + TimeZone tz = TimeZone.getTimeZone((String)VALIDS[k][0]); + int offset; + + if (!tz.getID().equals(VALIDS[k][2])) { + err = true; + System.err.println("\tFailed [Locale=" + + Locale.getDefault() + ", \"" + VALIDS[k][0] + + "\"] Invalid TimeZone ID, expected:" + + VALIDS[k][2] + ", got:" + tz.getID() + ", " + tz); + } else { + logln("\tPassed [Locale=" + + Locale.getDefault() + ", \"" + VALIDS[k][0] + + "\"] Valid TimeZone ID, got:" + VALIDS[k][2]); + } + + offset = tz.getRawOffset(); + if (offset != (int)VALIDS[k][1]) { + err = true; + System.err.println("\tFailed [Locale=" + + Locale.getDefault() + ", \"" + VALIDS[k][0] + + "\"] Invalid RawOffset, expected:" + VALIDS[k][1] + + ", got:" + offset + ", " + tz); + } else { + logln("\tPassed [Locale=" + + Locale.getDefault() + ", \"" + VALIDS[k][0] + + "\"] Vaild RawOffset, got:" + offset); + } + + offset = tz.getDSTSavings(); + if (offset != 0) { + err = true; + System.err.println("\tFailed [Locale=" + + Locale.getDefault() + ", \"" + VALIDS[k][0] + + "\"] DSTSavings should be zero, got:" + offset + + ", " + tz); + } else { + logln("\tPassed [Locale=" + + Locale.getDefault() + ", \"" + VALIDS[k][0] + + "\"] DSTSavings is zero."); + } + } + + /* Error case */ + for (int k=0; k < INVALIDS.length; k++) { + TimeZone tz = TimeZone.getTimeZone(INVALIDS[k]); + int offset; + + if (!tz.getID().equals("GMT")) { + err = true; + System.err.println("\tFailed [Locale=" + + Locale.getDefault() + ", \"" + INVALIDS[k] + + "\"] Invalid TimeZone ID, expected:GMT, got:" + + tz.getID() + ", " + tz); + } else { + logln("\tPassed [Locale=" + + Locale.getDefault() + ", \"" + INVALIDS[k] + + "\"] Valid TimeZone ID, got:" + tz.getID()); + } + + offset = tz.getRawOffset(); + if (offset != 0) { + err = true; + System.err.println("\tFailed [Locale=" + + Locale.getDefault() + ", \"" + INVALIDS[k] + + "\"] RawOffset should be zero, got:" + offset + + ", " + tz); + } else { + logln("\tPassed [Locale=" + + Locale.getDefault() + ", \"" + INVALIDS[k] + + "\"] RawOffset is zero."); + } + + offset = tz.getDSTSavings(); + if (offset != 0) { + err = true; + System.err.println("\tFailed [Locale=" + + Locale.getDefault() + ", \"" + INVALIDS[k] + + "\"] DSTSavings should be zero, got:" + offset + + ", " + tz); + } else { + logln("\tPassed [Locale=" + + Locale.getDefault() + ", \"" + INVALIDS[k] + + "\"] DSTSavings is zero."); + } + } + + // getDisplayName() tests + { + String normalizedID = "GMT-08:00"; + TimeZone tz = TimeZone.getTimeZone("GMT-8"); + String s; + s = tz.getDisplayName(true, tz.LONG); + if (!normalizedID.equals(s)) { + err = true; + System.err.println("getDisplayName returned unexpected name: " + s + + " in " + Locale.getDefault()); + } + s = tz.getDisplayName(true, tz.SHORT); + if (!normalizedID.equals(s)) { + err = true; + System.err.println("getDisplayName returned unexpected name: " + s + + " in " + Locale.getDefault()); + } + s = tz.getDisplayName(false, tz.LONG); + if (!normalizedID.equals(s)) { + err = true; + System.err.println("getDisplayName returned unexpected name: " + s + + " in " + Locale.getDefault()); + } + s = tz.getDisplayName(false, tz.SHORT); + if (!normalizedID.equals(s)) { + err = true; + System.err.println("getDisplayName returned unexpected name: " + s + + " in " + Locale.getDefault()); + } + } + } + } finally { + Locale.setDefault(savedLocale); + TimeZone.setDefault(savedTimeZone); + } + if (err) { + errln("TimeZone.getTimeZone() test failed"); + } else { + logln("TimeZone.getTimeZone() test passed"); + } + } + + public static void main (String[] args) throws Exception { + new Bug4322313().run(args); + } +} diff --git a/test/java/util/TimeZone/Bug5097350.java b/test/java/util/TimeZone/Bug5097350.java new file mode 100644 index 0000000000..ff0894bf3d --- /dev/null +++ b/test/java/util/TimeZone/Bug5097350.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 5097350 + * @summary Make sure that TimeZone.getTimeZone returns a clone of a cached TimeZone instance. + */ + +import java.util.*; +import java.text.*; + +public class Bug5097350 { + public static void main(String[] args) { + String[] tzids = TimeZone.getAvailableIDs(); + List<String> ids = new ArrayList<>(tzids.length + 10); + ids.addAll(Arrays.asList(tzids)); + // add some custom ids + ids.add("GMT+1"); + ids.add("GMT-7:00"); + ids.add("GMT+10:20"); + ids.add("GMT-00:00"); + ids.add("GMT+00:00"); + + for (String id : ids) { + test(id); + } + } + + private static void test(String id) { + TimeZone tz1 = TimeZone.getTimeZone(id); + int offset1 = tz1.getRawOffset(); + tz1.setRawOffset(offset1 + 13 * 60 * 60 * 1000); + + TimeZone tz2 = TimeZone.getTimeZone(id); + if (tz1 == tz2) { + throw new RuntimeException("TimeZones are identical: " + id); + } + if (offset1 != tz2.getRawOffset()) { + throw new RuntimeException("Offset changed through aliasing: " + id); + } + } +} diff --git a/test/java/util/TimeZone/DefaultTimeZoneTest.html b/test/java/util/TimeZone/DefaultTimeZoneTest.html new file mode 100644 index 0000000000..1fa0659ed6 --- /dev/null +++ b/test/java/util/TimeZone/DefaultTimeZoneTest.html @@ -0,0 +1,74 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<!-- + Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + This code is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 only, as + published by the Free Software Foundation. + + This code is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + version 2 for more details (a copy is included in the LICENSE file that + accompanied this code). + + You should have received a copy of the GNU General Public License version + 2 along with this work; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + + Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + or visit www.oracle.com if you need additional information or have any + questions. +--> +<!----> +<html> + <head> + <title>Disable Auto-adjust Daylight Saving Time Test</title> + </head> + + <body> +This applet tests the platform time zone detection on all platforms (Part I) +and on/off of DST adjustment on Windows (Part II). + +Part I: + +Observe the displayed Time zone ID and the local time. If you can change +the platform time zone setting, try several time zones. If both the ID and +the local time, including the time zone name and its time zone offset, are +always correct, Part I passes. Note that some time zone IDs have their +aliases that may be displayed. For example, "US/Pacific" is an alias of +"America/Los_Angeles". + +If you are running this applet in non-English locale, the time zone names +can be displayed in the local language and English by pushing the +English/Local button. + +If platform time zones are NOT detected correctly, press the Fail button +to finish this applet. + +If this platform is Windows, proceed to Part II. Otherwise, press the Pass +button to finish this applet. + +Part II: + +Note that Part II may require the Administrator privilege to change +Windows setting. + + 1. Open the Date and Time control panel. + 2. Select any time zone where daylight saving time is *currently* in effect, + such as "(GMT-08:00) Pacific Time (US & Canada); Tijuana", + "(GMT+10:00) Canberra, Melbourne, Sydney", and Apply. + 3. Observe the local time on the control panel (Date&Time pane) and + the applet local time should be the same (daylight time). + 4. Clear "Automatically adjust clock for daylight saving changes" and Apply. + 5. Observe the two local times should be the same (standard time). + 6. Select "Automatically adjust clock for daylight saving changes" and Apply. + +If the local time in the control panel and applet are always the same, +then this test passes. Press the Pass or Fail button based on the Part II +result and finish this applet. + +<applet code="DefaultTimeZoneTest.class" width=500 height=90></applet> + </body> +</html> diff --git a/test/java/util/TimeZone/DefaultTimeZoneTest.java b/test/java/util/TimeZone/DefaultTimeZoneTest.java new file mode 100644 index 0000000000..a6d3ac5086 --- /dev/null +++ b/test/java/util/TimeZone/DefaultTimeZoneTest.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4296930 5033603 7092679 + * @summary Make sure that Java runtime detects the platform time zone + * correctly. Also make sure that the system time zone detection code + * detects the "Automatically adjust clock for daylight saving + * changes" setting correctly on Windows. + * @run applet/manual=yesno DefaultTimeZoneTest.html + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.text.*; +import java.util.*; + +public class DefaultTimeZoneTest extends JApplet implements Runnable { + static final String FORMAT = "yyyy-MM-dd HH:mm:ss zzzz (XXX)"; + JLabel tzid; + JLabel label; + SimpleDateFormat sdf = new SimpleDateFormat(FORMAT); + JButton button = new JButton("English"); + Thread clock; + boolean english = false; + + @Override + public void init() { + tzid = new JLabel("Time zone ID: " + sdf.getTimeZone().getID(), SwingConstants.CENTER); + tzid.setAlignmentX(Component.CENTER_ALIGNMENT); + label = new JLabel(sdf.format(new Date()), SwingConstants.CENTER); + label.setAlignmentX(Component.CENTER_ALIGNMENT); + button.addActionListener(new ActionListener() { + @Override + @SuppressWarnings("deprecation") + public void actionPerformed(ActionEvent e) { + english = (english == false); + Locale loc = english ? Locale.US : Locale.getDefault(); + sdf = new SimpleDateFormat(FORMAT, loc); + button.setLabel(!english ? "English" : "Local"); + } + }); + button.setAlignmentX(Component.CENTER_ALIGNMENT); + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); + panel.add(Box.createRigidArea(new Dimension(0, 10))); + panel.add(tzid); + panel.add(Box.createRigidArea(new Dimension(0, 5))); + panel.add(label); + panel.add(Box.createRigidArea(new Dimension(0, 10))); + panel.add(button); + getContentPane().add(panel); + } + + @Override + public void start() { + clock = new Thread(this); + clock.start(); + } + + @Override + public void stop() { + clock = null; + } + + @Override + public void run() { + Thread me = Thread.currentThread(); + + while (clock == me) { + // Reset the default time zone so that + // TimeZone.getDefault will detect the platform time zone + TimeZone.setDefault(null); + System.setProperty("user.timezone", ""); + TimeZone tz = TimeZone.getDefault(); + sdf.setTimeZone(tz); + tzid.setText("Time zone ID: " + tz.getID()); + label.setText(sdf.format(new Date())); + repaint(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + } + } +} diff --git a/test/java/util/TimeZone/HongKong.java b/test/java/util/TimeZone/HongKong.java new file mode 100644 index 0000000000..ef9c3f923f --- /dev/null +++ b/test/java/util/TimeZone/HongKong.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4487276 8008577 + * @summary Verify that Hong Kong locale uses traditional Chinese names. + * @run main/othervm -Djava.locale.providers=COMPAT,SPI HongKong + */ + +import java.util.Locale; +import java.util.TimeZone; + +public class HongKong { + public static void main(String[] args) { + Locale reservedLocale = Locale.getDefault(); + try { + Locale.setDefault(new Locale("zh", "HK")); + checkCountry(Locale.GERMANY, "\u5fb7\u570b"); + checkCountry(Locale.FRANCE, "\u6cd5\u570b"); + checkCountry(Locale.ITALY, "\u7fa9\u5927\u5229"); + checkTimeZone("Asia/Shanghai", + "\u4e2d\u570b\u6a19\u6e96\u6642\u9593"); + } finally { + // restore the reserved locale + Locale.setDefault(reservedLocale); + } + } + + private static void checkCountry(Locale country, String expected) { + String actual = country.getDisplayCountry(); + if (!expected.equals(actual)) { + throw new RuntimeException(); + } + } + + private static void checkTimeZone(String timeZoneID, String expected) { + TimeZone timeZone = TimeZone.getTimeZone(timeZoneID); + String actual = timeZone.getDisplayName(); + if (!expected.equals(actual)) { + throw new RuntimeException(); + } + } +} diff --git a/test/java/util/TimeZone/IDTest.java b/test/java/util/TimeZone/IDTest.java new file mode 100644 index 0000000000..d5396b619b --- /dev/null +++ b/test/java/util/TimeZone/IDTest.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4509255 5055567 6176318 7090844 + * @summary Tests consistencies of time zone IDs. + */ + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.TimeZone; +import java.util.TreeMap; + +public class IDTest { + public static void main(String[] args) { + Set<String> ids = new HashSet<>(); + Map<Integer, Set<String>> tree = new TreeMap<>(); + + String[] tzs = TimeZone.getAvailableIDs(); + String[] tzs2 = TimeZone.getAvailableIDs(); + if (tzs.length != tzs2.length) { + throw new RuntimeException("tzs.length(" + tzs.length + + ") != tzs2.length(" + tzs2.length + ")"); + } + for (int i = 0; i < tzs.length; i++) { + if (tzs[i] != tzs2[i]) { + throw new RuntimeException(i + ": " + tzs[i] + " != " + tzs2[i]); + } + } + + System.out.println("Total: " + tzs.length + " time zone IDs"); + for (String id : tzs) { + ids.add(id); + TimeZone tz = TimeZone.getTimeZone(id); + Integer offset = tz.getRawOffset(); + Set<String> s = tree.get(offset); + if (s == null) { + s = new HashSet<>(); + tree.put(offset, s); + } + s.add(id); + } + + for (Integer key : tree.keySet()) { + Set<String> s1 = tree.get(key); + + // Make sure no duplicates in the other sets + for (Integer k : tree.keySet()) { + if (k.equals(key)) { + continue; + } + Set<String> s2 = new HashSet<>(tree.get(k)); + s2.retainAll(s1); + if (!s2.isEmpty()) { + throw new RuntimeException("s1 included in the subset for " + (k.intValue()/60000) + + " (" + s2 + " shouldn't be in s1)"); + } + } + + // Check the getAvailableIDs(int) call to return the same + // set of IDs + int offset = key.intValue(); + tzs = TimeZone.getAvailableIDs(offset); + tzs2 = TimeZone.getAvailableIDs(offset); + if (!Arrays.equals(tzs, tzs2)) { + throw new RuntimeException("inconsistent tzs from getAvailableIDs("+offset+")"); + } + Set<String> s2 = new HashSet<>(); + s2.addAll(Arrays.asList(tzs)); + if (!s1.equals(s2)) { + throw new RuntimeException("s1 != s2 for " + offset/60000 + + " (diff=" + getDiff(s1, s2) + ")"); + } + if (!ids.containsAll(s2)) { + throw new RuntimeException("s2 isn't a subset of ids (" + getDiff(s2, ids) + + " not in ids)"); + } + } + + for (Integer key : tree.keySet()) { + Set<String> s1 = tree.get(key); + ids.removeAll(s1); + } + if (!ids.isEmpty()) { + throw new RuntimeException("ids didn't become empty. (" + ids + ")"); + } + } + + private static String getDiff(Set<String> set1, Set<String> set2) { + Set<String> s1 = new HashSet<>(set1); + s1.removeAll(set2); + + Set<String> s2 = new HashSet<>(set2); + s2.removeAll(set1); + s2.addAll(s1); + return s2.toString(); + } +} diff --git a/test/java/util/TimeZone/TimeZoneBoundaryTest.java b/test/java/util/TimeZone/TimeZoneBoundaryTest.java new file mode 100644 index 0000000000..a1d44ea080 --- /dev/null +++ b/test/java/util/TimeZone/TimeZoneBoundaryTest.java @@ -0,0 +1,491 @@ +/* + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @library /java/text/testlib + * @summary test Time Zone Boundary + */ + +import java.text.*; +import java.util.*; + +/** + * A test which discovers the boundaries of DST programmatically and verifies + * that they are correct. + */ +public class TimeZoneBoundaryTest extends IntlTest +{ + static final int ONE_SECOND = 1000; + static final int ONE_MINUTE = 60*ONE_SECOND; + static final int ONE_HOUR = 60*ONE_MINUTE; + static final long ONE_DAY = 24*ONE_HOUR; + static final long ONE_YEAR = (long)(365.25 * ONE_DAY); + static final long SIX_MONTHS = ONE_YEAR / 2; + + static final int MONTH_LENGTH[] = {31,29,31,30,31,30,31,31,30,31,30,31}; + + // These values are empirically determined to be correct + static final long PST_1997_BEG = 860320800000L; + static final long PST_1997_END = 877856400000L; + + // Minimum interval for binary searches in ms; should be no larger + // than 1000. + static final long INTERVAL = 10; // Milliseconds + + static final String AUSTRALIA = "Australia/Adelaide"; + static final long AUSTRALIA_1997_BEG = 877797000000L; + static final long AUSTRALIA_1997_END = 859653000000L; + + public static void main(String[] args) throws Exception { + new TimeZoneBoundaryTest().run(args); + } + + /** + * Date.toString().substring() Boundary Test + * Look for a DST changeover to occur within 6 months of the given Date. + * The initial Date.toString() should yield a string containing the + * startMode as a SUBSTRING. The boundary will be tested to be + * at the expectedBoundary value. + */ + void findDaylightBoundaryUsingDate(Date d, String startMode, long expectedBoundary) + { + // Given a date with a year start, find the Daylight onset + // and end. The given date should be 1/1/xx in some year. + + if (d.toString().indexOf(startMode) == -1) + { + logln("Error: " + startMode + " not present in " + d); + } + + // Use a binary search, assuming that we have a Standard + // time at the midpoint. + long min = d.getTime(); + long max = min + SIX_MONTHS; + + while ((max - min) > INTERVAL) + { + long mid = (min + max) >> 1; + String s = new Date(mid).toString(); + // logln(s); + if (s.indexOf(startMode) != -1) + { + min = mid; + } + else + { + max = mid; + } + } + + logln("Date Before: " + showDate(min)); + logln("Date After: " + showDate(max)); + long mindelta = expectedBoundary - min; + long maxdelta = max - expectedBoundary; + if (mindelta >= 0 && mindelta <= INTERVAL && + mindelta >= 0 && mindelta <= INTERVAL) + logln("PASS: Expected boundary at " + expectedBoundary); + else + errln("FAIL: Expected boundary at " + expectedBoundary); + } + + void findDaylightBoundaryUsingTimeZone(Date d, boolean startsInDST, long expectedBoundary) + { + findDaylightBoundaryUsingTimeZone(d, startsInDST, expectedBoundary, + TimeZone.getDefault()); + } + + void findDaylightBoundaryUsingTimeZone(Date d, boolean startsInDST, + long expectedBoundary, TimeZone tz) + { + // Given a date with a year start, find the Daylight onset + // and end. The given date should be 1/1/xx in some year. + + // Use a binary search, assuming that we have a Standard + // time at the midpoint. + long min = d.getTime(); + long max = min + SIX_MONTHS; + + if (tz.inDaylightTime(d) != startsInDST) + { + errln("FAIL: " + tz.getID() + " inDaylightTime(" + + d + ") != " + startsInDST); + startsInDST = !startsInDST; // Flip over; find the apparent value + } + + if (tz.inDaylightTime(new Date(max)) == startsInDST) + { + errln("FAIL: " + tz.getID() + " inDaylightTime(" + + (new Date(max)) + ") != " + (!startsInDST)); + return; + } + + while ((max - min) > INTERVAL) + { + long mid = (min + max) >> 1; + boolean isIn = tz.inDaylightTime(new Date(mid)); + if (isIn == startsInDST) + { + min = mid; + } + else + { + max = mid; + } + } + + logln(tz.getID() + " Before: " + showDate(min, tz)); + logln(tz.getID() + " After: " + showDate(max, tz)); + + long mindelta = expectedBoundary - min; + long maxdelta = max - expectedBoundary; + if (mindelta >= 0 && mindelta <= INTERVAL && + mindelta >= 0 && mindelta <= INTERVAL) + logln("PASS: Expected boundary at " + expectedBoundary); + else + errln("FAIL: Expected boundary at " + expectedBoundary); + } + + private static String showDate(long l) + { + return showDate(new Date(l)); + } + + @SuppressWarnings("deprecation") + private static String showDate(Date d) + { + return "" + d.getYear() + "/" + showNN(d.getMonth()+1) + "/" + showNN(d.getDate()) + + " " + showNN(d.getHours()) + ":" + showNN(d.getMinutes()) + + " \"" + d + "\" = " + + d.getTime(); + } + + private static String showDate(long l, TimeZone z) + { + return showDate(new Date(l), z); + } + + @SuppressWarnings("deprecation") + private static String showDate(Date d, TimeZone zone) + { + DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); + fmt.setTimeZone(zone); + return "" + d.getYear() + "/" + showNN(d.getMonth()+1) + "/" + showNN(d.getDate()) + + " " + showNN(d.getHours()) + ":" + showNN(d.getMinutes()) + + " \"" + d + "\" = " + + fmt.format(d); + } + + private static String showNN(int n) + { + return ((n < 10) ? "0" : "") + n; + } + + /** + * Given a date, a TimeZone, and expected values for inDaylightTime, + * useDaylightTime, zone and DST offset, verify that this is the case. + */ + void verifyDST(Date d, TimeZone time_zone, + boolean expUseDaylightTime, boolean expInDaylightTime, + int expZoneOffset, int expDSTOffset) + { + logln("-- Verifying time " + d + + " in zone " + time_zone.getID()); + + if (time_zone.inDaylightTime(d) == expInDaylightTime) + logln("PASS: inDaylightTime = " + time_zone.inDaylightTime(d)); + else + errln("FAIL: inDaylightTime = " + time_zone.inDaylightTime(d)); + + if (time_zone.useDaylightTime() == expUseDaylightTime) + logln("PASS: useDaylightTime = " + time_zone.useDaylightTime()); + else + errln("FAIL: useDaylightTime = " + time_zone.useDaylightTime()); + + if (time_zone.getRawOffset() == expZoneOffset) + logln("PASS: getRawOffset() = " + expZoneOffset/(double)ONE_HOUR); + else + errln("FAIL: getRawOffset() = " + time_zone.getRawOffset()/(double)ONE_HOUR + + "; expected " + expZoneOffset/(double)ONE_HOUR); + + GregorianCalendar gc = new GregorianCalendar(time_zone); + gc.setTime(d); + int offset = time_zone.getOffset(gc.get(gc.ERA), gc.get(gc.YEAR), gc.get(gc.MONTH), + gc.get(gc.DAY_OF_MONTH), gc.get(gc.DAY_OF_WEEK), + ((gc.get(gc.HOUR_OF_DAY) * 60 + + gc.get(gc.MINUTE)) * 60 + + gc.get(gc.SECOND)) * 1000 + + gc.get(gc.MILLISECOND)); + if (offset == expDSTOffset) + logln("PASS: getOffset() = " + offset/(double)ONE_HOUR); + else + errln("FAIL: getOffset() = " + offset/(double)ONE_HOUR + + "; expected " + expDSTOffset/(double)ONE_HOUR); + } + + @SuppressWarnings("deprecation") + public void TestBoundaries() + { + TimeZone pst = TimeZone.getTimeZone("PST"); + TimeZone save = TimeZone.getDefault(); + try { + TimeZone.setDefault(pst); + + // DST changeover for PST is 4/6/1997 at 2 hours past midnight + Date d = new Date(97,Calendar.APRIL,6); + + // i is minutes past midnight standard time + for (int i=60; i<=180; i+=15) + { + boolean inDST = (i >= 120); + Date e = new Date(d.getTime() + i*60*1000); + verifyDST(e, pst, true, inDST, -8*ONE_HOUR, + inDST ? -7*ONE_HOUR : -8*ONE_HOUR); + } + + logln("========================================"); + findDaylightBoundaryUsingDate(new Date(97,0,1), "PST", PST_1997_BEG); + logln("========================================"); + findDaylightBoundaryUsingDate(new Date(97,6,1), "PDT", PST_1997_END); + + // Southern hemisphere test + logln("========================================"); + TimeZone z = TimeZone.getTimeZone(AUSTRALIA); + findDaylightBoundaryUsingTimeZone(new Date(97,0,1), true, AUSTRALIA_1997_END, z); + + logln("========================================"); + findDaylightBoundaryUsingTimeZone(new Date(97,0,1), false, PST_1997_BEG); + logln("========================================"); + findDaylightBoundaryUsingTimeZone(new Date(97,6,1), true, PST_1997_END); + } finally { + TimeZone.setDefault(save); + } + } + + void testUsingBinarySearch(SimpleTimeZone tz, Date d, long expectedBoundary) + { + // Given a date with a year start, find the Daylight onset + // and end. The given date should be 1/1/xx in some year. + + // Use a binary search, assuming that we have a Standard + // time at the midpoint. + long min = d.getTime(); + long max = min + (long)(365.25 / 2 * ONE_DAY); + + // First check the boundaries + boolean startsInDST = tz.inDaylightTime(d); + + if (tz.inDaylightTime(new Date(max)) == startsInDST) + { + logln("Error: inDaylightTime(" + (new Date(max)) + ") != " + (!startsInDST)); + } + + while ((max - min) > INTERVAL) + { + long mid = (min + max) >> 1; + if (tz.inDaylightTime(new Date(mid)) == startsInDST) + { + min = mid; + } + else + { + max = mid; + } + } + + logln("Binary Search Before: " + showDate(min)); + logln("Binary Search After: " + showDate(max)); + + long mindelta = expectedBoundary - min; + long maxdelta = max - expectedBoundary; + if (mindelta >= 0 && mindelta <= INTERVAL && + mindelta >= 0 && mindelta <= INTERVAL) + logln("PASS: Expected boundary at " + expectedBoundary); + else + errln("FAIL: Expected boundary at " + expectedBoundary); + } + + /* + static void testUsingMillis(Date d, boolean startsInDST) + { + long millis = d.getTime(); + long max = millis + (long)(370 * ONE_DAY); // A year plus extra + + boolean lastDST = startsInDST; + while (millis < max) + { + cal.setTime(new Date(millis)); + boolean inDaylight = cal.inDaylightTime(); + + if (inDaylight != lastDST) + { + logln("Switch " + (inDaylight ? "into" : "out of") + + " DST at " + (new Date(millis))); + lastDST = inDaylight; + } + + millis += 15*ONE_MINUTE; + } + } + */ + + /** + * Test new rule formats. + */ + @SuppressWarnings("deprecation") + public void TestNewRules() + { + //logln(Locale.getDefault().getDisplayName()); + //logln(TimeZone.getDefault().getID()); + //logln(new Date(0)); + + if (true) + { + // Doesn't matter what the default TimeZone is here, since we + // are creating our own TimeZone objects. + + SimpleTimeZone tz; + + logln("-----------------------------------------------------------------"); + logln("Aug 2ndTues .. Mar 15"); + tz = new SimpleTimeZone(-8*ONE_HOUR, "Test_1", + Calendar.AUGUST, 2, Calendar.TUESDAY, 2*ONE_HOUR, + Calendar.MARCH, 15, 0, 2*ONE_HOUR); + //logln(tz.toString()); + logln("========================================"); + testUsingBinarySearch(tz, new Date(97,0,1), 858416400000L); + logln("========================================"); + testUsingBinarySearch(tz, new Date(97,6,1), 871380000000L); + + logln("-----------------------------------------------------------------"); + logln("Apr Wed>=14 .. Sep Sun<=20"); + tz = new SimpleTimeZone(-8*ONE_HOUR, "Test_2", + Calendar.APRIL, 14, -Calendar.WEDNESDAY, 2*ONE_HOUR, + Calendar.SEPTEMBER, -20, -Calendar.SUNDAY, 2*ONE_HOUR); + //logln(tz.toString()); + logln("========================================"); + testUsingBinarySearch(tz, new Date(97,0,1), 861184800000L); + logln("========================================"); + testUsingBinarySearch(tz, new Date(97,6,1), 874227600000L); + } + + /* + if (true) + { + logln("========================================"); + logln("Stepping using millis"); + testUsingMillis(new Date(97,0,1), false); + } + + if (true) + { + logln("========================================"); + logln("Stepping using fields"); + testUsingFields(1997, false); + } + + if (false) + { + cal.clear(); + cal.set(1997, 3, 5, 10, 0); + // cal.inDaylightTime(); + logln("Date = " + cal.getTime()); + logln("Millis = " + cal.getTime().getTime()/3600000); + } + */ + } + + //---------------------------------------------------------------------- + //---------------------------------------------------------------------- + //---------------------------------------------------------------------- + // Long Bug + //---------------------------------------------------------------------- + //---------------------------------------------------------------------- + //---------------------------------------------------------------------- + + //public void Test3() + //{ + // findDaylightBoundaryUsingTimeZone(new Date(97,6,1), true); + //} + + /** + * Find boundaries by stepping. + */ + @SuppressWarnings("deprecation") + void findBoundariesStepwise(int year, long interval, TimeZone z, int expectedChanges) + { + Date d = new Date(year - 1900, Calendar.JANUARY, 1); + long time = d.getTime(); // ms + long limit = time + ONE_YEAR + ONE_DAY; + boolean lastState = z.inDaylightTime(d); + int changes = 0; + logln("-- Zone " + z.getID() + " starts in " + year + " with DST = " + lastState); + logln("useDaylightTime = " + z.useDaylightTime()); + while (time < limit) + { + d.setTime(time); + boolean state = z.inDaylightTime(d); + if (state != lastState) + { + logln((state ? "Entry " : "Exit ") + + "at " + d); + lastState = state; + ++changes; + } + time += interval; + } + if (changes == 0) + { + if (!lastState && !z.useDaylightTime()) logln("No DST"); + else errln("FAIL: Timezone<" + z.getID() + "> DST all year, or no DST with true useDaylightTime"); + } + else if (changes != 2) + { + errln("FAIL: Timezone<" + z.getID() + "> " + changes + " changes seen; should see 0 or 2"); + } + else if (!z.useDaylightTime()) + { + errln("FAIL: Timezone<" + z.getID() + "> useDaylightTime false but 2 changes seen"); + } + if (changes != expectedChanges) + { + errln("FAIL: Timezone<" + z.getID() + "> " + changes + " changes seen; expected " + expectedChanges); + } + } + + public void TestStepwise() + { + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("ACT"), 0); + // "EST" is disabled because its behavior depends on the mapping property. (6466476). + //findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("EST"), 2); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("HST"), 0); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("PST"), 2); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("PST8PDT"), 2); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("SystemV/PST"), 0); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("SystemV/PST8PDT"), 2); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("Japan"), 0); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("Europe/Paris"), 2); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone("America/Los_Angeles"), 2); + findBoundariesStepwise(1997, ONE_DAY, TimeZone.getTimeZone(AUSTRALIA), 2); + } +} diff --git a/test/java/util/TimeZone/TimeZoneRegression.java b/test/java/util/TimeZone/TimeZoneRegression.java new file mode 100644 index 0000000000..8b9e2f4a22 --- /dev/null +++ b/test/java/util/TimeZone/TimeZoneRegression.java @@ -0,0 +1,995 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4052967 4073209 4073215 4084933 4096952 4109314 4126678 4151406 4151429 + * 4154525 4154537 4154542 4154650 4159922 4162593 4173604 4176686 4184229 4208960 + * 4966229 6433179 6851214 8007520 8008577 + * @library /java/text/testlib + * @run main/othervm -Djava.locale.providers=COMPAT,SPI TimeZoneRegression + */ + +import java.util.*; +import java.io.*; +import java.text.*; + +public class TimeZoneRegression extends IntlTest { + + public static void main(String[] args) throws Exception { + new TimeZoneRegression().run(args); + } + + public void Test4052967() { + logln("*** CHECK TIMEZONE AGAINST HOST OS SETTING ***"); + String id = TimeZone.getDefault().getID(); + logln("user.timezone: " + System.getProperty("user.timezone", "<not set>")); + logln("TimeZone.getDefault().getID(): " + id); + logln(new Date().toString()); + logln("*** THE RESULTS OF THIS TEST MUST BE VERIFIED MANUALLY ***"); + } + + public void Test4073209() { + TimeZone z1 = TimeZone.getTimeZone("PST"); + TimeZone z2 = TimeZone.getTimeZone("PST"); + if (z1 == z2) { + errln("Fail: TimeZone should return clones"); + } + } + + @SuppressWarnings("deprecation") + public void Test4073215() { + SimpleTimeZone z = new SimpleTimeZone(0, "GMT"); + if (z.useDaylightTime()) { + errln("Fail: Fix test to start with non-DST zone"); + } + z.setStartRule(Calendar.FEBRUARY, 1, Calendar.SUNDAY, 0); + z.setEndRule(Calendar.MARCH, -1, Calendar.SUNDAY, 0); + if (!z.useDaylightTime()) { + errln("Fail: DST not active"); + } + if (z.inDaylightTime(new Date(97, Calendar.JANUARY, 31)) || + !z.inDaylightTime(new Date(97, Calendar.MARCH, 1)) || + z.inDaylightTime(new Date(97, Calendar.MARCH, 31))) { + errln("Fail: DST not working as expected"); + } + } + + /** + * The expected behavior of TimeZone around the boundaries is: + * (Assume transition time of 2:00 AM) + * day of onset 1:59 AM STD = display name 1:59 AM ST + * 2:00 AM STD = display name 3:00 AM DT + * day of end 0:59 AM STD = display name 1:59 AM DT + * 1:00 AM STD = display name 1:00 AM ST + */ + public void Test4084933() { + // test both SimpleTimeZone and ZoneInfo objects. + // @since 1.4 + sub4084933(getPST()); + sub4084933(TimeZone.getTimeZone("PST")); + } + + private void sub4084933(TimeZone tz) { + long offset1 = tz.getOffset(1, + 1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (2*60*60*1000)); + long offset2 = tz.getOffset(1, + 1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (2*60*60*1000)-1); + + long offset3 = tz.getOffset(1, + 1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (1*60*60*1000)); + long offset4 = tz.getOffset(1, + 1997, Calendar.OCTOBER, 26, Calendar.SUNDAY, (1*60*60*1000)-1); + + /* + * The following was added just for consistency. It shows that going *to* Daylight + * Savings Time (PDT) does work at 2am. + */ + + long offset5 = tz.getOffset(1, + 1997, Calendar.APRIL, 6, Calendar.SUNDAY, (2*60*60*1000)); + long offset6 = tz.getOffset(1, + 1997, Calendar.APRIL, 6, Calendar.SUNDAY, (2*60*60*1000)-1); + + long offset7 = tz.getOffset(1, + 1997, Calendar.APRIL, 6, Calendar.SUNDAY, (1*60*60*1000)); + long offset8 = tz.getOffset(1, + 1997, Calendar.APRIL, 6, Calendar.SUNDAY, (1*60*60*1000)-1); + + long SToffset = -8 * 60*60*1000L; + long DToffset = -7 * 60*60*1000L; + if (offset1 != SToffset || offset2 != SToffset || + offset3 != SToffset || offset4 != DToffset || + offset5 != DToffset || offset6 != SToffset || + offset7 != SToffset || offset8 != SToffset) + errln("Fail: TimeZone misbehaving"); { + } + } + + public void Test4096952() { + String[] ZONES = { "GMT", "MET", "IST" }; + boolean pass = true; + try { + for (int i=0; i<ZONES.length; ++i) { + TimeZone zone = TimeZone.getTimeZone(ZONES[i]); + if (!zone.getID().equals(ZONES[i])) + errln("Fail: Test broken; zones not instantiating"); + + ByteArrayOutputStream baos; + ObjectOutputStream ostream = + new ObjectOutputStream(baos = new + ByteArrayOutputStream()); + ostream.writeObject(zone); + ostream.close(); + baos.close(); + ObjectInputStream istream = + new ObjectInputStream(new + ByteArrayInputStream(baos.toByteArray())); + TimeZone frankenZone = (TimeZone) istream.readObject(); + //logln("Zone: " + zone); + //logln("FrankenZone: " + frankenZone); + if (!zone.equals(frankenZone)) { + logln("TimeZone " + zone.getID() + + " not equal to serialized/deserialized one"); + pass = false; + } + } + if (!pass) errln("Fail: TimeZone serialization/equality bug"); + } + catch (IOException e) { + errln("Fail: " + e); + e.printStackTrace(); + } + catch (ClassNotFoundException e) { + errln("Fail: " + e); + e.printStackTrace(); + } + } + + public void Test4109314() { + // test both SimpleTimeZone and ZoneInfo objects. + // @since 1.4 + if (Locale.getDefault().equals(new Locale("th", "TH"))) { + return; + } + sub4109314(getPST()); + sub4109314(TimeZone.getTimeZone("PST")); + } + + + @SuppressWarnings("deprecation") + private void sub4109314(TimeZone PST) { + GregorianCalendar testCal = (GregorianCalendar)Calendar.getInstance(); + Object[] testData = { + PST, new Date(98,Calendar.APRIL,4,22,0), new Date(98, Calendar.APRIL, 5,6,0), + PST, new Date(98,Calendar.OCTOBER,24,22,0), new Date(98,Calendar.OCTOBER,25,6,0), + }; + boolean pass=true; + for (int i=0; i<testData.length; i+=3) { + testCal.setTimeZone((TimeZone) testData[i]); + long t = ((Date)testData[i+1]).getTime(); + Date end = (Date) testData[i+2]; + while (t < end.getTime()) { + testCal.setTime(new Date(t)); + if (!checkCalendar314(testCal, (TimeZone) testData[i])) + pass = false; + t += 60*60*1000L; + } + } + if (!pass) errln("Fail: TZ API inconsistent"); + } + + boolean checkCalendar314(GregorianCalendar testCal, TimeZone testTZ) { + // GregorianCalendar testCal = (GregorianCalendar)aCal.clone(); + + final int ONE_DAY = 24*60*60*1000; + + int tzOffset, tzRawOffset; + Float tzOffsetFloat,tzRawOffsetFloat; + // Here is where the user made an error. They were passing in the value of + // the MILLSECOND field; you need to pass in the millis in the day in STANDARD + // time. + int millis = testCal.get(Calendar.MILLISECOND) + + 1000 * (testCal.get(Calendar.SECOND) + + 60 * (testCal.get(Calendar.MINUTE) + + 60 * (testCal.get(Calendar.HOUR_OF_DAY)))) - + testCal.get(Calendar.DST_OFFSET); + + /* Fix up millis to be in range. ASSUME THAT WE ARE NOT AT THE + * BEGINNING OR END OF A MONTH. We must add this code because + * getOffset() has been changed to be more strict about the parameters + * it receives -- it turns out that this test was passing in illegal + * values. */ + int date = testCal.get(Calendar.DATE); + int dow = testCal.get(Calendar.DAY_OF_WEEK); + while (millis < 0) { + millis += ONE_DAY; + --date; + dow = Calendar.SUNDAY + ((dow - Calendar.SUNDAY + 6) % 7); + } + while (millis >= ONE_DAY) { + millis -= ONE_DAY; + ++date; + dow = Calendar.SUNDAY + ((dow - Calendar.SUNDAY + 1) % 7); + } + + tzOffset = testTZ.getOffset(testCal.get(Calendar.ERA), + testCal.get(Calendar.YEAR), + testCal.get(Calendar.MONTH), + date, + dow, + millis); + tzRawOffset = testTZ.getRawOffset(); + tzOffsetFloat = new Float((float)tzOffset/(float)3600000); + tzRawOffsetFloat = new Float((float)tzRawOffset/(float)3600000); + + Date testDate = testCal.getTime(); + + boolean inDaylightTime = testTZ.inDaylightTime(testDate); + SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm"); + sdf.setCalendar(testCal); + String inDaylightTimeString; + + boolean passed; + + if (inDaylightTime) + { + inDaylightTimeString = " DST "; + passed = (tzOffset == (tzRawOffset + 3600000)); + } + else + { + inDaylightTimeString = " "; + passed = (tzOffset == tzRawOffset); + } + + String output = testTZ.getID() + " " + sdf.format(testDate) + + " Offset(" + tzOffsetFloat + ")" + + " RawOffset(" + tzRawOffsetFloat + ")" + + " " + millis/(float)3600000 + " " + + inDaylightTimeString; + + if (passed) + output += " "; + else + output += "ERROR"; + + if (passed) logln(output); else errln(output); + return passed; + } + + /** + * CANNOT REPRODUDE + * + * Yet another _alleged_ bug in TimeZone.getOffset(), a method that never + * should have been made public. It's simply too hard to use correctly. + * + * The original test code failed to do the following: + * (1) Call Calendar.setTime() before getting the fields! + * (2) Use the right millis (as usual) for getOffset(); they were passing + * in the MILLIS field, instead of the STANDARD MILLIS IN DAY. + * When you fix these two problems, the test passes, as expected. + */ + public void Test4126678() { + // Note: this test depends on the PST time zone. + TimeZone initialZone = TimeZone.getDefault(); + + // test both SimpleTimeZone and ZoneInfo objects. + // @since 1.4 + sub4126678(getPST()); + sub4126678(TimeZone.getTimeZone("PST")); + + // restore the initial time zone so that this test case + // doesn't affect the others. + TimeZone.setDefault(initialZone); + } + + @SuppressWarnings("deprecation") + private void sub4126678(TimeZone tz) { + Calendar cal = Calendar.getInstance(); + TimeZone.setDefault(tz); + cal.setTimeZone(tz); + + Date dt = new Date(1998-1900, Calendar.APRIL, 5, 10, 0); + // the dt value is local time in PST. + if (!tz.inDaylightTime(dt)) + errln("We're not in Daylight Savings Time and we should be.\n"); + + cal.setTime(dt); + int era = cal.get(Calendar.ERA); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH); + int day = cal.get(Calendar.DATE); + int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); + int millis = cal.get(Calendar.MILLISECOND) + + (cal.get(Calendar.SECOND) + + (cal.get(Calendar.MINUTE) + + (cal.get(Calendar.HOUR) * 60) * 60) * 1000) - + cal.get(Calendar.DST_OFFSET); + + long offset = tz.getOffset(era, year, month, day, dayOfWeek, millis); + long raw_offset = tz.getRawOffset(); + if (offset == raw_offset) { + errln("Offsets should not match when in DST"); + } + } + + /** + * TimeZone.getAvailableIDs(int) throws exception for certain values, + * due to a faulty constant in TimeZone.java. + */ + public void Test4151406() { + int max = 0; + for (int h=-28; h<=30; ++h) { + // h is in half-hours from GMT; rawoffset is in millis + int rawoffset = h * 1800000; + int hh = (h<0) ? -h : h; + String hname = ((h<0) ? "GMT-" : "GMT+") + + ((hh/2 < 10) ? "0" : "") + + (hh/2) + ':' + + ((hh%2==0) ? "00" : "30"); + try { + String[] ids = TimeZone.getAvailableIDs(rawoffset); + if (ids.length > max) max = ids.length; + logln(hname + ' ' + ids.length + + ((ids.length > 0) ? (" e.g. " + ids[0]) : "")); + } catch (Exception e) { + errln(hname + ' ' + "Fail: " + e); + } + } + logln("Maximum zones per offset = " + max); + } + + public void Test4151429() { + try { + TimeZone tz = TimeZone.getTimeZone("GMT"); + String name = tz.getDisplayName(true, Integer.MAX_VALUE, + Locale.getDefault()); + errln("IllegalArgumentException not thrown by TimeZone.getDisplayName()"); + } catch(IllegalArgumentException e) {} + } + + /** + * SimpleTimeZone accepts illegal DST savings values. These values + * must be non-zero. There is no upper limit at this time. + */ + public void Test4154525() { + final int GOOD = 1, BAD = 0; + int[] DATA = { + 1, GOOD, + 0, BAD, + -1, BAD, + 60*60*1000, GOOD, + Integer.MIN_VALUE, BAD, + // Integer.MAX_VALUE, ?, // no upper limit on DST savings at this time + }; + for (int i=0; i<DATA.length; i+=2) { + int savings = DATA[i]; + boolean valid = DATA[i+1] == GOOD; + String method = null; + for (int j=0; j<2; ++j) { + try { + switch (j) { + case 0: + method = "constructor"; + SimpleTimeZone z = new SimpleTimeZone(0, "id", + Calendar.JANUARY, 1, 0, 0, + Calendar.MARCH, 1, 0, 0, + savings); // <- what we're interested in + break; + case 1: + method = "setDSTSavings()"; + z = new SimpleTimeZone(0, "GMT"); + z.setDSTSavings(savings); + break; + } + if (valid) { + logln("Pass: DST savings of " + savings + " accepted by " + method); + } else { + errln("Fail: DST savings of " + savings + " accepted by " + method); + } + } catch (IllegalArgumentException e) { + if (valid) { + errln("Fail: DST savings of " + savings + " to " + method + " gave " + e); + } else { + logln("Pass: DST savings of " + savings + " to " + method + " gave " + e); + } + } + } + } + } + + /** + * SimpleTimeZone.hasSameRules() doesn't work for zones with no DST + * and different DST parameters. + */ + public void Test4154537() { + // tz1 and tz2 have no DST and different rule parameters + SimpleTimeZone tz1 = new SimpleTimeZone(0, "1", 0, 0, 0, 0, 2, 0, 0, 0); + SimpleTimeZone tz2 = new SimpleTimeZone(0, "2", 1, 0, 0, 0, 3, 0, 0, 0); + // tza and tzA have the same rule params + SimpleTimeZone tza = new SimpleTimeZone(0, "a", 0, 1, 0, 0, 3, 2, 0, 0); + SimpleTimeZone tzA = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 3, 2, 0, 0); + // tzb differs from tza + SimpleTimeZone tzb = new SimpleTimeZone(0, "b", 0, 1, 0, 0, 3, 1, 0, 0); + if (tz1.useDaylightTime() || tz2.useDaylightTime() || + !tza.useDaylightTime() || !tzA.useDaylightTime() || + !tzb.useDaylightTime()) { + errln("Test is broken -- rewrite it"); + } + if (!tza.hasSameRules(tzA) || tza.hasSameRules(tzb)) { + errln("Fail: hasSameRules() broken for zones with rules"); + } + if (!tz1.hasSameRules(tz2)) { + errln("Fail: hasSameRules() returns false for zones without rules"); + errln("zone 1 = " + tz1); + errln("zone 2 = " + tz2); + } + } + + /** + * SimpleTimeZone constructors, setStartRule(), and setEndRule() don't + * check for out-of-range arguments. + */ + public void Test4154542() { + final int GOOD = 1; + final int BAD = 0; + + final int GOOD_MONTH = Calendar.JANUARY; + final int GOOD_DAY = 1; + final int GOOD_DAY_OF_WEEK = Calendar.SUNDAY; + final int GOOD_TIME = 0; + + int[] DATA = { + GOOD, Integer.MIN_VALUE, 0, Integer.MAX_VALUE, Integer.MIN_VALUE, + GOOD, Calendar.JANUARY, -5, Calendar.SUNDAY, 0, + GOOD, Calendar.DECEMBER, 5, Calendar.SATURDAY, 24*60*60*1000-1, + GOOD, Calendar.DECEMBER, 5, Calendar.SATURDAY, 24*60*60*1000, + BAD, Calendar.DECEMBER, 5, Calendar.SATURDAY, 24*60*60*1000+1, + BAD, Calendar.DECEMBER, 5, Calendar.SATURDAY, -1, + BAD, Calendar.JANUARY, -6, Calendar.SUNDAY, 0, + BAD, Calendar.DECEMBER, 6, Calendar.SATURDAY, 24*60*60*1000, + GOOD, Calendar.DECEMBER, 1, 0, 0, + GOOD, Calendar.DECEMBER, 31, 0, 0, + BAD, Calendar.APRIL, 31, 0, 0, + BAD, Calendar.DECEMBER, 32, 0, 0, + BAD, Calendar.JANUARY-1, 1, Calendar.SUNDAY, 0, + BAD, Calendar.DECEMBER+1, 1, Calendar.SUNDAY, 0, + GOOD, Calendar.DECEMBER, 31, -Calendar.SUNDAY, 0, + GOOD, Calendar.DECEMBER, 31, -Calendar.SATURDAY, 0, + BAD, Calendar.DECEMBER, 32, -Calendar.SATURDAY, 0, + BAD, Calendar.DECEMBER, -32, -Calendar.SATURDAY, 0, + BAD, Calendar.DECEMBER, 31, -Calendar.SATURDAY-1, 0, + }; + SimpleTimeZone zone = new SimpleTimeZone(0, "Z"); + for (int i=0; i<DATA.length; i+=5) { + boolean shouldBeGood = (DATA[i] == GOOD); + int month = DATA[i+1]; + int day = DATA[i+2]; + int dayOfWeek = DATA[i+3]; + int time = DATA[i+4]; + + Exception ex = null; + try { + zone.setStartRule(month, day, dayOfWeek, time); + } catch (IllegalArgumentException e) { + ex = e; + } + if ((ex == null) != shouldBeGood) { + errln("setStartRule(month=" + month + ", day=" + day + + ", dayOfWeek=" + dayOfWeek + ", time=" + time + + (shouldBeGood ? (") should work but throws " + ex) + : ") should fail but doesn't")); + } + + ex = null; + try { + zone.setEndRule(month, day, dayOfWeek, time); + } catch (IllegalArgumentException e) { + ex = e; + } + if ((ex == null) != shouldBeGood) { + errln("setEndRule(month=" + month + ", day=" + day + + ", dayOfWeek=" + dayOfWeek + ", time=" + time + + (shouldBeGood ? (") should work but throws " + ex) + : ") should fail but doesn't")); + } + + ex = null; + try { + SimpleTimeZone temp = new SimpleTimeZone(0, "Z", + month, day, dayOfWeek, time, + GOOD_MONTH, GOOD_DAY, GOOD_DAY_OF_WEEK, GOOD_TIME); + } catch (IllegalArgumentException e) { + ex = e; + } + if ((ex == null) != shouldBeGood) { + errln("SimpleTimeZone(month=" + month + ", day=" + day + + ", dayOfWeek=" + dayOfWeek + ", time=" + time + + (shouldBeGood ? (", <end>) should work but throws " + ex) + : ", <end>) should fail but doesn't")); + } + + ex = null; + try { + SimpleTimeZone temp = new SimpleTimeZone(0, "Z", + GOOD_MONTH, GOOD_DAY, GOOD_DAY_OF_WEEK, GOOD_TIME, + month, day, dayOfWeek, time); + } catch (IllegalArgumentException e) { + ex = e; + } + if ((ex == null) != shouldBeGood) { + errln("SimpleTimeZone(<start>, month=" + month + ", day=" + day + + ", dayOfWeek=" + dayOfWeek + ", time=" + time + + (shouldBeGood ? (") should work but throws " + ex) + : ") should fail but doesn't")); + } + } + } + + /** + * SimpleTimeZone.getOffset accepts illegal arguments. + */ + public void Test4154650() { + final int GOOD=1, BAD=0; + final int GOOD_ERA=GregorianCalendar.AD, GOOD_YEAR=1998, GOOD_MONTH=Calendar.AUGUST; + final int GOOD_DAY=2, GOOD_DOW=Calendar.SUNDAY, GOOD_TIME=16*3600000; + int[] DATA = { + GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, + + GOOD, GregorianCalendar.BC, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, + GOOD, GregorianCalendar.AD, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, + BAD, GregorianCalendar.BC-1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, + BAD, GregorianCalendar.AD+1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, + + GOOD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, GOOD_DAY, GOOD_DOW, GOOD_TIME, + GOOD, GOOD_ERA, GOOD_YEAR, Calendar.DECEMBER, GOOD_DAY, GOOD_DOW, GOOD_TIME, + BAD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY-1, GOOD_DAY, GOOD_DOW, GOOD_TIME, + BAD, GOOD_ERA, GOOD_YEAR, Calendar.DECEMBER+1, GOOD_DAY, GOOD_DOW, GOOD_TIME, + + GOOD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 1, GOOD_DOW, GOOD_TIME, + GOOD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 31, GOOD_DOW, GOOD_TIME, + BAD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 0, GOOD_DOW, GOOD_TIME, + BAD, GOOD_ERA, GOOD_YEAR, Calendar.JANUARY, 32, GOOD_DOW, GOOD_TIME, + + GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SUNDAY, GOOD_TIME, + GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SATURDAY, GOOD_TIME, + BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SUNDAY-1, GOOD_TIME, + BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, Calendar.SATURDAY+1, GOOD_TIME, + + GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 0, + GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000-1, + BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, -1, + BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000, + }; + + TimeZone tz = TimeZone.getDefault(); + for (int i=0; i<DATA.length; i+=7) { + boolean good = DATA[i] == GOOD; + IllegalArgumentException e = null; + try { + int offset = tz.getOffset(DATA[i+1], DATA[i+2], DATA[i+3], + DATA[i+4], DATA[i+5], DATA[i+6]); + } catch (IllegalArgumentException ex) { + e = ex; + } + if (good != (e == null)) { + errln("Fail: getOffset(" + + DATA[i+1] + ", " + DATA[i+2] + ", " + DATA[i+3] + ", " + + DATA[i+4] + ", " + DATA[i+5] + ", " + DATA[i+6] + + (good ? (") threw " + e) : ") accepts invalid args")); + } + } + } + + /** + * TimeZone constructors allow null IDs. + */ + public void Test4159922() { + TimeZone z = null; + + // TimeZone API. Only hasSameRules() and setDefault() should + // allow null. + try { + z = TimeZone.getTimeZone((String)null); + errln("FAIL: Null allowed in getTimeZone"); + } catch (NullPointerException e) {} + z = TimeZone.getTimeZone("GMT"); + try { + z.getDisplayName(false, TimeZone.SHORT, null); + errln("FAIL: Null allowed in getDisplayName(3)"); + } catch (NullPointerException e) {} + try { + z.getDisplayName(null); + errln("FAIL: Null allowed in getDisplayName(1)"); + } catch (NullPointerException e) {} + try { + if (z.hasSameRules(null)) { + errln("FAIL: hasSameRules returned true"); + } + } catch (NullPointerException e) { + errln("FAIL: Null NOT allowed in hasSameRules"); + } + try { + z.inDaylightTime(null); + errln("FAIL: Null allowed in inDaylightTime"); + } catch (NullPointerException e) {} + try { + z.setID(null); + errln("FAIL: Null allowed in setID"); + } catch (NullPointerException e) {} + + TimeZone save = TimeZone.getDefault(); + try { + TimeZone.setDefault(null); + } catch (NullPointerException e) { + errln("FAIL: Null NOT allowed in setDefault"); + } finally { + TimeZone.setDefault(save); + } + + // SimpleTimeZone API + SimpleTimeZone s = null; + try { + s = new SimpleTimeZone(0, null); + errln("FAIL: Null allowed in SimpleTimeZone(2)"); + } catch (NullPointerException e) {} + try { + s = new SimpleTimeZone(0, null, 0, 1, 0, 0, 0, 1, 0, 0); + errln("FAIL: Null allowed in SimpleTimeZone(10)"); + } catch (NullPointerException e) {} + try { + s = new SimpleTimeZone(0, null, 0, 1, 0, 0, 0, 1, 0, 0, 1000); + errln("FAIL: Null allowed in SimpleTimeZone(11)"); + } catch (NullPointerException e) {} + } + + /** + * TimeZone broken at midnight. The TimeZone code fails to handle + * transitions at midnight correctly. + */ + @SuppressWarnings("deprecation") + public void Test4162593() { + SimpleDateFormat fmt = new SimpleDateFormat("z", Locale.US); + final int ONE_HOUR = 60*60*1000; + TimeZone initialZone = TimeZone.getDefault(); + + SimpleTimeZone asuncion = new SimpleTimeZone(-4*ONE_HOUR, "America/Asuncion" /*PY%sT*/, + Calendar.OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR, + Calendar.MARCH, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR); + + /* Zone + * Starting time + * Transition expected between start+1H and start+2H + */ + Object[] DATA = { + new SimpleTimeZone(2*ONE_HOUR, "Asia/Damascus" /*EE%sT*/, + Calendar.APRIL, 1, 0 /*DOM*/, 0*ONE_HOUR, + Calendar.OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR), + new int[] {98, Calendar.SEPTEMBER, 30, 22, 0}, + Boolean.TRUE, + + asuncion, + new int[] {100, Calendar.FEBRUARY, 28, 22, 0}, + Boolean.FALSE, + + asuncion, + new int[] {100, Calendar.FEBRUARY, 29, 22, 0}, + Boolean.TRUE, + }; + + String[] zone = new String[4]; + + try { + for (int j=0; j<DATA.length; j+=3) { + TimeZone tz = (TimeZone)DATA[j]; + TimeZone.setDefault(tz); + fmt.setTimeZone(tz); + + // Must construct the Date object AFTER setting the default zone + int[] p = (int[])DATA[j+1]; + Date d = new Date(p[0], p[1], p[2], p[3], p[4]); + boolean transitionExpected = ((Boolean)DATA[j+2]).booleanValue(); + + logln(tz.getID() + ":"); + for (int i=0; i<4; ++i) { + zone[i] = fmt.format(d); + logln("" + i + ": " + d); + d = new Date(d.getTime() + ONE_HOUR); + } + if (zone[0].equals(zone[1]) && + (zone[1].equals(zone[2]) != transitionExpected) && + zone[2].equals(zone[3])) { + logln("Ok: transition " + transitionExpected); + } else { + errln("Fail: boundary transition incorrect"); + } + } + } + finally { + // restore the initial time zone so that this test case + // doesn't affect the others. + TimeZone.setDefault(initialZone); + } + } + + /** + * TimeZone broken in last hour of year + */ + public void Test4173604() { + // test both SimpleTimeZone and ZoneInfo objects. + // @since 1.4 + sub4173604(getPST()); + sub4173604(TimeZone.getTimeZone("PST")); + } + + private void sub4173604(TimeZone pst) { + int o22 = pst.getOffset(1, 1998, 11, 31, Calendar.THURSDAY, 22*60*60*1000); + int o23 = pst.getOffset(1, 1998, 11, 31, Calendar.THURSDAY, 23*60*60*1000); + int o00 = pst.getOffset(1, 1999, 0, 1, Calendar.FRIDAY, 0); + if (o22 != o23 || o22 != o00) { + errln("Offsets should be the same (for PST), but got: " + + "12/31 22:00 " + o22 + + ", 12/31 23:00 " + o23 + + ", 01/01 00:00 " + o00); + } + + GregorianCalendar cal = new GregorianCalendar(); + cal.setTimeZone(pst); + cal.clear(); + cal.set(1998, Calendar.JANUARY, 1); + int lastDST = cal.get(Calendar.DST_OFFSET); + int transitions = 0; + int delta = 5; + while (cal.get(Calendar.YEAR) < 2000) { + cal.add(Calendar.MINUTE, delta); + if (cal.get(Calendar.DST_OFFSET) != lastDST) { + ++transitions; + Calendar t = (Calendar)cal.clone(); + t.add(Calendar.MINUTE, -delta); + logln(t.getTime() + " " + t.get(Calendar.DST_OFFSET)); + logln(cal.getTime() + " " + (lastDST=cal.get(Calendar.DST_OFFSET))); + } + } + if (transitions != 4) { + errln("Saw " + transitions + " transitions; should have seen 4"); + } + } + + /** + * getDisplayName doesn't work with unusual savings/offsets. + */ + @SuppressWarnings("deprecation") + public void Test4176686() { + // Construct a zone that does not observe DST but + // that does have a DST savings (which should be ignored). + int offset = 90 * 60000; // 1:30 + SimpleTimeZone z1 = new SimpleTimeZone(offset, "_std_zone_"); + z1.setDSTSavings(45 * 60000); // 0:45 + + // Construct a zone that observes DST for the first 6 months. + SimpleTimeZone z2 = new SimpleTimeZone(offset, "_dst_zone_"); + z2.setDSTSavings(45 * 60000); // 0:45 + z2.setStartRule(Calendar.JANUARY, 1, 0); + z2.setEndRule(Calendar.JULY, 1, 0); + + // Also check DateFormat + DateFormat fmt1 = new SimpleDateFormat("z"); + fmt1.setTimeZone(z1); // Format uses standard zone + DateFormat fmt2 = new SimpleDateFormat("z"); + fmt2.setTimeZone(z2); // Format uses DST zone + Date dst = new Date(1970-1900, Calendar.FEBRUARY, 1); // Time in DST + Date std = new Date(1970-1900, Calendar.AUGUST, 1); // Time in standard + + // Description, Result, Expected Result + String[] DATA = { + "getDisplayName(false, SHORT)/std zone", + z1.getDisplayName(false, TimeZone.SHORT), "GMT+01:30", + "getDisplayName(false, LONG)/std zone", + z1.getDisplayName(false, TimeZone.LONG ), "GMT+01:30", + "getDisplayName(true, SHORT)/std zone", + z1.getDisplayName(true, TimeZone.SHORT), "GMT+01:30", + "getDisplayName(true, LONG)/std zone", + z1.getDisplayName(true, TimeZone.LONG ), "GMT+01:30", + "getDisplayName(false, SHORT)/dst zone", + z2.getDisplayName(false, TimeZone.SHORT), "GMT+01:30", + "getDisplayName(false, LONG)/dst zone", + z2.getDisplayName(false, TimeZone.LONG ), "GMT+01:30", + "getDisplayName(true, SHORT)/dst zone", + z2.getDisplayName(true, TimeZone.SHORT), "GMT+02:15", + "getDisplayName(true, LONG)/dst zone", + z2.getDisplayName(true, TimeZone.LONG ), "GMT+02:15", + "DateFormat.format(std)/std zone", fmt1.format(std), "GMT+01:30", + "DateFormat.format(dst)/std zone", fmt1.format(dst), "GMT+01:30", + "DateFormat.format(std)/dst zone", fmt2.format(std), "GMT+01:30", + "DateFormat.format(dst)/dst zone", fmt2.format(dst), "GMT+02:15", + }; + + for (int i=0; i<DATA.length; i+=3) { + if (!DATA[i+1].equals(DATA[i+2])) { + errln("FAIL: " + DATA[i] + " -> " + DATA[i+1] + ", exp " + DATA[i+2]); + } + } + } + + /** + * SimpleTimeZone allows invalid DOM values. + */ + public void Test4184229() { + SimpleTimeZone zone = null; + try { + zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0); + errln("Failed. No exception has been thrown for DOM -1 startDay"); + } catch(IllegalArgumentException e) { + logln("(a) " + e.getMessage()); + } + try { + zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0); + errln("Failed. No exception has been thrown for DOM -1 endDay"); + } catch(IllegalArgumentException e) { + logln("(b) " + e.getMessage()); + } + try { + zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0, 1000); + errln("Failed. No exception has been thrown for DOM -1 startDay +savings"); + } catch(IllegalArgumentException e) { + logln("(c) " + e.getMessage()); + } + try { + zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0, 1000); + errln("Failed. No exception has been thrown for DOM -1 endDay +savings"); + } catch(IllegalArgumentException e) { + logln("(d) " + e.getMessage()); + } + // Make a valid constructor call for subsequent tests. + zone = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 0, 1, 0, 0); + try { + zone.setStartRule(0, -1, 0, 0); + errln("Failed. No exception has been thrown for DOM -1 setStartRule +savings"); + } catch(IllegalArgumentException e) { + logln("(e) " + e.getMessage()); + } + try { + zone.setStartRule(0, -1, 0); + errln("Failed. No exception has been thrown for DOM -1 setStartRule"); + } catch(IllegalArgumentException e) { + logln("(f) " + e.getMessage()); + } + try { + zone.setEndRule(0, -1, 0, 0); + errln("Failed. No exception has been thrown for DOM -1 setEndRule +savings"); + } catch(IllegalArgumentException e) { + logln("(g) " + e.getMessage()); + } + try { + zone.setEndRule(0, -1, 0); + errln("Failed. No exception has been thrown for DOM -1 setEndRule"); + } catch(IllegalArgumentException e) { + logln("(h) " + e.getMessage()); + } + } + + /** + * SimpleTimeZone.getOffset() throws IllegalArgumentException when to get + * of 2/29/1996 (leap day). + */ + public void Test4208960 () { + // test both SimpleTimeZone and ZoneInfo objects. + // @since 1.4 + sub4208960(getPST()); + sub4208960(TimeZone.getTimeZone("PST")); + } + + private void sub4208960(TimeZone tz) { + try { + int offset = tz.getOffset(GregorianCalendar.AD, 1996, Calendar.FEBRUARY, 29, + Calendar.THURSDAY, 0); + } catch (IllegalArgumentException e) { + errln("FAILED: to get TimeZone.getOffset(2/29/96)"); + } + try { + int offset = tz.getOffset(GregorianCalendar.AD, 1997, Calendar.FEBRUARY, 29, + Calendar.THURSDAY, 0); + errln("FAILED: TimeZone.getOffset(2/29/97) expected to throw Exception."); + } catch (IllegalArgumentException e) { + logln("got IllegalArgumentException"); + } + } + + /** + * 4966229: java.util.Date methods may works incorrect. + * sun.util.calendar.ZoneInfo doesn't clone properly. + */ + @SuppressWarnings("deprecation") + public void Test4966229() { + TimeZone savedTZ = TimeZone.getDefault(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + Date d = new Date(2100-1900, 5, 1); // specify year >2037 + TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); + + Calendar cal = new GregorianCalendar(tz); + cal.setTime(d); + + // Change the raw offset in tz + int offset = tz.getRawOffset(); + tz.setRawOffset(0); + + TimeZone tz2 = (TimeZone) tz.clone(); + Calendar cal2 = new GregorianCalendar(tz2); + cal2.setTime(d); + int expectedHourOfDay = cal2.get(cal.HOUR_OF_DAY); + + // Restore the GMT offset in tz which shouldn't affect tz2 + tz.setRawOffset(offset); + cal2.setTime(d); + int hourOfDay = cal2.get(cal.HOUR_OF_DAY); + if (hourOfDay != expectedHourOfDay) { + errln("wrong hour of day: got: " + hourOfDay + + ", expected: " + expectedHourOfDay); + } + } finally { + TimeZone.setDefault(savedTZ); + } + } + + /** + * 6433179: (tz) Incorrect DST end for America/Winnipeg and Canada/Central in 2038+ + */ + public void Test6433179() { + // Use the old America/Winnipeg rule for testing. Note that + // startMode is WALL_TIME for testing. It's actually + // STANDARD_TIME, though. + //Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S + //Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D + TimeZone tz = new SimpleTimeZone(-6*ONE_HOUR, "America/Winnipeg", + Calendar.APRIL, 1, -Calendar.SUNDAY, 2*ONE_HOUR, SimpleTimeZone.WALL_TIME, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*ONE_HOUR, SimpleTimeZone.STANDARD_TIME, + 1*ONE_HOUR); + Calendar cal = Calendar.getInstance(tz, Locale.US); + cal.clear(); + cal.set(2039, Calendar.OCTOBER, 1); + cal.getTime(); + cal.set(cal.DAY_OF_WEEK, cal.SUNDAY); + cal.set(cal.DAY_OF_WEEK_IN_MONTH, -1); + cal.add(Calendar.HOUR_OF_DAY, 2); + if (cal.get(cal.DST_OFFSET) == 0) { + errln("Should still be in DST."); + } + } + + private static final int ONE_HOUR = 60 * 60 * 1000; + /** + * Returns an instance of SimpleTimeZone for + * "PST". (TimeZone.getTimeZone() no longer returns a + * SimpleTimeZone object.) + * @since 1.4 + */ + private SimpleTimeZone getPST() { + return new SimpleTimeZone(-8*ONE_HOUR, "PST", + Calendar.APRIL, 1, -Calendar.SUNDAY, 2*ONE_HOUR, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*ONE_HOUR, + 1*ONE_HOUR); + } +} +//eof diff --git a/test/java/util/TimeZone/TimeZoneTest.java b/test/java/util/TimeZone/TimeZoneTest.java new file mode 100644 index 0000000000..27391375a7 --- /dev/null +++ b/test/java/util/TimeZone/TimeZoneTest.java @@ -0,0 +1,736 @@ +/* + * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4028006 4044013 4096694 4107276 4107570 4112869 4130885 7039469 7126465 7158483 + * 8008577 8077685 8098547 8133321 8138716 8148446 8151876 8228469 + * @library /java/text/testlib + * @summary test TimeZone + */ + +import java.io.*; +import java.text.*; +import java.util.*; +import sun.util.resources.LocaleData; + +public class TimeZoneTest extends IntlTest +{ + static final int millisPerHour = 3600000; + + public static void main(String[] args) throws Exception { + new TimeZoneTest().run(args); + } + + /** + * Bug 4130885 + * Certain short zone IDs, used since 1.1.x, are incorrect. + * + * The worst of these is: + * + * "CAT" (Central African Time) should be GMT+2:00, but instead returns a + * zone at GMT-1:00. The zone at GMT-1:00 should be called EGT, CVT, EGST, + * or AZOST, depending on which zone is meant, but in no case is it CAT. + * + * Other wrong zone IDs: + * + * ECT (European Central Time) GMT+1:00: ECT is Ecuador Time, + * GMT-5:00. European Central time is abbreviated CEST. + * + * SST (Solomon Island Time) GMT+11:00. SST is actually Samoa Standard Time, + * GMT-11:00. Solomon Island time is SBT. + * + * NST (New Zealand Time) GMT+12:00. NST is the abbreviation for + * Newfoundland Standard Time, GMT-3:30. New Zealanders use NZST. + * + * AST (Alaska Standard Time) GMT-9:00. [This has already been noted in + * another bug.] It should be "AKST". AST is Atlantic Standard Time, + * GMT-4:00. + * + * PNT (Phoenix Time) GMT-7:00. PNT usually means Pitcairn Time, + * GMT-8:30. There is no standard abbreviation for Phoenix time, as distinct + * from MST with daylight savings. + * + * In addition to these problems, a number of zones are FAKE. That is, they + * don't match what people use in the real world. + * + * FAKE zones: + * + * EET (should be EEST) + * ART (should be EET) + * MET (should be IRST) + * NET (should be AMST) + * PLT (should be PKT) + * BST (should be BDT) + * VST (should be ICT) + * CTT (should be CST) + + * ACT (should be CST) + + * AET (should be EST) + + * MIT (should be WST) + + * IET (should be EST) + + * PRT (should be AST) + + * CNT (should be NST) + * AGT (should be ARST) + * BET (should be EST) + + * + * + A zone with the correct name already exists and means something + * else. E.g., EST usually indicates the US Eastern zone, so it cannot be + * used for Brazil (BET). + */ + public void TestShortZoneIDs() throws Exception { + + ZoneDescriptor[] JDK_116_REFERENCE_LIST = { + new ZoneDescriptor("MIT", 780, true), + new ZoneDescriptor("HST", -600, false), + new ZoneDescriptor("AST", -540, true), + new ZoneDescriptor("PST", -480, true), + new ZoneDescriptor("PNT", -420, false), + new ZoneDescriptor("MST", -420, false), + new ZoneDescriptor("CST", -360, true), + new ZoneDescriptor("IET", -300, true), + new ZoneDescriptor("EST", -300, false), + new ZoneDescriptor("PRT", -240, false), + new ZoneDescriptor("CNT", -210, true), + new ZoneDescriptor("AGT", -180, false), + new ZoneDescriptor("BET", -180, false), + // new ZoneDescriptor("CAT", -60, false), // Wrong: + // As of bug 4130885, fix CAT (Central Africa) + new ZoneDescriptor("CAT", 120, false), // Africa/Harare + new ZoneDescriptor("GMT", 0, false), + new ZoneDescriptor("UTC", 0, false), + new ZoneDescriptor("ECT", 60, true), + new ZoneDescriptor("ART", 120, false), + new ZoneDescriptor("EET", 120, true), + new ZoneDescriptor("EAT", 180, false), + new ZoneDescriptor("MET", 60, true), + new ZoneDescriptor("NET", 240, false), + new ZoneDescriptor("PLT", 300, false), + new ZoneDescriptor("IST", 330, false), + new ZoneDescriptor("BST", 360, false), + new ZoneDescriptor("VST", 420, false), + new ZoneDescriptor("CTT", 480, false), + new ZoneDescriptor("JST", 540, false), + new ZoneDescriptor("ACT", 570, false), + new ZoneDescriptor("AET", 600, true), + new ZoneDescriptor("SST", 660, false), + // new ZoneDescriptor("NST", 720, false), + // As of bug 4130885, fix NST (New Zealand) + new ZoneDescriptor("NST", 720, true), // Pacific/Auckland + }; + + Map<String, ZoneDescriptor> hash = new HashMap<>(); + + String[] ids = TimeZone.getAvailableIDs(); + for (String id : ids) { + if (id.length() == 3) { + hash.put(id, new ZoneDescriptor(TimeZone.getTimeZone(id))); + } + } + + for (int i = 0; i < JDK_116_REFERENCE_LIST.length; ++i) { + ZoneDescriptor referenceZone = JDK_116_REFERENCE_LIST[i]; + ZoneDescriptor currentZone = hash.get(referenceZone.getID()); + if (referenceZone.equals(currentZone)) { + logln("ok " + referenceZone); + } + else { + errln("Fail: Expected " + referenceZone + + "; got " + currentZone); + } + } + } + + /** + * A descriptor for a zone; used to regress the short zone IDs. + */ + static class ZoneDescriptor { + String id; + int offset; // In minutes + boolean daylight; + + ZoneDescriptor(TimeZone zone) { + this.id = zone.getID(); + this.offset = zone.getRawOffset() / 60000; + this.daylight = zone.useDaylightTime(); + } + + ZoneDescriptor(String id, int offset, boolean daylight) { + this.id = id; + this.offset = offset; + this.daylight = daylight; + } + + public String getID() { return id; } + + @Override + public boolean equals(Object o) { + ZoneDescriptor that = (ZoneDescriptor)o; + return that != null && + id.equals(that.id) && + offset == that.offset && + daylight == that.daylight; + } + + @Override + public int hashCode() { + return id.hashCode() ^ offset | (daylight ? 1 : 0); + } + + @Override + public String toString() { + int min = offset; + char sign = '+'; + if (min < 0) { sign = '-'; min = -min; } + + return "Zone[\"" + id + "\", GMT" + sign + (min/60) + ':' + + (min%60<10?"0":"") + (min%60) + ", " + + (daylight ? "Daylight" : "Standard") + "]"; + } + + public static int compare(Object o1, Object o2) { + ZoneDescriptor i1 = (ZoneDescriptor)o1; + ZoneDescriptor i2 = (ZoneDescriptor)o2; + if (i1.offset > i2.offset) return 1; + if (i1.offset < i2.offset) return -1; + if (i1.daylight && !i2.daylight) return 1; + if (!i1.daylight && i2.daylight) return -1; + return i1.id.compareTo(i2.id); + } + } + + static final String formatMinutes(int min) { + char sign = '+'; + if (min < 0) { sign = '-'; min = -min; } + int h = min/60; + min = min%60; + return "" + sign + h + ":" + ((min<10) ? "0" : "") + min; + } + /** + * As part of the VM fix (see CCC approved RFE 4028006, bug + * 4044013), TimeZone.getTimeZone() has been modified to recognize + * generic IDs of the form GMT[+-]hh:mm, GMT[+-]hhmm, and + * GMT[+-]hh. Test this behavior here. + * + * Bug 4044013 + * + * ID "Custom" is no longer used for TimeZone objects created with + * a custom time zone ID, such as "GMT-8". See 4322313. + */ + public void TestCustomParse() throws Exception { + Object[] DATA = { + // ID Expected offset in minutes + "GMT", null, + "GMT+0", new Integer(0), + "GMT+1", new Integer(60), + "GMT-0030", new Integer(-30), + "GMT+15:99", null, + "GMT+", null, + "GMT-", null, + "GMT+0:", null, + "GMT-:", null, + "GMT+0010", new Integer(10), // Interpret this as 00:10 + "GMT-10", new Integer(-10*60), + "GMT+30", null, + "GMT-3:30", new Integer(-(3*60+30)), + "GMT-230", new Integer(-(2*60+30)), + }; + for (int i=0; i<DATA.length; i+=2) { + String id = (String)DATA[i]; + Integer exp = (Integer)DATA[i+1]; + TimeZone zone = TimeZone.getTimeZone(id); + if (zone.getID().equals("GMT")) { + logln(id + " -> generic GMT"); + // When TimeZone.getTimeZone() can't parse the id, it + // returns GMT -- a dubious practice, but required for + // backward compatibility. + if (exp != null) { + throw new Exception("Expected offset of " + formatMinutes(exp.intValue()) + + " for " + id + ", got parse failure"); + } + } + else { + int ioffset = zone.getRawOffset()/60000; + String offset = formatMinutes(ioffset); + logln(id + " -> " + zone.getID() + " GMT" + offset); + if (exp == null) { + throw new Exception("Expected parse failure for " + id + + ", got offset of " + offset + + ", id " + zone.getID()); + } + else if (ioffset != exp.intValue()) { + throw new Exception("Expected offset of " + formatMinutes(exp.intValue()) + + ", id Custom, for " + id + + ", got offset of " + offset + + ", id " + zone.getID()); + } + } + } + } + + /** + * Test the basic functionality of the getDisplayName() API. + * + * Bug 4112869 + * Bug 4028006 + * + * See also API change request A41. + * + * 4/21/98 - make smarter, so the test works if the ext resources + * are present or not. + */ + public void TestDisplayName() { + TimeZone zone = TimeZone.getTimeZone("PST"); + String name = zone.getDisplayName(Locale.ENGLISH); + logln("PST->" + name); + if (!name.equals("Pacific Standard Time")) + errln("Fail: Expected \"Pacific Standard Time\""); + + //***************************************************************** + // THE FOLLOWING LINES MUST BE UPDATED IF THE LOCALE DATA CHANGES + // THE FOLLOWING LINES MUST BE UPDATED IF THE LOCALE DATA CHANGES + // THE FOLLOWING LINES MUST BE UPDATED IF THE LOCALE DATA CHANGES + //***************************************************************** + Object[] DATA = { + new Boolean(false), new Integer(TimeZone.SHORT), "PST", + new Boolean(true), new Integer(TimeZone.SHORT), "PDT", + new Boolean(false), new Integer(TimeZone.LONG), "Pacific Standard Time", + new Boolean(true), new Integer(TimeZone.LONG), "Pacific Daylight Time", + }; + + for (int i=0; i<DATA.length; i+=3) { + name = zone.getDisplayName(((Boolean)DATA[i]).booleanValue(), + ((Integer)DATA[i+1]).intValue(), + Locale.ENGLISH); + if (!name.equals(DATA[i+2])) + errln("Fail: Expected " + DATA[i+2] + "; got " + name); + } + + // Make sure that we don't display the DST name by constructing a fake + // PST zone that has DST all year long. + SimpleTimeZone zone2 = new SimpleTimeZone(0, "PST"); + zone2.setStartRule(Calendar.JANUARY, 1, 0); + zone2.setEndRule(Calendar.DECEMBER, 31, 0); + logln("Modified PST inDaylightTime->" + zone2.inDaylightTime(new Date())); + name = zone2.getDisplayName(Locale.ENGLISH); + logln("Modified PST->" + name); + if (!name.equals("Pacific Standard Time")) + errln("Fail: Expected \"Pacific Standard Time\""); + + // Make sure we get the default display format for Locales + // with no display name data. + Locale zh_CN = Locale.SIMPLIFIED_CHINESE; + name = zone.getDisplayName(zh_CN); + //***************************************************************** + // THE FOLLOWING LINE MUST BE UPDATED IF THE LOCALE DATA CHANGES + // THE FOLLOWING LINE MUST BE UPDATED IF THE LOCALE DATA CHANGES + // THE FOLLOWING LINE MUST BE UPDATED IF THE LOCALE DATA CHANGES + //***************************************************************** + logln("PST(zh_CN)->" + name); + + // Now be smart -- check to see if zh resource is even present. + // If not, we expect the en fallback behavior. + ResourceBundle enRB = LocaleData.getBundle("sun.util.resources.TimeZoneNames", + Locale.ENGLISH); + ResourceBundle zhRB = LocaleData.getBundle("sun.util.resources.TimeZoneNames", + zh_CN); + + boolean noZH = enRB == zhRB; + + if (noZH) { + logln("Warning: Not testing the zh_CN behavior because resource is absent"); + if (!name.equals("Pacific Standard Time")) + errln("Fail: Expected Pacific Standard Time"); + } + else if (!name.equals("Pacific Standard Time") && + !name.equals("\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4") && + !name.equals("GMT-08:00") && + !name.equals("GMT-8:00") && + !name.equals("GMT-0800") && + !name.equals("GMT-800")) { + errln("Fail: Expected GMT-08:00 or something similar"); + errln("************************************************************"); + errln("THE ABOVE FAILURE MAY JUST MEAN THE LOCALE DATA HAS CHANGED"); + errln("************************************************************"); + } + + // Now try a non-existent zone + zone2 = new SimpleTimeZone(90*60*1000, "xyzzy"); + name = zone2.getDisplayName(Locale.ENGLISH); + logln("GMT+90min->" + name); + if (!name.equals("GMT+01:30") && + !name.equals("GMT+1:30") && + !name.equals("GMT+0130") && + !name.equals("GMT+130")) + errln("Fail: Expected GMT+01:30 or something similar"); + } + + public void TestGenericAPI() { + String id = "NewGMT"; + int offset = 12345; + + SimpleTimeZone zone = new SimpleTimeZone(offset, id); + if (zone.useDaylightTime()) { + errln("FAIL: useDaylightTime should return false"); + } + + TimeZone zoneclone = (TimeZone)zone.clone(); + if (!zoneclone.equals(zone)) { + errln("FAIL: clone or operator== failed"); + } + zoneclone.setID("abc"); + if (zoneclone.equals(zone)) { + errln("FAIL: clone or operator!= failed"); + } + + zoneclone = (TimeZone)zone.clone(); + if (!zoneclone.equals(zone)) { + errln("FAIL: clone or operator== failed"); + } + zoneclone.setRawOffset(45678); + if (zoneclone.equals(zone)) { + errln("FAIL: clone or operator!= failed"); + } + + TimeZone saveDefault = TimeZone.getDefault(); + try { + TimeZone.setDefault(zone); + TimeZone defaultzone = TimeZone.getDefault(); + if (defaultzone == zone) { + errln("FAIL: Default object is identical, not clone"); + } + if (!defaultzone.equals(zone)) { + errln("FAIL: Default object is not equal"); + } + } + finally { + TimeZone.setDefault(saveDefault); + } + } + + @SuppressWarnings("deprecation") + public void TestRuleAPI() + { + // ErrorCode status = ZERO_ERROR; + + int offset = (int)(60*60*1000*1.75); // Pick a weird offset + SimpleTimeZone zone = new SimpleTimeZone(offset, "TestZone"); + if (zone.useDaylightTime()) errln("FAIL: useDaylightTime should return false"); + + // Establish our expected transition times. Do this with a non-DST + // calendar with the (above) declared local offset. + GregorianCalendar gc = new GregorianCalendar(zone); + gc.clear(); + gc.set(1990, Calendar.MARCH, 1); + long marchOneStd = gc.getTime().getTime(); // Local Std time midnight + gc.clear(); + gc.set(1990, Calendar.JULY, 1); + long julyOneStd = gc.getTime().getTime(); // Local Std time midnight + + // Starting and ending hours, WALL TIME + int startHour = (int)(2.25 * 3600000); + int endHour = (int)(3.5 * 3600000); + + zone.setStartRule(Calendar.MARCH, 1, 0, startHour); + zone.setEndRule (Calendar.JULY, 1, 0, endHour); + + gc = new GregorianCalendar(zone); + // if (failure(status, "new GregorianCalendar")) return; + + long marchOne = marchOneStd + startHour; + long julyOne = julyOneStd + endHour - 3600000; // Adjust from wall to Std time + + long expMarchOne = 636251400000L; + if (marchOne != expMarchOne) + { + errln("FAIL: Expected start computed as " + marchOne + + " = " + new Date(marchOne)); + logln(" Should be " + expMarchOne + + " = " + new Date(expMarchOne)); + } + + long expJulyOne = 646793100000L; + if (julyOne != expJulyOne) + { + errln("FAIL: Expected start computed as " + julyOne + + " = " + new Date(julyOne)); + logln(" Should be " + expJulyOne + + " = " + new Date(expJulyOne)); + } + + testUsingBinarySearch(zone, new Date(90, Calendar.JANUARY, 1).getTime(), + new Date(90, Calendar.JUNE, 15).getTime(), marchOne); + testUsingBinarySearch(zone, new Date(90, Calendar.JUNE, 1).getTime(), + new Date(90, Calendar.DECEMBER, 31).getTime(), julyOne); + + if (zone.inDaylightTime(new Date(marchOne - 1000)) || + !zone.inDaylightTime(new Date(marchOne))) + errln("FAIL: Start rule broken"); + if (!zone.inDaylightTime(new Date(julyOne - 1000)) || + zone.inDaylightTime(new Date(julyOne))) + errln("FAIL: End rule broken"); + + zone.setStartYear(1991); + if (zone.inDaylightTime(new Date(marchOne)) || + zone.inDaylightTime(new Date(julyOne - 1000))) + errln("FAIL: Start year broken"); + + // failure(status, "TestRuleAPI"); + // delete gc; + // delete zone; + } + + void testUsingBinarySearch(SimpleTimeZone tz, long min, long max, long expectedBoundary) + { + // ErrorCode status = ZERO_ERROR; + boolean startsInDST = tz.inDaylightTime(new Date(min)); + // if (failure(status, "SimpleTimeZone::inDaylightTime")) return; + if (tz.inDaylightTime(new Date(max)) == startsInDST) { + logln("Error: inDaylightTime(" + new Date(max) + ") != " + (!startsInDST)); + return; + } + // if (failure(status, "SimpleTimeZone::inDaylightTime")) return; + while ((max - min) > INTERVAL) { + long mid = (min + max) / 2; + if (tz.inDaylightTime(new Date(mid)) == startsInDST) { + min = mid; + } + else { + max = mid; + } + // if (failure(status, "SimpleTimeZone::inDaylightTime")) return; + } + logln("Binary Search Before: " + min + " = " + new Date(min)); + logln("Binary Search After: " + max + " = " + new Date(max)); + long mindelta = expectedBoundary - min; + long maxdelta = max - expectedBoundary; + if (mindelta >= 0 && + mindelta <= INTERVAL && + mindelta >= 0 && + mindelta <= INTERVAL) + logln("PASS: Expected bdry: " + expectedBoundary + " = " + new Date(expectedBoundary)); + else + errln("FAIL: Expected bdry: " + expectedBoundary + " = " + new Date(expectedBoundary)); + } + + static final int INTERVAL = 100; + + // Bug 006; verify the offset for a specific zone. + public void TestPRTOffset() + { + TimeZone tz = TimeZone.getTimeZone( "PRT" ); + if( tz == null ) { + errln( "FAIL: TimeZone(PRT) is null" ); + } + else{ + if (tz.getRawOffset() != (-4*millisPerHour)) + errln("FAIL: Offset for PRT should be -4"); + } + + } + + // Test various calls + @SuppressWarnings("deprecation") + public void TestVariousAPI518() + { + TimeZone time_zone = TimeZone.getTimeZone("PST"); + Date d = new Date(97, Calendar.APRIL, 30); + + logln("The timezone is " + time_zone.getID()); + + if (time_zone.inDaylightTime(d) != true) + errln("FAIL: inDaylightTime returned false"); + + if (time_zone.useDaylightTime() != true) + errln("FAIL: useDaylightTime returned false"); + + if (time_zone.getRawOffset() != -8*millisPerHour) + errln( "FAIL: getRawOffset returned wrong value"); + + GregorianCalendar gc = new GregorianCalendar(); + gc.setTime(d); + if (time_zone.getOffset(gc.AD, gc.get(gc.YEAR), gc.get(gc.MONTH), + gc.get(gc.DAY_OF_MONTH), + gc.get(gc.DAY_OF_WEEK), 0) + != -7*millisPerHour) + errln("FAIL: getOffset returned wrong value"); + } + + // Test getAvailableID API + public void TestGetAvailableIDs913() + { + StringBuffer buf = new StringBuffer("TimeZone.getAvailableIDs() = { "); + String[] s = TimeZone.getAvailableIDs(); + for (int i=0; i<s.length; ++i) + { + if (i > 0) buf.append(", "); + buf.append(s[i]); + } + buf.append(" };"); + logln(buf.toString()); + + buf.setLength(0); + buf.append("TimeZone.getAvailableIDs(GMT+02:00) = { "); + s = TimeZone.getAvailableIDs(+2 * 60 * 60 * 1000); + for (int i=0; i<s.length; ++i) + { + if (i > 0) buf.append(", "); + buf.append(s[i]); + } + buf.append(" };"); + logln(buf.toString()); + + TimeZone tz = TimeZone.getTimeZone("PST"); + if (tz != null) + logln("getTimeZone(PST) = " + tz.getID()); + else + errln("FAIL: getTimeZone(PST) = null"); + + tz = TimeZone.getTimeZone("America/Los_Angeles"); + if (tz != null) + logln("getTimeZone(America/Los_Angeles) = " + tz.getID()); + else + errln("FAIL: getTimeZone(PST) = null"); + + // Bug 4096694 + tz = TimeZone.getTimeZone("NON_EXISTENT"); + if (tz == null) + errln("FAIL: getTimeZone(NON_EXISTENT) = null"); + else if (!tz.getID().equals("GMT")) + errln("FAIL: getTimeZone(NON_EXISTENT) = " + tz.getID()); + } + + /** + * Bug 4107276 + */ + public void TestDSTSavings() { + // It might be better to find a way to integrate this test into the main TimeZone + // tests above, but I don't have time to figure out how to do this (or if it's + // even really a good idea). Let's consider that a future. --rtg 1/27/98 + SimpleTimeZone tz = new SimpleTimeZone(-5 * millisPerHour, "dstSavingsTest", + Calendar.MARCH, 1, 0, 0, Calendar.SEPTEMBER, 1, 0, 0, + (int)(0.5 * millisPerHour)); + + if (tz.getRawOffset() != -5 * millisPerHour) + errln("Got back a raw offset of " + (tz.getRawOffset() / millisPerHour) + + " hours instead of -5 hours."); + if (!tz.useDaylightTime()) + errln("Test time zone should use DST but claims it doesn't."); + if (tz.getDSTSavings() != 0.5 * millisPerHour) + errln("Set DST offset to 0.5 hour, but got back " + (tz.getDSTSavings() / + millisPerHour) + " hours instead."); + + int offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JANUARY, 1, + Calendar.THURSDAY, 10 * millisPerHour); + if (offset != -5 * millisPerHour) + errln("The offset for 10 AM, 1/1/98 should have been -5 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JUNE, 1, Calendar.MONDAY, + 10 * millisPerHour); + if (offset != -4.5 * millisPerHour) + errln("The offset for 10 AM, 6/1/98 should have been -4.5 hours, but we got " + + (offset / millisPerHour) + " hours."); + + tz.setDSTSavings(millisPerHour); + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JANUARY, 1, + Calendar.THURSDAY, 10 * millisPerHour); + if (offset != -5 * millisPerHour) + errln("The offset for 10 AM, 1/1/98 should have been -5 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.JUNE, 1, Calendar.MONDAY, + 10 * millisPerHour); + if (offset != -4 * millisPerHour) + errln("The offset for 10 AM, 6/1/98 (with a 1-hour DST offset) should have been -4 hours, but we got " + + (offset / millisPerHour) + " hours."); + } + + /** + * Bug 4107570 + */ + public void TestAlternateRules() { + // Like TestDSTSavings, this test should probably be integrated somehow with the main + // test at the top of this class, but I didn't have time to figure out how to do that. + // --rtg 1/28/98 + + SimpleTimeZone tz = new SimpleTimeZone(-5 * millisPerHour, "alternateRuleTest"); + + // test the day-of-month API + tz.setStartRule(Calendar.MARCH, 10, 12 * millisPerHour); + tz.setEndRule(Calendar.OCTOBER, 20, 12 * millisPerHour); + + int offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 5, + Calendar.THURSDAY, 10 * millisPerHour); + if (offset != -5 * millisPerHour) + errln("The offset for 10AM, 3/5/98 should have been -5 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 15, + Calendar.SUNDAY, 10 * millisPerHour); + if (offset != -4 * millisPerHour) + errln("The offset for 10AM, 3/15/98 should have been -4 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 15, + Calendar.THURSDAY, 10 * millisPerHour); + if (offset != -4 * millisPerHour) + errln("The offset for 10AM, 10/15/98 should have been -4 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 25, + Calendar.SUNDAY, 10 * millisPerHour); + if (offset != -5 * millisPerHour) + errln("The offset for 10AM, 10/25/98 should have been -5 hours, but we got " + + (offset / millisPerHour) + " hours."); + + // test the day-of-week-after-day-in-month API + tz.setStartRule(Calendar.MARCH, 10, Calendar.FRIDAY, 12 * millisPerHour, true); + tz.setEndRule(Calendar.OCTOBER, 20, Calendar.FRIDAY, 12 * millisPerHour, false); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 11, + Calendar.WEDNESDAY, 10 * millisPerHour); + if (offset != -5 * millisPerHour) + errln("The offset for 10AM, 3/11/98 should have been -5 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.MARCH, 14, + Calendar.SATURDAY, 10 * millisPerHour); + if (offset != -4 * millisPerHour) + errln("The offset for 10AM, 3/14/98 should have been -4 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 15, + Calendar.THURSDAY, 10 * millisPerHour); + if (offset != -4 * millisPerHour) + errln("The offset for 10AM, 10/15/98 should have been -4 hours, but we got " + + (offset / millisPerHour) + " hours."); + + offset = tz.getOffset(GregorianCalendar.AD, 1998, Calendar.OCTOBER, 17, + Calendar.SATURDAY, 10 * millisPerHour); + if (offset != -5 * millisPerHour) + errln("The offset for 10AM, 10/17/98 should have been -5 hours, but we got " + + (offset / millisPerHour) + " hours."); + } +} + +//eof diff --git a/test/java/util/TimeZone/TransitionTest.java b/test/java/util/TimeZone/TransitionTest.java new file mode 100644 index 0000000000..5f012d09d7 --- /dev/null +++ b/test/java/util/TimeZone/TransitionTest.java @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4278609 4761696 + * @library /java/text/testlib + * @summary Make sure to handle DST transition ending at 0:00 January 1. + */ + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Locale; +import java.util.SimpleTimeZone; +import java.util.TimeZone; + +public class TransitionTest extends IntlTest { + + public static void main(String[] args) throws Exception { + new TransitionTest().run(args); + } + + public void Test4278609() { + SimpleTimeZone tz = new SimpleTimeZone(0, "MyTimeZone", + /* DST start day: August, 1, 0:00 */ + Calendar.AUGUST, 1, 0, 0, + /* DST end day: January, 1, 0:00 (wall-clock)*/ + Calendar.JANUARY, 1, 0, 0, + 60 * 60 * 1000); + + Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); + + // setting a date using GMT zone just after the end rule of tz zone + cal.clear(); + cal.set(Calendar.ERA, GregorianCalendar.AD); + cal.set(1998, Calendar.DECEMBER, 31, 23, 01, 00); + + Date date = cal.getTime(); + + int millis = cal.get(Calendar.HOUR_OF_DAY) * 3600000 + + cal.get(Calendar.MINUTE) * 60000 + + cal.get(Calendar.SECOND) * 1000 + + cal.get(Calendar.MILLISECOND); + /* we must use standard local time */ + millis += tz.getRawOffset(); + + int offset = tz.getOffset(cal.get(Calendar.ERA), + cal.get(Calendar.YEAR), + cal.get(Calendar.MONTH), + cal.get(Calendar.DATE), + cal.get(Calendar.DAY_OF_WEEK), + millis); + + if (offset != 0) { + SimpleDateFormat format = new SimpleDateFormat("dd MMM HH:mm:ss zzz", + Locale.US); + format.setTimeZone(tz); + errln("Wrong DST transition: " + tz + + "\na date just after DST = " + format.format(date) + + "\ngetOffset = " + offset); + } + } + + /* + * 4761696: Rewrite SimpleTimeZone to support correct DST transitions + * + * Derived from JCK test cases some of which specify wrong day of week values. + */ + public void Test4761696() { + GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); + + // test#1 + int rawOffset = -43200000; + int saving = 1800000; + int timeOfDay = 84600001; + SimpleTimeZone tz = new SimpleTimeZone(rawOffset, "stz", + Calendar.JULY, 1, 0, 0, + Calendar.JANUARY, 1, 0, 0, + saving); + int year = Integer.MIN_VALUE; + tz.setStartYear(year); + int offset = tz.getOffset(GregorianCalendar.AD, + year, + Calendar.DECEMBER, + 31, + 1, // should be SATURDAY + timeOfDay); + int y = (int) mod((long)year, 28L); // 28-year cycle + cal.clear(); + cal.set(cal.ERA, cal.AD); + cal.set(y, Calendar.DECEMBER, 31); + cal.set(cal.MILLISECOND, timeOfDay); + long localtime = cal.getTimeInMillis() + rawOffset; // local standard time + + cal.clear(); + cal.set(cal.ERA, cal.AD); + cal.set(y + 1, Calendar.JANUARY, 1); + cal.set(cal.MILLISECOND, -saving); + long endTime = cal.getTimeInMillis() + rawOffset; + long expectedOffset = (localtime < endTime) ? rawOffset + saving : rawOffset; + if (offset != expectedOffset) { + errln("test#1: wrong offset: got "+offset+", expected="+expectedOffset); + } + + // test#2 + saving = 1; + timeOfDay = 0; + tz = new SimpleTimeZone(rawOffset, "stz", + Calendar.JULY, 1, 0, 0, + Calendar.JANUARY, 1, 0, 0, + saving); + tz.setStartYear(year); + offset = tz.getOffset(GregorianCalendar.AD, + year, + Calendar.AUGUST, + 15, + 1, // should be MONDAY + timeOfDay); + y = (int) mod((long)year, 28L); // 28-year cycle + cal.clear(); + cal.set(y, Calendar.AUGUST, 15); + cal.set(cal.MILLISECOND, timeOfDay); + localtime = cal.getTimeInMillis() + rawOffset; // local standard time + + cal.clear(); + cal.set(y + 1, Calendar.JANUARY, 1); + cal.set(cal.MILLISECOND, -saving); + endTime = cal.getTimeInMillis() + rawOffset; + expectedOffset = (localtime < endTime) ? rawOffset + saving : rawOffset; + if (offset != expectedOffset) { + errln("Wrong offset: got "+offset+", expected="+expectedOffset); + } + + rawOffset = 43200000; + saving = 1; + timeOfDay = 3599998; + tz = new SimpleTimeZone(rawOffset, "stz", + Calendar.JULY, 1, 0, 3600000, + Calendar.JANUARY, 1, 0, 3600000, + saving); + tz.setStartYear(year); + offset = tz.getOffset(GregorianCalendar.AD, + year, + Calendar.JANUARY, + 1, + 1, + timeOfDay); + y = (int) mod((long)year, 28L); // 28-year cycle + cal.clear(); + cal.set(y, Calendar.JANUARY, 1); + cal.set(cal.MILLISECOND, timeOfDay); + localtime = cal.getTimeInMillis() + rawOffset; // local standard time + + cal.clear(); + cal.set(y + 1, Calendar.JANUARY, 1); + cal.set(cal.MILLISECOND, 3600000-saving); + endTime = cal.getTimeInMillis() + rawOffset; + expectedOffset = (localtime < endTime) ? rawOffset + saving : rawOffset; + if (offset != expectedOffset) { + errln("test#2: wrong offset: got "+offset+", expected="+expectedOffset); + } + + // test#3 + rawOffset = -43200000; + saving = 1800000; + timeOfDay = 84600001; + tz = new SimpleTimeZone(rawOffset, "stz", + Calendar.SEPTEMBER, 1, 0, 0, + Calendar.MARCH, 1, 0, 0, + saving); + tz.setStartYear(year); + offset = tz.getOffset(GregorianCalendar.AD, + year, + Calendar.FEBRUARY, + 28, + 1, + timeOfDay); + y = (int) mod((long)year, 28L); // 28-year cycle + cal.clear(); + cal.set(y, Calendar.FEBRUARY, 28); + cal.set(cal.MILLISECOND, timeOfDay); + localtime = cal.getTimeInMillis() + rawOffset; // local standard time + + cal.clear(); + cal.set(y, Calendar.MARCH, 1); + cal.set(cal.MILLISECOND, -saving); + endTime = cal.getTimeInMillis() + rawOffset; + expectedOffset = (localtime < endTime) ? rawOffset + saving : rawOffset; + if (offset != expectedOffset) { + errln("test#3: wrong offset: got "+offset+", expected="+expectedOffset); + } + + // test#4 + rawOffset = -43200000; + saving = 1; + timeOfDay = 0; + tz = new SimpleTimeZone(rawOffset, "stz", + Calendar.JANUARY, -4, 1, 3600000, + Calendar.JULY, -4, 1, 3600000, + saving); + tz.setStartYear(year); + offset = tz.getOffset(GregorianCalendar.AD, + year, + Calendar.JANUARY, + 10, + 2, // should be 1 (SUNDAY) + timeOfDay); + y = (int) mod((long)year, 28L); // 28-year cycle + cal.clear(); + cal.set(y, Calendar.JANUARY, 10); + cal.set(cal.MILLISECOND, timeOfDay); + localtime = cal.getTimeInMillis() + rawOffset; // local standard time + + cal.clear(); + cal.set(cal.YEAR, y); + cal.set(cal.MONTH, Calendar.JANUARY); + cal.set(cal.DAY_OF_MONTH, 8); + cal.set(cal.WEEK_OF_MONTH, cal.getActualMaximum(cal.WEEK_OF_MONTH)-4+1); + cal.set(cal.DAY_OF_WEEK, 1); + cal.set(cal.MILLISECOND, 3600000-saving); + long startTime = cal.getTimeInMillis() + rawOffset; + expectedOffset = (localtime >= startTime) ? rawOffset + saving : rawOffset; + if (offset != expectedOffset) { + errln("test#4: wrong offset: got "+offset+", expected="+expectedOffset); + } + + // test#5 + rawOffset = 0; + saving = 3600000; + timeOfDay = 7200000; + year = 1982; + tz = new SimpleTimeZone(rawOffset, "stz", + Calendar.APRIL, 1, 0, 7200000, + Calendar.OCTOBER, 10, 0, 7200000, + saving); + offset = tz.getOffset(GregorianCalendar.AD, + year, + Calendar.OCTOBER, + 10, + 1, + timeOfDay); + cal.clear(); + cal.set(year, Calendar.OCTOBER, 10); + cal.set(cal.MILLISECOND, timeOfDay); + localtime = cal.getTimeInMillis() + rawOffset; // local standard time + + cal.clear(); + cal.set(year, Calendar.OCTOBER, 10); + cal.set(cal.MILLISECOND, 7200000-saving); + endTime = cal.getTimeInMillis() + rawOffset; + expectedOffset = (localtime < endTime) ? rawOffset + saving : rawOffset; + if (offset != expectedOffset) { + errln("test#5: wrong offset: got "+offset+", expected="+expectedOffset); + } + } + + public static final long floorDivide(long n, long d) { + return ((n >= 0) ? + (n / d) : (((n + 1L) / d) - 1L)); + } + + public static final long mod(long x, long y) { + return (x - y * floorDivide(x, y)); + } +} diff --git a/test/java/util/TimeZone/UTCAliasTest.java b/test/java/util/TimeZone/UTCAliasTest.java new file mode 100644 index 0000000000..aa7079326c --- /dev/null +++ b/test/java/util/TimeZone/UTCAliasTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6282072 + * @summary Make sure that "UTC" is an alias of "Etc/UTC" as defined in the tzdata backward. + * @modules java.base/sun.util.calendar + * @compile -XDignore.symbol.file UTCAliasTest.java + */ + +import java.util.*; +import sun.util.calendar.ZoneInfo; + +public class UTCAliasTest { + public static void main(String[] args) { + Map<String,String> map = ZoneInfo.getAliasTable(); + String alias = map.get("UTC"); + if (!alias.equals("Etc/UTC")) { + throw new RuntimeException("got " + alias + ", expected Etc/UTC"); + } + TimeZone GMT = TimeZone.getTimeZone("GMT"); + TimeZone UTC = TimeZone.getTimeZone("UTC"); + if (!GMT.hasSameRules(UTC)) { + throw new RuntimeException("GMT and UTC have different rules"); + } + TimeZone EtcUTC = TimeZone.getTimeZone("Etc/UTC"); + if (!UTC.hasSameRules(EtcUTC)) { + throw new RuntimeException("UTC and Etc/UTC have different rules"); + } + } +} diff --git a/test/java/util/TimeZone/bug4096952.java b/test/java/util/TimeZone/bug4096952.java new file mode 100644 index 0000000000..20ccc685ac --- /dev/null +++ b/test/java/util/TimeZone/bug4096952.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4096952 + * @summary simple serialization/deserialization test + */ + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.TimeZone; + +public class bug4096952 { + + public static void main(String[] args) { + int errors = 0; + String[] ZONES = { "GMT", "MET", "IST" }; + for (String id : ZONES) { + TimeZone zone = TimeZone.getTimeZone(id); + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream ostream = new ObjectOutputStream(baos)) { + ostream.writeObject(zone); + } + try (ObjectInputStream istream + = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()))) { + if (!zone.equals(istream.readObject())) { + errors++; + System.out.println("Time zone " + id + " are not equal to serialized/deserialized one."); + } else { + System.out.println("Time zone " + id + " ok."); + } + } + } catch (IOException | ClassNotFoundException e) { + errors++; + System.out.println(e); + } + } + if (errors > 0) { + throw new RuntimeException("test failed"); + } + } +} diff --git a/test/java/util/stream/test/org/openjdk/tests/java/util/stream/CustomFJPoolTest.java b/test/java/util/stream/test/org/openjdk/tests/java/util/stream/CustomFJPoolTest.java new file mode 100644 index 0000000000..e2846bf883 --- /dev/null +++ b/test/java/util/stream/test/org/openjdk/tests/java/util/stream/CustomFJPoolTest.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package org.openjdk.tests.java.util.stream; + +import org.testng.annotations.Test; + +import java.util.Comparator; +import java.util.Spliterator; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinTask; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; +import java.util.stream.IntStream; +import java.util.stream.StreamSupport; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +/** + * Tests stream execution in a custom ForkJoinPool. See JDK-8190974. + */ +@Test +public class CustomFJPoolTest { + + // A Spliterator that counts the number of spliterators created + // including itself, thus the count starts at 1 + static class SplitCountingSpliterator<T> implements Spliterator<T> { + final Spliterator<T> s; + final AtomicInteger nsplits; + + // Top-level constructor + public SplitCountingSpliterator(Spliterator<T> s) { + this.s = s; + nsplits = new AtomicInteger(1); + } + + // Splitting constructor + SplitCountingSpliterator(Spliterator<T> s, AtomicInteger nsplits) { + this.s = s; + this.nsplits = nsplits; + } + + int splits() { + return nsplits.get(); + } + + @Override + + public boolean tryAdvance(Consumer<? super T> action) { + return s.tryAdvance(action); + } + + @Override + public void forEachRemaining(Consumer<? super T> action) { + s.forEachRemaining(action); + } + + @Override + public Spliterator<T> trySplit() { + Spliterator<T> split = s.trySplit(); + if (split != null) { + nsplits.incrementAndGet(); + return new SplitCountingSpliterator<>(split, nsplits); + } + else { + return null; + } + } + + @Override + public long estimateSize() { + return s.estimateSize(); + } + + @Override + public long getExactSizeIfKnown() { + return s.getExactSizeIfKnown(); + } + + @Override + public int characteristics() { + return s.characteristics(); + } + + @Override + public boolean hasCharacteristics(int characteristics) { + return s.hasCharacteristics(characteristics); + } + + @Override + public Comparator<? super T> getComparator() { + return s.getComparator(); + } + } + + public void testCustomPools() throws Exception { + int splitsForP1 = countSplits(new ForkJoinPool(1)); + int splitsForP2 = countSplits(new ForkJoinPool(2)); + assertEquals(splitsForP2, splitsForP1 * 2); + + int commonParallelism = ForkJoinPool.getCommonPoolParallelism(); + if (commonParallelism > 1 && commonParallelism < 128) { + int splitsForPHalfC = countSplits(new ForkJoinPool(commonParallelism / 2)); + int splitsForPC = countSplits(ForkJoinPool.commonPool()); + + assertTrue(splitsForPHalfC < splitsForPC); + assertEquals(splitsForPC / splitsForPHalfC, + nearestPowerOfTwo(commonParallelism) / nearestPowerOfTwo(commonParallelism / 2)); + } + } + + static int countSplits(ForkJoinPool fjp) throws Exception { + // The number of splits will be equivalent to the number of leaf nodes + // and will be a power of 2 + ForkJoinTask<Integer> fInteger = fjp.submit(() -> { + Spliterator<Integer> s = IntStream.range(0, 1024).boxed().parallel().spliterator(); + SplitCountingSpliterator<Integer> cs = new SplitCountingSpliterator<>(s); + StreamSupport.stream(cs, true).forEach(e -> {}); + return cs.splits(); + }); + return fInteger.get(); + } + + static int nearestPowerOfTwo(int i) { + return (i & (i - 1)) == 0 + ? i + : 1 << (32 - Integer.numberOfLeadingZeros(i)); + } +} diff --git a/test/java/util/stream/test/org/openjdk/tests/java/util/stream/FlatMapOpTest.java b/test/java/util/stream/test/org/openjdk/tests/java/util/stream/FlatMapOpTest.java index 0abe67e4d4..3074e07229 100644 --- a/test/java/util/stream/test/org/openjdk/tests/java/util/stream/FlatMapOpTest.java +++ b/test/java/util/stream/test/org/openjdk/tests/java/util/stream/FlatMapOpTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ /* * @test * @summary flat-map operations - * @bug 8044047 8076458 + * @bug 8044047 8076458 8075939 */ package org.openjdk.tests.java.util.stream; @@ -36,6 +36,7 @@ import java.util.Collection; import java.util.Collections; import java.util.function.Function; import java.util.stream.*; +import java.util.concurrent.atomic.AtomicInteger; import static java.util.stream.LambdaTestHelpers.*; import static java.util.stream.ThowableHelper.checkNPE; @@ -43,6 +44,7 @@ import static java.util.stream.ThowableHelper.checkNPE; @Test public class FlatMapOpTest extends OpTestCase { + @Test public void testNullMapper() { checkNPE(() -> Stream.of(1).flatMap(null)); checkNPE(() -> IntStream.of(1).flatMap(null)); @@ -53,6 +55,7 @@ public class FlatMapOpTest extends OpTestCase { static final Function<Integer, Stream<Integer>> integerRangeMapper = e -> IntStream.range(0, e).boxed(); + @Test public void testFlatMap() { String[] stringsArray = {"hello", "there", "", "yada"}; Stream<String> strings = Arrays.asList(stringsArray).stream(); @@ -85,11 +88,24 @@ public class FlatMapOpTest extends OpTestCase { exerciseOps(data, s -> s.flatMap((Integer e) -> IntStream.range(0, e).boxed().limit(10))); } + @Test + public void testOpsShortCircuit() { + AtomicInteger count = new AtomicInteger(); + Stream.of(0).flatMap(i -> IntStream.range(0, 100).boxed()). + peek(i -> count.incrementAndGet()). + limit(10).toArray(); + assertEquals(count.get(), 10); + } + // @Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class) public void testIntOps(String name, TestData.OfInt data) { - Collection<Integer> result = exerciseOps(data, s -> s.flatMap(i -> Collections.singleton(i).stream().mapToInt(j -> j))); + Collection<Integer> result = exerciseOps(data, s -> s.flatMap(IntStream::of)); + assertEquals(data.size(), result.size()); + assertContents(data, result); + + result = exerciseOps(data, s -> s.boxed().flatMapToInt(IntStream::of)); assertEquals(data.size(), result.size()); assertContents(data, result); @@ -101,13 +117,35 @@ public class FlatMapOpTest extends OpTestCase { public void testIntOpsX(String name, TestData.OfInt data) { exerciseOps(data, s -> s.flatMap(e -> IntStream.range(0, e))); exerciseOps(data, s -> s.flatMap(e -> IntStream.range(0, e).limit(10))); + + exerciseOps(data, s -> s.boxed().flatMapToInt(e -> IntStream.range(0, e))); + exerciseOps(data, s -> s.boxed().flatMapToInt(e -> IntStream.range(0, e).limit(10))); + } + + @Test + public void testIntOpsShortCircuit() { + AtomicInteger count = new AtomicInteger(); + IntStream.of(0).flatMap(i -> IntStream.range(0, 100)). + peek(i -> count.incrementAndGet()). + limit(10).toArray(); + assertEquals(count.get(), 10); + + count.set(0); + Stream.of(0).flatMapToInt(i -> IntStream.range(0, 100)). + peek(i -> count.incrementAndGet()). + limit(10).toArray(); + assertEquals(count.get(), 10); } // @Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class) public void testLongOps(String name, TestData.OfLong data) { - Collection<Long> result = exerciseOps(data, s -> s.flatMap(i -> Collections.singleton(i).stream().mapToLong(j -> j))); + Collection<Long> result = exerciseOps(data, s -> s.flatMap(LongStream::of)); + assertEquals(data.size(), result.size()); + assertContents(data, result); + + result = exerciseOps(data, s -> s.boxed().flatMapToLong(LongStream::of)); assertEquals(data.size(), result.size()); assertContents(data, result); @@ -121,11 +159,30 @@ public class FlatMapOpTest extends OpTestCase { exerciseOps(data, s -> s.flatMap(e -> LongStream.range(0, e).limit(10))); } + @Test + public void testLongOpsShortCircuit() { + AtomicInteger count = new AtomicInteger(); + LongStream.of(0).flatMap(i -> LongStream.range(0, 100)). + peek(i -> count.incrementAndGet()). + limit(10).toArray(); + assertEquals(count.get(), 10); + + count.set(0); + Stream.of(0).flatMapToLong(i -> LongStream.range(0, 100)). + peek(i -> count.incrementAndGet()). + limit(10).toArray(); + assertEquals(count.get(), 10); + } + // @Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class) public void testDoubleOps(String name, TestData.OfDouble data) { - Collection<Double> result = exerciseOps(data, s -> s.flatMap(i -> Collections.singleton(i).stream().mapToDouble(j -> j))); + Collection<Double> result = exerciseOps(data, s -> s.flatMap(DoubleStream::of)); + assertEquals(data.size(), result.size()); + assertContents(data, result); + + result = exerciseOps(data, s -> s.boxed().flatMapToDouble(DoubleStream::of)); assertEquals(data.size(), result.size()); assertContents(data, result); @@ -138,4 +195,19 @@ public class FlatMapOpTest extends OpTestCase { exerciseOps(data, s -> s.flatMap(e -> IntStream.range(0, (int) e).asDoubleStream())); exerciseOps(data, s -> s.flatMap(e -> IntStream.range(0, (int) e).limit(10).asDoubleStream())); } + + @Test + public void testDoubleOpsShortCircuit() { + AtomicInteger count = new AtomicInteger(); + DoubleStream.of(0).flatMap(i -> IntStream.range(0, 100).asDoubleStream()). + peek(i -> count.incrementAndGet()). + limit(10).toArray(); + assertEquals(count.get(), 10); + + count.set(0); + Stream.of(0).flatMapToDouble(i -> IntStream.range(0, 100).asDoubleStream()). + peek(i -> count.incrementAndGet()). + limit(10).toArray(); + assertEquals(count.get(), 10); + } } diff --git a/test/java/util/zip/ZipFile/MultiThreadedReadTest.java b/test/java/util/zip/ZipFile/MultiThreadedReadTest.java index d4cbd5384d..c68cfe3864 100644 --- a/test/java/util/zip/ZipFile/MultiThreadedReadTest.java +++ b/test/java/util/zip/ZipFile/MultiThreadedReadTest.java @@ -29,11 +29,13 @@ * @run main MultiThreadedReadTest */ +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.nio.file.Paths; import java.util.Random; +import java.util.zip.CRC32; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; @@ -42,7 +44,8 @@ import jdk.testlibrary.FileUtils; public class MultiThreadedReadTest extends Thread { private static final int NUM_THREADS = 10; - private static final String ZIPFILE_NAME = "large.zip"; + private static final String ZIPFILE_NAME = + System.currentTimeMillis() + "-bug8038491-tmp.large.zip"; private static final String ZIPENTRY_NAME = "random.txt"; private static InputStream is = null; @@ -61,23 +64,34 @@ public class MultiThreadedReadTest extends Thread { threadArray[i].join(); } } finally { + long t = System.currentTimeMillis(); FileUtils.deleteFileIfExistsWithRetry(Paths.get(ZIPFILE_NAME)); + System.out.println("Deleting zip file took:" + + (System.currentTimeMillis() - t) + "ms"); } } private static void createZipFile() throws Exception { - try (ZipOutputStream zos = - new ZipOutputStream(new FileOutputStream(ZIPFILE_NAME))) { - - zos.putNextEntry(new ZipEntry(ZIPENTRY_NAME)); - StringBuilder sb = new StringBuilder(); - Random rnd = new Random(); - for(int i = 0; i < 1000; i++) { - // append some random string for ZipEntry - sb.append(Long.toString(rnd.nextLong())); + CRC32 crc32 = new CRC32(); + long t = System.currentTimeMillis(); + File zipFile = new File(ZIPFILE_NAME); + try (FileOutputStream fos = new FileOutputStream(zipFile); + BufferedOutputStream bos = new BufferedOutputStream(fos); + ZipOutputStream zos = new ZipOutputStream(bos)) { + ZipEntry e = new ZipEntry(ZIPENTRY_NAME); + e.setMethod(ZipEntry.STORED); + StringBuilder blahBuilder = new StringBuilder(); + for (int i = 0; i < 10_000; i++) { + blahBuilder.append("BLAH"); } - byte[] b = sb.toString().getBytes(); - zos.write(b, 0, b.length); + byte[] toWrite = blahBuilder.toString().getBytes(); + e.setTime(t); + e.setSize(toWrite.length); + crc32.reset(); + crc32.update(toWrite); + e.setCrc(crc32.getValue()); + zos.putNextEntry(e); + zos.write(toWrite); } } @@ -86,6 +100,7 @@ public class MultiThreadedReadTest extends Thread { try { while (is.read() != -1) { } } catch (Exception e) { + System.out.println("read exception:" + e); // Swallow any Exceptions (which are expected) - we're only interested in the crash } } |