diff options
| author | Zdenek Prikryl <zprikryl@redhat.com> | 2009-09-08 17:08:16 +0200 |
|---|---|---|
| committer | Zdenek Prikryl <zprikryl@redhat.com> | 2009-09-08 17:08:16 +0200 |
| commit | f02e1d87d46aa6161d0cab5444e0abfa9624b78d (patch) | |
| tree | cc1148c8ef544818a7995074e679a987ba325a44 | |
| parent | 58d9dfde6ce788c5ffdfe5160d19aaeb8ac7b3a2 (diff) | |
| parent | ff2627e7c597e50025ca4d91ff8168eec80f9054 (diff) | |
| download | abrt-f02e1d87d46aa6161d0cab5444e0abfa9624b78d.tar.gz abrt-f02e1d87d46aa6161d0cab5444e0abfa9624b78d.tar.xz abrt-f02e1d87d46aa6161d0cab5444e0abfa9624b78d.zip | |
Merge branch 'master' of git://git.fedorahosted.org/abrt
37 files changed, 3293 insertions, 511 deletions
diff --git a/lib/CommLayer/CommLayerInner.cpp b/lib/CommLayer/CommLayerInner.cpp index ec4dc904..5450b41c 100644 --- a/lib/CommLayer/CommLayerInner.cpp +++ b/lib/CommLayer/CommLayerInner.cpp @@ -1,50 +1,63 @@ -#include <pthread.h> /* pthread_self() */ +#include <pthread.h> +#include <map> #include "abrtlib.h" #include "CommLayerInner.h" static CObserver *s_pObs; -static pthread_t s_main_id; + +typedef std::map<uint64_t, std::string> map_uint_str_t; +static map_uint_str_t s_mapClientID; +static pthread_mutex_t s_map_mutex; +static bool s_map_mutex_inited; void init_daemon_logging(CObserver *pObs) { s_pObs = pObs; - s_main_id = pthread_self(); + if (!s_map_mutex_inited) + { + pthread_mutex_init(&s_map_mutex, NULL); + s_map_mutex_inited = true; + } +} + +void set_client_name(const char* name) +{ + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + if (!name) + s_mapClientID.erase(key); + else + s_mapClientID[key] = name; + pthread_mutex_unlock(&s_map_mutex); } void warn_client(const std::string& pMessage) { if (!s_pObs) return; - pthread_t self = pthread_self(); - if (self != s_main_id) - { - s_pObs->Warning(pMessage,(uint64_t)self); -//log("w: '%s'", s.c_str()); - } - else - { - s_pObs->Warning(pMessage); -// debug: this should not happen - if it is, we are trying to log to a client -// but we have no job id! -log("W: '%s'", pMessage.c_str()); - } + + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + map_uint_str_t::const_iterator ki = s_mapClientID.find(key); + const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL); + pthread_mutex_unlock(&s_map_mutex); + + s_pObs->Warning(pMessage, peer, key); } void update_client(const std::string& pMessage) { if (!s_pObs) return; - pthread_t self = pthread_self(); - if (self != s_main_id) - { - s_pObs->Status(pMessage, (uint64_t)self); -//log("u: '%s'", s.c_str()); - } - else - { - s_pObs->Status(pMessage); -// debug: this should not happen - if it is, we are trying to log to a client -// but we have no job id! -log("U: '%s'", pMessage.c_str()); - } + + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + map_uint_str_t::const_iterator ki = s_mapClientID.find(key); + const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL); + pthread_mutex_unlock(&s_map_mutex); + + s_pObs->Status(pMessage, peer, key); } diff --git a/lib/CommLayer/CommLayerInner.h b/lib/CommLayer/CommLayerInner.h index 2b4f63a3..d161cfc7 100644 --- a/lib/CommLayer/CommLayerInner.h +++ b/lib/CommLayer/CommLayerInner.h @@ -5,6 +5,10 @@ void init_daemon_logging(CObserver *pObs); +/* + * Set client's name (dbus ID). NULL unsets it. + */ +void set_client_name(const char* name); /* Ask a client to warn the user about a non-fatal, but unexpected condition. * In GUI, it will usually be presented as a popup message. */ diff --git a/lib/CommLayer/Observer.h b/lib/CommLayer/Observer.h index 5c983949..421dc0cc 100644 --- a/lib/CommLayer/Observer.h +++ b/lib/CommLayer/Observer.h @@ -9,8 +9,8 @@ class CObserver { public: virtual ~CObserver() {} - virtual void Status(const std::string& pMessage, uint64_t pDest=0) = 0; - virtual void Warning(const std::string& pMessage, uint64_t pDest=0) = 0; + virtual void Status(const std::string& pMessage, const char* peer, uint64_t pDest) = 0; + virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pDest) = 0; }; #endif diff --git a/lib/MiddleWare/Database.h b/lib/MiddleWare/Database.h index ce29f18b..0fc31ee7 100644 --- a/lib/MiddleWare/Database.h +++ b/lib/MiddleWare/Database.h @@ -111,7 +111,7 @@ class CDatabase : public CPlugin * @param pUID An UID of an user. * @return A vector of matched rows. */ - virtual const vector_database_rows_t GetUIDData(const std::string& pUID) = 0; + virtual vector_database_rows_t GetUIDData(const std::string& pUID) = 0; /** * A method, which returns one row accordind to UUID of a crash and * UID of an user. If there are no row, empty row is returned. @@ -119,7 +119,7 @@ class CDatabase : public CPlugin * @param pUID An UID of an user. * @return A matched row. */ - virtual const database_row_t GetUUIDData(const std::string& pUUID, + virtual database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID) = 0; }; diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp index 2d0326c5..995ddbeb 100644 --- a/lib/Plugins/CCpp.cpp +++ b/lib/Plugins/CCpp.cpp @@ -428,22 +428,24 @@ std::string CAnalyzerCCpp::GetLocalUUID(const std::string& pDebugDumpDir) { update_client(_("Getting local universal unique identification...")); - CDebugDump dd; std::string UID; std::string executable; std::string package; std::string buildIdPC; std::string independentBuildIdPC; - std::string core = "--core="+ pDebugDumpDir + "/" +FILENAME_COREDUMP; + std::string core = "--core=" + pDebugDumpDir + "/"FILENAME_COREDUMP; char* command = (char*)"eu-unstrip"; char* args[4] = { (char*)"eu-unstrip", NULL, (char*)"-n", NULL }; args[1] = (char*)core.c_str(); + + CDebugDump dd; dd.Open(pDebugDumpDir); dd.LoadText(FILENAME_UID, UID); dd.LoadText(FILENAME_EXECUTABLE, executable); dd.LoadText(FILENAME_PACKAGE, package); ExecVP(command, args, atoi(UID.c_str()), buildIdPC); dd.Close(); + GetIndependentBuildIdPC(buildIdPC, independentBuildIdPC); return CreateHash(package + executable + independentBuildIdPC); } @@ -484,14 +486,13 @@ void CAnalyzerCCpp::CreateReport(const std::string& pDebugDumpDir) dd.Close(); map_plugin_settings_t settings = GetSettings(); - if( settings["InstallDebuginfo"] == "yes" ) + if (settings["InstallDebuginfo"] == "yes") { InstallDebugInfos(package); } - else { - char buffer[1024]; - snprintf(buffer,1024, _("Skip debuginfo installation for package %s"), package.c_str()); - warn_client(std::string(buffer)); + else + { + warn_client(ssprintf(_("Skip debuginfo installation for package %s"), package.c_str())); } GetBacktrace(pDebugDumpDir, backtrace); @@ -554,17 +555,21 @@ void CAnalyzerCCpp::DeInit() void CAnalyzerCCpp::SetSettings(const map_plugin_settings_t& pSettings) { - if (pSettings.find("MemoryMap") != pSettings.end()) + map_plugin_settings_t::const_iterator end = pSettings.end(); + map_plugin_settings_t::const_iterator it = pSettings.find("MemoryMap"); + if (it != end) { - m_bMemoryMap = pSettings.find("MemoryMap")->second == "yes"; + m_bMemoryMap = it->second == "yes"; } - if (pSettings.find("DebugInfo") != pSettings.end()) + it = pSettings.find("DebugInfo"); + if (it != end) { - m_sDebugInfo = pSettings.find("DebugInfo")->second; + m_sDebugInfo = it->second; } - if (pSettings.find("InstallDebuginfo") != pSettings.end()) + it = pSettings.find("InstallDebuginfo"); + if (it != end) { - m_bInstallDebuginfo = pSettings.find("InstallDebuginfo")->second == "yes"; + m_bInstallDebuginfo = it->second == "yes"; } } diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp index a57da240..700ac913 100644 --- a/lib/Plugins/SQLite3.cpp +++ b/lib/Plugins/SQLite3.cpp @@ -1,6 +1,5 @@ /* - DebugDump.h - header file for the library caring of writing new reports - to the specific directory + SQLite3.cpp Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) Copyright (C) 2009 RedHat inc. @@ -33,7 +32,7 @@ #define ABRT_TABLE "abrt_v"ABRT_TABLE_VERSION_STR #define SQLITE3_MASTER_TABLE "sqlite_master" -// afret a while, we can drom a support for update, so a table can stay in +// after a while, we can drop support for update, so a table can stay in // normal limits static const char* upate_sql_commands[][ABRT_TABLE_VERSION + 1] = { // v0 -> * @@ -100,9 +99,9 @@ bool CSQLite3::Exist(const std::string& pUUID, const std::string& pUID) GetTable("SELECT "DATABASE_COLUMN_REPORTED" FROM "ABRT_TABLE" WHERE " DATABASE_COLUMN_UUID" = '"+pUUID+"' AND " DATABASE_COLUMN_UID" = '"+pUID+"';", table); - if(table.empty()) + if (table.empty()) { - return false; + return false; } return true; } @@ -113,7 +112,7 @@ void CSQLite3::Exec(const std::string& pCommand) int ret = sqlite3_exec(m_pDB, pCommand.c_str(), 0, 0, &err); if (ret != SQLITE_OK) { - throw CABRTException(EXCEP_PLUGIN, "SQLite3::Exec(): Error on: " + pCommand + " " + err); + throw CABRTException(EXCEP_PLUGIN, "SQLite3::Exec(): Error on: " + pCommand + " " + err); } } @@ -211,7 +210,7 @@ bool CSQLite3::CheckTable() int ret = sqlite3_get_table(m_pDB, command.c_str(), &table, &nrow, &ncol, &err); if (ret != SQLITE_OK) { - throw CABRTException(EXCEP_PLUGIN, "SQLite3::GetTable(): Error on: " + command + " " + err); + throw CABRTException(EXCEP_PLUGIN, "SQLite3::GetTable(): Error on: " + command + " " + err); } if (!nrow || !nrow) { @@ -281,24 +280,24 @@ void CSQLite3::Insert(const std::string& pUUID, { if (!Exist(pUUID, pUID)) { - Exec("INSERT INTO "ABRT_TABLE"(" - DATABASE_COLUMN_UUID"," - DATABASE_COLUMN_UID"," - DATABASE_COLUMN_DEBUG_DUMP_PATH"," - DATABASE_COLUMN_TIME")" - " VALUES ('"+pUUID+"'," - "'"+pUID+"'," - "'"+pDebugDumpPath+"'," - "'"+pTime+"'" - ");"); + Exec("INSERT INTO "ABRT_TABLE"(" + DATABASE_COLUMN_UUID"," + DATABASE_COLUMN_UID"," + DATABASE_COLUMN_DEBUG_DUMP_PATH"," + DATABASE_COLUMN_TIME")" + " VALUES ('"+pUUID+"'," + "'"+pUID+"'," + "'"+pDebugDumpPath+"'," + "'"+pTime+"'" + ");"); } else { - Exec("UPDATE "ABRT_TABLE" " - "SET "DATABASE_COLUMN_COUNT" = "DATABASE_COLUMN_COUNT" + 1, " - DATABASE_COLUMN_TIME" = '"+pTime+"' " - "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " - "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); + Exec("UPDATE "ABRT_TABLE" " + "SET "DATABASE_COLUMN_COUNT" = "DATABASE_COLUMN_COUNT" + 1, " + DATABASE_COLUMN_TIME" = '"+pTime+"' " + "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " + "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); } } @@ -306,14 +305,14 @@ void CSQLite3::Delete(const std::string& pUUID, const std::string& pUID) { if (pUID == "0") { - Exec("DELETE FROM "ABRT_TABLE" " - "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"';"); + Exec("DELETE FROM "ABRT_TABLE" " + "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"';"); } else if (Exist(pUUID, pUID)) { - Exec("DELETE FROM "ABRT_TABLE" " - "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " - "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); + Exec("DELETE FROM "ABRT_TABLE" " + "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " + "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); } else { @@ -325,14 +324,14 @@ void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID, co { if (Exist(pUUID, pUID)) { - Exec("UPDATE "ABRT_TABLE" " - "SET "DATABASE_COLUMN_REPORTED" = 1 " - "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " - "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); - Exec("UPDATE "ABRT_TABLE" " - "SET "DATABASE_COLUMN_MESSAGE" = '" + pMessage + "' " - "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " - "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); + Exec("UPDATE "ABRT_TABLE" " + "SET "DATABASE_COLUMN_REPORTED" = 1 " + "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " + "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); + Exec("UPDATE "ABRT_TABLE" " + "SET "DATABASE_COLUMN_MESSAGE" = '" + pMessage + "' " + "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' " + "AND "DATABASE_COLUMN_UID" = '"+pUID+"';"); } else { @@ -340,7 +339,7 @@ void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID, co } } -const vector_database_rows_t CSQLite3::GetUIDData(const std::string& pUID) +vector_database_rows_t CSQLite3::GetUIDData(const std::string& pUID) { vector_database_rows_t table; if (pUID == "0") @@ -356,7 +355,7 @@ const vector_database_rows_t CSQLite3::GetUIDData(const std::string& pUID) return table; } -const database_row_t CSQLite3::GetUUIDData(const std::string& pUUID, const std::string& pUID) +database_row_t CSQLite3::GetUUIDData(const std::string& pUUID, const std::string& pUID) { vector_database_rows_t table; diff --git a/lib/Plugins/SQLite3.h b/lib/Plugins/SQLite3.h index 1604d3be..e7ca8ae2 100644 --- a/lib/Plugins/SQLite3.h +++ b/lib/Plugins/SQLite3.h @@ -1,6 +1,5 @@ /* - DebugDump.h - header file for the library caring of writing new reports - to the specific directory + SQLite3.h Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com) Copyright (C) 2009 RedHat inc. @@ -55,8 +54,8 @@ class CSQLite3 : public CDatabase virtual void Delete(const std::string& pUUID, const std::string& pUID); virtual void SetReported(const std::string& pUUID, const std::string& pUID, const std::string& pMessage); - virtual const vector_database_rows_t GetUIDData(const std::string& pUID); - virtual const database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID); + virtual vector_database_rows_t GetUIDData(const std::string& pUID); + virtual database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID); virtual void SetSettings(const map_plugin_settings_t& pSettings); virtual map_plugin_settings_t GetSettings(); diff --git a/po/bn_IN.po b/po/bn_IN.po new file mode 100644 index 00000000..a493443f --- /dev/null +++ b/po/bn_IN.po @@ -0,0 +1,430 @@ +# translation of abrt.master.po to Bengali INDIA +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Runa Bhattacharjee <runab@redhat.com>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: abrt.master\n" +"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" +"POT-Creation-Date: 2009-09-07 08:38+0000\n" +"PO-Revision-Date: 2009-09-07 23:10+0530\n" +"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n" +"Language-Team: Bengali INDIA <anubad@lists.ankur.org.in>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../src/Gui/ABRTExceptions.py:4 +msgid "Another client is already running, trying to wake it." +msgstr "একটি ভিন্ন ক্লায়েন্ট বর্তমানে চলছে, সেটিকে জাগানোর প্রচেষ্টা করা হচ্ছে।" + +#: ../src/Gui/ABRTExceptions.py:10 +msgid "Got unexpected data from daemon (is the database properly updated?)." +msgstr "ডেমন থেকে অপ্রত্যাশিত তথ্য পাওয়া গিয়েছে (ডাটাবেস কি সঠিকভাবে আপডেট করা হয়েছে?)।" + +#: ../src/Gui/ABRTPlugin.py:26 +msgid "Analyzer plugins" +msgstr "বিশ্লেষণের প্লাগ-ইন" + +#: ../src/Gui/ABRTPlugin.py:27 +msgid "Action plugins" +msgstr "কাজের প্লাগ-ইন" + +#: ../src/Gui/ABRTPlugin.py:28 +msgid "Reporter plugins" +msgstr "রিপোর্টার প্লাগ-ইন" + +#: ../src/Gui/ABRTPlugin.py:29 +msgid "Database plugins" +msgstr "ডাটাবেস প্লাগ-ইন" + +#: ../src/Gui/CCDBusBackend.py:140 +msgid "Can't connect to dbus" +msgstr "dbus-র সাথে সংযোগ স্থাপন করতে ব্যর্থ" + +#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163 +msgid "Please check if abrt daemon is running." +msgstr "abrt ডেমন চলছে কি না তা অনুগ্রহ করে পরীক্ষা করুন।" + +#: ../src/Gui/CCDBusBackend.py:181 +msgid "" +"Daemon did't return valid report info\n" +"Debuginfo is missing?" +msgstr "" +"ডেমন থেকে বৈধ রিপোর্টের তথ্য প্রাপ্ত হয়নি\n" +"Debuginfo কি অনুপস্থিত?" + +#: ../src/Gui/ccgui.glade.h:1 +msgid " " +msgstr " " + +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) ২০০৯ Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215 +msgid "<b>Not reported!</b>" +msgstr "<b>রিপোর্ট করা হয়নি!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">বিবরণ</span>" + +#: ../src/Gui/ccgui.glade.h:5 +msgid "About ABRT" +msgstr "ABRT পরিচিতি" + +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "স্বয়ংক্রিয় বাগ রিপোর্টিং ব্যবস্থা" + +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "মুছে ফেলুন" + +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "অনুগ্রহ করে অপেক্ষা করুন..." + +#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2 +msgid "Report" +msgstr "রিপোর্ট" + +#: ../src/Gui/ccgui.glade.h:10 +msgid "" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" +"\n" +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " +"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " +"more details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see <http://www.gnu.org/licenses/>." +msgstr "" +"এটি একটি মুক্ত সফ্টওয়্যার; Free Software Foundation দ্বারা প্রকাশিত GNU " +"General Public License-র শর্তানুযায়ী এটি বিতরণ ও পরিবর্তন করা যাবে; লাইসেন্সের " +"সংস্করণ ২ অথবা (আপনার সুবিধানুযায়ী) ঊর্ধ্বতন কোনো সংস্করণের অধীন।\n" +"\n" +"এই প্রোগ্রামটি বিতরণ করার মূল উদ্দেশ্য যে ব্যবহারকারীরা এর দ্বারা উপকৃত হবেন, কিন্তু " +"এটির জন্য কোনো সুস্পষ্ট ওয়ারেন্টি উপস্থিত নেই; বাণিজ্যিক ও কোনো সুনির্দিষ্ট কর্ম সাধনের " +"জন্য অন্তর্নিহীত ওয়ারেন্টিও অনুপস্থিত। অধিক জানতে GNU General Public License পড়ুন।\n" +"\n" +"এটির সাথে GNU General Public License-র একটি প্রতিলিপি উপলব্ধ হওয়া " +"উচিত; না থাকলে <http://www.gnu.org/licenses/> দেখুন।" + +#: ../src/Gui/ccgui.glade.h:15 +msgid "Working..." +msgstr "কর্মরত..." + +#: ../src/Gui/ccgui.glade.h:16 +msgid "_Edit" +msgstr "সম্পাদনা (_E)" + +#: ../src/Gui/ccgui.glade.h:17 +msgid "_File" +msgstr "ফাইল (_F)" + +#: ../src/Gui/ccgui.glade.h:18 +msgid "_Help" +msgstr "সাহায্য (_H)" + +#: ../src/Gui/CCMainWindow.py:86 +msgid "Package" +msgstr "প্যাকেজ" + +#: ../src/Gui/CCMainWindow.py:87 +msgid "Application" +msgstr "অ্যাপ্লিকেশন" + +#: ../src/Gui/CCMainWindow.py:88 +msgid "Date" +msgstr "তারিখ" + +#: ../src/Gui/CCMainWindow.py:89 +msgid "Crash Rate" +msgstr "বিপর্যয়ের হার" + +#: ../src/Gui/CCMainWindow.py:91 +msgid "User" +msgstr "ব্যবহারকারী" + +#: ../src/Gui/CCMainWindow.py:157 +#, python-format +msgid "" +"Unable to finish current task!\n" +"%s" +msgstr "" +"বর্তমান কর্ম সমাপ্ত করতে ব্যর্থ!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:174 +#, python-format +msgid "" +"Error while loading the dumplist, please check if abrt daemon is running\n" +" %s" +msgstr "" +"dumplist লোড করতে সমস্যা। অনুগ্রহ করে পরীক্ষঅ করুন abrt ডেমন চলছে কি না\n" +" %s" + +#: ../src/Gui/CCMainWindow.py:207 +msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" +msgstr "<b>বিপর্যয়ের তথ্য দায়ের করা হয়েছে। রিপোর্ট(গুলি) নিম্নলিখিত অবস্থান উপস্থিত রয়েছে:</b>\n" + +#: ../src/Gui/CCMainWindow.py:267 +msgid "" +"Unable to get report!\n" +"Debuginfo is missing?" +msgstr "" +"রিপোর্ট প্রাপ্ত করতে ব্যর্থ!\n" +"Debuginfo কি অনুপস্থিত?" + +#: ../src/Gui/CCMainWindow.py:279 +#, python-format +msgid "" +"Reporting failed!\n" +"%s" +msgstr "" +"রিপোর্ট করতে ব্যর্থ!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:311 +#, python-format +msgid "Error getting the report: %s" +msgstr "রিপোর্ট প্রাপ্ত করতে ব্যর্থ: %s" + +#: ../src/Gui/CCReporterDialog.py:98 +#, python-format +msgid "" +"<b>WARNING</b>, you're about to send data which might contain sensitive " +"information.\n" +"Do you really want to send <b>%s</b>?\n" +msgstr "" +"<b>সতর্কবার্তা</b>, সংবেদনশীল তথ্য বিশিষ্ট কিছু তথ্য প্রেরণের প্রচেষ্টা করা হচ্ছে।\n" +"আপনি কি নিশ্চিতরূপে <b>%s</b> পাঠাতে ইচ্ছুক?\n" + +#: ../src/Gui/CCReporterDialog.py:111 +msgid "Brief description how to reproduce this or what you did..." +msgstr "এটি পুনরায় সঞ্চালনের সংক্ষিপ্ত বিবরণ অথবা আপনার সঞ্চালিত কর্মের তথ্য..." + +#: ../src/Gui/PluginSettingsUI.py:17 +msgid "Can't find PluginDialog widget in UI description!" +msgstr "ইউজার ইন্টারফেসের বিবরণের মধ্যে PluginDialog উইজেট পাওয়া যায়নি!" + +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:21 +#, python-format +msgid "No UI for plugin %s" +msgstr "%s প্লাগ-ইনের কোনো UI উপস্থিত নেই" + +#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64 +msgid "combo box is not implemented" +msgstr "কম্বো-বক্স বাস্তবায়িত হয়নি" + +#: ../src/Gui/PluginSettingsUI.py:47 +msgid "Nothing to hydrate!" +msgstr "প্রদর্শনযোগ্য কোনো বস্তু উপস্থিত নেই!" + +#: ../src/Gui/report.glade.h:1 +msgid "Comment" +msgstr "বিবৃতি" + +#: ../src/Gui/report.glade.h:3 +msgid "Send" +msgstr "প্রেরণ করুন" + +#: ../src/Gui/report.glade.h:4 +msgid "gtk-cancel" +msgstr "gtk-cancel" + +#: ../src/Gui/SettingsDialog.py:22 +msgid "Can't load gui description for SettingsDialog!" +msgstr "SettingsDialog-র জন্য gui-র বিবরণ লোড করতে ব্যর্থ!" + +#: ../src/Gui/SettingsDialog.py:34 +msgid "Name" +msgstr "নাম" + +#: ../src/Gui/SettingsDialog.py:52 +msgid "Enabled" +msgstr "সক্রিয়" + +#: ../src/Gui/SettingsDialog.py:117 +msgid "Can't get plugin description" +msgstr "প্লাগ-ইনের বিবরণে প্রাপ্ত করতে ব্যর্থ" + +#: ../src/Gui/SettingsDialog.py:125 +#, python-format +msgid "" +"Error while opening plugin settings UI: \n" +"\n" +"%s" +msgstr "" +"প্লাগ-ইনের বৈশিষ্ট্যের ইউজার ইন্টারফেস খুলতে সমস্যা: \n" +"\n" +"%s" + +#: ../src/Gui/SettingsDialog.py:135 +#, python-format +msgid "" +"Can't save plugin settings:\n" +" %s" +msgstr "" +"প্লাগ-ইনের বৈশিষ্ট্য সংরক্ষণ করতে ব্যর্থ:\n" +" %s" + +#: ../src/Gui/SettingsDialog.py:141 +msgid "unknown response from settings dialog" +msgstr "বৈশিষ্ট্যের ডায়লগ থেকে প্রাপ্ত উত্তর অজানা" + +#: ../src/Applet/Applet.cpp:45 +#, c-format +msgid "A crash in package %s has been detected!" +msgstr "%s প্যাকেজের মধ্যে একটি বিপর্যয় সনাক্ত করা হয়েছে!" + +#. applet is already running +#: ../src/Applet/Applet.cpp:82 +msgid "Applet is already running." +msgstr "অ্যাপ্লেট বর্তমানে চলছে।" + +#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 +#: ../src/Applet/CCApplet.cpp:201 +msgid "ABRT service is not running" +msgstr "ABRT পরিসেবা বর্তমানে চলছে না" + +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 +#, c-format +msgid "Pending events: %i" +msgstr "অপেক্ষারত কর্ম: %i" + +#: ../src/Applet/CCApplet.cpp:161 +#, c-format +msgid "Can't create menu from the description, popup won't be available!\n" +msgstr "বিবরণের তথ্য প্রয়োগ করে মেনু তৈরি করতে ব্যর্থ, পপ-আপ উপলব্ধ হবে না!\n" + +#: ../src/Applet/CCApplet.cpp:190 +msgid "" +"This is default handler, you should register your own with " +"ConnectCrashHandler" +msgstr "এটি ডিফল্ট হ্যান্ডলার, ConnectCrashHandler সহযোগে নিজস্ব হ্যান্ডলার নিবন্ধন করুন" + +#: ../src/Applet/CCApplet.cpp:205 +msgid "ABRT service has been started" +msgstr "ABRT পরিসেবা আরম্ভ করা হয়েছে" + +#: ../src/Applet/CCApplet.cpp:231 +msgid "Out of memory" +msgstr "মেমরি অবশিষ্ট নেই" + +#: ../src/Applet/CCApplet.cpp:247 +msgid "Warning" +msgstr "সতর্কবার্তা" + +#: ../lib/Plugins/Bugzilla.cpp:219 +msgid "Bug is already reported: " +msgstr "বাগ পূর্বেই দায়ের করা হয়েছে: " + +#: ../lib/Plugins/Bugzilla.cpp:279 +#, c-format +msgid "Binary file %s will not be reported." +msgstr "%s বাইনারি ফাইলের রিপোর্ট দায়ের করা হবে না।" + +#: ../lib/Plugins/Bugzilla.cpp:349 +msgid "New bug id: " +msgstr "নতুন বাগ id: " + +#: ../lib/Plugins/Bugzilla.cpp:413 +msgid "Checking for duplicates..." +msgstr "প্রতিলিপি পরীক্ষা করা হচ্ছে..." + +#: ../lib/Plugins/Bugzilla.cpp:429 +msgid "Logging into bugzilla..." +msgstr "bugzilla-তে লগ-ইন করা হচ্ছে..." + +#: ../lib/Plugins/Bugzilla.cpp:443 +msgid "Creating new bug..." +msgstr "নতুন বাগ তৈরি করা হচ্ছে..." + +#: ../lib/Plugins/Bugzilla.cpp:448 +msgid "Logging out..." +msgstr "লগ-আউট করা হচ্ছে..." + +#: ../lib/Plugins/Kerneloops.cpp:38 +msgid "Getting local/global universal unique identification..." +msgstr "স্থানীয়/গ্লোবাল ইউনিভার্সেল ইউনিক আইডেন্টিফিকেশন প্রাপ্ত করা হচ্ছে..." + +#: ../lib/Plugins/CCpp.cpp:82 +msgid "Searching for debug-info packages..." +msgstr "debug-info প্যাকেজ অনুসন্ধান করা হচ্ছে..." + +#: ../lib/Plugins/CCpp.cpp:120 +msgid "Downloading and installing debug-info packages..." +msgstr "debug-info প্যাকেজ ডাউনলোড ও ইনস্টল করা হচ্ছে..." + +#: ../lib/Plugins/CCpp.cpp:180 +msgid "Getting backtrace..." +msgstr "ব্যাক-ট্রেস প্রাপ্ত করা হচ্ছে..." + +#: ../lib/Plugins/CCpp.cpp:429 +msgid "Getting local universal unique identification..." +msgstr "স্থানীয় ইউনিভার্সেল ইউনিক আইডেন্টিফিকেশন প্রাপ্ত করা হচ্ছে..." + +#: ../lib/Plugins/CCpp.cpp:453 +msgid "Getting global universal unique identification..." +msgstr "গ্লোবাল ইউনিভার্সেল ইউনিক আইডেন্টিফিকেশন প্রাপ্ত করা হচ্ছে..." + +#: ../lib/Plugins/CCpp.cpp:471 +msgid "Starting report creation..." +msgstr "রিপোর্ট নির্মাণ আরম্ভ করা হচ্ছে..." + +#: ../lib/Plugins/KerneloopsReporter.cpp:101 +msgid "Creating and submitting a report..." +msgstr "রিপোর্ট নির্মাণ করে দায়ের করুন..." + +#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124 +msgid "Creating a report..." +msgstr "রিপোর্ট নির্মাণ করুন..." + +#: ../lib/Plugins/RunApp.cpp:62 +msgid "Executing RunApp plugin..." +msgstr "RunApp প্লাগ-ইন সঞ্চালনা..." + +#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247 +msgid "FileTransfer: URL not specified" +msgstr "FileTransfer: URL উল্লিখিত হয়নি" + +#: ../lib/Plugins/FileTransfer.cpp:69 +#, c-format +msgid "Sending archive %s via %s" +msgstr "%s আর্কাইভটি %s-র মাধ্যমে প্রেরিত হচ্ছে" + +#: ../lib/Plugins/FileTransfer.cpp:121 +msgid "Creating an archive..." +msgstr "একটি আর্কাইভ নির্মাণ করুন..." + +#: ../lib/Plugins/FileTransfer.cpp:176 +msgid "File Transfer: Creating a report..." +msgstr "ফাইল পরিবহণ: রিপোর্ট নির্মাণ করুন..." + +#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226 +msgid "CFileTransfer::Run(): Cannot create and send an archive: " +msgstr "CFileTransfer::Run(): আর্কাইভ নির্মাণ করে প্রেরণ করতে ব্যর্থ: " + +#: ../lib/Plugins/KerneloopsScanner.cpp:79 +msgid "Creating kernel oops crash reports..." +msgstr "kernel oops বিপর্যয়ের রিপোর্ট নির্মাণ করা হচ্ছে..." + +#: ../lib/Plugins/Mailx.cpp:110 +msgid "Sending an email..." +msgstr "ই-মেইল পাঠানো হচ্ছে..." + +#: ../lib/Plugins/SOSreport.cpp:90 +msgid "Executing SOSreportAction plugin..." +msgstr "SOSreportAction প্লাগ-ইন সঞ্চালনা করা হচ্ছে..." + @@ -257,7 +257,8 @@ msgstr "" msgid "" "Can't save plugin settings:\n" " %s" -msgstr "Nepadařilo se uložit nastavení pro %s\n" +msgstr "Nepadařilo se uložit nastavení pro:\n" +" %s" #: src/Gui/SettingsDialog.py:141 msgid "unknown response from settings dialog" diff --git a/po/gu.po b/po/gu.po new file mode 100644 index 00000000..4327d9af --- /dev/null +++ b/po/gu.po @@ -0,0 +1,441 @@ +# translation of abrt.master.abrt.po to Gujarati +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Sweta Kothari <swkothar@redhat.com>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: abrt.master.abrt\n" +"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" +"POT-Creation-Date: 2009-09-08 08:41+0000\n" +"PO-Revision-Date: 2009-09-08 15:54+0530\n" +"Last-Translator: Sweta Kothari <swkothar@redhat.com>\n" +"Language-Team: Gujarati\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#: ../src/Gui/ABRTExceptions.py:4 +msgid "Another client is already running, trying to wake it." +msgstr "બીજો ક્લાઇન્ટ પહેલેથી જ ચાલી રહ્યો છે, તેને ઝગાડવા માટે પ્રયત્ન કરી રહ્યા છે." + +#: ../src/Gui/ABRTExceptions.py:10 +msgid "Got unexpected data from daemon (is the database properly updated?)." +msgstr "ડિમન માંથી અનિચ્છનીય માહિતી મળી (શું યોગ્ય રીતે ડેટાબેઝ સુધારેલ છે?)." + +#: ../src/Gui/ABRTPlugin.py:26 +msgid "Analyzer plugins" +msgstr "Analyzer પલ્ગઇનો" + +#: ../src/Gui/ABRTPlugin.py:27 +msgid "Action plugins" +msgstr "Action પ્લગઇનો" + +#: ../src/Gui/ABRTPlugin.py:28 +msgid "Reporter plugins" +msgstr "Reporter પ્લગઇનો" + +#: ../src/Gui/ABRTPlugin.py:29 +msgid "Database plugins" +msgstr "Database પ્લગઇનો" + +#: ../src/Gui/CCDBusBackend.py:140 +msgid "Can't connect to dbus" +msgstr "dbus નું જોડાણ કરી શકતા નથી" + +#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163 +msgid "Please check if abrt daemon is running." +msgstr "મહેરબાની કરીને ચકાસો જો abrt ડિમન ચાલી રહ્યુ હોય." + +#: ../src/Gui/CCDBusBackend.py:181 +msgid "" +"Daemon did't return valid report info\n" +"Debuginfo is missing?" +msgstr "" +"ડિમન યોગ્ય અહેલાલ જાણકારી પાછી મળતી નથી\n" +"Debuginfo ગુમ થયેલ છે?" + +#: ../src/Gui/ccgui.glade.h:1 +msgid " " +msgstr " " + +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215 +msgid "<b>Not reported!</b>" +msgstr "<b>અહેવાલ થયેલ નથી!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">વર્ણન</span>" + +#: ../src/Gui/ccgui.glade.h:5 +msgid "About ABRT" +msgstr "ABRT વિશે" + +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "Automatic Bug Reporting Tool" + +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "કાઢી નાંખો" + +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "મહેરબાની કરીને થોભો.." + +#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2 +msgid "Report" +msgstr "અહેવાલ" + +#: ../src/Gui/ccgui.glade.h:10 +msgid "" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" +"\n" +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " +"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " +"more details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see <http://www.gnu.org/licenses/>." +msgstr "" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" +"\n" +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " +"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " +"more details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see <http://www.gnu.org/licenses/>." + +#: ../src/Gui/ccgui.glade.h:15 +msgid "Working..." +msgstr "કામ કરી રહ્યુ છે..." + +#: ../src/Gui/ccgui.glade.h:16 +msgid "_Edit" +msgstr "ફેરફાર કરો (_E)" + +#: ../src/Gui/ccgui.glade.h:17 +msgid "_File" +msgstr "ફાઇલ (_F)" + +#: ../src/Gui/ccgui.glade.h:18 +msgid "_Help" +msgstr "મદદ (_H)" + +#: ../src/Gui/CCMainWindow.py:86 +msgid "Package" +msgstr "પેકેજ" + +#: ../src/Gui/CCMainWindow.py:87 +msgid "Application" +msgstr "કાર્યક્રમ" + +#: ../src/Gui/CCMainWindow.py:88 +msgid "Date" +msgstr "તારીખ" + +#: ../src/Gui/CCMainWindow.py:89 +msgid "Crash Rate" +msgstr "Crash Rate" + +#: ../src/Gui/CCMainWindow.py:91 +msgid "User" +msgstr "વપરાશકર્તા" + +#: ../src/Gui/CCMainWindow.py:157 +#, python-format +msgid "" +"Unable to finish current task!\n" +"%s" +msgstr "" +"હાલનાં કાર્યને સમાપ્ત કરવાનું અસમર્થ!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:174 +#, python-format +msgid "" +"Error while loading the dumplist, please check if abrt daemon is running\n" +" %s" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:207 +msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:267 +msgid "" +"Unable to get report!\n" +"Debuginfo is missing?" +msgstr "" +"અહેવાલ મેળવવામાં અસમર્થ!\n" +"Debuginfo ગુમ થયેલ છે?" + +#: ../src/Gui/CCMainWindow.py:279 +#, python-format +msgid "" +"Reporting failed!\n" +"%s" +msgstr "" +"અહેવાલ કરવાનું નિષ્ફળ!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:311 +#, python-format +msgid "Error getting the report: %s" +msgstr "અહેવાલને મેળવી રહ્યા હોય ત્યારે ભૂલ: %s" + +#: ../src/Gui/CCReporterDialog.py:98 +#, python-format +msgid "" +"<b>WARNING</b>, you're about to send data which might contain sensitive " +"information.\n" +"Do you really want to send <b>%s</b>?\n" +msgstr "" + +#: ../src/Gui/CCReporterDialog.py:111 +msgid "Brief description how to reproduce this or what you did..." +msgstr "" + +#: ../src/Gui/PluginSettingsUI.py:17 +msgid "Can't find PluginDialog widget in UI description!" +msgstr "UI વર્ણનમાં PluginDialog વિજેટ શોધી શકાતી નથી!" + +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:21 +#, python-format +msgid "No UI for plugin %s" +msgstr "પ્લગઇન %s માટે UI નથી" + +#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64 +msgid "combo box is not implemented" +msgstr "કોમ્બો બોક્સ નું અમલીકરણ થયેલ નથી" + +#: ../src/Gui/PluginSettingsUI.py:47 +msgid "Nothing to hydrate!" +msgstr "" + +#: ../src/Gui/report.glade.h:1 +msgid "Comment" +msgstr "ટિપ્પણી" + +#: ../src/Gui/report.glade.h:3 +msgid "Send" +msgstr "મોકલો" + +#: ../src/Gui/report.glade.h:4 +msgid "gtk-cancel" +msgstr "gtk-cancel" + +#: ../src/Gui/SettingsDialog.py:22 +msgid "Can't load gui description for SettingsDialog!" +msgstr "SettingsDialog માટે gui વર્ણનને લાવી શકાતુ નથી!" + +#: ../src/Gui/SettingsDialog.py:34 +msgid "Name" +msgstr "નામ" + +#: ../src/Gui/SettingsDialog.py:52 +msgid "Enabled" +msgstr "સક્રિય થયેલ" + +#: ../src/Gui/SettingsDialog.py:117 +msgid "Can't get plugin description" +msgstr "પ્લગઇન વર્ણન મેળવી શકાતુ નથી" + +#: ../src/Gui/SettingsDialog.py:125 +#, python-format +msgid "" +"Error while opening plugin settings UI: \n" +"\n" +"%s" +msgstr "" +"જ્યારે પ્લગઇન સુયોજનો UI ને ખોલી રહ્યા હોય ત્યારે ભૂલ: \n" +"\n" +"%s" + +#: ../src/Gui/SettingsDialog.py:135 +#, python-format +msgid "" +"Can't save plugin settings:\n" +" %s" +msgstr "" +"પ્લગઇન સુયોજનોને સંગ્રહ કરી શકાતો નથી:\n" +" %s" + +#: ../src/Gui/SettingsDialog.py:141 +msgid "unknown response from settings dialog" +msgstr "સુયોજનો સંવાદ માંથી અજ્ઞાત જવાબ" + +#: ../src/Applet/Applet.cpp:45 +#, c-format +msgid "A crash in package %s has been detected!" +msgstr "" + +#. applet is already running +#: ../src/Applet/Applet.cpp:82 +msgid "Applet is already running." +msgstr "એપલેટ પહેલેથી જ ચાલી રહી છે." + +#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 +#: ../src/Applet/CCApplet.cpp:201 +msgid "ABRT service is not running" +msgstr "ABRT સેવા ચાલી રહી નથી" + +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 +#, c-format +msgid "Pending events: %i" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:161 +#, c-format +msgid "Can't create menu from the description, popup won't be available!\n" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:190 +msgid "" +"This is default handler, you should register your own with " +"ConnectCrashHandler" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:205 +msgid "ABRT service has been started" +msgstr "ABRT સેવા પહેલેથી જ શરૂ થયેલ છે" + +#: ../src/Applet/CCApplet.cpp:231 +msgid "Out of memory" +msgstr "મેમરીની બહાર" + +#: ../src/Applet/CCApplet.cpp:247 +msgid "Warning" +msgstr "ચેતવણી" + +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "ખાલી લોગીન અને પાસવર્ડ. મહેરબાની કરીને Bugzilla.conf ને ચકાસો" + +#: ../lib/Plugins/Bugzilla.cpp:228 +msgid "Bug is already reported: " +msgstr "ભૂલ પહેલેથી જ અહેવાલ થયેલ છે: " + +#: ../lib/Plugins/Bugzilla.cpp:283 +#, c-format +msgid "Binary file %s will not be reported." +msgstr "બાઇનરી ફાઇલ %s અહેવાલ થશે નહિં." + +#: ../lib/Plugins/Bugzilla.cpp:353 +msgid "New bug id: " +msgstr "નવું ભૂલ id: " + +#: ../lib/Plugins/Bugzilla.cpp:421 +msgid "Checking for duplicates..." +msgstr "નકલો માટે ચકાસી રહ્યા છે..." + +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 +msgid "Logging into bugzilla..." +msgstr "બગઝીલામાં લોગ કરી રહ્યા છે..." + +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "CC ને ચકાસો અને coment +1 ને ઉમેરો..." + +#: ../lib/Plugins/Bugzilla.cpp:448 +msgid "Creating new bug..." +msgstr "નવી ભૂલને બનાવી રહ્યા છે..." + +#: ../lib/Plugins/Bugzilla.cpp:453 +msgid "Logging out..." +msgstr "બહાર નીકળી રહ્યા છે..." + +#: ../lib/Plugins/Kerneloops.cpp:38 +msgid "Getting local/global universal unique identification..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:82 +msgid "Searching for debug-info packages..." +msgstr "ડિબગ-જાણકારી પેકેજો માટે શોધી રહ્યા છે..." + +#: ../lib/Plugins/CCpp.cpp:120 +msgid "Downloading and installing debug-info packages..." +msgstr "ડિબગ-જાણકારી પેકેજોને સ્થાપિત અને ડાઉનલોડ કરી રહ્યા છે..." + +#: ../lib/Plugins/CCpp.cpp:180 +msgid "Getting backtrace..." +msgstr "બેકટ્રેસને મેળવી રહ્યા છે..." + +#: ../lib/Plugins/CCpp.cpp:429 +msgid "Getting local universal unique identification..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:455 +msgid "Getting global universal unique identification..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:473 +msgid "Starting report creation..." +msgstr "અહેવાલ બનાવવાનું શરૂ કરી રહ્યા છે..." + +#: ../lib/Plugins/CCpp.cpp:495 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "પેકેજ %s માટે ડિબગ જાણકારી સ્થાપન ને છોડો" + +#: ../lib/Plugins/KerneloopsReporter.cpp:101 +msgid "Creating and submitting a report..." +msgstr "અહેવાલને બનાવી અને સોંપી રહ્યા છે..." + +#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124 +msgid "Creating a report..." +msgstr "અહેવાલને બનાવી રહ્યા છે..." + +#: ../lib/Plugins/RunApp.cpp:62 +msgid "Executing RunApp plugin..." +msgstr "RunApp પ્લગઇનને ચલાવી રહ્યા છે..." + +#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247 +msgid "FileTransfer: URL not specified" +msgstr "FileTransfer: URL સ્પષ્ટ થયેલ નથી" + +#: ../lib/Plugins/FileTransfer.cpp:69 +#, c-format +msgid "Sending archive %s via %s" +msgstr "%s મારફતે પેટી %s ને મોકલી રહ્યા છે" + +#: ../lib/Plugins/FileTransfer.cpp:121 +msgid "Creating an archive..." +msgstr "પેટીને બનાવી રહ્યા છે..." + +#: ../lib/Plugins/FileTransfer.cpp:176 +msgid "File Transfer: Creating a report..." +msgstr "ફાઇલ પરિવહન: અહેવાલને બનાવી રહ્યા છે..." + +#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226 +msgid "CFileTransfer::Run(): Cannot create and send an archive: " +msgstr "" + +#: ../lib/Plugins/KerneloopsScanner.cpp:79 +msgid "Creating kernel oops crash reports..." +msgstr "કર્નલ oops બગડેલ અહેવાલોને બનાવી રહ્યા છે..." + +#: ../lib/Plugins/Mailx.cpp:110 +msgid "Sending an email..." +msgstr "ઇમેઇલને મોકલી રહ્યા છે..." + +#: ../lib/Plugins/SOSreport.cpp:90 +msgid "Executing SOSreportAction plugin..." +msgstr "SOSreportAction પ્લગઇનને ચલાવી રહ્યા છે..." + @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: abrt.master\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-04 04:40+0000\n" -"PO-Revision-Date: 2009-09-04 15:22+1000\n" +"POT-Creation-Date: 2009-09-07 19:47+0000\n" +"PO-Revision-Date: 2009-09-08 11:20+1000\n" "Last-Translator: Eunju Kim <eukim@redhat.com>\n" "Language-Team: Korean <ko@li.org>\n" "MIME-Version: 1.0\n" @@ -300,21 +300,21 @@ msgid "Applet is already running." msgstr "애플릿이 이미 실행되고 있습니다. " #: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 -#: ../src/Applet/CCApplet.cpp:135 +#: ../src/Applet/CCApplet.cpp:201 msgid "ABRT service is not running" msgstr "ABRT 서비스가 실행되고 있지 않습니다 " -#: ../src/Applet/CCApplet.cpp:83 ../src/Applet/CCApplet.cpp:262 +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 #, c-format msgid "Pending events: %i" msgstr "보류 중인 이벤트: %i " -#: ../src/Applet/CCApplet.cpp:102 +#: ../src/Applet/CCApplet.cpp:161 #, c-format msgid "Can't create menu from the description, popup won't be available!\n" msgstr "설명에서 메뉴를 만들 수 없습니다. 팝업을 사용할 수 없습니다!\n" -#: ../src/Applet/CCApplet.cpp:125 +#: ../src/Applet/CCApplet.cpp:190 msgid "" "This is default handler, you should register your own with " "ConnectCrashHandler" @@ -322,44 +322,52 @@ msgstr "" "이는 기본값 처리기입니다. 자신의 처리기를 ConnectCrashHandler를 사용하여 등록" "해야 합니다 " -#: ../src/Applet/CCApplet.cpp:139 +#: ../src/Applet/CCApplet.cpp:205 msgid "ABRT service has been started" msgstr "ABRT 서비스가 시작되었습니다 " -#: ../src/Applet/CCApplet.cpp:165 +#: ../src/Applet/CCApplet.cpp:231 msgid "Out of memory" msgstr "메모리 부족 " -#: ../src/Applet/CCApplet.cpp:180 +#: ../src/Applet/CCApplet.cpp:247 msgid "Warning" msgstr "경고 " -#: ../lib/Plugins/Bugzilla.cpp:219 +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "로그인 및 암호가 없습니다. Bugzilla.conf를 확인해 주십시오 " + +#: ../lib/Plugins/Bugzilla.cpp:228 msgid "Bug is already reported: " msgstr "이미 버그를 보고하였습니다: " -#: ../lib/Plugins/Bugzilla.cpp:279 +#: ../lib/Plugins/Bugzilla.cpp:283 #, c-format msgid "Binary file %s will not be reported." msgstr "%s 바이너리 파일은 보고되지 않습니다. " -#: ../lib/Plugins/Bugzilla.cpp:349 +#: ../lib/Plugins/Bugzilla.cpp:353 msgid "New bug id: " msgstr "새 버그 id: " -#: ../lib/Plugins/Bugzilla.cpp:413 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Checking for duplicates..." msgstr "중복성 확인 중... " -#: ../lib/Plugins/Bugzilla.cpp:429 +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 msgid "Logging into bugzilla..." msgstr "bugzilla에 로그인 중... " -#: ../lib/Plugins/Bugzilla.cpp:443 +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "CC 확인 후 코멘트에 +1 추가... " + +#: ../lib/Plugins/Bugzilla.cpp:448 msgid "Creating new bug..." msgstr "새 버그 생성 중... " -#: ../lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:453 msgid "Logging out..." msgstr "로그아웃 중... " @@ -383,14 +391,19 @@ msgstr "역추적 검색 중... " msgid "Getting local universal unique identification..." msgstr "로컬 UUID를 가져오는 중... " -#: ../lib/Plugins/CCpp.cpp:453 +#: ../lib/Plugins/CCpp.cpp:455 msgid "Getting global universal unique identification..." msgstr "글로벌 UUID를 가져오는 중... " -#: ../lib/Plugins/CCpp.cpp:471 +#: ../lib/Plugins/CCpp.cpp:473 msgid "Starting report creation..." msgstr "보고서 작성 시작 중... " +#: ../lib/Plugins/CCpp.cpp:495 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "%s 패키지에 대한 디버그 정보 설치 생략 " + #: ../lib/Plugins/KerneloopsReporter.cpp:101 msgid "Creating and submitting a report..." msgstr "보고서 작성 및 제출 중... " @@ -1,3 +1,4 @@ +# translation of abrt.master.ml.po to # translation of abrt.master.abrt.ml.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. @@ -5,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: abrt.master.abrt.ml\n" +"Project-Id-Version: abrt.master.ml\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-07 08:38+0000\n" -"PO-Revision-Date: 2009-09-07 17:15+0530\n" +"POT-Creation-Date: 2009-09-07 19:47+0000\n" +"PO-Revision-Date: 2009-09-08 08:13+0530\n" "Last-Translator: \n" "Language-Team: <en@li.org>\n" "MIME-Version: 1.0\n" @@ -205,8 +206,7 @@ msgid "" "information.\n" "Do you really want to send <b>%s</b>?\n" msgstr "" -"<b>മുന്നറിയിപ്പു്</b>, പ്രധാന വിവരങ്ങളടങ്ങുന്ന ഡേറ്റാ നിങ്ങള് അയയ്ക്കുവാന് " -"തുടങ്ങുന്നു.\n" +"<b>മുന്നറിയിപ്പു്</b>, പ്രധാന വിവരങ്ങളടങ്ങുന്ന ഡേറ്റാ നിങ്ങള് അയയ്ക്കുവാന് തുടങ്ങുന്നു.\n" "നിങ്ങള്ക്ക് <b>%s</b> അയയ്ക്കണമോ?\n" #: ../src/Gui/CCReporterDialog.py:111 @@ -313,8 +313,8 @@ msgid "" "This is default handler, you should register your own with " "ConnectCrashHandler" msgstr "" -"ഇതു് സ്വതവേയുള്ള ഹാന്ഡിലറാണു്. ConnectCrashHandler-ല് " -"നിങ്ങളുടെ സ്വന്തം ഹാന്ഡിലര് രജിസ്ടര് ചെയ്യണം" +"ഇതു് സ്വതവേയുള്ള ഹാന്ഡിലറാണു്. ConnectCrashHandler-ല് നിങ്ങളുടെ സ്വന്തം ഹാന്ഡിലര് രജിസ്ടര് " +"ചെയ്യണം" #: ../src/Applet/CCApplet.cpp:205 msgid "ABRT service has been started" @@ -328,32 +328,40 @@ msgstr "മെമ്മറി ലഭ്യമല്ല" msgid "Warning" msgstr "മുന്നറിയിപ്പു്" -#: ../lib/Plugins/Bugzilla.cpp:219 +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "ലോഗിനും അടയാളവാക്കും ശൂന്യം. ദയവായി Bugzilla.conf പരിശോധിക്കുക" + +#: ../lib/Plugins/Bugzilla.cpp:228 msgid "Bug is already reported: " msgstr "ബഗ് രേഖപ്പെടുത്തിയിരിക്കുന്നു: " -#: ../lib/Plugins/Bugzilla.cpp:279 +#: ../lib/Plugins/Bugzilla.cpp:283 #, c-format msgid "Binary file %s will not be reported." msgstr "ബൈനറി ഫയല് %s റിപോര്ട്ട് ചെയ്യുന്നതല്ല." -#: ../lib/Plugins/Bugzilla.cpp:349 +#: ../lib/Plugins/Bugzilla.cpp:353 msgid "New bug id: " msgstr "പുതിയ ബഗ് id: " -#: ../lib/Plugins/Bugzilla.cpp:413 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Checking for duplicates..." msgstr "ഒരേപോലുള്ളവയ്ക്കായി തെരയുന്നു..." -#: ../lib/Plugins/Bugzilla.cpp:429 +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 msgid "Logging into bugzilla..." msgstr "ബഗ്സിലയിലേക്ക് പ്രവേശിക്കുന്നു..." -#: ../lib/Plugins/Bugzilla.cpp:443 +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "CC പരിശോധിച്ചു് coment +1 ചേര്ക്കുക..." + +#: ../lib/Plugins/Bugzilla.cpp:448 msgid "Creating new bug..." msgstr "പുതിയ ബഗ് ഉണ്ടാക്കുന്നു..." -#: ../lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:453 msgid "Logging out..." msgstr "ലോഗൌട്ട് ചെയ്യുന്നു..." @@ -377,14 +385,19 @@ msgstr "ബാക്ക്ട്രെയിസ് ലഭിക്കുന് msgid "Getting local universal unique identification..." msgstr "ലോക്കല് യൂണിവേഴ്സല് യുണീക്ക് തിരിച്ചറിയല് ലഭിക്കുന്നു..." -#: ../lib/Plugins/CCpp.cpp:453 +#: ../lib/Plugins/CCpp.cpp:455 msgid "Getting global universal unique identification..." msgstr "ഗ്ലോബല് യൂണിവേഴ്സല് യുണീക്ക് തിരിച്ചറിയല് ലഭിക്കുന്നു..." -#: ../lib/Plugins/CCpp.cpp:471 +#: ../lib/Plugins/CCpp.cpp:473 msgid "Starting report creation..." msgstr "റിപോര്ട്ട് ഉണ്ടാക്കുവാന് തുടങ്ങുന്നു..." +#: ../lib/Plugins/CCpp.cpp:495 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "%s പാക്കേജിനുള്ള debuginfo ഇന്സ്റ്റലേഷന് ഉപേക്ഷിക്കുക" + #: ../lib/Plugins/KerneloopsReporter.cpp:101 msgid "Creating and submitting a report..." msgstr "ഒരു റിപോര്ട്ട് ഉണ്ടാക്കി സമര്പ്പിക്കുന്നു..." diff --git a/po/mr.po b/po/mr.po new file mode 100644 index 00000000..97f9d51a --- /dev/null +++ b/po/mr.po @@ -0,0 +1,448 @@ +# translation of abrt.master.abrt.po to Marathi +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Sandeep Shedmake <sshedmak@redhat.com>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: abrt.master.abrt\n" +"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" +"POT-Creation-Date: 2009-09-07 14:45+0000\n" +"PO-Revision-Date: 2009-09-07 21:26+0530\n" +"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n" +"Language-Team: Marathi <fedora-trans-mr@redhat.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#: ../src/Gui/ABRTExceptions.py:4 +msgid "Another client is already running, trying to wake it." +msgstr "इतर क्लाएंट आधिपासूनच कार्यरत आहे, सक्रीय करण्याचा प्रयत्न करत आहे." + +#: ../src/Gui/ABRTExceptions.py:10 +msgid "Got unexpected data from daemon (is the database properly updated?)." +msgstr "डिमनपासून अनपेक्षीत डाटा प्राप्त झाले (माहितीकोष योग्यरित्या सुधारीत केले?)." + +#: ../src/Gui/ABRTPlugin.py:26 +msgid "Analyzer plugins" +msgstr "अनलाइजर प्लगइन्स्" + +#: ../src/Gui/ABRTPlugin.py:27 +msgid "Action plugins" +msgstr "कृती प्लगइन्स्" + +#: ../src/Gui/ABRTPlugin.py:28 +msgid "Reporter plugins" +msgstr "रिपोर्टर प्लगइन्स्" + +#: ../src/Gui/ABRTPlugin.py:29 +msgid "Database plugins" +msgstr "डाटाबेस प्लगइन्स्" + +#: ../src/Gui/CCDBusBackend.py:140 +msgid "Can't connect to dbus" +msgstr "dbus शी जुळवणी करण्यास अशक्य" + +#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163 +msgid "Please check if abrt daemon is running." +msgstr "abrt डीमन कार्यरत आहे कृपया याची तपासणी करा." + +#: ../src/Gui/CCDBusBackend.py:181 +msgid "" +"Daemon did't return valid report info\n" +"Debuginfo is missing?" +msgstr "" +"डीमनने वैध अहवाल माहिती पुरवली नाही\n" +"Debuginfo आढळले नाही?" + +#: ../src/Gui/ccgui.glade.h:1 +msgid " " +msgstr " " + +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215 +msgid "<b>Not reported!</b>" +msgstr "<b>कळवले नाही!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">वर्णन</span>" + +#: ../src/Gui/ccgui.glade.h:5 +msgid "About ABRT" +msgstr "ABRT विषयी" + +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "स्वयं बग रिपोर्टींग उपकरन" + +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "नष्ट करा" + +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "कृपया थांबा.." + +#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2 +msgid "Report" +msgstr "रिपोर्ट" + +#: ../src/Gui/ccgui.glade.h:10 +msgid "" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" +"\n" +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " +"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " +"more details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see <http://www.gnu.org/licenses/>." +msgstr "" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" +"\n" +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " +"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " +"more details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see <http://www.gnu.org/licenses/>." + +#: ../src/Gui/ccgui.glade.h:15 +msgid "Working..." +msgstr "कार्यरत आहे..." + +#: ../src/Gui/ccgui.glade.h:16 +msgid "_Edit" +msgstr "संपादीत करा (_E)" + +#: ../src/Gui/ccgui.glade.h:17 +msgid "_File" +msgstr "फाइल (_F)" + +#: ../src/Gui/ccgui.glade.h:18 +msgid "_Help" +msgstr "मदत (_H)" + +#: ../src/Gui/CCMainWindow.py:86 +msgid "Package" +msgstr "संकुल" + +#: ../src/Gui/CCMainWindow.py:87 +msgid "Application" +msgstr "ऍप्लिकेशन" + +#: ../src/Gui/CCMainWindow.py:88 +msgid "Date" +msgstr "दिनांक" + +#: ../src/Gui/CCMainWindow.py:89 +msgid "Crash Rate" +msgstr "क्रॅश दर" + +#: ../src/Gui/CCMainWindow.py:91 +msgid "User" +msgstr "वापरकर्ता" + +#: ../src/Gui/CCMainWindow.py:157 +#, python-format +msgid "" +"Unable to finish current task!\n" +"%s" +msgstr "" +"सध्याचे कार्य पूर्ण करण्यास अशक्य!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:174 +#, python-format +msgid "" +"Error while loading the dumplist, please check if abrt daemon is running\n" +" %s" +msgstr "" +"डंपलिस्ट लोड करतेवेळी त्रुटी आढळली, कृपया abrt डिमन\n" +" %s चालवत आहे याची खात्री करा" + +#: ../src/Gui/CCMainWindow.py:207 +msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" +msgstr "<b>हा क्रॅश कळवला गेला आहेन, तुम्हाला अहवाल येथे आढळेल:</b>\n" + +#: ../src/Gui/CCMainWindow.py:267 +msgid "" +"Unable to get report!\n" +"Debuginfo is missing?" +msgstr "" +"रिपोर्ट प्राप्त करण्यास अशक्य!\n" +"Debuginfo आढळले नाही?" + +#: ../src/Gui/CCMainWindow.py:279 +#, python-format +msgid "" +"Reporting failed!\n" +"%s" +msgstr "" +"रिपोर्टींग अपयशी!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:311 +#, python-format +msgid "Error getting the report: %s" +msgstr "अहवाल प्राप्त करतेवेळी त्रुटी: %s" + +#: ../src/Gui/CCReporterDialog.py:98 +#, python-format +msgid "" +"<b>WARNING</b>, you're about to send data which might contain sensitive " +"information.\n" +"Do you really want to send <b>%s</b>?\n" +msgstr "" +"<b>सावधान</b>, तुम्ही संवेदनशील माहिती असलेला डाटा पाठवणार आहात" +".\n" +"तुम्हाला नक्की <b>%s</b> पाठवायचे?\n" + +#: ../src/Gui/CCReporterDialog.py:111 +msgid "Brief description how to reproduce this or what you did..." +msgstr "हे कसे निर्माण होते किंवा तुम्ही काय केले याचे थोडक्यात वर्णन..." + +#: ../src/Gui/PluginSettingsUI.py:17 +msgid "Can't find PluginDialog widget in UI description!" +msgstr "UI वर्णनमध्ये PluginDialog विजेट आढळले नाही!" + +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:21 +#, python-format +msgid "No UI for plugin %s" +msgstr "प्लगइन %s करीता UI आढळले नाही" + +#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64 +msgid "combo box is not implemented" +msgstr "कॉम्बो बॉक्स लागू केले नाही" + +#: ../src/Gui/PluginSettingsUI.py:47 +msgid "Nothing to hydrate!" +msgstr "hydrate करीता काहिच आढळले नाही!" + +#: ../src/Gui/report.glade.h:1 +msgid "Comment" +msgstr "टिपण्णी" + +#: ../src/Gui/report.glade.h:3 +msgid "Send" +msgstr "पाठवा" + +#: ../src/Gui/report.glade.h:4 +msgid "gtk-cancel" +msgstr "gtk-cancel" + +#: ../src/Gui/SettingsDialog.py:22 +msgid "Can't load gui description for SettingsDialog!" +msgstr "SettingsDialog करीता gui वर्णन लोड करण्यास अशक्य!" + +#: ../src/Gui/SettingsDialog.py:34 +msgid "Name" +msgstr "नाव" + +#: ../src/Gui/SettingsDialog.py:52 +msgid "Enabled" +msgstr "कार्यक्षम" + +#: ../src/Gui/SettingsDialog.py:117 +msgid "Can't get plugin description" +msgstr "प्लगइन वर्णन प्राप्त करण्यास अशक्य" + +#: ../src/Gui/SettingsDialog.py:125 +#, python-format +msgid "" +"Error while opening plugin settings UI: \n" +"\n" +"%s" +msgstr "" +"प्लगइन संयोजना UI उघडतेवेळी त्रुटी: \n" +"\n" +"%s" + +#: ../src/Gui/SettingsDialog.py:135 +#, python-format +msgid "" +"Can't save plugin settings:\n" +" %s" +msgstr "" +"प्लगइन संयोजना साठवतेवेळी त्रुटी:\n" +" %s" + +#: ../src/Gui/SettingsDialog.py:141 +msgid "unknown response from settings dialog" +msgstr "संयोजना संवाद पासून अपरिचीत प्रतिसाद" + +#: ../src/Applet/Applet.cpp:45 +#, c-format +msgid "A crash in package %s has been detected!" +msgstr "संकुल %s मधील क्रॅश आढळले आहे!" + +#. applet is already running +#: ../src/Applet/Applet.cpp:82 +msgid "Applet is already running." +msgstr "ऍप्लेट आधिपासूनच कार्यरत आहे." + +#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 +#: ../src/Applet/CCApplet.cpp:201 +msgid "ABRT service is not running" +msgstr "ABRT सेवा कार्यरत नाही" + +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 +#, c-format +msgid "Pending events: %i" +msgstr "उरर्वरीत घटना: %i" + +#: ../src/Applet/CCApplet.cpp:161 +#, c-format +msgid "Can't create menu from the description, popup won't be available!\n" +msgstr "वर्णन पासून मेन्यू निर्माण करण्यास अशक्य, पॉपअप उपलब्ध होणार नाही!\n" + +#: ../src/Applet/CCApplet.cpp:190 +msgid "" +"This is default handler, you should register your own with " +"ConnectCrashHandler" +msgstr "" +"हे पूर्वनिर्धारीत हँडलर आहे, तुम्हाला" +"ConnectCrashHandler सह पंजीकृत व्हावे लागेल" + +#: ../src/Applet/CCApplet.cpp:205 +msgid "ABRT service has been started" +msgstr "ABRT सेवा सुरू झाली आहे" + +#: ../src/Applet/CCApplet.cpp:231 +msgid "Out of memory" +msgstr "अतिरीक्त स्मृती नाही" + +#: ../src/Applet/CCApplet.cpp:247 +msgid "Warning" +msgstr "सावधानता" + +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "रिकामे प्रवेश व पासवर्ड. कृपया Bugzilla.conf तपासा" + +#: ../lib/Plugins/Bugzilla.cpp:228 +msgid "Bug is already reported: " +msgstr "बग आधिपासूनच कळवले: " + +#: ../lib/Plugins/Bugzilla.cpp:283 +#, c-format +msgid "Binary file %s will not be reported." +msgstr "बायनरी फाइल %s कळवले जाणार नाही." + +#: ../lib/Plugins/Bugzilla.cpp:353 +msgid "New bug id: " +msgstr "नवीन बग id: " + +#: ../lib/Plugins/Bugzilla.cpp:421 +msgid "Checking for duplicates..." +msgstr "हुबेहुब करीता तपासत आहे..." + +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 +msgid "Logging into bugzilla..." +msgstr "बगझीलामध्ये प्रवेश करत आहे..." + +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "CC तपासा व टिपण्णी +1 समावेश करा..." + +#: ../lib/Plugins/Bugzilla.cpp:448 +msgid "Creating new bug..." +msgstr "नवीन बग निर्माण करत आहे..." + +#: ../lib/Plugins/Bugzilla.cpp:453 +msgid "Logging out..." +msgstr "बाहेर पडत आहे..." + +#: ../lib/Plugins/Kerneloops.cpp:38 +msgid "Getting local/global universal unique identification..." +msgstr "लोकल/ग्लोबल जागतीक एकमेव ओळख प्राप्त करत आहे..." + +#: ../lib/Plugins/CCpp.cpp:82 +msgid "Searching for debug-info packages..." +msgstr "debug-info संकुलांकरीता शोधत आहे..." + +#: ../lib/Plugins/CCpp.cpp:120 +msgid "Downloading and installing debug-info packages..." +msgstr "debug-info संकुल डाऊनलोड व प्रतिष्ठापीत करत आहे..." + +#: ../lib/Plugins/CCpp.cpp:180 +msgid "Getting backtrace..." +msgstr "backtrace प्राप्त करत आहे..." + +#: ../lib/Plugins/CCpp.cpp:429 +msgid "Getting local universal unique identification..." +msgstr "लोकल लोकल एकमेव ओळख प्राप्त करत आहे..." + +#: ../lib/Plugins/CCpp.cpp:453 +msgid "Getting global universal unique identification..." +msgstr "लोकल ग्लोबल एकमेव ओळख प्राप्त करत आहे..." + +#: ../lib/Plugins/CCpp.cpp:471 +msgid "Starting report creation..." +msgstr "अहवाल निर्माण सुरू करा..." + +#: ../lib/Plugins/CCpp.cpp:493 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "संकुल %s करीता debuginfo प्रतिष्ठापन वगळा" + +#: ../lib/Plugins/KerneloopsReporter.cpp:101 +msgid "Creating and submitting a report..." +msgstr "अहवाल निर्माण व सादर करत आहे..." + +#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124 +msgid "Creating a report..." +msgstr "अहवाल निर्माण करत आहे..." + +#: ../lib/Plugins/RunApp.cpp:62 +msgid "Executing RunApp plugin..." +msgstr "RunApp प्लगइन चालवत आहे..." + +#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247 +msgid "FileTransfer: URL not specified" +msgstr "FileTransfer: URL दिले नाही" + +#: ../lib/Plugins/FileTransfer.cpp:69 +#, c-format +msgid "Sending archive %s via %s" +msgstr "%2$s द्वारे आर्काइव्ह %1$s पाठवत आहे" + +#: ../lib/Plugins/FileTransfer.cpp:121 +msgid "Creating an archive..." +msgstr "आर्काइव्ह निर्माण करत आहे..." + +#: ../lib/Plugins/FileTransfer.cpp:176 +msgid "File Transfer: Creating a report..." +msgstr "फाइल स्थानांतरन: अहवाल निर्माण करत आहे..." + +#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226 +msgid "CFileTransfer::Run(): Cannot create and send an archive: " +msgstr "CFileTransfer::Run(): आर्काइव्ह निर्माण करणे व पाठवणे अशक्य: " + +#: ../lib/Plugins/KerneloopsScanner.cpp:79 +msgid "Creating kernel oops crash reports..." +msgstr "kernel oops क्रॅश अहवाल निर्माण करत आहे..." + +#: ../lib/Plugins/Mailx.cpp:110 +msgid "Sending an email..." +msgstr "ईमेल पाठवत आहे..." + +#: ../lib/Plugins/SOSreport.cpp:90 +msgid "Executing SOSreportAction plugin..." +msgstr "SOSreportAction प्लगइन चालवत आहे..." + @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: abrt\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-03 14:38+0000\n" -"PO-Revision-Date: 2009-09-03 20:55+0200\n" +"POT-Creation-Date: 2009-09-07 14:45+0000\n" +"PO-Revision-Date: 2009-09-07 18:00+0200\n" "Last-Translator: Geert Warrink <geert.warrink@onsnet.nu>\n" "Language-Team: nl <nl@li.org>\n" "MIME-Version: 1.0\n" @@ -299,22 +299,22 @@ msgid "Applet is already running." msgstr "Applet draait al." #: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 -#: ../src/Applet/CCApplet.cpp:135 +#: ../src/Applet/CCApplet.cpp:201 msgid "ABRT service is not running" msgstr "ABRT service draait niet" -#: ../src/Applet/CCApplet.cpp:83 ../src/Applet/CCApplet.cpp:262 +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 #, c-format msgid "Pending events: %i" msgstr "Gebeurtenissen in behandeling: %i" -#: ../src/Applet/CCApplet.cpp:102 +#: ../src/Applet/CCApplet.cpp:161 #, c-format msgid "Can't create menu from the description, popup won't be available!\n" msgstr "" "Kan geen menu maken van de beschrijving, pop-up zal niet beschikbaar zijn!\n" -#: ../src/Applet/CCApplet.cpp:125 +#: ../src/Applet/CCApplet.cpp:190 msgid "" "This is default handler, you should register your own with " "ConnectCrashHandler" @@ -322,44 +322,52 @@ msgstr "" "Dit is de standaard afhandeling, je moet je eigen registreren bij " "ConnectCrashHandler" -#: ../src/Applet/CCApplet.cpp:139 +#: ../src/Applet/CCApplet.cpp:205 msgid "ABRT service has been started" msgstr "ABRT service is gestart" -#: ../src/Applet/CCApplet.cpp:165 +#: ../src/Applet/CCApplet.cpp:231 msgid "Out of memory" msgstr "Geen geheugen beschikbaar" -#: ../src/Applet/CCApplet.cpp:180 +#: ../src/Applet/CCApplet.cpp:247 msgid "Warning" msgstr "Waarschuwing" -#: ../lib/Plugins/Bugzilla.cpp:219 +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "Leeg login en wachtwoord. Check a.u.b. Bugzilla.conf" + +#: ../lib/Plugins/Bugzilla.cpp:228 msgid "Bug is already reported: " msgstr "Bug is al aangemeld: " -#: ../lib/Plugins/Bugzilla.cpp:279 +#: ../lib/Plugins/Bugzilla.cpp:283 #, c-format msgid "Binary file %s will not be reported." msgstr "Binair bestand %s wordt niet gerapporteerd." -#: ../lib/Plugins/Bugzilla.cpp:349 +#: ../lib/Plugins/Bugzilla.cpp:353 msgid "New bug id: " msgstr "Nieuwe bug id: " -#: ../lib/Plugins/Bugzilla.cpp:413 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Checking for duplicates..." msgstr "Controleren voor dubbele..." -#: ../lib/Plugins/Bugzilla.cpp:429 +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 msgid "Logging into bugzilla..." msgstr "Inloggen bij bugzilla..." -#: ../lib/Plugins/Bugzilla.cpp:443 +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "Controleer CC en voeg commentaar toe +1..." + +#: ../lib/Plugins/Bugzilla.cpp:448 msgid "Creating new bug..." msgstr "Nieuwe bug aanmaken..." -#: ../lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:453 msgid "Logging out..." msgstr "Uitloggen..." @@ -391,6 +399,11 @@ msgstr "Verkrijgen van golbale universele unieke identificatie..." msgid "Starting report creation..." msgstr "Beginnen met rapport aanmaken..." +#: ../lib/Plugins/CCpp.cpp:493 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "Sla debuginfo installatie over voor pakket %s" + #: ../lib/Plugins/KerneloopsReporter.cpp:101 msgid "Creating and submitting a report..." msgstr "Aanmaken en indienen van rapport..." diff --git a/po/pa.po b/po/pa.po new file mode 100644 index 00000000..c4645f35 --- /dev/null +++ b/po/pa.po @@ -0,0 +1,415 @@ +# translation of abrt.master.abrt.po to Punjabi +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Jaswinder Singh <jsingh@redhat.com>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: abrt.master.abrt\n" +"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" +"POT-Creation-Date: 2009-09-08 08:41+0000\n" +"PO-Revision-Date: 2009-09-08 16:57+0530\n" +"Last-Translator: Jaswinder Singh <jsingh@redhat.com>\n" +"Language-Team: Punjabi <Punjabi-users@lists.sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: ../src/Gui/ABRTExceptions.py:4 +msgid "Another client is already running, trying to wake it." +msgstr "" + +#: ../src/Gui/ABRTExceptions.py:10 +msgid "Got unexpected data from daemon (is the database properly updated?)." +msgstr "" + +#: ../src/Gui/ABRTPlugin.py:26 +msgid "Analyzer plugins" +msgstr "" + +#: ../src/Gui/ABRTPlugin.py:27 +msgid "Action plugins" +msgstr "ਕਾਰਵਾਈ ਪਲੱਗਇਨ" + +#: ../src/Gui/ABRTPlugin.py:28 +msgid "Reporter plugins" +msgstr "ਰਿਪੋਰਟਰ ਪਲੱਗਇਨ" + +#: ../src/Gui/ABRTPlugin.py:29 +msgid "Database plugins" +msgstr "ਡਾਟਾਬੇਸ ਪਲੱਗਇਨ" + +#: ../src/Gui/CCDBusBackend.py:140 +msgid "Can't connect to dbus" +msgstr "" + +#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163 +msgid "Please check if abrt daemon is running." +msgstr "" + +#: ../src/Gui/CCDBusBackend.py:181 +msgid "" +"Daemon did't return valid report info\n" +"Debuginfo is missing?" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:1 +msgid " " +msgstr " " + +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215 +msgid "<b>Not reported!</b>" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">ਵਰਣਨ</span>" + +#: ../src/Gui/ccgui.glade.h:5 +msgid "About ABRT" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "" + +#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2 +msgid "Report" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:10 +msgid "" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" +"\n" +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " +"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " +"more details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see <http://www.gnu.org/licenses/>." +msgstr "" + +#: ../src/Gui/ccgui.glade.h:15 +msgid "Working..." +msgstr "" + +#: ../src/Gui/ccgui.glade.h:16 +msgid "_Edit" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:17 +msgid "_File" +msgstr "" + +#: ../src/Gui/ccgui.glade.h:18 +msgid "_Help" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:86 +msgid "Package" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:87 +msgid "Application" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:88 +msgid "Date" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:89 +msgid "Crash Rate" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:91 +msgid "User" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:157 +#, python-format +msgid "" +"Unable to finish current task!\n" +"%s" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:174 +#, python-format +msgid "" +"Error while loading the dumplist, please check if abrt daemon is running\n" +" %s" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:207 +msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:267 +msgid "" +"Unable to get report!\n" +"Debuginfo is missing?" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:279 +#, python-format +msgid "" +"Reporting failed!\n" +"%s" +msgstr "" + +#: ../src/Gui/CCMainWindow.py:311 +#, python-format +msgid "Error getting the report: %s" +msgstr "" + +#: ../src/Gui/CCReporterDialog.py:98 +#, python-format +msgid "" +"<b>WARNING</b>, you're about to send data which might contain sensitive " +"information.\n" +"Do you really want to send <b>%s</b>?\n" +msgstr "" + +#: ../src/Gui/CCReporterDialog.py:111 +msgid "Brief description how to reproduce this or what you did..." +msgstr "" + +#: ../src/Gui/PluginSettingsUI.py:17 +msgid "Can't find PluginDialog widget in UI description!" +msgstr "" + +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:21 +#, python-format +msgid "No UI for plugin %s" +msgstr "" + +#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64 +msgid "combo box is not implemented" +msgstr "" + +#: ../src/Gui/PluginSettingsUI.py:47 +msgid "Nothing to hydrate!" +msgstr "" + +#: ../src/Gui/report.glade.h:1 +msgid "Comment" +msgstr "" + +#: ../src/Gui/report.glade.h:3 +msgid "Send" +msgstr "" + +#: ../src/Gui/report.glade.h:4 +msgid "gtk-cancel" +msgstr "" + +#: ../src/Gui/SettingsDialog.py:22 +msgid "Can't load gui description for SettingsDialog!" +msgstr "" + +#: ../src/Gui/SettingsDialog.py:34 +msgid "Name" +msgstr "" + +#: ../src/Gui/SettingsDialog.py:52 +msgid "Enabled" +msgstr "" + +#: ../src/Gui/SettingsDialog.py:117 +msgid "Can't get plugin description" +msgstr "" + +#: ../src/Gui/SettingsDialog.py:125 +#, python-format +msgid "" +"Error while opening plugin settings UI: \n" +"\n" +"%s" +msgstr "" + +#: ../src/Gui/SettingsDialog.py:135 +#, python-format +msgid "" +"Can't save plugin settings:\n" +" %s" +msgstr "" + +#: ../src/Gui/SettingsDialog.py:141 +msgid "unknown response from settings dialog" +msgstr "" + +#: ../src/Applet/Applet.cpp:45 +#, c-format +msgid "A crash in package %s has been detected!" +msgstr "" + +#. applet is already running +#: ../src/Applet/Applet.cpp:82 +msgid "Applet is already running." +msgstr "" + +#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 +#: ../src/Applet/CCApplet.cpp:201 +msgid "ABRT service is not running" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 +#, c-format +msgid "Pending events: %i" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:161 +#, c-format +msgid "Can't create menu from the description, popup won't be available!\n" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:190 +msgid "" +"This is default handler, you should register your own with " +"ConnectCrashHandler" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:205 +msgid "ABRT service has been started" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:231 +msgid "Out of memory" +msgstr "" + +#: ../src/Applet/CCApplet.cpp:247 +msgid "Warning" +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:228 +msgid "Bug is already reported: " +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:283 +#, c-format +msgid "Binary file %s will not be reported." +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:353 +msgid "New bug id: " +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:421 +msgid "Checking for duplicates..." +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 +msgid "Logging into bugzilla..." +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:448 +msgid "Creating new bug..." +msgstr "" + +#: ../lib/Plugins/Bugzilla.cpp:453 +msgid "Logging out..." +msgstr "" + +#: ../lib/Plugins/Kerneloops.cpp:38 +msgid "Getting local/global universal unique identification..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:82 +msgid "Searching for debug-info packages..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:120 +msgid "Downloading and installing debug-info packages..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:180 +msgid "Getting backtrace..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:429 +msgid "Getting local universal unique identification..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:455 +msgid "Getting global universal unique identification..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:473 +msgid "Starting report creation..." +msgstr "" + +#: ../lib/Plugins/CCpp.cpp:495 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "" + +#: ../lib/Plugins/KerneloopsReporter.cpp:101 +msgid "Creating and submitting a report..." +msgstr "" + +#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124 +msgid "Creating a report..." +msgstr "" + +#: ../lib/Plugins/RunApp.cpp:62 +msgid "Executing RunApp plugin..." +msgstr "" + +#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247 +msgid "FileTransfer: URL not specified" +msgstr "" + +#: ../lib/Plugins/FileTransfer.cpp:69 +#, c-format +msgid "Sending archive %s via %s" +msgstr "" + +#: ../lib/Plugins/FileTransfer.cpp:121 +msgid "Creating an archive..." +msgstr "" + +#: ../lib/Plugins/FileTransfer.cpp:176 +msgid "File Transfer: Creating a report..." +msgstr "" + +#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226 +msgid "CFileTransfer::Run(): Cannot create and send an archive: " +msgstr "" + +#: ../lib/Plugins/KerneloopsScanner.cpp:79 +msgid "Creating kernel oops crash reports..." +msgstr "" + +#: ../lib/Plugins/Mailx.cpp:110 +msgid "Sending an email..." +msgstr "" + +#: ../lib/Plugins/SOSreport.cpp:90 +msgid "Executing SOSreportAction plugin..." +msgstr "" + @@ -1,13 +1,14 @@ # translation of pl.po to Polish # Piotr Drąg <piotrdrag@gmail.com>, 2009. +# Tomasz Chrzczonowicz <chrzczonowicz@gmail.com>, 2009. # msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-04 14:46+0000\n" -"PO-Revision-Date: 2009-09-07 13:49+0200\n" -"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" +"POT-Creation-Date: 2009-09-07 14:45+0000\n" +"PO-Revision-Date: 2009-09-07 19:56+0200\n" +"Last-Translator: Tomasz Chrzczonowicz <chrzczonowicz@gmail.com>\n" "Language-Team: Polish <fedora-trans-pl@redhat.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -273,7 +274,7 @@ msgid "" "\n" "%s" msgstr "" -"Błąd podczas otwierania UI ustawień wtyczki: \n" +"Błąd podczas otwierania interfejsu użytkownika ustawień wtyczki: \n" "\n" "%s" @@ -336,32 +337,40 @@ msgstr "Brak pamięci" msgid "Warning" msgstr "Ostrzeżenie" -#: ../lib/Plugins/Bugzilla.cpp:219 +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "Pola login i hasło są puste. Sprawdź plik Bugzilla.conf" + +#: ../lib/Plugins/Bugzilla.cpp:228 msgid "Bug is already reported: " msgstr "Błąd został już zgłoszony: " -#: ../lib/Plugins/Bugzilla.cpp:279 +#: ../lib/Plugins/Bugzilla.cpp:283 #, c-format msgid "Binary file %s will not be reported." msgstr "Plik binarny %s nie zostanie zgłoszony." -#: ../lib/Plugins/Bugzilla.cpp:349 +#: ../lib/Plugins/Bugzilla.cpp:353 msgid "New bug id: " msgstr "Identyfikator nowego błędu: " -#: ../lib/Plugins/Bugzilla.cpp:413 +#: ../lib/Plugins/Bugzilla.cpp:421 msgid "Checking for duplicates..." msgstr "Sprawdzanie duplikatów..." -#: ../lib/Plugins/Bugzilla.cpp:429 +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 msgid "Logging into bugzilla..." msgstr "Logowanie do Bugzilli..." -#: ../lib/Plugins/Bugzilla.cpp:443 +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "Powiadamiaj mnie o zmianach i wstaw komentarz \"+1\"..." + +#: ../lib/Plugins/Bugzilla.cpp:448 msgid "Creating new bug..." msgstr "Dodawanie nowego błędu..." -#: ../lib/Plugins/Bugzilla.cpp:448 +#: ../lib/Plugins/Bugzilla.cpp:453 msgid "Logging out..." msgstr "Wylogowywanie..." @@ -394,6 +403,11 @@ msgstr "Uzyskiwanie globalnego uniwersalnego, unikalnego identyfikatora..." msgid "Starting report creation..." msgstr "Uruchamianie tworzenia raportu..." +#: ../lib/Plugins/CCpp.cpp:493 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "Pomiń instalację pakietu debuginfo dla pakietu %s" + #: ../lib/Plugins/KerneloopsReporter.cpp:101 msgid "Creating and submitting a report..." msgstr "Tworzenie i wysyłanie raportu..." @@ -1,16 +1,18 @@ +# translation of ru.po to Russian # translation of ru.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Yulia Poyarkova <yulia.poyarkova@redhat.com>, 2009. +# Yulia Poyarkova <yulia.poyarkova@gmail.com>, 2009. msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-09-01 19:44+0000\n" -"PO-Revision-Date: 2009-09-03 10:55+1000\n" -"Last-Translator: Yulia Poyarkova <yulia.poyarkova@redhat.com>\n" -"Language-Team: \n" +"POT-Creation-Date: 2009-09-07 19:47+0000\n" +"PO-Revision-Date: 2009-09-08 17:25+1000\n" +"Last-Translator: Yulia Poyarkova <yulia.poyarkova@gmail.com>\n" +"Language-Team: Russian <fedora-trans-ru@redhat.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +24,9 @@ msgstr "Выполняется другой клиент. Будет выпол #: ../src/Gui/ABRTExceptions.py:10 msgid "Got unexpected data from daemon (is the database properly updated?)." -msgstr "Получены непредвиденные данные от демона. Проверьте, обновлена ли база данных." +msgstr "" +"Получены непредвиденные данные от демона. Проверьте, обновлена ли база " +"данных." #: ../src/Gui/ABRTPlugin.py:26 msgid "Analyzer plugins" @@ -109,14 +113,14 @@ msgid "" msgstr "" "Эта программа — свободное программное обеспечение; её можно распространять " "или изменять в соответствии с условиями лицензии GNU General Public License, " -"опубликованной Фондом свободного программного обеспечения, версии 2 " -"или (по вашему выбору) любой более поздней версии.\n" +"опубликованной Фондом свободного программного обеспечения, версии 2 или (по " +"вашему выбору) любой более поздней версии.\n" "\n" "Эта программа распространяется в надежде, что она может быть полезной, но " -"БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ " -"(НО НЕ ОГРАНИЧИВАЯСЬ) ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И " -"ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Для получения дополнительных сведений " -"обратитесь к лицензии GNU General Public License.\n" +"БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ (НО НЕ " +"ОГРАНИЧИВАЯСЬ) ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ " +"ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Для получения дополнительных сведений обратитесь к " +"лицензии GNU General Public License.\n" "\n" "Копия лиценции GNU предоставляется вместе с этой программой. \n" "Её также можно найти на сайте <http://www.gnu.org/licenses/>." @@ -204,11 +208,12 @@ msgstr "Ошибка при получении отчёта: %s" #: ../src/Gui/CCReporterDialog.py:98 #, python-format msgid "" -"<b>WARNING</b>, you're about to send data that might contain some sensitive " -"informations!\n" +"<b>WARNING</b>, you're about to send data which might contain sensitive " +"information.\n" "Do you really want to send <b>%s</b>?\n" msgstr "" -"<b>ПРЕДУПРЕЖДЕНИЕ:</b> Вы собираетесь отправить данные, которые могут содержать конфиденциальную информацию.\n" +"<b>ПРЕДУПРЕЖДЕНИЕ:</b> Вы собираетесь отправить данные, которые могут " +"содержать конфиденциальную информацию.\n" "Вы действительно хотите отправить <b>%s</b>?\n" #: ../src/Gui/CCReporterDialog.py:111 @@ -231,7 +236,7 @@ msgstr "поле ввода недоступно" #: ../src/Gui/PluginSettingsUI.py:47 msgid "Nothing to hydrate!" -msgstr "Невозможно применить hydrate!" +msgstr "Нет данных для отображения!" #: ../src/Gui/report.glade.h:1 msgid "Comment" @@ -247,7 +252,7 @@ msgstr "gtk-cancel" #: ../src/Gui/SettingsDialog.py:22 msgid "Can't load gui description for SettingsDialog!" -msgstr "Не удалось загрузить описание gui для SettingsDialog" +msgstr "Не удалось загрузить описание GUI для SettingsDialog" #: ../src/Gui/SettingsDialog.py:34 msgid "Name" @@ -285,47 +290,165 @@ msgstr "" msgid "unknown response from settings dialog" msgstr "неизвестный ответ диалога настроек" -#. applet->AddEvent(uid, std::string(progname)); -#: ../src/Applet/Applet.cpp:49 +#: ../src/Applet/Applet.cpp:45 #, c-format msgid "A crash in package %s has been detected!" -msgstr "Обнаружен сбой пакета %s!" +msgstr "Сбой в пакете %s!" #. applet is already running -#: ../src/Applet/Applet.cpp:80 +#: ../src/Applet/Applet.cpp:82 msgid "Applet is already running." msgstr "Апплет уже выполняется." -#: ../src/Applet/Applet.cpp:94 ../src/Applet/Applet.cpp:95 -#: ../src/Applet/CCApplet.cpp:135 +#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 +#: ../src/Applet/CCApplet.cpp:201 msgid "ABRT service is not running" msgstr "Служба ABRT не работает" -#: ../src/Applet/CCApplet.cpp:83 ../src/Applet/CCApplet.cpp:249 +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 #, c-format msgid "Pending events: %i" msgstr "Ожидающие события: %i" -#: ../src/Applet/CCApplet.cpp:102 +#: ../src/Applet/CCApplet.cpp:161 #, c-format msgid "Can't create menu from the description, popup won't be available!\n" -msgstr "Не удалось создать меню на основе описания. Всплывающее окно будет недоступно!\n" +msgstr "" +"Не удалось создать меню на основе описания. Всплывающее окно будет " +"недоступно!\n" -#: ../src/Applet/CCApplet.cpp:125 +#: ../src/Applet/CCApplet.cpp:190 msgid "" "This is default handler, you should register your own with " "ConnectCrashHandler" -msgstr "Это стандартный обработчик. Зарегистировать собственный обработчик можно с помощью ConnectCrashHandler" +msgstr "" +"Это стандартный обработчик. Зарегистрировать собственный обработчик можно с " +"помощью ConnectCrashHandler" -#: ../src/Applet/CCApplet.cpp:139 +#: ../src/Applet/CCApplet.cpp:205 msgid "ABRT service has been started" msgstr "Служба ABRT запущена" -#: ../src/Applet/CCApplet.cpp:160 +#: ../src/Applet/CCApplet.cpp:231 +msgid "Out of memory" +msgstr "Недостаточно памяти" + +#: ../src/Applet/CCApplet.cpp:247 msgid "Warning" msgstr "Предупреждение" -#: ../src/Applet/CCApplet.cpp:166 -msgid "Out of memory" -msgstr "Не хватает памяти" +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "Пустое имя входа и пароль. Проверьте Bugzilla.conf" + +#: ../lib/Plugins/Bugzilla.cpp:228 +msgid "Bug is already reported: " +msgstr "Запрос уже создан:" + +#: ../lib/Plugins/Bugzilla.cpp:283 +#, c-format +msgid "Binary file %s will not be reported." +msgstr "Запрос не будет создаваться для бинарного файла %s:" + +#: ../lib/Plugins/Bugzilla.cpp:353 +msgid "New bug id: " +msgstr "Идентификатор запроса:" + +#: ../lib/Plugins/Bugzilla.cpp:421 +msgid "Checking for duplicates..." +msgstr "Проверяется наличие дубликатов..." + +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 +msgid "Logging into bugzilla..." +msgstr "Выполняется вход в Bugzilla..." + +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "Проверьте список CC и добавьте комментарий..." + +#: ../lib/Plugins/Bugzilla.cpp:448 +msgid "Creating new bug..." +msgstr "Создаётся новый запрос..." + +#: ../lib/Plugins/Bugzilla.cpp:453 +msgid "Logging out..." +msgstr "Выполняется выход..." + +#: ../lib/Plugins/Kerneloops.cpp:38 +msgid "Getting local/global universal unique identification..." +msgstr "Получение уникальных данных идентификации (локальной/глобальной)..." + +#: ../lib/Plugins/CCpp.cpp:82 +msgid "Searching for debug-info packages..." +msgstr "Выполняется поиск пакетов debug-info..." + +#: ../lib/Plugins/CCpp.cpp:120 +msgid "Downloading and installing debug-info packages..." +msgstr "Загружаются и устанавливаются пакеты debug-info..." + +#: ../lib/Plugins/CCpp.cpp:180 +msgid "Getting backtrace..." +msgstr "Получение трассировки..." + +#: ../lib/Plugins/CCpp.cpp:429 +msgid "Getting local universal unique identification..." +msgstr "Получение локальных данных идентификации..." + +#: ../lib/Plugins/CCpp.cpp:455 +msgid "Getting global universal unique identification..." +msgstr "Получение глобальных данных идентификации..." + +#: ../lib/Plugins/CCpp.cpp:473 +msgid "Starting report creation..." +msgstr "Начинается создание отчёта..." + +#: ../lib/Plugins/CCpp.cpp:495 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "Пропустить установку debuginfo для пакета %s" + +#: ../lib/Plugins/KerneloopsReporter.cpp:101 +msgid "Creating and submitting a report..." +msgstr "Создание и отправка отчёта..." + +#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124 +msgid "Creating a report..." +msgstr "Создаётся отчёт..." + +#: ../lib/Plugins/RunApp.cpp:62 +msgid "Executing RunApp plugin..." +msgstr "Выполняется модуль RunApp..." + +#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247 +msgid "FileTransfer: URL not specified" +msgstr "FileTransfer: Не указан URL" + +#: ../lib/Plugins/FileTransfer.cpp:69 +#, c-format +msgid "Sending archive %s via %s" +msgstr "Архив %s отправляется через %s" + +#: ../lib/Plugins/FileTransfer.cpp:121 +msgid "Creating an archive..." +msgstr "Создаётся архив..." + +#: ../lib/Plugins/FileTransfer.cpp:176 +msgid "File Transfer: Creating a report..." +msgstr "File Transfer: Создаётся отчёт..." + +#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226 +msgid "CFileTransfer::Run(): Cannot create and send an archive: " +msgstr "CFileTransfer::Run(): Не удалось создать и отправить архив: " + +#: ../lib/Plugins/KerneloopsScanner.cpp:79 +msgid "Creating kernel oops crash reports..." +msgstr "Создаются отчёты о сбоях ядра..." + +#: ../lib/Plugins/Mailx.cpp:110 +msgid "Sending an email..." +msgstr "Отправляется почтовое сообщение..." + +#: ../lib/Plugins/SOSreport.cpp:90 +msgid "Executing SOSreportAction plugin..." +msgstr "Запускается модуль SOSreportAction..." diff --git a/po/te.po b/po/te.po new file mode 100644 index 00000000..b5da445c --- /dev/null +++ b/po/te.po @@ -0,0 +1,451 @@ +# translation of abrt.master.abrt.po to Telugu +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Krishna Babu K <kkrothap@redhat.com>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: abrt.master.abrt\n" +"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" +"POT-Creation-Date: 2009-09-07 14:45+0000\n" +"PO-Revision-Date: 2009-09-08 12:29+0530\n" +"Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n" +"Language-Team: Telugu <en@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n\n" + +#: ../src/Gui/ABRTExceptions.py:4 +msgid "Another client is already running, trying to wake it." +msgstr "వేరొక క్లైంటు యిప్పటికే నడుచుచున్నది, దానిని మేల్కొలుపుటకు యత్నించుచున్నది." + +#: ../src/Gui/ABRTExceptions.py:10 +msgid "Got unexpected data from daemon (is the database properly updated?)." +msgstr "డెమోన్నుండి అనుకోని డాటా పొందినది (డాటాబేస్ సరిగా నవీకరించబడిందా?)." + +#: ../src/Gui/ABRTPlugin.py:26 +msgid "Analyzer plugins" +msgstr "విశ్లేషకి ప్లగిన్సు" + +#: ../src/Gui/ABRTPlugin.py:27 +msgid "Action plugins" +msgstr "చర్యా ప్లగిన్సు" + +#: ../src/Gui/ABRTPlugin.py:28 +msgid "Reporter plugins" +msgstr "నివేదకి ప్లగిన్సు" + +#: ../src/Gui/ABRTPlugin.py:29 +msgid "Database plugins" +msgstr "డాటాబేస్ ప్లగిన్సు" + +#: ../src/Gui/CCDBusBackend.py:140 +msgid "Can't connect to dbus" +msgstr "dbusకు అనుసంధానము కాలేకపోయింది" + +#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163 +msgid "Please check if abrt daemon is running." +msgstr "abrt డెమోన్ నడుస్తుంటే దయచేసి పరిశీలించుము." + +#: ../src/Gui/CCDBusBackend.py:181 +msgid "" +"Daemon did't return valid report info\n" +"Debuginfo is missing?" +msgstr "" +"డెమోన్ చెల్లునటువంటి నివేదిక సమాచారమును తిరిగియిచ్చుట లేదు\n" +"డీబగ్సమాచారము తప్పిపోయిందా?" + +#: ../src/Gui/ccgui.glade.h:1 +msgid " " +msgstr " " + +#: ../src/Gui/ccgui.glade.h:2 +msgid "(C) 2009 Red Hat, Inc." +msgstr "(C) 2009 Red Hat, Inc." + +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215 +msgid "<b>Not reported!</b>" +msgstr "<b>నివేదించబడలేదు!</b>" + +#: ../src/Gui/ccgui.glade.h:4 +msgid "<span color=\"white\">Description</span>" +msgstr "<span color=\"white\">వివరణ</span>" + +#: ../src/Gui/ccgui.glade.h:5 +msgid "About ABRT" +msgstr "ABRT గురించి" + +#: ../src/Gui/ccgui.glade.h:6 +msgid "Automatic Bug Reporting Tool" +msgstr "స్వయంచాలక బగ్ నివేదీకరణ సాధనము" + +#: ../src/Gui/ccgui.glade.h:7 +msgid "Delete" +msgstr "తొలగించు" + +#: ../src/Gui/ccgui.glade.h:8 +msgid "Please wait.." +msgstr "దయచేసి వేచివుండు..." + +#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2 +msgid "Report" +msgstr "నివేదించు" + +#: ../src/Gui/ccgui.glade.h:10 +msgid "" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" +"\n" +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " +"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " +"more details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see <http://www.gnu.org/licenses/>." +msgstr "" +"ఈ ప్రోగ్రామ్ ఉచిత సాఫ్టువేర్; ఉచిత సాఫ్టువేర్ సంస్థ తరుపున ప్రచురితమైన " +"GNU జనరల్ పబ్లిక్ లైసెన్సు కు లోబడి దీనిని మీరు పునఃపంపిణి మరియు/లేదా " +"సవరణ చేయవచ్చు; మీరు అనుసరించవలిసినది లైసెన్సు యొక్క వర్షన్ 2, లేదా " +"(మీ ఐచ్చికం వద్ద) దాని తరువాతి వర్షన్ కాని.\n" +"\n" +"ఈ ప్రోగ్రామ్ అది ఉపయోగపడుతుందనే నమ్మకం తో పంపిణీ చేయబడింది, " +"అయితే ఏ హామి లేదు; వ్యాపారసంబంధితంగా కాని లేదా ప్రతిపాదిత ప్రయోజనం కొరకు " +"కాని హామీ లేదు. అధికవివరములకొరకు GNU జనరల్ పబ్లిక్ లైసెన్సు ను " +"చూడండి.\n" +"\n" +"ఈ ప్రోగ్రామ్ తో మీరు GNU జనరల్ పబ్లిక్ లైసెన్సు నకలును పొంది ఉంటారు. " +"పొందకపోతే, <http://www.gnu.org/licenses/> చూడండి." + +#: ../src/Gui/ccgui.glade.h:15 +msgid "Working..." +msgstr "పనిచేయుచున్నది..." + +#: ../src/Gui/ccgui.glade.h:16 +msgid "_Edit" +msgstr "సరికూర్చు (_E)" + +#: ../src/Gui/ccgui.glade.h:17 +msgid "_File" +msgstr "దస్త్రము (_F)" + +#: ../src/Gui/ccgui.glade.h:18 +msgid "_Help" +msgstr "సహాయము (_H)" + +#: ../src/Gui/CCMainWindow.py:86 +msgid "Package" +msgstr "ప్యాకేజీ" + +#: ../src/Gui/CCMainWindow.py:87 +msgid "Application" +msgstr "అనువర్తనము" + +#: ../src/Gui/CCMainWindow.py:88 +msgid "Date" +msgstr "తేది" + +#: ../src/Gui/CCMainWindow.py:89 +msgid "Crash Rate" +msgstr "క్రాష్ రేటు" + +#: ../src/Gui/CCMainWindow.py:91 +msgid "User" +msgstr "వినియోగదారి" + +#: ../src/Gui/CCMainWindow.py:157 +#, python-format +msgid "" +"Unable to finish current task!\n" +"%s" +msgstr "" +"ప్రస్తుత కర్తవ్యమును పూర్తిచేయలేక పోయింది!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:174 +#, python-format +msgid "" +"Error while loading the dumplist, please check if abrt daemon is running\n" +" %s" +msgstr "" +"డంపుజాబితాను లోడుచేయుటలో దోషము, దయచేసి abrt డెమోన్ నడుస్తున్నదో లేదో " +"పరిశీలించండి\n" +" %s" + +#: ../src/Gui/CCMainWindow.py:207 +msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" +msgstr "<b>ఈ క్రాష్ నివేదించబడింది, మీరు నివేదికలను దీనివద్ద కనుగొనవచ్చును:</b>\n" + +#: ../src/Gui/CCMainWindow.py:267 +msgid "" +"Unable to get report!\n" +"Debuginfo is missing?" +msgstr "" +"నివేదికను పొందలేక పోయింది!\n" +"డీబగ్సమాచారము తప్పిపోయిందా?" + +#: ../src/Gui/CCMainWindow.py:279 +#, python-format +msgid "" +"Reporting failed!\n" +"%s" +msgstr "" +"నివేదించుట విఫలమైంది!\n" +"%s" + +#: ../src/Gui/CCMainWindow.py:311 +#, python-format +msgid "Error getting the report: %s" +msgstr "నివేదికను పొందుటలో దోషము: %s" + +#: ../src/Gui/CCReporterDialog.py:98 +#, python-format +msgid "" +"<b>WARNING</b>, you're about to send data which might contain sensitive " +"information.\n" +"Do you really want to send <b>%s</b>?\n" +msgstr "" +"<b>హెచ్చరిక</b>, మీరు సున్నితమైన సమాచారము కలిగివుండు డాటాను " +"పంపుబోవుచున్నారు.\n" +"మీరు నిజంగా పంపాలని అనుకొనుచున్నారా <b>%s</b>?\n" + +#: ../src/Gui/CCReporterDialog.py:111 +msgid "Brief description how to reproduce this or what you did..." +msgstr "" +"దీనిని మరలా యెలా రాబట్టాలి అనేదాని గురించి మరియు మీరు యేమి చేయాలి అనేదాని " +"గురించి సోదాహరణము..." + +#: ../src/Gui/PluginSettingsUI.py:17 +msgid "Can't find PluginDialog widget in UI description!" +msgstr "UI వివరణనందు ప్లగిన్డైలాగు విడ్జట్ను కనుగొనలేక పోయింది!" + +#. we shouldn't get here, but just to be safe +#: ../src/Gui/PluginSettingsUI.py:21 +#, python-format +msgid "No UI for plugin %s" +msgstr "ప్లగిన్ %s కొరకు UI లేదు" + +#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64 +msgid "combo box is not implemented" +msgstr "కాంబో పెట్టె అభివృద్ది పరచలేదు" + +#: ../src/Gui/PluginSettingsUI.py:47 +msgid "Nothing to hydrate!" +msgstr "హైడ్రేట్ అగుటకు ఏమీలేదు!" + +#: ../src/Gui/report.glade.h:1 +msgid "Comment" +msgstr "వ్యాఖ్యానము" + +#: ../src/Gui/report.glade.h:3 +msgid "Send" +msgstr "పంపుము" + +#: ../src/Gui/report.glade.h:4 +msgid "gtk-cancel" +msgstr "gtk-cancel" + +#: ../src/Gui/SettingsDialog.py:22 +msgid "Can't load gui description for SettingsDialog!" +msgstr "అమరికలడైలాగు కొరకు gui వివరణను లోడు చేయలేక పోయింది!" + +#: ../src/Gui/SettingsDialog.py:34 +msgid "Name" +msgstr "నామము" + +#: ../src/Gui/SettingsDialog.py:52 +msgid "Enabled" +msgstr "చేతనపరచిన" + +#: ../src/Gui/SettingsDialog.py:117 +msgid "Can't get plugin description" +msgstr "ప్లగిన్ వివరణను పొందలేక పోయింది" + +#: ../src/Gui/SettingsDialog.py:125 +#, python-format +msgid "" +"Error while opening plugin settings UI: \n" +"\n" +"%s" +msgstr "" +"ప్లగిన్ అమరికల UI తెరుచునప్పుడు దోషము: \n" +"\n" +"%s" + +#: ../src/Gui/SettingsDialog.py:135 +#, python-format +msgid "" +"Can't save plugin settings:\n" +" %s" +msgstr "" +"ప్లగిన్ అమరికలను దాయలేక పోయింది:\n" +" %s" + +#: ../src/Gui/SettingsDialog.py:141 +msgid "unknown response from settings dialog" +msgstr "అమరికల డైలాగునుండి తెలియని స్పందన" + +#: ../src/Applet/Applet.cpp:45 +#, c-format +msgid "A crash in package %s has been detected!" +msgstr "ప్యాకేజీ %s నందు వొక క్రాష్ గుర్తించబడింది!" + +#. applet is already running +#: ../src/Applet/Applet.cpp:82 +msgid "Applet is already running." +msgstr "ఆప్లెట్ యిప్పటికే నడుచుచున్నది." + +#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97 +#: ../src/Applet/CCApplet.cpp:201 +msgid "ABRT service is not running" +msgstr "ABRT సేవ నడుచుటలేదు" + +#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343 +#, c-format +msgid "Pending events: %i" +msgstr "వాయిదావున్న ఘటనలు: %i" + +#: ../src/Applet/CCApplet.cpp:161 +#, c-format +msgid "Can't create menu from the description, popup won't be available!\n" +msgstr "వివరణనుండి మెనూను సృష్టించలేక పోయింది, పాపప్ అందుబాటులో వుండబోదు!\n" + +#: ../src/Applet/CCApplet.cpp:190 +msgid "" +"This is default handler, you should register your own with " +"ConnectCrashHandler" +msgstr "" +"ఇది అప్రమేయ సంభాలిక, మీరు మీ స్వంత దానిని ConnectCrashHandlerతో " +"నమోదు చేసుకొనండి" + +#: ../src/Applet/CCApplet.cpp:205 +msgid "ABRT service has been started" +msgstr "ABRT సేవ ప్రారంభించబడింది" + +#: ../src/Applet/CCApplet.cpp:231 +msgid "Out of memory" +msgstr "మెమొరీ దాటినది" + +#: ../src/Applet/CCApplet.cpp:247 +msgid "Warning" +msgstr "హెచ్చరిక" + +#: ../lib/Plugins/Bugzilla.cpp:84 +msgid "Empty login and password. Please check Bugzilla.conf" +msgstr "ఖాళీ లాగిన్ మరియు సంకేతపదము. దయచేసి Bugzilla.conf పరిశీలించండి" + +#: ../lib/Plugins/Bugzilla.cpp:228 +msgid "Bug is already reported: " +msgstr "బగ్ యిప్పటికే నివేదించబడింది: " + +#: ../lib/Plugins/Bugzilla.cpp:283 +#, c-format +msgid "Binary file %s will not be reported." +msgstr "బైనరీ దస్త్రము %s నివేదించబడబోదు." + +#: ../lib/Plugins/Bugzilla.cpp:353 +msgid "New bug id: " +msgstr "కొత్త బగ్ id: " + +#: ../lib/Plugins/Bugzilla.cpp:421 +msgid "Checking for duplicates..." +msgstr "నకిలీల కొరకు పరిశీలించుచున్నది..." + +#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436 +msgid "Logging into bugzilla..." +msgstr "బగ్జిల్లా లోనికి లాగిన్ అవుతోంది..." + +#: ../lib/Plugins/Bugzilla.cpp:427 +msgid "Check CC and add coment +1..." +msgstr "CCను పరిశీలించుము మరియు వ్యాఖ్యానము జతచేయుము +1..." + +#: ../lib/Plugins/Bugzilla.cpp:448 +msgid "Creating new bug..." +msgstr "కొత్త బగ్ను సృష్టించుచున్నది..." + +#: ../lib/Plugins/Bugzilla.cpp:453 +msgid "Logging out..." +msgstr "లాగ్అవుట్ అవుచున్నది..." + +#: ../lib/Plugins/Kerneloops.cpp:38 +msgid "Getting local/global universal unique identification..." +msgstr "లోకల్/గ్లోబల్ యూనివర్సల్ యునిక్ గుర్తింపును పొందుచున్నది..." + +#: ../lib/Plugins/CCpp.cpp:82 +msgid "Searching for debug-info packages..." +msgstr "డీబగ్-సమాచార ప్యాకేజీల కొరకు శోధించుచున్నది..." + +#: ../lib/Plugins/CCpp.cpp:120 +msgid "Downloading and installing debug-info packages..." +msgstr "డీబగ్-సమాచార ప్యాకేజీలను డౌన్లోడు చేయుచున్నది మరియు సంస్థాపించుచున్నది..." + +#: ../lib/Plugins/CCpp.cpp:180 +msgid "Getting backtrace..." +msgstr "బాక్ట్రేస్ పొందుచున్నది..." + +#: ../lib/Plugins/CCpp.cpp:429 +msgid "Getting local universal unique identification..." +msgstr "లోకల్ యూనివర్సల్ యునిక్ గుర్తింపును పొందుచున్నది..." + +#: ../lib/Plugins/CCpp.cpp:453 +msgid "Getting global universal unique identification..." +msgstr "గ్లోబల్ యూనివర్సల్ యునిక్ గుర్తింపును పొందుచున్నది..." + +#: ../lib/Plugins/CCpp.cpp:471 +msgid "Starting report creation..." +msgstr "నివేదిక సృష్టీకరణను ప్రారంభించుచున్నది..." + +#: ../lib/Plugins/CCpp.cpp:493 +#, c-format +msgid "Skip debuginfo installation for package %s" +msgstr "ప్యాకేజీ %s కొరకు డీబగ్సమాచార సంస్థాపనను వదిలివేయుము" + +#: ../lib/Plugins/KerneloopsReporter.cpp:101 +msgid "Creating and submitting a report..." +msgstr "నివేదికను సృష్టించుచున్నది మరియు అప్పజెప్పుచున్నది..." + +#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124 +msgid "Creating a report..." +msgstr "నివేదికను సృష్టించుచున్నది..." + +#: ../lib/Plugins/RunApp.cpp:62 +msgid "Executing RunApp plugin..." +msgstr "RunApp ప్లగిన్ నిర్వర్తించుచున్నది..." + +#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247 +msgid "FileTransfer: URL not specified" +msgstr "దస్త్రబదలీకరణ: URL తెలుపబడలేదు" + +#: ../lib/Plugins/FileTransfer.cpp:69 +#, c-format +msgid "Sending archive %s via %s" +msgstr "ఆర్చివ్ %sను %s ద్వారా పంపుచున్నది" + +#: ../lib/Plugins/FileTransfer.cpp:121 +msgid "Creating an archive..." +msgstr "ఆర్చివ్ను సృష్టించుచున్నది..." + +#: ../lib/Plugins/FileTransfer.cpp:176 +msgid "File Transfer: Creating a report..." +msgstr "దస్త్ర బదిలీకరణ: నివేదికను సృష్టించుచున్నది..." + +#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226 +msgid "CFileTransfer::Run(): Cannot create and send an archive: " +msgstr "CFileTransfer::Run(): ఆర్చివును సృష్టించలేదు మరియు పంపలేదు: " + +#: ../lib/Plugins/KerneloopsScanner.cpp:79 +msgid "Creating kernel oops crash reports..." +msgstr "కెర్నల్ oops క్రాష్ నివేదికలను సృష్టించుచున్నది..." + +#: ../lib/Plugins/Mailx.cpp:110 +msgid "Sending an email..." +msgstr "ఈమెయిల్ పంపుచున్నది..." + +#: ../lib/Plugins/SOSreport.cpp:90 +msgid "Executing SOSreportAction plugin..." +msgstr "SOSreportAction ప్లగిన్ నిర్వర్తించుచున్నది..." + diff --git a/src/Daemon/CommLayerServer.h b/src/Daemon/CommLayerServer.h index 7e6f8d72..0b1027ac 100644 --- a/src/Daemon/CommLayerServer.h +++ b/src/Daemon/CommLayerServer.h @@ -14,13 +14,12 @@ class CCommLayerServer { /* just stubs to be called when not implemented in specific comm layer */ virtual void Crash(const std::string& progname, const std::string& uid) {} - virtual void AnalyzeComplete(const map_crash_report_t& arg1) {} - virtual void Error(const std::string& arg1) {} - virtual void Update(const std::string& pMessage, uint64_t pJobID) {}; - virtual void Warning(const std::string& pMessage) {}; - virtual void JobDone(const char* pDest, uint64_t pJobID) = 0; - virtual void JobStarted(const char* pDest, uint64_t pJobID) {}; - virtual void Warning(const std::string& pMessage, uint64_t pJobID) {}; + virtual void JobDone(const char* pDest, const char* pUUID) = 0; + virtual void JobStarted(const char* pDest) {}; + + virtual void Error(const std::string& pMessage, const char* peer) {} + virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID) {}; + virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID) {}; }; #endif diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index c3cef3b5..c6908f5f 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -336,12 +336,15 @@ static inline int load_val(DBusMessageIter* iter, std::map<K,V>& val) { return */ /* helpers */ -static DBusMessage* new_signal_msg(const char* member) +static DBusMessage* new_signal_msg(const char* member, const char* peer = NULL) { /* path, interface, member name */ DBusMessage* msg = dbus_message_new_signal(CC_DBUS_PATH, CC_DBUS_IFACE, member); if (!msg) die_out_of_memory(); + /* Send unicast dbus signal if peer is known */ + if (peer && !dbus_message_set_destination(msg, peer)) + die_out_of_memory(); return msg; } static void send_flush_and_unref(DBusMessage* msg) @@ -363,79 +366,61 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string& DBUS_TYPE_STRING, &c_progname, DBUS_TYPE_STRING, &c_uid, DBUS_TYPE_INVALID); + VERB2 log("Sending signal Crash('%s','%s')", c_progname, c_uid); send_flush_and_unref(msg); } -/* Notify the clients that creating a report has finished */ -void CCommLayerServerDBus::AnalyzeComplete(const map_crash_report_t& arg1) +void CCommLayerServerDBus::JobStarted(const char* peer) { - DBusMessage* msg = new_signal_msg("AnalyzeComplete"); - DBusMessageIter out_iter; - dbus_message_iter_init_append(msg, &out_iter); - store_val(&out_iter, arg1); - send_flush_and_unref(msg); -} - -void CCommLayerServerDBus::JobDone(const char* pDest, uint64_t job_id) -{ - DBusMessage* msg = new_signal_msg("JobDone"); - /* TODO: if (!dbus_message_set_destination(msg, pDest) die_out_of_memory(); */ + DBusMessage* msg = new_signal_msg("JobStarted", peer); + uint64_t nJobID = uint64_t(pthread_self()); dbus_message_append_args(msg, - DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ - DBUS_TYPE_UINT64, &job_id, + DBUS_TYPE_STRING, &peer, /* TODO: redundant parameter, remove from API */ + DBUS_TYPE_UINT64, &nJobID, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); + VERB2 log("Sending signal JobStarted('%s',%llx)", peer, (unsigned long long)nJobID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::JobStarted(const char* pDest, uint64_t job_id) +void CCommLayerServerDBus::JobDone(const char* peer, const char* pUUID) { - DBusMessage* msg = new_signal_msg("JobStarted"); - /* TODO: if (!dbus_message_set_destination(msg, pDest) die_out_of_memory(); */ + DBusMessage* msg = new_signal_msg("JobDone", peer); dbus_message_append_args(msg, - DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */ - DBUS_TYPE_UINT64, &job_id, + DBUS_TYPE_STRING, &peer, /* TODO: redundant parameter, remove from API */ + DBUS_TYPE_STRING, &pUUID, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); + VERB2 log("Sending signal JobDone('%s','%s')", peer, pUUID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::Error(const std::string& arg1) +void CCommLayerServerDBus::Error(const std::string& pMessage, const char* peer) { - DBusMessage* msg = new_signal_msg("Error"); - const char* c_arg1 = arg1.c_str(); - dbus_message_append_args(msg, - DBUS_TYPE_STRING, &c_arg1, - DBUS_TYPE_INVALID); - send_flush_and_unref(msg); -} - -void CCommLayerServerDBus::Update(const std::string& pMessage, uint64_t job_id) -{ - DBusMessage* msg = new_signal_msg("Update"); + DBusMessage* msg = new_signal_msg("Error", peer); const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &c_message, - DBUS_TYPE_UINT64, &job_id, DBUS_TYPE_INVALID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::Warning(const std::string& pMessage) +void CCommLayerServerDBus::Update(const std::string& pMessage, const char* peer, uint64_t job_id) { - DBusMessage* msg = new_signal_msg("Warning"); + DBusMessage* msg = new_signal_msg("Update", peer); const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &c_message, + DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); send_flush_and_unref(msg); } -void CCommLayerServerDBus::Warning(const std::string& pMessage, uint64_t job_id) +void CCommLayerServerDBus::Warning(const std::string& pMessage, const char* peer, uint64_t job_id) { - DBusMessage* msg = new_signal_msg("Warning"); + DBusMessage* msg = new_signal_msg("Warning", peer); const char* c_message = pMessage.c_str(); dbus_message_append_args(msg, DBUS_TYPE_STRING, &c_message, - DBUS_TYPE_UINT64, &job_id, + DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */ DBUS_TYPE_INVALID); send_flush_and_unref(msg); } @@ -456,7 +441,7 @@ static long get_remote_uid(DBusMessage* call, const char** ppSender = NULL) if (dbus_error_is_set(&err)) { dbus_error_free(&err); - error_msg("can't determine remore uid, assuming 0"); + error_msg("Can't determine remote uid, assuming 0"); return 0; } return uid; @@ -495,17 +480,47 @@ static int handle_CreateReport(DBusMessage* call, DBusMessage* reply) const char* sender; long unix_uid = get_remote_uid(call, &sender); - VERB1 log("got %s('%s') call from uid %ld", "CreateReport", pUUID, unix_uid); - uint64_t argout1 = CreateReport_t(pUUID, to_string(unix_uid).c_str(), sender); + VERB1 log("got %s('%s') call from sender '%s' uid %ld", "CreateReport", pUUID, sender, unix_uid); + if (CreateReportThread(pUUID, to_string(unix_uid).c_str(), sender) != 0) + return -1; /* can't create thread (err msg is already logged) */ dbus_message_append_args(reply, - DBUS_TYPE_UINT64, &argout1, + DBUS_TYPE_STRING, &pUUID, /* redundant, eliminate from API */ DBUS_TYPE_INVALID); send_flush_and_unref(reply); return 0; } +static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply) +{ + const char* pUUID; + DBusMessageIter in_iter; + if (!dbus_message_iter_init(call, &in_iter)) + { + error_msg("dbus call %s: no parameters", "GetJobResult"); + return -1; + } + int r = load_val(&in_iter, pUUID); + if (r != LAST_FIELD) + { + if (r == MORE_FIELDS) + error_msg("dbus call %s: extra parameters", "GetJobResult"); + return -1; + } + + long unix_uid = get_remote_uid(call); + VERB1 log("got %s('%s') call from uid %ld", "GetJobResult", pUUID, unix_uid); + map_crash_report_t report = GetJobResult(pUUID, to_string(unix_uid).c_str()); + + DBusMessageIter out_iter; + dbus_message_iter_init_append(reply, &out_iter); + store_val(&out_iter, report); + + send_flush_and_unref(reply); + return 0; +} + static int handle_Report(DBusMessage* call, DBusMessage* reply) { map_crash_report_t argin1; @@ -577,35 +592,6 @@ static int handle_DeleteDebugDump(DBusMessage* call, DBusMessage* reply) return 0; } -static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply) -{ - uint64_t job_id; - DBusMessageIter in_iter; - if (!dbus_message_iter_init(call, &in_iter)) - { - error_msg("dbus call %s: no parameters", "GetJobResult"); - return -1; - } - int r = load_val(&in_iter, job_id); - if (r != LAST_FIELD) - { - if (r == MORE_FIELDS) - error_msg("dbus call %s: extra parameters", "GetJobResult"); - return -1; - } - - long unix_uid = get_remote_uid(call); - VERB1 log("got %s(%llx) call from uid %ld", "GetJobResult", (long long)job_id, unix_uid); - map_crash_report_t report = GetJobResult(job_id, to_string(unix_uid)); - - DBusMessageIter out_iter; - dbus_message_iter_init_append(reply, &out_iter); - store_val(&out_iter, report); - - send_flush_and_unref(reply); - return 0; -} - static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply) { vector_map_string_t plugins_info = g_pPluginManager->GetPluginsInfo(); @@ -885,6 +871,8 @@ static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg const char* member = dbus_message_get_member(msg); log("%s(method:'%s')", __func__, member); + set_client_name(dbus_message_get_sender(msg)); + DBusMessage* reply = dbus_message_new_method_return(msg); int r = -1; if (strcmp(member, "GetCrashInfos") == 0) @@ -931,6 +919,8 @@ static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg } } + set_client_name(NULL); + return DBUS_HANDLER_RESULT_HANDLED; } /* Callback: "DBusObjectPathVTable is unregistered (or its connection is freed)" */ diff --git a/src/Daemon/CommLayerServerDBus.h b/src/Daemon/CommLayerServerDBus.h index 6ac702d0..3a8822de 100644 --- a/src/Daemon/CommLayerServerDBus.h +++ b/src/Daemon/CommLayerServerDBus.h @@ -12,14 +12,12 @@ class CCommLayerServerDBus /* DBus signal senders */ virtual void Crash(const std::string& progname, const std::string& uid); - virtual void AnalyzeComplete(const map_crash_report_t& arg1); - virtual void Error(const std::string& arg1); - virtual void Update(const std::string& pMessage, uint64_t pJobID); - //the job id should be enough in jobdone - virtual void JobDone(const char* pDest, uint64_t pJobID); - virtual void JobStarted(const char* pDest, uint64_t pJobID); - virtual void Warning(const std::string& pMessage); - virtual void Warning(const std::string& pMessage, uint64_t pJobID); + virtual void JobStarted(const char* pDest); + virtual void JobDone(const char* pDest, const char* pUUID); + + virtual void Error(const std::string& pMessage, const char* peer); + virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID); + virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID); }; #endif diff --git a/src/Daemon/CommLayerServerSocket.cpp b/src/Daemon/CommLayerServerSocket.cpp index c88e0f3f..8f1fd4fe 100644 --- a/src/Daemon/CommLayerServerSocket.cpp +++ b/src/Daemon/CommLayerServerSocket.cpp @@ -148,7 +148,7 @@ void CCommLayerServerSocket::ProcessMessage(const std::string& pMessage, GIOChan { // std::string UUID = pMessage.substr(sizeof(MESSAGE_CREATE_REPORT) - 1); // map_crash_report_t crashReport = CreateReport(UUID, UID); -//use CreateReport_t instead of CreateReport? +//use CreateReportThread instead of CreateReport? // std::string message = MESSAGE_CREATE_REPORT + crash_report_to_string(crashReport); // Send(message, pSource); } @@ -220,7 +220,7 @@ vector_crash_infos_t CCommLayerServerSocket::GetCrashInfos(const std::string &pS return crashInfos; } -//reimplement as CreateReport_t(...)? +//reimplement as CreateReportThread(...)? //map_crash_report_t CCommLayerServerSocket::CreateReport(const std::string &pUUID,const std::string &pSender) //{ // map_crash_report_t crashReport; @@ -246,12 +246,7 @@ void CCommLayerServerSocket::Crash(const std::string& arg1) //Send("(CRASH)New Crash Detected: " + arg1); } -void CCommLayerServerSocket::AnalyzeComplete(const map_crash_report_t& arg1) -{ - //Send("(ANALYZE_COMPLETE)Analyze Complete."); -} - -void CCommLayerServerSocket::Error(const std::string& arg1) +void CCommLayerServerSocket::Error(const std::string& arg1, const char* peer) { //Send("(ERROR)Error: " + arg1); } diff --git a/src/Daemon/CommLayerServerSocket.h b/src/Daemon/CommLayerServerSocket.h index bf5b2ff2..0ee47014 100644 --- a/src/Daemon/CommLayerServerSocket.h +++ b/src/Daemon/CommLayerServerSocket.h @@ -31,7 +31,7 @@ class CCommLayerServerSocket : public CCommLayerServer virtual bool DeleteDebugDump(const std::string& pUUID, const std::string& pSender); virtual void Crash(const std::string& arg1); - virtual void AnalyzeComplete(const map_crash_report_t& arg1); - virtual void Error(const std::string& arg1); - virtual void JobStarted(const char* pDest, uint64_t pJobID) {}; + virtual void JobStarted(const char* pDest) {}; + + virtual void Error(const std::string& arg1, const char* peer); }; diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp index 06afabda..6c4d6545 100644 --- a/src/Daemon/CrashWatcher.cpp +++ b/src/Daemon/CrashWatcher.cpp @@ -24,19 +24,18 @@ #include "ABRTException.h" #include "CrashWatcher.h" -void CCrashWatcher::Status(const std::string& pMessage, uint64_t pJobID) +void CCrashWatcher::Status(const std::string& pMessage, const char* peer, uint64_t pJobID) { - log("Update: %s", pMessage.c_str()); - //FIXME: send updates only to job owner + VERB1 log("Update('%s'): %s", peer, pMessage.c_str()); if (g_pCommLayer != NULL) - g_pCommLayer->Update(pMessage, pJobID); + g_pCommLayer->Update(pMessage, peer, pJobID); } -void CCrashWatcher::Warning(const std::string& pMessage, uint64_t pJobID) +void CCrashWatcher::Warning(const std::string& pMessage, const char* peer, uint64_t pJobID) { - log("Warning: %s", pMessage.c_str()); + VERB1 log("Warning('%s'): %s", peer, pMessage.c_str()); if (g_pCommLayer != NULL) - g_pCommLayer->Warning(pMessage, pJobID); + g_pCommLayer->Warning(pMessage, peer, pJobID); } CCrashWatcher::CCrashWatcher() @@ -102,97 +101,129 @@ vector_crash_infos_t GetCrashInfos(const std::string &pUID) return retval; } +/* + * "GetJobResult" is a bit of a misnomer. + * It actually _creates_ a_ report_ and returns the result. + * It is called in two cases: + * (1) by CreateReport dbus call -> CreateReportThread(), in the thread + * (2) by GetJobResult dbus call + * In the second case, it finishes quickly, because previous + * CreateReport dbus call already did all the processing, and we just retrieve + * the result from dump directory, which is fast. + */ +map_crash_report_t GetJobResult(const char* pUUID, const char* pUID) +{ + map_crash_info_t crashReport; + + /* FIXME: starting from here, any shared data must be protected with a mutex. + * For example, CreateCrashReport does: + * g_pPluginManager->GetDatabase(g_settings_sDatabase); + * which is unsafe wrt concurrent updates to g_pPluginManager state. + */ + mw_result_t res = CreateCrashReport(pUUID, pUID, crashReport); + switch (res) + { + case MW_OK: + break; + case MW_IN_DB_ERROR: + warn_client(std::string("Did not find crash with UUID ") + pUUID + " in database"); + break; + case MW_PLUGIN_ERROR: + warn_client("Particular analyzer plugin isn't loaded or there is an error within plugin(s)"); + break; + case MW_CORRUPTED: + case MW_FILE_ERROR: + default: + warn_client(std::string("Corrupted crash with UUID ") + pUUID + ", deleting"); + std::string debugDumpDir = DeleteCrashInfo(pUUID, pUID); + DeleteDebugDumpDir(debugDumpDir); + break; + } + return crashReport; +} + typedef struct thread_data_t { pthread_t thread_id; char* UUID; char* UID; - char* dest; + char* peer; } thread_data_t; -static void *create_report(void *arg) +static void* create_report(void* arg) { thread_data_t *thread_data = (thread_data_t *) arg; - map_crash_info_t crashReport; - g_pCommLayer->JobStarted(thread_data->dest, uint64_t(thread_data->thread_id)); + g_pCommLayer->JobStarted(thread_data->peer); + + /* Client name is per-thread, need to set it */ + set_client_name(thread_data->peer); - log("Creating report..."); try { - mw_result_t res; - res = CreateCrashReport(thread_data->UUID, thread_data->UID, crashReport); - switch (res) - { - case MW_OK: - break; - case MW_IN_DB_ERROR: - warn_client(std::string("Did not find crash with UUID ") + thread_data->UUID + " in database"); - break; - case MW_PLUGIN_ERROR: - warn_client(std::string("Particular analyzer plugin isn't loaded or there is an error within plugin(s)")); - break; - case MW_CORRUPTED: - case MW_FILE_ERROR: - default: - warn_client(std::string("Corrupted crash with UUID ") + thread_data->UUID + ", deleting"); - std::string debugDumpDir = DeleteCrashInfo(thread_data->UUID, thread_data->UID); - DeleteDebugDumpDir(debugDumpDir); - break; - } - /* only one thread can write */ - pthread_mutex_lock(&g_pJobsMutex); - g_pending_jobs[std::string(thread_data->UID)][uint64_t(thread_data->thread_id)] = crashReport; - pthread_mutex_unlock(&g_pJobsMutex); - g_pCommLayer->JobDone(thread_data->dest, uint64_t(thread_data->thread_id)); + /* "GetJobResult" is a bit of a misnomer */ + log("Creating report..."); + map_crash_info_t crashReport = GetJobResult(thread_data->UUID, thread_data->UID); + g_pCommLayer->JobDone(thread_data->peer, thread_data->UUID); } catch (CABRTException& e) { if (e.type() == EXCEP_FATAL) { + set_client_name(NULL); /* free strduped strings */ free(thread_data->UUID); free(thread_data->UID); - free(thread_data->dest); + free(thread_data->peer); free(thread_data); throw e; } warn_client(e.what()); } + set_client_name(NULL); + /* free strduped strings */ free(thread_data->UUID); free(thread_data->UID); - free(thread_data->dest); + free(thread_data->peer); free(thread_data); /* Bogus value. pthreads require us to return void* */ return NULL; } -uint64_t CreateReport_t(const char* pUUID, const char* pUID, const char* pSender) +int CreateReportThread(const char* pUUID, const char* pUID, const char* pSender) { thread_data_t *thread_data = (thread_data_t *)xzalloc(sizeof(thread_data_t)); thread_data->UUID = xstrdup(pUUID); thread_data->UID = xstrdup(pUID); - thread_data->dest = xstrdup(pSender); - if (pthread_create(&thread_data->thread_id, NULL, create_report, (void *)thread_data) != 0) + thread_data->peer = xstrdup(pSender); +//TODO: do we need this? +//pthread_attr_t attr; +//pthread_attr_init(&attr); +//pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + int r = pthread_create(&thread_data->thread_id, NULL, create_report, thread_data); + if (r != 0) { free(thread_data->UUID); free(thread_data->UID); - free(thread_data->dest); + free(thread_data->peer); free(thread_data); /* The only reason this may happen is system-wide resource starvation, - * or ulimit is exceeded (someoune floods us with CreateReport() dbus calls?) + * or ulimit is exceeded (someone floods us with CreateReport() dbus calls?) */ - error_msg("cannot create thread"); - return 0; + error_msg("Can't create thread"); + } + else + { + VERB3 log("Thread %llx created", (unsigned long long)thread_data->thread_id); } - return uint64_t(thread_data->thread_id); +//pthread_attr_destroy(&attr); + return r; } bool DeleteDebugDump(const std::string& pUUID, const std::string& pUID) { try { - std::string debugDumpDir; - debugDumpDir = DeleteCrashInfo(pUUID, pUID); + std::string debugDumpDir = DeleteCrashInfo(pUUID, pUID); DeleteDebugDumpDir(debugDumpDir); } catch (CABRTException& e) @@ -207,12 +238,3 @@ bool DeleteDebugDump(const std::string& pUUID, const std::string& pUID) } return true; } - -map_crash_report_t GetJobResult(uint64_t pJobID, const std::string& pSender) -{ - /* FIXME: once we return the result, we should remove it from map to free memory - - use some TTL to clean the memory even if client won't get it - - if we don't find it in the cache we should try to ask MW to get it again?? - */ - return g_pending_jobs[pSender][pJobID]; -} diff --git a/src/Daemon/CrashWatcher.h b/src/Daemon/CrashWatcher.h index f35e1001..00bb4d51 100644 --- a/src/Daemon/CrashWatcher.h +++ b/src/Daemon/CrashWatcher.h @@ -44,13 +44,13 @@ class CCrashWatcher public: /* Observer methods */ - virtual void Status(const std::string& pMessage, uint64_t pJobID=0); - virtual void Warning(const std::string& pMessage, uint64_t pJobID=0); + virtual void Status(const std::string& pMessage, const char* peer, uint64_t pJobID); + virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID); }; vector_crash_infos_t GetCrashInfos(const std::string &pUID); -uint64_t CreateReport_t(const char* pUUID, const char* pUID, const char* pSender); +int CreateReportThread(const char* pUUID, const char* pUID, const char* pSender); +map_crash_report_t GetJobResult(const char* pUUID, const char* pUID); bool DeleteDebugDump(const std::string& pUUID, const std::string& pUID); -map_crash_report_t GetJobResult(uint64_t pJobID, const std::string& pSender); #endif /*CRASHWATCHER_H_*/ diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index fc28e8b3..a7c97372 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -51,9 +51,12 @@ * - GetCrashInfos(): returns a vector_crash_infos_t (vector_map_vector_string_t) * of crashes for given uid * v[N]["executable"/"uid"/"kernel"/"backtrace"][N] = "contents" - * - CreateReport(UUID): starts creating a report for /var/cache/abrt/DIR with this UUID - * Returns job id (uint64) - * - GetJobResult(job_id): returns map_crash_report_t (map_vector_string_t) + * - CreateReport(UUID): starts creating a report for /var/cache/abrt/DIR with this UUID. + * Returns job id (uint64). + * Emits JobStarted(client_dbus_ID,job_id) dbus signal. + * After it returns, when report creation thread has finished, + * JobDone(client_dbus_ID,UUID) dbus signal is emitted. + * - GetJobResult(UUID): returns map_crash_report_t (map_vector_string_t) * - Report(map_crash_report_t (map_vector_string_t)): * "Please report this crash": calls Report() of all registered reporter plugins * Returns report_status_t (map_vector_string_t) - the status of each call @@ -67,7 +70,20 @@ * - SetSettings(map_abrt_settings_t): returns void * * DBus signals we emit: - * - ... + * - Crash(progname,uid) - a new crash occurred (new /var/cache/abrt/DIR is found) + * - JobStarted(client_dbus_ID,job_id) - see CreateReport above. + * Sent as unicast to the client which did CreateReport. + * - JobDone(client_dbus_ID,UUID) - see CreateReport above. + * Sent as unicast to the client which did CreateReport. + * - Error(msg) + * - Warning(msg[,job_id]) + * - Update(msg,job_id) + * + * TODO: + * - Error/Warning/Update dbus signals must be unicast too + * - API does not really need JobStarted dbus signal at all, and JobDone signal + * does not need to pass any parameters - out clients never sent multiple + * CreateReport's. */ @@ -98,12 +114,7 @@ static GMainLoop* g_pMainloop; int g_verbose; CCommLayerServer* g_pCommLayer; -/* - * Map to cache the results from CreateReport_t - * <UID, <job_id, result>> - */ -std::map<const std::string, std::map<uint64_t, map_crash_report_t> > g_pending_jobs; -/* mutex to protect g_pending_jobs */ + pthread_mutex_t g_pJobsMutex; @@ -503,7 +514,8 @@ static gboolean handle_event_cb(GIOChannel *gio, GIOCondition condition, gpointe /* ignore lock files and such */ if (!(event->mask & IN_ISDIR)) { - VERB3 log("File '%s' creation detected, ignoring", name); + // Happens all the time during normal run + //VERB3 log("File '%s' creation detected, ignoring", name); continue; } diff --git a/src/Daemon/Daemon.h b/src/Daemon/Daemon.h index 8fcce717..e03d983a 100644 --- a/src/Daemon/Daemon.h +++ b/src/Daemon/Daemon.h @@ -49,9 +49,6 @@ extern CPluginManager* g_pPluginManager; */ extern set_string_t g_setBlackList; -/* Map <UID, <job_id, result>> to cache the results from CreateReport_t() */ -extern std::map<const std::string, std::map<uint64_t, map_crash_report_t> > g_pending_jobs; -/* Mutex to protect g_pending_jobs */ extern pthread_mutex_t g_pJobsMutex; #endif diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index e6c9187c..4f499d68 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -173,33 +173,42 @@ mw_result_t CreateCrashReport(const std::string& pUUID, const std::string& pUID, map_crash_report_t& pCrashReport) { - CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase); - database_row_t row; - database->Connect(); - row = database->GetUUIDData(pUUID, pUID); - database->DisConnect(); - CDebugDump dd; + VERB2 log("CreateCrashReport('%s','%',result)", pUUID.c_str(), pUID.c_str()); + database_row_t row; + if (pUUID != "") + { + CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase); + database->Connect(); + row = database->GetUUIDData(pUUID, pUID); + database->DisConnect(); + } if (pUUID == "" || row.m_sUUID != pUUID) { warn_client("CreateCrashReport(): UUID '"+pUUID+"' is not in database."); return MW_IN_DB_ERROR; } + CDebugDump dd; try { std::string analyzer; std::string gUUID; + VERB3 log(" LoadText(FILENAME_ANALYZER,'%s')", row.m_sDebugDumpDir.c_str()); dd.Open(row.m_sDebugDumpDir); dd.LoadText(FILENAME_ANALYZER, analyzer); dd.Close(); + VERB3 log(" CreateReport('%s')", analyzer.c_str()); CreateReport(analyzer, row.m_sDebugDumpDir); gUUID = GetGlobalUUID(analyzer, row.m_sDebugDumpDir); + VERB3 log(" GetGlobalUUID:'%s'", gUUID.c_str()); + VERB3 log(" RunAnalyzerActions"); RunAnalyzerActions(analyzer, row.m_sDebugDumpDir); + VERB3 log(" DebugDumpToCrashReport"); DebugDumpToCrashReport(row.m_sDebugDumpDir, pCrashReport); add_crash_data_to_crash_report(pCrashReport, CD_UUID, CD_TXT, CD_ISNOTEDITABLE, gUUID); @@ -245,7 +254,6 @@ void RunAction(const std::string& pActionDir, warn_client("RunAction(): " + e.what()); update_client("Execution of '"+pPluginName+"' was not successful: " + e.what()); } - } void RunActionsAndReporters(const std::string& pDebugDumpDir) diff --git a/src/Gui/ABRTPlugin.py b/src/Gui/ABRTPlugin.py index da9c9e57..4a94e670 100644 --- a/src/Gui/ABRTPlugin.py +++ b/src/Gui/ABRTPlugin.py @@ -57,4 +57,7 @@ class PluginInfo(): def __str__(self): return self.Name + + def __getitem__(self, item): + return self.__dict__[item] diff --git a/src/Gui/CCDBusBackend.py b/src/Gui/CCDBusBackend.py index b0230bd6..01e51962 100644 --- a/src/Gui/CCDBusBackend.py +++ b/src/Gui/CCDBusBackend.py @@ -149,6 +149,7 @@ class DBusManager(gobject.GObject): # new crash notify self.proxy.connect_to_signal("Crash",self.crash_cb,dbus_interface=CC_IFACE) # BT extracting complete +#TODO: remove, abrtd does not emit AnalyzeComplete self.acconnection = self.proxy.connect_to_signal("AnalyzeComplete",self.analyze_complete_cb,dbus_interface=CC_IFACE) # Catch Errors self.acconnection = self.proxy.connect_to_signal("Error",self.error_handler_cb,dbus_interface=CC_IFACE) @@ -171,10 +172,10 @@ class DBusManager(gobject.GObject): print "Started our job: %s" % job_id self.addJob(job_id) - def jobdone_cb(self, dest, job_id): + def jobdone_cb(self, dest, uuid): if self.uniq_name == dest: - print "Our job: %s is done." % job_id - dump = self.cc.GetJobResult(job_id) + print "Our job for UUID %s is done." % uuid + dump = self.cc.GetJobResult(uuid) if dump: self.emit("analyze-complete", dump) else: @@ -219,7 +220,7 @@ class DBusManager(gobject.GObject): #for i in settings.keys(): # print i return settings - + def registerPlugin(self, plugin_name): return self.cc.RegisterPlugin(plugin_name) @@ -229,3 +230,8 @@ class DBusManager(gobject.GObject): def setPluginSettings(self, plugin_name, plugin_settings): return self.cc.SetPluginSettings(plugin_name, plugin_settings) + def getSettings(self): + return self.cc.GetSettings() + + def setSettings(self, settings): + return self.cc.SetSettings(settings) diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py index e7472562..4fe07751 100644 --- a/src/Gui/CCMainWindow.py +++ b/src/Gui/CCMainWindow.py @@ -11,6 +11,7 @@ import CCDBusBackend from CC_gui_functions import * from CCDumpList import getDumpList, DumpList from CCReporterDialog import ReporterDialog +from PluginsSettingsDialog import PluginsSettingsDialog from SettingsDialog import SettingsDialog from CCReport import Report import ABRTExceptions @@ -108,6 +109,7 @@ class MainWindow(): self.wTree.get_widget("miQuit").connect("activate", self.on_bQuit_clicked) self.wTree.get_widget("miAbout").connect("activate", self.on_miAbout_clicked) self.wTree.get_widget("miPreferences").connect("activate", self.on_miPreferences_clicked) + self.wTree.get_widget("miSettings").connect("activate", self.on_miSettings_clicked) # connect handlers for daemon signals self.ccdaemon.connect("crash", self.on_data_changed_cb, None) self.ccdaemon.connect("analyze-complete", self.on_analyze_complete_cb, self.pBarWindow) @@ -133,9 +135,15 @@ class MainWindow(): dialog.hide() def on_miPreferences_clicked(self, widget): - dialog = SettingsDialog(self.window,self.ccdaemon) + dialog = PluginsSettingsDialog(self.window,self.ccdaemon) dialog.hydrate() dialog.show() + + def on_miSettings_clicked(self, widget): + dialog = SettingsDialog(self.window, self.ccdaemon) + dialog.hydrate() + dialog.show() + self.ccdaemon.getSettings() def warning_cb(self, daemon, message=None): # try to hide the progressbar, we dont really care if it was visible .. diff --git a/src/Gui/Makefile.am b/src/Gui/Makefile.am index 6435c1f0..bacfaf47 100644 --- a/src/Gui/Makefile.am +++ b/src/Gui/Makefile.am @@ -5,7 +5,8 @@ bin_SCRIPTS = abrt-gui PYTHON_FILES = CCDBusBackend.py CCDumpList.py CCDump.py CC_gui_functions.py \ CCReporterDialog.py CCReport.py abrt_utils.py \ CCMainWindow.py CellRenderers.py ABRTExceptions.py \ - SettingsDialog.py ABRTPlugin.py PluginList.py PluginSettingsUI.py + SettingsDialog.py ABRTPlugin.py PluginList.py PluginSettingsUI.py \ + PluginsSettingsDialog.py GLADE_FILES = ccgui.glade report.glade settings.GtkBuilder dialogs.GtkBuilder diff --git a/src/Gui/PluginList.py b/src/Gui/PluginList.py index 591096bd..76bdf81e 100644 --- a/src/Gui/PluginList.py +++ b/src/Gui/PluginList.py @@ -33,6 +33,14 @@ class PluginInfoList(list): return else: print "db == None!" + + + def getEnabledPlugins(self): + return [x for x in self if x["Enabled"] == 'yes'] + + def getActionPlugins(self): + return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Action'] + __PFList = None diff --git a/src/Gui/PluginsSettingsDialog.py b/src/Gui/PluginsSettingsDialog.py new file mode 100644 index 00000000..b56f9d7c --- /dev/null +++ b/src/Gui/PluginsSettingsDialog.py @@ -0,0 +1,161 @@ +import sys +import gtk +from PluginList import getPluginInfoList, PluginInfoList +from CC_gui_functions import * +from PluginSettingsUI import PluginSettingsUI +from ABRTPlugin import PluginSettings, PluginInfo +from abrt_utils import _ + +class PluginsSettingsDialog: + def __init__(self, parent, daemon): + #print "Settings dialog init" + self.ccdaemon = daemon + self.builder = gtk.Builder() + builderfile = "%s%ssettings.GtkBuilder" % (sys.path[0],"/") + #print builderfile + try: + self.builder.add_from_file(builderfile) + except Exception, e: + print e + self.window = self.builder.get_object("wPluginsSettings") + if not self.window: + raise Exception(_("Can't load gui description for SettingsDialog!")) + #self.window.set_parent(parent) + + self.pluginlist = self.builder.get_object("tvSettings") + # cell_text, toggle_active, toggle_visible, group_name_visible, color, plugin + self.pluginsListStore = gtk.TreeStore(str, bool, bool, bool, str, object) + # set filter + self.modelfilter = self.pluginsListStore.filter_new() + self.modelfilter.set_visible_func(self.filter_plugins, None) + self.pluginlist.set_model(self.modelfilter) + # =============================================== + columns = [None]*1 + columns[0] = gtk.TreeViewColumn(_("Name")) + + # create list + for column in columns: + n = self.pluginlist.append_column(column) + column.cell = gtk.CellRendererText() + column.gray_background = gtk.CellRendererText() + column.pack_start(column.cell, True) + column.pack_start(column.gray_background, True) + column.set_attributes(column.cell, markup=(n-1), visible=2) + column.set_attributes(column.gray_background, visible=3, cell_background=4) + column.set_resizable(True) + + # toggle + group_name_renderer = gtk.CellRendererText() + toggle_renderer = gtk.CellRendererToggle() + toggle_renderer.set_property('activatable', True) + toggle_renderer.connect( 'toggled', self.on_enabled_toggled, self.pluginsListStore ) + column = gtk.TreeViewColumn(_('Enabled')) + column.pack_start(toggle_renderer, True) + column.pack_start(group_name_renderer, True) + column.add_attribute( toggle_renderer, "active", 1) + column.add_attribute( toggle_renderer, "visible", 2) + column.add_attribute( group_name_renderer, "visible", 3) + column.add_attribute( group_name_renderer, "markup", 0) + column.add_attribute( group_name_renderer, "cell_background", 4) + self.pluginlist.insert_column(column, 0) + + #connect signals + self.pluginlist.connect("cursor-changed", self.on_tvDumps_cursor_changed) + self.builder.get_object("bConfigurePlugin").connect("clicked", self.on_bConfigurePlugin_clicked, self.pluginlist) + self.builder.get_object("bClose").connect("clicked", self.on_bClose_clicked) + self.builder.get_object("bConfigurePlugin").set_sensitive(False) + + def on_enabled_toggled(self,cell, path, model): + plugin = model[path][model.get_n_columns()-1] + if plugin: + if model[path][1]: + #print "self.ccdaemon.UnRegisterPlugin(%s)" % (plugin.getName()) + self.ccdaemon.unRegisterPlugin(plugin.getName()) + # FIXME: create class plugin and move this into method Plugin.Enable() + plugin.Enabled = "no" + plugin.Settings = None + else: + #print "self.ccdaemon.RegisterPlugin(%s)" % (model[path][model.get_n_columns()-1]) + self.ccdaemon.registerPlugin(plugin.getName()) + # FIXME: create class plugin and move this into method Plugin.Enable() + plugin.Enabled = "yes" + plugin.Settings = PluginSettings(self.ccdaemon.getPluginSettings(plugin.getName())) + model[path][1] = not model[path][1] + + def filter_plugins(self, model, miter, data): + return True + def hydrate(self): + #print "settings hydrate" + self.pluginsListStore.clear() + try: + pluginlist = getPluginInfoList(self.ccdaemon, refresh=True) + except Exception, e: + print e + #gui_error_message("Error while loading plugins info, please check if abrt daemon is running\n %s" % e) + plugin_rows = {} + for plugin_type in PluginInfo.types.keys(): + it = self.pluginsListStore.append(None, ["<b>%s</b>" % (PluginInfo.types[plugin_type]),0 , 0, 1,"gray", None]) + plugin_rows[plugin_type] = it + for entry in pluginlist: + n = self.pluginsListStore.append(plugin_rows[entry.getType()],["<b>%s</b>\n%s" % (entry.getName(), entry.Description), entry.Enabled == "yes", 1, 0, "white", entry]) + self.pluginlist.expand_all() + + def dehydrate(self): + # we have nothing to save, plugin's does the work + pass + + def show(self): + self.window.show() + #if result == gtk.RESPONSE_APPLY: + # self.dehydrate() + #self.window.destroy() + #return result + + def on_bConfigurePlugin_clicked(self, button, pluginview): + pluginsListStore, path = pluginview.get_selection().get_selected_rows() + if not path: + self.builder.get_object("lDescription").set_label(_("Can't get plugin description")) + return + # this should work until we keep the row object in the last position + pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1) + if pluginfo: + try: + ui = PluginSettingsUI(pluginfo) + except Exception, e: + gui_error_message(_("Error while opening plugin settings UI: \n\n%s" % e)) + return + ui.hydrate() + response = ui.run() + if response == gtk.RESPONSE_APPLY: + ui.dehydrate() + if pluginfo.Settings: + try: + self.ccdaemon.setPluginSettings(pluginfo.getName(), pluginfo.Settings) + except Exception, e: + gui_error_message(_("Can't save plugin settings:\n %s", e)) + #for key, val in pluginfo.Settings.iteritems(): + # print "%s:%s" % (key, val) + elif response == gtk.RESPONSE_CANCEL: + pass + else: + print _("unknown response from settings dialog") + ui.destroy() + + def on_bClose_clicked(self, button): + self.window.destroy() + + def on_tvDumps_cursor_changed(self, treeview): + pluginsListStore, path = treeview.get_selection().get_selected_rows() + if not path: + self.builder.get_object("lDescription").set_label("No description") + return + # this should work until we keep the row object in the last position + pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1) + if pluginfo: + self.builder.get_object("lPluginAuthor").set_text(pluginfo.Email) + self.builder.get_object("lPluginVersion").set_text(pluginfo.Version) + self.builder.get_object("lPluginWebSite").set_text(pluginfo.WWW) + self.builder.get_object("lPluginName").set_text(pluginfo.Name) + self.builder.get_object("lPluginDescription").set_text(pluginfo.Description) + # print (pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "") + self.builder.get_object("bConfigurePlugin").set_sensitive(pluginfo != None and pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "") diff --git a/src/Gui/SettingsDialog.py b/src/Gui/SettingsDialog.py index 79dfad74..a2ba1f06 100644 --- a/src/Gui/SettingsDialog.py +++ b/src/Gui/SettingsDialog.py @@ -2,160 +2,87 @@ import sys import gtk from PluginList import getPluginInfoList, PluginInfoList from CC_gui_functions import * -from PluginSettingsUI import PluginSettingsUI +#from PluginSettingsUI import PluginSettingsUI from ABRTPlugin import PluginSettings, PluginInfo from abrt_utils import _ class SettingsDialog: def __init__(self, parent, daemon): - #print "Settings dialog init" + builderfile = "%s%ssettings.GtkBuilder" % (sys.path[0],"/") self.ccdaemon = daemon self.builder = gtk.Builder() - builderfile = "%s%ssettings.GtkBuilder" % (sys.path[0],"/") - #print builderfile - try: - self.builder.add_from_file(builderfile) - except Exception, e: - print e - self.window = self.builder.get_object("wSettings") - if not self.window: - raise Exception(_("Can't load gui description for SettingsDialog!")) - #self.window.set_parent(parent) - - self.pluginlist = self.builder.get_object("tvSettings") - # cell_text, toggle_active, toggle_visible, group_name_visible, color, plugin - self.pluginsListStore = gtk.TreeStore(str, bool, bool, bool, str, object) - # set filter - self.modelfilter = self.pluginsListStore.filter_new() - self.modelfilter.set_visible_func(self.filter_plugins, None) - self.pluginlist.set_model(self.modelfilter) - # =============================================== - columns = [None]*1 - columns[0] = gtk.TreeViewColumn(_("Name")) - - # create list - for column in columns: - n = self.pluginlist.append_column(column) - column.cell = gtk.CellRendererText() - column.gray_background = gtk.CellRendererText() - column.pack_start(column.cell, True) - column.pack_start(column.gray_background, True) - column.set_attributes(column.cell, markup=(n-1), visible=2) - column.set_attributes(column.gray_background, visible=3, cell_background=4) - column.set_resizable(True) - - # toggle - group_name_renderer = gtk.CellRendererText() - toggle_renderer = gtk.CellRendererToggle() - toggle_renderer.set_property('activatable', True) - toggle_renderer.connect( 'toggled', self.on_enabled_toggled, self.pluginsListStore ) - column = gtk.TreeViewColumn(_('Enabled')) - column.pack_start(toggle_renderer, True) - column.pack_start(group_name_renderer, True) - column.add_attribute( toggle_renderer, "active", 1) - column.add_attribute( toggle_renderer, "visible", 2) - column.add_attribute( group_name_renderer, "visible", 3) - column.add_attribute( group_name_renderer, "markup", 0) - column.add_attribute( group_name_renderer, "cell_background", 4) - self.pluginlist.insert_column(column, 0) - - #connect signals - self.pluginlist.connect("cursor-changed", self.on_tvDumps_cursor_changed) - self.builder.get_object("bConfigurePlugin").connect("clicked", self.on_bConfigurePlugin_clicked, self.pluginlist) - self.builder.get_object("bClose").connect("clicked", self.on_bClose_clicked) - self.builder.get_object("bConfigurePlugin").set_sensitive(False) - - def on_enabled_toggled(self,cell, path, model): - plugin = model[path][model.get_n_columns()-1] - if plugin: - if model[path][1]: - #print "self.ccdaemon.UnRegisterPlugin(%s)" % (plugin.getName()) - self.ccdaemon.unRegisterPlugin(plugin.getName()) - # FIXME: create class plugin and move this into method Plugin.Enable() - plugin.Enabled = "no" - plugin.Settings = None - else: - #print "self.ccdaemon.RegisterPlugin(%s)" % (model[path][model.get_n_columns()-1]) - self.ccdaemon.registerPlugin(plugin.getName()) - # FIXME: create class plugin and move this into method Plugin.Enable() - plugin.Enabled = "yes" - plugin.Settings = PluginSettings(self.ccdaemon.getPluginSettings(plugin.getName())) - model[path][1] = not model[path][1] - - def filter_plugins(self, model, miter, data): + self.builder.add_from_file(builderfile) + self.window = self.builder.get_object("wGlobalSettings") + print "GSD init" + self.builder.get_object("bSaveSettings").connect("clicked", self.on_ok_clicked) + self.builder.get_object("bAddCronJob").connect("clicked", self.on_bAddCronJob_clicked) + + def filter_settings(self, model, miter, data): return True + def hydrate(self): - #print "settings hydrate" - self.pluginsListStore.clear() try: - pluginlist = getPluginInfoList(self.ccdaemon, refresh=True) + self.settings = self.ccdaemon.getSettings() except Exception, e: + # FIXME: this should be error gui message! print e - #gui_error_message("Error while loading plugins info, please check if abrt daemon is running\n %s" % e) - plugin_rows = {} - for plugin_type in PluginInfo.types.keys(): - it = self.pluginsListStore.append(None, ["<b>%s</b>" % (PluginInfo.types[plugin_type]),0 , 0, 1,"gray", None]) - plugin_rows[plugin_type] = it - for entry in pluginlist: - n = self.pluginsListStore.append(plugin_rows[entry.getType()],["<b>%s</b>\n%s" % (entry.getName(), entry.Description), entry.Enabled == "yes", 1, 0, "white", entry]) - self.pluginlist.expand_all() - + + # hydrate cron jobs: + for key,val in self.settings["Cron"].iteritems(): + try: + self.pluginlist = getPluginInfoList(self.ccdaemon, refresh=True) + except Exception, e: + print e + + hbox = gtk.HBox(homogeneous=True) + time = gtk.Entry() + plugins = gtk.ComboBox() + enabledPluginsListStore = gtk.ListStore(str, object) + cell = gtk.CellRendererText() + plugins.pack_start(cell) + plugins.add_attribute(cell, 'text', 0) + enabledPluginsListStore.append([_("Select a plugin"), None]) + for plugin in self.pluginlist.getActionPlugins(): + print "#", plugin.getName() + enabledPluginsListStore.append([plugin.getName(), plugin]) + plugins.set_model(enabledPluginsListStore) + plugins.set_active(0) + hbox.pack_start(time,False) + hbox.pack_start(plugins,False) + self.builder.get_object("vbCronJobs").pack_start(hbox,False) + hbox.show_all() + #print "\t%s:%s" % (key,val) + + def on_ok_clicked(self, button): + self.dehydrate() + + def on_bAddCronJob_clicked(self, button): + hbox = gtk.HBox(homogeneous=True) + time = gtk.Entry() + plugins = gtk.ComboBox() + enabledPluginsListStore = gtk.ListStore(str, object) + cell = gtk.CellRendererText() + plugins.pack_start(cell) + plugins.add_attribute(cell, 'text', 0) + for plugin in self.pluginlist.getActionPlugins(): + print "#", plugin.getName() + enabledPluginsListStore.append([plugin.getName(), plugin]) + plugins.set_model(enabledPluginsListStore) + plugins.set_active(0) + hbox.pack_start(time,False) + hbox.pack_start(plugins,False) + self.builder.get_object("vbCronJobs").pack_start(hbox,False) + hbox.show_all() + print "add" + + def on_cancel_clicked(self,button): + print "hide" + self.window.hide() + def dehydrate(self): - # we have nothing to save, plugin's does the work - pass - + self.ccdaemon.setSettings(self.settings) + print "dehydrate" + def show(self): + print "show" self.window.show() - #if result == gtk.RESPONSE_APPLY: - # self.dehydrate() - #self.window.destroy() - #return result - - def on_bConfigurePlugin_clicked(self, button, pluginview): - pluginsListStore, path = pluginview.get_selection().get_selected_rows() - if not path: - self.builder.get_object("lDescription").set_label(_("Can't get plugin description")) - return - # this should work until we keep the row object in the last position - pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1) - if pluginfo: - try: - ui = PluginSettingsUI(pluginfo) - except Exception, e: - gui_error_message(_("Error while opening plugin settings UI: \n\n%s" % e)) - return - ui.hydrate() - response = ui.run() - if response == gtk.RESPONSE_APPLY: - ui.dehydrate() - if pluginfo.Settings: - try: - self.ccdaemon.setPluginSettings(pluginfo.getName(), pluginfo.Settings) - except Exception, e: - gui_error_message(_("Can't save plugin settings:\n %s", e)) - #for key, val in pluginfo.Settings.iteritems(): - # print "%s:%s" % (key, val) - elif response == gtk.RESPONSE_CANCEL: - pass - else: - print _("unknown response from settings dialog") - ui.destroy() - - def on_bClose_clicked(self, button): - self.window.destroy() - - def on_tvDumps_cursor_changed(self, treeview): - pluginsListStore, path = treeview.get_selection().get_selected_rows() - if not path: - self.builder.get_object("lDescription").set_label("No description") - return - # this should work until we keep the row object in the last position - pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1) - if pluginfo: - self.builder.get_object("lPluginAuthor").set_text(pluginfo.Email) - self.builder.get_object("lPluginVersion").set_text(pluginfo.Version) - self.builder.get_object("lPluginWebSite").set_text(pluginfo.WWW) - self.builder.get_object("lPluginName").set_text(pluginfo.Name) - self.builder.get_object("lPluginDescription").set_text(pluginfo.Description) - # print (pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "") - self.builder.get_object("bConfigurePlugin").set_sensitive(pluginfo != None and pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "") diff --git a/src/Gui/ccgui.glade b/src/Gui/ccgui.glade index 7b8dd244..67bf6fa3 100644 --- a/src/Gui/ccgui.glade +++ b/src/Gui/ccgui.glade @@ -148,6 +148,13 @@ Zdenek Prikryl <zprikryl@redhat.com></property> <property name="use_stock">True</property> </widget> </child> + <child> + <widget class="GtkMenuItem" id="miSettings"> + <property name="visible">True</property> + <property name="label" translatable="yes">Global settings</property> + <property name="use_underline">True</property> + </widget> + </child> </widget> </child> </widget> diff --git a/src/Gui/settings.GtkBuilder b/src/Gui/settings.GtkBuilder index 575b77c6..676f3907 100644 --- a/src/Gui/settings.GtkBuilder +++ b/src/Gui/settings.GtkBuilder @@ -2,7 +2,7 @@ <interface> <requires lib="gtk+" version="2.14"/> <!-- interface-naming-policy project-wide --> - <object class="GtkWindow" id="wSettings"> + <object class="GtkWindow" id="wPluginsSettings"> <property name="title" translatable="yes">Settings</property> <property name="modal">True</property> <property name="default_width">450</property> @@ -214,4 +214,262 @@ </object> </child> </object> + <object class="GtkWindow" id="wGlobalSettings"> + <property name="title" translatable="yes">Global Settings</property> + <property name="modal">True</property> + <property name="default_width">450</property> + <property name="default_height">400</property> + <child> + <object class="GtkVBox" id="gsvbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkNotebook" id="notebook1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <object class="GtkTable" id="stable1"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">3</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="pCommon"> + <property name="visible">True</property> + <property name="label" translatable="yes">Common</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="cron_vbox"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkScrolledWindow" id="swCronJobs"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkViewport" id="vpCronJobs"> + <property name="visible">True</property> + <property name="resize_mode">queue</property> + <child> + <object class="GtkVBox" id="vbCronJobs"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="cron_add_button_hbox"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkAlignment" id="add_alignment1"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="add_alignment2"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="bAddCronJob"> + <property name="label" translatable="yes">gtk-add</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="pCron"> + <property name="visible">True</property> + <property name="label" translatable="yes">Cron</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkTable" id="stable3"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">3</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="pAnacre"> + <property name="visible">True</property> + <property name="label" translatable="yes">Analyzers, Actions, Reporters</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="button_align_hbox"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkAlignment" id=" button_alignment"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="shbox1"> + <property name="visible">True</property> + <property name="spacing">14</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="bCancelSettings"> + <property name="label" translatable="yes">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="bSaveSettings"> + <property name="label" translatable="yes">gtk-ok</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> </interface> |
