Ejemplo n.º 1
0
        public void WriteRecord_WritesLocations()
        {
            var s = new LocalizableString()
            {
                Text = "Computer",
            };

            s.Locations.Add(new LocalizableStringLocation()
            {
                SourceFile = "File.cs", SourceFileLine = 1, Comment = "Comment 1"
            });
            s.Locations.Add(new LocalizableStringLocation()
            {
                SourceFile = "File.cs", SourceFileLine = 2, Comment = "Comment 2"
            });

            using (var writer = new PoWriter(_stream)) {
                writer.WriteRecord(s);
            }

            var result = ReadPoStream();

            Assert.Equal($"#: File.cs:1", result[0]);
            Assert.Equal($"#. Comment 1", result[1]);
            Assert.Equal($"#: File.cs:2", result[2]);
            Assert.Equal($"#. Comment 2", result[3]);
            Assert.Equal($"msgid \"Computer\"", result[4]);
            Assert.Equal($"msgstr \"\"", result[5]);
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                WriteHelp();
                return;
            }

            var basePath       = args[0];
            var outputBasePath = args[1];

            string[] projectFiles;
            if (Directory.Exists(basePath))
            {
                projectFiles = Directory.EnumerateFiles(basePath, $"*{ProjectExtension.CS}", SearchOption.AllDirectories).OrderBy(file => file)
                               .Union(Directory.EnumerateFiles(basePath, $"*{ProjectExtension.VB}", SearchOption.AllDirectories).OrderBy(file => file)).ToArray();
            }
            else
            {
                WriteHelp();
                return;
            }

            var processors = new IProjectProcessor[] {
                new CSharpProjectProcessor(),
                new VisualBasicProjectProcessor()
            };

            foreach (var projectFilePath in projectFiles)
            {
                var projectPath         = Path.GetDirectoryName(projectFilePath);
                var projectBasePath     = Path.GetDirectoryName(projectPath) + Path.DirectorySeparatorChar;
                var projectRelativePath = projectPath.TrimStart(basePath + Path.DirectorySeparatorChar);
                var outputPath          = Path.Combine(outputBasePath, Path.GetFileNameWithoutExtension(projectFilePath) + PoWriter.PortaleObjectTemplateExtension);

                var strings = new LocalizableStringCollection();
                foreach (var processor in processors)
                {
                    processor.Process(projectPath, projectBasePath, strings);
                }

                if (strings.Values.Any())
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(outputPath));

                    using (var potFile = new PoWriter(outputPath)) {
                        potFile.WriteRecord(strings.Values);
                    }
                }

                Console.WriteLine($"{Path.GetFileName(projectPath)}: Found {strings.Values.Count()} strings.");
            }
        }
Ejemplo n.º 3
0
        public void WriteRecord_WritesSingularLocalizableString()
        {
            var s = new LocalizableString()
            {
                Text = "Computer"
            };

            using (var writer = new PoWriter(_stream)) {
                writer.WriteRecord(s);
            }

            var result = ReadPoStream();

            Assert.Equal($"msgid \"Computer\"", result[0]);
            Assert.Equal($"msgstr \"\"", result[1]);
        }
Ejemplo n.º 4
0
        public void WriteRecord_WritesPluralLocalizableString()
        {
            var s = new LocalizableString()
            {
                Text       = "Computer",
                TextPlural = "Computers"
            };

            using (var writer = new PoWriter(_stream)) {
                writer.WriteRecord(s);
            }

            var result = ReadPoStream();

            Assert.Equal($"msgid \"Computer\"", result[0]);
            Assert.Equal($"msgid_plural \"Computers\"", result[1]);
            Assert.Equal($"msgstr[0] \"\"", result[2]);
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                WriteHelp();
                return;
            }

            var basePath       = args[0];
            var outputBasePath = args[1];
            var parseLiquid    = args.Length > 2 && args[2] == "--liquid";

            string[] projectFiles;
            if (Directory.Exists(basePath))
            {
                projectFiles = Directory.EnumerateFiles(basePath, "*.csproj", SearchOption.AllDirectories).ToArray();
            }
            else
            {
                WriteHelp();
                return;
            }

            var processors = new List <IProjectProcessor>();

            processors.Add(new CSharpProjectProcessor());
            if (parseLiquid)
            {
                processors.Add(new LiquidProjectProcessor(ConfigureFluidParser));
            }
            ;

            foreach (var projectFilePath in projectFiles)
            {
                var projectPath         = Path.GetDirectoryName(projectFilePath);
                var projectBasePath     = Path.GetDirectoryName(projectPath) + Path.DirectorySeparatorChar;
                var projectRelativePath = projectPath.TrimStart(basePath + Path.DirectorySeparatorChar);
                var outputPath          = Path.Combine(outputBasePath, Path.GetFileNameWithoutExtension(projectFilePath) + ".pot");

                if (ProjectBlacklist.Any(o => projectRelativePath.StartsWith(o)))
                {
                    continue;
                }

                var strings = new LocalizableStringCollection();
                foreach (var processor in processors)
                {
                    processor.Process(projectPath, projectBasePath, strings);
                }

                if (strings.Values.Any())
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(outputPath));

                    using (var potFile = new PoWriter(outputPath)) {
                        potFile.WriteRecord(strings.Values);
                    }
                }

                Console.WriteLine($"{Path.GetFileName(projectPath)}: Found {strings.Values.Count()} strings.");
            }
        }