Merge branch 'master' of ssh://github.com/hbons/SparkleShare

This commit is contained in:
Hylke Bons 2011-03-22 22:50:25 +00:00
commit e1fb9f8640
7 changed files with 196 additions and 161 deletions

14
AUTHORS
View file

@ -1,15 +1,25 @@
Maintainer:
Points of contact:
Maintainer:
Hylke Bons <hylkebons@gmail.com>
Marketing:
Alexandre Saiz Verdaguer <a@alexandresaiz.com>
Translations:
Łukasz Jernaś <deejay1@srem.org>
Contributors:
Alexandre Saiz Verdaguer <a@alexandresaiz.com>
Alex Hudson <home@alexhudson.com>
Allan Day <allanpday@gmail.com>
Andreas Nilsson <andreasn@gnome.org>
Benjamin Podszun <benjamin.podszun@gmail.com>
Bertrand Lorentz <bertrand.lorentz@gmail.com>
Garrett LeSage <garrett@novell.com>
Hylke Bons <hylkebons@gmail.com>
Jakub Steiner <jimmac@redhat.com>
Kristi Tsukida <kristi.tsukida@gmail.com>
Lapo Calamandrei <calamandrei@gmail.com>
@ -26,4 +36,4 @@ Contributors:
Steven Harms <sharms@ubuntu.com>
Vincent Untz <vuntz@gnome.org>
Thanks very much!
Thanks very much!

10
NEWS
View file

@ -1,4 +1,12 @@
0.2-beta2 for Mac (Sat Feb, 2011):
0.2-rc1 for Linux and Mac (Sun Mar 20, 2011)
Hylke: A lot of fixes and optimisations across the backend. Less memory
usage, less crashes. Instant notifications of new changes instead of polling.
Refreshed event log HTML theme. Keeping logs in memory for faster reopening and
loads more goodness.
0.2-beta2 for Mac (Sat Feb 12, 2011):
Hylke: Mac version! Massive restructure of the code to an MVC-like model
to make building different front-ends easier. Ported the event logs to

View file

@ -25,6 +25,15 @@ using Meebey.SmartIrc4net;
namespace SparkleLib {
public enum NotificationServerType
{
Own,
Central
}
// A persistent connection to the server that
// listens for change notifications
public class SparkleListener {
@ -39,14 +48,23 @@ namespace SparkleLib {
public readonly string Nick;
public SparkleListener (string server, string folder_name, string user_email)
public SparkleListener (string server, string folder_name,
string user_email, NotificationServerType type)
{
// This is SparkleShare's centralized notification service.
// Don't worry, we only use this server as a backup if you
// don't have your own. All data needed to connect is hashed and
// we don't store any personal information ever.
Server = "204.62.14.135";
if (type == NotificationServerType.Own) {
Server = server;
} else {
// This is SparkleShare's centralized notification service.
// Don't worry, we only use this server as a backup if you
// don't have your own. All data needed to connect is hashed and
// we don't store any personal information ever.
Server = "204.62.14.135";
}
if (!user_email.Equals ("") && user_email != null)
Nick = GetSHA1 (folder_name + user_email + "sparkles");

View file

@ -307,7 +307,11 @@ namespace SparkleLib {
// Listen to the irc channel on the server...
Listener = new SparkleListener (Domain, RemoteName, UserEmail);
if (UsesNotificationCenter)
Listener = new SparkleListener (Domain, RemoteName, UserEmail, NotificationServerType.Central);
else
Listener = new SparkleListener (Domain, RemoteName, UserEmail, NotificationServerType.Own);
// ...fetch remote changes every 60 seconds if that fails
RemoteTimer = new Timer () {
@ -1149,13 +1153,27 @@ namespace SparkleLib {
}
public static bool IsRepo (string path) {
public static bool IsRepo (string path)
{
return System.IO.Directory.Exists (Path.Combine (path, ".git"));
}
public bool UsesNotificationCenter
{
get {
string file_path = SparkleHelpers.CombineMore (LocalPath, ".git", "disable_notification_center");
return !File.Exists (file_path);
}
}
// Disposes all resourses of this object
new public void Dispose ()
{

View file

@ -32,13 +32,13 @@ namespace SparkleShare {
public readonly string LocalPath;
private VBox LayoutVertical;
private ScrolledWindow ScrolledWindow;
private MenuBar MenuBar;
private WebView WebView;
private string LinkStatus;
private SparkleSpinner Spinner;
private string HTML;
private EventBox LogContent;
// Short alias for the translations
@ -77,13 +77,15 @@ namespace SparkleShare {
DeleteEvent += Close;
CreateEventLog ();
UpdateEventLog ();
}
private void CreateEventLog () {
LayoutVertical = new VBox (false, 0);
LogContent = new EventBox ();
VBox layout_vertical = new VBox (false, 0);
ScrolledWindow = new ScrolledWindow ();
@ -113,10 +115,10 @@ namespace SparkleShare {
};
ScrolledWindow.AddWithViewport (WebView);
LogContent.Add (ScrolledWindow);
LayoutVertical.PackStart (ScrolledWindow, true, true, 0);
layout_vertical.PackStart (LogContent, true, true, 0);
UpdateEventLog ();
HButtonBox dialog_buttons = new HButtonBox {
Layout = ButtonBoxStyle.Edge,
@ -146,10 +148,14 @@ namespace SparkleShare {
dialog_buttons.Add (close_button);
// We have to hide the menubar somewhere...
LayoutVertical.PackStart (CreateShortcutsBar (), false, false, 0);
LayoutVertical.PackStart (dialog_buttons, false, false, 0);
layout_vertical.PackStart (CreateShortcutsBar (), false, false, 0);
layout_vertical.PackStart (dialog_buttons, false, false, 0);
Add (layout_vertical);
ShowAll ();
Add (LayoutVertical);
}
@ -159,9 +165,10 @@ namespace SparkleShare {
if (HTML == null) { // TODO: there may be a race condition here
LayoutVertical.Remove (ScrolledWindow);
LogContent.Remove (LogContent.Child);
Spinner = new SparkleSpinner (22);
LayoutVertical.PackStart (Spinner, true, true, 0);
LogContent.Add (Spinner);
LogContent.ShowAll ();
}
@ -204,31 +211,24 @@ namespace SparkleShare {
Application.Invoke (delegate {
Spinner.Stop ();
if (Spinner.Parent == LayoutVertical) {
LayoutVertical.Remove (Spinner);
} else {
LayoutVertical.Remove (ScrolledWindow);
}
LogContent.Remove (LogContent.Child);
ScrolledWindow = new ScrolledWindow () {
HscrollbarPolicy = PolicyType.Never
};
Viewport viewport = new Viewport ();
Viewport viewport = new Viewport () {
ShadowType = ShadowType.None
};
WebView.Reparent (viewport);
ScrolledWindow.Add (viewport);
(ScrolledWindow.Child as Viewport).ShadowType = ShadowType.None;
LayoutVertical.PackStart (ScrolledWindow, true, true, 0);
LayoutVertical.ReorderChild (ScrolledWindow, 0);
WebView.LoadString (HTML, null, null, "file://");
ShowAll ();
LogContent.Add (ScrolledWindow);
LogContent.ShowAll ();
});

View file

@ -37,6 +37,7 @@ namespace SparkleShare {
public SparkleWindow () : base ("")
{
Title = "SparkleShare Setup";
BorderWidth = 0;
IconName = "folder-sparkleshare";
Resizable = false;

232
po/bg.po
View file

@ -1,43 +1,43 @@
# This file is distributed under the same license as the Sparkleshare package.
#
# WARNING: Due to the nature of Transifex all translation file headers were lost
# we apologise for any incovenience this may have caused and we hope to bring them
# back in the future.
#
# Bulgarian translation of SparkleShare po-file.
# Copyright (C) 2010, 2011 Alexander Shopov <ash@kambanaria.org>.
# Alexander Shopov <ash@kambanaria.org>, 2002, 2006, 2007, 2008, 2009, 2010, 2011.
# This file is distributed under the same license as the SparkleShare package.
#
msgid ""
msgstr ""
"Project-Id-Version: SparkleShare\n"
"Project-Id-Version: SparkleShare master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-13 17:07+0100\n"
"PO-Revision-Date: 2011-03-10 17:31+0000\n"
"Last-Translator: deejay1 <deejay1@srem.org>\n"
"POT-Creation-Date: 2011-03-21 21:57+0200\n"
"PO-Revision-Date: 2011-03-21 21:57+0200\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../MacCore/src/Options.cs:497 ../SparkleLib/SparkleOptions.cs:486
#: ../SparkleLib/SparkleOptions.cs:486
msgid "OptionName"
msgstr "ИмеНаОпция"
#: ../SparkleShare/Mac/SparkleStatusIcon.cs:360
#: ../SparkleShare/SparkleIntro.cs:64 ../SparkleShare/SparkleStatusIcon.cs:345
#: ../SparkleShare/SparkleIntro.cs:67 ../SparkleShare/SparkleStatusIcon.cs:335
msgid "Welcome to SparkleShare!"
msgstr "Здравейте в SparkleShare!"
#: ../SparkleShare/Mac/SparkleStatusIcon.cs:375
#: ../SparkleShare/SparkleStatusIcon.cs:354
#: ../SparkleShare/SparkleStatusIcon.cs:344
msgid "Not everything is synced"
msgstr "Синхронизирането не е приключило"
#: ../SparkleShare/Mac/SparkleStatusIcon.cs:382
#: ../SparkleShare/SparkleStatusIcon.cs:361
#: ../SparkleShare/SparkleStatusIcon.cs:351
msgid "Up to date"
msgstr "Обновено"
#: ../SparkleShare/Mac/SparkleStatusIcon.cs:404
#: ../SparkleShare/SparkleStatusIcon.cs:377
#: ../SparkleShare/SparkleStatusIcon.cs:367
msgid "Syncing…"
msgstr "Синхронизиране…"
@ -61,11 +61,38 @@ msgstr "Копие в тази папка на по-ранна версия"
msgid "Select to get a copy of this version"
msgstr "Изберете за копие на версията"
#: ../SparkleShare/SparkleDialog.cs:177
#: ../SparkleShare/SparkleAbout.cs:88
msgid "_Show Credits"
msgstr "_Заслуги"
#: ../SparkleShare/SparkleAbout.cs:101
msgid "_Visit Website"
msgstr "_Към уеб сайта"
#: ../SparkleShare/SparkleIntro.cs:70
#: ../SparkleShare/SparkleController.cs:416
msgid "ddd MMM d, yyyy"
msgstr "dd.MM.yyyy"
#: ../SparkleShare/SparkleController.cs:422
msgid "ddd MMM d"
msgstr "dd MMM, ddd"
#: ../SparkleShare/SparkleController.cs:700
#, csharp-format
msgid "added {0}"
msgstr "добавен е „{0}“"
#: ../SparkleShare/SparkleController.cs:711
#, csharp-format
msgid "edited {0}"
msgstr "редактиран е „{0}“"
#: ../SparkleShare/SparkleController.cs:722
#, csharp-format
msgid "deleted {0}"
msgstr "изтрит е „{0}“"
#: ../SparkleShare/SparkleIntro.cs:73
msgid ""
"Before we can create a SparkleShare folder on this computer, we need a few "
"bits of information from you."
@ -73,103 +100,103 @@ msgstr ""
"Трябва да попълните някои данни за себе си, преди да се създаде папка на "
"компютъра, ползваща SparkleShare."
#: ../SparkleShare/SparkleIntro.cs:82
#: ../SparkleShare/SparkleIntro.cs:86
msgid "Full Name:"
msgstr "Лично име:"
#: ../SparkleShare/SparkleIntro.cs:98
#: ../SparkleShare/SparkleIntro.cs:102
msgid "Email:"
msgstr "Е-поща:"
#: ../SparkleShare/SparkleIntro.cs:109
#: ../SparkleShare/SparkleIntro.cs:113
msgid "Next"
msgstr "Нататък"
#: ../SparkleShare/SparkleIntro.cs:116
#: ../SparkleShare/SparkleIntro.cs:120
msgid "Configuring…"
msgstr "Настройване…"
#: ../SparkleShare/SparkleIntro.cs:179
#: ../SparkleShare/SparkleIntro.cs:173
msgid "Where is your remote folder?"
msgstr "Къде е отдалечената папка?"
#: ../SparkleShare/SparkleIntro.cs:192
#: ../SparkleShare/SparkleIntro.cs:186
msgid "address-to-server.com"
msgstr "адрес.на.сървъра.com"
#: ../SparkleShare/SparkleIntro.cs:197
#: ../SparkleShare/SparkleIntro.cs:191
msgid "On my own server:"
msgstr "На основния сървър:"
#: ../SparkleShare/SparkleIntro.cs:204
#: ../SparkleShare/SparkleIntro.cs:198
msgid "Free hosting for Free and Open Source Software projects."
msgstr "Безплатен хостинг за свободни проекти и такива с отворен код."
#: ../SparkleShare/SparkleIntro.cs:205
#: ../SparkleShare/SparkleIntro.cs:199
msgid "Also has paid accounts for extra private space and bandwidth."
msgstr "За непублично пространство и допълнителни ресурси се плаща."
#: ../SparkleShare/SparkleIntro.cs:213
#: ../SparkleShare/SparkleIntro.cs:207
msgid "The GNOME Project"
msgstr "Проектът GNOME"
#: ../SparkleShare/SparkleIntro.cs:215
#: ../SparkleShare/SparkleIntro.cs:209
msgid "GNOME is an easy to understand interface to your computer."
msgstr "GNOME е разбираем интерфейс за компютъра ви."
#: ../SparkleShare/SparkleIntro.cs:216
#: ../SparkleShare/SparkleIntro.cs:210
msgid "Select this option if youre a developer or designer working on GNOME."
msgstr "Ако работите по GNOME, изберете тази версия."
#: ../SparkleShare/SparkleIntro.cs:224
#: ../SparkleShare/SparkleIntro.cs:218
msgid "Gitorious"
msgstr "Gitorious"
#: ../SparkleShare/SparkleIntro.cs:226
#: ../SparkleShare/SparkleIntro.cs:220
msgid "Completely Free as in Freedom infrastructure."
msgstr "Свободен като инфраструктурата на свободата."
#: ../SparkleShare/SparkleIntro.cs:227
#: ../SparkleShare/SparkleIntro.cs:221
msgid "Free accounts for Free and Open Source projects."
msgstr "Безплатно за свободни проекти и такива с отворен код."
#: ../SparkleShare/SparkleIntro.cs:239
#: ../SparkleShare/SparkleIntro.cs:233
msgid "Username/Folder"
msgstr "Потребител/Папка"
#: ../SparkleShare/SparkleIntro.cs:246
#: ../SparkleShare/SparkleIntro.cs:240
msgid "Project/Folder"
msgstr "Проект/Папка"
#: ../SparkleShare/SparkleIntro.cs:253
#: ../SparkleShare/SparkleIntro.cs:247
msgid "Project"
msgstr "Проект"
#: ../SparkleShare/SparkleIntro.cs:262 ../SparkleShare/SparkleIntro.cs:285
#: ../SparkleShare/SparkleIntro.cs:256 ../SparkleShare/SparkleIntro.cs:279
msgid "Folder"
msgstr "Папка"
#: ../SparkleShare/SparkleIntro.cs:290 ../SparkleShare/SparkleIntro.cs:467
#: ../SparkleShare/SparkleIntro.cs:284 ../SparkleShare/SparkleIntro.cs:462
msgid "Folder Name:"
msgstr "Име на папка:"
#: ../SparkleShare/SparkleIntro.cs:300
#: ../SparkleShare/SparkleIntro.cs:294
msgid "Sync"
msgstr "Синхронизиране"
#: ../SparkleShare/SparkleIntro.cs:394
#: ../SparkleShare/SparkleIntro.cs:389
msgid "Cancel"
msgstr "Отказване"
#: ../SparkleShare/SparkleIntro.cs:405
#: ../SparkleShare/SparkleIntro.cs:400
msgid "Skip"
msgstr "Прескачане"
#: ../SparkleShare/SparkleIntro.cs:437
#: ../SparkleShare/SparkleIntro.cs:432
msgid "Invitation received!"
msgstr "Поканата е приета!"
#: ../SparkleShare/SparkleIntro.cs:443
#: ../SparkleShare/SparkleIntro.cs:438
msgid ""
"You've received an invitation to join a shared folder.\n"
"We're ready to hook you up immediately if you wish."
@ -177,35 +204,35 @@ msgstr ""
"Получихте покана за споделена папка. Ако искате,\n"
"можете да я приемете, за да започне синхронизирането."
#: ../SparkleShare/SparkleIntro.cs:449
#: ../SparkleShare/SparkleIntro.cs:444
msgid "Do you accept this invitation?"
msgstr "Приемате ли поканата?"
#: ../SparkleShare/SparkleIntro.cs:458
#: ../SparkleShare/SparkleIntro.cs:453
msgid "Server Address:"
msgstr "Адрес на сървър:"
#: ../SparkleShare/SparkleIntro.cs:481
#: ../SparkleShare/SparkleIntro.cs:476
msgid "Reject"
msgstr "Отхвърляне"
#: ../SparkleShare/SparkleIntro.cs:482
#: ../SparkleShare/SparkleIntro.cs:477
msgid "Accept and Sync"
msgstr "Приемане и синхронизиране"
#: ../SparkleShare/SparkleIntro.cs:539
#: ../SparkleShare/SparkleIntro.cs:532
msgid "Something went wrong…"
msgstr "Получи се грешка…"
#: ../SparkleShare/SparkleIntro.cs:545
#: ../SparkleShare/SparkleIntro.cs:538
msgid "Try Again"
msgstr "Опитайте отново"
#: ../SparkleShare/SparkleIntro.cs:573
#: ../SparkleShare/SparkleIntro.cs:566
msgid "Folder synced successfully!"
msgstr "Папката е успешно синхронизирана!"
#: ../SparkleShare/SparkleIntro.cs:580
#: ../SparkleShare/SparkleIntro.cs:573
#, csharp-format
msgid ""
"Now you can access the synced files from {0} in your SparkleShare folder."
@ -214,86 +241,55 @@ msgstr ""
"SparkleShare."
#. A button that opens the synced folder
#: ../SparkleShare/SparkleIntro.cs:588
#: ../SparkleShare/SparkleIntro.cs:581
msgid "Open Folder"
msgstr "Отваряне на папката"
#: ../SparkleShare/SparkleIntro.cs:596 ../SparkleShare/SparkleIntro.cs:644
#: ../SparkleShare/SparkleIntro.cs:712
#: ../SparkleShare/SparkleIntro.cs:589 ../SparkleShare/SparkleIntro.cs:635
#: ../SparkleShare/SparkleIntro.cs:702
msgid "Finish"
msgstr "Завършване"
#: ../SparkleShare/SparkleIntro.cs:628
#: ../SparkleShare/SparkleIntro.cs:619
#, csharp-format
msgid "Syncing folder {0}’…"
msgstr "Синхронизиране на папка „{0}“…"
#: ../SparkleShare/SparkleIntro.cs:635
#: ../SparkleShare/SparkleIntro.cs:626
msgid "This may take a while.\n"
msgstr "Това може да отнеме малко време.\n"
#: ../SparkleShare/SparkleIntro.cs:636
#: ../SparkleShare/SparkleIntro.cs:627
msgid "Are you sure its not coffee o'clock?"
msgstr ""
msgstr "Не е ли време за кафенце?"
#: ../SparkleShare/SparkleIntro.cs:687
#: ../SparkleShare/SparkleIntro.cs:677
msgid "SparkleShare is ready to go!"
msgstr "SparkleShare е готов!"
#: ../SparkleShare/SparkleIntro.cs:693
#: ../SparkleShare/SparkleIntro.cs:683
msgid ""
"Now you can start accepting invitations from others. \n"
"Just click on invitations you get by email and we will take care of the rest."
msgstr ""
"Можете да приемате покани от други хора. \n"
"Когато ги получите по е-пощата, просто натиснете върху връзката. SparkleShare се грижи за останалото."
"Когато ги получите по е-пощата, просто натиснете върху връзката. "
"SparkleShare се грижи за останалото."
#: ../SparkleShare/SparkleIntro.cs:704
#: ../SparkleShare/SparkleIntro.cs:694
msgid "Learn how to host your own SparkleServer"
msgstr "Научете как да създадете свой сървър за SparkleServer"
#. TRANSLATORS: {0} is a folder name, and {1} is a server address
#: ../SparkleShare/SparkleLog.cs:54
#: ../SparkleShare/SparkleLog.cs:74
#, csharp-format
msgid "Events in {0}"
msgstr ""
msgstr "Събития в „{0}“"
#: ../SparkleShare/SparkleLog.cs:109
#: ../SparkleShare/SparkleLog.cs:126
msgid "_Open Folder"
msgstr "_Отваряне на папка"
#: ../SparkleShare/SparkleLog.cs:222
msgid "This folder has unsynced changes"
msgstr "В папката има несинхронизирани промени "
#: ../SparkleShare/SparkleLog.cs:223
msgid "We will sync these once were connected again"
msgstr "При наличие на връзка към Интернет, тя ще бъде синхронизирана"
#: ../SparkleShare/SparkleLog.cs:236
msgid "Could not sync with the remote folder"
msgstr "Папката не може да се синхронизира"
#: ../SparkleShare/SparkleLog.cs:237
msgid "Is the you and the server online?"
msgstr "Дали има връзка през Интернет към отдалечения сървър?"
#: ../SparkleShare/SparkleLog.cs:383
msgid "Edited"
msgstr "Редактиран"
#: ../SparkleShare/SparkleLog.cs:397
msgid "Added"
msgstr "Добавен"
#: ../SparkleShare/SparkleLog.cs:411
msgid "Deleted"
msgstr "Изтрит"
#: ../SparkleShare/SparkleLog.cs:425
msgid "Moved"
msgstr "Преместен"
#: ../SparkleShare/SparkleShare.cs:55
msgid "Sorry, you can't run SparkleShare with these permissions."
msgstr "С настоящите права не може да стартирате SparkleShare."
@ -350,8 +346,7 @@ msgstr "Употреба: sparkleshare [start|stop|restart] [ОПЦИЯ]…"
#: ../SparkleShare/SparkleShare.cs:145
msgid "Sync SparkleShare folder with remote repositories."
msgstr ""
"Синхронизиране на папката ви за SparkleShare с отдалечените източници."
msgstr "Синхронизиране на папката ви за SparkleShare с отдалечените източници."
#: ../SparkleShare/SparkleShare.cs:147
msgid "Arguments:"
@ -361,52 +356,37 @@ msgstr "Аргументи:"
msgid "SparkleShare "
msgstr "SparkleShare "
#: ../SparkleShare/SparkleStatusIcon.cs:187
#: ../SparkleShare/SparkleStatusIcon.cs:189
msgid "No Remote Folders Yet"
msgstr "Все още няма отдалечени папки"
#. Opens the wizard to add a new remote folder
#: ../SparkleShare/SparkleStatusIcon.cs:196
#: ../SparkleShare/SparkleStatusIcon.cs:198
msgid "Add Remote Folder…"
msgstr ""
msgstr "Добавяне на отдалечена папка…"
#: ../SparkleShare/SparkleStatusIcon.cs:216
#: ../SparkleShare/SparkleStatusIcon.cs:228
msgid "Turn Notifications Off"
msgstr ""
msgstr "Изключване на уведомяванията"
#: ../SparkleShare/SparkleStatusIcon.cs:218
#: ../SparkleShare/SparkleStatusIcon.cs:230
msgid "Turn Notifications On"
msgstr ""
msgstr "Включване на уведомленията"
#. A menu item that takes the user to http://www.sparkleshare.org/
#: ../SparkleShare/SparkleStatusIcon.cs:231
#: ../SparkleShare/SparkleStatusIcon.cs:243
msgid "About SparkleShare"
msgstr ""
msgstr "Относно SparkleShare"
#. A menu item that quits the application
#: ../SparkleShare/SparkleStatusIcon.cs:244
#: ../SparkleShare/SparkleStatusIcon.cs:256
msgid "Quit"
msgstr "Спиране на програмата"
#: ../SparkleShare/SparkleUI.cs:91
#, csharp-format
msgid "added {0}"
msgstr ""
#: ../SparkleShare/SparkleUI.cs:102
#, csharp-format
msgid "edited {0}"
msgstr ""
#: ../SparkleShare/SparkleUI.cs:113
#, csharp-format
msgid "deleted {0}"
msgstr ""
#: ../SparkleShare/SparkleUI.cs:157
#: ../SparkleShare/SparkleUI.cs:124
msgid "Ouch! Mid-air collision!"
msgstr "Опс, конфликт на версии!"
#: ../SparkleShare/SparkleUI.cs:158
#: ../SparkleShare/SparkleUI.cs:125
msgid "Don't worry, SparkleShare made a copy of each conflicting file."
msgstr "Без паника! SparkleShare е създал копие на всеки файл в конфликт."