Author: mkrueger
Date: 2007-07-11 08:39:26 -0400 (Wed, 11 Jul 2007)
New Revision: 81792

Modified:
   trunk/monodevelop/Extras/MonoDevelop.Gettext/ChangeLog
   trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext.addin.xml
   
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationProject.cs
   
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationService.cs
Log:
* MonoDevelop.Gettext.addin.xml: worked on translation addin.

Modified: trunk/monodevelop/Extras/MonoDevelop.Gettext/ChangeLog
===================================================================
--- trunk/monodevelop/Extras/MonoDevelop.Gettext/ChangeLog      2007-07-11 
12:35:14 UTC (rev 81791)
+++ trunk/monodevelop/Extras/MonoDevelop.Gettext/ChangeLog      2007-07-11 
12:39:26 UTC (rev 81792)
@@ -1,3 +1,7 @@
+2007-07-11  Mike Krüger <[EMAIL PROTECTED]> 
+
+       * MonoDevelop.Gettext.addin.xml: worked on translation addin.
+
 2007-07-10  Mike Krüger <[EMAIL PROTECTED]> 
 
        * MonoDevelop.Gettext.addin.xml: Worked on translation.

Modified: 
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationProject.cs
===================================================================
--- 
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationProject.cs
      2007-07-11 12:35:14 UTC (rev 81791)
+++ 
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationProject.cs
      2007-07-11 12:39:26 UTC (rev 81792)
@@ -27,6 +27,8 @@
 //
 
 using System;
+using System.CodeDom;
+using System.CodeDom.Compiler;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.IO;
@@ -47,8 +49,10 @@
                        get { return translations.AsReadOnly (); }
                }
                
-               public TranslationProject()
+               public TranslationProject ()
                {
+                       TranslationService.IsTranslationEnabled = true;
+                       this.NeedsBuilding = true;
                }
                
                string GetFileName (Translation translation)
@@ -62,12 +66,19 @@
                
                public void AddTranslationString (string originalString)
                {
+                       AddTranslationString (originalString, null);
+               }
+               
+               public void AddTranslationString (string originalString, string 
originalPluralString)
+               {
                        foreach (Translation translation in this.Translations) {
                                string poFileName = GetFileName (translation);
                                Catalog catalog = new Catalog (poFileName);
-                               if (catalog.FindItem (originalString) == null)
-                                       catalog.AddItem (new 
CatalogEntry(catalog, originalString, null));
-                               catalog.Save (poFileName);
+                               if (catalog.FindItem (originalString) == null) {
+                                       Console.WriteLine ("add item: " + 
originalString);
+                                       catalog.AddItem (new CatalogEntry 
(catalog, originalString, originalPluralString));
+                                       catalog.Save (poFileName);
+                               }
                        }
                }
                
@@ -92,13 +103,53 @@
                        return new TranslationProjectConfiguration (name);
                }
                
-               protected override void OnClean (IProgressMonitor monitor)
+               protected override ICompilerResult OnBuild (IProgressMonitor 
monitor)
                {
+                       CompilerResults results = new CompilerResults (null);
+                       string applicationName = 
this.ParentCombine.StartupEntry.Name;
+                       string outputDirectory = Path.Combine 
(this.ParentCombine.StartupEntry.BaseDirectory, "locale");
+                       if (this.ParentCombine.StartupEntry is DotNetProject) {
+                               outputDirectory = Path.Combine 
(Path.GetDirectoryName 
(((DotNetProject)ParentCombine.StartupEntry).GetOutputFileName ()),"locale");
+                       }
+                       
+                       foreach (Translation translation in this.Translations) {
+                               string poFileName  = GetFileName (translation);
+                               string moDirectory = Path.Combine (Path.Combine 
(outputDirectory, translation.IsoCode), "LC_MESSAGES");
+                               if (!Directory.Exists (moDirectory))
+                                       Directory.CreateDirectory (moDirectory);
+                               string moFileName  = Path.Combine (moDirectory, 
applicationName + ".mo");
+                               
+                               System.Diagnostics.Process process = new 
System.Diagnostics.Process ();
+                               process.StartInfo.FileName = "msgfmt";
+                               process.StartInfo.Arguments = poFileName + " -o 
" + moFileName;
+                               process.StartInfo.UseShellExecute = true;
+                               process.Start ();
+                               process.WaitForExit ();
+                               if (process.ExitCode == 0) {
+                                       monitor.Log.WriteLine 
(GettextCatalog.GetString ("Translation {0}: Compilation suceed.", 
translation.IsoCode));
+                               } else {
+                                       string error   = 
process.StandardError.ReadToEnd ();
+                                       string message = String.Format 
(GettextCatalog.GetString ("Translation {0}: Compilation failed. Reason: {1}"), 
translation.IsoCode, error);
+                                       monitor.Log.WriteLine (message);
+                                       results.Errors.Add (new CompilerError 
(this.Name, 0, 0, null, message));
+                               }
+                       }
+                       
+                       return new DefaultCompilerResult (results, "");
                }
                
-               protected override ICompilerResult OnBuild (IProgressMonitor 
monitor)
+               protected override void OnClean (IProgressMonitor monitor)
                {
-                       return null;
+                       base.NeedsBuilding = true;
+                       monitor.Log.WriteLine (GettextCatalog.GetString 
("Removing all .mo files."));
+                       string applicationName = 
this.ParentCombine.StartupEntry.Name;
+                       string outputDirectory = Path.Combine 
(this.ParentCombine.StartupEntry.BaseDirectory, "locale");
+                       foreach (Translation translation in this.Translations) {
+                               string moDirectory = Path.Combine (Path.Combine 
(outputDirectory, translation.IsoCode), "LC_MESSAGES");
+                               string moFileName  = Path.Combine (moDirectory, 
applicationName + ".mo");
+                               if (File.Exists (moFileName)) 
+                                       File.Delete (moFileName);
+                       }
                }
                
                protected override void OnExecute (IProgressMonitor monitor, 
ExecutionContext context)
@@ -107,11 +158,12 @@
                
                protected override bool OnGetNeedsBuilding ()
                {
-                       return false;
+                       return this.NeedsBuilding;
                }
                
                protected override void OnSetNeedsBuilding (bool val)
                {
+                       this.NeedsBuilding = val;
                }
                
                protected virtual void OnTranslationAdded (EventArgs e)

Modified: 
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationService.cs
===================================================================
--- 
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationService.cs
      2007-07-11 12:35:14 UTC (rev 81791)
+++ 
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext/TranslationService.cs
      2007-07-11 12:39:26 UTC (rev 81792)
@@ -40,7 +40,16 @@
        {
                static bool isTranslationEnabled = false;
                
-               internal static void Initialize ()
+               public static bool IsTranslationEnabled {
+                       get {
+                               return isTranslationEnabled;
+                       }
+                       set {
+                               isTranslationEnabled = value;
+                       }
+               }
+               
+               static TranslationService ()
                {
                        IdeApp.ProjectOperations.FileChangedInProject += new 
ProjectFileEventHandler (FileChangedInProject);
                        IdeApp.ProjectOperations.CombineOpened += new 
CombineEventHandler (CombineOpened);
@@ -49,18 +58,28 @@
                        };
                }
                
-               static TranslationProject GetTranslationProject ()
+               static TranslationProject GetTranslationProject (Project p)
                {
-                       foreach (CombineEntry entry in 
IdeApp.ProjectOperations.CurrentOpenCombine.Entries) {
+                       foreach (CombineEntry entry in p.ParentCombine.Entries) 
{
                                if (entry is TranslationProject) {
                                        return (TranslationProject)entry;
                                }
                        }
                        return null;
                }
-               const string regex = @"translatable=""yes""\s*>(.*)</property>";
-               static Regex steticTranslationPattern = new Regex(regex, 
RegexOptions.Compiled);
                
+               static Regex xmlTranslationPattern = new Regex(@"_.*=""(.*)""", 
RegexOptions.Compiled);
+               static void UpdateXmlTranslations (TranslationProject 
translationProject, string fileName)
+               {
+                       string text = File.ReadAllText (fileName);
+                       if (!String.IsNullOrEmpty (text)) {
+                               foreach (Match match in 
xmlTranslationPattern.Matches (text)) {
+                                       translationProject.AddTranslationString 
(match.Groups[1].Value);
+                               }
+                       }
+               }
+               
+               static Regex steticTranslationPattern = new 
Regex(@"translatable=""yes""\s*>(.*)</property>", RegexOptions.Compiled);
                static void UpdateSteticTranslations (TranslationProject 
translationProject, string fileName)
                {
                        string text = File.ReadAllText (fileName);
@@ -71,19 +90,41 @@
                        }
                }
                
+               static Regex translationPattern = new 
Regex(@"GetString\s*\(\s*""(.*)""\s*\)\s*[,.*]", RegexOptions.Compiled);
+               static Regex pluralTranslationPattern = new 
Regex(@"GetPluralString\s*\(\s*""(.*)""\s*,\s*""(.*)""\s*[,.*]", 
RegexOptions.Compiled);
+               
                static void UpdateTranslations (TranslationProject 
translationProject, string fileName)
                {
                        string text = File.ReadAllText (fileName);
+                       if (!String.IsNullOrEmpty (text)) {
+                               foreach (Match match in 
translationPattern.Matches (text)) {
+                                       Console.WriteLine 
(match.Groups[1].Value);
+                                       translationProject.AddTranslationString 
(match.Groups[1].Value);
+                               }
+                               foreach (Match match in 
pluralTranslationPattern.Matches (text)) {
+                                       Console.WriteLine 
(match.Groups[1].Value);
+                                       translationProject.AddTranslationString 
(match.Groups[1].Value, match.Groups[2].Value);
+                               }
+                       }
                }
                
                static void FileChangedInProject (object sender, 
ProjectFileEventArgs e)
                {
                        if (!isTranslationEnabled)
                                return;
-                       TranslationProject translationProject = 
GetTranslationProject ();
+                       
+                       TranslationProject translationProject = 
GetTranslationProject (e.Project);
                        if (translationProject == null)
                                return;
-                       UpdateTranslations (translationProject, 
e.ProjectFile.FilePath);
+                       switch (Path.GetExtension (e.ProjectFile.FilePath)) {
+                       case ".xml":
+                               UpdateXmlTranslations (translationProject, 
e.ProjectFile.FilePath);
+                               break;
+                       default:
+                               UpdateTranslations (translationProject, 
e.ProjectFile.FilePath);
+                               break;
+                       }
+                       
                        ProjectFile steticFile = e.Project.GetProjectFile 
(Path.Combine (e.Project.BaseDirectory, "gtk-gui/gui.stetic"));
                        if (steticFile != null) 
                                UpdateSteticTranslations (translationProject, 
steticFile.FilePath);
@@ -100,13 +141,4 @@
                        isTranslationEnabled = false;
                }
        }
-       
-       public class TranslationServiceStartupCommand : CommandHandler
-       {
-               protected override void Run ()
-               {
-                       TranslationService.Initialize ();
-               }
-       }
-       
 }
\ No newline at end of file

Modified: 
trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext.addin.xml
===================================================================
--- trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext.addin.xml  
2007-07-11 12:35:14 UTC (rev 81791)
+++ trunk/monodevelop/Extras/MonoDevelop.Gettext/MonoDevelop.Gettext.addin.xml  
2007-07-11 12:39:26 UTC (rev 81792)
@@ -94,11 +94,6 @@
                <NodeBuilder class = 
"MonoDevelop.Gettext.NodeBuilders.TranslationProjectNodeBuilder"/>
                <NodeBuilder class = 
"MonoDevelop.Gettext.NodeBuilders.TranslationNodeBuilder"/>
        </Extension>
-       
-       <Extension path = "/MonoDevelop/IDE/StartupHandlers">
-               <Class class = 
"MonoDevelop.Gettext.TranslationServiceStartupCommand" />
-       </Extension>
-       
 <!--
        <Extension path = "/SharpDevelop/Workbench/ProjectBindings">
                <ProjectBinding id = "Translation" class = 
"MonoDevelop.Gettext.GettextProjectBinding" />

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to