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