public void Add(ResourceDataCollection coll)
 {
     foreach (ResourceData it in coll)
     {
         keyedData.Add(it.ResourceName, it);
         List.Add(it);
     }
 }
Ejemplo n.º 2
0
        public void ProcessAssembly(string source)
        {
            XmlReaderSettings settings = new XmlReaderSettings();

            settings.ConformanceLevel = ConformanceLevel.Fragment;
            settings.IgnoreWhitespace = true;
            settings.IgnoreComments   = true;

            XmlReader reader = null;

            try
            {
                reader = XmlReader.Create(source, settings);
            }
            catch (Exception e)
            {
                Tools.Error("Can't open file " + source, e.Message);
            }

            ResourceDataCollection data         = new ResourceDataCollection();
            AssemblyName           assemblyName = new AssemblyName();

            resources.Add(assemblyName, data);

            using (reader)
            {
                if (ReadHeader(assemblyName, reader))
                {
                    try
                    {
                        while (!reader.EOF)
                        {
                            reader.Read();
                            if (reader.Name == "NewDataSet")
                            {
                                string          xml    = reader.ReadOuterXml();
                                XmlDataDocument xmlDoc = new XmlDataDocument();
                                ResourceData.PrepareDataSet(xmlDoc.DataSet);
                                xmlDoc.LoadXml(xml);

                                ResourceData rd = new ResourceData();
                                rd.DataSet      = xmlDoc.DataSet.Copy();
                                rd.ResourceName = rd.DataSet.Tables["MetaData"].Rows[0]["Name"].ToString();
                                rd.ResourceType = rd.DataSet.Tables["MetaData"].Rows[0]["Type"].ToString();

                                data.Add(rd);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Tools.Error("Corruption in resources XML", e.Message);
                    }
                }
            }
        }
        public void Save(string outputDirectory)
        {
            if (Directory.Exists(outputDirectory) == false)
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, "Invalid output directory {0}", outputDirectory));
            }

            string cultureFile = Path.Combine(outputDirectory, "culture.txt");

            if (File.Exists(cultureFile))
            {
                using (StreamReader reader = new StreamReader(cultureFile))
                {
                    culture = reader.ReadToEnd();
                }
            }

            foreach (KeyValuePair <AssemblyName, ResourceDataCollection> pair in resources)
            {
                AssemblyName           assemblyName = pair.Key;
                ResourceDataCollection data         = pair.Value;

                string fileName = Path.Combine(outputDirectory, assemblyName.Name + ".xml");

                InsertExistingTranslations(fileName, data);

                using (XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.UTF8))
                {
                    writer.Formatting = Formatting.Indented;
                    writer.WriteStartElement("root");
                    writer.WriteStartElement("assembly");
                    writer.WriteAttributeString("culture", string.IsNullOrEmpty(fileCulture) ? culture : fileCulture);
                    writer.WriteAttributeString("name", assemblyName.Name + ".resources");
                    writer.WriteAttributeString("version", assemblyName.Version.ToString());
                    writer.WriteEndElement();

                    foreach (ResourceData rd in data)
                    {
                        writer.WriteStartElement("resources");
                        writer.WriteAttributeString("name", rd.ResourceName);
                        writer.WriteAttributeString("type", rd.ResourceType);
                        XmlDataDocument xml = new XmlDataDocument(rd.DataSet);
                        xml.Save(writer);
                        writer.WriteEndElement();
                    }

                    writer.WriteEndElement();
                    writer.Close();
                }
            }
        }
Ejemplo n.º 4
0
        public void Save()
        {
            AppDomain appDomain = AppDomain.CurrentDomain;

            foreach (KeyValuePair <AssemblyName, ResourceDataCollection> pair in resources)
            {
                AssemblyName           assemblyName = pair.Key;
                ResourceDataCollection data         = pair.Value;
                AssemblyBuilder        asmBuilder   = appDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.ReflectionOnly);

                string satelliteAssemblyFileName = assemblyName.Name + ".dll";

                ModuleBuilder moduleBuilder = asmBuilder.DefineDynamicModule(satelliteAssemblyFileName, satelliteAssemblyFileName);

                foreach (ResourceData rd in data)
                {
                    MemoryStream stream = new MemoryStream();
                    string       resourceStreamExtension = Path.GetExtension(rd.ResourceName).ToLower();
                    if (resourceStreamExtension == ".resources")
                    {
                        ResourceWriter resourceWriter = new ResourceWriter(stream);
                        moduleBuilder.DefineManifestResource(LocResourceName(rd.ResourceName, assemblyName.CultureInfo.ToString()), stream, ResourceAttributes.Private);
                        foreach (DataRow dr in rd.DataSet.Tables["Resources"].Rows)
                        {
                            if (dr["Translation"].ToString() != dr["Source"].ToString())
                            {
                                resourceWriter.AddResource(dr["ID"].ToString(), dr["Translation"].ToString());
                            }
                        }
                        resourceWriter.Generate();
                    }

                    if ((resourceStreamExtension == ".xsd") || (resourceStreamExtension == ".xml"))
                    {
                        if (!Convert.IsDBNull(rd.DataSet.Tables["Resources"].Rows[0]["Translation"]))
                        {
                            TextWriter textWriter = new StreamWriter(stream);
                            moduleBuilder.DefineManifestResource(LocResourceName(rd.ResourceName, assemblyName.CultureInfo.ToString()), stream, ResourceAttributes.Private);
                            textWriter.Write(rd.DataSet.Tables["Resources"].Rows[0]["Translation"] as string);
                            textWriter.Flush();
                        }
                    }
                }

                asmBuilder.Save(satelliteAssemblyFileName);
            }
        }
        void InsertExistingTranslations(string fileName, ResourceDataCollection data)
        {
            if (File.Exists(fileName))
            {
                try
                {
                    XPathDocument  document  = new XPathDocument(fileName);
                    XPathNavigator navigator = document.CreateNavigator();

                    XPathNodeIterator iterator = navigator.Select("/root/resources");

                    fileCulture = string.Empty;
                    fileCulture = (string)navigator.Evaluate("string(/root/assembly/@culture)");

                    while (iterator.MoveNext())
                    {
                        string       name     = iterator.Current.GetAttribute("name", string.Empty);
                        ResourceData resource = data[name];
                        if (resource != null)
                        {
                            XPathNodeIterator resourceIterator = iterator.Current.Select("NewDataSet/Resources");

                            while (resourceIterator.MoveNext())
                            {
                                string id          = (string)resourceIterator.Current.Evaluate("string(ID)");
                                string translation = (string)resourceIterator.Current.Evaluate("string(Translation)");
                                string source      = (string)resourceIterator.Current.Evaluate("string(Source)");
                                if (translation != source)
                                {
                                    resource.SetTranslation(id, translation);
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    throw new Exception("Failed to insert from " + fileName, e);
                }
            }
        }
        void ProcessAssembly(string path)
        {
            string fullFileName = Path.GetFullPath(path);

            Console.WriteLine("Processing {0}", fullFileName);
            Assembly assembly = null;

            try
            {
                assembly = Assembly.ReflectionOnlyLoadFrom(fullFileName);
            }
            catch (Exception e)
            {
                Tools.Error("Can't open assembly: " + AssemblyPath, e.Message);
            }

            AssemblyName           assemblyName = assembly.GetName();
            ResourceDataCollection data         = new ResourceDataCollection();

            resources.Add(assemblyName, data);

            string[] ResourceNames = assembly.GetManifestResourceNames();

            foreach (string ResourceName in ResourceNames)
            {
                Stream ResourceStream = assembly.GetManifestResourceStream(ResourceName);

                string resourceStreamExtension = Path.GetExtension(ResourceName).ToLower();

                if (resourceStreamExtension == ".resources")
                {
                    ResourceReader resourceReader = new ResourceReader(ResourceStream);
                    ResourceData   rd             = new ResourceData(ResourceName, ResourceTypes.StringTable.ToString());

                    IDictionaryEnumerator dictionaryEnumerator = resourceReader.GetEnumerator();
                    while (dictionaryEnumerator.MoveNext())
                    {
                        bool extract = dictionaryEnumerator.Value is string;
                        if (extract)
                        {
                            string id = dictionaryEnumerator.Key.ToString();

                            if (dontLocalize.Contains(id) == false)
                            {
                                rd.Add(id, dictionaryEnumerator.Value.ToString(), crucial.Contains(id));
                            }
                        }
                    }

                    data.Add(rd);
                }

                if ((resourceStreamExtension == ".xsd") || (resourceStreamExtension == ".xml"))
                {
                    ResourceData rd         = new ResourceData(ResourceName, ResourceTypes.XML.ToString());
                    TextReader   textReader = new StreamReader(ResourceStream);
                    if (dontLocalize.Contains(ResourceName) == false)
                    {
                        rd.Add(ResourceName, textReader.ReadToEnd(), crucial.Contains(ResourceName));
                    }
                    data.Add(rd);
                }
            }
        }