summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2009-08-26 10:43:34 +0200
committerJiri Moskovcak <jmoskovc@redhat.com>2009-08-26 10:43:34 +0200
commita88dce13d510622dee05e93efb46ff4ec5b72935 (patch)
tree5159e913ad91b70bb7c57946f4092bd69330f1d9
parent7b6c533525e26cc3408865f1c90c71882384cf76 (diff)
downloadabrt-a88dce13d510622dee05e93efb46ff4ec5b72935.tar.gz
abrt-a88dce13d510622dee05e93efb46ff4ec5b72935.tar.xz
abrt-a88dce13d510622dee05e93efb46ff4ec5b72935.zip
GUI: added support for gettext (+part of czech translation)
-rw-r--r--Makefile.am2
-rw-r--r--abrt.spec4
-rw-r--r--configure.ac5
-rw-r--r--po/ChangeLog0
-rw-r--r--po/LINGUAS1
-rw-r--r--po/Makefile.in.in429
-rw-r--r--po/Makevars42
-rw-r--r--po/POTFILES.in21
-rw-r--r--po/POTFILES.skip2
-rw-r--r--po/cs.po227
-rw-r--r--src/Gui/ABRTExceptions.py10
-rw-r--r--src/Gui/CCDBusBackend.py11
-rw-r--r--src/Gui/CCMainWindow.py42
-rw-r--r--src/Gui/CCReporterDialog.py3
-rw-r--r--src/Gui/Makefile.am4
-rw-r--r--src/Gui/PluginSettingsUI.py12
-rw-r--r--src/Gui/SettingsDialog.py13
-rw-r--r--src/Gui/ccgui.glade190
18 files changed, 735 insertions, 283 deletions
diff --git a/Makefile.am b/Makefile.am
index b839897f..c200d489 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,3 @@
-SUBDIRS = lib src inc
+SUBDIRS = lib src inc po
EXTRA_DIST = doc/CodingStyle abrt.spec
diff --git a/abrt.spec b/abrt.spec
index a023c7a4..267e1753 100644
--- a/abrt.spec
+++ b/abrt.spec
@@ -21,6 +21,7 @@ BuildRequires: libnotify-devel
BuildRequires: xmlrpc-c-devel
BuildRequires: file-devel
BuildRequires: python-devel
+BuildRequires: gettext
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: %{name}-libs = %{version}-%{release}
@@ -190,6 +191,7 @@ make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT mandir=%{_mandir}
+%find_lang %{name}
#rm -rf $RPM_BUILD_ROOT/%{_libdir}/lib*.la
#rm -rf $RPM_BUILD_ROOT/%{_libdir}/%{name}/lib*.la
@@ -223,7 +225,7 @@ fi
%postun libs -p /sbin/ldconfig
-%files
+%files -f %{name}.lang
%defattr(-,root,root,-)
%doc README COPYING
%{_sbindir}/%{name}
diff --git a/configure.ac b/configure.ac
index a010b453..258147f9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,9 +4,11 @@ AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_DISABLE_STATIC
AC_PROG_LIBTOOL
-
AC_PROG_CXX
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.17])
+
AM_PATH_PYTHON
if test -z "$PYTHON"; then
echo "*** Essential program python not found" 1>&2
@@ -77,6 +79,7 @@ AC_CONFIG_FILES([
src/Gui/Makefile
src/CLI/Makefile
inc/Makefile
+ po/Makefile.in
])
AC_OUTPUT \ No newline at end of file
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/po/ChangeLog
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 00000000..5a08b2b4
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1 @@
+cs \ No newline at end of file
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 00000000..fecf500f
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,429 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.17
+GETTEXT_MACRO_VERSION = 0.17
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: check-macro-version all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+check-macro-version:
+ @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+ package_gnu='GNU '; \
+ else \
+ package_gnu=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_gnu}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ $(mkdir_p) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ $(mkdir_p) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 00000000..4b33f8b0
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,42 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --from-code=UTF-8
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = jmoskovc@redhat.com
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 00000000..833b1d42
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,21 @@
+# [encoding: UTF-8]
+# List of source files containing translatable strings.
+# Please keep this file sorted alphabetically.
+src/Gui/ABRTExceptions.py
+src/Gui/ABRTPlugin.py
+src/Gui/abrt_utils.py
+src/Gui/CCDBusBackend.py
+src/Gui/CCDumpList.py
+src/Gui/CCDump.py
+src/Gui/CC_gui_functions.py
+src/Gui/ccgui.glade
+src/Gui/CCMainWindow.py
+src/Gui/CCReporterDialog.py
+src/Gui/CCReport.py
+src/Gui/CellRenderers.py
+# /src/dialogs.GtkBuilder
+src/Gui/PluginList.py
+src/Gui/PluginSettingsUI.py
+src/Gui/report.glade
+src/Gui/SettingsDialog.py
+# /src/settings.GtkBuilder
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
new file mode 100644
index 00000000..bb8a3b53
--- /dev/null
+++ b/po/POTFILES.skip
@@ -0,0 +1,2 @@
+contrib/command-not-found/pk-tools-common.c
+
diff --git a/po/cs.po b/po/cs.po
index 54e7c043..4e59d6c7 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -1,70 +1,65 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the ABRT package.
-# FIRST AUTHOR <jmoskovc@redhat.com>, 2009.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-25 16:19+0200\n"
-"PO-Revision-Date: 2009-08-25 16:26+ZONE\n"
-"Last-Translator: Jiri Moskovcak <jmoskovc@redhat.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Project-Id-Version: ABRT 0.7.1.1\n"
+"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
+"POT-Creation-Date: 2009-08-26 10:19+0200\n"
+"PO-Revision-Date: 2009-08-25 22:04+ZONE\n"
+"Last-Translator: JIRI MOSKOVCAK <jmoskovc@redhat.com>\n"
+"Language-Team: CZECH <ll@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ccgui.glade:6 ccgui.glade:296
-msgid "Automatic Bug Reporting Tool"
+#: src/Gui/ABRTExceptions.py:4
+msgid "Another client is already running, trying to wake it."
msgstr ""
-#: ccgui.glade:17 ccgui.glade:308
-msgid "_File"
-msgstr "_Soubor"
-
-#: ccgui.glade:37 ccgui.glade:328
-msgid "_Edit"
+#: src/Gui/ABRTExceptions.py:10
+msgid "Got unexpected data from daemon (is the database properly updated?)."
msgstr ""
-#: ccgui.glade:57 ccgui.glade:348
-msgid "_Help"
-msgstr "_Nápověda"
-
-#: ccgui.glade:87 ccgui.glade:378
-msgid "Delete"
-msgstr "Smazat"
+#: src/Gui/CCDBusBackend.py:135
+msgid "Can't connect to dbus"
+msgstr ""
-#: ccgui.glade:99 ccgui.glade:390
-msgid "Report"
-msgstr "Reportovat"
+#: src/Gui/CCDBusBackend.py:139 src/Gui/CCDBusBackend.py:157
+msgid "Please check if abrt daemon is running."
+msgstr ""
+"Nepodařilo se připojit k démonovi, zkontrolujte prosím, zda služba abrt běží."
-#: ccgui.glade:146 ccgui.glade:437
-msgid "<span color=\"white\">Description</span>"
-msgstr "<span color=\"white\">Popis</span>"
+#: src/Gui/CCDBusBackend.py:169
+msgid ""
+"Daemon did't return valid report info\n"
+"Debuginfo is missing?"
+msgstr ""
-#: ccgui.glade:196
+#: src/Gui/ccgui.glade:6
msgid "Please wait.."
-msgstr "Čekejte prosím..."
+msgstr "Prosím čekejte.."
-#: ccgui.glade:206
+#: src/Gui/ccgui.glade:16
msgid "Working..."
-msgstr "Pracuji..."
+msgstr "Pracuji.."
-#: ccgui.glade:239
+#: src/Gui/ccgui.glade:49
msgid " "
msgstr ""
-#: ccgui.glade:258
+#: src/Gui/ccgui.glade:68
msgid "About ABRT"
-msgstr "O ABRTu"
+msgstr "O aplikaci ABRT"
-#: ccgui.glade:264
+#: src/Gui/ccgui.glade:74
msgid "(C) 2009 Red Hat, Inc."
msgstr ""
-#: ccgui.glade:265
+#: src/Gui/ccgui.glade:75
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 "
@@ -80,6 +75,158 @@ msgid ""
"this program. If not, see <http://www.gnu.org/licenses/>."
msgstr ""
-#: ccgui.glade:479
+#: src/Gui/ccgui.glade:106
+msgid "Automatic Bug Reporting Tool"
+msgstr ""
+
+#: src/Gui/ccgui.glade:118
+msgid "_File"
+msgstr "_Soubor"
+
+#: src/Gui/ccgui.glade:138
+msgid "_Edit"
+msgstr "_Upravit"
+
+#: src/Gui/ccgui.glade:158
+msgid "_Help"
+msgstr "_Pomoc"
+
+#: src/Gui/ccgui.glade:188
+msgid "Delete"
+msgstr "Smazat"
+
+#: src/Gui/ccgui.glade:200 src/Gui/report.glade:7 src/Gui/report.glade:24
+msgid "Report"
+msgstr "Reportovat"
+
+#: src/Gui/ccgui.glade:247
+msgid "<span color=\"white\">Description</span>"
+msgstr "<span color=\"white\">Popis balíčku</span>"
+
+#: src/Gui/ccgui.glade:289 src/Gui/CCMainWindow.py:214
msgid "<b>Not reported!</b>"
-msgstr "<b>Nereportováno!</b>"
+msgstr "<b>Nereportováno</b>"
+
+#: src/Gui/CCMainWindow.py:86
+msgid "Package"
+msgstr "Balíček"
+
+#: src/Gui/CCMainWindow.py:87
+msgid "Application"
+msgstr "Aplikace"
+
+#: src/Gui/CCMainWindow.py:88
+msgid "Date"
+msgstr "Datum"
+
+#: src/Gui/CCMainWindow.py:89
+msgid "Crash Rate"
+msgstr "Počet incidentů"
+
+#: src/Gui/CCMainWindow.py:91
+msgid "User"
+msgstr "Uživatel"
+
+#: src/Gui/CCMainWindow.py:156
+#, python-format
+msgid ""
+"Unable to get report!\n"
+"%s"
+msgstr ""
+"Nepodařilo se ziskat report\n"
+"%s"
+
+#: src/Gui/CCMainWindow.py:173
+#, python-format
+msgid ""
+"Error while loading the dumplist, please check if abrt daemon is running\n"
+" %s"
+msgstr ""
+
+#: src/Gui/CCMainWindow.py:206
+msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n"
+msgstr "<b>Tento pád již byl reportován, záznam můžete nalézt na:</b>\n"
+
+#: src/Gui/CCMainWindow.py:266
+msgid ""
+"Unable to get report!\n"
+"Debuginfo is missing?"
+msgstr ""
+
+#: src/Gui/CCMainWindow.py:278
+#, python-format
+msgid ""
+"Reporting failed!\n"
+"%s"
+msgstr ""
+"Vytváření reportu se nezdařilo\n"
+"%s"
+
+#: src/Gui/CCMainWindow.py:306
+#, python-format
+msgid "Error getting the report: %s"
+msgstr ""
+
+#: src/Gui/CCReporterDialog.py:103
+msgid "Brief description how to reproduce this or what you did..."
+msgstr "Zde stručně popište, jak došlo k pádu..."
+
+#: src/Gui/PluginSettingsUI.py:17
+msgid "Can't find PluginDialog widget in UI description!"
+msgstr "Widget PluginDialog nenalezen!"
+
+#: 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:64
+msgid "Comment"
+msgstr "Komentář"
+
+#: src/Gui/report.glade:103
+msgid "gtk-cancel"
+msgstr ""
+
+#: src/Gui/report.glade:118
+msgid "Send"
+msgstr "Poslat"
+
+#: src/Gui/SettingsDialog.py:22
+msgid "Can't load gui description for SettingsDialog!"
+msgstr ""
+
+#: src/Gui/SettingsDialog.py:33
+msgid "Name"
+msgstr "Jméno"
+
+#: src/Gui/SettingsDialog.py:47
+msgid "Enabled"
+msgstr "Aktivní"
+
+#: src/Gui/SettingsDialog.py:106
+#, python-format
+msgid ""
+"Error while opening plugin settings UI: \n"
+"\n"
+"%s"
+msgstr ""
+
+#: src/Gui/SettingsDialog.py:116
+#, python-format
+msgid ""
+"Can't save plugin settings:\n"
+" %s"
+msgstr ""
+
+#: src/Gui/SettingsDialog.py:122
+msgid "unknown response from settings dialog"
+msgstr ""
diff --git a/src/Gui/ABRTExceptions.py b/src/Gui/ABRTExceptions.py
index 5f759dd2..9b1aa32c 100644
--- a/src/Gui/ABRTExceptions.py
+++ b/src/Gui/ABRTExceptions.py
@@ -1,6 +1,14 @@
+from abrt_utils import _
class IsRunning(Exception):
def __init__(self):
- self.what = "Another client is already running, trying to wake it."
+ self.what = _("Another client is already running, trying to wake it.")
+ def __str__(self):
+ return self.what
+
+class WrongData(Exception):
+ def __init__(self):
+ self.what = _("Got unexpected data from daemon (is the database properly updated?).")
+
def __str__(self):
return self.what
diff --git a/src/Gui/CCDBusBackend.py b/src/Gui/CCDBusBackend.py
index 42b4d59a..5af5c540 100644
--- a/src/Gui/CCDBusBackend.py
+++ b/src/Gui/CCDBusBackend.py
@@ -6,6 +6,7 @@ from dbus.mainloop.glib import DBusGMainLoop
import gtk
from dbus.exceptions import *
import ABRTExceptions
+from abrt_utils import _
CC_NAME = 'com.redhat.abrt'
CC_IFACE = 'com.redhat.abrt'
@@ -131,11 +132,11 @@ class DBusManager(gobject.GObject):
self.bus.add_signal_receiver(self.owner_changed_cb,"NameOwnerChanged", dbus_interface="org.freedesktop.DBus")
self.uniq_name = self.bus.get_unique_name()
if not self.bus:
- raise Exception("Can't connect to dbus")
+ raise Exception(_("Can't connect to dbus"))
if self.bus.name_has_owner(CC_NAME):
self.proxy = self.bus.get_object(CC_IFACE, CC_PATH)
else:
- raise Exception("Please check if abrt daemon is running.")
+ raise Exception(_("Please check if abrt daemon is running."))
if self.proxy:
self.cc = dbus.Interface(self.proxy, dbus_interface=CC_IFACE)
@@ -153,7 +154,7 @@ class DBusManager(gobject.GObject):
# watch for job-done signals
self.acconnection = self.proxy.connect_to_signal("JobDone",self.jobdone_cb,dbus_interface=CC_IFACE)
else:
- raise Exception("Please check if abrt daemon is running.")
+ raise Exception(_("Please check if abrt daemon is running."))
def addJob(self, job_id):
pass
@@ -165,7 +166,7 @@ class DBusManager(gobject.GObject):
if dump:
self.emit("analyze-complete", dump)
else:
- self.emit("abrt-error","Daemon did't return valid report info\nDebuginfo is missing?")
+ self.emit("abrt-error",_("Daemon did't return valid report info\nDebuginfo is missing?"))
def report_done(self, result):
self.emit("report-done", result)
@@ -182,7 +183,7 @@ class DBusManager(gobject.GObject):
def Report(self,report):
# map < Plguin_name vec <status, message> >
self.cc.Report(report, reply_handler=self.report_done, error_handler=self.error_handler_cb, timeout=60)
-
+
def DeleteDebugDump(self,UUID):
return self.cc.DeleteDebugDump(UUID)
diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py
index d36eb734..d1eaff73 100644
--- a/src/Gui/CCMainWindow.py
+++ b/src/Gui/CCMainWindow.py
@@ -13,8 +13,8 @@ from CCDumpList import getDumpList, DumpList
from CCReporterDialog import ReporterDialog
from SettingsDialog import SettingsDialog
from CCReport import Report
-from exception import installExceptionHandler, handleMyException
import ABRTExceptions
+from abrt_utils import _
try:
import rpm
@@ -22,22 +22,6 @@ except Exception, ex:
rpm = None
-PROGNAME = "abrt"
-import locale
-try:
- locale.setlocale (locale.LC_ALL, "")
-except locale.Error, e:
- import os
- os.environ['LC_ALL'] = 'C'
- locale.setlocale (locale.LC_ALL, "")
-import gettext
-gettext.bind_textdomain_codeset(PROGNAME,locale.nl_langinfo(locale.CODESET))
-gettext.bindtextdomain(PROGNAME, '/usr/share/locale')
-gettext.textdomain(PROGNAME)
-_ = lambda x: gettext.lgettext(x)
-
-#installExceptionHandler("abrt-gui", "0.0.7")
-
class MainWindow():
ccdaemon = None
def __init__(self):
@@ -99,12 +83,12 @@ class MainWindow():
icon_column.set_attributes(icon_column.cell, pixbuf=(n-1), cell_background_set=5)
# ===============================================
columns = [None]*4
- columns[0] = gtk.TreeViewColumn('Package')
- columns[1] = gtk.TreeViewColumn('Application')
- columns[2] = gtk.TreeViewColumn('Date')
- columns[3] = gtk.TreeViewColumn('Crash Rate')
+ columns[0] = gtk.TreeViewColumn(_("Package"))
+ columns[1] = gtk.TreeViewColumn(_("Application"))
+ columns[2] = gtk.TreeViewColumn(_("Date"))
+ columns[3] = gtk.TreeViewColumn(_("Crash Rate"))
if os.getuid() == 0:
- column = gtk.TreeViewColumn('User')
+ column = gtk.TreeViewColumn(_("User"))
columns.append(column)
# create list
for column in columns:
@@ -169,7 +153,7 @@ class MainWindow():
self.pBarWindow.hide()
except Exception, e:
pass
- gui_error_message("Unable to get report!\n%s" % message,parent_dialog=self.window)
+ gui_error_message(_("Unable to get report!\n%s" % message),parent_dialog=self.window)
def update_cb(self, daemon, message):
message = message.replace('\n',' ')
@@ -186,7 +170,7 @@ class MainWindow():
try:
dumplist = getDumpList(self.ccdaemon, refresh=True)
except Exception, e:
- gui_error_message("Error while loading the dumplist, please check if abrt daemon is running\n %s" % e)
+ gui_error_message(_("Error while loading the dumplist, please check if abrt daemon is running\n %s" % e))
for entry in dumplist:
try:
icon = get_icon_for_package(self.theme, entry.getPackageName())
@@ -219,7 +203,7 @@ class MainWindow():
dump = dumpsListStore.get_value(dumpsListStore.get_iter(path[0]), dumpsListStore.get_n_columns()-1)
#move this to Dump class
if dump.isReported():
- report_label = "<b>This crash has been reported, you can find the report(s) at:</b>\n"
+ report_label = _("<b>This crash has been reported, you can find the report(s) at:</b>\n")
for message in dump.getMessage().split('\n'):
if message:
if "http" in message or "file:///" in message:
@@ -227,7 +211,7 @@ class MainWindow():
report_label += "%s\n" % message
self.wTree.get_widget("lReported").set_markup(report_label)
else:
- self.wTree.get_widget("lReported").set_markup("<b>Not reported!</b>")
+ self.wTree.get_widget("lReported").set_markup(_("<b>Not reported!</b>"))
lPackage = self.wTree.get_widget("lPackage")
self.wTree.get_widget("lDescription").set_label(dump.getDescription())
@@ -279,7 +263,7 @@ class MainWindow():
# except Exception, e:
# print e
if not report:
- gui_error_message("Unable to get report!\nDebuginfo is missing?")
+ gui_error_message(_("Unable to get report!\nDebuginfo is missing?"))
return
report_dialog = ReporterDialog(report)
result = report_dialog.run()
@@ -291,7 +275,7 @@ class MainWindow():
self.ccdaemon.Report(result)
#self.hydrate()
except Exception, e:
- gui_error_message("Reporting failed!\n%s" % e)
+ gui_error_message(_("Reporting failed!\n%s" % e))
#ret = gui_question_dialog("GUI: Analyze for package %s crash with UUID %s is complete" % (entry.Package, UUID),self.window)
#if ret == gtk.RESPONSE_YES:
# self.hydrate()
@@ -319,7 +303,7 @@ class MainWindow():
if self.timer:
gobject.source_remove(self.timer)
self.pBarWindow.hide()
- gui_error_message("Error getting the report: %s" % e)
+ gui_error_message(_("Error getting the report: %s" % e))
return
def sw_delete_event_cb(self, widget, event, data=None):
diff --git a/src/Gui/CCReporterDialog.py b/src/Gui/CCReporterDialog.py
index b83ac61c..bae5cf72 100644
--- a/src/Gui/CCReporterDialog.py
+++ b/src/Gui/CCReporterDialog.py
@@ -9,6 +9,7 @@ from CC_gui_functions import *
from CCReport import Report
import CellRenderers
#from CCDumpList import getDumpList, DumpList
+from abrt_utils import _
# FIXME - create method or smth that returns type|editable|content
TYPE = 0
@@ -99,7 +100,7 @@ class ReporterDialog():
for item in self.report:
if item == "Comment":
buff = gtk.TextBuffer()
- buff.set_text("Brief description how to reproduce this or what you did...")
+ buff.set_text(_("Brief description how to reproduce this or what you did..."))
self.tvComment.set_buffer(buff)
continue
if self.report[item][TYPE] != 's':
diff --git a/src/Gui/Makefile.am b/src/Gui/Makefile.am
index fd48c7f2..6435c1f0 100644
--- a/src/Gui/Makefile.am
+++ b/src/Gui/Makefile.am
@@ -3,8 +3,8 @@
bin_SCRIPTS = abrt-gui
PYTHON_FILES = CCDBusBackend.py CCDumpList.py CCDump.py CC_gui_functions.py \
- CCReporterDialog.py CCReport.py \
- CCMainWindow.py exception.py CellRenderers.py ABRTExceptions.py \
+ CCReporterDialog.py CCReport.py abrt_utils.py \
+ CCMainWindow.py CellRenderers.py ABRTExceptions.py \
SettingsDialog.py ABRTPlugin.py PluginList.py PluginSettingsUI.py
GLADE_FILES = ccgui.glade report.glade settings.GtkBuilder dialogs.GtkBuilder
diff --git a/src/Gui/PluginSettingsUI.py b/src/Gui/PluginSettingsUI.py
index dfcda151..02c03171 100644
--- a/src/Gui/PluginSettingsUI.py
+++ b/src/Gui/PluginSettingsUI.py
@@ -1,5 +1,5 @@
import gtk
-
+from abrt_utils import _
class PluginSettingsUI(gtk.Dialog):
def __init__(self, pluginfo):
#print "Init PluginSettingsUI"
@@ -14,11 +14,11 @@ class PluginSettingsUI(gtk.Dialog):
self.plugin_gui.add_from_file(pluginfo.getGUI())
self.dialog = self.plugin_gui.get_object("PluginDialog")
if not self.dialog:
- raise Exception("Can't find PluginDialog widget in UI description!")
+ raise Exception(_("Can't find PluginDialog widget in UI description!"))
self.dialog.set_title("%s" % pluginfo.getName())
else:
# we shouldn't get here, but just to be safe
- no_ui_label = gtk.Label("No UI for plugin %s" % pluginfo)
+ no_ui_label = gtk.Label(_("No UI for plugin %s" % pluginfo))
self.add(no_ui_label)
no_ui_label.show()
@@ -35,7 +35,7 @@ class PluginSettingsUI(gtk.Dialog):
elif type(widget) == gtk.CheckButton:
widget.set_active(value == "yes")
elif type(widget) == gtk.ComboBox:
- print "combo box is not implemented"
+ print _("combo box is not implemented")
else:
#print "Plugin %s has no configuration." % self.plugin_name
pass
@@ -44,7 +44,7 @@ class PluginSettingsUI(gtk.Dialog):
pass
else:
- print "Nothing to hydrate!"
+ print _("Nothing to hydrate!")
def dehydrate(self):
#print "dehydrating %s" % self.pluginfo.getName()
@@ -61,7 +61,7 @@ class PluginSettingsUI(gtk.Dialog):
else:
self.Settings[key] = "no"
elif type(widget) == gtk.ComboBox:
- print "combo box is not implemented"
+ print _("combo box is not implemented")
def destroy(self):
self.dialog.destroy()
diff --git a/src/Gui/SettingsDialog.py b/src/Gui/SettingsDialog.py
index a16a776b..33a89234 100644
--- a/src/Gui/SettingsDialog.py
+++ b/src/Gui/SettingsDialog.py
@@ -4,6 +4,7 @@ from PluginList import getPluginInfoList, PluginInfoList
from CC_gui_functions import *
from PluginSettingsUI import PluginSettingsUI
from ABRTPlugin import PluginSettings
+from abrt_utils import _
class SettingsDialog:
def __init__(self, parent, daemon):
@@ -18,7 +19,7 @@ class SettingsDialog:
print e
self.window = self.builder.get_object("wSettings")
if not self.window:
- raise Exception("Can't load gui description for SettingsDialog!")
+ raise Exception(_("Can't load gui description for SettingsDialog!"))
#self.window.set_parent(parent)
self.pluginlist = self.builder.get_object("tvSettings")
@@ -29,7 +30,7 @@ class SettingsDialog:
self.pluginlist.set_model(self.modelfilter)
# ===============================================
columns = [None]*1
- columns[0] = gtk.TreeViewColumn('Name')
+ columns[0] = gtk.TreeViewColumn(_("Name"))
# create list
for column in columns:
@@ -43,7 +44,7 @@ class SettingsDialog:
toggle_renderer = gtk.CellRendererToggle()
toggle_renderer.set_property('activatable', True)
toggle_renderer.connect( 'toggled', self.on_enabled_toggled, self.pluginsListStore )
- column = gtk.TreeViewColumn('Enabled', toggle_renderer)
+ column = gtk.TreeViewColumn(_('Enabled'), toggle_renderer)
column.add_attribute( toggle_renderer, "active", 1)
self.pluginlist.insert_column(column, 0)
@@ -102,7 +103,7 @@ class SettingsDialog:
try:
ui = PluginSettingsUI(pluginfo)
except Exception, e:
- gui_error_message("Error while opening plugin settings UI: \n\n%s" % e)
+ gui_error_message(_("Error while opening plugin settings UI: \n\n%s" % e))
return
ui.hydrate()
response = ui.run()
@@ -112,13 +113,13 @@ class SettingsDialog:
try:
self.ccdaemon.setPluginSettings(pluginfo.getName(), pluginfo.Settings)
except Exception, e:
- gui_error_message("Can't save plugin settings:\n %s", 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"
+ print _("unknown response from settings dialog")
ui.destroy()
def on_bClose_clicked(self, button):
diff --git a/src/Gui/ccgui.glade b/src/Gui/ccgui.glade
index 80655ff5..7b8dd244 100644
--- a/src/Gui/ccgui.glade
+++ b/src/Gui/ccgui.glade
@@ -2,196 +2,6 @@
<glade-interface>
<!-- interface-requires gtk+ 2.14 -->
<!-- interface-naming-policy toplevel-contextual -->
- <widget class="GtkWindow" id="main_window2">
- <property name="title" translatable="yes">Automatic Bug Reporting Tool</property>
- <property name="window_position">center</property>
- <child>
- <widget class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <child>
- <widget class="GtkMenuBar" id="menubar2">
- <property name="visible">True</property>
- <child>
- <widget class="GtkMenuItem" id="menuitem5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_File</property>
- <property name="use_underline">True</property>
- <child>
- <widget class="GtkMenu" id="menu4">
- <property name="visible">True</property>
- <child>
- <widget class="GtkImageMenuItem" id="miQuit">
- <property name="label">gtk-quit</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkMenuItem" id="edit">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Edit</property>
- <property name="use_underline">True</property>
- <child>
- <widget class="GtkMenu" id="menu1">
- <property name="visible">True</property>
- <child>
- <widget class="GtkImageMenuItem" id="miPreferences">
- <property name="label">gtk-preferences</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkMenuItem" id="menuitem8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Help</property>
- <property name="use_underline">True</property>
- <child>
- <widget class="GtkMenu" id="menu6">
- <property name="visible">True</property>
- <child>
- <widget class="GtkImageMenuItem" id="miAbout">
- <property name="label">gtk-about</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkToolbar" id="toolbar1">
- <property name="visible">True</property>
- <child>
- <widget class="GtkToolButton" id="bDelete">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="label" translatable="yes">Delete</property>
- <property name="stock_id">gtk-delete</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <widget class="GtkToolButton" id="bReport">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="label" translatable="yes">Report</property>
- <property name="stock_id">gtk-save</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <widget class="GtkSeparatorToolItem" id="toolbutton1">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkScrolledWindow" id="swDumps">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <child>
- <widget class="GtkTreeView" id="tvDumps">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEventBox" id="evDescription">
- <property name="visible">True</property>
- <child>
- <widget class="GtkLabel" id="Description">
- <property name="visible">True</property>
- <property name="xalign">0.05000000074505806</property>
- <property name="label" translatable="yes">&lt;span color="white"&gt;Description&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkScrolledWindow" id="swDesscription">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <child>
- <widget class="GtkViewport" id="vDescription">
- <property name="visible">True</property>
- <property name="resize_mode">queue</property>
- <child>
- <widget class="GtkLabel" id="lDescription">
- <property name="visible">True</property>
- <property name="xalign">0.10000000149011612</property>
- <property name="yalign">0.20000000298023224</property>
- <property name="justify">fill</property>
- <property name="selectable">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <widget class="GtkStatusbar" id="statusbar1">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">5</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
<widget class="GtkWindow" id="pBarWindow">
<property name="title" translatable="yes">Please wait..</property>
<property name="modal">True</property>