public static int LoadTranslations(string lang)
{
XmlDocument doc = new XmlDocument();
Dictionary<string, string> TranslatedStrings = new Dictionary<string, string>();
string langPath = "";
try
{
langPath = Path.Combine(_path, lang + ".xml");
doc.Load(langPath);
}
catch (Exception e)
{
if (lang == "en")
return 0; // otherwise we are in an endless loop!
if (e.GetType() == typeof(FileNotFoundException))
Log.Info(string.Format("Avalon Translation: Cannot find translation file {0}. Failing back to English", langPath));
else
{
Log.Info(string.Format("Avalon Translation: Error in translation xml file: {0}. Failing back to English", lang));
Log.Info("Avalon Translation:" + e.ToString());
}
return LoadTranslations("en");
}
foreach (XmlNode stringEntry in doc.DocumentElement.ChildNodes)
{
if (stringEntry.NodeType == XmlNodeType.Element)
try
{
if (stringEntry.Attributes.GetNamedItem("Field").Value.StartsWith("#"))
{
FixedTranslations.Add(stringEntry.Attributes.GetNamedItem("Field").Value, stringEntry.InnerText);
}
else
TranslatedStrings.Add(stringEntry.Attributes.GetNamedItem("Field").Value, stringEntry.InnerText);
}
catch (Exception ex)
{
Log.Error("Avalon Translation: Error in Translation Engine");
Log.Error("Avalon Translation:" + ex.ToString());
}
}
Type TransType = typeof(Translation);
var fieldInfos = TransType.GetFields(BindingFlags.Public | BindingFlags.Static)
.Where(p => p.FieldType == typeof(string));
foreach (var fi in fieldInfos)
{
if (TranslatedStrings != null && TranslatedStrings.ContainsKey(fi.Name))
TransType.InvokeMember(fi.Name, BindingFlags.SetField, null, TransType, new object[] { TranslatedStrings[fi.Name] });
else
{
// There is no hard-coded translation so create one
Log.Info(string.Format("Avalon Translation: Translation not found for field: {0}. Using hard-coded English default.", fi.Name));
}
}
return TranslatedStrings.Count;
}