annotate Lang/TranslationXmlExtractor.cs @ 78:da339d10c5fe

Re #32: Add staged loading of translations * Add "XML Translation Set" that lazy loads translations from XML * Extract some methods out to an XML extractor * Fix header in abstract translation set * Extract method in Translation class to add a translation set (allows combined file loading and in-code creation)
author IBBoard <dev@ibboard.co.uk>
date Fri, 09 Apr 2010 19:35:18 +0000
parents
children a70d89de1435
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
78
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 // This file (TranslationXmlExtractor.cs) is a part of the IBBoard project and is copyright 2010 IBBoard
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 //
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU LGPL, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 using System;
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 using System.Collections.Generic;
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 using System.Xml;
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 namespace IBBoard.Lang
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 {
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 public class TranslationXmlExtractor
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 {
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 public Dictionary<string, string> ExtractTranslationsFromDocument(XmlDocument doc)
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 {
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 try
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 {
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 XmlNodeList translationNodes = doc.GetElementsByTagName("translation");
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 Dictionary<string, string> translationStrings = new Dictionary<string, string>();
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 foreach (XmlNode node in translationNodes)
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 {
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22 string id = node.Attributes["id"].Value;
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 string text = node.InnerText;
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 translationStrings.Add(id, text);
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 }
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 return translationStrings;
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 }
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 catch(Exception ex)
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30 {
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 throw new TranslationLoadException("Error while parsing " + GetLanguageOfDocument(doc)+" translation: "+ex.Message, ex);
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 }
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 }
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 public string GetLanguageOfDocument(XmlDocument doc)
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 {
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
37 return doc != null ? doc.DocumentElement.GetAttribute("lang") : "";
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
38 }
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
39 }
da339d10c5fe Re #32: Add staged loading of translations
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
40 }