From: Marek Safar Date: Tue, 15 May 2012 12:35:39 +0000 (+0100) Subject: Update locale builder tool X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=2e290094d7ce658a889933782aea60b67b881c42;p=mono.git Update locale builder tool --- diff --git a/tools/locale-builder/.gitignore b/tools/locale-builder/.gitignore index 6dff0ce7cc9..0e271f649a1 100644 --- a/tools/locale-builder/.gitignore +++ b/tools/locale-builder/.gitignore @@ -1,7 +1,6 @@ /Makefile /Makefile.in /culture-info-tables.h -/icu_locales.tar.gz +/*.zip /locale-builder.exe /locale-builder.exe.mdb -/icu_langs.tar.gz diff --git a/tools/locale-builder/CultureInfoEntry.cs b/tools/locale-builder/CultureInfoEntry.cs index fb9f642e242..4aefd7cc943 100644 --- a/tools/locale-builder/CultureInfoEntry.cs +++ b/tools/locale-builder/CultureInfoEntry.cs @@ -10,104 +10,129 @@ using System; using System.Text; +using System.Collections.Generic; +using System.Globalization; -namespace Mono.Tools.LocaleBuilder { +namespace Mono.Tools.LocaleBuilder +{ + public class CultureInfoEntry : Entry + { + string language; - public class CultureInfoEntry : Entry { + public string Script; + public string Territory; - public static CultureInfoEntry ShallowCopy (CultureInfoEntry e) + public string EnglishName; + public string DisplayName; + public string NativeName; + public string ThreeLetterWindowsLanguageName; + public string TwoLetterISOLanguageName; + public string ThreeLetterISOLanguageName; + public string LCID; + public string ParentLcid; + public string SpecificLcid; + public RegionInfoEntry RegionInfoEntry; + public DateTimeFormatEntry DateTimeFormatEntry; + public NumberFormatEntry NumberFormatEntry; + public TextInfoEntry TextInfoEntry; + public int DateTimeIndex; + public int NumberIndex; + public string NativeCurrencyName; + public string NativeTerritoryName; + public string[] NativeCalendarNames = new string[Constants.NUM_CALENDARS]; + + public CalendarType CalendarType; + public GregorianCalendarTypes GregorianCalendarType; + + public List Children = new List (); + + public int Row; + + public CultureInfoEntry () + { + DateTimeFormatEntry = new DateTimeFormatEntry (); + NumberFormatEntry = new NumberFormatEntry (); + } + + public string Language { + get { + return language; + } + set { + language = value; + } + } + + public bool HasMissingLocale { get; set; } + + public string OriginalName { get; set; } + + public CultureInfoEntry Parent { get; set; } + + public string Name { + get { + string s = language; + if (Script != null) + s = s + "-" + Script; + if (Territory != null) + s = s + "-" + Territory; + + return s; + } + } + + public string GetExportName () + { + return OriginalName.Replace ('_', '-'); + } + + public override string ToString () + { + StringBuilder builder = new StringBuilder (); + AppendTableRow (builder); + return builder.ToString (); + } + + public void AppendTableRow (StringBuilder builder) + { + builder.Append ("\t{"); + builder.Append (LCID).Append (", "); + builder.Append (ParentLcid).Append (", "); + + int calendar_type = (int) CalendarType; + calendar_type <<= 8; + if (CalendarType == CalendarType.Gregorian) + calendar_type |= (int) GregorianCalendarType; + + builder.Append (calendar_type).Append (", "); + builder.Append (RegionInfoEntry == null ? -1 : RegionInfoEntry.Index).Append (", "); + builder.Append (EncodeStringIdx (GetExportName ())).Append (", "); + builder.Append (EncodeStringIdx (EnglishName)).Append (", "); + builder.Append (EncodeStringIdx (NativeName)).Append (", "); + builder.Append (EncodeStringIdx (ThreeLetterWindowsLanguageName)).Append (", "); + builder.Append (EncodeStringIdx (ThreeLetterISOLanguageName)).Append (", "); + builder.Append (EncodeStringIdx (TwoLetterISOLanguageName)).Append (", "); + builder.Append (EncodeStringIdx (Territory)).Append (", "); + AppendNames (builder, NativeCalendarNames).Append (", "); + builder.Append (DateTimeFormatEntry.Row).Append (", "); + builder.Append (NumberFormatEntry.Row).Append (", "); + builder.Append (TextInfoEntry.ToString ()); + builder.Append ('}'); + } + + private string ValuesString (int[] values) { - return (CultureInfoEntry) e.MemberwiseClone (); + StringBuilder builder = new StringBuilder (); + builder.Append ('{'); + for (int i = 0; i < values.Length; i++) { + builder.Append (values[i].ToString ()); + if (i + 1 < values.Length) + builder.Append (", "); + } + builder.Append ("}"); + return builder.ToString (); } + } - string language; - - public string Territory; - public string EnglishName; - public string DisplayName; - public string NativeName; - public string IcuName; - public string Win3Lang; - public string ISO2Lang; - public string ISO3Lang; - public string Lcid; - public string ParentLcid; - public string SpecificLcid; - public int RegionId = -1; - public DateTimeFormatEntry DateTimeFormatEntry; - public NumberFormatEntry NumberFormatEntry; - public TextInfoEntry TextInfoEntry; - public int [] CalendarData = new int [5]; - public int DateTimeIndex; - public int NumberIndex; - - - public int Row; - - public CultureInfoEntry () - { - DateTimeFormatEntry = new DateTimeFormatEntry (); - NumberFormatEntry = new NumberFormatEntry (); - } - - public string Language { - get { - return language; - } - set { - language = (value == "zh") ? "zh-CHS" : value; - } - } - - public string Name { - get { - if (Territory == null) - return Language; - return (Language.StartsWith ("zh") ? "zh" : Language) + "-" + Territory; - } - } - - public override string ToString () - { - StringBuilder builder = new StringBuilder (); - AppendTableRow (builder); - return builder.ToString (); - } - - public void AppendTableRow (StringBuilder builder) - { - builder.Append ("\t{"); - builder.AppendFormat ("{0}, {1}, {2}, {3}," + - "{4}, {5}, {6}, " + - "{7}, {8}, {9}, " + - "{10}, {11}, {12}, " + - "{13}, " + - "{14}, {15}, {16}", - Lcid, ParentLcid, SpecificLcid, RegionId, - EncodeStringIdx (Name), EncodeStringIdx (IcuName), EncodeStringIdx (EnglishName), - EncodeStringIdx (DisplayName), EncodeStringIdx (NativeName), EncodeStringIdx (Win3Lang), - EncodeStringIdx (ISO3Lang), EncodeStringIdx (ISO2Lang), - EncodeStringIdx (Territory), - ValuesString (CalendarData), - DateTimeFormatEntry == null ? -1 : DateTimeFormatEntry.Row, - NumberFormatEntry == null ? -1 : NumberFormatEntry.Row, - TextInfoEntry.ToString ()); - builder.Append ('}'); - } - - private string ValuesString (int [] values) - { - StringBuilder builder = new StringBuilder (); - builder.Append ('{'); - for (int i=0; i // // (C) 2004, Novell, Inc (http://www.novell.com) +// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -using System; using System.Text; -using System.Collections; - -namespace Mono.Tools.LocaleBuilder { - - public class DateTimeFormatEntry : Entry { - - public string CalendarType; - public ArrayList AbbreviatedDayNames = new ArrayList (); - public ArrayList AbbreviatedMonthNames = new ArrayList (); - public string AMDesignator; - public int CalendarWeekRule; - public string DateSeparator; - public ArrayList DayNames = new ArrayList (); - public int FirstDayOfWeek; - public string RawFullDateTimePattern; - public string LongDatePattern; - public string LongTimePattern; - public string MonthDayPattern; - public ArrayList MonthNames = new ArrayList (); - public string PMDesignator; - public string ShortDatePattern; - public string ShortTimePattern; - public string TimeSeparator; - public string YearMonthPattern; - public int [] OptionalCalendars = new int [5]; - public ArrayList ShortDatePatterns = new ArrayList (14); - public ArrayList LongDatePatterns = new ArrayList (8); - public ArrayList ShortTimePatterns = new ArrayList (5); - public ArrayList LongTimePatterns = new ArrayList (6); - - public string FullDateTimePattern { - get { return String.Format (RawFullDateTimePattern, LongTimePattern, LongDatePattern); } - } - - public int Row; - - public void AppendTableRow (StringBuilder builder) - { - builder.Append ("\t{"); - builder.Append (EncodeStringIdx (FullDateTimePattern) + ", "); - builder.Append (EncodeStringIdx (LongDatePattern) + ", "); - builder.Append (EncodeStringIdx (ShortDatePattern) + ", "); - - builder.Append (EncodeStringIdx (LongTimePattern) + ", "); - builder.Append (EncodeStringIdx (ShortTimePattern) + ", "); - - builder.Append (EncodeStringIdx (YearMonthPattern) + ", "); - builder.Append (EncodeStringIdx (MonthDayPattern) + ", "); - - builder.Append (EncodeStringIdx (AMDesignator) + ", "); - builder.Append (EncodeStringIdx (PMDesignator) + ", "); - - AppendNames (builder, DayNames); - builder.Append (", "); - AppendNames (builder, AbbreviatedDayNames); - builder.Append (", "); - - AppendNames (builder, MonthNames); - builder.Append (", "); - AppendNames (builder, AbbreviatedMonthNames); - builder.Append (", "); - - builder.Append (CalendarWeekRule + ", "); - builder.Append (FirstDayOfWeek + ", "); - - builder.Append (EncodeStringIdx (DateSeparator) + ", "); - builder.Append (EncodeStringIdx (TimeSeparator) + ", "); - - AppendPatterns (builder, ShortDatePatterns); - builder.Append (','); - AppendPatterns (builder, LongDatePatterns); - builder.Append (','); - AppendPatterns (builder, ShortTimePatterns); - builder.Append (','); - AppendPatterns (builder, LongTimePatterns); - - builder.Append ('}'); - } - - private void AppendPatterns (StringBuilder builder, ArrayList al) - { - string [] patterns = al.ToArray (typeof (string)) as string []; - builder.Append ('{'); - for (int i = 0; i < patterns.Length; i++) { - string s = EncodeStringIdx (patterns [i]); - builder.Append (s); - if (i + 1 < patterns.Length) - builder.Append (','); - } - if (patterns.Length == 0) - builder.Append ('0'); - builder.Append ('}'); - } - - public override string ToString () - { - StringBuilder builder = new StringBuilder (); - AppendTableRow (builder); - return builder.ToString (); - } - - private void AppendNames (StringBuilder builder, ArrayList names) - { - builder.Append ('{'); - for (int i=0; i patterns) + { + builder.Append ('{'); + for (int i = 0; i < patterns.Count; i++) { + if (i > 0) + builder.Append (','); + + string s = EncodeStringIdx (patterns[i]); + builder.Append (s); + } + if (patterns.Count == 0) + builder.Append ('0'); + builder.Append ('}'); + } + + public override string ToString () + { + StringBuilder builder = new StringBuilder (); + AppendTableRow (builder); + return builder.ToString (); + } + } } diff --git a/tools/locale-builder/Driver.cs b/tools/locale-builder/Driver.cs index 7bd2520421f..43e5b418b68 100644 --- a/tools/locale-builder/Driver.cs +++ b/tools/locale-builder/Driver.cs @@ -1,59 +1,82 @@ +// +// Driver.cs // -// Mono.Tools.LocalBuilder.Driver -// -// Author(s): +// Authors: // Jackson Harper (jackson@ximian.com) // Atsushi Enomoto (atsushi@ximian.com) +// Marek Safar // // (C) 2004-2005 Novell, Inc (http://www.novell.com) +// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // - using System; using System.IO; using System.Text; using System.Xml; -using System.Xml.XPath; -using System.Collections; using System.Globalization; using System.Text.RegularExpressions; +using System.Collections.Generic; +using System.Linq; -namespace Mono.Tools.LocaleBuilder { +namespace Mono.Tools.LocaleBuilder +{ + public class Driver + { + static readonly string data_root = Path.Combine ("CLDR", "common"); - public class Driver { - - public static void Main (string [] args) + public static void Main (string[] args) { Driver d = new Driver (); ParseArgs (args, d); d.Run (); } - private static void ParseArgs (string [] args, Driver d) + private static void ParseArgs (string[] args, Driver d) { for (int i = 0; i < args.Length; i++) { - if (args [i] == "--lang" && i+1 < args.Length) - d.Lang = args [++i]; - else if (args [i] == "--locales" && i+1 < args.Length) - d.Locales = args [++i]; - else if (args [i] == "--header" && i + 1 < args.Length) - d.HeaderFileName = args [++i]; + if (args[i] == "--lang" && i + 1 < args.Length) + d.Lang = args[++i]; + else if (args[i] == "--locales" && i + 1 < args.Length) + d.Locales = args[++i]; + else if (args[i] == "--header" && i + 1 < args.Length) + d.HeaderFileName = args[++i]; + else if (args[i] == "--compare") + d.OutputCompare = true; } } private string lang; private string locales; - private string header_name; - private ArrayList cultures; - private Hashtable langs; - private Hashtable currency_types; - private Hashtable regions; - - private XPathDocument lcids_doc; + private string header_name; + List cultures; + Dictionary region_currency; + Dictionary currency_fractions; // The lang is the language that display names will be displayed in - public string Lang { - get { + public string Lang + { + get + { if (lang == null) lang = "en"; return lang; @@ -61,1184 +84,1088 @@ namespace Mono.Tools.LocaleBuilder { set { lang = value; } } - public string Locales { + public string Locales + { get { return locales; } set { locales = value; } } - public string HeaderFileName { - get { - if (header_name == null) - return "culture-info-tables.h"; - return header_name; - } - set { header_name = value; } - } - - public void Run () + public string HeaderFileName { - lcids_doc = GetXPathDocument ("lcids.xml"); - - Regex locales_regex = null; - if (Locales != null) - locales_regex = new Regex (Locales); - - langs = new Hashtable (); - cultures = new ArrayList (); - regions = new Hashtable (); - - LookupRegions (); - - LookupCurrencyTypes (); - - foreach (string file in Directory.GetFiles ("locales", "*.xml")) { - string fn = Path.GetFileNameWithoutExtension (file); - if (fn == "hy_AM") - continue; // see bug #75499 - if (locales_regex == null || locales_regex.IsMatch (fn)) { - ParseLocale (fn); - } - } - - /* FIXME: This is hacky. - * Since there is only langs/zh.xml while there are - * two "zh" languages (CHS and CHT), there should be - * different language profiles and we are not likely - * to add lang/* files. So here I just clone zh-CHS - * as zh-CHT - */ - foreach (CultureInfoEntry e in cultures) { - if (e.Name == "zh-CHS") { - CultureInfoEntry t = - CultureInfoEntry.ShallowCopy (e); - t.Language = "zh-CHT"; - LookupLcids (t, true); - cultures.Add (t); - break; - } - } - - ArrayList regionList = new ArrayList (regions.Values); - regionList.Sort (RegionComparer.Instance); - int number = 0; - foreach (RegionInfoEntry r in regionList) - r.RegionId = number++; - - foreach (CultureInfoEntry e in cultures) { - int lcid = int.Parse (e.Lcid.Substring (2), - NumberStyles.HexNumber); - int idx; - int start = e.Name.IndexOf ('-') + 1; - if (start == 0) - continue; - for (idx = start; idx < e.Name.Length; idx++) - if (!Char.IsLetter (e.Name [idx])) - break; - if (start == idx) { - Console.Error.WriteLine ("Culture {0} {1} is not mappable to Region.", e.Lcid, e.Name); - continue; - } - string name = e.Name.Substring (start, idx - start); - RegionInfoEntry rm = null; - foreach (RegionInfoEntry r in regions.Values) - if (r.ISO2Name == name) { - rm = r; - break; - } - if (rm == null) { - Console.Error.WriteLine ("No definition for region {0}", name); - continue; - } - e.RegionId = rm.RegionId; + get + { + if (header_name == null) + return "culture-info-tables.h"; + return header_name; } + set { header_name = value; } + } - /** - * Dump each table individually. Using StringBuilders - * because it is easier to debug, should switch to just - * writing to streams eventually. - */ - using (StreamWriter writer = new StreamWriter (HeaderFileName, false, new UTF8Encoding (false, true))) { - writer.NewLine = "\n"; - writer.WriteLine (); - writer.WriteLine ("/* This is a generated file. Do not edit. See tools/locale-builder. */"); - writer.WriteLine ("#ifndef MONO_METADATA_CULTURE_INFO_TABLES"); - writer.WriteLine ("#define MONO_METADATA_CULTURE_INFO_TABLES 1"); - writer.WriteLine ("\n"); - - writer.WriteLine ("#define NUM_CULTURE_ENTRIES " + cultures.Count); - writer.WriteLine ("#define NUM_REGION_ENTRIES " + regionList.Count); - writer.WriteLine ("\n"); - - // Sort the cultures by lcid - cultures.Sort (new LcidComparer ()); - - StringBuilder builder = new StringBuilder (); - int row = 0; - int count = cultures.Count; - for (int i = 0; i < count; i++) { - CultureInfoEntry ci = (CultureInfoEntry) cultures [i]; - if (ci.DateTimeFormatEntry == null) - continue; - ci.DateTimeFormatEntry.AppendTableRow (builder); - ci.DateTimeFormatEntry.Row = row++; - if (i + 1 < count) - builder.Append (','); - builder.Append ('\n'); - } - - writer.WriteLine ("static const DateTimeFormatEntry datetime_format_entries [] = {"); - writer.Write (builder); - writer.WriteLine ("};\n\n"); - - builder = new StringBuilder (); - row = 0; - for (int i=0; i < count; i++) { - CultureInfoEntry ci = (CultureInfoEntry) cultures [i]; - if (ci.NumberFormatEntry == null) - continue; - ci.NumberFormatEntry.AppendTableRow (builder); - ci.NumberFormatEntry.Row = row++; - if (i + 1 < count) - builder.Append (','); - builder.Append ('\n'); - } - - writer.WriteLine ("static const NumberFormatEntry number_format_entries [] = {"); - writer.Write (builder); - writer.WriteLine ("};\n\n"); - - builder = new StringBuilder (); - row = 0; - for (int i = 0; i < count; i++) { - CultureInfoEntry ci = (CultureInfoEntry) cultures [i]; - ci.AppendTableRow (builder); - ci.Row = row++; - if (i + 1 < count) - builder.Append (','); - builder.Append ('\n'); - } - - writer.WriteLine ("static const CultureInfoEntry culture_entries [] = {"); - writer.Write (builder); - writer.WriteLine ("};\n\n"); - - cultures.Sort (new NameComparer ()); // Sort based on name - builder = new StringBuilder (); - for (int i = 0; i < count; i++) { - CultureInfoEntry ci = (CultureInfoEntry) cultures [i]; - builder.Append ("\t{" + Entry.EncodeStringIdx (ci.Name.ToLower ()) + ", "); - builder.Append (ci.Row + "}"); - if (i + 1 < count) - builder.Append (','); - builder.Append ('\n'); - } - - writer.WriteLine ("static const CultureInfoNameEntry culture_name_entries [] = {"); - writer.Write (builder); - writer.WriteLine ("};\n\n"); + public bool OutputCompare { get; set; } - builder = new StringBuilder (); - int rcount = 0; - foreach (RegionInfoEntry r in regionList) { - r.AppendTableRow (builder); - if (++rcount != regionList.Count) - builder.Append (','); - builder.Append ('\n'); + void Print () + { + cultures.Sort ((a, b) => int.Parse (a.LCID.Substring (2), NumberStyles.HexNumber).CompareTo (int.Parse (b.LCID.Substring (2), NumberStyles.HexNumber))); + + var writer = Console.Out; + + foreach (var c in cultures) { + writer.WriteLine ("Name: {0}, LCID {1}", c.OriginalName, c.LCID); + + writer.WriteLine ("{0}: {1}", "DisplayName", c.DisplayName); + writer.WriteLine ("{0}: {1}", "EnglishName", c.EnglishName); + writer.WriteLine ("{0}: {1}", "NativeName", c.NativeName); + // writer.WriteLine ("{0}: {1}", "OptionalCalendars", c.OptionalCalendars); + writer.WriteLine ("{0}: {1}", "ThreeLetterISOLanguageName", c.ThreeLetterISOLanguageName); + writer.WriteLine ("{0}: {1}", "ThreeLetterWindowsLanguageName", c.ThreeLetterWindowsLanguageName); + writer.WriteLine ("{0}: {1}", "TwoLetterISOLanguageName", c.TwoLetterISOLanguageName); + writer.WriteLine ("{0}: {1}", "Calendar", GetCalendarType (c.CalendarType)); + + var df = c.DateTimeFormatEntry; + writer.WriteLine ("-- DateTimeFormat --"); + Dump (writer, df.AbbreviatedDayNames, "AbbreviatedDayNames"); + Dump (writer, df.AbbreviatedMonthGenitiveNames, "AbbreviatedMonthGenitiveNames"); + Dump (writer, df.AbbreviatedMonthNames, "AbbreviatedMonthNames"); + writer.WriteLine ("{0}: {1}", "AMDesignator", df.AMDesignator); + writer.WriteLine ("{0}: {1}", "CalendarWeekRule", (CalendarWeekRule) df.CalendarWeekRule); + writer.WriteLine ("{0}: {1}", "DateSeparator", df.DateSeparator); + Dump (writer, df.DayNames, "DayNames"); + writer.WriteLine ("{0}: {1}", "FirstDayOfWeek", (DayOfWeek) df.FirstDayOfWeek); +// Dump (writer, df.GetAllDateTimePatterns (), "GetAllDateTimePatterns"); + writer.WriteLine ("{0}: {1}", "LongDatePattern", df.LongDatePattern); + writer.WriteLine ("{0}: {1}", "LongTimePattern", df.LongTimePattern); + writer.WriteLine ("{0}: {1}", "MonthDayPattern", df.MonthDayPattern); + Dump (writer, df.MonthGenitiveNames, "MonthGenitiveNames"); + Dump (writer, df.MonthNames, "MonthNames"); + writer.WriteLine ("{0}: {1}", "NativeCalendarName", df.NativeCalendarName); + writer.WriteLine ("{0}: {1}", "PMDesignator", df.PMDesignator); + writer.WriteLine ("{0}: {1}", "ShortDatePattern", df.ShortDatePattern); + Dump (writer, df.ShortestDayNames, "ShortestDayNames"); + writer.WriteLine ("{0}: {1}", "ShortTimePattern", df.ShortTimePattern); + writer.WriteLine ("{0}: {1}", "TimeSeparator", df.TimeSeparator); + writer.WriteLine ("{0}: {1}", "YearMonthPattern", df.YearMonthPattern); + + var ti = c.TextInfoEntry; + writer.WriteLine ("-- TextInfo --"); + writer.WriteLine ("{0}: {1}", "ANSICodePage", ti.ANSICodePage); + writer.WriteLine ("{0}: {1}", "EBCDICCodePage", ti.EBCDICCodePage); + writer.WriteLine ("{0}: {1}", "IsRightToLeft", ti.IsRightToLeft); + writer.WriteLine ("{0}: {1}", "ListSeparator", ti.ListSeparator); + writer.WriteLine ("{0}: {1}", "MacCodePage", ti.MacCodePage); + writer.WriteLine ("{0}: {1}", "OEMCodePage", ti.OEMCodePage); + + var nf = c.NumberFormatEntry; + writer.WriteLine ("-- NumberFormat --"); + writer.WriteLine ("{0}: {1}", "CurrencyDecimalDigits", nf.CurrencyDecimalDigits); + writer.WriteLine ("{0}: {1}", "CurrencyDecimalSeparator", nf.CurrencyDecimalSeparator); + writer.WriteLine ("{0}: {1}", "CurrencyGroupSeparator", nf.CurrencyGroupSeparator); + Dump (writer, nf.CurrencyGroupSizes, "CurrencyGroupSizes", true); + writer.WriteLine ("{0}: {1}", "CurrencyNegativePattern", nf.CurrencyNegativePattern); + writer.WriteLine ("{0}: {1}", "CurrencyPositivePattern", nf.CurrencyPositivePattern); + writer.WriteLine ("{0}: {1}", "CurrencySymbol", nf.CurrencySymbol); + writer.WriteLine ("{0}: {1}", "DigitSubstitution", nf.DigitSubstitution); + writer.WriteLine ("{0}: {1}", "NaNSymbol", nf.NaNSymbol); + Dump (writer, nf.NativeDigits, "NativeDigits"); + writer.WriteLine ("{0}: {1}", "NegativeInfinitySymbol", nf.NegativeInfinitySymbol); + writer.WriteLine ("{0}: {1}", "NegativeSign", nf.NegativeSign); + writer.WriteLine ("{0}: {1}", "NumberDecimalDigits", nf.NumberDecimalDigits); + writer.WriteLine ("{0}: {1}", "NumberDecimalSeparator", nf.NumberDecimalSeparator); + writer.WriteLine ("{0}: {1}", "NumberGroupSeparator", nf.NumberGroupSeparator); + Dump (writer, nf.NumberGroupSizes, "NumberGroupSizes", true); + writer.WriteLine ("{0}: {1}", "NumberNegativePattern", nf.NumberNegativePattern); + writer.WriteLine ("{0}: {1}", "PercentDecimalDigits", nf.PercentDecimalDigits); + writer.WriteLine ("{0}: {1}", "PercentDecimalSeparator", nf.PercentDecimalSeparator); + writer.WriteLine ("{0}: {1}", "PercentGroupSeparator", nf.PercentGroupSeparator); + Dump (writer, nf.PercentGroupSizes, "PercentGroupSizes", true); + writer.WriteLine ("{0}: {1}", "PercentNegativePattern", nf.PercentNegativePattern); + writer.WriteLine ("{0}: {1}", "PercentPositivePattern", nf.PercentPositivePattern); + writer.WriteLine ("{0}: {1}", "PercentSymbol", nf.PercentSymbol); + writer.WriteLine ("{0}: {1}", "PerMilleSymbol", nf.PerMilleSymbol); + writer.WriteLine ("{0}: {1}", "PositiveInfinitySymbol", nf.PositiveInfinitySymbol); + writer.WriteLine ("{0}: {1}", "PositiveSign", nf.PositiveSign); + + if (c.RegionInfoEntry != null) { + var ri = c.RegionInfoEntry; + writer.WriteLine ("-- RegionInfo --"); + writer.WriteLine ("{0}: {1}", "CurrencyEnglishName", ri.CurrencyEnglishName); + writer.WriteLine ("{0}: {1}", "CurrencyNativeName", ri.CurrencyNativeName); + writer.WriteLine ("{0}: {1}", "CurrencySymbol", ri.CurrencySymbol); + writer.WriteLine ("{0}: {1}", "DisplayName", ri.DisplayName); + writer.WriteLine ("{0}: {1}", "EnglishName", ri.EnglishName); + writer.WriteLine ("{0}: {1}", "GeoId", ri.GeoId); + writer.WriteLine ("{0}: {1}", "IsMetric", ri.IsMetric); + writer.WriteLine ("{0}: {1}", "ISOCurrencySymbol", ri.ISOCurrencySymbol); + writer.WriteLine ("{0}: {1}", "Name", ri.Name); + writer.WriteLine ("{0}: {1}", "NativeName", ri.NativeName); + writer.WriteLine ("{0}: {1}", "ThreeLetterISORegionName", ri.ThreeLetterISORegionName); + writer.WriteLine ("{0}: {1}", "ThreeLetterWindowsRegionName", ri.ThreeLetterWindowsRegionName); + writer.WriteLine ("{0}: {1}", "TwoLetterISORegionName", ri.TwoLetterISORegionName); } - writer.WriteLine ("static const RegionInfoEntry region_entries [] = {"); - writer.Write (builder); - writer.WriteLine ("};\n\n"); - builder = new StringBuilder (); - rcount = 0; - foreach (RegionInfoEntry ri in regionList) { - builder.Append ("\t{" + Entry.EncodeStringIdx (ri.ISO2Name) + ", "); - builder.Append (ri.RegionId + "}"); - if (++rcount < regionList.Count) - builder.Append (','); - builder.Append ('\n'); - } - - writer.WriteLine ("static const RegionInfoNameEntry region_name_entries [] = {"); - writer.Write (builder); - writer.WriteLine ("};\n\n"); - - writer.WriteLine ("static const char locale_strings [] = {"); - writer.Write (Entry.GetStrings ()); - writer.WriteLine ("};\n\n"); - - writer.WriteLine ("#endif\n"); - } + writer.WriteLine (); + } } - private XPathDocument GetXPathDocument (string path) + static Type GetCalendarType (CalendarType ct) { - XmlTextReader xtr = null; - try { - xtr = new XmlTextReader (path); - xtr.XmlResolver = null; - return new XPathDocument (xtr); - } finally { - if (xtr != null) - xtr.Close (); + switch (ct) { + case CalendarType.Gregorian: + return typeof (GregorianCalendar); + case CalendarType.HijriCalendar: + return typeof (HijriCalendar); + case CalendarType.ThaiBuddhist: + return typeof (ThaiBuddhistCalendar); + case CalendarType.UmAlQuraCalendar: + return typeof (UmAlQuraCalendar); + default: + throw new NotImplementedException (); } } - private string GetShortName (string lang) + static void Dump (TextWriter tw, IList values, string name, bool stopOnNull = false) where T : class { - return lang == "zh-CHS" ? "zh" : lang; - } + tw.Write (name); + tw.Write (": "); - private bool ParseLang (string lang) - { - XPathDocument doc = GetXPathDocument (Path.Combine ("langs", GetShortName (lang) + ".xml")); - XPathNavigator nav = doc.CreateNavigator (); - CultureInfoEntry ci = LookupCulture (GetShortName (lang), true); - string lang_type, terr_type; + for (int i = 0; i < values.Count; ++i) { + var v = values[i]; -// ci.Name = lang; // TODO: might need to be mapped. + if (stopOnNull && v == null) + break; - lang_type = nav.Evaluate ("string (ldml/identity/language/@type)").ToString (); - terr_type = nav.Evaluate ("string (ldml/identity/territory/@type)").ToString (); + if (i > 0) + tw.Write (", "); - ci.Language = (lang_type == String.Empty ? null : lang_type); - ci.Territory = (terr_type == String.Empty ? null : terr_type); + tw.Write (v); + } - if (!LookupLcids (ci, true)) - return false; + tw.WriteLine (); + } - doc = GetXPathDocument (Path.Combine ("langs", GetShortName (Lang) + ".xml")); - nav = doc.CreateNavigator (); - ci.DisplayName = LookupFullName (ci, nav); - - if (Lang == "en") { - ci.EnglishName = ci.DisplayName; - } else { - doc = GetXPathDocument (Path.Combine ("langs", GetShortName (lang) + ".xml")); - nav = doc.CreateNavigator (); - ci.EnglishName = LookupFullName (ci, nav); - } + void Run () + { + Regex locales_regex = null; + if (Locales != null) + locales_regex = new Regex (Locales); - if (ci.Language == Lang) { - ci.NativeName = ci.DisplayName; - } else { - doc = GetXPathDocument (Path.Combine ("langs", GetShortName (lang) + ".xml")); - nav = doc.CreateNavigator (); - ci.NativeName = LookupFullName (ci, nav); - } + cultures = new List (); + var regions = new List (); - langs [lang] = ci; - cultures.Add (ci); - return true; - } + var supplemental = GetXmlDocument (Path.Combine (data_root, "supplemental", "supplementalData.xml")); - private void ParseLocale (string locale) - { - CultureInfoEntry ci; + // Read currencies info + region_currency = new Dictionary (StringComparer.OrdinalIgnoreCase); + foreach (XmlNode entry in supplemental.SelectNodes ("supplementalData/currencyData/region")) { + var child = entry.SelectSingleNode ("currency"); + region_currency.Add (entry.Attributes["iso3166"].Value, child.Attributes["iso4217"].Value); + } - ci = LookupCulture (locale); + var lcdids = GetXmlDocument ("lcids.xml"); + foreach (XmlNode lcid in lcdids.SelectNodes ("lcids/lcid")) { + var name = lcid.Attributes["name"].Value; - if (ci == null) - return; + if (locales_regex != null && !locales_regex.IsMatch (name)) + continue; - if (langs [GetLanguageFixed (ci)] == null) { - if (!ParseLang (GetLanguageFixed (ci))) // If we can't parse the lang we cant have the locale - return; - } + var ci = new CultureInfoEntry (); + ci.LCID = lcid.Attributes["id"].Value; + ci.ParentLcid = lcid.Attributes["parent"].Value; + ci.TwoLetterISOLanguageName = lcid.Attributes["iso2"].Value; + ci.ThreeLetterISOLanguageName = lcid.Attributes["iso3"].Value; + ci.ThreeLetterWindowsLanguageName = lcid.Attributes["win"].Value; + ci.OriginalName = name.Replace ('_', '-'); + ci.TextInfoEntry = new TextInfoEntry (); + ci.NumberFormatEntry = new NumberFormatEntry (); + + if (!Import (ci, name)) + continue; - cultures.Add (ci); - } + cultures.Add (ci); + } - private CultureInfoEntry LookupCulture (string locale) - { - return LookupCulture (locale, false); - } - private CultureInfoEntry LookupCulture (string locale, bool is_language) - { - string path = Path.Combine (is_language ? "langs" : "locales", locale + ".xml"); - if (!File.Exists (path)) - return null; - XPathDocument doc = GetXPathDocument (path); - XPathNavigator nav = doc.CreateNavigator (); - CultureInfoEntry ci = new CultureInfoEntry (); - string supp; - string loc; + var doc_english = GetXmlDocument (Path.Combine (data_root, "main", "en.xml")); + + // + // Fill all EnglishName values from en.xml language file + // + foreach (var ci in cultures) { + var el = doc_english.SelectSingleNode (string.Format ("ldml/localeDisplayNames/languages/language[@type='{0}']", ci.Language)); + if (el != null) + ci.EnglishName = el.InnerText; + + string s = null; + if (ci.Script != null) { + el = doc_english.SelectSingleNode (string.Format ("ldml/localeDisplayNames/scripts/script[@type='{0}']", ci.Script)); + if (el != null) + s = el.InnerText; + } -// ci.Name = locale; // TODO: Some of these need to be mapped. + if (ci.Territory != null) { + el = doc_english.SelectSingleNode (string.Format ("ldml/localeDisplayNames/territories/territory[@type='{0}']", ci.Territory)); + if (el != null) { + if (s == null) + s = el.InnerText; + else + s = string.Join (", ", s, el.InnerText); + } + } - // First thing we do is get the lang-territory combo, lcid, and full names - ci.Language = nav.Evaluate ("string (ldml/identity/language/@type)").ToString (); - ci.Territory = nav.Evaluate ("string (ldml/identity/territory/@type)").ToString (); + switch (ci.ThreeLetterWindowsLanguageName) { + case "CHT": + s = "Traditional"; + break; + case "CHS": + s = "Simplified"; + break; + } - if (!LookupLcids (ci, is_language)) - return null; - LookupNames (ci); + if (s != null) + ci.EnglishName = string.Format ("{0} ({1})", ci.EnglishName, s); - /** - * Locale generation is done in six steps, first we - * read the root file which is the base invariant data - * then the supplemental root data, - * then the language file, the supplemental languages - * file then the locale file, then the supplemental - * locale file. Values in each descending file can - * overwrite previous values. - */ - doc = GetXPathDocument (Path.Combine ("langs", "root.xml")); - nav = doc.CreateNavigator (); - Lookup (nav, ci); - - doc = GetXPathDocument (Path.Combine ("supp", "root.xml")); - nav = doc.CreateNavigator (); - Lookup (nav, ci); - - doc = GetXPathDocument (Path.Combine ("langs", GetShortName (GetLanguageFixed (ci)) + ".xml")); - nav = doc.CreateNavigator (); - Lookup (nav, ci); - - supp = Path.Combine ("supp", GetLanguageFixed (ci) + ".xml"); - if (File.Exists (supp)) { - doc = GetXPathDocument (supp); - nav = doc.CreateNavigator (); - Lookup (nav, ci); - } - - loc = Path.Combine ("locales", locale + ".xml"); - if (File.Exists (loc)) { - doc = GetXPathDocument (loc); - nav = doc.CreateNavigator (); - Lookup (nav, ci); + // Special case legacy chinese + if (ci.OriginalName == "zh-CHS" || ci.OriginalName == "zh-CHT") + ci.EnglishName += " Legacy"; + + // Mono is not localized and supports english only, hence the name will always be same + ci.DisplayName = ci.EnglishName; } - supp = Path.Combine ("supp", locale + ".xml"); - if (File.Exists (supp)) { - doc = GetXPathDocument (supp); - nav = doc.CreateNavigator (); - Lookup (nav, ci); + // + // Fill culture hierarchy for easier data manipulation + // + foreach (var ci in cultures) { + foreach (var p in cultures.Where (l => ci.LCID == l.ParentLcid)) { + ci.Children.Add (p); + } } - return ci; - } + currency_fractions = new Dictionary (StringComparer.OrdinalIgnoreCase); + foreach (XmlNode entry in supplemental.SelectNodes ("supplementalData/currencyData/fractions/info")) { + currency_fractions.Add (entry.Attributes["iso4217"].Value, entry.Attributes["digits"].Value); + } - private void Lookup (XPathNavigator nav, CultureInfoEntry ci) - { - LookupDateTimeInfo (nav, ci); - LookupNumberInfo (nav, ci); - } + var territory2dayofweek = new Dictionary (StringComparer.OrdinalIgnoreCase); + foreach (XmlNode entry in supplemental.SelectNodes ("supplementalData/weekData/firstDay")) { + DayOfWeek dow; - private string GetLanguageFixed (CultureInfoEntry ci) - { - // This is a hack, but without it nb-NO and nn-NO won't work. - if (ci.Territory == "NO") { - switch (ci.Language) { - case "nb": - case "nn": - return "no"; + switch (entry.Attributes["day"].Value) { + case "mon": + dow = DayOfWeek.Monday; + break; + case "fri": + dow = DayOfWeek.Friday; + break; + case "sat": + dow = DayOfWeek.Saturday; + break; + case "sun": + dow = DayOfWeek.Sunday; + break; + default: + throw new NotImplementedException (); } + + var territories = entry.Attributes["territories"].Value.Split (); + foreach (var t in territories) + territory2dayofweek[t] = dow; } - return ci.Language; - } - private void LookupNames (CultureInfoEntry ci) - { - XPathDocument doc = GetXPathDocument (Path.Combine ("langs", GetShortName (Lang) + ".xml")); - XPathNavigator nav = doc.CreateNavigator (); + var territory2wr = new Dictionary (StringComparer.OrdinalIgnoreCase); + foreach (XmlNode entry in supplemental.SelectNodes ("supplementalData/weekData/minDays")) { + CalendarWeekRule rule; - ci.DisplayName = LookupFullName (ci, nav); - - if (Lang == "en") { - ci.EnglishName = ci.DisplayName; - } else { - doc = GetXPathDocument (Path.Combine ("langs", "en.xml")); - nav = doc.CreateNavigator (); - ci.EnglishName = LookupFullName (ci, nav); + switch (entry.Attributes["count"].InnerText) { + case "1": + rule = CalendarWeekRule.FirstDay; + break; + case "4": + rule = CalendarWeekRule.FirstFourDayWeek; + break; + default: + throw new NotImplementedException (); + } + + var territories = entry.Attributes["territories"].InnerText.Split (); + foreach (var t in territories) + territory2wr[t] = rule; } - if (ci.Language == Lang) { - ci.NativeName = ci.DisplayName; - } else { - // FIXME: We use ci.Language here. - // This is nothing more than hack for nb-NO and nn-NO - // where Parent of them is nn (not nb or nn). - string lang = ci.Language; - doc = GetXPathDocument (Path.Combine ("langs", GetShortName (lang) + ".xml")); - nav = doc.CreateNavigator (); - ci.NativeName = LookupFullName (ci, nav); + // + // Fill all territory speficic data where territory is available + // + var non_metric = new HashSet (); + foreach (XmlNode entry in supplemental.SelectNodes ("supplementalData/measurementData/measurementSystem[@type='US']")) { + var territories = entry.Attributes["territories"].InnerText.Split (); + foreach (var t in territories) + non_metric.Add (t); } - } - private void AddPattern (ArrayList al, string pattern) - { - if (!al.Contains (pattern)) - al.Add (pattern); - } + foreach (var ci in cultures) { + if (ci.Territory == null) + continue; - private void LookupDateTimeInfo (XPathNavigator nav, CultureInfoEntry ci) - { - /** - * TODO: Does anyone have multiple calendars? - */ - XPathNodeIterator ni =(XPathNodeIterator) nav.Evaluate ("ldml/dates/calendars/calendar"); - - while (ni.MoveNext ()) { - DateTimeFormatEntry df = ci.DateTimeFormatEntry; - string cal_type = ni.Current.GetAttribute ("type", String.Empty); - - if (cal_type != String.Empty) - df.CalendarType = cal_type; - - XPathNodeIterator ni2 = (XPathNodeIterator) ni.Current.Evaluate ("optionalCalendars/calendar"); - int opt_cal_count = 0; - while (ni2.MoveNext ()) { - int type; - string greg_type_str; - XPathNavigator df_nav = ni2.Current; - switch (df_nav.GetAttribute ("type", String.Empty)) { - case "Gregorian": - type = 0; - break; - case "Hijri": - type = 0x01; - break; - case "ThaiBuddhist": - type = 0x02; - break; - default: - Console.WriteLine ("unknown calendar type: " + - df_nav.GetAttribute ("type", String.Empty)); - continue; - } - type <<= 24; - greg_type_str = df_nav.GetAttribute ("greg_type", String.Empty); - if (greg_type_str != null && greg_type_str != String.Empty) { - GregorianCalendarTypes greg_type = (GregorianCalendarTypes) - Enum.Parse (typeof (GregorianCalendarTypes), greg_type_str); - int greg_type_int = (int) greg_type; - type |= greg_type_int; - - } - Console.WriteLine ("Setting cal type: {0:X} for {1}", type, ci.Name); - ci.CalendarData [opt_cal_count++] = type; - } - - ni2 = (XPathNodeIterator) ni.Current.Evaluate ("monthNames/month"); - while (ni2.MoveNext ()) { - if (ni2.CurrentPosition == 1) - df.MonthNames.Clear (); - df.MonthNames.Add (ni2.Current.Value); + DayOfWeek value; + if (territory2dayofweek.TryGetValue (ci.Territory, out value)) { + ci.DateTimeFormatEntry.FirstDayOfWeek = (int) value; } - if (df.MonthNames.Count == 12) - df.MonthNames.Add (String.Empty); - - ni2 = (XPathNodeIterator) ni.Current.Evaluate ("dayNames/day"); - while (ni2.MoveNext ()) { - if (ni2.CurrentPosition == 1) - df.DayNames.Clear (); - df.DayNames.Add (ni2.Current.Value); + + CalendarWeekRule rule; + if (territory2wr.TryGetValue (ci.Territory, out rule)) { + ci.DateTimeFormatEntry.CalendarWeekRule = (int) rule; } - ni2 = (XPathNodeIterator) ni.Current.Evaluate ("dayAbbr/day"); - while (ni2.MoveNext ()) { - if (ni2.CurrentPosition == 1) - df.AbbreviatedDayNames.Clear (); - df.AbbreviatedDayNames.Add (ni2.Current.Value); + string fraction_value; + if (currency_fractions.TryGetValue (ci.Territory, out fraction_value)) { + ci.NumberFormatEntry.CurrencyDecimalDigits = fraction_value; } - ni2 = (XPathNodeIterator) ni.Current.Evaluate ("monthAbbr/month"); - while (ni2.MoveNext ()) { - if (ni2.CurrentPosition == 1) - df.AbbreviatedMonthNames.Clear (); - df.AbbreviatedMonthNames.Add (ni2.Current.Value); + RegionInfoEntry region = regions.Where (l => l.Name == ci.Territory).FirstOrDefault (); + if (region == null) { + region = new RegionInfoEntry () { + CurrencySymbol = ci.NumberFormatEntry.CurrencySymbol, + EnglishName = ci.EnglishName, + NativeName = ci.NativeTerritoryName, + Name = ci.Territory, + TwoLetterISORegionName = ci.Territory, + CurrencyNativeName = ci.NativeCurrencyName + }; + + var tc = supplemental.SelectSingleNode (string.Format ("supplementalData/codeMappings/territoryCodes[@type='{0}']", ci.Territory)); + region.ThreeLetterISORegionName = tc.Attributes["alpha3"].Value; + region.ThreeLetterWindowsRegionName = region.ThreeLetterISORegionName; + + var el = doc_english.SelectSingleNode (string.Format ("ldml/localeDisplayNames/territories/territory[@type='{0}']", ci.Territory)); + region.EnglishName = el.InnerText; + region.DisplayName = region.EnglishName; + + region.ISOCurrencySymbol = region_currency[ci.Territory]; + + el = doc_english.SelectSingleNode (string.Format ("ldml/numbers/currencies/currency[@type='{0}']/displayName", region.ISOCurrencySymbol)); + region.CurrencyEnglishName = el.InnerText; + + if (non_metric.Contains (ci.Territory)) + region.IsMetric = false; + + var lcdid_value = int.Parse (ci.LCID.Substring (2), NumberStyles.HexNumber); + Patterns.FillValues (lcdid_value, region); + regions.Add (region); } - if (df.AbbreviatedMonthNames.Count == 12) - df.AbbreviatedMonthNames.Add (String.Empty); - - ni2 = (XPathNodeIterator) ni.Current.Evaluate ("dateFormats/dateFormatLength"); - while (ni2.MoveNext ()) { - XPathNavigator df_nav = ni2.Current; - XPathNodeIterator p = df_nav.Select ("dateFormat/pattern"); - string value = null; - if (p.MoveNext ()) - value = p.Current.Value; - XPathNodeIterator ext = null; - switch (df_nav.GetAttribute ("type", String.Empty)) { - case "full": - if (value != null) - ParseFullDateFormat (df, value); - break; - case "long": - if (value != null) - df.LongDatePattern = value; - ext = df_nav.Select ("extraPatterns/pattern"); - if (ext.MoveNext ()) { - df.LongDatePatterns.Clear (); - AddPattern (df.LongDatePatterns, df.LongDatePattern); - do { - df.LongDatePatterns.Add (ext.Current.Value); - } while (ext.MoveNext ()); - } - else - AddPattern (df.LongDatePatterns, df.LongDatePattern); + + ci.RegionInfoEntry = region; + } + + // + // Fill neutral cultures territory data + // + foreach (var ci in cultures) { + var dtf = ci.DateTimeFormatEntry; + if (dtf.FirstDayOfWeek == null) { + switch (ci.Name) { + case "ar": + dtf.FirstDayOfWeek = (int) DayOfWeek.Saturday; break; - case "short": - if (value != null) - df.ShortDatePattern = value; - ext = df_nav.Select ("extraPatterns/pattern"); - if (ext.MoveNext ()) { - df.ShortDatePatterns.Clear (); - AddPattern (df.ShortDatePatterns, df.ShortDatePattern); - do { - df.ShortDatePatterns.Add (ext.Current.Value); - } while (ext.MoveNext ()); - } - else - AddPattern (df.ShortDatePatterns, df.ShortDatePattern); + case "en": + case "pt": + case "zh-Hans": + dtf.FirstDayOfWeek = (int) DayOfWeek.Sunday; break; - case "year_month": - if (value != null) - df.YearMonthPattern = value; + case "es": + case "fr": + case "bn": + case "sr-Cyrl": + case "sr-Latn": + dtf.FirstDayOfWeek = (int) DayOfWeek.Monday; break; - case "month_day": - if (value != null) - df.MonthDayPattern = value; + default: + List all_fdow = new List (); + GetAllChildrenValues (ci, all_fdow, l => l.DateTimeFormatEntry.FirstDayOfWeek); + var children = all_fdow.Where (l => l != null).Distinct ().ToList (); + + if (children.Count == 1) { + dtf.FirstDayOfWeek = children[0]; + } else if (children.Count == 0) { + if (!ci.HasMissingLocale) + Console.WriteLine ("No week data for `{0}'", ci.Name); + + // Default to Sunday + dtf.FirstDayOfWeek = (int) DayOfWeek.Sunday; + } else { + // .NET has weird concept of territory data available for neutral cultures (e.g. en, es, pt) + // We have to manually disambiguate the correct entry (which is artofficial anyway) + throw new ApplicationException (string.Format ("Ambiguous week data for `{0}'", ci.Name)); + } + break; } } - ni2 = (XPathNodeIterator) ni.Current.Evaluate ("timeFormats/timeFormatLength"); - while (ni2.MoveNext ()) { - XPathNavigator df_nav = ni2.Current; - XPathNodeIterator p = df_nav.Select ("timeFormat/pattern"); - string value = null; - if (p.MoveNext ()) - value = p.Current.Value; - XPathNodeIterator ext = null; - switch (df_nav.GetAttribute ("type", String.Empty)) { - case "long": - if (value != null) - df.LongTimePattern = value.Replace ('a', 't'); - ext = df_nav.Select ("extraPatterns/pattern"); - if (ext.MoveNext ()) { - df.LongTimePatterns.Clear (); - AddPattern (df.LongTimePatterns, df.LongTimePattern); - do { - df.LongTimePatterns.Add (ext.Current.Value); - } while (ext.MoveNext ()); - } - else - AddPattern (df.LongTimePatterns, df.LongTimePattern); + if (dtf.CalendarWeekRule == null) { + switch (ci.Name) { + case "ar": + case "en": + case "es": + case "zh-Hans": + case "pt": + case "fr": + case "bn": + dtf.CalendarWeekRule = (int) CalendarWeekRule.FirstDay; break; - case "short": - if (value != null) - df.ShortTimePattern = value.Replace ('a', 't'); - ext = df_nav.Select ("extraPatterns/pattern"); - if (ext.MoveNext ()) { - df.ShortTimePatterns.Clear (); - AddPattern (df.ShortTimePatterns, df.ShortTimePattern); - do { - df.ShortTimePatterns.Add (ext.Current.Value); - } while (ext.MoveNext ()); + default: + List all_cwr = new List (); + GetAllChildrenValues (ci, all_cwr, l => l.DateTimeFormatEntry.CalendarWeekRule); + var children = all_cwr.Where (l => l != null).Distinct ().ToList (); + + if (children.Count == 1) { + dtf.CalendarWeekRule = children[0]; + } else if (children.Count == 0) { + if (!ci.HasMissingLocale) + Console.WriteLine ("No calendar week data for `{0}'", ci.Name); + + + // Default to FirstDay + dtf.CalendarWeekRule = (int) CalendarWeekRule.FirstDay; + } else { + // .NET has weird concept of territory data available for neutral cultures (e.g. en, es, pt) + // We have to manually disambiguate the correct entry (which is artofficial anyway) + throw new ApplicationException (string.Format ("Ambiguous calendar data for `{0}'", ci.Name)); } - else - AddPattern (df.ShortTimePatterns, df.ShortTimePattern); + break; } } - ni2 = (XPathNodeIterator) ni.Current.Evaluate ("dateTimeFormats/dateTimeFormatLength/dateTimeFormat/pattern"); - if (ni2.MoveNext ()) - df.RawFullDateTimePattern = ni2.Current.ToString ();/*String.Format (ni2.Current.ToString (), - df.LongTimePattern, df.LongDatePattern);*/ - - XPathNodeIterator am = ni.Current.SelectChildren ("am", ""); - if (am.MoveNext ()) - df.AMDesignator = am.Current.Value; - XPathNodeIterator pm = ni.Current.SelectChildren ("pm", ""); - if (pm.MoveNext ()) - df.PMDesignator = pm.Current.Value; -/* - string am = (string) ni.Current.Evaluate ("string(am)"); - string pm = (string) ni.Current.Evaluate ("string(pm)"); - - if (am != String.Empty) - df.AMDesignator = am; - if (pm != String.Empty) - df.PMDesignator = pm; -*/ - ni2 = (XPathNodeIterator) ni.Current.Evaluate -("week/firstDay"); - if (ni2.MoveNext ()) { - XPathNavigator weekday_nav = ni2.Current; - switch (weekday_nav.GetAttribute ("day", String.Empty)) { - case "sun": - df.FirstDayOfWeek = 0; + var nfe = ci.NumberFormatEntry; + if (nfe.CurrencySymbol == null) { + switch (ci.Name) { + case "ar": + nfe.CurrencySymbol = "ر.س.‏"; + break; + case "en": + nfe.CurrencySymbol = "$"; + break; + case "es": + case "fr": + nfe.CurrencySymbol = "€"; + break; + case "pt": + nfe.CurrencySymbol = "R$"; + break; + case "sv": + nfe.CurrencySymbol = "kr"; break; - case "mon": - df.FirstDayOfWeek = 1; + case "ms": + nfe.CurrencySymbol = "RM"; break; - case "tue": - df.FirstDayOfWeek = 2; + case "bn": + nfe.CurrencySymbol = "টা"; break; - case "wed": - df.FirstDayOfWeek = 3; + case "sr-Cyrl": + nfe.CurrencySymbol = "Дин."; break; - case "thu": - df.FirstDayOfWeek = 4; + case "sr-Latn": + case "sr": + nfe.CurrencySymbol = "Din."; break; - case "fri": - df.FirstDayOfWeek = 5; + case "zh": + nfe.CurrencySymbol = "¥"; break; - case "sat": - df.FirstDayOfWeek = 6; + case "zh-Hant": + nfe.CurrencySymbol = "HK$"; + break; + + default: + var all_currencies = new List (); + GetAllChildrenValues (ci, all_currencies, l => l.NumberFormatEntry.CurrencySymbol); + var children = all_currencies.Where (l => l != null).Distinct ().ToList (); + + if (children.Count == 1) { + nfe.CurrencySymbol = children[0]; + } else if (children.Count == 0) { + if (!ci.HasMissingLocale) + Console.WriteLine ("No currency data for `{0}'", ci.Name); + + + } else { + // .NET has weird concept of territory data available for neutral cultures (e.g. en, es, pt) + // We have to manually disambiguate the correct entry (which is artofficial anyway) + throw new ApplicationException (string.Format ("Ambiguous currency data for `{0}'", ci.Name)); + } + break; } } + + if (nfe.CurrencyDecimalDigits == null) { + var all_digits = new List (); + GetAllChildrenValues (ci, all_digits, l => l.NumberFormatEntry.CurrencyDecimalDigits); + var children = all_digits.Where (l => l != null).Distinct ().ToList (); + + if (children.Count == 1) { + nfe.CurrencyDecimalDigits = children[0]; + } else if (children.Count == 0) { + if (!ci.HasMissingLocale) + Console.WriteLine ("No currency decimal digits data for `{0}'", ci.Name); + + nfe.CurrencyDecimalDigits = "2"; + } else { + // .NET has weird concept of territory data available for neutral cultures (e.g. en, es, pt) + // We have to manually disambiguate the correct entry (which is artofficial anyway) + throw new ApplicationException (string.Format ("Ambiguous currency decimal digits data for `{0}'", ci.Name)); + } + } } - string date_sep = (string) nav.Evaluate ("string(ldml/dates/symbols/dateSeparator)"); - string time_sep = (string) nav.Evaluate ("string(ldml/dates/symbols/timeSeparator)"); + if (OutputCompare) + Print (); - if (date_sep != String.Empty) - ci.DateTimeFormatEntry.DateSeparator = date_sep; - if (time_sep != String.Empty) - ci.DateTimeFormatEntry.TimeSeparator = time_sep; - } + regions.Sort (new RegionComparer ()); + for (int i = 0; i < regions.Count; ++i) + regions[i].Index = i; - private void LookupNumberInfo (XPathNavigator nav, CultureInfoEntry ci) - { - XPathNodeIterator ni =(XPathNodeIterator) nav.Evaluate ("ldml/numbers"); - - while (ni.MoveNext ()) { - LookupNumberSymbols (ni.Current, ci); - LookupDecimalFormat (ni.Current, ci); - LookupPercentFormat (ni.Current, ci); - LookupCurrencyFormat (ni.Current, ci); - LookupCurrencySymbol (ni.Current, ci); + /** + * Dump each table individually. Using StringBuilders + * because it is easier to debug, should switch to just + * writing to streams eventually. + */ + using (StreamWriter writer = new StreamWriter (HeaderFileName, false, new UTF8Encoding (false, true))) { + writer.NewLine = "\n"; + writer.WriteLine (); + writer.WriteLine ("/* This is a generated file. Do not edit. See tools/locale-builder. */"); + writer.WriteLine ("#ifndef MONO_METADATA_CULTURE_INFO_TABLES"); + writer.WriteLine ("#define MONO_METADATA_CULTURE_INFO_TABLES 1"); + writer.WriteLine ("\n"); + + writer.WriteLine ("#define NUM_CULTURE_ENTRIES {0}", cultures.Count); + writer.WriteLine ("#define NUM_REGION_ENTRIES {0}", regions.Count); + + writer.WriteLine ("\n"); + + // Sort the cultures by lcid + cultures.Sort (new LcidComparer ()); + + StringBuilder builder = new StringBuilder (); + int row = 0; + int count = cultures.Count; + for (int i = 0; i < count; i++) { + CultureInfoEntry ci = cultures[i]; + if (ci.DateTimeFormatEntry == null) + continue; + ci.DateTimeFormatEntry.AppendTableRow (builder); + ci.DateTimeFormatEntry.Row = row++; + if (i + 1 < count) + builder.Append (','); + builder.Append ('\n'); + } + + writer.WriteLine ("static const DateTimeFormatEntry datetime_format_entries [] = {"); + writer.Write (builder); + writer.WriteLine ("};\n\n"); + + builder = new StringBuilder (); + row = 0; + for (int i = 0; i < count; i++) { + CultureInfoEntry ci = cultures[i]; + if (ci.NumberFormatEntry == null) + continue; + ci.NumberFormatEntry.AppendTableRow (builder); + ci.NumberFormatEntry.Row = row++; + if (i + 1 < count) + builder.Append (','); + builder.Append ('\n'); + } + + writer.WriteLine ("static const NumberFormatEntry number_format_entries [] = {"); + writer.Write (builder); + writer.WriteLine ("};\n\n"); + + builder = new StringBuilder (); + row = 0; + for (int i = 0; i < count; i++) { + CultureInfoEntry ci = cultures[i]; + ci.AppendTableRow (builder); + ci.Row = row++; + if (i + 1 < count) + builder.Append (','); + builder.Append ('\n'); + } + + writer.WriteLine ("static const CultureInfoEntry culture_entries [] = {"); + writer.Write (builder); + writer.WriteLine ("};\n\n"); + + cultures.Sort (new ExportNameComparer ()); // Sort based on name + builder = new StringBuilder (); + for (int i = 0; i < count; i++) { + CultureInfoEntry ci = cultures[i]; + var name = ci.GetExportName ().ToLowerInvariant (); + builder.Append ("\t{" + Entry.EncodeStringIdx (name) + ", "); + builder.Append (ci.Row + "}"); + if (i + 1 < count) + builder.Append (','); + + builder.AppendFormat ("\t /* {0} */", name); + builder.Append ('\n'); + } + + writer.WriteLine ("static const CultureInfoNameEntry culture_name_entries [] = {"); + writer.Write (builder); + writer.WriteLine ("};\n\n"); + + builder = new StringBuilder (); + int rcount = 0; + foreach (RegionInfoEntry r in regions) { + r.AppendTableRow (builder); + if (++rcount != regions.Count) + builder.Append (','); + + builder.Append ('\n'); + } + writer.WriteLine ("static const RegionInfoEntry region_entries [] = {"); + writer.Write (builder); + writer.WriteLine ("};\n\n"); + + builder = new StringBuilder (); + rcount = 0; + foreach (RegionInfoEntry ri in regions) { + builder.Append ("\t{" + Entry.EncodeStringIdx (ri.TwoLetterISORegionName) + ", "); + builder.Append (ri.Index + "}"); + if (++rcount != regions.Count) + builder.Append (','); + + builder.AppendFormat ("\t /* {0} */", ri.TwoLetterISORegionName); + builder.Append ('\n'); + } + + writer.WriteLine ("static const RegionInfoNameEntry region_name_entries [] = {"); + writer.Write (builder); + writer.WriteLine ("};\n\n"); + + writer.WriteLine ("static const char locale_strings [] = {"); + writer.Write (Entry.GetStrings ()); + writer.WriteLine ("};\n\n"); + + writer.WriteLine ("#endif\n"); } } - private void LookupDecimalFormat (XPathNavigator nav, CultureInfoEntry ci) + static void GetAllChildrenValues (CultureInfoEntry entry, List values, Func selector) { - string format = (string) nav.Evaluate ("string(decimalFormats/" + - "decimalFormatLength/decimalFormat/pattern)"); - - if (format == String.Empty) - return; - - string [] part_one, part_two; - string [] pos_neg = format.Split (new char [1] {';'}, 2); - - // Most of the patterns are common in positive and negative - if (pos_neg.Length == 1) - pos_neg = new string [] {pos_neg [0], pos_neg [0]}; - - if (pos_neg.Length == 2) { - - part_one = pos_neg [0].Split (new char [1] {'.'}, 2); - if (part_one.Length == 1) - part_one = new string [] {part_one [0], String.Empty}; - - if (part_one.Length == 2) { - // assumed same for both positive and negative - // decimal digit side - ci.NumberFormatEntry.NumberDecimalDigits = 0; - for (int i = 0; i < part_one [1].Length; i++) { - if (part_one [1][i] == '#') { - ci.NumberFormatEntry.NumberDecimalDigits ++; - } else - break; } - // FIXME: This should be actually done by modifying culture xml files, but too many files to be modified. - if (ci.NumberFormatEntry.NumberDecimalDigits > 0) - ci.NumberFormatEntry.NumberDecimalDigits --; - - // decimal grouping side - part_two = part_one [0].Split (','); - if (part_two.Length > 1) { - int len = part_two.Length - 1; - ci.NumberFormatEntry.NumberGroupSizes = new int [len]; - for (int i = 0; i < len; i++) { - string pat = part_two [i + 1]; - ci.NumberFormatEntry.NumberGroupSizes [i] = pat.Length; - } - } else { - ci.NumberFormatEntry.NumberGroupSizes = new int [1] { 3 }; - } + foreach (var e in entry.Children) { + if (e == entry) + continue; - if (pos_neg [1].StartsWith ("(") && pos_neg [1].EndsWith (")")) { - ci.NumberFormatEntry.NumberNegativePattern = 0; - } else if (pos_neg [1].StartsWith ("- ")) { - ci.NumberFormatEntry.NumberNegativePattern = 2; - } else if (pos_neg [1].StartsWith ("-")) { - ci.NumberFormatEntry.NumberNegativePattern = 1; - } else if (pos_neg [1].EndsWith (" -")) { - ci.NumberFormatEntry.NumberNegativePattern = 4; - } else if (pos_neg [1].EndsWith ("-")) { - ci.NumberFormatEntry.NumberNegativePattern = 3; - } else { - ci.NumberFormatEntry.NumberNegativePattern = 1; - } + values.Add (selector (e)); + + foreach (var e2 in e.Children) { + GetAllChildrenValues (e2, values, selector); } } } - private void LookupPercentFormat (XPathNavigator nav, CultureInfoEntry ci) + static XmlDocument GetXmlDocument (string path) { - string format = (string) nav.Evaluate ("string(percentFormats/" + - "percentFormatLength/percentFormat/pattern)"); - - if (format == String.Empty) - return; - - string [] part_one, part_two; - - // we don't have percentNegativePattern in CLDR so - // the percentNegativePattern are just guesses - if (format.StartsWith ("%")) { - ci.NumberFormatEntry.PercentPositivePattern = 2; - ci.NumberFormatEntry.PercentNegativePattern = 2; - format = format.Substring (1); - } else if (format.EndsWith (" %")) { - ci.NumberFormatEntry.PercentPositivePattern = 0; - ci.NumberFormatEntry.PercentNegativePattern = 0; - format = format.Substring (0, format.Length - 2); - } else if (format.EndsWith ("%")) { - ci.NumberFormatEntry.PercentPositivePattern = 1; - ci.NumberFormatEntry.PercentNegativePattern = 1; - format = format.Substring (0, format.Length - 1); - } else { - ci.NumberFormatEntry.PercentPositivePattern = 0; - ci.NumberFormatEntry.PercentNegativePattern = 0; - } + var doc = new XmlDocument (); + doc.Load (new XmlTextReader (path) { /*DtdProcessing = DtdProcessing.Ignore*/ } ); + return doc; + } - part_one = format.Split (new char [1] {'.'}, 2); - if (part_one.Length == 2) { - // assumed same for both positive and negative - // decimal digit side - ci.NumberFormatEntry.PercentDecimalDigits = 0; - for (int i = 0; i < part_one [1].Length; i++) { - if (part_one [1][i] == '#') - ci.NumberFormatEntry.PercentDecimalDigits++; - else - break; + bool Import (CultureInfoEntry data, string locale) + { + string fname = null; + var sep = locale.Split ('_'); + data.Language = sep[0]; + + // CLDR strictly follow ISO names, .NET does not + // Replace names where non-iso2 is used, e.g. Norway + if (data.Language != data.TwoLetterISOLanguageName) { + locale = data.TwoLetterISOLanguageName; + if (sep.Length > 1) { + locale += string.Join ("_", sep.Skip (1)); } } - if (part_one.Length > 0) { - // percent grouping side - part_two = part_one [0].Split (','); - if (part_two.Length > 1) { - int len = part_two.Length - 1; - ci.NumberFormatEntry.PercentGroupSizes = new int [len]; - for (int i = 0; i < len; i++) { - string pat = part_two [i + 1]; - if (pat [pat.Length -1] == '0') - ci.NumberFormatEntry.PercentDecimalDigits = pat.Length - 1; - ci.NumberFormatEntry.PercentGroupSizes [i] = pat.Length; - } - } else { - ci.NumberFormatEntry.PercentGroupSizes = new int [1] { 3 }; - ci.NumberFormatEntry.PercentDecimalDigits = 2; - } + // Convert broken Chinese names to correct one + switch (locale) { + case "zh_CHS": + locale = "zh_Hans"; + break; + case "zh_CHT": + locale = "zh_Hant"; + break; + case "zh_CN": + locale = "zh_Hans_CN"; + break; + case "zh_HK": + locale = "zh_Hant_HK"; + break; + case "zh_SG": + locale = "zh_Hans_SG"; + break; + case "zh_TW": + locale = "zh_Hant_TW"; + break; + case "zh_MO": + locale = "zh_Hant_MO"; + break; } - } - private void LookupCurrencyFormat (XPathNavigator nav, CultureInfoEntry ci) - { - string format = (string) nav.Evaluate ("string(currencyFormats/" + - "currencyFormatLength/currencyFormat/pattern)"); - - if (format == String.Empty) - return; - - string [] part_one, part_two; - string [] pos_neg = format.Split (new char [1] {';'}, 2); - - // Most of the patterns are common in positive and negative - if (pos_neg.Length == 1) - pos_neg = new string [] {pos_neg [0], pos_neg [0]}; - - if (pos_neg.Length == 2) { - part_one = pos_neg [0].Split (new char [1] {'.'}, 2); - if (part_one.Length == 1) - part_one = new string [] {part_one [0], String.Empty}; - if (part_one.Length == 2) { - // assumed same for both positive and negative - // decimal digit side - ci.NumberFormatEntry.CurrencyDecimalDigits = 0; - for (int i = 0; i < part_one [1].Length; i++) { - if (part_one [1][i] == '0') - ci.NumberFormatEntry.CurrencyDecimalDigits++; - else - break; - } + sep = locale.Split ('_'); - // decimal grouping side - part_two = part_one [0].Split (','); - if (part_two.Length > 1) { - int len = part_two.Length - 1; - ci.NumberFormatEntry.CurrencyGroupSizes = new int [len]; - for (int i = 0; i < len; i++) { - string pat = part_two [i + 1]; - ci.NumberFormatEntry.CurrencyGroupSizes [i] = pat.Length; - } - } else { - ci.NumberFormatEntry.CurrencyGroupSizes = new int [1] { 3 }; - } + string full_name = Path.Combine (data_root, "main", locale + ".xml"); + if (!File.Exists (full_name)) { + Console.WriteLine ("Missing locale file for `{0}'", locale); - if (pos_neg [1].StartsWith ("(\u00a4 ") && pos_neg [1].EndsWith (")")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 14; - } else if (pos_neg [1].StartsWith ("(\u00a4") && pos_neg [1].EndsWith (")")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 0; - } else if (pos_neg [1].StartsWith ("\u00a4 ") && pos_neg [1].EndsWith ("-")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 11; - } else if (pos_neg [1].StartsWith ("\u00a4") && pos_neg [1].EndsWith ("-")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 3; - } else if (pos_neg [1].StartsWith ("(") && pos_neg [1].EndsWith (" \u00a4")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 15; - } else if (pos_neg [1].StartsWith ("(") && pos_neg [1].EndsWith ("\u00a4")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 4; - } else if (pos_neg [1].StartsWith ("-") && pos_neg [1].EndsWith (" \u00a4")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 8; - } else if (pos_neg [1].StartsWith ("-") && pos_neg [1].EndsWith ("\u00a4")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 5; - } else if (pos_neg [1].StartsWith ("-\u00a4 ")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 9; - } else if (pos_neg [1].StartsWith ("-\u00a4")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 1; - } else if (pos_neg [1].StartsWith ("\u00a4 -")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 12; - } else if (pos_neg [1].StartsWith ("\u00a4-")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 2; - } else if (pos_neg [1].EndsWith (" \u00a4-")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 10; - } else if (pos_neg [1].EndsWith ("\u00a4-")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 7; - } else if (pos_neg [1].EndsWith ("- \u00a4")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 13; - } else if (pos_neg [1].EndsWith ("-\u00a4")) { - ci.NumberFormatEntry.CurrencyNegativePattern = 6; - } else { - ci.NumberFormatEntry.CurrencyNegativePattern = 0; + // We could fill default values but that's not as simple as it seems. For instance for non-neutral + // cultures the next part could be territory or not. + return false; + } else { + XmlDocument doc = null; + + /* + * Locale generation is done in several steps, first we + * read the root file which is the base invariant data + * then the supplemental root data, + * then the language file, the supplemental languages + * file then the locale file, then the supplemental + * locale file. Values in each descending file can + * overwrite previous values. + */ + foreach (var part in sep) { + if (fname != null) + fname += "_"; + + fname += part; + + var xml = GetXmlDocument (Path.Combine (data_root, "main", fname + ".xml")); + if (doc == null) + doc = xml; + + Import (xml, data); + } + + // + // Extract localized locale name from language xml file. Have to do it after both language and territory are read + // + var el = doc.SelectSingleNode (string.Format ("ldml/localeDisplayNames/languages/language[@type='{0}']", data.Language)); + if (el != null) + data.NativeName = el.InnerText; + + if (data.Territory != null) { + el = doc.SelectSingleNode (string.Format ("ldml/localeDisplayNames/territories/territory[@type='{0}']", data.Territory)); + if (el != null) { + // TODO: Should read + data.NativeName = string.Format ("{0} ({1})", data.NativeName, el.InnerText); + data.NativeTerritoryName = el.InnerText; } - - if (pos_neg [0].StartsWith ("\u00a4 ")) { - ci.NumberFormatEntry.CurrencyPositivePattern = 2; - } else if (pos_neg [0].StartsWith ("\u00a4")) { - ci.NumberFormatEntry.CurrencyPositivePattern = 0; - } else if (pos_neg [0].EndsWith (" \u00a4")) { - ci.NumberFormatEntry.CurrencyPositivePattern = 3; - } else if (pos_neg [0].EndsWith ("\u00a4")) { - ci.NumberFormatEntry.CurrencyPositivePattern = 1; - } else { - ci.NumberFormatEntry.CurrencyPositivePattern = 0; + + string currency; + // We have territory now we have to run the process again to extract currency symbol + if (region_currency.TryGetValue (data.Territory, out currency)) { + fname = null; + + var xml = GetXmlDocument (Path.Combine (data_root, "main", "root.xml")); + el = xml.SelectSingleNode (string.Format ("ldml/numbers/currencies/currency[@type='{0}']/symbol", currency)); + if (el != null) + data.NumberFormatEntry.CurrencySymbol = el.InnerText; + + foreach (var part in sep) { + if (fname != null) + fname += "_"; + + fname += part; + + xml = GetXmlDocument (Path.Combine (data_root, "main", fname + ".xml")); + el = xml.SelectSingleNode (string.Format ("ldml/numbers/currencies/currency[@type='{0}']/symbol", currency)); + if (el != null) + data.NumberFormatEntry.CurrencySymbol = el.InnerText; + + el = xml.SelectSingleNode (string.Format ("ldml/numbers/currencies/currency[@type='{0}']/displayName", currency)); + if (el != null) + data.NativeCurrencyName = el.InnerText; + } } } - } - } - private void LookupNumberSymbols (XPathNavigator nav, CultureInfoEntry ci) - { - string dec = (string) nav.Evaluate ("string(symbols/decimal)"); - string group = (string) nav.Evaluate ("string(symbols/group)"); - string percent = (string) nav.Evaluate ("string(symbols/percentSign)"); - string positive = (string) nav.Evaluate ("string(symbols/plusSign)"); - string negative = (string) nav.Evaluate ("string(symbols/minusSign)"); - string per_mille = (string) nav.Evaluate ("string(symbols/perMille)"); - string infinity = (string) nav.Evaluate ("string(symbols/infinity)"); - string nan = (string) nav.Evaluate ("string(symbols/nan)"); - - if (dec != String.Empty) { - ci.NumberFormatEntry.NumberDecimalSeparator = dec; - ci.NumberFormatEntry.PercentDecimalSeparator = dec; - ci.NumberFormatEntry.CurrencyDecimalSeparator = dec; - } - - if (group != String.Empty) { - ci.NumberFormatEntry.NumberGroupSeparator = group; - ci.NumberFormatEntry.PercentGroupSeparator = group; - ci.NumberFormatEntry.CurrencyGroupSeparator = group; - } - - if (percent != String.Empty) - ci.NumberFormatEntry.PercentSymbol = percent; - if (positive != String.Empty) - ci.NumberFormatEntry.PositiveSign = positive; - if (negative != String.Empty) - ci.NumberFormatEntry.NegativeSign = negative; - if (per_mille != String.Empty) - ci.NumberFormatEntry.PerMilleSymbol = per_mille; - if (infinity != String.Empty) - ci.NumberFormatEntry.PositiveInfinitySymbol = infinity; - if (nan != String.Empty) - ci.NumberFormatEntry.NaNSymbol = nan; - } - - private void LookupCurrencySymbol (XPathNavigator nav, CultureInfoEntry ci) - { - string type = currency_types [ci.Territory] as string; - - if (type == null) { - Console.WriteLine ("no currency type for: " + ci.Territory); - return; - } - - string cur = (string) nav.Evaluate ("string(currencies/currency [@type='" + - type + "']/symbol)"); - - if (cur != String.Empty) - ci.NumberFormatEntry.CurrencySymbol = cur; - } - - private bool LookupLcids (CultureInfoEntry ci, bool lang) - { - XPathNavigator nav = lcids_doc.CreateNavigator (); - string name = ci.Name; - // Language name does not always consist of locale name. - // (for zh-* it must be either zh-CHS or zh-CHT) - string langName = GetLanguageFixed (ci); - -// if (ci.Territory != null) -// name += "-" + ci.Territory; - - XPathNodeIterator ni =(XPathNodeIterator) nav.Evaluate ("lcids/lcid[@name='" - + (lang ? langName : name) + "']"); - if (!ni.MoveNext ()) { - Console.WriteLine ("no lcid found for: {0} ({1}/{2})", name, ci.Language, ci.Territory); - string file; - - if (ci.Territory != null) { - file = Path.Combine ("locales", ci.Language + "_" + ci.Territory + ".xml"); - Console.WriteLine ("deleting file: " + file); - File.Delete (file); - } + if (data.DateTimeFormatEntry.MonthGenitiveNames[0] == null) + data.DateTimeFormatEntry.MonthGenitiveNames = data.DateTimeFormatEntry.MonthNames; + + if (data.DateTimeFormatEntry.AbbreviatedMonthGenitiveNames[0] == null) + data.DateTimeFormatEntry.AbbreviatedMonthGenitiveNames = data.DateTimeFormatEntry.AbbreviatedMonthNames; + - return false; } - string id = ni.Current.GetAttribute ("id", String.Empty); - string parent = ni.Current.GetAttribute ("parent", String.Empty); - string specific = ni.Current.GetAttribute ("specific", String.Empty); - string iso2 = ni.Current.GetAttribute ("iso2", String.Empty); - string iso3 = ni.Current.GetAttribute ("iso3", String.Empty); - string win = ni.Current.GetAttribute ("win", String.Empty); - string icu = ni.Current.GetAttribute ("icu_name", String.Empty); - - // lcids are in 0x format - ci.Lcid = id; - ci.ParentLcid = parent; - ci.SpecificLcid = specific; - ci.ISO2Lang = iso2; - ci.ISO3Lang = iso3; - ci.Win3Lang = win; - ci.IcuName = icu; - - ci.TextInfoEntry = new TextInfoEntry (int.Parse (id.Substring (2), NumberStyles.HexNumber), GetXPathDocument ("textinfo.xml")); - - return true; - } - - private string LookupFullName (CultureInfoEntry ci, XPathNavigator nav) - { - string pre = "ldml/localeDisplayNames/"; - string ret; + // It looks like it never changes + data.DateTimeFormatEntry.TimeSeparator = ":"; + + // TODO: Don't have input data available but most values are 2 with few exceptions for 1 and 3 + // We don't add 3 as it's for some arabic states only + switch (data.ThreeLetterISOLanguageName) { + case "amh": + data.NumberFormatEntry.NumberDecimalDigits = + data.NumberFormatEntry.PercentDecimalDigits = 1; + break; + default: + data.NumberFormatEntry.NumberDecimalDigits = + data.NumberFormatEntry.PercentDecimalDigits = 2; + break; + } - // FIXME: We use ci.Language here. - // This is nothing more than hack for nb-NO or nn-NO - // where Parent of them is nn (not nb or nn). - ret = (string) nav.Evaluate ("string("+ - pre + "languages/language[@type='" + GetShortName (ci.Language) + "'])"); + // TODO: For now we capture only native name for default calendar + data.NativeCalendarNames[((int) data.CalendarType & 0xFF) - 1] = data.DateTimeFormatEntry.NativeCalendarName; - if (ci.Territory == null) - return ret; - ret += " (" + (string) nav.Evaluate ("string("+ - pre + "territories/territory[@type='" + ci.Territory + "'])") + ")"; + var lcdid_value = int.Parse (data.LCID.Substring (2), NumberStyles.HexNumber); + Patterns.FillValues (lcdid_value, data); - return ret; + return true; } - private void LookupRegions () + void Import (XmlDocument doc, CultureInfoEntry ci) { - XPathDocument doc = GetXPathDocument ("supplementalData.xml"); - XPathNavigator nav = doc.CreateNavigator (); - XPathNodeIterator ni = nav.Select ("supplementalData/currencyData/region"); - while (ni.MoveNext ()) { - string territory = (string) ni.Current.GetAttribute ("iso3166", String.Empty); - string currency = (string) ni.Current.Evaluate ("string(currency/@iso4217)"); - RegionInfoEntry region = new RegionInfoEntry (); - region.ISO2Name = territory.ToUpper (); - region.ISOCurrencySymbol = currency; - regions [territory] = region; + XmlNodeList nodes; + XmlNode el; + + // + // Extract script & teritory + // + el = doc.SelectSingleNode ("ldml/identity/script"); + if (el != null) + ci.Script = el.Attributes["type"].Value; + + el = doc.SelectSingleNode ("ldml/identity/territory"); + if (el != null) + ci.Territory = el.Attributes["type"].Value; + + var df = ci.DateTimeFormatEntry; + + string calendar; + // Default calendar is for now always "gregorian" + switch (ci.Name) { + case "th": case "th-TH": + calendar = "buddhist"; + ci.CalendarType = CalendarType.ThaiBuddhist; // typeof (ThaiBuddhistCalendar); + break; + case "ar": case "ar-SA": + calendar = "islamic"; + ci.CalendarType = CalendarType.UmAlQuraCalendar; // typeof (UmAlQuraCalendar); + break; + case "ps": case "ps-AF": case "prs": case "prs-AF": case "dv": case "dv-MV": + calendar = "persian"; + ci.CalendarType = CalendarType.HijriCalendar; // typeof (HijriCalendar); + break; + default: + calendar = "gregorian"; + ci.CalendarType = CalendarType.Gregorian; // typeof (GregorianCalendar); + ci.GregorianCalendarType = GregorianCalendarTypes.Localized; + break; } - doc = GetXPathDocument ("langs/en.xml"); - nav = doc.CreateNavigator (); - ni = nav.Select ("/ldml/localeDisplayNames/territories/territory"); - while (ni.MoveNext ()) { - RegionInfoEntry r = (RegionInfoEntry) - regions [ni.Current.GetAttribute ("type", "")]; - if (r == null) - continue; - r.EnglishName = ni.Current.Value; + var node = doc.SelectSingleNode (string.Format ("ldml/dates/calendars/calendar[@type='{0}']", calendar)); + if (node != null) { + el = doc.SelectSingleNode (string.Format ("ldml/localeDisplayNames/types/type[@type='{0}']", calendar)); + if (el != null) + df.NativeCalendarName = el.InnerText; + + + // Apply global rule first + nodes = node.SelectNodes ("months/monthContext[@type='format']/monthWidth[@type='wide']/month"); + ProcessAllNodes (nodes, df.MonthNames, AddOrReplaceValue); + nodes = node.SelectNodes ("months/monthContext[@type='stand-alone']/monthWidth[@type='wide']/month"); + ProcessAllNodes (nodes, df.MonthNames, AddOrReplaceValue); + + // Apply global rule first + nodes = node.SelectNodes ("months/monthContext[@type='format']/monthWidth[@type='abbreviated']/month"); + ProcessAllNodes (nodes, df.AbbreviatedMonthNames, AddOrReplaceValue); + nodes = node.SelectNodes ("months/monthContext[@type='stand-alone']/monthWidth[@type='abbreviated']/month"); + ProcessAllNodes (nodes, df.AbbreviatedMonthNames, AddOrReplaceValue); + + nodes = node.SelectNodes ("months/monthContext[@type='format']/monthWidth[@type='wide']/month"); + if (nodes != null) + ProcessAllNodes (nodes, df.MonthGenitiveNames, AddOrReplaceValue); + + nodes = node.SelectNodes ("days/dayContext[@type='format']/dayWidth[@type='wide']/day"); + ProcessAllNodes (nodes, df.DayNames, AddOrReplaceDayValue); + + // Apply global rule first + nodes = node.SelectNodes ("days/dayContext[@type='format']/dayWidth[@type='abbreviated']/day"); + ProcessAllNodes (nodes, df.AbbreviatedDayNames, AddOrReplaceDayValue); + nodes = node.SelectNodes ("days/dayContext[@type='stand-alone']/dayWidth[@type='abbreviated']/day"); + ProcessAllNodes (nodes, df.AbbreviatedDayNames, AddOrReplaceDayValue); + + // TODO: This is not really ShortestDayNames as .NET uses it + // Apply global rules first + nodes = node.SelectNodes ("days/dayContext[@type='format']/dayWidth[@type='narrow']/day"); + ProcessAllNodes (nodes, df.ShortestDayNames, AddOrReplaceDayValue); + nodes = node.SelectNodes ("days/dayContext[@type='stand-alone']/dayWidth[@type='narrow']/day"); + ProcessAllNodes (nodes, df.ShortestDayNames, AddOrReplaceDayValue); +/* + Cannot really be used it's too different to .NET and most app rely on it + + el = node.SelectSingleNode ("dateFormats/dateFormatLength[@type='full']/dateFormat/pattern"); + if (el != null) + df.LongDatePattern = ConvertDatePatternFormat (el.InnerText); + + // Medium is our short + el = node.SelectSingleNode ("dateFormats/dateFormatLength[@type='medium']/dateFormat/pattern"); + if (el != null) + df.ShortDatePattern = ConvertDatePatternFormat (el.InnerText); + + // Medium is our Long + el = node.SelectSingleNode ("timeFormats/timeFormatLength[@type='medium']/timeFormat/pattern"); + if (el != null) + df.LongTimePattern = ConvertTimePatternFormat (el.InnerText); + + el = node.SelectSingleNode ("timeFormats/timeFormatLength[@type='short']/timeFormat/pattern"); + if (el != null) + df.ShortTimePattern = ConvertTimePatternFormat (el.InnerText); + + el = node.SelectSingleNode ("dateTimeFormats/availableFormats/dateFormatItem[@id='yyyyMMMM']"); + if (el != null) + df.YearMonthPattern = ConvertDatePatternFormat (el.InnerText); + + el = node.SelectSingleNode ("dateTimeFormats/availableFormats/dateFormatItem[@id='MMMMdd']"); + if (el != null) + df.MonthDayPattern = ConvertDatePatternFormat (el.InnerText); +*/ + el = node.SelectSingleNode ("dayPeriods/dayPeriodContext/dayPeriodWidth[@type='abbreviated']/dayPeriod[@type='am']"); + if (el == null) + // Apply global rule first + el = node.SelectSingleNode ("dayPeriods/dayPeriodContext/dayPeriodWidth[@type='wide']/dayPeriod[@type='am']"); + + if (el != null) + df.AMDesignator = el.InnerText; + + el = node.SelectSingleNode ("dayPeriods/dayPeriodContext/dayPeriodWidth[@type='abbreviated']/dayPeriod[@type='pm']"); + if (el == null) + // Apply global rule first + el = node.SelectSingleNode ("dayPeriods/dayPeriodContext/dayPeriodWidth[@type='wide']/dayPeriod[@type='pm']"); + + // No data + if (el != null) + df.PMDesignator = el.InnerText; } - Hashtable curNames = new Hashtable (); - ni = nav.Select ("/ldml/numbers/currencies/currency"); - while (ni.MoveNext ()) - curNames [ni.Current.GetAttribute ("type", "")] = - ni.Current.Evaluate ("string (displayName)"); + var ni = ci.NumberFormatEntry; - foreach (RegionInfoEntry r in regions.Values) - r.CurrencyEnglishName = - (string) curNames [r.ISOCurrencySymbol]; - } + node = doc.SelectSingleNode ("ldml/numbers/symbols"); + if (node != null) { + el = node.SelectSingleNode ("decimal"); + if (el != null) { + ni.NumberDecimalSeparator = + ni.PercentDecimalSeparator = + ni.CurrencyDecimalSeparator = el.InnerText; + } + + el = node.SelectSingleNode ("plusSign"); + if (el != null) + ni.PositiveSign = el.InnerText; + + el = node.SelectSingleNode ("minusSign"); + if (el != null) + ni.NegativeSign = el.InnerText; + + el = node.SelectSingleNode ("infinity"); + if (el != null) { + ni.InfinitySymbol = el.InnerText; + } - private void LookupCurrencyTypes () - { - XPathDocument doc = GetXPathDocument ("supplementalData.xml"); - XPathNavigator nav = doc.CreateNavigator (); + el = node.SelectSingleNode ("perMille"); + if (el != null) + ni.PerMilleSymbol = el.InnerText; - currency_types = new Hashtable (); + el = node.SelectSingleNode ("nan"); + if (el != null) + ni.NaNSymbol = el.InnerText; - XPathNodeIterator ni =(XPathNodeIterator) nav.Evaluate ("supplementalData/currencyData/region"); - while (ni.MoveNext ()) { - string territory = (string) ni.Current.GetAttribute ("iso3166", String.Empty); - string currency = (string) ni.Current.Evaluate ("string(currency/@iso4217)"); - currency_types [territory] = currency; + el = node.SelectSingleNode ("percentSign"); + if (el != null) + ni.PercentSymbol = el.InnerText; + + el = node.SelectSingleNode ("group"); + if (el != null) { + ni.NumberGroupSeparator = + ni.PercentGroupSeparator = + ni.CurrencyGroupSeparator = el.InnerText; + } } - } - - static string control_chars = "eghmsftz"; - - // HACK: We are trying to build year_month and month_day patterns from the full pattern. - private void ParseFullDateFormat (DateTimeFormatEntry df, string full) - { - - string month_day = String.Empty; - string year_month = String.Empty; - bool in_month_data = false; - bool in_year_data = false; - int day_start = 0, day_end = 0; - int month_start = 0, month_end = 0; - int year_start = 0, year_end = 0; - bool inquote = false; - - for (int i = 0; i < full.Length; i++) { - char c = full [i]; - if (!inquote && c == 'M') { - month_day += c; - year_month += c; - in_year_data = true; - in_month_data = true; - if (month_start == 0) - month_start = i; - month_end = i; - year_end = year_month.Length; - } else if (!inquote && Char.ToLower (c) == 'd') { - month_day += c; - in_month_data = true; - in_year_data = false; - if (day_start == 0) - day_start = i; - day_end = i; - } else if (!inquote && Char.ToLower (c) == 'y') { - year_month += c; - in_year_data = true; - in_month_data = false; - if (year_start == 0) - year_start = i; - year_end = i; - } else if (!inquote && control_chars.IndexOf (Char.ToLower (c)) >= 0) { - in_year_data = false; - in_month_data = false; - } else if (in_year_data || in_month_data) { - if (in_month_data) - month_day += c; - if (in_year_data) - year_month += c; - } - - if (c == '\'') { - inquote = !inquote; - } - } - - if (month_day != String.Empty) { - //month_day = month_day.Substring (0, month_end); - df.MonthDayPattern = TrimPattern (month_day); - } - if (year_month != String.Empty) { - //year_month = year_month.Substring (0, year_end); - df.YearMonthPattern = TrimPattern (year_month); - } - } - - string TrimPattern (string p) + } + + static string ConvertDatePatternFormat (string format) + { + // + // LDMR uses different characters for some fields + // http://unicode.org/reports/tr35/#Date_Format_Patterns + // + format = format.Replace ("EEEE", "dddd"); // The full name of the day of the week + format = format.Replace ("LLLL", "MMMM"); // The full month name + + if (format.EndsWith (" y", StringComparison.Ordinal)) + format += "yyy"; + + return format; + } + + static string ConvertTimePatternFormat (string format) { - int idx = 0; - p = p.Trim ().TrimEnd (','); - idx = p.LastIndexOf ("' de '"); // spanish dates - if (idx > 0) - p = p.Substring (0, idx); - idx = p.LastIndexOf ("' ta '"); // finnish - if (idx > 0) - p = p.Substring (0, idx); - idx = p.LastIndexOf ("'ren'"); // euskara - if (idx > 0) - p = p.Replace ("'ren'", "").Trim (); - idx = p.LastIndexOf ("'a'"); // estonian - if (idx > 0) - p = p.Substring (0, idx); - - return p.Replace ("'ta '", "'ta'"); // finnish + format = format.Replace ("a", "tt"); // AM or PM + return format; } - private class LcidComparer : IComparer { + static void ProcessAllNodes (XmlNodeList list, IList values, Action, string, string> convertor) + { + foreach (XmlNode entry in list) { + var index = entry.Attributes["type"].Value; + var value = entry.InnerText; + convertor (values, index, value); + } + } - public int Compare (object a, object b) - { - CultureInfoEntry aa = (CultureInfoEntry) a; - CultureInfoEntry bb = (CultureInfoEntry) b; - - return aa.Lcid.CompareTo (bb.Lcid); - } - } + // All text indexes are 1-based + static void AddOrReplaceValue (IList list, string oneBasedIndex, string value) + { + int index = int.Parse (oneBasedIndex); + AddOrReplaceValue (list, index - 1, value); + } - private class NameComparer : IComparer { + static readonly string[] day_types = new string[] { "sun", "mon", "tue", "wed", "thu", "fri", "sat" }; - public int Compare (object a, object b) - { - CultureInfoEntry aa = (CultureInfoEntry) a; - CultureInfoEntry bb = (CultureInfoEntry) b; + static void AddOrReplaceDayValue (IList list, string dayType, string value) + { + int index = Array.IndexOf (day_types, dayType); + AddOrReplaceValue (list, index, value); + } - return String.CompareOrdinal(aa.Name.ToLower (), bb.Name.ToLower ()); - } - } + static void AddOrReplaceValue (IList list, int index, string value) + { + if (list.Count <= index) + ((List) list).AddRange (new string[index - list.Count + 1]); - class RegionComparer : IComparer + list[index] = value; + } + + sealed class LcidComparer : IComparer { - public static RegionComparer Instance = new RegionComparer (); - - public int Compare (object o1, object o2) + public int Compare (CultureInfoEntry x, CultureInfoEntry y) { - RegionInfoEntry r1 = (RegionInfoEntry) o1; - RegionInfoEntry r2 = (RegionInfoEntry) o2; - return String.CompareOrdinal ( - r1.ISO2Name, r2.ISO2Name); + return x.LCID.CompareTo (y.LCID); } } - class RegionLCIDMap + sealed class ExportNameComparer : IComparer { - public RegionLCIDMap (int lcid, int regionId) + public int Compare (CultureInfoEntry x, CultureInfoEntry y) { - LCID = lcid; - RegionId = regionId; + return String.Compare (x.GetExportName (), y.GetExportName (), StringComparison.OrdinalIgnoreCase); } + } - public int LCID; - public int RegionId; + class RegionComparer : IComparer + { + public int Compare (RegionInfoEntry x, RegionInfoEntry y) + { + return x.TwoLetterISORegionName.CompareTo (y.TwoLetterISORegionName); + } } - } + } } - - diff --git a/tools/locale-builder/Entry.cs b/tools/locale-builder/Entry.cs index a26f64c3338..2e7b7be34d5 100644 --- a/tools/locale-builder/Entry.cs +++ b/tools/locale-builder/Entry.cs @@ -1,23 +1,48 @@ // +// Entry.cs // +// Authors: +// Marek Safar +// +// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // using System; using System.Text; -using System.Collections; - -namespace Mono.Tools.LocaleBuilder { - - public class Entry { +using System.Collections.Generic; +namespace Mono.Tools.LocaleBuilder +{ + public class Entry + { // maps strings to indexes - static Hashtable hash; - static ArrayList string_order; + static Dictionary hash = new Dictionary (); + static List string_order = new List (); // idx 0 is reserved to indicate null static int curpos = 1; // serialize the strings in Hashtable. - public static string GetStrings () { + public static string GetStrings () + { Console.WriteLine ("Total string data size: {0}", curpos); if (curpos > UInt16.MaxValue) throw new Exception ("need to increase idx size in culture-info.h"); @@ -31,54 +56,61 @@ namespace Mono.Tools.LocaleBuilder { } return ret.ToString (); } - static Entry () { - hash = new Hashtable (); - string_order = new ArrayList (); - } - static int AddString (string s, int size) { - object o = hash [s]; - if (o == null) { + + static int AddString (string s, int size) + { + if (!hash.ContainsKey (s)) { int ret; string_order.Add (s); ret = curpos; - hash [s] = curpos; + hash.Add (s, curpos); curpos += size + 1; // null terminator return ret; - } else { - return (int)o; } + + return hash[s]; } - internal static String EncodeStringIdx (string str) - { - if (str == null) - return "0"; + protected static StringBuilder AppendNames (StringBuilder builder, IList names) + { + builder.Append ('{'); + for (int i = 0; i < names.Count; i++) { + if (i > 0) + builder.Append (", "); - StringBuilder ret = new StringBuilder (); - byte [] ba = new UTF8Encoding ().GetBytes (str); - bool in_hex = false; - foreach (byte b in ba) { - if (b > 127 || (in_hex && is_hex (b))) { - ret.AppendFormat ("\\x{0:x}", b); - in_hex = true; - } else { - if (b == '\\') - ret.Append ('\\'); - ret.Append ((char) b); - in_hex = false; - } - } + builder.Append (EncodeStringIdx (names[i])); + } + builder.Append ("}"); + + return builder; + } + + internal static String EncodeStringIdx (string str) + { + if (str == null) + return "0"; + + StringBuilder ret = new StringBuilder (); + byte[] ba = new UTF8Encoding ().GetBytes (str); + bool in_hex = false; + foreach (byte b in ba) { + if (b > 127 || (in_hex && is_hex (b))) { + ret.AppendFormat ("\\x{0:x}", b); + in_hex = true; + } else { + if (b == '\\') + ret.Append ('\\'); + ret.Append ((char) b); + in_hex = false; + } + } int res = AddString (ret.ToString (), ba.Length); - return res.ToString (); - } + return res.ToString (); + } - private static bool is_hex (int e) + private static bool is_hex (int e) { return (e >= '0' && e <= '9') || (e >= 'A' && e <= 'F') || (e >= 'a' && e <= 'f'); } - } + } } - - - - diff --git a/tools/locale-builder/Makefile.am b/tools/locale-builder/Makefile.am index c87dc6bec75..c3098029262 100644 --- a/tools/locale-builder/Makefile.am +++ b/tools/locale-builder/Makefile.am @@ -8,7 +8,7 @@ MCSFLAGS = -debug+ # make minimal MINIMAL_LOCALES=en_US # MINIMAL_LOCALES is a regular expression over the filenames in locales. # make minimal saves about 60 KB of the mono binary size. -# To create the tables fro all the supported locales, use: +# To create the tables for all the supported locales, use: # make culture-table # After make minimal or make culture-table, you need to run: # make install-culture-table @@ -19,6 +19,9 @@ MINIMAL_LOCALES=en CLEANFILES = locale-builder.exe culture-info-tables.h locale_builder_sources = Driver.cs \ + CalendarType.cs \ + Constants.cs \ + Patterns.cs \ CultureInfoEntry.cs \ DateTimeFormatEntry.cs \ NumberFormatEntry.cs \ @@ -26,140 +29,21 @@ locale_builder_sources = Driver.cs \ TextInfoEntry.cs \ Entry.cs -supp_data_files = \ - supp/af_ZA.xml \ - supp/ar_AE.xml \ - supp/ar_BH.xml \ - supp/ar_DZ.xml \ - supp/ar_EG.xml \ - supp/ar_IQ.xml \ - supp/ar_JO.xml \ - supp/ar_KW.xml \ - supp/ar_LB.xml \ - supp/ar_LY.xml \ - supp/ar_MA.xml \ - supp/ar_OM.xml \ - supp/ar_QA.xml \ - supp/ar_SA.xml \ - supp/ar_SY.xml \ - supp/ar_TN.xml \ - supp/ar.xml \ - supp/ar_YE.xml \ - supp/be_BY.xml \ - supp/bg.xml \ - supp/ca_ES.xml \ - supp/ChangeLog \ - supp/cs_CZ.xml \ - supp/da.xml \ - supp/de_AT.xml \ - supp/de.xml \ - supp/el.xml \ - supp/en_AU.xml \ - supp/en_CA.xml \ - supp/en_GB.xml \ - supp/en_IE.xml \ - supp/en_NZ.xml \ - supp/en_PH.xml \ - supp/en_TT.xml \ - supp/en_US.xml \ - supp/en.xml \ - supp/en_ZA.xml \ - supp/en_ZW.xml \ - supp/es_AR.xml \ - supp/es_BO.xml \ - supp/es_CL.xml \ - supp/es_CO.xml \ - supp/es_CR.xml \ - supp/es_DO.xml \ - supp/es_EC.xml \ - supp/es_ES.xml \ - supp/es_GT.xml \ - supp/es_HN.xml \ - supp/es_MX.xml \ - supp/es_NI.xml \ - supp/es_PA.xml \ - supp/es_PE.xml \ - supp/es_PR.xml \ - supp/es_PY.xml \ - supp/es_SV.xml \ - supp/es_UY.xml \ - supp/es_VE.xml \ - supp/es.xml \ - supp/et.xml \ - supp/eu_ES.xml \ - supp/fa.xml \ - supp/fi.xml \ - supp/fo_FO.xml \ - supp/fr_BE.xml \ - supp/fr_CA.xml \ - supp/fr_CH.xml \ - supp/fr_FR.xml \ - supp/fr_LU.xml \ - supp/fr.xml \ - supp/he.xml \ - supp/hi_IN.xml \ - supp/hr.xml \ - supp/hu.xml \ - supp/hy.xml \ - supp/id_ID.xml \ - supp/is.xml \ - supp/it_CH.xml \ - supp/it_IT.xml \ - supp/ja.xml \ - supp/ka_GE.xml \ - supp/ko_KR.xml \ - supp/lt_LT.xml \ - supp/lv.xml \ - supp/mk.xml \ - supp/nl_BE.xml \ - supp/nl_NL.xml \ - supp/pl.xml \ - supp/pt_BR.xml \ - supp/pt_PT.xml \ - supp/pt.xml \ - supp/root.xml \ - supp/ro.xml \ - supp/ru.xml \ - supp/sk.xml \ - supp/sl.xml \ - supp/sq.xml \ - supp/sv_FI.xml \ - supp/sv_SE.xml \ - supp/sw_KE.xml \ - supp/th.xml \ - supp/tr.xml \ - supp/uk.xml \ - supp/vi.xml - -extra_langs = \ - langs/ka.xml - -extra_locales = \ - locales/ka_GE.xml - -EXTRA_DIST = $(locale_builder_sources) $(supp_data_files) lcids.xml supplementalData.xml textinfo.xml \ - $(extra_langs) $(extra_locales) - +EXTRA_DIST = $(locale_builder_sources) lcids.xml locale-builder.exe: $(locale_builder_sources) $(MCS) $(MCSFLAGS) /out:$@ $^ -culture-table: locale-builder.exe lang-data locale-data +culture-table: locale-builder.exe locale-data $(RUNTIME) locale-builder.exe -minimal: locale-builder.exe lang-data locale-data +minimal: locale-builder.exe locale-data $(RUNTIME) locale-builder.exe --locales '$(MINIMAL_LOCALES)' -lang-data: - if ! test -f langs/en.xml ; then \ - wget http://go-mono.com/icu/icu_langs.tar.gz ; \ - tar xzvf icu_langs.tar.gz ; \ - fi - locale-data: - if ! test -f locales/en_US.xml ; then \ - wget http://go-mono.com/icu/icu_locales.tar.gz ; \ - tar xzvf icu_locales.tar.gz ; \ + if ! test -d CLDR/common ; then \ + wget http://www.unicode.org/Public/cldr/21/core.zip ; \ + unzip core.zip -d CLDR ; \ fi install-culture-table: culture-info-tables.h diff --git a/tools/locale-builder/NumberFormatEntry.cs b/tools/locale-builder/NumberFormatEntry.cs index 5c74fcfcd5a..f90e58c24b7 100644 --- a/tools/locale-builder/NumberFormatEntry.cs +++ b/tools/locale-builder/NumberFormatEntry.cs @@ -1,117 +1,147 @@ +// +// DateTimeFormatEntry.cs // -// Mono.Tools.LocaleBuilder.NumberFormatEntry -// -// Author(s): +// Authors: // Jackson Harper (jackson@ximian.com) +// Marek Safar // -// (C) 2004 Novell, Inc (http://www.novell.com) +// (C) 2004, Novell, Inc (http://www.novell.com) +// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // - -using System; using System.Text; - -namespace Mono.Tools.LocaleBuilder { - - public class NumberFormatEntry : Entry { - - public static readonly int MaxGroupSize = 5; - - public int CurrencyDecimalDigits; - public string CurrencyDecimalSeparator; - public string CurrencyGroupSeparator; - public int [] CurrencyGroupSizes; - public int CurrencyNegativePattern; - public int CurrencyPositivePattern; - public string CurrencySymbol; - public string NaNSymbol; - public string NegativeSign; - public int NumberDecimalDigits; - public string NumberDecimalSeparator; - public string NumberGroupSeparator; - public int [] NumberGroupSizes; - public int NumberNegativePattern; - public int PercentDecimalDigits; - public string PercentDecimalSeparator; - public string PercentGroupSeparator; - public int [] PercentGroupSizes; - public int PercentNegativePattern; - public int PercentPositivePattern; - public string PercentSymbol; - public string PerMilleSymbol; - public string PositiveInfinitySymbol; - public string PositiveSign; - - public int Row; - - public string NegativeInfinitySymbol { - get { - return NegativeSign + PositiveInfinitySymbol; - } - } - - public void AppendTableRow (StringBuilder builder) - { - builder.Append ("\t{"); - - builder.Append (EncodeStringIdx (CurrencyDecimalSeparator) + ", "); - builder.Append (EncodeStringIdx (CurrencyGroupSeparator) + ", "); - builder.Append (EncodeStringIdx (PercentDecimalSeparator) + ", "); - builder.Append (EncodeStringIdx (PercentGroupSeparator) + ", "); - builder.Append (EncodeStringIdx (NumberDecimalSeparator) + ", "); - builder.Append (EncodeStringIdx (NumberGroupSeparator) + ", "); - - builder.Append (EncodeStringIdx (CurrencySymbol) + ", "); - builder.Append (EncodeStringIdx (PercentSymbol) + ", "); - builder.Append (EncodeStringIdx (NaNSymbol) + ", "); - builder.Append (EncodeStringIdx (PerMilleSymbol) + ", "); - builder.Append (EncodeStringIdx (NegativeInfinitySymbol) + ", "); - builder.Append (EncodeStringIdx (PositiveInfinitySymbol) + ", "); - - builder.Append (EncodeStringIdx (NegativeSign) + ", "); - builder.Append (EncodeStringIdx (PositiveSign) + ", "); - - builder.Append (CurrencyNegativePattern + ", "); - builder.Append (CurrencyPositivePattern + ", "); - builder.Append (PercentNegativePattern + ", "); - builder.Append (PercentPositivePattern + ", "); - builder.Append (NumberNegativePattern + ", "); - - builder.Append (CurrencyDecimalDigits + ", "); - builder.Append (PercentDecimalDigits + ", "); - builder.Append (NumberDecimalDigits + ", "); - - AppendGroupSizes (builder, CurrencyGroupSizes); - builder.Append (", "); - AppendGroupSizes (builder, PercentGroupSizes); - builder.Append (", "); - AppendGroupSizes (builder, NumberGroupSizes); - - builder.Append ('}'); - } - - private void AppendGroupSizes (StringBuilder builder, int [] gs) - { - int len = (gs == null ? 0 : gs.Length); - - builder.Append ('{'); - for (int i = 0; i < MaxGroupSize; i++) { - if (i < len) - builder.Append (gs [0]); - else - builder.Append (-1); - if (i+1 < MaxGroupSize) - builder.Append (", "); - } - builder.Append ('}'); - } - - public override string ToString () - { - StringBuilder builder = new StringBuilder (); - AppendTableRow (builder); - return builder.ToString (); - } - } +using System.Globalization; + +namespace Mono.Tools.LocaleBuilder +{ + public class NumberFormatEntry : Entry + { + public string CurrencyDecimalDigits; + public string CurrencyDecimalSeparator = ","; + public string CurrencyGroupSeparator = ","; + public string[] CurrencyGroupSizes = new string[Constants.GROUP_SIZE]; + public string CurrencyNegativePattern; + public string CurrencyPositivePattern; + public string CurrencySymbol; + public string NaNSymbol; + public string NegativeSign = "-"; + public int NumberDecimalDigits; + public string NumberDecimalSeparator = ","; + public string NumberGroupSeparator = ","; + public string[] NumberGroupSizes = new string[Constants.GROUP_SIZE]; + public string NumberNegativePattern; + public int PercentDecimalDigits; + public string PercentDecimalSeparator = ","; + public string PercentGroupSeparator = ","; + public string[] PercentGroupSizes = new string[Constants.GROUP_SIZE]; + public string PercentNegativePattern; + public string PercentPositivePattern; + public string PercentSymbol = "%"; + public string PerMilleSymbol = "‰"; + public string InfinitySymbol = "∞"; + public string PositiveSign = "+"; + public DigitShapes DigitSubstitution = DigitShapes.None; + public string[] NativeDigits = new string[10] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + + public int Row; + + public string NegativeInfinitySymbol + { + get + { + return NegativeSign + InfinitySymbol; + } + } + + public string PositiveInfinitySymbol + { + get + { + return PositiveSign + InfinitySymbol; + } + } + + public void AppendTableRow (StringBuilder builder) + { + builder.Append ("\t{"); + + builder.Append (EncodeStringIdx (CurrencyDecimalSeparator) + ", "); + builder.Append (EncodeStringIdx (CurrencyGroupSeparator) + ", "); + builder.Append (EncodeStringIdx (PercentDecimalSeparator) + ", "); + builder.Append (EncodeStringIdx (PercentGroupSeparator) + ", "); + builder.Append (EncodeStringIdx (NumberDecimalSeparator) + ", "); + builder.Append (EncodeStringIdx (NumberGroupSeparator) + ", "); + + builder.Append (EncodeStringIdx (CurrencySymbol) + ", "); + builder.Append (EncodeStringIdx (PercentSymbol) + ", "); + builder.Append (EncodeStringIdx (NaNSymbol) + ", "); + builder.Append (EncodeStringIdx (PerMilleSymbol) + ", "); + builder.Append (EncodeStringIdx (NegativeInfinitySymbol) + ", "); + builder.Append (EncodeStringIdx (PositiveInfinitySymbol) + ", "); + + builder.Append (EncodeStringIdx (NegativeSign) + ", "); + builder.Append (EncodeStringIdx (PositiveSign) + ", "); + + builder.Append (CurrencyNegativePattern + ", "); + builder.Append (CurrencyPositivePattern + ", "); + builder.Append (PercentNegativePattern + ", "); + builder.Append (PercentPositivePattern + ", "); + builder.Append (NumberNegativePattern + ", "); + + builder.Append (CurrencyDecimalDigits + ", "); + builder.Append (PercentDecimalDigits + ", "); + builder.Append (NumberDecimalDigits + ", "); + + AppendGroupSizes (builder, CurrencyGroupSizes); + builder.Append (", "); + AppendGroupSizes (builder, PercentGroupSizes); + builder.Append (", "); + AppendGroupSizes (builder, NumberGroupSizes); + + builder.Append ('}'); + } + + static void AppendGroupSizes (StringBuilder builder, string[] gs) + { + builder.Append ('{'); + for (int i = 0; i < gs.Length; i++) { + if (i > 0) + builder.Append (", "); + + if (gs[i] == null) + builder.Append (-1); + else + builder.Append (gs[i]); + } + + builder.Append ('}'); + } + + public override string ToString () + { + StringBuilder builder = new StringBuilder (); + AppendTableRow (builder); + return builder.ToString (); + } + } } diff --git a/tools/locale-builder/README b/tools/locale-builder/README index cad06784fdb..df8f310c0c0 100644 --- a/tools/locale-builder/README +++ b/tools/locale-builder/README @@ -5,14 +5,14 @@ * input resources - There is only an external resource: unicode CLDR. I used version 1.7, the latest one as of - May, 2009: - http://unicode.org/Public/cldr/1.7.0/core.zip + There is only an external resource: unicode CLDR. It can be downloaded from + http://www.unicode.org/Public/cldr/ - There is a couple of extra mono resources included in this directory: - - lcids.xml for LCIDs. - - textinfos.xml for TextInfo. - - supplementalData.xml and supp/*.xml for .NET(Windows)-ism fixup. + CLDR specificatin can be found at http://www.unicode.org/reports/tr35/ + + All content has to me extracted into CLDR folder. The latest version used is 21. + + There is an extra mono resource included in this directory lcids.xml for LCIDs. * generated file @@ -38,11 +38,14 @@ * updating the data - Currently, when we need to fix or update data, we need to modify or - add the proper file in the supp directory (if it's a new file it must be added - in Makefile.am as well to supp_data_files). + Update Makefile.am to get the latest CLDR data. However, CLDR is not complete and + it's missing data for many rarely used cultures. In such cases we provide empty value + but when someone has the knowleadge what the values should be it's recommended to + use online CLDR tool to fill the data gap. + To create the files used by the runtime after an update, run: make culture-table make install-culture-table + At the start of Makefile.am there are additional instructions for specific builds. diff --git a/tools/locale-builder/RegionInfoEntry.cs b/tools/locale-builder/RegionInfoEntry.cs index b0fd6101412..8cfdde5ecb6 100644 --- a/tools/locale-builder/RegionInfoEntry.cs +++ b/tools/locale-builder/RegionInfoEntry.cs @@ -16,38 +16,35 @@ namespace Mono.Tools.LocaleBuilder { public class RegionInfoEntry : Entry { - public int RegionId; // it is GeoId in 2.0. - // public byte MeasurementSystem; - public string ISO2Name = String.Empty; // supplementalData.xml - public string ISO3Name = String.Empty; - public string Win3Name = String.Empty; - public string EnglishName = String.Empty; // langs/en.xml - public string CurrencySymbol = String.Empty; - public string ISOCurrencySymbol = String.Empty; // supplementalData.xml - public string CurrencyEnglishName = String.Empty; // langs/en.xml - - // NativeName and CurrencyNativeName are language dependent. + public int Index; // Used to link region from culture, it must be 0-based index from region_name_entries + + public string GeoId; + public string TwoLetterISORegionName; + public string ThreeLetterISORegionName; + public string ThreeLetterWindowsRegionName; + public string EnglishName; + public string CurrencySymbol; + public string ISOCurrencySymbol; + public string CurrencyEnglishName; + public string Name; + public string DisplayName; + public string NativeName; + public string CurrencyNativeName; + public bool IsMetric = true; public void AppendTableRow (StringBuilder builder) { - builder.Append ("\t{ 0, "); // 0 is a slot for LCID (stored at managed code) - builder.Append (RegionId); - builder.Append (','); - // builder.Append (MeasurementSystem); - // builder.Append (','); - builder.Append (EncodeStringIdx (ISO2Name)); - builder.Append (','); - builder.Append (EncodeStringIdx (ISO3Name)); - builder.Append (','); - builder.Append (EncodeStringIdx (Win3Name)); - builder.Append (','); - builder.Append (EncodeStringIdx (EnglishName)); - builder.Append (','); - builder.Append (EncodeStringIdx (CurrencySymbol)); - builder.Append (','); - builder.Append (EncodeStringIdx (ISOCurrencySymbol)); - builder.Append (','); - builder.Append (EncodeStringIdx (CurrencyEnglishName)); + builder.Append ("\t{ "); + builder.Append (GeoId).Append (','); + builder.Append (EncodeStringIdx (TwoLetterISORegionName)).Append (','); + builder.Append (EncodeStringIdx (ThreeLetterISORegionName)).Append (','); + builder.Append (EncodeStringIdx (ThreeLetterWindowsRegionName)).Append (','); + builder.Append (EncodeStringIdx (EnglishName)).Append (','); + builder.Append (EncodeStringIdx (NativeName)).Append (','); + builder.Append (EncodeStringIdx (CurrencySymbol)).Append (','); + builder.Append (EncodeStringIdx (ISOCurrencySymbol)).Append (','); + builder.Append (EncodeStringIdx (CurrencyEnglishName)).Append (','); + builder.Append (EncodeStringIdx (CurrencyNativeName)); builder.Append ('}'); } diff --git a/tools/locale-builder/TextInfoEntry.cs b/tools/locale-builder/TextInfoEntry.cs index f7a04b5613c..01fd9ccdd55 100644 --- a/tools/locale-builder/TextInfoEntry.cs +++ b/tools/locale-builder/TextInfoEntry.cs @@ -1,49 +1,62 @@ -using System; -using System.Text; -using System.Collections; -using System.Xml; -using System.Xml.XPath; +// +// TextInfoEntry.cs +// +// Authors: +// Marek Safar +// +// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// -namespace Mono.Tools.LocaleBuilder { +using System.Text; - public class TextInfoEntry : Entry { - - string ansi = "0"; - string ebcdic = "0"; - string mac = "0"; - string oem = "0"; - string listsep = ","; +namespace Mono.Tools.LocaleBuilder +{ + public class TextInfoEntry : Entry + { + public string ANSICodePage; + public string EBCDICCodePage; + public string MacCodePage; + public string OEMCodePage; + public string ListSeparator; + public bool IsRightToLeft; - public TextInfoEntry (int lcid, XPathDocument d) + public override string ToString () { - string q = "/textinfos/textinfo [@lcid=" + lcid + "]"; - XPathNodeIterator ni = (XPathNodeIterator) d.CreateNavigator ().Evaluate (q); - // no info, move along - if (! ni.MoveNext ()) - throw new Exception (); - - ansi = ni.Current.GetAttribute ("ansi", String.Empty); - ebcdic = ni.Current.GetAttribute ("ebcdic", String.Empty); - mac = ni.Current.GetAttribute ("mac", String.Empty); - oem = ni.Current.GetAttribute ("oem", String.Empty); - listsep = ni.Current.GetAttribute ("listsep", String.Empty); - } - - public override string ToString () - { StringBuilder b = new StringBuilder (); b.Append ("{ "); - b.Append (ansi); - b.Append (", "); - b.Append (ebcdic); - b.Append (", "); - b.Append (mac ); - b.Append (", "); - b.Append (oem); - b.Append (", '"); - b.Append (listsep); + b.Append (ANSICodePage).Append (", "); + b.Append (EBCDICCodePage).Append (", "); + b.Append (MacCodePage).Append (", "); + b.Append (OEMCodePage).Append (", "); + b.Append (IsRightToLeft ? "1" : "0").Append (", '"); + + // TODO: It's more than 1 char for some cultures + if (ListSeparator.Length <= 1) + b.Append (ListSeparator); + else + b.Append (";"); + b.Append ("' }"); - + return b.ToString (); } } diff --git a/tools/locale-builder/langs/.gitattributes b/tools/locale-builder/langs/.gitattributes deleted file mode 100644 index 2d2377b5eaf..00000000000 --- a/tools/locale-builder/langs/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -/nb.xml -crlf -/nn.xml -crlf diff --git a/tools/locale-builder/langs/.gitignore b/tools/locale-builder/langs/.gitignore deleted file mode 100644 index b878e882aca..00000000000 --- a/tools/locale-builder/langs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/*.xml diff --git a/tools/locale-builder/langs/ka.xml b/tools/locale-builder/langs/ka.xml deleted file mode 100644 index 4656ceea5f3..00000000000 --- a/tools/locale-builder/langs/ka.xml +++ /dev/null @@ -1,2159 +0,0 @@ - - - - - - - - - - - {0} ({1}) - , - - - აფხაზური - ადიღეური - ავესტა - აფრიკული - აინუ - ალეუტური - ძველი ინგლისური - არაბული - არამეული - ხელოვნური სხვა - ასამური - ავსტრიული - აზერბაიჯანული - ბელორუსული - ბულგარული - ბიჰარი - ტიბეტური - ბრეტონული - ბოსნიური - ბურიატული - კატალანური - კავკასიური სხვა - ჩეჩნური - კელტური სხვა - ჩეხური - საეკლესიო სლავური - უელსური - დანიური - გერმანული - ავსტრიული გერმანული - შვეიცარიული მაღალი გერმანული - ეგვიპტური - ბერძნული - ინგლისური - ავსტრალიური ინგლისური - კანადური ინგლისური - ბრიტანული ინგლისური - ამერიკული ინგლისური - ესპერანტო - ესპანური - ლათინურ ამერიკული ესპანური - იბერიული ესპანური - ესტონური - ბასკური - სპარსული - ფინური - ფილიპინური - ფრანგული - კანადური ფრანგული - შვეიცარიული ფრანგული - ძველი ფრანგული - ირლანდიური - შოტლანდიურ-გალური - გალური - გუარანი - ძველი გერმანული - ძველი ბერძნული - შვეიცარიული გერმანული - გუჯარათი - ებრაული - ჰინდი - ხორვატიული - უნგრული - სომხური - ინტერლინგუალური - ინდონეზიური - ინტერლინგი - ინდო-ევროპული სხვა - ისლანდიური - იტალიური - იაპონური - იავანური - ქართული - კონგო - ყაზახური - კამბოჯიური - კორეული - ქურთული - ყირგიზული - ლათინური - ლუქსემბურგული - ლინგალა - ლაოსური - ლიტვური - ლატვიური - მაკედონიური - მონღოლური - მოლდოვური - მალაიზიური - მაიას ენები - ნეაპოლიტანური - ნეპალური - ჰოლანდიური - ფლომანდიური - ნორვეგიული ნინორსკი - ნორვეგიული - ნავახო - ოციტანური - ორიული - ოსური - ძველი სპარსული - პოლონური - პრაკრიტის ენები - პუშტუ - პორტუგალიური - ბრაზილიური პორტუგალიური - იბერიულ-პორტუგალიური - რუმინული - რუსული - სანსკრიტი - სარდინიული - სიცილიური - სინდური - ძველი ირლანდიური - სერბულ-ხორვატული - სინჰალური - სლოვაკური - სლოვენური - სლავური სხვა - სომალიური - ალბანური - სერბული - სამხრეთ სოთოს ენა - შუმერული - შვედური - სუაჰილი - ტაჯიკური - ტაილანდური - თურქმენული - კლინგონი - ტსვანა - თურქული - თუი - უდმურტიული - უიგურული - უკრაინული - უცნობი ან არასწორი ენა - ურდუ - უზბეკური - ვიეტნამური - ქსოზა - იდიში - ჩინური - გამარტივებული ჩინური - ტრადიციული ჩინური - ზულუ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - მსოფლიო - აფრიკა - ჩრდილოეთ ამერიკა - სამხრეთი ამერიკა - ოკეანეთი - დასავლეთი აფრიკა - ცენტრალური ამერიკა - აღმოსავლეთი აფრიკა - ჩრდილოეთი აფრიკა - შუა აფრიკა - სამხრეთი აფრიკა - ამერიკები - ჩრდილოეთი ამერიკა - კარიბი - აღმოსავლეთი აზია - სამხრეთი აზია - სამხრეთ-აღმოსავლეთი აზია - სამხრეთი ევროპა - ავსტრალია და ახალი ზელანდია - მელანეზია - მირონეზია - პოლინეზია - სამხრეთ-ცენტრალური აზია - აზია - ცენტრალური აზია - დასავლეთი აზია - ევროპა - აღმოსავლეთი ევროპა - ჩრდილოეთი ევროპა - დასავლეთი ევროპა - დამოუკიდებელ სახელმწიფოთა თანამეგობრობა - ლათინური ამერიკა და კარიბი - ანდორა - არაბეთის გაერთიანებული ემირატები - ავღანეთი - ანტიგუა და ბარბუდა - ანგვილა - ალბანეთი - სომხეთი - ნიდერლანდების ანტილები - ანგოლა - ანტარქტიკა - არგენტინა - ამერიკული სამოა - ავსტრია - ავსტრალია - არუბა - ალანდის კუნძულები - აზერბაიჯანი - ბოსნია და ჰერცეგოვინა - ბარბადოსი - ბანგლადეში - ბელგია - ბურკინა-ფასო - ბულგარეთი - ბაჰრეინი - ბურუნდი - ბენინი - ბერმუდა - ბრუნეი - ბოლივია - ბრაზილია - ბაჰამის კუნძულები - ბუტანი - ბუვეს კუნძული - ბოტსვანა - ბელორუსია - ბელიზი - კანადა - კონგო - კინშასა - ცენტრალური აფრიკის რესპუბლიკა - კონგო - შვეიცარია - სპილოს ძვლის სანაპირო - კუკის კუნძულები - ჩილე - კამერუნი - ჩინეთი - კოლუმბია - კოსტა-რიკა - სერბია და მონტენეგრო - კუბა - კაბო-ვერდე - შობის კუნძული - კვიპროსი - ჩეხეთის რესპუბლიკა - გერმანია - ჯიბუტი - დანია - დომინიკა - დომინიკანის რესპუბლიკა - ალჟირი - ეკვადორი - ესტონეთი - ეგვიპტე - დასავლეთი საჰარა - ერიტრეა - ესპანეთი - ეთიოპია - ფინეთი - ფიჯი - ფალკლენდის კუნძულები - მიკრონეზია - ფაროს კუნძულები - საფრანგეთი - გაბონი - დიდი ბრიტანეთი - გრენადა - საქართველო - განა - გიბრალტარი - გრენლანდია - გამბია - გვინეა - გვადელუპე - ეკვატორული გვინეა - საბერძნეთი - სამხრეთი ჯორჯია და სამხრეთ სენდვიჩის კუნძულები - გვატემალა - გუამი - გვინეა-ბისაუ - გაიანა - ჰონგ კონგი - ჰონგ კონგი - ჰერდის კუნძული და მაკდონალდის კუნძულები - ჰონდურასი - ჰორვატია - ჰაიტი - უნგრეთი - ინდონეზია - ირლანდია - ისრაელი - მანის კუნძული - ინდოეთი - ბრიტანული ტერიტორია ინდოეთის ოკეანეში - ერაყი - ირანი - ისლანდია - იტალია - ჯერსი - იამაიკა - იორდანია - იაპონია - კენია - ყირგიზეთი - კამბოჯა - კირიბატი - კომორის კუნძულები - სენტ-კიტსი და ნევისი - ჩრდილოეთი კორეა - სამხრეთი კორეა - კუვეიტი - კაიმანის კუნძულები - ყაზახეთი - ლაოსი - ლიბანი - სენტ-ლუსია - ლიხტენშტაინი - შრი-ლანკა - ლიბერია - ლესოთო - ლიტვა - ლუქსემბურგი - ლატვია - ლიბია - მაროკო - მონაკო - მოლდოვა - მონტენეგრო - მადაგასკარი - მარშალის კუნძულები - მაკედონია - მალი - მიანმარი - მონღოლეთი - მაკაო - მაკაო - მარტინიკი - მავრიტანია - მონსერატი - მალტა - მავრიკია - მალდივის კუნძულები - მალავი - მექსიკა - მალაიზია - მოზამბიკი - ნამიბია - ახალი კალედონია - ნიგერი - ნორფოლკის კუნძული - ნიგერია - ნიკარაგუა - ნიდერლანდები - ნორვეგია - ნეპალი - ნაურუ - ახალი ზელანდია - ომანი - პანამა - პერუ - ფრანგული პოლინეზია - პაპუა-ახალი გვინეა - ფილიპინები - პაკისტანი - პოლონეთი - სენტ-პიერი და მიქელონი - პუერტო რიკო - პალესტინის ტერიტორია - პორტუგალია - პალაუ - პარაგვაი - კატარი - დაშორებული ოკეანია - ევროკავშირი - რეიუნიონი - რუმინეთი - სერბია - რუსეთი - რუანდა - საუდის არაბეთი - სოლომონის კუნძულები - სეიშელის კუნძულები - სუდანი - შვეცია - სინგაპური - წმინდა ელენეს კუნძული - სლოვენია - სლოვაკეთი - სიერა-ლეონე - სან-მარინო - სენეგალი - სომალი - სურინამი - საო-ტომე და პრინსიპი - სალვადორი - სირია - სვაზილენდი - ჩადი - ფრანგული სამხრეთის ტერიტორიები - ტოგო - ტაილანდი - ტაჯიკეთი - აღმოსავლეთი ტიმორი - თურქმენეთი - ტუნისი - ტონგა - თურქეთი - ტრინიდადი და ტობაგო - ტუვალუ - ტაივანი - ტანზანია - უკრაინა - უგანდა - შეერთებული შტატების მცირე დაშორებული კუნძულები - ამერიკის შეერთებული შტატები - ურუგვაი - უზბეკეთი - ვატიკანი - სენტ-ვინსენტი და გრენადინები - ვენესუელა - ვიეტნამი - ვანუატუ - ვალისი და ფუტუნა - სამოა - იემენი - სამხრეთ აფრიკა - ზამბია - ზიმბაბვე - უცნობი ან არასწორი რეგიონი - - - კალენდარი - მიმდევრობა - ვალუტა - - - ტრადიციული ჩინური - ბუდისტური კალენდარი - ჩინური კალენდარი - პირდაპირი მიმდევრობა - გამარტივებული ჩინური - გრიგორიანული კალენდარი - ებრაული კალენდარი - ინდური ეროვნული კალენდარი - ისლამური კალენდარი - ისლამური სამოქალაქო კალენდარი - იაპონური კალენდარი - ჩინეთის რესპუბლიკის კალენდარი - ტრადიციული - - - US - Metric - - - - [ა ⴀ ბ ⴁ გ ⴂ დ ⴃ ე ⴄ ვ ⴅ ზ ⴆ ჱ ⴡ თ ⴇ ი ⴈ კ ⴉ ლ ⴊ მ ⴋ ნ ⴌ ჲ ⴢ ო ⴍ პ ⴎ ჟ ⴏ რ ⴐ ს ⴑ ტ ⴒ ჳ ⴣ უ ⴓ ფ ⴔ ქ ⴕ ღ ⴖ ყ ⴗ შ ⴘ ჩ ⴙ ც ⴚ ძ ⴛ წ ⴜ ჭ ⴝ ხ ⴞ ჴ ⴤ ჯ ⴟ ჰ ⴠ ჵ ⴥ ჶ-ჺ] - - - “ - ” - ‘ - ’ - - - - - - - - იან - თებ - მარ - აპრ - მაი - ივნ - ივლ - აგვ - სექ - ოქტ - ნოე - დეკ - - - იანვარი - თებერვალი - მარტი - აპრილი - მაისი - ივნისი - ივლისი - აგვისტო - სექტემბერი - ოქტომბერი - ნოემბერი - დეკემბერი - - - - - ი - თ - მ - ა - მ - ი - ი - ა - ს - ო - ნ - დ - - - - - - - კვი - ორშ - სამ - ოთხ - ხუთ - პარ - შაბ - - - კვირა - ორშაბათი - სამშაბათი - ოთხშაბათი - ხუთშაბათი - პარასკევი - შაბათი - - - - - კ - ო - ს - ო - ხ - პ - შ - - - - - - - I კვ. - II კვ. - III კვ. - IV კვ. - - - 1-ლი კვარტალი - მე-2 კვარტალი - მე-3 კვარტალი - მე-4 კვარტალი - - - - - I კვარტალი - II კვარტალი - III კვარტალი - IV კვარტალი - - - - დილის - საღამოს - - - ჩვენს წელთაღრიცხვამდე - ჩვენი წელთაღრიცხვით - - - ჩვენს წელთაღრიცხვამდე - ჩვენი წელთაღრიცხვით - - - ჩვენს წელთაღრიცხვამდე - ჩვენი წელთაღრიცხვით - - - - - - EEEE, y MMMM dd - - - - - y MMMM d - - - - - y MMM d - - - - - yy/MM/dd - - - - - - - HH:mm:ss zzzz - - - - - HH:mm:ss z - - - - - HH:mm:ss - - - - - HH:mm - - - - - - HH:mm - HH:mm:ss - dd MMM - dd/MM - hh:mm a - hh:mm:ss a - MM/yy - EEE, d MMM, yy - d MMM, yy - dd/MM/yy - Q yy - QQQQ yy - - - - - ხანა - - - წელი - - - თვე - - - კვირა - - - დღე - სამი დღის წინ - გუშინწინ - გუშინ - დღეს - ხვალ - ზეგ - სამი დღის შემდეგ - - - კვირის დღე - - - დღის პერიოდი - - - საათი - - - წუთი - - - წამი - - - ზონა - - - - - - +HH:mm;-HH:mm - GMT{0} - {0} - {1} ({0}) - - უცნობი - - - ბარბუდა - - - ანგილა - - - ნიდერლანდის - - - ანგოლა - - - როთერა - - - პალმერი - - - სამხრეთი პოლუსი - - - სიოუა - - - მოუსონი - - - დევისი - - - ვოსტოკი - - - კეისი - - - დიუმონ დ'ურვილი - - - მაკმურდო - - - რიო გალეგოსი - - - მენდოზა - - - სან ხუანი - - - უშუაია - - - ლა რიოხა - - - სან ლუისი - - - კატამარკა - - - ჯუჯუი - - - ტუკუმანი - - - კორდობა - - - ბუენოს აირესი - - - პერთი - - - ეუკლა - - - დარვინი - - - ადელაიდა - - - ბროუკენ ჰილი - - - ქური - - - მელბურნი - - - ჰობარტი - - - ლინდმანი - - - სიდნეი - - - ბრისბეინი - - - ლორდ ჰოუი - - - არუბა - - - ბარბადოსი - - - ბურკინა ფასო - - - ბურუნდი - - - ბენინი - - - ბოლივია - - - ეირუნეპე - - - რიო ბრანკო - - - პორტო ველჰო - - - ბოა ვისტა - - - მანაუსი - - - კუიაბა - - - კამპო გრანდე - - - ბელემი - - - არაგუაინა - - - საო პაულო - - - ბაია - - - ფორტალეზა - - - მასეიო - - - რეციფე - - - ნორონია - - - ბაჰამის კუნძულები - - - ბოტსვანა - - - ბელიზი - - - დოუსონი - - - უაითჰორსი - - - ინუვიკი - - - ვანკუვერი - - - დოუსონ ქრიკი - - - იელოუნაიფი - - - ედმონტონი - - - სვიფტ კარენტი - - - კემბრიჯ ბეი - - - რეჯინა - - - უინიპეგი - - - რეზოლუტე - - - რეინი რივერი - - - რენკინ ინლეტი - - - ქორალ ჰარბორი - - - თანდერ ბეი - - - ნიპიგონი - - - ტორონტო - - - მონრეალი - - - იქალუიტი - - - პანგნირტუნგი - - - მონქტონი - - - ჰალიფაქსი - - - გუზ ბეი - - - გლეის ბეი - - - ბლან-საბლონი - - - სენტ ჯონსი - - - კინშასა - - - ლუბუმბაში - - - ცენტრალური აფრიკის რესპუბლიკა - - - კონგო - ბრაზავილი - - - სპილოს ძვლის სანაპირო - - - ისთერი - - - კამერუნი - - - კაშგარი - - - ურუმქი - - - ჩონგქინგი - - - ჰარბინი - - - კოლუმბია - - - კოსტა რიკა - - - კუბა - - - ჯიბუტი - - - დომინიკა - - - ალჟირი - - - გალაპაგოსი - - - ეგვიპტე - - - დასავლეთი საჰარა - - - ერითრეა - - - კანარი - - - სეუტა - - - ეთიოპია - - - ტრუკი - - - პონაპე - - - კოსრაე - - - გაბონი - - - გრენადა - - - გუიანა - - - განა - - - თულე - - - სკორსბისუნდი - - - დენმარკშავნი - - - გამბია - - - გინეა - - - გუადელუპე - - - ეკვატორული გვინეა - - - გუატემალა - - - გინეა-ბისაუ - - - გუიანა - - - ჯაკარტა - - - პონტიანაკი - - - მაკასარი - - - ჯაიაპურა - - - იამაიკა - - - კენია - - - ენდერბური - - - კირიტიმატი - - - ტარაუა - - - კაიმანის - - - აქტაუ - - - ორალი - - - აქტობე - - - ყიზილორდა - - - ალმატი - - - ლიბერია - - - ლესოთო - - - ლიბია - - - მაროკო - - - კვაჯალეინი - - - მახურო - - - მალი - - - ჰოვდი - - - ულანბატარი - - - ჩოიბალსანი - - - მარტინიკი - - - მავრიტანია - - - მონსერატი - - - მალავი - - - ტიხუანა - - - ჰერმოსიო - - - მაზატლანი - - - ჩიჰუაჰუა - - - მონტერეი - - - მექსიკო სითი - - - მერიდა - - - კანკუნი - - - კუჩინგი - - - მოზამბიკი - - - ნამიბია - - - ნიგერი - - - ნიგერია - - - ნიკარაგუა - - - ჩათამი - - - პერუ - - - მარკეზასი - - - გამბიერი - - - სენტ პიერი და მიკელონი - - - აზორეს - - - მადეირა - - - პარაგვაი - - - კალინინგრადი - - - მოსკოვი - - - ვოლგოგრადი - - - სამარა - - - ეკატერინბურგი - - - ომსკი - - - ნოვოსიბირსკი - - - კრასნოიარსკი - - - ირკუტსკი - - - იაკუტსკი - - - ვლადივოსტოკი - - - სახალინი - - - მაგადანი - - - კამჩატკა - - - ანადირი - - - რუანდა - - - სუდანი - - - სიერა ლეონე - - - სენეგალი - - - სომალია - - - საო ტომე და პრინსიპე - - - ელ სალვადორი - - - სვაზილენდი - - - ტერკის და კაიკოს - - - ჩადი - - - ტოგო - - - ტუნისი - - - ტანზანია - - - უჟგოროდი - - - კიევი - - - სიმფეროპოლი - - - ზაპოროჟიე - - - უგანდა - - - მიდუეი - - - ჯონსტონი - - - უეიკი - - - ადაკი - - - ნომი - - - ჰონოლულუ - - - ენქორაჯი - - - იაკუტატი - - - ჯუნო - - - ლოს ანჯელესი - - - ბუასი - - - ფენიქსი - - - შიპროკი - - - დენვერი - - - ნიუ სალემი, ჩრდილოეთი დაკოტა - - - ცენტრი, ჩრდილოეთი დაკოტა - - - ჩიკაგო - - - მენომინი - - - ვინსენი, ინდიანა - - - პიტერსბურგი - - - თელ სითი, ინდიანა - - - ნოქსი, ინდიანა - - - უინემაკი, ინდიანა - - - მარენგო - - - ინდიანაპოლისი - - - ლუისვილი - - - ვივეი, ინდიანა - - - მონტიჩელო - - - დეტროიტი - - - ნიუ იორკი - - - ურუგვაი - - - სამარყანდი - - - ვენესუელა - - - სამხრეთი აფრიკა - - - ზამბია - - - ზიმბაბვე - - - - - - , - . - ; - % - 0 - + - - - E - ‰ - ∞ - NaN - - - - - #,##0.### - - - - - - - #,##0% - - - - - - - ¤ #,##0.00 - - - {0} {1} - - - - ანდორული პესეტა - - - გაერთიანებული არაბული საემიროების დირჰემი - - - ავღანი (1927-2002) - - - ავღანი - - - ალბანური ლეკი - - - სომხური დრამი - - - ნიდრელანდების ანტილიის გულდენი - - - ანგოლური კვანზა - - - ანგოლური კვანზა (1977-1990) - - - ანგოლური ახალი კვანზა (1990-2000) - - - ანგოლური მიტოლებული კვანზა (1995-1999) - - - არგენტინული აუსტრალი - - - არგენტინული პესო (1983-1985) - - - არგენტინული პესო - - - ავსტრიული შილინგი - - - ავსტრალიური დოლარი - - - არუბანული გულდენი - - - აზერბაიჯანული მანათი (1993-2006) - - - აზერბაიჯანული მანათი - - - ბოსნია-ჰერცოგოვინას დინარი - - - ბოსნია-ჰერცოგოვინას კონვერტირებადი მარკა - - - ბარბადოსული დოლარი - - - ბანგლადეშური ტაკა - - - ბელგიური ფრანკი (კოვერტირებადი) - - - ბელგიური ფრანკი - - - ბელგიური ფრანკი (ფინანსური) - - - ბულგარული მყარი ლევი - - - ბულგარული ახალი ლევი - - - ბაჰრეინული დინარი - - - ბურუნდიული ფრანკი - - - ბერმუდული დინარი - - - ბრუნეული დოლარი - - - ბოლივიანო - - - ბოლივიური პესო - - - ბრაზილიური კრუზეირო ნოვო (1967-1986) - - - ბრაზილიური კრუზადო - - - ბრაზილიური კრუზეირო (1990-1993) - - - ბრაზილიური რეალი - - - ბრაზილიური კრუზადო ნოვო - - - ბრაზილიური კრუზეირო - - - ბაჰამური დოლარი - - - ბოტსვანიური პულა - - - ახალი ბელარუსიული რუბლი (1994-1999) - - - ბელარუსიული რუბლი - - - კანადური დოლარი - - - შვეიცარიული ფრანკი - - - ჩინური უანი - - - კოსტა რიკული კოლონი - - - ძველი სერბიული დინარი - - - ჩეხოსლოვაკიის მყარი კრონა - - - კუბური პესო - - - კაბო ვერდეს ესკუდო - - - კვიპროსის გირვანქა - - - ჩეხური კრონა - - - აღმოსავლეთ გერმანული მარკა - - - გერმანული მარკა - - - ჯიბუტის ფრანკი - - - დანიური კრონა - - - დომინიკური პესო - - - ალჟირიული დინარი - - - ესტონური კრუნა - - - ეგვიპტური გირვანქა - - - ესპანური პესეტა - - - ევრო - - - ფინური მარკა - - - ფიჯი დოლარი - - - ფრანგული ფრანკი - - - ინგლისური გირვანქა სტერლინგი - - - ქართული კუპონი ლარით - - - ქართული ლარი - - - ბერძნული დრაჰმა - - - პორტუგალიური გინეა ესკუდო - - - ჰონგ კონგის დოლარი - - - ჰონდურასის ლემპირა - - - ხორვატიული დინარი - - - ხორვატიული კუნა - - - უნგრული ფორინტი - - - ინდონეზიური რუპია - - - ირლანდიური გირვანქა - - - ინდური რუპია - - - ისლანდიური კრონა - - - იტალიური ლირა - - - იამაიკური დოლარი - - - იორდანიული დოლარი - - - იაპონური იენი - - - კენიური შილინგი - - - ყირღიზული სომი - - - ჩრდილოეთ კორეული ვონი - - - სამხრეთ კორეული ვონი - - - კუვეიტური დინარი - - - კაიმანის კუნძულების დოლარი - - - ყაზახური ტენგე - - - შრი ლანკის რუპია - - - ლიბერიული დოლარი - - - ლიტვური ლიტა - - - ლიტვური ტალონი - - - ლუქსემბურგის კონვერტირებადი ფრანკი - - - ლუქსემბურგის ფრანკი - - - ლუქსემბურგის ფინანსური ფრანკი - - - ლატვიური ლატი - - - ლატვიური რუბლი - - - ლიბიური დინარი - - - მაროკოს დირჰამი - - - მაროკოს ფრანკი - - - მოლდოვური ლეუ - - - მადაგასკარის არიარი - - - მადაგასკარის ფრანკი - - - მაკედონიური დენარი - - - მალის ფრანკი - - - მიანმარის კიატი - - - მონღოლური ტუგრიკი - - - მალტის ლირა - - - მალტის გირვანქა - - - მავრიტანული რუპია - - - მალდივური რუფია - - - მალავის კვანჩა - - - მექსიკური პესო - - - მექსიკური ვერცხლის პესო (1861-1992) - - - მალაიზიური რინგიტი - - - მოზამბიკური ესკუდო - - - ძველი მოზამბიკური მეტიკალი - - - მოზამბიკური მეტიკალი - - - ნამიბიური დოლარი - - - ნიგერიული ნაირა - - - ნიკარაგუას კორდობა - - - ნიკარაგუას ოქროს კორდობა - - - ჰოლანდიური გულდენი - - - ნორვეგიული კრონა - - - ნეპალური რუპია - - - ახალი ზელანდიის დოლარი - - - ომანის რეალი - - - პერუს ინტი - - - პერუს ახალი სოლი - - - პერუს სოლი - - - ფილიპინური პესო - - - პაკისტანური რუპია - - - პოლონური ზლოტი - - - პოლონური ზლოტი (1950-1995) - - - პორტუგალიური ესკუდო - - - კატარის რიალი - - - როდეზიული დოლარი - - - ძველი რუმინული ლეუ - - - რუმინული ლეუ - - - რუსული რუბლი - - - რუსული რუბლი (1991-1998) - - - რუანდული ფრანკი - - - სეიშელის რუპია - - - სუდანის დინარი - - - სუდანის გირვანქა - - - შვედური კრონა - - - სინგაპურის დოლარი - - - სიერა ლეონეს ლეონე - - - სურინამის დოლარი - - - სურინამის გულდენი - - - საბჭოთა რუბლი - - - სირიული გირვანქა - - - ტაჯიკური რუბლი - - - ტაჯიკური სომონი - - - თურქმენული მანათი - - - ტუნისიური დინარი - - - თურქული ლირა - - - ახალი თურქული ლირა - - - ტრინიდად და ტობაგოს დოლარი - - - ტაივანური ახალი დოლარი - - - ტანზანიური შილინგი - - - უკრაინული გრივნა - - - უკრაინული კარბოვანეცი - - - უგანდური შილინგი (1966-1987) - - - უგანდური შილინგი - - - აშშ დოლარი - - - აშშ დოლარი (შემდეგი დღე) - - - აშშ დოლარი (იგივე დღე) - - - ურუგვაის პესო (1975-1993) - - - ურუგვაის პესო ურუგვაიო - - - უზბეკური სუმი - - - ვენესუელის ბოლივარი - - - ვიეტნამური დონგი - - - ვანატუს ვატუ - - - დასავლეთ სამოას ტალა - - - ვერცხლი - - - ევროპული კომპპოზიტური ერთეული - - - ევროპული ფულადი ერთეული - - - აღმოსავლეთ კარიბიული დოლარი - - - ევროპული სავალუტო ერთეული - - - ფრანგული ოქროს ფრანკი - - - უცნობი ან არასწორი ვალუტა - - - იემენის დინარი - - - იემენის რეალი - - - იუგოსლავიური მყარი დინარი - - - იუგოსლავიური ახალი დინარი - - - იუგოსლავიური კონვერტირებადი დინარი - - - ზამბიური კვანჩა - - - ზაირის ახალი ზაირი - - - ზაირის ზაირი - - - ზიმბაბვეს დოლარი - - - - - - {0} დღე - - - {0} საათი - - - {0} წუთი - - - {0} თვე - - - {0} წამი - - - {0} კვირა - - - {0} წელი - - - - - დიახ - არა - - - diff --git a/tools/locale-builder/langs/nb.xml b/tools/locale-builder/langs/nb.xml deleted file mode 100644 index 77734627a0f..00000000000 --- a/tools/locale-builder/langs/nb.xml +++ /dev/null @@ -1,1893 +0,0 @@ - - - - - - - - - - - afar - abkhasisk - achinesisk - acoli - adangme - adyghe - avestisk - afrikaans - afroasiatisk (annet) - afrihili - akan - akkadisk - aleutisk - algonkinsk språk - amharisk - aragonsk - gammelengelsk (ca. 450-1100) - apache-språk - arabisk - arameisk - araukansk - arapaho - kunstig (annet) - arawak - assamisk - asturisk - athapaskansk språk - australsk språk - avarisk - awadhi - aymara - aserbajdsjansk - basjkirsk - banda - bamilekisk språk - baluchi - balinesisk - basa - baltisk (annet) - hviterussisk - beja - bemba - berbisk (annet) - bulgarsk - bihari - bhojpuri - bislama - bikol - bini - siksika - bambara - bengali - bantu - tibetansk - bretonsk - braj - bosnisk - batak (Indonesia) - buriat - buginesisk - blin - katalansk - caddo - sentralamerikansk indiansk (annet) - karibisk - kaukasisk (annet) - tsjetsjensk - cebuansk - keltisk (annet) - chamorro - chibcha - chagatai - chuukesisk - mari - chinook - choctaw - chipewiansk - cherokee - cheyenne - kamisk språk - korsikansk - koptisk - kreolsk og pidgin, engelskbasert (annet) - kreolsk og pidgin, franskbasert (annet) - kreolsk og pidgin, portugisiskbasert (annet) - cree - krimtatarisk - kreolsk og pidgin (annet) - tsjekkisk - kasjubisk - kirkeslavisk - kusjitisk (annet) - tsjuvansk - walisisk - dansk - dakota - dargwa - dayak - tysk - delaware - slavisk (athapaskansk) - dogrib - dinka - dogri - dravidisk (annet) - lavsorbisk - duala - mellomnederlandsk (ca. 1050-1350) - divehi - dyula - dzongkha - ewe - efik - egyptisk (historisk) - ekajuk - gresk - elamittisk - engelsk - mellomengelsk (1100-1500) - esperanto - spansk - estisk - baskisk - ewondo - persisk - fang - fanti - fulani - finsk - finsk-ugrisk (annet) - fijiansk - færøysk - fransk - mellomfransk (ca.1400-1600) - gammelfransk (842 til ca.1400) - friuliansk - frisisk - irsk - ga - gayo - gbaya - skotsk gælisk - germansk (annet) - ges - kiribatisk; gilbertesisk - galicisk - mellomhøytysk (ca.1050-1500) - guarani - gammelhøytysk (ca.750-1050) - gondi - gorontalo - gotisk - grebo - gammelgresk (til 1453) - gujarati - manx - gwichʼin - haida - hawaiisk - hebraisk - hindi - hiligaynon - himachali - hettittisk - hmong - hiri motu - kroatisk - høysorbisk - haitisk - ungarsk - hupa - armensk - herero - interlingua - iban - indonesisk - interlingue - ibo - sichuan-yi - unupiak - iloko - indisk (annet) - indoeuropeisk (annet) - ingusjisk - ido - iransk - irokansk språk - islandsk - italiensk - inuktitut - japansk - lojban - jødepersisk - jødearabisk - javanesisk - georgisk - karakalpakisk - kabylsk - kachin - kamba - karensk - kawi - kabardisk - kikongo - khasi - khoisan (annet) - khotanesisk - kikuyu - kuanyama - kasakhisk - kalaallisut - khmer - kimbundu - kannada - koreansk - konkani - kosraeansk - kpelle - kanuri - karachay-balkar - kru - kurukh - kasjmiri - kurdisk - kumyk - kutenai - komi - kornisk - kirgisisk - latin - ladinsk - lahnda - lamba - luxemburgsk - lezghian - ganda - limburgisk - lingala - laotisk - mongo - lozi - litauisk - luba-katanga - luba-lulua - luiseno - lunda - lushai - latvisk - maduresisk - magahi - maithili - makasar - mandingo - austronesisk - masai - moksha - mandar - mende - madagassisk - mellomirsk (900-1200) - marshallesisk - maori - micmac - minangkabau - ulike språk - makedonsk - mon-khmer (Other) - malayalam - mongolsk - mandsju - manipuri - manobo-språk - moldavisk - mohawk - mossi - marathi - malayisk - maltesisk - flere språk - munda-språk - creek - marwari - burmesisk - maya - erzya - nauru - nahuatl - nordamerikansk indiansk - napolitansk - norsk bokmål - ndebele (nord) - lavtysk; lavsaksisk - nepalsk - newari - ndonga - nias - niger - kordofaniansk (annet) - niueansk - nederlandsk - norsk nynorsk - norsk - nogai - gammelnorsk - ndebele, sør - sotho, nord - nubisk språk - navajo - nyanja - nyamwezi - nyankole - nyoro - nzima - oksitansk (etter 1500) - ojibwa - oromo - oriya - ossetisk - osage - tyrkisk, ottomansk (1500-1928) - otomisk språk - panjabi - papuisk (annet) - pangasinan - pahlavi - pampanga - papiamento - palauisk - gammelpersisk (ca. 600-400 f. kr.) - filippinsk (annet) - fønikisk - pali - polsk - ponapisk - prakrit-språk - gammelprovençalsk (til 1500) - pashto - portugisisk - quechua - rajasthani - rapanui - rarotongansk - retoromansk - rundi - rumensk - romansk (annet) - romani - russisk - kinjarwanda - sanskrit - sandawe - jakutsk - søramerikansk indiansk (annet) - salishansk språk - samaritansk arameisk - sasak - santali - sardinsk - skotsk - sindhi - nordsamisk - selkupisk - semittisk (annet) - sango - gammelirsk (til 900) - tegnspråk - serbokroatisk - shan - singalesisk - sidamo - sioux-språk - sino-tibetansk (annet) - slovakisk - slovensk - slavisk (annet) - samoansk - sørsamisk - samisk språk (annet) - lulesamisk - enaresamisk - skoltesamisk - shona - soninke - somalisk - sogdisk - songhai - albansk - serbisk - serer - swati - nilo-saharam (annet) - sotho (sørlig) - sundanesisk - sukuma - susu - sumerisk - svensk - swahili - syrisk - tamil - tai (annet) - telugu - temne - tereno - tetum - tatsjikisk - thai - tigrinja - tigré - turkmensk - tokelau - tagalog - tlingit - tamasjek - tswana - tonga (Tonga-øyene) - tonga (Nyasa) - tok pisin - tyrkisk - tsonga - tsimshian - tatarisk - tumbuka - tupi-språk - altaisk (annet) - tuvalu - twi - tahitisk - tuvinisk - udmurt - uigurisk - ugaritisk - ukrainsk - umbundu - ikke angitt - urdu - usbekisk - venda - vietnamesisk - volapyk - votisk - vallonsk - wakasjansk språk - walamo - waray - washo - sorbisk språk - wolof - kalmyk - xhosa - yapesisk - jiddisk - joruba - jupisk språk - zhuang - zapotec - zenaga - kinesisk - zande - zulu - zuni - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Andorra - De forente arabiske emiratene - Afghanistan - Antigua og Barbuda - Anguilla - Albania - Armenia - De nederlandske antiller - Angola - Antarktis - Argentina - Amerikansk Samoa - Østerrike - Australia - Aruba - Aserbajdsjan - Bosnia og Hercegovina - Barbados - Bangladesh - Belgia - Burkina Faso - Bulgaria - Bahrain - Burundi - Benin - Bermuda - Brunei Darussalam - Bolivia - Brasil - Bahamas - Bhutan - Bouvetøya - Botswana - Hviterussland - Belize - Canada - Kokosøyene (Keelingøyene) - Kongo, Den demokratiske republikken - Den sentralafrikanske republikk - Kongo - Sveits - Elfenbenskysten - Cookøyene - Chile - Kamerun - Kina - Colombia - Costa Rica - Serbia og Montenegro - Cuba - Kapp Verde - Christmasøya - Kypros - Tsjekkia - Tyskland - Djibouti - Danmark - Dominica - Den dominikanske republikk - Algerie - Ecuador - Estland - Egypt - Vest-Sahara - Eritrea - Spania - Etiopia - Finland - Fiji - Falklandsøyene (Malvinas) - Mikronesiaføderasjonen - Færøyene - Frankrike - Gabon - Storbritannia - Grenada - Georgia - Fransk Guyana - Ghana - Gibraltar - Grønland - Gambia - Guinea - Guadeloupe - Ekvatorial-Guinea - Hellas - Sør-Georgia og Sør-Sandwich-øyene - Guatemala - Guam - Guinea-Bissau - Guyana - Hong Kong S.A.R. (Kina) - Heard- og McDonaldsøyene - Honduras - Kroatia - Haiti - Ungarn - Indonesia - Irland - Israel - India - Britiske områder i det indiske hav - Irak - Iran - Island - Italia - Jamaica - Jordan - Japan - Kenya - Kirgisistan - Kambodsja - Kiribati - Komorene - St. Christopher og Nevis - Nord-Korea - Sør-Korea - Kuwait - Caymanøyene - Kasakhstan - Laos, Den folkedemokratiske republikken - Libanon - St. Lucia - Liechtenstein - Sri Lanka - Liberia - Lesotho - Litauen - Luxembourg - Latvia - Libya - Marokko - Monaco - Moldova - Madagaskar - Marshalløyene - Makedonia, Republikken - Mali - Myanmar - Mongolia - Macao S.A.R. (Kina) - Nord-Marianene - Martinique - Mauritania - Montserrat - Malta - Mauritius - Maldivene - Malawi - Mexico - Malaysia - Mosambik - Namibia - Ny-Caledonia - Niger - Norfolkøyene - Nigeria - Nicaragua - Nederland - Norge - Nepal - Nauru - Niue - New Zealand - Oman - Panama - Peru - Fransk Polynesia - Papua Ny-Guinea - Filippinene - Pakistan - Polen - St. Pierre og Miquelon - Pitcairn - Puerto Rico - Palestinsk territorium - Portugal - Palau - Paraguay - Qatar - Reunion - Romania - Den russiske føderasjon - Rwanda - Saudi Arabia - Salomonøyene - Seychellene - Sudan - Sverige - Singapore - Saint Helena - Slovenia - Svalbard og Jan Mayen - Slovakia - Sierra Leone - San Marino - Senegal - Somalia - Surinam - Sao Tome og Principe - El Salvador - Syria - Swaziland - Turks- og Caicosøyene - Tchad - Franske sørområder - Togo - Thailand - Tadsjikistan - Tokelau - Øst-Timor - Turkmenistan - Tunisia - Tonga - Tyrkia - Trinidad og Tobago - Tuvalu - Taiwan - Tanzania - Ukraina - Uganda - USAs mindre øyer - USA - Uruguay - Usbekistan - Vatikanstaten - St. Vincent og Grenadinene - Venezuela - Jomfruøyene (britisk) - Jomfruøyene (USA) - Vietnam - Vanuatu - Wallis og Futuna - Samoa - Yemen - Mayotte - Sør-Afrika - Zambia - Zimbabwe - - - Revidert - - - Kalendar - Kollasjon - Valuta - - - Buddhistisk kalender - Kinesisk kalender - Direkte rekkefølge - Gregoriansk kalender - Hebraisk kalender - Islamsk kalender - Islamsk sivil kalender - Japansk kalender - Telefonkatalogrekkefølge - Pinyin-rekkefølge - Strekrekkefølge - Tradisjonell rekkefølge - - - - [a-zæåøéóôàüǎ] - - - - - - - - jan. - jan. - feb. - feb. - mars - mars - april - april - mai - juni - juni - juli - juli - aug. - aug. - sep. - sep. - okt. - okt. - nov. - nov. - des. - des. - - - januar - februar - mars - april - mai - juni - juli - august - september - oktober - november - desember - - - - - J - F - M - A - M - J - J - A - S - O - N - D - - - - - - - sø. - sø. - ma. - ma. - ti. - ti. - on. - on. - to. - to. - fr. - fr. - lø. - lø. - - - søndag - mandag - tirsdag - onsdag - torsdag - fredag - lørdag - - - - - S - M - T - O - T - F - L - - - - - - - - a.m. - p.m. - - - f.Kr. - e.Kr. - - - - - - EEEE d. MMMM yyyy - - - - - d. MMMM yyyy - - - - - d. MMM. yyyy - - - - - dd.MM.yy - - - - - - - 'kl. 'HH.mm.ss z - - - - - HH.mm.ss z - - - - - HH.mm.ss - - - - - HH.mm - - - - - - - - Sydpolen - - - St. John's - - - Godthåb - - - - Azorene - - - Lisboa - - - - Eastern European Standard Time - Eastern European Daylight Time - - - EET - EEST - - Bucuresti - - - Moskva - - - - - - , -   - - - - - #,##0 % - - - - - - Andorranske pesetas - - - UAE dirham - - - Afghani (1927-2002) - - - Afghani - Af - - - Albanske lek - lek - - - Armenske dram - dram - - - Nederlandske antillegylden - NA f. - - - Angolanske kwanza - - - Angolanske kwanza (1977-1990) - - - Angolanske ny kwanza (1990-2000) - - - Angolan Kwanza Reajustado (1995-1999) - - - Argentinske australer - - - Argentinske pesos (1983-1985) - - - Argentinske pesos - Arg$ - - - Østerrikske shilling - - - Australske dollar - $A - - - Arubiske gylden - - - Aserbajdsjanske Manat - - - Bosnia-Hercegovina dinarer - - - Bosnia-Hercegovina mark (konvertible) - KM - - - Barbadisk dollar - BDS$ - - - Bangladeshiske taka - Tk - - - Belgiske franc (konvertible) - - - Belgiske franc - BF - - - Belgiske franc (økonomiske) - - - Bulgarske lev (hard) - lev - - - Bulgarske lev - - - Bahrainske dinarer - BD - - - Burundiske franc - Fbu - - - Bermudiske dollar - Ber$ - - - Bruneiske dollar - - - Boliviano - Bs - - - Boliviansk pesos - - - Boliviansk mvdol - - - Brasiliansk cruzeiro novo (1967-1986) - - - Brasilianske cruzado - - - Brasilianske cruzeiro (1990-1993) - - - Brasilianske realer - R$ - - - Brasilianske cruzado novo - - - Brasilianske cruzeiro - - - Bahamske dollar - - - Bhutanske ngultrum - Nu - - - Burmesiske kyat - - - Botswanske pula - - - Hviterussiske nye rubler (1994-1999) - - - Hviterussiske rubler - Rbl - - - Beliziske dollar - BZ$ - - - Kanadiske dollar - Can$ - - - Kongolesiske franc (congolais) - - - Sveitsiske franc - SwF - - - Chilenske Unidades de Fomento - - - Chilenske pesos - Ch$ - - - Kinesiske Yuan Renminbi - Y - - - Colombianske pesos - Col$ - - - Costaricanske colon - C - - - Tsjekkoslovakiske koruna (hard) - - - Kubanske pesos - - - Kappverdiske escudo - CVEsc - - - Kypriotiske pund - £C - - - Tsjekkiske koruna - - - Østtyske ostmark - - - Tyske mark - - - Djiboutiske franc - DF - - - Danske kroner - DKr - - - Dominikanske pesos - RD$ - - - Algeriske dinarer - DA - - - Ecuadorianske sucre - - - Ecuadorianske Unidad de Valor Constante (UVC) - - - Estiske kroon - - - Egyptiske pund - - - Eritreiske nakfa - - - Spanske peseta - - - Etiopiske birr - Br - - - Euro - - - Finske mark - - - Fijianske dollar - F$ - - - Falklandsøyene-pund - - - Franske franc - - - Britiske pund sterling - - - Georgiske kupon larit - - - Georgiske lari - lari - - - Ghanesiske cedi - - - Gibraltarske pund - - - Gambiske dalasi - - - Guineanske franc - GF - - - Guineanske syli - - - Ekvatorialguineanske ekwele guineana - - - Greske drakmer - - - Guatemalanske quetzal - Q - - - Portugisiske guinea escudo - - - Guinea-Bissau-pesos - - - Guyanske dollar - G$ - - - Hongkong-dollar - HK$ - - - Hoduras Lempira - L - - - Kroatiske dinarer - - - Kroatiske kuna - - - Haitiske gourde - - - Ungarske forinter - Ft - - - Indonesiske rupier - Rp - - - Irske pund - IR£ - - - Israelske pund - - - Israelske nye shekler - - - Indiske rupier - - - Irakske dinarer - ID - - - Iranske rialer - RI - - - Islandske kronar - - - Italienske lire - - - Jamaikanske dollar - J$ - - - Jordanske dinarer - JD - - - Japanske yen - - - Kenyanske shilling - K Sh - - - Kirgisiske som - som - - - Kambodsjanske riel - CR - - - Komoriske franc - CF - - - Nordkoreanske won - - - Sørkoreanske won - - - Kuwaitiske dinarer - KD - - - Caymanske dollar - - - Kasakhstanske tenge - T - - - Laotiske kip - - - Libanesiske pund - LL - - - Srilankiske rupier - SL Re - - - Liberiske dollar - - - Lesothiske loti - M - - - Litauiske lita - - - Litauiske talonas - - - Luxemburgske franc - - - Latviske lats - - - Latviske rubler - - - Libyske dinarer - LD - - - Marokkanske dirham - - - Marokkanske franc - - - Moldovske leu - - - Madagassiske ariary - - - Madagassiske franc - - - Makedonske denarer - MDen - - - Maliske franc - - - Myanmarske kyat - - - Mongolske tugrik - Tug - - - Makaoske pataca - - - Mauritanske ouguiya - UM - - - Maltesiske lira - Lm - - - Maltesiske pund - - - Mauritiske rupier - - - Maldiviske rufiyaa - - - Malawisle kwacha - MK - - - Meksikanske pesos - MEX$ - - - Meksikanske sølvpesos (1861-1992) - - - Meksikanske Unidad de Inversion (UDI) - - - Malaysiske ringgit - RM - - - Mosambikiske escudo - - - Mosambikiske metical - Mt - - - Namibiske dollar - N$ - - - Nigerianske naira - - - Nicaraguanske cordoba - - - Nicaraguanske cordoba oro - - - Nederlandske gylden - - - Norske kroner - kr - - - Nepalesiske rupier - Nrs - - - Nyzealandske dollar - $NZ - - - Omanske rialer - RO - - - Panamanske balboa - - - Peruvianske inti - - - Peruvianske sol nuevo - - - Peruvianske sol - - - Papuanske kina - - - Filippinske pesos - - - Pakistanske rupier - Pra - - - Polske zloty - Zl - - - Polske zloty (1950-1995) - - - Portugisiske escudo - - - Paraguayanske guarani - - - Qatarske riyaler - QR - - - Rumenske leu - leu - - - Russiske rubler - - - Russiske rubler (1991-1998) - - - Rwandiske franc - - - Saudiarabiske riyaler - SRl - - - Salomonske dollar - SI$ - - - Seychelliske rupier - SR - - - Sudanesiske dinarer - - - Sudanesiske pund - - - Svenske kroner - SKr - - - Singaporske dollar - S$ - - - Sankthelenske pund - - - Slovenske tolar - - - Slovakiske koruna - Sk - - - Sierraleonske leone - - - Somaliske shilling - So. Sh. - - - Surinamske gylden - Sf - - - Sao Tome og Principe-dobra - Db - - - Sovjetiske rubler - - - Salvadoranske colon - - - Syriske pund - LS - - - Swazilandske lilangeni - E - - - Thailandske baht - - - Tadsjikiske rubler - - - Tadsjikiske somoni - - - Turkmenske manat - - - Tunisiske dinarer - - - Tonganske paʻanga - T$ - - - Timoresiske escudo - - - Tyrkiske lira - TL - - - Ny tyrkisk lire - - - Trinidadiske dollar - TT$ - - - Taiwanske nye dollar - NT$ - - - Tanzanianske shilling - T Sh - - - Ukrainsle hryvnia - - - Ukrainske karbovanetz - - - Ugandiske shilling (1966-1987) - - - Ugandiske shilling - U Sh - - - Amerikanske dollar - US$ - - - Amerikanske dollar (neste dag) - - - Amerikanske dollar (samme dag) - - - Uruguayanske pesos (1975-1993) - - - Uruguayanske peso uruguayo - Ur$ - - - Usbekiske sum - - - Venezuelanske bolivar - Be - - - Vietnamesiske dong - - - Vanuatisk vatu - VT - - - Vestsamoisk tala - - - CFA Franc BEAC - - - Gull - - - European Composite Unit - - - European Monetary Unit - - - European Unit of Account (XBC) - - - European Unit of Account (XBD) - - - Østkaribiske dollar - EC$ - - - Special Drawing Rights - - - European Currency Unit - - - French Gold Franc - - - French UIC-Franc - - - CFA Franc BCEAO - - - CFP Franc - CFPF - - - Jemenittiske dinarer - - - Jemenittiske rialer - YRl - - - Jugoslaviske dinarer (hard) - - - Jugoslaviske noviy-dinarer - - - Jugoslaviske konvertible dinarer - - - Sørafrikanske rand (økonomisk) - - - Sørafrikanske rand - R - - - Zambiske kwacha - - - Zairiske nye zaire - - - Zairiske zaire - - - Zimbabwiske dollar - Z$ - - - - - Vinje, Finn-Erik, Skriveregler (1994) - - - - diff --git a/tools/locale-builder/langs/nn.xml b/tools/locale-builder/langs/nn.xml deleted file mode 100644 index 658af6e9bf7..00000000000 --- a/tools/locale-builder/langs/nn.xml +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - - - - - - Arabisk - Tysk - Engelsk - Spansk - Fransk - Italiensk - Japansk - norsk bokmål - norsk nynorsk - norsk - Portugisisk - Russisk - Kinesisk - - - - - - Verden - Afrika - Sør-Amerika - Oseania - Vest-Afrika - Sentral-Amerika - Aust-Afrika - Nord-Afrika - Sentral-Afrika - Sørlege Afrika - Amerika - Nord-Amerika - Karibiske hav - Aust-Asia - Søraust-Asia - Sør-Europa - Australia og New Zealand - Melanesia - Mikronesia - Polynesia - Sørlege Sentral-Asia - Asia - Vest-Asia - Europa - Aust-Europa - Nord-Europa - Vest-Europa - Kanaløyene - Man - Andorra - De forente arabiske emiratene - Afghanistan - Antigua og Barbuda - Anguilla - Albania - Armenia - De nederlandske antiller - Angola - Antarktis - Argentina - Amerikansk Samoa - Østerrike - Australia - Aruba - Åland - Aserbajdsjan - Bosnia og Hercegovina - Barbados - Bangladesh - Belgia - Burkina Faso - Bulgaria - Bahrain - Burundi - Benin - Bermuda - Brunei Darussalam - Bolivia - Brasil - Bahamas - Bhutan - Bouvetøya - Botswana - Hviterussland - Belize - Canada - Kokosøyene (Keelingøyene) - Kongo, Den demokratiske republikken - Den sentralafrikanske republikk - Kongo - Sveits - Elfenbenskysten - Cookøyene - Chile - Kamerun - Kina - Colombia - Costa Rica - Serbia Montenegro - Cuba - Kapp Verde - Christmasøya - Kypros - Tsjekkia - Tyskland - Djibouti - Danmark - Dominica - Den dominikanske republikk - Algerie - Ecuador - Estland - Egypt - Vest-Sahara - Eritrea - Spania - Etiopia - Finland - Fiji - Falklandsøyene (Malvinas) - Mikronesiaføderasjonen - Færøyene - Frankrike - Gabon - Storbritannia - Grenada - Georgia - Fransk Guyana - Ghana - Gibraltar - Grønland - Gambia - Guinea - Guadeloupe - Ekvatorial-Guinea - Hellas - Sør-Georgia og Sør-Sandwich-øyene - Guatemala - Guam - Guinea-Bissau - Guyana - Hong Kong S.A.R. (Kina) - Heard- og McDonaldsøyene - Honduras - Kroatia - Haiti - Ungarn - Indonesia - Irland - Israel - India - Britiske områder i det indiske hav - Irak - Iran - Island - Italia - Jamaica - Jordan - Japan - Kenya - Kirgisistan - Kambodsja - Kiribati - Komorene - St. Christopher og Nevis - Nord-Korea - Sør-Korea - Kuwait - Caymanøyene - Kasakhstan - Laos, Den folkedemokratiske republikken - Libanon - St. Lucia - Liechtenstein - Sri Lanka - Liberia - Lesotho - Litauen - Luxembourg - Latvia - Libya - Marokko - Monaco - Moldova - Madagaskar - Marshalløyene - Makedonia, Republikken - Mali - Myanmar - Mongolia - Macao S.A.R. (Kina) - Nord-Marianene - Martinique - Mauritania - Montserrat - Malta - Mauritius - Maldivene - Malawi - Mexico - Malaysia - Mosambik - Namibia - Ny-Caledonia - Niger - Norfolkøyene - Nigeria - Nicaragua - Nederland - Noreg - Nepal - Nauru - Niue - New Zealand - Oman - Panama - Peru - Fransk Polynesia - Papua Ny-Guinea - Filippinene - Pakistan - Polen - St. Pierre og Miquelon - Pitcairn - Puerto Rico - Palestinsk territorium - Portugal - Palau - Paraguay - Qatar - Ytre Oseania - Reunion - Romania - Den russiske føderasjon - Rwanda - Saudi Arabia - Salomonøyene - Seychellene - Sudan - Sverige - Singapore - Saint Helena - Slovenia - Svalbard og Jan Mayen - Slovakia - Sierra Leone - San Marino - Senegal - Somalia - Surinam - Sao Tome og Principe - El Salvador - Syria - Swaziland - Turks- og Caicosøyene - Tchad - Franske sørområder - Togo - Thailand - Tadsjikistan - Tokelau - Øst-Timor - Turkmenistan - Tunisia - Tonga - Tyrkia - Trinidad og Tobago - Tuvalu - Taiwan - Tanzania - Ukraina - Uganda - USAs mindre øyer - USA - Uruguay - Usbekistan - Vatikanstaten - St. Vincent og Grenadinene - Venezuela - Jomfruøyene (britisk) - Jomfruøyene (USA) - Vietnam - Vanuatu - Wallis og Futuna - Samoa - Yemen - Mayotte - Sør-Afrika - Zambia - Zimbabwe - - - - [a-zæåøéóôàüǎ] - - - - - - - - jan - jan. - feb - feb. - mar - mars - apr - april - mai - jun - juni - jul - juli - aug - aug. - sep - sep. - okt - okt. - nov - nov. - des - des. - - - januar - februar - mars - april - mai - juni - juli - august - september - oktober - november - desember - - - - - - - su - su. - må - må. - ty - ty. - on - on. - to - to. - fr - fr. - la - la. - - - sundag - måndag - tysdag - onsdag - torsdag - fredag - laurdag - - - - - S - M - T - O - T - F - L - - - - - - - - a.m. - p.m. - - - f.Kr. - e.Kr. - - - - - - EEEE d. MMMM yyyy - - - - - d. MMMM yyyy - - - - - d. MMM. yyyy - - - - - dd.MM.yy - - - - - - - 'kl. 'HH.mm.ss z - - - - - HH.mm.ss z - - - - - HH.mm.ss - - - - - HH.mm - - - - - - - +HH.mm;-HH.mm - - - Sørpolen - - - - Påskeøya - - - - Kanariøyene - - - - Godthåb - - - - Ulan Bator - - - - Mexico by - - - - Azorene - - - Lisboa - - - - Moskva - - - - Tasjkent - - - - - - , -   - - - - Brasilianske real - - - Kinesiske yuan renminbi - - - Britiske pund - - - Indiske rupi - - - kr - - - Norske kroner - - - Russiske rubler - - - Amerikanske dollar - - - - - Vinje, Finn-Erik, Skriveregler (1994) - - - - diff --git a/tools/locale-builder/lcids.xml b/tools/locale-builder/lcids.xml old mode 100755 new mode 100644 index eddbe6ffb48..6f22bab8681 --- a/tools/locale-builder/lcids.xml +++ b/tools/locale-builder/lcids.xml @@ -1,176 +1,355 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/locale-builder/locales/.gitattributes b/tools/locale-builder/locales/.gitattributes deleted file mode 100644 index 46581dfd06f..00000000000 --- a/tools/locale-builder/locales/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -/nb_NO.xml -crlf -/nn_NO.xml -crlf diff --git a/tools/locale-builder/locales/.gitignore b/tools/locale-builder/locales/.gitignore deleted file mode 100644 index b878e882aca..00000000000 --- a/tools/locale-builder/locales/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/*.xml diff --git a/tools/locale-builder/locales/ka_GE.xml b/tools/locale-builder/locales/ka_GE.xml deleted file mode 100644 index e2009e99209..00000000000 --- a/tools/locale-builder/locales/ka_GE.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/tools/locale-builder/locales/nb_NO.xml b/tools/locale-builder/locales/nb_NO.xml deleted file mode 100644 index 8e330abb615..00000000000 --- a/tools/locale-builder/locales/nb_NO.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - ’ - ’ - « - » - - - - - - #,##0.00 ¤ - - - - - - diff --git a/tools/locale-builder/locales/nn_NO.xml b/tools/locale-builder/locales/nn_NO.xml deleted file mode 100644 index 598d59997b2..00000000000 --- a/tools/locale-builder/locales/nn_NO.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - ’ - ’ - « - » - - - - - - #,##0.00 ¤ - - - - - - diff --git a/tools/locale-builder/supp/ChangeLog b/tools/locale-builder/supp/ChangeLog deleted file mode 100644 index 28a3ef12a77..00000000000 --- a/tools/locale-builder/supp/ChangeLog +++ /dev/null @@ -1,114 +0,0 @@ -2010-03-23 Geoff Norton - - * da_DK.xml: The short format is day. month, not - day month. Fixes #588165 - -2008-09-18 Atsushi Enomoto - - * sv_SE.xml : fix bug #426942 (sv-SE time format was old). - -2007-10-30 Atsushi Enomoto - - * es_ES.xml : couple of format string fixes for bug #335298. - -2007-05-31 Rolf Bjarne Kvinge - - * en-US.xml: Add a few date/time patterns. - -2006-06-08 Atsushi Enomoto - - * en.xml, en-US.xml : move US-only date patterns from en.xml to - en-US.xml. Fixed bug #78569. - -2005-08-17 Atsushi Enomoto - - * fr.xml : fixed long date pattern and dateTimeFormats. - * ja.xml : fixed long time pattern and dateTimeFormats. - -2005-05-25 Atsushi Enomoto - - * fr.xml : more date pattern. - -2005-05-25 Atsushi Enomoto - - * fr.xml : new file. - -2005-04-23 Atsushi Enomoto - - * ko_KR.xml : fixed time format. - Fixed bug #74701. Patch by Hye-Shik Chang. - -2005-02-17 Atsushi Enomoto - - * en.xml : fixed currency format. - -2004-10-06 Jackson Harper - - * pt.xml: We need a space after R$. Is there a better way to do - this? I should know... - * pt_BR.xml: Fix currency format. - -2004-06-08 Atsushi Enomoto - - * ja.xml : added extra datetime patterns. - * renamed ca.xml to added ca_ES.xml. - * ca_ES.xml, ko_KR.xml, pt_BR.xml : fixed percent patterns. - -2004-06-08 Atsushi Enomoto - - * en.xml : added "all datetime" pattern strings. - * ca.xml, da.xml, el.xml, fi.xml, fr_FR.xml, he.xml, hu.xml, - nl_NL.xml : fixed percent patterns. - -2004-06-05 Atsushi Enomoto - - * en_US.xml : fixed percent pattern. - * en_ZA.xml : fixed NumberDecimalDigits. - * id_ID.xml : fixed CurrencyDecimalDigits. - * ja_JP.xml : added currencySymbol (MS assigns 0x5c). - -2004-06-05 Atsushi Enomoto - - * fr_CH.xml : missing updates. - * Renamed cs.xml as cs_CZ.xml and added number format. - Also renamed lt.xml as lt_LT.xml. They are files' precedence matter. - * es_NI.xml : added. - * en.xml, en_CA.xml, en_IE.xml, en_PH.xml, en_US.xml, en_ZW.xml : - Change with related to the change of NumberDecimalDigits handling. - * es_PR.xml, ja.xml, ko_KR.xml : - Added number format. - -2004-05-27 Atsushi Enomoto - - * en_PH.xml, en_ZW.xml, fr_CA.xml, fr_CH.xml, fr_FR.xml, fr_LU.xml : - fixed incorrect markup. - -2004-05-26 Atsushi Enomoto - - * Added ChangeLog also here (and moved the last msg from ..). - - * af_ZA.xml, ar_SA.xml, be_BY.xml, de_AT.xml, en_AU.xml, en_GB.xml, - en_NZ.xml, es_AR.xml, es_BO.xml, es_CL.xml, es_CO.xml, es_CR.xml, - es_DO.xml, es_EC.xml, es_ES.xml, es_GT.xml, es_HN.xml, es_MX.xml, - es_PA.xml, es_PE.xml, es_PR.xml, es_PY.xml, es_SV.xml, es_UY.xml, - es_VE.xml, eu_ES.xml, - fo_FO.xml, fr_BE.xml, fr_CA.xml, fr_FR.xml, fr_CH.xml, fr_FR.xml, - fr_LU.xml, hi_IN.xml, id_ID.xml, it_CH.xml, it_IT.xml, ko_KR.xml, - nl_BE.xml, nl_NL.xml, pt_BR.xml, pt_PT.xml, sv_FI.xml, sv_SE.xml, - sw_KE.xml, bg.xml, ca.xml, cs.xml, da.xml, de.xml, el.xml, es.xml, - et.xml, fa.xml, fi.xml, he.xml, hr.xml, hu.xml, hy.xml, is.xml, - lt.xml, lv.xml, mk.xml, ro.xml, ru.xml, sk.xml, sl.xml, sq.xml, - tr.xml, uk.xml, vi.xml : - Added shortdate/longtime/am/pm etc. for DateTime.ToString(). - * ar_AE.xml, ar_BH.xml, ar_DZ.xml, ar_EG.xml, ar_JO.xml, ar_KW.xml, - ar_LB.xml, ar_LY.xml, ar_MA.xml, ar_OM.xml, ar_QA.xml, ar_SY.xml, - ar_TN.xml, ar_YE.xml, en_CA.xml, en_IE.xml, en_PH.xml, en_ZA.xml, - en_ZW.xml : - Added shortdate/longtime. - * th.xml : ditto. - * ja.xml : I incorrectly modified long time format. Reverting. - -2004-05-26 Atsushi Enomoto - - * pl.xml, - ja.xml : Added overriding formats. pl.xml fixes bug #58186. diff --git a/tools/locale-builder/supp/af_ZA.xml b/tools/locale-builder/supp/af_ZA.xml deleted file mode 100755 index 1d1b18aacb4..00000000000 --- a/tools/locale-builder/supp/af_ZA.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - yyyy/MM/dd - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/ar.xml b/tools/locale-builder/supp/ar.xml deleted file mode 100644 index 3f0e3f0b8e7..00000000000 --- a/tools/locale-builder/supp/ar.xml +++ /dev/null @@ -1,19 +0,0 @@ - - -%icu; -] -> - - - - - - - - - - - - diff --git a/tools/locale-builder/supp/ar_AE.xml b/tools/locale-builder/supp/ar_AE.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_AE.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_BH.xml b/tools/locale-builder/supp/ar_BH.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_BH.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_DZ.xml b/tools/locale-builder/supp/ar_DZ.xml deleted file mode 100644 index bbb9e19bda9..00000000000 --- a/tools/locale-builder/supp/ar_DZ.xml +++ /dev/null @@ -1,36 +0,0 @@ - - -%icu; -] -> - - - - - - - - - - - - - dd-MM-yyyy - - - - - - - H:mm:ss - - - - - - - - - - diff --git a/tools/locale-builder/supp/ar_EG.xml b/tools/locale-builder/supp/ar_EG.xml deleted file mode 100644 index 2a0f8bbe9c6..00000000000 --- a/tools/locale-builder/supp/ar_EG.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_IQ.xml b/tools/locale-builder/supp/ar_IQ.xml deleted file mode 100644 index e348fc6c7a9..00000000000 --- a/tools/locale-builder/supp/ar_IQ.xml +++ /dev/null @@ -1,20 +0,0 @@ - - -%icu; -] -> - - - - - - - - - - - - - diff --git a/tools/locale-builder/supp/ar_JO.xml b/tools/locale-builder/supp/ar_JO.xml deleted file mode 100644 index 952f8414928..00000000000 --- a/tools/locale-builder/supp/ar_JO.xml +++ /dev/null @@ -1,32 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - - diff --git a/tools/locale-builder/supp/ar_KW.xml b/tools/locale-builder/supp/ar_KW.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_KW.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_LB.xml b/tools/locale-builder/supp/ar_LB.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_LB.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_LY.xml b/tools/locale-builder/supp/ar_LY.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_LY.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_MA.xml b/tools/locale-builder/supp/ar_MA.xml deleted file mode 100644 index 04045449852..00000000000 --- a/tools/locale-builder/supp/ar_MA.xml +++ /dev/null @@ -1,34 +0,0 @@ - - -%icu; -] -> - - - - - - - - - - - - - dd-MM-yyyy - - - - - - - H:mm:ss - - - - - - - - diff --git a/tools/locale-builder/supp/ar_OM.xml b/tools/locale-builder/supp/ar_OM.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_OM.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_QA.xml b/tools/locale-builder/supp/ar_QA.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_QA.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_SA.xml b/tools/locale-builder/supp/ar_SA.xml deleted file mode 100755 index 76a8d61c512..00000000000 --- a/tools/locale-builder/supp/ar_SA.xml +++ /dev/null @@ -1,15 +0,0 @@ - - -%icu; -] -> - - - - - - - - diff --git a/tools/locale-builder/supp/ar_SY.xml b/tools/locale-builder/supp/ar_SY.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_SY.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/ar_TN.xml b/tools/locale-builder/supp/ar_TN.xml deleted file mode 100644 index bbb9e19bda9..00000000000 --- a/tools/locale-builder/supp/ar_TN.xml +++ /dev/null @@ -1,36 +0,0 @@ - - -%icu; -] -> - - - - - - - - - - - - - dd-MM-yyyy - - - - - - - H:mm:ss - - - - - - - - - - diff --git a/tools/locale-builder/supp/ar_YE.xml b/tools/locale-builder/supp/ar_YE.xml deleted file mode 100644 index 8c6d6846ca8..00000000000 --- a/tools/locale-builder/supp/ar_YE.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - - diff --git a/tools/locale-builder/supp/be_BY.xml b/tools/locale-builder/supp/be_BY.xml deleted file mode 100755 index c90790437e4..00000000000 --- a/tools/locale-builder/supp/be_BY.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/bg.xml b/tools/locale-builder/supp/bg.xml deleted file mode 100755 index 86ae563d808..00000000000 --- a/tools/locale-builder/supp/bg.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - . - - - - - - - - dd.M.yyyy 'г.' - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/ca_ES.xml b/tools/locale-builder/supp/ca_ES.xml deleted file mode 100755 index ba2db28c017..00000000000 --- a/tools/locale-builder/supp/ca_ES.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - #,##0 % - - - - - - - - - - - dd/MM/yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/cs_CZ.xml b/tools/locale-builder/supp/cs_CZ.xml deleted file mode 100755 index 275da59bf75..00000000000 --- a/tools/locale-builder/supp/cs_CZ.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - #,##0.###;-#,##0.### - - - - - - - . - - - - - - - d.M.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/da.xml b/tools/locale-builder/supp/da.xml deleted file mode 100755 index f79e32808f5..00000000000 --- a/tools/locale-builder/supp/da.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - #,##0 % - - - - - - - - - - - - - - - dd-MM-yyyy - - - - - dd. MMMM - - - - - - - HH:mm:ss - - - - - - - diff --git a/tools/locale-builder/supp/de.xml b/tools/locale-builder/supp/de.xml deleted file mode 100755 index 4a7f33827a1..00000000000 --- a/tools/locale-builder/supp/de.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/de_AT.xml b/tools/locale-builder/supp/de_AT.xml deleted file mode 100755 index 4a7f33827a1..00000000000 --- a/tools/locale-builder/supp/de_AT.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/el.xml b/tools/locale-builder/supp/el.xml deleted file mode 100755 index 83247170921..00000000000 --- a/tools/locale-builder/supp/el.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - #,##0 % - - - - - - - - - - - d/M/yyyy - - - - - - - h:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en.xml b/tools/locale-builder/supp/en.xml deleted file mode 100644 index a29945ad6bc..00000000000 --- a/tools/locale-builder/supp/en.xml +++ /dev/null @@ -1,89 +0,0 @@ - - -%icu; -] -> - - - - - - #,##0.###;-#,##0.### - - - - - - - #E0 - - - - - - - #,###.##0% - - - - - - - ¤#,##0.00;-¤#,##0.00 - - - - - - - - - - - - dddd, MMMM dd, yyyy - - - dddd, MMMM dd, yyyy - MMMM dd, yyyy - dddd, dd MMMM, yyyy - dd, MMMM, yyyy - - - - - - - - h:mm:ss tt - - - h:mm:ss tt - hh:mm:ss tt - H:mm:ss - HH:mm:ss - - - - - h:mm:ss a - - - - - h:mm tt - - - h:mm tt - hh:mm tt - H:mm - HH:mm - - - - - - - diff --git a/tools/locale-builder/supp/en_AU.xml b/tools/locale-builder/supp/en_AU.xml deleted file mode 100755 index e4fa640494f..00000000000 --- a/tools/locale-builder/supp/en_AU.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - d/MM/yyyy - - - - - - - h:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_CA.xml b/tools/locale-builder/supp/en_CA.xml deleted file mode 100644 index ee3149ae466..00000000000 --- a/tools/locale-builder/supp/en_CA.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - #,##0.###;-#,##0.### - - - - - - - - - - - dd/MM/yyyy - - - - - - - h:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_GB.xml b/tools/locale-builder/supp/en_GB.xml deleted file mode 100755 index 3f097c8e61b..00000000000 --- a/tools/locale-builder/supp/en_GB.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_IE.xml b/tools/locale-builder/supp/en_IE.xml deleted file mode 100644 index 2b6f3751bc4..00000000000 --- a/tools/locale-builder/supp/en_IE.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - HH:mm:ss - - - - - - - - - - - #,##0.###;-#,##0.### - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_NZ.xml b/tools/locale-builder/supp/en_NZ.xml deleted file mode 100755 index b36c1b43d4d..00000000000 --- a/tools/locale-builder/supp/en_NZ.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - a.m. - p.m. - - - - d/MM/yyyy - - - - - - - h:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_PH.xml b/tools/locale-builder/supp/en_PH.xml deleted file mode 100644 index 99096d93701..00000000000 --- a/tools/locale-builder/supp/en_PH.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - AM - PM - - - - - MM d, yyyy - - - - - M/d/yyyy - - - - - - - h:mm:ss tt - - - - - - - - - - - #,##0.###;-#,##0.### - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_TT.xml b/tools/locale-builder/supp/en_TT.xml deleted file mode 100644 index e7711ee81ba..00000000000 --- a/tools/locale-builder/supp/en_TT.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - AM - PM - - - - dd/MM/yyyy - - - yyyy-MM-dd - - - - - dddd, dd MMMM yyyy - - - - - - - hh:mm:ss tt - - - HH:mm:ss - - - - - - - - - - - #,##0.###;-#,##0.### - - - - - diff --git a/tools/locale-builder/supp/en_US.xml b/tools/locale-builder/supp/en_US.xml deleted file mode 100644 index b6169a3f52c..00000000000 --- a/tools/locale-builder/supp/en_US.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - #,##0.###;-#,##0.### - - - - - - - #,##0 % - - - - - - - - - - - M/d/yyyy - - - M/d/yyyy - M/d/yy - M/d/yy - MM/dd/yy - MM/dd/yyyy - yy/MM/dd - yyyy-MM-dd - dd-MMM-yy - - - - - dddd, MMMM dd, yyyy - - - - - MMMM, yyyy - - - - - - - h:mm:ss tt - - - - - - - {1} {0} - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_ZA.xml b/tools/locale-builder/supp/en_ZA.xml deleted file mode 100644 index 8d3234e11fc..00000000000 --- a/tools/locale-builder/supp/en_ZA.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - yyyy/MM/dd - - - - - - - hh:mm:ss tt - - - - - - - - - - - #,##0.###;-#,##0.### - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/en_ZW.xml b/tools/locale-builder/supp/en_ZW.xml deleted file mode 100644 index 496808e0313..00000000000 --- a/tools/locale-builder/supp/en_ZW.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - AM - PM - - - - M/d/yyyy - - - - - - - h:mm:ss tt - - - - - - - - - - - #,##0.###;-#,##0.### - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es.xml b/tools/locale-builder/supp/es.xml deleted file mode 100755 index 973908fbe72..00000000000 --- a/tools/locale-builder/supp/es.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - a.m. - p.m. - - - - MM/dd/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_AR.xml b/tools/locale-builder/supp/es_AR.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_AR.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_BO.xml b/tools/locale-builder/supp/es_BO.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_BO.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_CL.xml b/tools/locale-builder/supp/es_CL.xml deleted file mode 100755 index 555b1ba7b12..00000000000 --- a/tools/locale-builder/supp/es_CL.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - dd-MM-yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_CO.xml b/tools/locale-builder/supp/es_CO.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_CO.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_CR.xml b/tools/locale-builder/supp/es_CR.xml deleted file mode 100755 index eccff247ae1..00000000000 --- a/tools/locale-builder/supp/es_CR.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_DO.xml b/tools/locale-builder/supp/es_DO.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_DO.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_EC.xml b/tools/locale-builder/supp/es_EC.xml deleted file mode 100755 index 8b62186686e..00000000000 --- a/tools/locale-builder/supp/es_EC.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_ES.xml b/tools/locale-builder/supp/es_ES.xml deleted file mode 100755 index 6ca89a7e437..00000000000 --- a/tools/locale-builder/supp/es_ES.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - dddd, dd' de 'MMMM' de 'yyyy - - - - - dddd, dd' de 'MMMM' de 'yyyy - - - - - MMMM' de 'yyyy - - - - - dd MMMM - - - - - - - H:mm:ss - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_GT.xml b/tools/locale-builder/supp/es_GT.xml deleted file mode 100755 index eccff247ae1..00000000000 --- a/tools/locale-builder/supp/es_GT.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_HN.xml b/tools/locale-builder/supp/es_HN.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_HN.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_MX.xml b/tools/locale-builder/supp/es_MX.xml deleted file mode 100755 index eccff247ae1..00000000000 --- a/tools/locale-builder/supp/es_MX.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_NI.xml b/tools/locale-builder/supp/es_NI.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_NI.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_PA.xml b/tools/locale-builder/supp/es_PA.xml deleted file mode 100755 index 5308262c274..00000000000 --- a/tools/locale-builder/supp/es_PA.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - MM/dd/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_PE.xml b/tools/locale-builder/supp/es_PE.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_PE.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_PR.xml b/tools/locale-builder/supp/es_PR.xml deleted file mode 100755 index a7fb435604c..00000000000 --- a/tools/locale-builder/supp/es_PR.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - #,##0.###;-#,##0.### - - - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_PY.xml b/tools/locale-builder/supp/es_PY.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_PY.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_SV.xml b/tools/locale-builder/supp/es_SV.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_SV.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_UY.xml b/tools/locale-builder/supp/es_UY.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_UY.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/es_VE.xml b/tools/locale-builder/supp/es_VE.xml deleted file mode 100755 index 49a89c2f9bb..00000000000 --- a/tools/locale-builder/supp/es_VE.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/et.xml b/tools/locale-builder/supp/et.xml deleted file mode 100755 index 1d8ef50bcdb..00000000000 --- a/tools/locale-builder/supp/et.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - d.MM.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/eu_ES.xml b/tools/locale-builder/supp/eu_ES.xml deleted file mode 100755 index 5a3dada9618..00000000000 --- a/tools/locale-builder/supp/eu_ES.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - yyyy/MM/dd - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fa.xml b/tools/locale-builder/supp/fa.xml deleted file mode 100755 index 8a232e66aa6..00000000000 --- a/tools/locale-builder/supp/fa.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - M/d/yyyy - - - - - - - hh:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fi.xml b/tools/locale-builder/supp/fi.xml deleted file mode 100755 index 6d4f681410d..00000000000 --- a/tools/locale-builder/supp/fi.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - #,##0 % - - - - - - - . - - - - - - - d.M.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fo_FO.xml b/tools/locale-builder/supp/fo_FO.xml deleted file mode 100755 index 88fddca25bf..00000000000 --- a/tools/locale-builder/supp/fo_FO.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - dd-MM-yyyy - - - - - - - HH.mm.ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fr.xml b/tools/locale-builder/supp/fr.xml deleted file mode 100644 index 6dc13a604bb..00000000000 --- a/tools/locale-builder/supp/fr.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - dddd d MMMM yyyy - - - - - d/MM/yyyy - d/MM/yy - - - - - - - HH:mm:ss - - - - - - - {1} {0} - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fr_BE.xml b/tools/locale-builder/supp/fr_BE.xml deleted file mode 100755 index 91cc07b9010..00000000000 --- a/tools/locale-builder/supp/fr_BE.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - d/MM/yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fr_CA.xml b/tools/locale-builder/supp/fr_CA.xml deleted file mode 100755 index f8a3cc8f037..00000000000 --- a/tools/locale-builder/supp/fr_CA.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - yyyy-MM-dd - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fr_CH.xml b/tools/locale-builder/supp/fr_CH.xml deleted file mode 100755 index f2de8b0ba25..00000000000 --- a/tools/locale-builder/supp/fr_CH.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fr_FR.xml b/tools/locale-builder/supp/fr_FR.xml deleted file mode 100755 index ff3cd20b2a5..00000000000 --- a/tools/locale-builder/supp/fr_FR.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - #,##0 % - - - - - - - - - - - dd/MM/yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/fr_LU.xml b/tools/locale-builder/supp/fr_LU.xml deleted file mode 100755 index 88a4f57f0ce..00000000000 --- a/tools/locale-builder/supp/fr_LU.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/he.xml b/tools/locale-builder/supp/he.xml deleted file mode 100755 index c95fbfd9646..00000000000 --- a/tools/locale-builder/supp/he.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - %#,##0 - - - - - - - - - - - dd/MM/yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/hi_IN.xml b/tools/locale-builder/supp/hi_IN.xml deleted file mode 100755 index e13d46033ed..00000000000 --- a/tools/locale-builder/supp/hi_IN.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - dd-MM-yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/hr.xml b/tools/locale-builder/supp/hr.xml deleted file mode 100755 index 66e399619ea..00000000000 --- a/tools/locale-builder/supp/hr.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - d.M.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/hu.xml b/tools/locale-builder/supp/hu.xml deleted file mode 100755 index ba3b66a7b5d..00000000000 --- a/tools/locale-builder/supp/hu.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - #,##0 % - - - - - - - . - - - - - - - yyyy. MM. dd. - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/hy.xml b/tools/locale-builder/supp/hy.xml deleted file mode 100755 index c90790437e4..00000000000 --- a/tools/locale-builder/supp/hy.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/id_ID.xml b/tools/locale-builder/supp/id_ID.xml deleted file mode 100755 index 03a91e091c9..00000000000 --- a/tools/locale-builder/supp/id_ID.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - #,##0;-#,##0 - - - - - - - - - - - - dd MMM yyyy - - - - - dd/MM/yyyy - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/is.xml b/tools/locale-builder/supp/is.xml deleted file mode 100755 index 23f637e3bac..00000000000 --- a/tools/locale-builder/supp/is.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - d.M.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/it_CH.xml b/tools/locale-builder/supp/it_CH.xml deleted file mode 100755 index 4a7f33827a1..00000000000 --- a/tools/locale-builder/supp/it_CH.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/it_IT.xml b/tools/locale-builder/supp/it_IT.xml deleted file mode 100755 index 4dc3b55bfd2..00000000000 --- a/tools/locale-builder/supp/it_IT.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - H.mm.ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/ja.xml b/tools/locale-builder/supp/ja.xml deleted file mode 100755 index 893830b485f..00000000000 --- a/tools/locale-builder/supp/ja.xml +++ /dev/null @@ -1,81 +0,0 @@ - - -%icu; -] -> - - - - - \ - - - - - - #,##0;-#,##0 - - - - - - - - - - - yyyy/MM/dd - - - yyyy/MM/dd - yy/MM/dd - yy/M/d - yyyy/M/d - yy/MM/dd' ('ddd')' - yy/M/d' ('ddd')' - yyyy/M/d' ('ddd')' - - - - - - yyyy'年'M'月'd'日' - yyyy'年'MM'月'dd'日' - yyyy'年'M'月'd'日' dddd - yyyy'年'MM'月'dd'日' dddd - - - - - - - H:mm:ss - - - HH:mm:ss - tt h:mm:ss - tt hh:mm:ss - - - - - H:mm - HH:mm - tt h:mm - tt hh:mm - - - - - - - {1} {0} - - - - - - - diff --git a/tools/locale-builder/supp/ka_GE.xml b/tools/locale-builder/supp/ka_GE.xml deleted file mode 100644 index 185bafd4f79..00000000000 --- a/tools/locale-builder/supp/ka_GE.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - yyyy 'წლის' dd MM, dddd - - - - - - - H:mm - - - - - H:mm:ss - - - - - - - diff --git a/tools/locale-builder/supp/ko_KR.xml b/tools/locale-builder/supp/ko_KR.xml deleted file mode 100755 index 6c511c2932c..00000000000 --- a/tools/locale-builder/supp/ko_KR.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - #,##0;-#,##0 - - - - - - - #,##0 % - - - - - - - - - - - yyyy/MM/dd - - - yyyy/MM/dd - yy/MM/dd - yy/M/d - yyyy/M/d - yyyy. MM. dd - yy. MM. dd - - - - - - yyyy'년' M'월' d'일' - - - yyyy'년' M'월' d'일' - yyyy'년' MM'월' dd'일' - yy'년' M'월' d'일' - yy'년' MM'월' dd'일' - - - - - - - tt h'시' mm'분' ss'초' - - - tt h'시' mm'분' ss'초' - H'시' m'분' ss'초' - HH'시' mm'분' ss'초' - H:mm:ss - HH:mm:ss - tt h'시' m'분' ss'초' - tt hh'시' mm'분' ss'초' - tt h:mm:ss - tt hh:mm:ss - - - - - tt h:mm - - - H:mm - HH:mm - H'시' m'분' - H'시' mm'분' - HH'시' mm'분' - tt h:mm - tt hh:mm - tt h'시' m'분' - tt h'시' mm'분' - tt hh'시' mm'분' - - - - - - - diff --git a/tools/locale-builder/supp/lt_LT.xml b/tools/locale-builder/supp/lt_LT.xml deleted file mode 100755 index fe44ebfa1d6..00000000000 --- a/tools/locale-builder/supp/lt_LT.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - #,##0.###;-#,##0.### - - - - - - - . - - - - - - - yyyy.MM.dd - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/lv.xml b/tools/locale-builder/supp/lv.xml deleted file mode 100755 index 48fd017943b..00000000000 --- a/tools/locale-builder/supp/lv.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - yyyy.MM.dd. - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/mk.xml b/tools/locale-builder/supp/mk.xml deleted file mode 100755 index 4a7f33827a1..00000000000 --- a/tools/locale-builder/supp/mk.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/nl_BE.xml b/tools/locale-builder/supp/nl_BE.xml deleted file mode 100755 index aba4a9924cc..00000000000 --- a/tools/locale-builder/supp/nl_BE.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - d/MM/yyyy - - - - - - - H:mm:ss - - - - - - - - - - - ¤ #,##0.00;¤ -#,##0.00 - - - - - diff --git a/tools/locale-builder/supp/nl_NL.xml b/tools/locale-builder/supp/nl_NL.xml deleted file mode 100755 index 66bb6613041..00000000000 --- a/tools/locale-builder/supp/nl_NL.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - #,##0 % - - - - - - - - - - - - - - - d-M-yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/pl.xml b/tools/locale-builder/supp/pl.xml deleted file mode 100755 index 65e79641ee3..00000000000 --- a/tools/locale-builder/supp/pl.xml +++ /dev/null @@ -1,37 +0,0 @@ - - -%icu; -] -> - - - - - - - - - - - - - - - - - yyyy-MM-dd - - - - - - - HH:mm:ss - - - - - - - diff --git a/tools/locale-builder/supp/pt.xml b/tools/locale-builder/supp/pt.xml deleted file mode 100755 index c424d37d4fa..00000000000 --- a/tools/locale-builder/supp/pt.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Real Brasileiro - R$ - - - - - diff --git a/tools/locale-builder/supp/pt_BR.xml b/tools/locale-builder/supp/pt_BR.xml deleted file mode 100755 index f06421234f3..00000000000 --- a/tools/locale-builder/supp/pt_BR.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - #,##0.00;(#,##0.00) - - - - - - - - - - - d/M/yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/pt_PT.xml b/tools/locale-builder/supp/pt_PT.xml deleted file mode 100755 index 7f111e743cc..00000000000 --- a/tools/locale-builder/supp/pt_PT.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - dd-MM-yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/ro.xml b/tools/locale-builder/supp/ro.xml deleted file mode 100755 index 4a7f33827a1..00000000000 --- a/tools/locale-builder/supp/ro.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/root.xml b/tools/locale-builder/supp/root.xml deleted file mode 100644 index 664e75f3af2..00000000000 --- a/tools/locale-builder/supp/root.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - / - : - - - - - NaN - Infinity - - - - diff --git a/tools/locale-builder/supp/ru.xml b/tools/locale-builder/supp/ru.xml deleted file mode 100755 index c90790437e4..00000000000 --- a/tools/locale-builder/supp/ru.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/sk.xml b/tools/locale-builder/supp/sk.xml deleted file mode 100755 index 6709138d6a2..00000000000 --- a/tools/locale-builder/supp/sk.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - d. M. yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/sl.xml b/tools/locale-builder/supp/sl.xml deleted file mode 100755 index 66e399619ea..00000000000 --- a/tools/locale-builder/supp/sl.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - d.M.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/sq.xml b/tools/locale-builder/supp/sq.xml deleted file mode 100755 index f1cdca828bb..00000000000 --- a/tools/locale-builder/supp/sq.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - yyyy-MM-dd - - - - - - - h:mm:ss.tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/sv_FI.xml b/tools/locale-builder/supp/sv_FI.xml deleted file mode 100755 index 23f637e3bac..00000000000 --- a/tools/locale-builder/supp/sv_FI.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - d.M.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/sv_SE.xml b/tools/locale-builder/supp/sv_SE.xml deleted file mode 100755 index 9db987ec35f..00000000000 --- a/tools/locale-builder/supp/sv_SE.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - yyyy-MM-dd - - - - - - - HH:mm:ss - - - - - HH:mm:ss - - - - - HH:mm - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/sw_KE.xml b/tools/locale-builder/supp/sw_KE.xml deleted file mode 100755 index f1937e16c75..00000000000 --- a/tools/locale-builder/supp/sw_KE.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - M/d/yyyy - - - - - - - h.mm.ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/th.xml b/tools/locale-builder/supp/th.xml deleted file mode 100644 index c8a5cf99099..00000000000 --- a/tools/locale-builder/supp/th.xml +++ /dev/null @@ -1,31 +0,0 @@ - - -%icu; -] -> - - - - - - - - - d/M/yyyy - - - - - - - H:mm:ss - - - - - - - - diff --git a/tools/locale-builder/supp/tr.xml b/tools/locale-builder/supp/tr.xml deleted file mode 100755 index 4a7f33827a1..00000000000 --- a/tools/locale-builder/supp/tr.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - HH:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/uk.xml b/tools/locale-builder/supp/uk.xml deleted file mode 100755 index c90790437e4..00000000000 --- a/tools/locale-builder/supp/uk.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - . - - - - - - - dd.MM.yyyy - - - - - - - H:mm:ss - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supp/vi.xml b/tools/locale-builder/supp/vi.xml deleted file mode 100755 index 5f96b53b009..00000000000 --- a/tools/locale-builder/supp/vi.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - dd/MM/yyyy - - - - - - - h:mm:ss tt - - - - - - - \ No newline at end of file diff --git a/tools/locale-builder/supplementalData.xml b/tools/locale-builder/supplementalData.xml deleted file mode 100644 index ca4620776b8..00000000000 --- a/tools/locale-builder/supplementalData.xml +++ /dev/null @@ -1,968 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/locale-builder/textinfo.xml b/tools/locale-builder/textinfo.xml deleted file mode 100644 index e4333bb0773..00000000000 --- a/tools/locale-builder/textinfo.xml +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file