using System; using System.IO; using System.Reflection; using System.Collections; using System.Resources; namespace FauxLocalizationResourceGenerator { /// /// Summary description for Class1. /// class Class1 { /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { string folder; string locale; if (args.Length < 1) { Console.WriteLine("Usage: FauxLocalizationResourceGenerator folder [locale]"); return; } folder = args[0]; if (args.Length > 1) { locale = args[1]; } else { locale = "fo-fo"; } if (RecursivelyCallRewrite(folder, locale)) Console.WriteLine("Success"); else Console.WriteLine("Failure"); } private static bool RecursivelyCallRewrite(string folder, string locale) { if (!Directory.Exists(folder)) { Console.WriteLine("Directory " + folder + " does not exist"); return false; } string[] dirs = Directory.GetDirectories(folder); string[] files = Directory.GetFiles(folder, "*.resx"); foreach (string dir in dirs) { RecursivelyCallRewrite(dir, locale); } foreach (string file in files) { OutputAltResx(file, locale); } return true; } private static bool OutputAltResx(string file, string locale) { Console.WriteLine("Processing: " + file); ResXResourceReader resxReader = new ResXResourceReader(file); FileInfo currentResxFile = new FileInfo(file); string newResxFileName = String.Format("{0}.{1}{2}", currentResxFile.FullName.Substring(0, currentResxFile.FullName.Length - 5), locale, currentResxFile.Extension); ResXResourceWriter resxWriter = new ResXResourceWriter(newResxFileName); foreach (DictionaryEntry resource in resxReader) { if ("Sidebar.WidthInPixels".Equals(resource.Key)) { resxWriter.AddResource(resource.Key.ToString(), "225"); continue; } if (resource.Value.GetType() == typeof(string)) resxWriter.AddResource(resource.Key.ToString(), MungeResource(resource.Value as string, StaticKeyValue(resource.Key.ToString()))); else resxWriter.AddResource(resource.Key.ToString(), resource.Value); } resxWriter.Generate(); resxWriter.Close(); return true; } private static bool StaticKeyValue(string valToCheck) { if (valToCheck.EndsWith(".ContextMenuPath")) return true; if (valToCheck.EndsWith(".MainMenuPath")) return true; if (valToCheck.StartsWith("Font.Size.")) return true; if (valToCheck.StartsWith("Command.") && valToCheck.EndsWith(".Shortcut")) return true; if (valToCheck == "Font") return true; if (valToCheck == "Sidebar.WidthInPixels") return true; return false; } private static string MungeResource(string origResource, bool excludeAppend) { int appendLength = (int)Math.Ceiling(origResource.Length * 0.4); char[] append = new char[appendLength]; for( int i = 0; i < appendLength; i++) append[i] = FILLER; string replaceString = origResource; /* replaceString = replaceString.Replace('a', 'Ā'); replaceString = replaceString.Replace('b', 'ß'); replaceString = replaceString.Replace('c', 'ç'); replaceString = replaceString.Replace('d', 'ď'); replaceString = replaceString.Replace('g', 'ġ'); replaceString = replaceString.Replace('h', 'ħ'); replaceString = replaceString.Replace('i', 'į'); replaceString = replaceString.Replace('j', 'ĵ'); replaceString = replaceString.Replace('k', 'ĸ'); replaceString = replaceString.Replace('l', 'Ļ'); replaceString = replaceString.Replace('n', 'Ñ'); replaceString = replaceString.Replace('o', 'Ő'); replaceString = replaceString.Replace('r', 'Ŕ'); replaceString = replaceString.Replace('s', 'Ś'); replaceString = replaceString.Replace('t', 'Ŧ'); replaceString = replaceString.Replace('u', 'Ü'); replaceString = replaceString.Replace('w', 'ώ'); replaceString = replaceString.Replace('x', '×'); replaceString = replaceString.Replace('z', 'Ż');2 */ if (excludeAppend) return replaceString; else return START + replaceString + new string(append) + END; } private const char FILLER = 'é'; private const string START = "'も雅"; //"\u00A1"; //"*'àも雅"; private const string END = "\""; //"!"; // "\"*"; } }