private Hashtable currency_types;
private Hashtable regions;
+ private XPathDocument lcids_doc;
+
// The lang is the language that display names will be displayed in
public string Lang {
get {
public void Run ()
{
+ lcids_doc = GetXPathDocument ("lcids.xml");
+
Regex locales_regex = null;
if (Locales != null)
locales_regex = new Regex (Locales);
private XPathDocument GetXPathDocument (string path)
{
- XmlTextReader xtr = new XmlTextReader (path);
- xtr.XmlResolver = null;
- return new XPathDocument (xtr);
+ XmlTextReader xtr = null;
+ try {
+ xtr = new XmlTextReader (path);
+ xtr.XmlResolver = null;
+ return new XPathDocument (xtr);
+ } finally {
+ if (xtr != null)
+ xtr.Close ();
+ }
}
private string GetShortName (string lang)
if (ci == null)
return;
- if (langs [ci.Language] == null) {
- if (!ParseLang (ci.Language)) // If we can't parse the lang we cant have the locale
+ if (langs [GetLanguageFixed (ci)] == null) {
+ if (!ParseLang (GetLanguageFixed (ci))) // If we can't parse the lang we cant have the locale
return;
}
private CultureInfoEntry LookupCulture (string locale)
{
- XPathDocument doc = GetXPathDocument (Path.Combine ("locales", locale + ".xml"));
+ string path = Path.Combine ("locales", locale + ".xml");
+ if (!File.Exists (path))
+ return null;
+ XPathDocument doc = GetXPathDocument (path);
XPathNavigator nav = doc.CreateNavigator ();
CultureInfoEntry ci = new CultureInfoEntry ();
string supp;
nav = doc.CreateNavigator ();
Lookup (nav, ci);
- doc = GetXPathDocument (Path.Combine ("langs", GetShortName (ci.Language) + ".xml"));
+ doc = GetXPathDocument (Path.Combine ("langs", GetShortName (GetLanguageFixed (ci)) + ".xml"));
nav = doc.CreateNavigator ();
Lookup (nav, ci);
- supp = Path.Combine ("supp", ci.Language + ".xml");
+ supp = Path.Combine ("supp", GetLanguageFixed (ci) + ".xml");
if (File.Exists (supp)) {
doc = GetXPathDocument (supp);
nav = doc.CreateNavigator ();
LookupNumberInfo (nav, ci);
}
+ 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";
+ }
+ }
+ return ci.Language;
+ }
+
private void LookupNames (CultureInfoEntry ci)
{
XPathDocument doc = GetXPathDocument (Path.Combine ("langs", GetShortName (Lang) + ".xml"));
if (ci.Language == Lang) {
ci.NativeName = ci.DisplayName;
} else {
- doc = GetXPathDocument (Path.Combine ("langs", GetShortName (ci.Language) + ".xml"));
+ // 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);
}
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 ());
}
- AddPattern (df.LongDatePatterns, df.LongDatePattern);
+ else
+ AddPattern (df.LongDatePatterns, df.LongDatePattern);
break;
case "short":
if (value != null)
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 ());
}
- AddPattern (df.ShortDatePatterns, df.ShortDatePattern);
+ else
+ AddPattern (df.ShortDatePatterns, df.ShortDatePattern);
break;
case "year_month":
if (value != null)
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 ());
}
- AddPattern (df.LongTimePatterns, df.LongTimePattern);
+ else
+ AddPattern (df.LongTimePatterns, df.LongTimePattern);
break;
case "short":
if (value != null)
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 ());
}
- AddPattern (df.ShortTimePatterns, df.ShortTimePattern);
+ else
+ AddPattern (df.ShortTimePatterns, df.ShortTimePattern);
break;
}
}
private bool LookupLcids (CultureInfoEntry ci, bool lang)
{
- XPathDocument doc = GetXPathDocument ("lcids.xml");
- XPathNavigator nav = doc.CreateNavigator ();
+ 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 = ci.Language;
+ string langName = GetLanguageFixed (ci);
// if (ci.Territory != null)
// name += "-" + ci.Territory;
if (ci.Territory != null) {
file = Path.Combine ("locales", ci.Language + "_" + ci.Territory + ".xml");
- File.Delete (file);
Console.WriteLine ("deleting file: " + file);
+ File.Delete (file);
}
return false;
string pre = "ldml/localeDisplayNames/";
string ret;
+ // 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) + "'])");