Browse Source

Make StringResourceTool update all .resx files in data/resources (independent of LanguageDefinition.xml).

Include resource description in English StringResources.resx.
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
0375d738a1
  1. 32
      src/Tools/StringResourceTool/BuildResourceFiles.cs
  2. 10
      src/Tools/StringResourceTool/ResourceDatabase.cs

32
src/Tools/StringResourceTool/BuildResourceFiles.cs

@ -21,23 +21,33 @@ namespace StringResourceTool
{ {
// map of languages with different name in the database // map of languages with different name in the database
static readonly Dictionary<string, string> codeMap = new Dictionary<string, string> { static readonly Dictionary<string, string> codeMap = new Dictionary<string, string> {
{ "pt-br", "br" } { "br", "pt-br" }
}; };
public static void Build(ResourceDatabase db, string resourceDir, Action<string> debugOutput) public static void Build(ResourceDatabase db, string resourceDir, Action<string> debugOutput)
{ {
XDocument languageDefinition = XDocument.Load(Path.Combine(resourceDir, "languages/LanguageDefinition.xml")); XDocument languageDefinition = XDocument.Load(Path.Combine(resourceDir, "languages/LanguageDefinition.xml"));
var languageCodes = languageDefinition.Root.Elements().Select(e => e.Attribute("code").Value); var languageCodes = languageDefinition.Root.Elements().Select(e => e.Attribute("code").Value);
foreach (string code in languageCodes) {
string databaseCode = codeMap.ContainsKey(code) ? codeMap[code] : code; foreach (LanguageTable language in db.Languages) {
LanguageTable language = db.Languages.Find(t => t.LanguageName == databaseCode); string databaseCode = language.LanguageName;
if (language == null) { string code = codeMap.ContainsKey(databaseCode) ? codeMap[databaseCode] : databaseCode;
debugOutput("Could not find language " + code);
} else { string filename;
if (code == "en") if (code == "en")
language.SaveAsResx(Path.Combine(resourceDir, "StringResources.resx")); filename = Path.Combine(resourceDir, "StringResources.resx");
else else
language.SaveAsResx(Path.Combine(resourceDir, "StringResources." + code + ".resx")); filename = Path.Combine(resourceDir, "StringResources." + code + ".resx");
if (File.Exists(filename)) {
language.SaveAsResx(filename, code == "en");
} else if (language.Entries.Count > 0.5 * db.Languages[0].Entries.Count) {
debugOutput("Language " + code + " is more than 50% complete but not present in resourceDir");
}
if (language.Entries.Count > 0.75 * db.Languages[0].Entries.Count && !languageCodes.Contains(code)) {
debugOutput("Language " + code + " is more than 75% complete but not defined in LanguageDefinition.xml");
} else if (language.Entries.Count < 0.75 * db.Languages[0].Entries.Count && languageCodes.Contains(code)) {
debugOutput("Language " + code + " is less than 75% complete but defined in LanguageDefinition.xml");
} }
} }
} }

10
src/Tools/StringResourceTool/ResourceDatabase.cs

@ -11,6 +11,7 @@ using System.Collections.Generic;
using System.Data.OleDb; using System.Data.OleDb;
using System.Linq; using System.Linq;
using System.Resources; using System.Resources;
using System.Xml.Linq;
namespace StringResourceTool namespace StringResourceTool
{ {
@ -69,12 +70,17 @@ namespace StringResourceTool
this.LanguageName = languageName; this.LanguageName = languageName;
} }
public void SaveAsResx(string filename) public void SaveAsResx(string filename, bool includeDescriptions)
{ {
using (ResXResourceWriter writer = new ResXResourceWriter(filename)) { using (ResXResourceWriter writer = new ResXResourceWriter(filename)) {
foreach (ResourceEntry entry in Entries.Values.OrderBy(e => e.Key, StringComparer.OrdinalIgnoreCase)) { foreach (ResourceEntry entry in Entries.Values.OrderBy(e => e.Key, StringComparer.OrdinalIgnoreCase)) {
string normalizedValue = entry.Value.Replace("\r", "").Replace("\n", Environment.NewLine); string normalizedValue = entry.Value.Replace("\r", "").Replace("\n", Environment.NewLine);
writer.AddResource(entry.Key, normalizedValue); if (includeDescriptions) {
string normalizedDescription = entry.Description.Replace("\r", "").Replace("\n", Environment.NewLine);
writer.AddResource(new ResXDataNode(entry.Key, normalizedValue) { Comment = normalizedDescription });
} else {
writer.AddResource(entry.Key, normalizedValue);
}
} }
} }
} }

Loading…
Cancel
Save