public byte[] CreateRibbon(Target element) { CleanupFiles.Clear(); try { VerifyTemplateBat(); // use the following format to specify localization info {Resource:key} string localizedRibbonXmlFilename = LocalizeRibbon(element); // create the ribbon dll string ribbonDll = ConvertXmlToDll(localizedRibbonXmlFilename); // return the content of the ribbon dll var result = File.ReadAllBytes(ribbonDll); Util.LogMessage("Manager.CreateRibbon returns {0} bytes for file '{1}'", result.Length, ribbonDll); return result; } catch (Exception ex) { Util.LogError(ex); throw ex; } finally { Cleanup(); } }
public void SetCulture(string cultureName) { _currentTarget = null; _fallBackTarget = null; if (!string.IsNullOrEmpty(cultureName)) { var culture = new CultureInfo(cultureName); _currentTarget = _targets.FirstOrDefault(t => t.CultureName == cultureName); var parentCulture = culture.Parent; if (parentCulture != null && !string.IsNullOrEmpty(parentCulture.Name)) { var parentCultureName = parentCulture.Name; _fallBackTarget = _targets.FirstOrDefault(t => t.CultureName == parentCultureName); } } _defaultTarget = _targets.FirstOrDefault(t => string.IsNullOrEmpty(t.CultureName)); }
string LocalizeRibbon(Target element) { if (!element.Localize) return this.RibbonXmlFilename; var localizedContent = this.RibbonXmlContent; StringBuilder sb = new StringBuilder(); this.ResXReader.SetCulture(element.CultureName); int pos = 0; const string LOCALIZEBEGINTOKEN = "{Resource:"; const string LOCALIZEENDTOKEN = "}"; while (true) { int nextTokenBegin = localizedContent.IndexOf(LOCALIZEBEGINTOKEN, pos); if (nextTokenBegin < 0) break; int nextTokenEnd = localizedContent.IndexOf(LOCALIZEENDTOKEN, nextTokenBegin); if (nextTokenEnd < 0) break; int tokenLength = nextTokenEnd - nextTokenBegin + 1; string token = localizedContent.Substring(nextTokenBegin, tokenLength); //if (token.Contains("Home_")) // System.Diagnostics.Debugger.Break(); int resourceKeyBegin = nextTokenBegin + LOCALIZEBEGINTOKEN.Length; int resourceKeyLength = nextTokenEnd - resourceKeyBegin; string resourceKey = localizedContent.Substring(resourceKeyBegin, resourceKeyLength); string localizedString = this.ResXReader.GetString(resourceKey); localizedContent = localizedContent.Replace(token, localizedString); pos++; } string cultureName = !string.IsNullOrEmpty(element.CultureName) ? element.CultureName : "default"; string localizedFilename = Path.ChangeExtension(this.RibbonXmlFilename, string.Format(".{0}.xml", cultureName)); File.WriteAllText(localizedFilename, localizedContent); this.CleanupFiles.Add(localizedFilename); return localizedFilename; }
void Initialize() { try { string path = Path.GetDirectoryName(RibbonXmlFilename); string filenameWithoutExtension = Path.GetFileNameWithoutExtension(RibbonXmlFilename); string fullFilenameWithoutExtension = Path.Combine(path, filenameWithoutExtension); string resourceFullFilename = AddFileExtension(fullFilenameWithoutExtension, RESXEXTENSION); List<Target> targets = new List<Target>(); var localize = File.Exists(resourceFullFilename); // create the default target = .ribbon file var target = new Target() { Localize = localize, ResourceFilename = localize ? resourceFullFilename : null, RibbonFilename = AddFileExtension(fullFilenameWithoutExtension, GetRibbonExtension(null)) }; targets.Add(target); // search for localized ResX files string searchPattern = string.Format("{0}.*{1}", Path.GetFileName(fullFilenameWithoutExtension), RESXEXTENSION); var localizedFiles = Directory.GetFiles(path, searchPattern); foreach (var file in localizedFiles) { // create localized targets = for example: .de.ribbon file string cultureName = GetCultureName(file); target = new Target() { Localize = true, CultureName = cultureName, RibbonFilename = AddFileExtension(fullFilenameWithoutExtension, GetRibbonExtension(cultureName)), ResourceFilename = file }; targets.Add(target); } _targets = targets; // if there are ResX files for the ribbons create a ResXReader if (target.Localize) _resXReader = new ResXReader(targets); Util.LogMessage("Manager.Initialize returns {0} targets and localize set to {1}", targets.Count, _resXReader != null); } catch (Exception ex) { Util.LogError(ex); throw ex; } }