Sage.ResourceManagement.Internationalizer.Internationalize C# (CSharp) Method

Internationalize() public method

Internationalizes the specified resource.
/// One of the locales configured for the category being processed doesn't have any dictionary files. ///
public Internationalize ( XmlResource resource ) : InternationalizationSummary
resource XmlResource The resource.
return InternationalizationSummary
        public InternationalizationSummary Internationalize(XmlResource resource)
        {
            if (resource == null)
                throw new ArgumentNullException("resource");

            if (!Directory.Exists(resource.TargetDirectory))
            {
                Directory.CreateDirectory(resource.TargetDirectory);
                File.SetAttributes(resource.TargetDirectory, FileAttributes.Hidden);
            }

            DictionaryFileCollection coll = Internationalizer.GetTranslationDictionaryCollection(context);
            CategoryInfo categoryInfo = context.ProjectConfiguration.Categories[context.Category];
            InternationalizationSummary summary = new InternationalizationSummary(resource, categoryInfo);

            Stopwatch sw = new Stopwatch();
            sw.Start();

            foreach (string locale in coll.Locales)
            {
                if (coll.Dictionaries[locale].Document == null)
                    throw new InternationalizationError(string.Format(
                        "The locale '{0}' in category '{1}' doesn't have any dictionary files", locale, coll.Category));

                CacheableXmlDocument input;
                try
                {
                    input = resource.LoadLocalizedSourceDocument(locale);
                }
                catch (FileNotFoundException ex)
                {
                    log.ErrorFormat("Could not internationalize resource '{0}' to locale '{1}': {2}", resource.Name.Signature, locale, ex.Message);
                    continue;
                }

                XmlWriterSettings settings = new XmlWriterSettings { Indent = true };

                string outputPath = resource.GetInternationalizedName(locale, true);
                XmlWriter translateWriter = XmlWriter.Create(outputPath, settings);

                StringBuilder builder = new StringBuilder();
                XmlWriter diagnoseWriter = XmlWriter.Create(builder, settings);

                try
                {
                    this.Transform(input, coll, locale, translateWriter, InternationalizeType.Translate);
                    this.Transform(input, coll, locale, diagnoseWriter, InternationalizeType.Diagnose);
                }
                finally
                {
                    translateWriter.Close();
                    diagnoseWriter.Close();
                }

                XmlDocument diagnostics = new XmlDocument();
                diagnostics.LoadXml(builder.ToString());

                summary.AddPhraseSummary(locale, diagnostics);
                summary.AddDependencies(locale, input.Dependencies);
            }

            sw.Stop();

            summary.Duration = sw.ElapsedMilliseconds;

            log.InfoFormat("Internationalized xml resource '{0}' into {1} locales in {2}ms",
                resource.Name.Signature, coll.Locales.Count, sw.ElapsedMilliseconds);

            return summary;
        }

Usage Example

コード例 #1
0
ファイル: XmlResource.cs プロジェクト: igorfrance/sage
        /// <summary>
        /// Globalizes this instance.
        /// </summary>
        /// <returns>
        /// An object that contains information about the globalization of this resource.
        /// </returns>
        public InternationalizationSummary Globalize()
        {
            Internationalizer globalizer = new Internationalizer(context);
            InternationalizationSummary summary = globalizer.Internationalize(this);
            summary.Save();

            return summary;
        }