diff --git a/.gitignore b/.gitignore index e0233878..6c9e3630 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ SparkleLib/windows/GlobalAssemblyInfo.cs SparkleShare/sparkleshare po/sparkleshare.pot SparkleShare/Nautilus/sparkleshare-nautilus-extension.py +SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py gnome-doc-utils.make /sparkleshare-* data/plugins/*.xml diff --git a/NEWS b/NEWS index 40c7541c..6b8eba0b 100755 --- a/NEWS +++ b/NEWS @@ -1,3 +1,24 @@ +0.4.0 for Linux and Mac (Sun Nov 12 2011): + Hylke: It has been a while since the last release. Since so many + things changed, and it being (softly) incompatible with 0.2, I decided + to call it 0.4. Here are the most important improvements: + + - Support OS X Lion + - Revamped "Add Hosted Project..." dialog + - First run tutorial + - Clicking notifications opens the event log + - Support for organisation/host plugins + - Adding empty folders now works + - More useful error reporting + - Progress bar on the initial sync, and a button to cancel + - Replace IRC by a custom protocol as the default notification system + - Many many fixes for crashes and bugs + + Travis: + - Nautilus 3.x plugin + - Bugfixes + + 0.2.5 for Linux and Mac (Mon Jul 25 2011): Hylke: Reimplement notes to be less buggy and backend independent. Polish diff --git a/README b/README index 258cd010..8dfd1a40 100644 --- a/README +++ b/README @@ -88,7 +88,7 @@ Just double-click the SparkleShare bundle. # Build on Mac -Install Xcode, the Mono Framework, MonoDevelop and the MonoMac plugin (you find it in Add-in Manager). +Install Xcode, the Mono Framework, MonoDevelop and the MonoMac plugin (you can find it in MonoDevelop => Add-in Manager). You may need to adjust some environment variables to let the build environment tools find mono: @@ -108,10 +108,11 @@ Start the first part of the build: Now that you have compiled the libraries, open 'SparkleShare/Mac/SparkleShare.sln' in MonoDevelop and start the build. -To create the SparkleShare.app, select Project from the menu bar -and click "Create Mac Installer..." Save the SparkleShare.app somewhere. +To create the SparkleShare.app, make sure the project is focused and select Project from the menu bar +and click "Create Mac Installer...". Make sure to select "Don't link assemblies". -Paste the contents of the following file in SparkleShare.app/Contents/MonoBundle/config: +Save the SparkleShare.app somewhere. Paste the contents of +the following file in SparkleShare.app/Contents/MonoBundle/config: https://raw.github.com/gist/1aeffa61bac73fc08eca/0c0f09ef9e36864c35f34fd5e8bf4f99886be193/gistfile1.txt Copy /Library/Frameworks/Mono.framework/Versions/Current/lib/libintl.dylib diff --git a/SparkleLib/Git/SparkleRepoGit.cs b/SparkleLib/Git/SparkleRepoGit.cs index 17084257..c00d84bb 100644 --- a/SparkleLib/Git/SparkleRepoGit.cs +++ b/SparkleLib/Git/SparkleRepoGit.cs @@ -37,25 +37,31 @@ namespace SparkleLib { } + private string identifier = null; + public override string Identifier { get { + if (string.IsNullOrEmpty (this.identifier)) { - // Because git computes a hash based on content, - // author, and timestamp; it is unique enough to - // use the hash of the first commit as an identifier - // for our folder - SparkleGit git = new SparkleGit (LocalPath, "rev-list --reverse HEAD"); - git.Start (); + // Because git computes a hash based on content, + // author, and timestamp; it is unique enough to + // use the hash of the first commit as an identifier + // for our folder + SparkleGit git = new SparkleGit (LocalPath, "rev-list --reverse HEAD"); + git.Start (); - // Reading the standard output HAS to go before - // WaitForExit, or it will hang forever on output > 4096 bytes - string output = git.StandardOutput.ReadToEnd (); - git.WaitForExit (); + // Reading the standard output HAS to go before + // WaitForExit, or it will hang forever on output > 4096 bytes + string output = git.StandardOutput.ReadToEnd (); + git.WaitForExit (); - if (output.Length < 40) - return null; + if (output.Length < 40) + return null; - return output.Substring (0, 40); + this.identifier = output.Substring (0, 40); + } + + return this.identifier; } } diff --git a/SparkleLib/SparkleConfig.cs b/SparkleLib/SparkleConfig.cs index 2e54009a..1fd3fece 100755 --- a/SparkleLib/SparkleConfig.cs +++ b/SparkleLib/SparkleConfig.cs @@ -113,17 +113,15 @@ namespace SparkleLib { if (string.IsNullOrEmpty (user_name)) user_name = "Unknown"; - TextWriter writer = new StreamWriter (FullPath); - string n = Environment.NewLine; - - writer.Write ("" + n + - "" + n + - " " + n + - " " + user_name + "" + n + - " Unknown" + n + - " " + n + - ""); - writer.Close (); + string n = Environment.NewLine; + File.WriteAllText (FullPath, + "" + n + + "" + n + + " " + n + + " " + user_name + "" + n + + " Unknown" + n + + " " + n + + ""); SparkleHelpers.DebugInfo ("Config", "Created \"" + FullPath + "\""); } @@ -276,10 +274,16 @@ namespace SparkleLib { List hosts = new List (); foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) { - Uri uri = new Uri (node_folder ["url"].InnerText); + try { + Uri uri = new Uri (node_folder ["url"].InnerText); - if ("git" != uri.UserInfo && !hosts.Contains (uri.UserInfo + "@" + uri.Host)) - hosts.Add (uri.UserInfo + "@" + uri.Host); + if (uri.UserInfo != "git" && !hosts.Contains (uri.UserInfo + "@" + uri.Host)) + hosts.Add (uri.UserInfo + "@" + uri.Host); + + } catch (UriFormatException) { + SparkleHelpers.DebugInfo ("Config", + "Ignoring badly formatted URI: " + node_folder ["url"].InnerText); + } } return hosts; diff --git a/SparkleLib/SparkleListenerBase.cs b/SparkleLib/SparkleListenerBase.cs index aeb4a004..bba5b171 100755 --- a/SparkleLib/SparkleListenerBase.cs +++ b/SparkleLib/SparkleListenerBase.cs @@ -16,8 +16,10 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Timers; +using System.Linq; namespace SparkleLib { @@ -50,7 +52,7 @@ namespace SparkleLib { // don't have your own. All data needed to connect is hashed and // we don't store any personal information ever - uri = "tcp://204.62.14.135:1986"; // TODO: announcements.sparkleshare.org + uri = "tcp://notifications.sparkleshare.org:1986"; } Uri announce_uri = new Uri (uri); @@ -80,7 +82,7 @@ namespace SparkleLib { listeners.Add (new SparkleListenerTcp (announce_uri, folder_identifier)); break; } - + SparkleHelpers.DebugInfo ("ListenerFactory", "Issued new listener for " + announce_uri); return (SparkleListenerBase) listeners [listeners.Count - 1]; } @@ -104,20 +106,21 @@ namespace SparkleLib { public event AnnouncementEventHandler Announcement; public delegate void AnnouncementEventHandler (SparkleAnnouncement announcement); - public abstract void Connect (); public abstract void Announce (SparkleAnnouncement announcent); public abstract void AlsoListenTo (string folder_identifier); public abstract bool IsConnected { get; } - - protected List channels = new List (); - protected List queue_up = new List (); - protected List queue_down = new List (); + protected List channels = new List (); + protected Dictionary> recent_announcements = new Dictionary> (); + protected int max_recent_announcements = 10; + protected Dictionary queue_up = new Dictionary (); + protected Dictionary queue_down = new Dictionary (); protected bool is_connecting; protected Uri server; protected Timer reconnect_timer = new Timer { Interval = 60 * 1000, Enabled = true }; + public SparkleListenerBase (Uri server, string folder_identifier) { this.server = server; @@ -133,30 +136,23 @@ namespace SparkleLib { public void AnnounceBase (SparkleAnnouncement announcement) { - if (IsConnected) { - SparkleHelpers.DebugInfo ("Listener", - "Announcing to " + announcement.FolderIdentifier + " on " + this.server); + if (!this.IsRecentAnnounement (announcement)) { + if (IsConnected) { + SparkleHelpers.DebugInfo ("Listener", + "Announcing message " + announcement.Message + " to " + announcement.FolderIdentifier + " on " + this.server); - Announce (announcement); + Announce (announcement); + this.AddRecentAnnouncement (announcement); + } else { + SparkleHelpers.DebugInfo ("Listener", "Can't send message to " + this.server + ". Queuing message"); + this.queue_up [announcement.FolderIdentifier] = announcement; + } } else { - SparkleHelpers.DebugInfo ("Listener", "Not connected to " + this.server + ". Queuing message"); - this.queue_up.Add (announcement); - } - } - - - public string NextQueueDownMessage (string folder_identifier) - { - foreach (SparkleAnnouncement announcement in this.queue_down.GetRange (0, this.queue_down.Count)) { - if (announcement.FolderIdentifier.Equals (folder_identifier)) { - string message = announcement.Message; - this.queue_down.Remove (announcement); - return message; - } + SparkleHelpers.DebugInfo ("Listener", + "Already processed message " + announcement.Message + " to " + announcement.FolderIdentifier + " from " + this.server); } - return null; } @@ -169,7 +165,7 @@ namespace SparkleLib { public void OnConnected () { - SparkleHelpers.DebugInfo ("Listener", "Connected to " + Server); + SparkleHelpers.DebugInfo ("Listener", "Listening for announcements on " + Server); if (Connected != null) Connected (); @@ -177,17 +173,19 @@ namespace SparkleLib { if (this.queue_up.Count > 0) { SparkleHelpers.DebugInfo ("Listener", "Delivering " + this.queue_up.Count + " queued messages..."); - foreach (SparkleAnnouncement announcement in this.queue_up.GetRange(0, this.queue_up.Count)) { + foreach (KeyValuePair item in this.queue_up) { + SparkleAnnouncement announcement = item.Value; AnnounceBase (announcement); - this.queue_up.Remove (announcement); } + + this.queue_down.Clear (); } } public void OnDisconnected () { - SparkleHelpers.DebugInfo ("Listener", "Disonnected from " + Server); + SparkleHelpers.DebugInfo ("Listener", "Signal of " + Server + " lost"); if (Disconnected != null) Disconnected (); @@ -196,15 +194,71 @@ namespace SparkleLib { public void OnAnnouncement (SparkleAnnouncement announcement) { - SparkleHelpers.DebugInfo ("Listener", "Got message from " + announcement.FolderIdentifier + " on " + this.server); + SparkleHelpers.DebugInfo ("Listener", + "Got message " + announcement.Message + " from " + announcement.FolderIdentifier + " on " + this.server); - this.queue_down.Add (announcement); + if (IsRecentAnnounement(announcement) ){ + SparkleHelpers.DebugInfo ("Listener", + "Ignoring previously processed message " + announcement.Message + + " from " + announcement.FolderIdentifier + " on " + this.server); + + return; + } + + SparkleHelpers.DebugInfo ("Listener", + "Processing message " + announcement.Message + " from " + announcement.FolderIdentifier + " on " + this.server); + + AddRecentAnnouncement (announcement); + this.queue_down [announcement.FolderIdentifier] = announcement; if (Announcement != null) Announcement (announcement); } + private bool IsRecentAnnounement (SparkleAnnouncement announcement) + { + if (!HasRecentAnnouncements (announcement.FolderIdentifier)) { + return false; + + } else { + foreach (SparkleAnnouncement recent_announcement in GetRecentAnnouncements (announcement.FolderIdentifier)) { + if (recent_announcement.Message.Equals (announcement.Message)) + return true; + } + + return false; + } + } + + + private List GetRecentAnnouncements (string folder_identifier) + { + if (!this.recent_announcements.ContainsKey (folder_identifier)) + this.recent_announcements [folder_identifier] = new List (); + + return (List) this.recent_announcements [folder_identifier]; + } + + + private void AddRecentAnnouncement (SparkleAnnouncement announcement) + { + List recent_announcements = this.GetRecentAnnouncements (announcement.FolderIdentifier); + + if (!IsRecentAnnounement (announcement)) + recent_announcements.Add (announcement); + + if (recent_announcements.Count > this.max_recent_announcements) + recent_announcements.RemoveRange (0, (recent_announcements.Count - this.max_recent_announcements)); + } + + + private bool HasRecentAnnouncements (string folder_identifier) + { + return this.recent_announcements.ContainsKey (folder_identifier); + } + + public virtual void Dispose () { this.reconnect_timer.Dispose (); @@ -225,3 +279,4 @@ namespace SparkleLib { } } } + diff --git a/SparkleLib/SparkleListenerTcp.cs b/SparkleLib/SparkleListenerTcp.cs index c844bf02..15268a94 100755 --- a/SparkleLib/SparkleListenerTcp.cs +++ b/SparkleLib/SparkleListenerTcp.cs @@ -29,7 +29,7 @@ namespace SparkleLib { public class SparkleListenerTcp : SparkleListenerBase { private Thread thread; - + // these are shared private readonly Object mutex = new Object(); private Socket socket; @@ -93,11 +93,14 @@ namespace SparkleLib { if (bytes_read > 0) { string received = Encoding.UTF8.GetString (bytes); - string folder_identifier = received.Substring (0, received.IndexOf ("!")); - string message = received.Substring (received.IndexOf ("!") + 1); - - OnAnnouncement (new SparkleAnnouncement (folder_identifier, message)); - + string line = received.Substring (0, received.IndexOf ("\n")); + if (!line.Contains ("!")) + continue; + string folder_identifier = line.Substring (0, line.IndexOf ("!")); + string message = this.CleanMessage (line.Substring (line.IndexOf ("!") + 1)); + if (!folder_identifier.Equals("debug") && + !String.IsNullOrEmpty(message)) + OnAnnouncement (new SparkleAnnouncement (folder_identifier, message)); } else { SparkleHelpers.DebugInfo ("ListenerTcp", "Error on socket"); @@ -109,9 +112,9 @@ namespace SparkleLib { } } } - + SparkleHelpers.DebugInfo ("ListenerTcp", "Disconnected from " + Server.Host); - + } catch (SocketException e) { SparkleHelpers.DebugInfo ("ListenerTcp", "Could not connect to " + Server + ": " + e.Message); @@ -127,6 +130,7 @@ namespace SparkleLib { public override void AlsoListenTo (string folder_identifier) { string channel = folder_identifier; + if (!base.channels.Contains (channel)) { base.channels.Add (channel); @@ -136,13 +140,13 @@ namespace SparkleLib { string to_send = "subscribe " + folder_identifier + "\n"; try { - lock (this.mutex) { this.socket.Send (Encoding.UTF8.GetBytes (to_send)); } + } catch (SocketException e) { - SparkleHelpers.DebugInfo ("ListenerTcp", "Could not connect to " + Server + ": " + e.Message); - OnDisconnected (); + SparkleHelpers.DebugInfo ("ListenerTcp", "Could not connect to " + Server + ": " + e.Message); + OnDisconnected (); } } } @@ -173,5 +177,10 @@ namespace SparkleLib { this.thread.Join (); base.Dispose (); } + + private string CleanMessage(string message) + { + return message.Trim ().Replace ("\n", "").Replace ("\0", ""); + } } } diff --git a/SparkleLib/SparkleRepoBase.cs b/SparkleLib/SparkleRepoBase.cs index 1ca3d1df..1d775174 100755 --- a/SparkleLib/SparkleRepoBase.cs +++ b/SparkleLib/SparkleRepoBase.cs @@ -21,6 +21,7 @@ using System.IO; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Timers; using System.Xml; @@ -41,12 +42,13 @@ namespace SparkleLib { private SparkleWatcher watcher; private TimeSpan poll_interval; - private Timer local_timer = new Timer () { Interval = 0.25 * 1000 }; - private Timer remote_timer = new Timer () { Interval = 10 * 1000 }; + private System.Timers.Timer local_timer = new System.Timers.Timer () { Interval = 0.25 * 1000 }; + private System.Timers.Timer remote_timer = new System.Timers.Timer () { Interval = 10 * 1000 }; private DateTime last_poll = DateTime.Now; - private List sizebuffer = new List (); + private List sizebuffer = new List (); private bool has_changed = false; private Object change_lock = new Object (); + private Object watch_lock = new Object (); protected SparkleListenerBase listener; protected SyncStatus status; @@ -116,12 +118,6 @@ namespace SparkleLib { if (CheckForRemoteChanges ()) SyncDownBase (); - - string message; - while ((message = this.listener.NextQueueDownMessage (identifier)) != null) { - if (!message.Equals (CurrentRevision)) - SyncDownBase (); - } } // In the unlikely case that we haven't synced up our @@ -138,6 +134,7 @@ namespace SparkleLib { while (HasUnsyncedChanges) SyncUpBase (); + EnableWatching (); } @@ -244,18 +241,30 @@ namespace SparkleLib { { this.listener = SparkleListenerFactory.CreateListener (Name, Identifier); + if (this.listener.IsConnected) { + this.poll_interval = this.long_interval; + + new Thread (new ThreadStart (delegate { + if (!IsSyncing && CheckForRemoteChanges ()) + SyncDownBase (); + })).Start (); + } + // Stop polling when the connection to the irc channel is succesful this.listener.Connected += delegate { this.poll_interval = this.long_interval; this.last_poll = DateTime.Now; - // Check for changes manually one more time - if (CheckForRemoteChanges ()) - SyncDownBase (); + if (!IsSyncing) { - // Push changes that were made since the last disconnect - if (HasUnsyncedChanges) - SyncUpBase (); + // Check for changes manually one more time + if (CheckForRemoteChanges ()) + SyncDownBase (); + + // Push changes that were made since the last disconnect + if (HasUnsyncedChanges) + SyncUpBase (); + } }; // Start polling when the connection to the irc channel is lost @@ -271,22 +280,29 @@ namespace SparkleLib { if (announcement.FolderIdentifier.Equals (identifier) && !announcement.Message.Equals (CurrentRevision)) { - if ((Status != SyncStatus.SyncUp) && - (Status != SyncStatus.SyncDown) && - !this.is_buffering) { + while (this.IsSyncing) + System.Threading.Thread.Sleep (100); - string message; - while ((message = this.listener.NextQueueDownMessage (identifier)) != null) { - if (!message.Equals (CurrentRevision)) - SyncDownBase (); - } - } + SparkleHelpers.DebugInfo ("Listener", "Syncing due to announcement"); + SyncDownBase (); + + } else { + if (announcement.FolderIdentifier.Equals (identifier)) + SparkleHelpers.DebugInfo ("Listener", "Not syncing, message is for current revision"); } }; - + // Start listening - if (!this.listener.IsConnected && !this.listener.IsConnecting) { + if (!this.listener.IsConnected && !this.listener.IsConnecting) this.listener.Connect (); + } + + + private bool IsSyncing { + get { + return (Status == SyncStatus.SyncUp || + Status == SyncStatus.SyncDown || + this.is_buffering); } } @@ -297,7 +313,7 @@ namespace SparkleLib { if (this.has_changed) { if (this.sizebuffer.Count >= 4) this.sizebuffer.RemoveAt (0); - + DirectoryInfo dir_info = new DirectoryInfo (LocalPath); this.sizebuffer.Add (CalculateFolderSize (dir_info)); @@ -309,7 +325,7 @@ namespace SparkleLib { SparkleHelpers.DebugInfo ("Local", "[" + Name + "] Changes have settled."); this.is_buffering = false; this.has_changed = false; - + DisableWatching (); while (AnyDifferences) SyncUpBase (); @@ -485,6 +501,8 @@ namespace SparkleLib { if (SyncStatusChanged != null) SyncStatusChanged (SyncStatus.SyncDown); + string pre_sync_revision = CurrentRevision; + if (SyncDown ()) { SparkleHelpers.DebugInfo ("SyncDown", "[" + Name + "] Done"); this.server_online = true; @@ -492,24 +510,27 @@ namespace SparkleLib { if (SyncStatusChanged != null) SyncStatusChanged (SyncStatus.Idle); - List change_sets = GetChangeSets (1); - if (change_sets != null && change_sets.Count > 0) { - SparkleChangeSet change_set = change_sets [0]; + if (!pre_sync_revision.Equals (CurrentRevision)) { + List change_sets = GetChangeSets (1); - bool note_added = false; - foreach (string added in change_set.Added) { - if (added.Contains (".notes")) { - if (NewNote != null) - NewNote (change_set.User.Name, change_set.User.Email); + if (change_sets != null && change_sets.Count > 0) { + SparkleChangeSet change_set = change_sets [0]; - note_added = true; - break; + bool note_added = false; + foreach (string added in change_set.Added) { + if (added.Contains (".notes")) { + if (NewNote != null) + NewNote (change_set.User.Name, change_set.User.Email); + + note_added = true; + break; + } } - } - if (!note_added) { - if (NewChangeSet != null) - NewChangeSet (change_set); + if (!note_added) { + if (NewChangeSet != null) + NewChangeSet (change_set); + } } } @@ -537,15 +558,19 @@ namespace SparkleLib { public void DisableWatching () { - this.watcher.EnableRaisingEvents = false; - this.local_timer.Stop (); + lock (watch_lock) { + this.watcher.EnableRaisingEvents = false; + this.local_timer.Stop (); + } } public void EnableWatching () { - this.watcher.EnableRaisingEvents = true; - this.local_timer.Start (); + lock (watch_lock) { + this.watcher.EnableRaisingEvents = true; + this.local_timer.Start (); + } } diff --git a/SparkleShare/Mac/Makefile.am b/SparkleShare/Mac/Makefile.am index 4313776a..c7df923a 100755 --- a/SparkleShare/Mac/Makefile.am +++ b/SparkleShare/Mac/Makefile.am @@ -1,16 +1,20 @@ EXTRA_DIST = \ AppDelegate.cs \ + Growl.framework \ + Growl.plist \ Info.plist \ MainMenu.xib \ MainMenu.xib.designer.cs \ SparkleAbout.cs \ SparkleAlert.cs \ - SparkleSetup.cs \ + SparkleBadger.cs \ + SparkleBubbles.cs \ + SparkleController.cs \ SparkleEventLog.cs \ - SparkleMacController.cs \ SparkleMacWatcher.cs \ + SparkleSetup.cs \ + SparkleSetupWindow.cs \ SparkleShare.csproj \ SparkleShare.sln \ SparkleStatusIcon.cs \ - SparkleUI.cs \ - SparkleSetupWindow.cs + SparkleUI.cs diff --git a/SparkleShare/Mac/SparkleSetup.cs b/SparkleShare/Mac/SparkleSetup.cs index 226b6e8c..f03cc37b 100755 --- a/SparkleShare/Mac/SparkleSetup.cs +++ b/SparkleShare/Mac/SparkleSetup.cs @@ -41,14 +41,16 @@ namespace SparkleShare { private NSButton SkipTutorialButton; private NSButton OpenFolderButton; private NSButton FinishButton; - private NSButton AddProjectButton; private NSImage SlideImage; private NSImageView SlideImageView; - private NSForm UserInfoForm; private NSProgressIndicator ProgressIndicator; + private NSTextField EmailLabel; + private NSTextField EmailTextField; + private NSTextField FullNameTextField; + private NSTextField FullNameLabel; private NSTextField AddressTextField; - private NSTextField PathTextField; private NSTextField AddressLabel; + private NSTextField PathTextField; private NSTextField PathLabel; private NSTextField PathHelpLabel; private NSTextField AddProjectTextField; @@ -73,18 +75,36 @@ namespace SparkleShare { Description = "Before we can create a SparkleShare folder on this " + "computer, we need some information from you."; - UserInfoForm = new NSForm (new RectangleF (250, Frame.Height - 280, 350, 64)); - UserInfoForm.AddEntry ("Full Name:"); - UserInfoForm.AddEntry ("Email Address:"); + FullNameLabel = new NSTextField () { + Alignment = NSTextAlignment.Right, + BackgroundColor = NSColor.WindowBackground, + Bordered = false, + Editable = false, + Frame = new RectangleF (165, Frame.Height - 234, 160, 17), + StringValue = "Full Name:", + Font = SparkleUI.Font + }; - UserInfoForm.CellSize = new SizeF (280, 22); - UserInfoForm.IntercellSpacing = new SizeF (4, 4); - UserInfoForm.Cells [0].LineBreakMode = NSLineBreakMode.TruncatingTail; - UserInfoForm.Cells [1].LineBreakMode = NSLineBreakMode.TruncatingTail; + FullNameTextField = new NSTextField () { + Frame = new RectangleF (330, Frame.Height - 238, 196, 22), + StringValue = Controller.GuessedUserName + }; - UserInfoForm.Cells [0].StringValue = Controller.GuessedUserName; - UserInfoForm.Cells [1].StringValue = Controller.GuessedUserEmail; + EmailLabel = new NSTextField () { + Alignment = NSTextAlignment.Right, + BackgroundColor = NSColor.WindowBackground, + Bordered = false, + Editable = false, + Frame = new RectangleF (165, Frame.Height - 264, 160, 17), + StringValue = "Email:", + Font = SparkleUI.Font + }; + + EmailTextField = new NSTextField () { + Frame = new RectangleF (330, Frame.Height - 268, 196, 22), + StringValue = Controller.GuessedUserEmail + }; // TODO: Ugly hack, do properly with events timer = new Timer () { @@ -100,18 +120,18 @@ namespace SparkleShare { timer.Stop (); timer = null; - string full_name = UserInfoForm.Cells [0].StringValue.Trim (); - string email = UserInfoForm.Cells [1].StringValue.Trim (); + string full_name = FullNameTextField.StringValue.Trim (); + string email = EmailTextField.StringValue.Trim (); Controller.SetupPageCompleted (full_name, email); }; timer.Elapsed += delegate { InvokeOnMainThread (delegate { - bool name_is_valid = !UserInfoForm.Cells [0].StringValue.Trim ().Equals (""); + bool name_is_valid = !FullNameTextField.StringValue.Trim ().Equals (""); bool email_is_valid = Program.Controller.IsValidEmail ( - UserInfoForm.Cells [1].StringValue.Trim ()); + EmailTextField.StringValue.Trim ()); ContinueButton.Enabled = (name_is_valid && email_is_valid); }); @@ -119,7 +139,11 @@ namespace SparkleShare { timer.Start (); - ContentView.AddSubview (UserInfoForm); + ContentView.AddSubview (FullNameLabel); + ContentView.AddSubview (FullNameTextField); + ContentView.AddSubview (EmailLabel); + ContentView.AddSubview (EmailTextField); + Buttons.Add (ContinueButton); break; @@ -161,7 +185,8 @@ namespace SparkleShare { PathTextField = new NSTextField () { Frame = new RectangleF (190 + 196 + 16, Frame.Height - 336, 196, 22), StringValue = Controller.PreviousPath, - Enabled = (Controller.SelectedPlugin.Path == null) + Enabled = (Controller.SelectedPlugin.Path == null), + Bezeled = true }; @@ -567,14 +592,6 @@ namespace SparkleShare { "to add one by hand." }; - AddProjectButton = new NSButton () { - Title = "Add Project…" - }; - - AddProjectButton.Activated += delegate { - Controller.TutorialPageCompleted (); - }; - FinishButton = new NSButton () { Title = "Finish" }; @@ -600,7 +617,6 @@ namespace SparkleShare { ContentView.AddSubview (SlideImageView); ContentView.AddSubview (AddProjectTextField); Buttons.Add (FinishButton); - Buttons.Add (AddProjectButton); break; } diff --git a/SparkleShare/Mac/SparkleShare.csproj b/SparkleShare/Mac/SparkleShare.csproj index d9c0e8f1..d2f87467 100755 --- a/SparkleShare/Mac/SparkleShare.csproj +++ b/SparkleShare/Mac/SparkleShare.csproj @@ -66,6 +66,7 @@ False ..\..\bin\SparkleLib.dll + diff --git a/SparkleShare/Mac/SparkleStatusIcon.cs b/SparkleShare/Mac/SparkleStatusIcon.cs index 50238afe..55563d69 100755 --- a/SparkleShare/Mac/SparkleStatusIcon.cs +++ b/SparkleShare/Mac/SparkleStatusIcon.cs @@ -147,9 +147,11 @@ namespace SparkleShare { StatusItem.AlternateImage.Size = new SizeF (16, 16); Menu = new NSMenu (); + Menu.AutoEnablesItems = false; StateMenuItem = new NSMenuItem () { - Title = StateText + Title = StateText, + Enabled = false }; Menu.AddItem (StateMenuItem); @@ -165,6 +167,7 @@ namespace SparkleShare { FolderMenuItem.Image = SparkleShareImage; FolderMenuItem.Image.Size = new SizeF (16, 16); + FolderMenuItem.Enabled = true; Menu.AddItem (FolderMenuItem); @@ -189,7 +192,8 @@ namespace SparkleShare { FolderMenuItems [i] = item; FolderMenuItems [i].Activated += Tasks [i]; - + FolderMenuItem.Enabled = true; + i++; }; @@ -197,7 +201,8 @@ namespace SparkleShare { FolderMenuItems = new NSMenuItem [1]; FolderMenuItems [0] = new NSMenuItem () { - Title = "No projects yet" + Title = "No projects yet", + Enabled = false }; } @@ -207,7 +212,8 @@ namespace SparkleShare { Menu.AddItem (NSMenuItem.SeparatorItem); SyncMenuItem = new NSMenuItem () { - Title = "Add Hosted Project…" + Title = "Add Hosted Project…", + Enabled = true }; if (!Program.Controller.FirstRun) { @@ -233,7 +239,8 @@ namespace SparkleShare { Menu.AddItem (NSMenuItem.SeparatorItem); RecentEventsMenuItem = new NSMenuItem () { - Title = "Open Recent Events" + Title = "Open Recent Events", + Enabled = true }; if (Controller.Folders.Length > 0) { @@ -252,7 +259,9 @@ namespace SparkleShare { Menu.AddItem (RecentEventsMenuItem); - NotificationsMenuItem = new NSMenuItem (); + NotificationsMenuItem = new NSMenuItem () { + Enabled = true + }; if (Program.Controller.NotificationsEnabled) NotificationsMenuItem.Title = "Turn Notifications Off"; @@ -274,7 +283,8 @@ namespace SparkleShare { Menu.AddItem (NSMenuItem.SeparatorItem); AboutMenuItem = new NSMenuItem () { - Title = "About SparkleShare" + Title = "About SparkleShare", + Enabled = true }; AboutMenuItem.Activated += delegate { diff --git a/SparkleShare/Nautilus/Makefile.am b/SparkleShare/Nautilus/Makefile.am index 68b8772d..8240d060 100755 --- a/SparkleShare/Nautilus/Makefile.am +++ b/SparkleShare/Nautilus/Makefile.am @@ -1,10 +1,15 @@ SOURCES = \ - sparkleshare-nautilus-extension.py + sparkleshare-nautilus-extension.py \ + sparkleshare-nautilus3-extension.py -if NAUTILUS_EXTENSION_ENABLED +if NAUTILUS2_EXTENSION_ENABLED NAUTILUS_PYTHON_INSTALL_DIR=$(subst $(NAUTILUS_PREFIX)/,${prefix}/,$(NAUTILUS_PYTHON_DIR)) extensiondir = $(NAUTILUS_PYTHON_INSTALL_DIR) -extension_SCRIPTS = $(addprefix $(srcdir)/, $(SOURCES)) -else -EXTRA_DIST = $(SOURCES) sparkleshare-nautilus-extension.py.in +extension_SCRIPTS = $(addprefix $(srcdir)/, sparkleshare-nautilus-extension.py)) endif +if NAUTILUS3_EXTENSION_ENABLED +NAUTILUS_PYTHON_INSTALL_DIR=$(subst $(NAUTILUS_PREFIX)/,${prefix}/,$(NAUTILUS_PYTHON_DIR)) +extensiondir = $(NAUTILUS_PYTHON_INSTALL_DIR) +extension_SCRIPTS = $(addprefix $(srcdir)/, sparkleshare-nautilus3-extension.py) +endif +EXTRA_DIST = $(SOURCES) sparkleshare-nautilus-extension.py.in sparkleshare-nautilus3-extension.py.in diff --git a/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in b/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in index a43d761a..717761bc 100755 --- a/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in +++ b/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in @@ -1,3 +1,4 @@ +#!/usr/bin/python # SparkleShare, an instant update workflow to Git. # Copyright (C) 2010 Hylke Bons # diff --git a/SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py b/SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in similarity index 98% rename from SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py rename to SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in index e3abdd44..e4de79c7 100755 --- a/SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py +++ b/SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in @@ -1,3 +1,4 @@ +#!/usr/bin/python # SparkleShare, an instant update workflow to Git. # Copyright (C) 2010 Hylke Bons # @@ -25,7 +26,7 @@ from gi.repository import Nautilus, GObject, Gtk, Gdk SPARKLESHARE_PATH = os.path.join (os.path.expanduser ('~'), "SparkleShare") import gettext -gettext.bindtextdomain('sparkleshare', '/usr/share/locale') +gettext.bindtextdomain('sparkleshare', '@prefix@/share/locale') gettext.textdomain('sparkleshare') _ = gettext.gettext diff --git a/SparkleShare/SparkleAbout.cs b/SparkleShare/SparkleAbout.cs index 6d0a18f9..6a35cf78 100755 --- a/SparkleShare/SparkleAbout.cs +++ b/SparkleShare/SparkleAbout.cs @@ -97,9 +97,6 @@ namespace SparkleShare { private void CreateAbout () { - Gdk.Color color = Style.Foreground (StateType.Insensitive); - string secondary_text_color = SparkleUIHelpers.GdkColorToHex (color); - Label version = new Label () { Markup = "" + "version " + Controller.RunningVersion + diff --git a/SparkleShare/SparkleAboutController.cs b/SparkleShare/SparkleAboutController.cs index 5495dfc9..801d84a6 100755 --- a/SparkleShare/SparkleAboutController.cs +++ b/SparkleShare/SparkleAboutController.cs @@ -71,19 +71,26 @@ namespace SparkleShare { if (args.Error != null) return; - string new_version = args.Result.Trim (); + int running_version = int.Parse ( + "" + RunningVersion [0] + RunningVersion [2] + RunningVersion [4] + ); + + string result = args.Result.Trim (); + int new_version = int.Parse ( + "" + result [0] + result [2] + result [4] + ); // Add a little delay, making it seems we're // actually doing hard work Thread.Sleep (2 * 1000); - if (RunningVersion.Equals (new_version)) { + if (running_version >= new_version) { if (VersionUpToDateEvent != null) VersionUpToDateEvent (); } else { if (NewVersionEvent != null) - NewVersionEvent (new_version); + NewVersionEvent (result); } this.version_checker.Start (); diff --git a/SparkleShare/SparkleControllerBase.cs b/SparkleShare/SparkleControllerBase.cs index dd333958..4f202b00 100644 --- a/SparkleShare/SparkleControllerBase.cs +++ b/SparkleShare/SparkleControllerBase.cs @@ -83,6 +83,7 @@ namespace SparkleShare { public abstract string PluginsPath { get; } private SparkleFetcherBase fetcher; + private List failed_avatars = new List (); // Short alias for the translations @@ -901,15 +902,15 @@ namespace SparkleShare { // Add some restrictions to what the key can // do when uploaded to the server - string public_key = File.ReadAllText (key_file_path + ".pub"); - public_key = "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " + public_key; - File.WriteAllText (key_file_path + ".pub", public_key); + // string public_key = File.ReadAllText (key_file_path + ".pub"); + // public_key = "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " + public_key; + // File.WriteAllText (key_file_path + ".pub", public_key); // Create an easily accessible copy of the public // key in the user's SparkleShare folder File.Copy (key_file_path + ".pub", - Path.Combine (SparklePath, UserName + "'s key.txt")); - + Path.Combine (SparklePath, UserName + "'s key.txt"), + true); // Overwriting is allowed } } @@ -944,10 +945,21 @@ namespace SparkleShare { // Delete avatars older than a month if (avatar_info.CreationTime < DateTime.Now.AddMonths (-1)) { - avatar_info.Delete (); - old_avatars.Add (email); + try { + avatar_info.Delete (); + old_avatars.Add (email); + + } catch (FileNotFoundException) { + // FIXME: For some reason the previous File.Exists () check + // doesn't cover all cases sometimes, so we catch any errors + + if (old_avatars.Contains (email)) + old_avatars.Remove (email); + } } + } else if (this.failed_avatars.Contains (email)) { + break; } else { WebClient client = new WebClient (); string url = "http://gravatar.com/avatar/" + GetMD5 (email) + @@ -969,8 +981,11 @@ namespace SparkleShare { SparkleHelpers.DebugInfo ("Controller", "Failed fetching gravatar for " + email); // Stop downloading further avatars if we have no internet access - if (e.Status == WebExceptionStatus.Timeout) + if (e.Status == WebExceptionStatus.Timeout){ break; + } else { + this.failed_avatars.Add (email); + } } } } diff --git a/SparkleShare/SparkleSetup.cs b/SparkleShare/SparkleSetup.cs index 6633088a..84a7ffd8 100755 --- a/SparkleShare/SparkleSetup.cs +++ b/SparkleShare/SparkleSetup.cs @@ -218,7 +218,7 @@ namespace SparkleShare { TreeSelection selection = (sender as TreeView).Selection; selection.GetSelected (out model, out iter); - SparklePlugin plugin = (SparklePlugin) model.GetValue (iter, 2); + // SparklePlugin plugin = (SparklePlugin) model.GetValue (iter, 2); int selected_path = int.Parse (model.GetPath (iter).ToString ()); Controller.SelectedPluginChanged (selected_path); @@ -333,7 +333,7 @@ namespace SparkleShare { case PageType.Syncing: { Header = String.Format (_("Adding project ‘{0}’…"), Controller.SyncingFolder); - Description = _("This may take a while." + Environment.NewLine) + + Description = _("This may take a while.") + Environment.NewLine + _("Are you sure it’s not coffee o'clock?"); Button finish_button = new Button () { @@ -548,11 +548,6 @@ namespace SparkleShare { Image slide = SparkleUIHelpers.GetImage ("tutorial-slide-4.png"); - Button add_project_button = new Button (_("Add Hosted Project…")); - add_project_button.Clicked += delegate { - Controller.TutorialPageCompleted (); - }; - Button finish_button = new Button (_("Finish")); finish_button.Clicked += delegate { Close (); @@ -564,8 +559,6 @@ namespace SparkleShare { box.Add (label); Add (box); - - AddButton (add_project_button); AddButton (finish_button); break; diff --git a/build/m4/sparkleshare/nautilus-python.m4 b/build/m4/sparkleshare/nautilus-python.m4 index 1256f362..cec0a72e 100755 --- a/build/m4/sparkleshare/nautilus-python.m4 +++ b/build/m4/sparkleshare/nautilus-python.m4 @@ -1,14 +1,34 @@ AC_DEFUN([SPARKLESHARE_NAUTILUS_PYTHON], [ - PKG_CHECK_MODULES(NAUTILUS_PYTHON, nautilus-python, have_nautilus_python=yes, have_nautilus_python=no) - if test "x$have_nautilus_python" = "xyes"; then - NAUTILUS_PREFIX="`$PKG_CONFIG --variable=prefix nautilus-python`" - AC_SUBST(NAUTILUS_PREFIX) - NAUTILUS_PYTHON_DIR="`$PKG_CONFIG --variable=pythondir nautilus-python`" - AC_SUBST(NAUTILUS_PYTHON_DIR) - AM_CONDITIONAL(NAUTILUS_EXTENSION_ENABLED, true) + AC_ARG_ENABLE(nautilus-extension, + AC_HELP_STRING([--disable-nautilus-extension],[Do not install the Nautilus plugin]), enable_nautilus_extension=$enableval, enable_nautilus_extension=yes ) + if test x$enable_nautilus_extension = xyes; then + PKG_CHECK_MODULES(NAUTILUS_PYTHON, nautilus-python < 1.1, have_nautilus2_python=yes, have_nautilus2_python=no) + if test "x$have_nautilus2_python" = "xyes"; then + NAUTILUS_PREFIX="`$PKG_CONFIG --variable=prefix nautilus-python`" + AC_SUBST(NAUTILUS_PREFIX) + NAUTILUS_PYTHON_DIR="`$PKG_CONFIG --variable=pythondir nautilus-python`" + AC_SUBST(NAUTILUS_PYTHON_DIR) + AM_CONDITIONAL(NAUTILUS2_EXTENSION_ENABLED, true) + else + AM_CONDITIONAL(NAUTILUS2_EXTENSION_ENABLED, false) + fi + PKG_CHECK_MODULES(NAUTILUS3_PYTHON, nautilus-python >= 1.1, have_nautilus3_python=yes, have_nautilus3_python=no) + if test "x$have_nautilus3_python" = "xyes"; then + NAUTILUS_PREFIX="`$PKG_CONFIG --variable=prefix nautilus-python`" + AC_SUBST(NAUTILUS_PREFIX) + NAUTILUS_PYTHON_DIR="`$PKG_CONFIG --variable=pythondir nautilus-python`" + AC_SUBST(NAUTILUS_PYTHON_DIR) + AM_CONDITIONAL(NAUTILUS3_EXTENSION_ENABLED, true) + else + AM_CONDITIONAL(NAUTILUS3_EXTENSION_ENABLED, false) + fi else - AM_CONDITIONAL(NAUTILUS_EXTENSION_ENABLED, false) + have_nautilus2_python="disabled" + have_nautilus3_python="disabled" fi + + AM_CONDITIONAL(NAUTILUS2_EXTENSION_ENABLED, test "x$enable_nautilus_extension" = "xyes") + AM_CONDITIONAL(NAUTILUS3_EXTENSION_ENABLED, test "x$enable_nautilus_extension" = "xyes") ]) diff --git a/configure.ac b/configure.ac index ca8c6046..2116eb11 100755 --- a/configure.ac +++ b/configure.ac @@ -1,9 +1,9 @@ dnl Process this file with autoconf to produce a configure script. m4_define([sparkleshare_version], - [0.2.5]) + [0.4.0]) m4_define([sparkleshare_asm_version], - [0.2.5]) + [0.4.0]) AC_PREREQ([2.54]) AC_INIT([SparkleShare], sparkleshare_version) @@ -175,6 +175,7 @@ SparkleShare/Makefile SparkleShare/Mac/Makefile SparkleShare/Nautilus/Makefile SparkleShare/Nautilus/sparkleshare-nautilus-extension.py +SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py po/Makefile.in Makefile ]) @@ -185,7 +186,8 @@ SparkleShare ${VERSION} Configuration: Prefix : ${prefix} Build Gtk+ UI : ${enable_gtkui} - Nautilus plugin : ${have_nautilus_python} + Nautilus 2.x plugin : ${have_nautilus2_python} + Nautilus 3.x plugin : ${have_nautilus3_python} User Help : ${enable_user_help} (requires gnome-doc-utils >= 0.17.3) " diff --git a/data/git-hooks/post-update b/data/git-hooks/post-update new file mode 100755 index 00000000..45078f3c --- /dev/null +++ b/data/git-hooks/post-update @@ -0,0 +1,29 @@ +#!/bin/sh + +# for use with gitolite +# +# http://sitaramc.github.com/gitolite/hooks.html +# copy this file to +# .gitolite/hooks/common/post-update +# run gl-setup again + +# for use with standard ssh/http(s)/git repos +# +# simply move this file to +# .git/hooks/post-update in the remote repository + +# make sure to chmod -x in all cases after the file has been copied + +#To supress all output +exec > /dev/null 2>&1 + +# for information on running your own server +# https://github.com/hbons/fanout.node.js +SERVER="204.62.14.135" +PORT="1986" +CHANNEL=$(git rev-list --reverse HEAD | head -n 1) +MESSAGE=$(git rev-list HEAD | head -n 1) +DATA="announce ${CHANNEL} ${MESSAGE}" +echo "${DATA}\n" | socat - TCP-CONNECT:${SERVER}:${PORT} & + +exit 0 diff --git a/data/plugins/Makefile.am b/data/plugins/Makefile.am index 8bf7b4ab..45a936af 100644 --- a/data/plugins/Makefile.am +++ b/data/plugins/Makefile.am @@ -17,7 +17,7 @@ dist_plugins_DATA = \ pluginsdir = $(pkgdatadir)/plugins/ -EXTRA_DIST=$(xml_in_files) $(xml_DATA) +EXTRA_DIST=$(dist_plugins_in_files) $(xml_DATA) MAINTAINERCLEANFILES = \ Makefile.in diff --git a/po/POTFILES.in b/po/POTFILES.in index 02cf6655..fbf8c10f 100755 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -10,6 +10,7 @@ data/plugins/own-server.xml.in SparkleShare/Mac/SparkleStatusIcon.cs SparkleShare/Mac/SparkleUI.cs SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in +SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in SparkleShare/Program.cs SparkleShare/SparkleAbout.cs SparkleShare/SparkleController.cs diff --git a/po/POTFILES.skip b/po/POTFILES.skip index e340ffb1..0ef022e2 100755 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -1,3 +1,4 @@ MacCore/src/Options.cs SparkleShare/Nautilus/sparkleshare-nautilus-extension.py +SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py SparkleLib/SparkleOptions.cs diff --git a/po/de.po b/po/de.po index 0b1a334e..9ce2741f 100755 --- a/po/de.po +++ b/po/de.po @@ -6,18 +6,20 @@ # Heffer , 2011. # Jan-Christoph Borchardt , 2011. # kabum , 2011. +# , 2011. # kxnop , 2011. # Łukasz Jernaś , 2011. # , 2011. +# Sascha , 2011. # , 2011. # , 2011. msgid "" msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"POT-Creation-Date: 2011-11-12 18:42+0100\n" +"PO-Revision-Date: 2011-11-14 07:55+0000\n" +"Last-Translator: iwsnipy \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -26,11 +28,11 @@ msgstr "" #: ../data/plugins/bitbucket.xml.in.h:1 ../data/plugins/github.xml.in.h:1 msgid "/username/project" -msgstr "" +msgstr "/username/project" #: ../data/plugins/bitbucket.xml.in.h:2 msgid "Bitbucket" -msgstr "" +msgstr "Bitbucket" #: ../data/plugins/bitbucket.xml.in.h:3 msgid "Free code hosting for Git and Mercurial" @@ -42,11 +44,11 @@ msgstr "" #: ../data/plugins/github.xml.in.h:3 msgid "Github" -msgstr "" +msgstr "Github" #: ../data/plugins/gitorious.xml.in.h:1 msgid "/project/repository" -msgstr "" +msgstr "/Projekt/Ablage" #: ../data/plugins/gitorious.xml.in.h:2 msgid "Gitorious" @@ -58,11 +60,11 @@ msgstr "" #: ../data/plugins/gnome.xml.in.h:1 msgid "/project" -msgstr "" +msgstr "/Projekt" #: ../data/plugins/gnome.xml.in.h:2 msgid "A free and easy interface for your computer" -msgstr "" +msgstr "Eine freie und einfache Schnittstelle für deinen Computer" #: ../data/plugins/gnome.xml.in.h:3 msgid "The GNOME Project" @@ -70,57 +72,62 @@ msgstr "Das GNOME Projekt" #: ../data/plugins/own-server.xml.in.h:1 msgid "/path/to/project" -msgstr "" +msgstr "/Pfad/zum/Projekt" #: ../data/plugins/own-server.xml.in.h:2 msgid "Everything under my control" -msgstr "" +msgstr "Alles unter meiner Kontrolle" #: ../data/plugins/own-server.xml.in.h:3 msgid "On my own server" -msgstr "" +msgstr "Auf meinem eigenen Server" -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:70 -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:88 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:84 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:102 #: ../SparkleShare/SparkleSetup.cs:75 ../SparkleShare/SparkleStatusIcon.cs:75 #: ../SparkleShare/SparkleStatusIcon.cs:89 msgid "Welcome to SparkleShare!" msgstr "Willkommen bei SparkleShare!" -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:72 -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:90 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:86 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:104 #: ../SparkleShare/SparkleStatusIcon.cs:77 #: ../SparkleShare/SparkleStatusIcon.cs:91 msgid "Up to date" -msgstr "Schon auf dem aktuellsten Stand." +msgstr "Aktualisiert" -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:99 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:113 #: ../SparkleShare/SparkleStatusIcon.cs:106 msgid "Syncing…" -msgstr "Abgleichen …" +msgstr "Synchronisiere..." -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:109 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:123 #: ../SparkleShare/SparkleStatusIcon.cs:116 msgid "Not everything is synced" -msgstr "Nicht alles ist synchronisiert" +msgstr "Es ist nicht alles synchronisiert" #: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113 +#: ../SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in:140 msgid "Copy Web Link" -msgstr "Internetadresse kopieren" +msgstr "Web Link kopieren" #: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114 +#: ../SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in:141 msgid "Copy the web address of this file to the clipboard" msgstr "Die Internetadresse dieser Datei in die Zwischenablage kopieren" #: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147 +#: ../SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in:173 msgid "Get Earlier Version" msgstr "Frühere Version abrufen" #: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148 +#: ../SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in:174 msgid "Make a copy of an earlier version in this folder" msgstr "Erstelle eine Kopie einer früheren Version in diesem Verzeichnis" #: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161 +#: ../SparkleShare/Nautilus/sparkleshare-nautilus3-extension.py.in:187 msgid "Select to get a copy of this version" msgstr "Selektieren, um eine Kopie dieser Version abzurufen" @@ -196,42 +203,42 @@ msgstr "Sie verwenden die aktuelle Version." msgid "Checking for updates..." msgstr "Suche Aktualisierungen..." -#: ../SparkleShare/SparkleControllerBase.cs:493 +#: ../SparkleShare/SparkleControllerBase.cs:494 msgid "dddd, MMMM d, yyyy" msgstr "" -#: ../SparkleShare/SparkleControllerBase.cs:499 +#: ../SparkleShare/SparkleControllerBase.cs:500 msgid "dddd, MMMM d" msgstr "" -#: ../SparkleShare/SparkleControllerBase.cs:707 +#: ../SparkleShare/SparkleControllerBase.cs:708 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "Hinzugefügt '{0}'" -#: ../SparkleShare/SparkleControllerBase.cs:712 +#: ../SparkleShare/SparkleControllerBase.cs:713 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "'{0}' verschoben" -#: ../SparkleShare/SparkleControllerBase.cs:717 +#: ../SparkleShare/SparkleControllerBase.cs:718 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "Bearbeitet '{0}'" -#: ../SparkleShare/SparkleControllerBase.cs:722 +#: ../SparkleShare/SparkleControllerBase.cs:723 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "Gelöscht '{0}'" -#: ../SparkleShare/SparkleControllerBase.cs:731 +#: ../SparkleShare/SparkleControllerBase.cs:732 #, csharp-format msgid "and {0} more" msgid_plural "and {0} more" msgstr[0] "" msgstr[1] "" -#: ../SparkleShare/SparkleControllerBase.cs:735 +#: ../SparkleShare/SparkleControllerBase.cs:736 msgid "did something magical" msgstr "" @@ -270,11 +277,11 @@ msgstr "" #: ../SparkleShare/SparkleSetup.cs:275 msgid "Address" -msgstr "" +msgstr "Adresse" #: ../SparkleShare/SparkleSetup.cs:295 msgid "Remote Path" -msgstr "" +msgstr "Entfernter Pfad" #. Cancel button #: ../SparkleShare/SparkleSetup.cs:309 ../SparkleShare/SparkleSetup.cs:345 @@ -289,7 +296,7 @@ msgstr "Hinzufügen" #: ../SparkleShare/SparkleSetup.cs:335 #, csharp-format msgid "Adding project ‘{0}’…" -msgstr "" +msgstr "Füge Projekt '{0}' hinzu..." #: ../SparkleShare/SparkleSetup.cs:336 msgid "This may take a while." @@ -323,7 +330,7 @@ msgstr "Projekt erfolgreich hinzugefügt!" #: ../SparkleShare/SparkleSetup.cs:448 msgid "Access the files from your SparkleShare folder." -msgstr "" +msgstr "Zugriff auf die Dateien von Ihrem SparkleShare Ordner." #. A button that opens the synced folder #: ../SparkleShare/SparkleSetup.cs:451 @@ -339,6 +346,8 @@ msgid "" "SparkleShare creates a special folder in your personal folder that will keep" " track of your projects." msgstr "" +"SparkleShare erzeugt einen eigenen Ordner in Ihrem persönlichen Ordner, der " +"den Überblick über Ihre Projekte behalten." #: ../SparkleShare/SparkleSetup.cs:481 msgid "Skip Tutorial" @@ -358,6 +367,8 @@ msgid "" "All files added to your project folders are synced with the host " "automatically, as well as with your collaborators." msgstr "" +"Alle zu Ihrem Projekt hinzugefügten Dateien sind automatisch mit dem Server " +"und Ihren Mitarbeitern synchronisiert." #: ../SparkleShare/SparkleSetup.cs:520 msgid "The status icon is here to help" @@ -368,16 +379,20 @@ msgid "" "It shows the syncing process status, and contains links to your projects and" " the event log." msgstr "" +"Es zeigt den Synchronisierungsstatus und beinhaltet Links zu deinem Projekt " +"und deinen letzten Ereignissen." #: ../SparkleShare/SparkleSetup.cs:538 msgid "Adding projects to SparkleShare" -msgstr "" +msgstr "Füge Projekte zu SparkleShare" #: ../SparkleShare/SparkleSetup.cs:539 msgid "" "Just click this button when you see it on the web, and the project will be " "automatically added:" msgstr "" +"Klicken den Button, wenn du ihn im Internet siehst, und das Projekt wird " +"automatisch hinzu gefügt:" #: ../SparkleShare/SparkleSetup.cs:542 msgid "" @@ -397,11 +412,11 @@ msgstr "SparkleShare Konfiguration" #: ../SparkleShare/SparkleStatusIcon.cs:228 msgid "No projects yet" -msgstr "" +msgstr "Bislang keine Projekte " #: ../SparkleShare/SparkleStatusIcon.cs:262 msgid "Open Recent Events" -msgstr "" +msgstr "Öffne letzte Ereignisse" #: ../SparkleShare/SparkleStatusIcon.cs:282 msgid "Turn Notifications Off" diff --git a/po/es.po b/po/es.po index c3971a6c..553a662a 100755 --- a/po/es.po +++ b/po/es.po @@ -1,6 +1,7 @@ # This file is distributed under the same license as the SparkleShare package. # # Translators: +# Claudio Rodrigo Pereyra Diaz , 2011. # , 2011. # jamelrom , 2011. # , 2011. @@ -9,8 +10,8 @@ msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"PO-Revision-Date: 2011-11-02 12:13+0000\n" +"Last-Translator: elsupergomez \n" "Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/sparkleshare/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -201,33 +202,33 @@ msgstr "" #: ../SparkleShare/SparkleControllerBase.cs:707 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "añadido '{0}'" #: ../SparkleShare/SparkleControllerBase.cs:712 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "movido '{0}'" #: ../SparkleShare/SparkleControllerBase.cs:717 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "editado '{0}'" #: ../SparkleShare/SparkleControllerBase.cs:722 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "eliminado '{0}'" #: ../SparkleShare/SparkleControllerBase.cs:731 #, csharp-format msgid "and {0} more" msgid_plural "and {0} more" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "y {0} más" +msgstr[1] "y {0} más" #: ../SparkleShare/SparkleControllerBase.cs:735 msgid "did something magical" -msgstr "" +msgstr "hizo algo mágico" #: ../SparkleShare/SparkleEventLog.cs:58 msgid "Recent Events" @@ -386,6 +387,8 @@ msgid "" "…or select ‘Add Hosted Project…’ from the status icon menu to add one" " by hand." msgstr "" +"... o seleccione \"Agregar proyecto alojado ... \" en el menú del " +"icono de estado para agregar uno manualmente." #. Opens the wizard to add a new remote folder #: ../SparkleShare/SparkleSetup.cs:551 diff --git a/po/fr.po b/po/fr.po index 3f28ae5c..c4479fec 100755 --- a/po/fr.po +++ b/po/fr.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"PO-Revision-Date: 2011-11-04 22:18+0000\n" +"Last-Translator: chezyann \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -194,31 +194,31 @@ msgstr "Vérification des mises à jour…" #: ../SparkleShare/SparkleControllerBase.cs:493 msgid "dddd, MMMM d, yyyy" -msgstr "" +msgstr "dddd d MMMM yyyy" #: ../SparkleShare/SparkleControllerBase.cs:499 msgid "dddd, MMMM d" -msgstr "" +msgstr "dddd d MMMM" #: ../SparkleShare/SparkleControllerBase.cs:707 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "Ajouté: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:712 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "Déplacé: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:717 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "Modifié: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:722 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "Supprimé: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:731 #, csharp-format @@ -229,7 +229,7 @@ msgstr[1] "" #: ../SparkleShare/SparkleControllerBase.cs:735 msgid "did something magical" -msgstr "" +msgstr "Attendez un miracle" #: ../SparkleShare/SparkleEventLog.cs:58 msgid "Recent Events" diff --git a/po/he.po b/po/he.po index 84ac2dda..8752c0f5 100755 --- a/po/he.po +++ b/po/he.po @@ -1,13 +1,14 @@ # This file is distributed under the same license as the SparkleShare package. # # Translators: +# , 2011. msgid "" msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"PO-Revision-Date: 2011-11-01 20:06+0000\n" +"Last-Translator: ophir \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -64,11 +65,11 @@ msgstr "" #: ../data/plugins/own-server.xml.in.h:2 msgid "Everything under my control" -msgstr "" +msgstr "הכל תחת שליטתי" #: ../data/plugins/own-server.xml.in.h:3 msgid "On my own server" -msgstr "" +msgstr "שרת משלי" #: ../SparkleShare/Mac/SparkleStatusIcon.cs:70 #: ../SparkleShare/Mac/SparkleStatusIcon.cs:88 @@ -169,20 +170,20 @@ msgstr "ספארקלשר" #. A menu item that takes the user to http://www.sparkleshare.org/ #: ../SparkleShare/SparkleAbout.cs:53 ../SparkleShare/SparkleStatusIcon.cs:295 msgid "About SparkleShare" -msgstr "" +msgstr "אודות ספארקלשר" #: ../SparkleShare/SparkleAbout.cs:70 #, csharp-format msgid "A newer version ({0}) is available!" -msgstr "" +msgstr "גירסה חדשה יותר ({0}) זמינה!" #: ../SparkleShare/SparkleAbout.cs:79 msgid "You are running the latest version." -msgstr "" +msgstr "אתה מריץ את הגרסה המעודכנת ביותר" #: ../SparkleShare/SparkleAbout.cs:88 ../SparkleShare/SparkleAbout.cs:113 msgid "Checking for updates..." -msgstr "" +msgstr "בודק עדכונים..." #: ../SparkleShare/SparkleControllerBase.cs:493 msgid "dddd, MMMM d, yyyy" @@ -195,22 +196,22 @@ msgstr "" #: ../SparkleShare/SparkleControllerBase.cs:707 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "‘{0}’ הוסף" #: ../SparkleShare/SparkleControllerBase.cs:712 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "‘{0}’ הוזז" #: ../SparkleShare/SparkleControllerBase.cs:717 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "‘{0}’ שונה" #: ../SparkleShare/SparkleControllerBase.cs:722 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "‘{0}’ נמחק" #: ../SparkleShare/SparkleControllerBase.cs:731 #, csharp-format @@ -225,12 +226,12 @@ msgstr "" #: ../SparkleShare/SparkleEventLog.cs:58 msgid "Recent Events" -msgstr "" +msgstr "אירועים אחרונים" #: ../SparkleShare/SparkleEventLog.cs:169 #: ../SparkleShare/SparkleEventLog.cs:188 msgid "All Folders" -msgstr "" +msgstr "כל התיקיות" #: ../SparkleShare/SparkleSetup.cs:76 msgid "" @@ -245,7 +246,7 @@ msgstr "שם מלא:" #: ../SparkleShare/SparkleSetup.cs:98 msgid "Email:" -msgstr "דוא\"ל" +msgstr "דוא\"ל:" #: ../SparkleShare/SparkleSetup.cs:108 msgid "Next" @@ -271,20 +272,20 @@ msgstr "בטל" #. Sync button #: ../SparkleShare/SparkleSetup.cs:316 msgid "Add" -msgstr "" +msgstr "הוסף" #: ../SparkleShare/SparkleSetup.cs:335 #, csharp-format msgid "Adding project ‘{0}’…" -msgstr "" +msgstr "מוסיף פרויקט ‘{0}’…" #: ../SparkleShare/SparkleSetup.cs:336 msgid "This may take a while." -msgstr "" +msgstr "זה עלול לקחת זמן מה" #: ../SparkleShare/SparkleSetup.cs:337 msgid "Are you sure it’s not coffee o'clock?" -msgstr "" +msgstr "מה אתה אומר על קפה?" #: ../SparkleShare/SparkleSetup.cs:341 ../SparkleShare/SparkleSetup.cs:457 #: ../SparkleShare/SparkleSetup.cs:556 @@ -293,24 +294,24 @@ msgstr "סיים" #: ../SparkleShare/SparkleSetup.cs:374 msgid "Something went wrong" -msgstr "" +msgstr "משהו השתבש" #: ../SparkleShare/SparkleSetup.cs:422 msgid "Try Again…" -msgstr "" +msgstr "נסה שוב..." #: ../SparkleShare/SparkleSetup.cs:441 #, csharp-format msgid "‘{0}’ has been successfully added" -msgstr "" +msgstr "‘{0}’ הוסף בהצלחה" #: ../SparkleShare/SparkleSetup.cs:447 msgid "Project successfully added!" -msgstr "" +msgstr "פרויקט הוסף בהצלחה!" #: ../SparkleShare/SparkleSetup.cs:448 msgid "Access the files from your SparkleShare folder." -msgstr "" +msgstr "גש לקבצים מתיקיית ספארקלשר" #. A button that opens the synced folder #: ../SparkleShare/SparkleSetup.cs:451 @@ -319,7 +320,7 @@ msgstr "פתח תקייה" #: ../SparkleShare/SparkleSetup.cs:477 msgid "What's happening next?" -msgstr "" +msgstr "מה עכשיו?" #: ../SparkleShare/SparkleSetup.cs:478 msgid "" @@ -329,16 +330,16 @@ msgstr "" #: ../SparkleShare/SparkleSetup.cs:481 msgid "Skip Tutorial" -msgstr "" +msgstr "דלג על הדרכה" #: ../SparkleShare/SparkleSetup.cs:486 ../SparkleShare/SparkleSetup.cs:506 #: ../SparkleShare/SparkleSetup.cs:524 msgid "Continue" -msgstr "" +msgstr "המשך" #: ../SparkleShare/SparkleSetup.cs:502 msgid "Sharing files with others" -msgstr "" +msgstr "שיתוף קבצים עם אחרים" #: ../SparkleShare/SparkleSetup.cs:503 msgid "" @@ -358,13 +359,13 @@ msgstr "" #: ../SparkleShare/SparkleSetup.cs:538 msgid "Adding projects to SparkleShare" -msgstr "" +msgstr "הוספת פרויקטים לספארקלשר" #: ../SparkleShare/SparkleSetup.cs:539 msgid "" "Just click this button when you see it on the web, and the project will be " "automatically added:" -msgstr "" +msgstr "לחץ כאן כשאתה רואה אותו ברשת, והפרויקט יתווסף אוטומטית:" #: ../SparkleShare/SparkleSetup.cs:542 msgid "" @@ -380,23 +381,23 @@ msgstr "" #: ../SparkleShare/SparkleSetupWindow.cs:44 msgid "SparkleShare Setup" -msgstr "" +msgstr "התקנת ספארקלשר" #: ../SparkleShare/SparkleStatusIcon.cs:228 msgid "No projects yet" -msgstr "" +msgstr "עדיין אין פרויקטים" #: ../SparkleShare/SparkleStatusIcon.cs:262 msgid "Open Recent Events" -msgstr "" +msgstr "פתח אירועים אחרונים" #: ../SparkleShare/SparkleStatusIcon.cs:282 msgid "Turn Notifications Off" -msgstr "" +msgstr "כבה הודעות" #: ../SparkleShare/SparkleStatusIcon.cs:284 msgid "Turn Notifications On" -msgstr "" +msgstr "הפעל הודעות" #. A menu item that quits the application #: ../SparkleShare/SparkleStatusIcon.cs:311 diff --git a/po/nl.po b/po/nl.po index 944e845e..6aa7dd2d 100755 --- a/po/nl.po +++ b/po/nl.po @@ -2,9 +2,11 @@ # # Translators: # , 2011. +# , 2011. # , 2011. # Łukasz Jernaś , 2011. # , 2011. +# , 2011. # smeagiel , 2011. # , 2011. msgid "" @@ -12,8 +14,8 @@ msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"PO-Revision-Date: 2011-11-06 22:01+0000\n" +"Last-Translator: mmans \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -34,7 +36,7 @@ msgstr "Gratis hosting voor Git en Mercurial" #: ../data/plugins/github.xml.in.h:2 msgid "Free public Git repositories with collaborator management" -msgstr "" +msgstr "Gratis publieke repositories met teambeheer." #: ../data/plugins/github.xml.in.h:3 msgid "Github" @@ -50,7 +52,7 @@ msgstr "Gitorious" #: ../data/plugins/gitorious.xml.in.h:3 msgid "Open source infrastructure for hosting open source projects" -msgstr "Opensource infratstructuur voor het hosten van opensource projecten." +msgstr "Opensource infrastructuur voor het hosten van opensource projecten." #: ../data/plugins/gnome.xml.in.h:1 msgid "/project" @@ -66,11 +68,11 @@ msgstr "Het GNOME Project" #: ../data/plugins/own-server.xml.in.h:1 msgid "/path/to/project" -msgstr "" +msgstr "/pad/naar/project" #: ../data/plugins/own-server.xml.in.h:2 msgid "Everything under my control" -msgstr "" +msgstr "Alles onder mijn controle" #: ../data/plugins/own-server.xml.in.h:3 msgid "On my own server" @@ -114,7 +116,7 @@ msgstr "Verkrijg eerdere versie" #: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148 msgid "Make a copy of an earlier version in this folder" -msgstr "Maak een kopie van een oudere versie in deze map" +msgstr "Maak een kopie van een oudere versie naar deze map" #: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161 msgid "Select to get a copy of this version" @@ -152,7 +154,7 @@ msgstr " onder bepaalde voorwaarden. Zie de GNU GPLv3 voor meer informatie." #: ../SparkleShare/Program.cs:92 msgid "SparkleShare automatically syncs Git repositories in " -msgstr "SparkleShare synchroniseerd automatisch Git repositories in " +msgstr "SparkleShare synchroniseert automatisch Git repositories in " #: ../SparkleShare/Program.cs:93 msgid "the ~/SparkleShare folder with their remote origins." @@ -194,42 +196,42 @@ msgstr "Controleren op updates ..." #: ../SparkleShare/SparkleControllerBase.cs:493 msgid "dddd, MMMM d, yyyy" -msgstr "" +msgstr "dddd, MMMM d, yyyy" #: ../SparkleShare/SparkleControllerBase.cs:499 msgid "dddd, MMMM d" -msgstr "" +msgstr "dddd, MMMM d" #: ../SparkleShare/SparkleControllerBase.cs:707 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "toegevoegd: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:712 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "verplaatst: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:717 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "bewerkt: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:722 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "verwijderd: ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:731 #, csharp-format msgid "and {0} more" msgid_plural "and {0} more" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "en nog {0}" +msgstr[1] "en nog {0}" #: ../SparkleShare/SparkleControllerBase.cs:735 msgid "did something magical" -msgstr "" +msgstr "deed iets magisch" #: ../SparkleShare/SparkleEventLog.cs:58 msgid "Recent Events" @@ -270,7 +272,7 @@ msgstr "Adres" #: ../SparkleShare/SparkleSetup.cs:295 msgid "Remote Path" -msgstr "" +msgstr "Extern pad" #. Cancel button #: ../SparkleShare/SparkleSetup.cs:309 ../SparkleShare/SparkleSetup.cs:345 @@ -306,7 +308,7 @@ msgstr "Er ging iets mis" #: ../SparkleShare/SparkleSetup.cs:422 msgid "Try Again…" -msgstr "Probeer opnieuw..." +msgstr "Opnieuw proberen..." #: ../SparkleShare/SparkleSetup.cs:441 #, csharp-format @@ -315,11 +317,11 @@ msgstr "'{0}' is met succes toegevoegd" #: ../SparkleShare/SparkleSetup.cs:447 msgid "Project successfully added!" -msgstr "Project succesvol toegevoeg" +msgstr "Project succesvol toegevoegd!" #: ../SparkleShare/SparkleSetup.cs:448 msgid "Access the files from your SparkleShare folder." -msgstr "" +msgstr "Benader de gesynchroniseerde bestanden in je SparkleShare-map." #. A button that opens the synced folder #: ../SparkleShare/SparkleSetup.cs:451 @@ -328,13 +330,15 @@ msgstr "Map openen" #: ../SparkleShare/SparkleSetup.cs:477 msgid "What's happening next?" -msgstr "" +msgstr "What gebeurt er nu?" #: ../SparkleShare/SparkleSetup.cs:478 msgid "" "SparkleShare creates a special folder in your personal folder that will keep" " track of your projects." msgstr "" +"SparkleShare maakt een speciale map in je persoonlijke map die je projecten " +"in de gaten houdt." #: ../SparkleShare/SparkleSetup.cs:481 msgid "Skip Tutorial" @@ -354,16 +358,20 @@ msgid "" "All files added to your project folders are synced with the host " "automatically, as well as with your collaborators." msgstr "" +"Alle bestanden die je aan je projectmappen toevoegt worden automatisch " +"gesynchroniseerd met de host en je team." #: ../SparkleShare/SparkleSetup.cs:520 msgid "The status icon is here to help" -msgstr "Het status icoon bied hulp" +msgstr "Het statusicoon bied hulp" #: ../SparkleShare/SparkleSetup.cs:521 msgid "" "It shows the syncing process status, and contains links to your projects and" " the event log." msgstr "" +"Het toont de voortgang van het synchroniseerproces en bevat links naar je " +"projecten en het logboek." #: ../SparkleShare/SparkleSetup.cs:538 msgid "Adding projects to SparkleShare" @@ -374,18 +382,22 @@ msgid "" "Just click this button when you see it on the web, and the project will be " "automatically added:" msgstr "" +"Klik op deze knop wanneer je deze tegenkomt op het web, en het project wordt" +" automatisch toegevoegd." #: ../SparkleShare/SparkleSetup.cs:542 msgid "" "…or select ‘Add Hosted Project…’ from the status icon menu to add one" " by hand." msgstr "" +"…of selecteer ‘Gehost project toevoegen…’ in het menu van het " +"statusicoon om een project met de hand toe te voegen." #. Opens the wizard to add a new remote folder #: ../SparkleShare/SparkleSetup.cs:551 #: ../SparkleShare/SparkleStatusIcon.cs:238 msgid "Add Hosted Project…" -msgstr "" +msgstr "Gehost project toevoegen…" #: ../SparkleShare/SparkleSetupWindow.cs:44 msgid "SparkleShare Setup" @@ -397,7 +409,7 @@ msgstr "Nog geen projecten" #: ../SparkleShare/SparkleStatusIcon.cs:262 msgid "Open Recent Events" -msgstr "Open recente gebeurtenissen" +msgstr "Logboek openen" #: ../SparkleShare/SparkleStatusIcon.cs:282 msgid "Turn Notifications Off" diff --git a/po/pl.po b/po/pl.po index 2dc39c76..1dcdd540 100755 --- a/po/pl.po +++ b/po/pl.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" +"POT-Creation-Date: 2011-11-12 13:18+0100\n" +"PO-Revision-Date: 2011-11-12 12:34+0000\n" "Last-Translator: deejay1 \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,7 +26,8 @@ msgstr "Bitbucket" #: ../data/plugins/bitbucket.xml.in.h:3 msgid "Free code hosting for Git and Mercurial" msgstr "" -"Darmowe utrzymywanie kod dla projektów zarządzanych przez git oraz Mercurial" +"Darmowe utrzymywanie kodu dla projektów zarządzanych przez git oraz " +"Mercurial" #: ../data/plugins/github.xml.in.h:2 msgid "Free public Git repositories with collaborator management" @@ -47,8 +48,8 @@ msgstr "Gitorious" #: ../data/plugins/gitorious.xml.in.h:3 msgid "Open source infrastructure for hosting open source projects" msgstr "" -"Infrakstruktura o otwartym kodzie źródłowym dla projektów dla społeczności " -"otwartego kodu" +"Infrastruktura o otwartym kodzie źródłowym dla projektów o otwartym kodzie " +"źródłowym" #: ../data/plugins/gnome.xml.in.h:1 msgid "/project" @@ -74,26 +75,26 @@ msgstr "Wszystko pod własną kontrolą" msgid "On my own server" msgstr "Na własnym serwerze" -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:70 -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:88 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:84 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:102 #: ../SparkleShare/SparkleSetup.cs:75 ../SparkleShare/SparkleStatusIcon.cs:75 #: ../SparkleShare/SparkleStatusIcon.cs:89 msgid "Welcome to SparkleShare!" msgstr "Witamy w programie SparkleShare!" -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:72 -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:90 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:86 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:104 #: ../SparkleShare/SparkleStatusIcon.cs:77 #: ../SparkleShare/SparkleStatusIcon.cs:91 msgid "Up to date" msgstr "Wszystko jest aktualne" -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:99 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:113 #: ../SparkleShare/SparkleStatusIcon.cs:106 msgid "Syncing…" msgstr "Synchronizowanie…" -#: ../SparkleShare/Mac/SparkleStatusIcon.cs:109 +#: ../SparkleShare/Mac/SparkleStatusIcon.cs:123 #: ../SparkleShare/SparkleStatusIcon.cs:116 msgid "Not everything is synced" msgstr "Nie wszystko zostało zsynchronizowane" @@ -141,7 +142,7 @@ msgstr "Niniejszy program dostarczany jest BEZ JAKIEJKOLWIEK GWARANCJI." #: ../SparkleShare/Program.cs:89 msgid "This is free software, and you are welcome to redistribute it " msgstr "" -"Niniejszy program jest wolnym oprogramowanie, można go rozprowadzać dalej " +"Niniejszy program jest wolnym oprogramowaniem, można go rozprowadzać dalej " "pod pewnymi warunkami." #: ../SparkleShare/Program.cs:90 @@ -153,7 +154,7 @@ msgstr "" #: ../SparkleShare/Program.cs:92 msgid "SparkleShare automatically syncs Git repositories in " msgstr "" -"Program SparkleShare automatycznie synchronizuje reozytoria Git znajdujące " +"Program SparkleShare automatycznie synchronizuje repozytoria Git znajdujące " "się" #: ../SparkleShare/Program.cs:93 @@ -195,35 +196,35 @@ msgstr "Korzystasz z najnowszej wersji." msgid "Checking for updates..." msgstr "Wyszukiwanie aktualizacji" -#: ../SparkleShare/SparkleControllerBase.cs:493 +#: ../SparkleShare/SparkleControllerBase.cs:494 msgid "dddd, MMMM d, yyyy" -msgstr "" +msgstr "dddd, d MMMM yyyy" -#: ../SparkleShare/SparkleControllerBase.cs:499 +#: ../SparkleShare/SparkleControllerBase.cs:500 msgid "dddd, MMMM d" -msgstr "" +msgstr "dddd, d MMMM" -#: ../SparkleShare/SparkleControllerBase.cs:707 +#: ../SparkleShare/SparkleControllerBase.cs:708 #, csharp-format msgid "added ‘{0}’" msgstr "dodano \"{0}\"" -#: ../SparkleShare/SparkleControllerBase.cs:712 +#: ../SparkleShare/SparkleControllerBase.cs:713 #, csharp-format msgid "moved ‘{0}’" msgstr "przesunięto \"{0}\"" -#: ../SparkleShare/SparkleControllerBase.cs:717 +#: ../SparkleShare/SparkleControllerBase.cs:718 #, csharp-format msgid "edited ‘{0}’" msgstr "edytowano \"{0}\"" -#: ../SparkleShare/SparkleControllerBase.cs:722 +#: ../SparkleShare/SparkleControllerBase.cs:723 #, csharp-format msgid "deleted ‘{0}’" msgstr "usunięto \"{0}\"" -#: ../SparkleShare/SparkleControllerBase.cs:731 +#: ../SparkleShare/SparkleControllerBase.cs:732 #, csharp-format msgid "and {0} more" msgid_plural "and {0} more" @@ -231,7 +232,7 @@ msgstr[0] "oraz {0} więcej" msgstr[1] "oraz {0} więcej" msgstr[2] "oraz {0} więcej" -#: ../SparkleShare/SparkleControllerBase.cs:735 +#: ../SparkleShare/SparkleControllerBase.cs:736 msgid "did something magical" msgstr "stało się coś magicznego" @@ -289,7 +290,7 @@ msgstr "Dodaj" #: ../SparkleShare/SparkleSetup.cs:335 #, csharp-format msgid "Adding project ‘{0}’…" -msgstr "Dodawanie projektu „{0}…" +msgstr "Dodawanie projektu \"{0}\"…" #: ../SparkleShare/SparkleSetup.cs:336 msgid "This may take a while." @@ -323,7 +324,7 @@ msgstr "Projekt został dodany pomyślnie." #: ../SparkleShare/SparkleSetup.cs:448 msgid "Access the files from your SparkleShare folder." -msgstr "" +msgstr "Dostęp do plików możliwy jest z katalogu SparkleShare." #. A button that opens the synced folder #: ../SparkleShare/SparkleSetup.cs:451 @@ -339,7 +340,7 @@ msgid "" "SparkleShare creates a special folder in your personal folder that will keep" " track of your projects." msgstr "" -"Program SparkleShare utwrzy specjalny katalog w katalogu domowym, który " +"Program SparkleShare utworzy specjalny katalog w katalogu domowym, który " "będzie zajmował się projektami." #: ../SparkleShare/SparkleSetup.cs:481 @@ -372,7 +373,7 @@ msgid "" "It shows the syncing process status, and contains links to your projects and" " the event log." msgstr "" -"Wyświetla stan synchronizacji, jak i zawiera odnośniki do projektów i " +"Wyświetla stan synchronizacji, jak i zawiera odnośniki do projektów oraz " "dziennika zdarzeń." #: ../SparkleShare/SparkleSetup.cs:538 @@ -392,6 +393,8 @@ msgid "" "…or select ‘Add Hosted Project…’ from the status icon menu to add one" " by hand." msgstr "" +"…lub można wybrać opcję \"Dodaj utrzymywany projekt…\" z menu " +"powiadamiania, aby dodać projekt ręcznie." #. Opens the wizard to add a new remote folder #: ../SparkleShare/SparkleSetup.cs:551 diff --git a/po/pt_BR.po b/po/pt_BR.po index f2ef4610..c461ed7b 100755 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"PO-Revision-Date: 2011-11-08 12:53+0000\n" +"Last-Translator: eduardosilva \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -19,7 +19,7 @@ msgstr "" #: ../data/plugins/bitbucket.xml.in.h:1 ../data/plugins/github.xml.in.h:1 msgid "/username/project" -msgstr "" +msgstr "/usuário/projeto" #: ../data/plugins/bitbucket.xml.in.h:2 msgid "Bitbucket" @@ -35,11 +35,11 @@ msgstr "" #: ../data/plugins/github.xml.in.h:3 msgid "Github" -msgstr "" +msgstr "Github" #: ../data/plugins/gitorious.xml.in.h:1 msgid "/project/repository" -msgstr "" +msgstr "/projeto/repositório" #: ../data/plugins/gitorious.xml.in.h:2 msgid "Gitorious" @@ -51,7 +51,7 @@ msgstr "" #: ../data/plugins/gnome.xml.in.h:1 msgid "/project" -msgstr "" +msgstr "/projeto" #: ../data/plugins/gnome.xml.in.h:2 msgid "A free and easy interface for your computer" @@ -63,15 +63,15 @@ msgstr "O projeto GNOME" #: ../data/plugins/own-server.xml.in.h:1 msgid "/path/to/project" -msgstr "" +msgstr "/caminho/para/projeto" #: ../data/plugins/own-server.xml.in.h:2 msgid "Everything under my control" -msgstr "" +msgstr "Tudo sob meu controle" #: ../data/plugins/own-server.xml.in.h:3 msgid "On my own server" -msgstr "" +msgstr "Em meu próprio servidor" #: ../SparkleShare/Mac/SparkleStatusIcon.cs:70 #: ../SparkleShare/Mac/SparkleStatusIcon.cs:88 @@ -199,22 +199,22 @@ msgstr "" #: ../SparkleShare/SparkleControllerBase.cs:707 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "adicionado \"{0} '" #: ../SparkleShare/SparkleControllerBase.cs:712 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "movido '{0}'" #: ../SparkleShare/SparkleControllerBase.cs:717 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "editado '{0}'" #: ../SparkleShare/SparkleControllerBase.cs:722 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "removido '{0}'" #: ../SparkleShare/SparkleControllerBase.cs:731 #, csharp-format @@ -225,7 +225,7 @@ msgstr[1] "" #: ../SparkleShare/SparkleControllerBase.cs:735 msgid "did something magical" -msgstr "" +msgstr "fez algo mágico" #: ../SparkleShare/SparkleEventLog.cs:58 msgid "Recent Events" @@ -258,15 +258,15 @@ msgstr "Próximo" #: ../SparkleShare/SparkleSetup.cs:129 msgid "Where's your project hosted?" -msgstr "" +msgstr "Onde está o seu projeto está hospedado?" #: ../SparkleShare/SparkleSetup.cs:275 msgid "Address" -msgstr "" +msgstr "Endereço" #: ../SparkleShare/SparkleSetup.cs:295 msgid "Remote Path" -msgstr "" +msgstr "Caminho remoto" #. Cancel button #: ../SparkleShare/SparkleSetup.cs:309 ../SparkleShare/SparkleSetup.cs:345 @@ -276,12 +276,12 @@ msgstr "Cancelar" #. Sync button #: ../SparkleShare/SparkleSetup.cs:316 msgid "Add" -msgstr "" +msgstr "Adicionar" #: ../SparkleShare/SparkleSetup.cs:335 #, csharp-format msgid "Adding project ‘{0}’…" -msgstr "" +msgstr "Adicionando projeto '{0}' ..." #: ../SparkleShare/SparkleSetup.cs:336 msgid "This may take a while." @@ -302,7 +302,7 @@ msgstr "Algum problema ocorreu" #: ../SparkleShare/SparkleSetup.cs:422 msgid "Try Again…" -msgstr "" +msgstr "Tente novamente..." #: ../SparkleShare/SparkleSetup.cs:441 #, csharp-format @@ -311,11 +311,11 @@ msgstr "'{0}' foi incluída com sucesso" #: ../SparkleShare/SparkleSetup.cs:447 msgid "Project successfully added!" -msgstr "" +msgstr "Projeto adicionado com sucesso!" #: ../SparkleShare/SparkleSetup.cs:448 msgid "Access the files from your SparkleShare folder." -msgstr "" +msgstr "Acessar os arquivos da pasta SparkleShare." #. A button that opens the synced folder #: ../SparkleShare/SparkleSetup.cs:451 @@ -324,64 +324,74 @@ msgstr "Abrir Pasta" #: ../SparkleShare/SparkleSetup.cs:477 msgid "What's happening next?" -msgstr "" +msgstr "O que está acontecendo em seguida?" #: ../SparkleShare/SparkleSetup.cs:478 msgid "" "SparkleShare creates a special folder in your personal folder that will keep" " track of your projects." msgstr "" +"SparkleShare cria uma pasta especial em sua pasta pessoal que vai manter o " +"controle de seus projetos." #: ../SparkleShare/SparkleSetup.cs:481 msgid "Skip Tutorial" -msgstr "" +msgstr "Pular Tutorial" #: ../SparkleShare/SparkleSetup.cs:486 ../SparkleShare/SparkleSetup.cs:506 #: ../SparkleShare/SparkleSetup.cs:524 msgid "Continue" -msgstr "" +msgstr "Continuar" #: ../SparkleShare/SparkleSetup.cs:502 msgid "Sharing files with others" -msgstr "" +msgstr "Compartilhar arquivos com outras pessoas" #: ../SparkleShare/SparkleSetup.cs:503 msgid "" "All files added to your project folders are synced with the host " "automatically, as well as with your collaborators." msgstr "" +"Todos os arquivos adicionados a pasta do seu projeto são sincronizados " +"automaticamente com o servidor, bem como com seus colaboradores." #: ../SparkleShare/SparkleSetup.cs:520 msgid "The status icon is here to help" -msgstr "" +msgstr "O ícone de status está aqui para ajudar" #: ../SparkleShare/SparkleSetup.cs:521 msgid "" "It shows the syncing process status, and contains links to your projects and" " the event log." msgstr "" +"Mostra o status do processo de sincronização, e contém links para seus " +"projetos e log de eventos." #: ../SparkleShare/SparkleSetup.cs:538 msgid "Adding projects to SparkleShare" -msgstr "" +msgstr "Adicionando projetos ao SparkleShare" #: ../SparkleShare/SparkleSetup.cs:539 msgid "" "Just click this button when you see it on the web, and the project will be " "automatically added:" msgstr "" +"Basta clicar neste botão quando você vê-la na web, e o projeto será " +"automaticamente adicionado automaticamente:" #: ../SparkleShare/SparkleSetup.cs:542 msgid "" "…or select ‘Add Hosted Project…’ from the status icon menu to add one" " by hand." msgstr "" +"... Ou selecione 'Adicionar Projeto Hosted ...' no menu do ícone de " +"status para adicionar manualmente." #. Opens the wizard to add a new remote folder #: ../SparkleShare/SparkleSetup.cs:551 #: ../SparkleShare/SparkleStatusIcon.cs:238 msgid "Add Hosted Project…" -msgstr "" +msgstr "Adicionar Projeto Hospedado..." #: ../SparkleShare/SparkleSetupWindow.cs:44 msgid "SparkleShare Setup" @@ -389,11 +399,11 @@ msgstr "Configurações do SparkleShare" #: ../SparkleShare/SparkleStatusIcon.cs:228 msgid "No projects yet" -msgstr "" +msgstr "Nenhum projeto ainda" #: ../SparkleShare/SparkleStatusIcon.cs:262 msgid "Open Recent Events" -msgstr "" +msgstr "Abrir Eventos Recentes" #: ../SparkleShare/SparkleStatusIcon.cs:282 msgid "Turn Notifications Off" diff --git a/po/ru.po b/po/ru.po index 2f2163c8..d4aeada1 100755 --- a/po/ru.po +++ b/po/ru.po @@ -4,14 +4,15 @@ # Dmitry Golubkov , 2011. # , 2011. # Just a baka , 2011. +# Misha Shnurapet , 2011. # Oleg Shmelyov , 2011. msgid "" msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"PO-Revision-Date: 2011-11-02 11:31+0000\n" +"Last-Translator: shnurapet \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -192,43 +193,43 @@ msgstr "Проверка обновлений…" #: ../SparkleShare/SparkleControllerBase.cs:493 msgid "dddd, MMMM d, yyyy" -msgstr "" +msgstr "дддд, ММММ д, гггг" #: ../SparkleShare/SparkleControllerBase.cs:499 msgid "dddd, MMMM d" -msgstr "" +msgstr "дддд, ММММ д" #: ../SparkleShare/SparkleControllerBase.cs:707 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "«{0}» добавлено" #: ../SparkleShare/SparkleControllerBase.cs:712 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "«{0}» перемещено" #: ../SparkleShare/SparkleControllerBase.cs:717 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "«{0}» изменено" #: ../SparkleShare/SparkleControllerBase.cs:722 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "«{0}» удалено" #: ../SparkleShare/SparkleControllerBase.cs:731 #, csharp-format msgid "and {0} more" msgid_plural "and {0} more" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "и ещё над {0}" +msgstr[1] "и ещё над {0}" +msgstr[2] "и ещё над {0}" #: ../SparkleShare/SparkleControllerBase.cs:735 msgid "did something magical" -msgstr "" +msgstr "совершено какое-то колдовство" #: ../SparkleShare/SparkleEventLog.cs:58 msgid "Recent Events" @@ -318,7 +319,7 @@ msgstr "Проект успешно добавлен!" #: ../SparkleShare/SparkleSetup.cs:448 msgid "Access the files from your SparkleShare folder." -msgstr "" +msgstr "Получить доступ к файлам из своей папки SparkleShare." #. A button that opens the synced folder #: ../SparkleShare/SparkleSetup.cs:451 @@ -379,18 +380,22 @@ msgid "" "Just click this button when you see it on the web, and the project will be " "automatically added:" msgstr "" +"Просто нажмите эту кнопку, когда увидите её в сети, и проект будет добавлен " +"автоматически:" #: ../SparkleShare/SparkleSetup.cs:542 msgid "" "…or select ‘Add Hosted Project…’ from the status icon menu to add one" " by hand." msgstr "" +"...или выберите «Добавить ведомый проект...» через меню в области " +"уведомлений, чтобы добавить проект вручную." #. Opens the wizard to add a new remote folder #: ../SparkleShare/SparkleSetup.cs:551 #: ../SparkleShare/SparkleStatusIcon.cs:238 msgid "Add Hosted Project…" -msgstr "" +msgstr "Добавить ведомый проект..." #: ../SparkleShare/SparkleSetupWindow.cs:44 msgid "SparkleShare Setup" diff --git a/po/sv.po b/po/sv.po index 9a66158c..178d5c2c 100755 --- a/po/sv.po +++ b/po/sv.po @@ -13,8 +13,8 @@ msgstr "" "Project-Id-Version: SparkleShare\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-30 15:50+0100\n" -"PO-Revision-Date: 2011-10-30 14:50+0000\n" -"Last-Translator: deejay1 \n" +"PO-Revision-Date: 2011-11-05 22:22+0000\n" +"Last-Translator: shlstrm \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -202,33 +202,33 @@ msgstr "" #: ../SparkleShare/SparkleControllerBase.cs:707 #, csharp-format msgid "added ‘{0}’" -msgstr "" +msgstr "lade till ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:712 #, csharp-format msgid "moved ‘{0}’" -msgstr "" +msgstr "flyttade ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:717 #, csharp-format msgid "edited ‘{0}’" -msgstr "" +msgstr "ändrade ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:722 #, csharp-format msgid "deleted ‘{0}’" -msgstr "" +msgstr "raderade ‘{0}’" #: ../SparkleShare/SparkleControllerBase.cs:731 #, csharp-format msgid "and {0} more" msgid_plural "and {0} more" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "och {0} till" +msgstr[1] "och {0} fler" #: ../SparkleShare/SparkleControllerBase.cs:735 msgid "did something magical" -msgstr "" +msgstr "gjorde någonting magiskt" #: ../SparkleShare/SparkleEventLog.cs:58 msgid "Recent Events" @@ -387,6 +387,8 @@ msgid "" "…or select ‘Add Hosted Project…’ from the status icon menu to add one" " by hand." msgstr "" +"...eller välj ‘Lägg till Projekt…’ i statusmenyn för att lägga till " +"ett projekt manuellt." #. Opens the wizard to add a new remote folder #: ../SparkleShare/SparkleSetup.cs:551