Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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;
            }
        }