Updated Danish translation
[banshee.git] / build / TranslatorExtractor.cs
blobf7a275688785f734be472c3d1317eb3e1ccc41fb
1 //
2 // Licensed under same license as Banshee
3 // Copyright (C) 2006 Novell, Inc.
4 // Written by Aaron Bockover <abock@gnome.org>
5 //
6 // This tool extracts translator information from .po files
7 // to generate information for display in the about dialog
8 //
10 using System;
11 using System.Globalization;
12 using System.IO;
13 using System.Collections.Generic;
14 using System.Text.RegularExpressions;
16 public class TranslatorExtractor
18 public static void Main(string [] args)
20 Console.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
21 Console.WriteLine("<!-- AUTOGENERATED - DO NOT EDIT -->");
22 Console.WriteLine("<translators>");
23 foreach(string filename in Directory.GetFiles(args.Length == 0 ? "." : args[0], "*.po")) {
24 using(FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) {
25 using(StreamReader reader = new StreamReader(stream)) {
26 ParseFile(filename, reader);
30 Console.WriteLine("</translators>");
33 private static void ParseFile(string file, TextReader reader)
35 Dictionary<string, string> names = new Dictionary<string, string>();
36 string language_code = Path.GetFileNameWithoutExtension(file);
37 string language_name = null;
39 bool past_plural_forms = false;
41 while(true) {
42 string line = reader.ReadLine();
43 if(line == null || (line.StartsWith("#:") && past_plural_forms)) {
44 break;
45 } else if(line.StartsWith("\"Plural-Forms:")) {
46 past_plural_forms = true;
49 try {
50 Match match = Regex.Match(line, ".*#(.*)<(.*)>(.*,.*|[ \n]*$)");
51 if(!match.Success) {
52 match = Regex.Match(line, ".*\\\"Last-Translator:(.*)<(.*)>.*");
53 if(!match.Success) {
54 match = Regex.Match(line, ".*\\\"Language-Team:(.*)<.*>.*");
55 if(!match.Success) {
56 continue;
59 language_name = match.Groups[1].Value.Trim();
60 int pos = language_name.IndexOf('(');
61 if(pos > 0) {
62 language_name = language_name.Substring(0, pos).Trim();
65 pos = language_name.IndexOf("GNOME");
66 if(pos > 0) {
67 language_name = language_name.Substring(0, pos).Trim();
72 string name = match.Groups[1].Value.Trim();
73 string email = match.Groups[2].Value.Trim();
75 if(name == String.Empty || email == String.Empty || name == "FIRST AUTHOR") {
76 continue;
77 } else if(name.StartsWith("Maintainer:")) {
78 name = name.Substring(11).Trim();
81 if(!names.ContainsKey(email)) {
82 bool skip = false;
84 foreach(string iter_name in names.Values) {
85 if(String.Compare(iter_name, name, true) == 0) {
86 skip = true;
87 break;
91 if(!skip) {
92 names.Add(email, name);
95 } catch {
96 continue;
100 // hack for banshee, remove if used elsewhere
101 if(language_code == "sr") {
102 return;
103 } else if(language_code == "sr@latin") {
104 language_code = "sr";
106 // end special
108 // override language names from extracted
109 switch(language_code) {
110 case "ast": language_name = "Asturian"; break;
111 case "ca": language_name = "Catalan"; break;
112 case "ca@valencia": language_name = "Catalan (Valencian)"; break;
113 case "cs": language_name = "Czech"; break;
114 case "de": language_name = "German"; break;
115 case "fr": language_name = "French"; break;
116 case "el": language_name = "Greek"; break;
117 case "en_GB": language_name = "British English"; break;
118 case "gl": language_name = "Galician"; break;
119 case "gu": language_name = "Gujarati"; break;
120 case "he": language_name = "Hebrew"; break;
121 case "id": language_name = "Indonesian"; break;
122 case "ko": language_name = "Korean"; break;
123 case "lt": language_name = "Lithuanian"; break;
124 case "pt": language_name = "Portuguese"; break;
125 case "ro": language_name = "Romanian"; break;
126 case "zh_CN": language_name = "Simplified Chinese"; break;
127 case "zh_HK": language_name = "Chinese (Hong Kong)"; break;
128 case "zh_TW": language_name = "Chinese (Taiwan)"; break;
129 default: break;
132 Console.WriteLine(" <language code=\"{0}\" name=\"{1}\">", language_code, language_name);
133 List<string> sorted_names = new List<string> (names.Values);
134 sorted_names.Sort ();
135 foreach(string name in sorted_names) {
136 Console.WriteLine(" <person>{0}</person>", name.Replace("\"", "&quot;"));
138 Console.WriteLine(" </language>");