Exemple #1
0
        /// <summary>
        /// Write the localizable key-value pairs
        /// </summary>
        /// <param name="options"></param>
        internal static void Write(LocBamlOptions options)
        {
            InputBamlStreamList bamlStreamList = new InputBamlStreamList(options);

            using (ITranslationWriter writer = options.GetTranslationWriter())
            {
                options.WriteLine(StringLoader.Get("WriteBamlValues"));
                for (int i = 0; i < bamlStreamList.Count; i++)
                {
                    options.Write("    ");
                    options.Write(StringLoader.Get("ProcessingBaml", bamlStreamList[i].Name));

                    // Search for comment file in the same directory. The comment file has the extension to be
                    // "loc".
                    string     commentFile   = Path.ChangeExtension(bamlStreamList[i].Name, "loc");
                    TextReader commentStream = null;

                    try
                    {
                        if (File.Exists(commentFile))
                        {
                            commentStream = new StreamReader(commentFile);
                        }

                        // create the baml localizer
                        BamlLocalizer mgr = new BamlLocalizer(
                            bamlStreamList[i].Stream,
                            new BamlLocalizabilityByReflection(options.Assemblies),
                            commentStream
                            );

                        // extract localizable resource from the baml stream
                        BamlLocalizationDictionary dict = mgr.ExtractResources();

                        // write out each resource
                        foreach (DictionaryEntry entry in dict)
                        {
                            BamlLocalizableResourceKey key      = (BamlLocalizableResourceKey)entry.Key;
                            BamlLocalizableResource    resource = (BamlLocalizableResource)entry.Value;

                            writer.WriteResource(bamlStreamList[i].Name, LocBamlConst.ResourceKeyToString(key), resource);
                        }

                        options.WriteLine(StringLoader.Get("Done"));
                    }
                    finally
                    {
                        if (commentStream != null)
                        {
                            commentStream.Close();
                        }
                    }
                }

                // close all the baml input streams, output stream is closed by writer.
                bamlStreamList.Close();
            }
        }
Exemple #2
0
        private void GenerateBamlStream(Stream input, Stream output, Dictionaries curDictionaries)
        {
            string     commentFile   = Path.ChangeExtension(options.Input, "loc");
            TextReader commentStream = null;

            try
            {
                if (File.Exists(commentFile))
                {
                    commentStream = new StreamReader(commentFile);
                }

                // create a localizabilty resolver based on reflection
                var localizabilityReflector =
                    new BamlLocalizabilityByReflection(options.Assemblies);

                // create baml localizer
                var mgr = new BamlLocalizer(
                    input,
                    localizabilityReflector,
                    commentStream
                    );

                // get the resources
                var source       = mgr.ExtractResources();
                var translations = new BamlLocalizationDictionary();

                foreach (DictionaryEntry entry in source)
                {
                    var key = (BamlLocalizableResourceKey)entry.Key;
                    var translatedResource = curDictionaries.FindCorrespondence(key);
                    if (translatedResource != null)
                    {
                        string translatedContent = translatedResource.Content;

                        if (!String.IsNullOrEmpty(translatedContent))
                        {
                            var curResource = (BamlLocalizableResource)entry.Value;
                            if (curResource.Content != translatedContent)
                            {
                                translations.Add(key, translatedResource);
                            }
                        }
                    }
                }

                // update baml
                mgr.UpdateBaml(output, translations);
            }
            finally
            {
                if (commentStream != null)
                {
                    commentStream.Close();
                }
            }
        }
Exemple #3
0
        internal static List <BamlString> ExtractBamlStrings(Assembly assembly)
        {
            InputBamlStreamList bamlStreamList = new InputBamlStreamList(assembly);

            List <BamlString> resultingList = new List <BamlString>();

            for (int i = 0; i < bamlStreamList.Count; i++)
            {
                // Search for comment file in the same directory. The comment file has the extension to be
                // "loc".
//                string commentFile = Path.ChangeExtension(bamlStreamList[i].Name, "loc");
                TextReader commentStream = null;

                try
                {
                    //if (File.Exists(commentFile))
                    //{
                    //    commentStream = new StreamReader(commentFile);
                    //}

                    // create the baml localizer
                    BamlLocalizer mgr = new BamlLocalizer(
                        bamlStreamList[i].Stream,
                        new BamlLocalizabilityByReflection(new Assembly[] { assembly }),
                        commentStream
                        );

                    // extract localizable resource from the baml stream
                    BamlLocalizationDictionary dict = mgr.ExtractResources();

                    // write out each resource
                    foreach (DictionaryEntry entry in dict)
                    {
                        BamlLocalizableResourceKey key      = (BamlLocalizableResourceKey)entry.Key;
                        BamlLocalizableResource    resource = (BamlLocalizableResource)entry.Value;

                        resultingList.Add(new BamlString(bamlStreamList[i].Name, LocBamlConst.ResourceKeyToString(key), resource));
                    }
                }
                finally
                {
                    if (commentStream != null)
                    {
                        commentStream.Close();
                    }
                }
            }

            // close all the baml input streams, output stream is closed by writer.
            bamlStreamList.Close();

            // options.WriteLine(StringLoader.Get("Done"));


            return(resultingList);
        }
Exemple #4
0
 internal InternalBamlLocalizabilityResolver(
     BamlLocalizer localizer,
     BamlLocalizabilityResolver externalResolver,
     TextReader comments
     )
 {
     _localizer        = localizer;
     _externalResolver = externalResolver;
     _commentingText   = comments;
 }
        private static string GenerateBamlStream(Stream input, Stream output, BamlLocalizationDictionary dictionary, LocBamlOptions options)
        {
            string     commentFile   = Path.ChangeExtension(options.Input, "loc");
            TextReader commentStream = null;

            try
            {
                if (File.Exists(commentFile))
                {
                    commentStream = new StreamReader(commentFile);
                }

                // create a localizabilty resolver based on reflection
                BamlLocalizabilityByReflection localizabilityReflector =
                    new BamlLocalizabilityByReflection(options.Assemblies);

                // create baml localizer
                BamlLocalizer mgr = new BamlLocalizer(
                    input,
                    localizabilityReflector,
                    commentStream
                    );

                // get the resources
                BamlLocalizationDictionary source       = mgr.ExtractResources();
                BamlLocalizationDictionary translations = new BamlLocalizationDictionary();

                foreach (DictionaryEntry entry in dictionary)
                {
                    BamlLocalizableResourceKey key = (BamlLocalizableResourceKey)entry.Key;
                    // filter out unchanged items
                    if (!source.Contains(key) ||
                        entry.Value == null ||
                        source[key].Content != ((BamlLocalizableResource)entry.Value).Content)
                    {
                        translations.Add(key, (BamlLocalizableResource)entry.Value);
                    }
                }

                // update baml
                mgr.UpdateBaml(output, translations);
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
            finally
            {
                if (commentStream != null)
                {
                    commentStream.Close();
                }
            }
            return(null);
        }
    public static void Main(string[] args)
    {
        if (args.Length != 1)
        {
            Console.WriteLine("this.exe [resource.dll]");
            return;
        }

        Assembly assembly = Assembly.LoadFrom(args[0]);

        foreach (string resourceName in assembly.GetManifestResourceNames())
        {
            Stream resourceStream = assembly.GetManifestResourceStream(resourceName);
            using (ResourceReader reader = new ResourceReader(resourceStream))
            {
                foreach (DictionaryEntry entry in reader)
                {
                    string name = entry.Key as string;

                    if (Path.GetExtension(name).ToUpperInvariant() == ".BAML")
                    {
                        Console.WriteLine("Processing baml {0}", name);

                        // <Snippet1>

                        // Obtain the BAML stream.
                        Stream source = entry.Value as Stream;

                        // Create a BamlLocalizer on the stream.
                        BamlLocalizer localizer = new BamlLocalizer(source);
                        BamlLocalizationDictionary resources = localizer.ExtractResources();

                        // Write out all the localizable resources in the BAML.
                        foreach (DictionaryEntry resourceEntry in resources)
                        {
                            BamlLocalizableResourceKey key   = resourceEntry.Key as BamlLocalizableResourceKey;
                            BamlLocalizableResource    value = resourceEntry.Value as BamlLocalizableResource;
                            Console.WriteLine(
                                "    {0}.{1}.{2} = {3}",
                                key.Uid,
                                key.ClassName,
                                key.PropertyName,
                                value.Content
                                );
                        }
                        // </Snippet1>

                        Console.WriteLine("Done");
                    }
                }
            }
        }
    }
Exemple #7
0
        //----------------------------------
        // internal Constructor
        //----------------------------------

        /// <summary>
        /// BamlTreeMap.
        /// </summary>
        internal BamlTreeMap(
            BamlLocalizer localizer,
            BamlTree tree,
            BamlLocalizabilityResolver resolver,
            TextReader comments
            )
        {
            Debug.Assert(tree != null, "Baml Tree is empty");
            Debug.Assert(localizer != null, "BamlLocalizer is null");

            _tree = tree;

            // creates an internal resolver which willd delegate calls to client's resolver intelligently.
            _resolver = new InternalBamlLocalizabilityResolver(localizer, resolver, comments);

            // create a LocalizableResourceBuilder to build localizable resources
            _localizableResourceBuilder = new LocalizableResourceBuilder(_resolver);
        }
        //----------------------------------
        // private method
        //----------------------------------

        /// <summary>
        /// Serialize the tree out to the stream.
        /// </summary>
        private void SerializeImp(
            BamlLocalizer localizer,
            BamlTree tree,
            Stream output
            )
        {
            Debug.Assert(output != null, "The output stream given is null");
            Debug.Assert(tree != null && tree.Root != null, "The tree to be serialized is null.");

            _writer        = new BamlWriter(output);
            _bamlTreeStack = new Stack <BamlTreeNode>();

            // intialize the stack.
            _bamlTreeStack.Push(tree.Root);

            while (_bamlTreeStack.Count > 0)
            {
                BamlTreeNode currentNode = _bamlTreeStack.Pop();
                if (!currentNode.Visited)
                {
                    // Mark this node so that it won't be serialized again.
                    currentNode.Visited = true;
                    currentNode.Serialize(_writer);
                    PushChildrenToStack(currentNode.Children);
                }
                else
                {
                    BamlStartElementNode elementNode = currentNode as BamlStartElementNode;
                    Debug.Assert(elementNode != null);

                    if (elementNode != null)
                    {
                        localizer.RaiseErrorNotifyEvent(
                            new BamlLocalizerErrorNotifyEventArgs(
                                BamlTreeMap.GetKey(elementNode),
                                BamlLocalizerError.DuplicateElement
                                )
                            );
                    }
                }
            }

            // do not close stream as we don't own it.
        }
Exemple #9
0
 // Token: 0x06006E19 RID: 28185 RVA: 0x001FB070 File Offset: 0x001F9270
 private void SerializeImp(BamlLocalizer localizer, BamlTree tree, Stream output)
 {
     this._writer        = new BamlWriter(output);
     this._bamlTreeStack = new Stack <BamlTreeNode>();
     this._bamlTreeStack.Push(tree.Root);
     while (this._bamlTreeStack.Count > 0)
     {
         BamlTreeNode bamlTreeNode = this._bamlTreeStack.Pop();
         if (!bamlTreeNode.Visited)
         {
             bamlTreeNode.Visited = true;
             bamlTreeNode.Serialize(this._writer);
             this.PushChildrenToStack(bamlTreeNode.Children);
         }
         else
         {
             BamlStartElementNode bamlStartElementNode = bamlTreeNode as BamlStartElementNode;
             if (bamlStartElementNode != null)
             {
                 localizer.RaiseErrorNotifyEvent(new BamlLocalizerErrorNotifyEventArgs(BamlTreeMap.GetKey(bamlStartElementNode), BamlLocalizerError.DuplicateElement));
             }
         }
     }
 }
        /// <summary>
        /// Write the localizable key-value pairs
        /// </summary>
        /// <param name="options"></param>
        internal static void Write(LocBamlOptions options)
        {
            Stream output = new FileStream(options.Output, FileMode.Create);
            InputBamlStreamList bamlStreamList = new InputBamlStreamList(options);

            using (ResourceTextWriter writer = new ResourceTextWriter(options.TranslationFileType, output))
            {
                options.WriteLine(StringLoader.Get("WriteBamlValues"));
                for (int i = 0; i < bamlStreamList.Count; i++)
                {
                    options.Write("    ");
                    options.Write(StringLoader.Get("ProcessingBaml", bamlStreamList[i].Name));

                    // Search for comment file in the same directory. The comment file has the extension to be
                    // "loc".
                    string     commentFile   = Path.ChangeExtension(bamlStreamList[i].Name, "loc");
                    TextReader commentStream = null;

                    try
                    {
                        if (File.Exists(commentFile))
                        {
                            commentStream = new StreamReader(commentFile);
                        }

                        // create the baml localizer
                        BamlLocalizer mgr = new BamlLocalizer(
                            bamlStreamList[i].Stream,
                            new BamlLocalizabilityByReflection(options.Assemblies),
                            commentStream
                            );

                        // extract localizable resource from the baml stream
                        BamlLocalizationDictionary dict = mgr.ExtractResources();

                        // write out each resource
                        foreach (DictionaryEntry entry in dict)
                        {
                            // column 1: baml stream name
                            writer.WriteColumn(bamlStreamList[i].Name);

                            BamlLocalizableResourceKey key      = (BamlLocalizableResourceKey)entry.Key;
                            BamlLocalizableResource    resource = (BamlLocalizableResource)entry.Value;

                            // column 2: localizable resource key
                            writer.WriteColumn(LocBamlConst.ResourceKeyToString(key));

                            // column 3: localizable resource's category
                            writer.WriteColumn(resource.Category.ToString());

                            // column 4: localizable resource's readability
                            writer.WriteColumn(resource.Readable.ToString());

                            // column 5: localizable resource's modifiability
                            writer.WriteColumn(resource.Modifiable.ToString());

                            // column 6: localizable resource's localization comments
                            writer.WriteColumn(resource.Comments);

                            // column 7: localizable resource's content
                            writer.WriteColumn(resource.Content);

                            // Done. finishing the line
                            writer.EndLine();
                        }

                        options.WriteLine(StringLoader.Get("Done"));
                    }
                    finally
                    {
                        if (commentStream != null)
                        {
                            commentStream.Close();
                        }
                    }
                }

                // close all the baml input streams, output stream is closed by writer.
                bamlStreamList.Close();
            }
        }
 //-------------------------------
 // Internal static
 //-------------------------------
 internal static void Serialize(BamlLocalizer localizer, BamlTree tree, Stream output)
 {
     // Thread safe implementation
     (new BamlResourceSerializer()).SerializeImp(localizer, tree, output);
 }
Exemple #12
0
 // Token: 0x06006E17 RID: 28183 RVA: 0x001FB05E File Offset: 0x001F925E
 internal static void Serialize(BamlLocalizer localizer, BamlTree tree, Stream output)
 {
     new BamlResourceSerializer().SerializeImp(localizer, tree, output);
 }
Exemple #13
0
 // Token: 0x06006E1B RID: 28187 RVA: 0x001FB13E File Offset: 0x001F933E
 internal BamlTreeMap(BamlLocalizer localizer, BamlTree tree, BamlLocalizabilityResolver resolver, TextReader comments)
 {
     this._tree     = tree;
     this._resolver = new InternalBamlLocalizabilityResolver(localizer, resolver, comments);
     this._localizableResourceBuilder = new LocalizableResourceBuilder(this._resolver);
 }