sushi-1.4.0+dfsg/0000775000175000017500000000000011764657724013445 5ustar dfilonidfilonisushi-1.4.0+dfsg/chirashi/0000775000175000017500000000000011704540066015217 5ustar dfilonidfilonisushi-1.4.0+dfsg/chirashi/np.py0000664000175000017500000001062411700414355016206 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ from gettext import gettext as _ import sushi plugin_info = ( _("Writes the current playing song to the channel after typing /np"), "1.0", "Marian Tietz" ) plugin_options = ( ("mpd_host", _("MPD host"), sushi.TYPE_STRING, "localhost"), ("mpd_port", _("MPD port"), sushi.TYPE_NUMBER, 6600), ("mpd_password", _("MPD password"), sushi.TYPE_PASSWORD, ""), ("player", _("Player"), sushi.TYPE_CHOICE, (("MPD","mpd"), ("Banshee","banshee"), ("Decibel Audio Player", "decibel"), ("Audacious", "audacious"))) ) class np (sushi.Plugin): def __init__(self): sushi.Plugin.__init__(self, "np") self.add_command("np", self.np_command) def unload(self): self.remove_command("np") def np_command(self, server, target, args): player = self.get_config("player") if player == "mpd": try: import mpd client = mpd.MPDClient() mpd_host = self.get_config("mpd_host") or "localhost" mpd_port = self.get_config("mpd_port") or 6600 mpd_port = int(mpd_port) mpd_password = self.get_config("mpd_password") or "" client.connect(mpd_host, mpd_port) if mpd_password: client.password(mpd_password) data = {"artist":"N/A","title":"N/A","album":"N/A"} data.update(client.currentsong()) fstring = "np: %(artist)s – %(title)s" % data self.get_bus().message( server, target, fstring) client.disconnect() except BaseException as e: self.display_error(str(e)) elif player == "banshee": try: import dbus bus = dbus.SessionBus( mainloop = dbus.mainloop.glib.DBusGMainLoop()) proxy = bus.get_object("org.bansheeproject.Banshee", "/org/bansheeproject/Banshee/PlayerEngine") banshee = dbus.Interface(proxy, "org.bansheeproject.Banshee.PlayerEngine") curTrack = banshee.GetCurrentTrack() artist = unicode(curTrack["artist"]) title = unicode(curTrack["name"]) nowPlaying = "np: %(artist)s – %(title)s" % { "artist": artist, "title": title } self.get_bus().message(server, target, nowPlaying) except Exception as e: self.display_error(str(e)) elif player == "decibel": try: import os from xdg.BaseDirectory import xdg_config_home f = open(os.path.join( xdg_config_home, "decibel-audio-player", "now-playing.txt")) s = f.read().replace("\n", " ") f.close() self.get_bus().message( server, target, "np: %s" % (s)) except BaseException as e: self.display_error(str(e)) elif player == "audacious": import dbus bus = dbus.SessionBus( mainloop=dbus.mainloop.glib.DBusGMainLoop()) proxy = bus.get_object("org.atheme.audacious", "/org/atheme/audacious") mdata = {} if proxy.Status() == "playing": pos = proxy.Position() # in Playlist artist = proxy.SongTuple(pos, "artist") if artist: mdata["artist"] = artist title = proxy.SongTuple(pos, "title") if title: mdata["title"] = title data = {"artist":"N/A","title":"N/A"} data.update(mdata) fstring = "np: %(artist)s – %(title)s" % (data) self.get_bus().message( server, target, fstring) else: self.display_error("No player configured.") sushi-1.4.0+dfsg/chirashi/waf0000777000175000017500000000000011704540066016625 2../wafustar dfilonidfilonisushi-1.4.0+dfsg/chirashi/COPYING0000664000175000017500000000231311700414355016246 0ustar dfilonidfiloniRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. sushi-1.4.0+dfsg/chirashi/.gitignore0000664000175000017500000000007311700414355017204 0ustar dfilonidfiloni# Vim *.swp # Python *.pyc # Waf build .lock-waf* .waf-* sushi-1.4.0+dfsg/chirashi/beep.py0000664000175000017500000000236111700414355016503 0ustar dfilonidfiloni""" beep on highlight """ import sushi import string def do_beep(): """ tries several beep methods for different platforms and frameworks and returns if one method was successful. """ try: import winsound return winsound.Beep(30, 1) except: pass try: import MacOS # not in 64 bit return MacOS.SysBeep() except: pass try: import gtk return gtk.gdk.beep() except: pass try: tty = file("/dev/tty", "w") tty.write(chr(7)) tty.close() return None except: pass plugin_info = ("Let the PC speaker beep on a highlight.", "1.0", "Marian Tietz") plugin_options = () class beep (sushi.Plugin): def __init__(self): sushi.Plugin.__init__(self, "beep") self.get_bus().connect_to_signal("message", self.message_cb) def message_cb(self, time, server, usr, target, text): def has_highlight(text, needle): punctuation = string.punctuation + " \n\t" ln = len(needle) for line in text.split("\n"): line = line.lower() i = line.find(needle) if i >= 0: if (line[i-1:i] in punctuation and line[ln+i:ln+i+1] in punctuation): return True return False nick = self.get_nick(server).lower() target = target.lower() if nick == target or has_highlight(text, nick): do_beep() sushi-1.4.0+dfsg/chirashi/wscript0000664000175000017500000000033611700414355016634 0ustar dfilonidfiloni#!/usr/bin/env python APPNAME = 'chirashi' VERSION = '1.4.0' top = '.' out = 'build' def configure (ctx): ctx.load('gnu_dirs') def build (ctx): ctx.install_files('${DATAROOTDIR}/chirashi', ctx.path.ant_glob('*.py')) sushi-1.4.0+dfsg/chirashi/away.py0000664000175000017500000000375611700414355016542 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Michael Kuhn All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import sushi import dbus plugin_info = ( "Sets auto-away.", "1.0", "Michael Kuhn" ) class away (sushi.Plugin): def __init__ (self): sushi.Plugin.__init__(self, "away") bus = dbus.SessionBus(mainloop=dbus.mainloop.glib.DBusGMainLoop()) if not bus: return try: self.handler = bus.add_signal_receiver( self.status_changed_cb, "StatusChanged", "org.gnome.SessionManager.Presence" ) except: self.handler = None def unload (self): if self.handler: self.handler.remove() def status_changed_cb (self, status): servers = self.get_bus().servers() for server in servers: if status == 3: self.get_bus().away(server, "Auto-away") else: self.get_bus().back(server) sushi-1.4.0+dfsg/tools/0000775000175000017500000000000011704537723014573 5ustar dfilonidfilonisushi-1.4.0+dfsg/tools/version.sh0000775000175000017500000000323611704537723016623 0ustar dfilonidfiloni#!/bin/sh # Copyright (c) 2008-2010 Michael Kuhn # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. set -e bump_version () { file="$1" version="$2" sed -i "/^VERSION = /s/^.*$/VERSION = '${version}'/" "${file}" git add "${file}" git commit -e -m "Bump version to ${version}." } usage () { echo "Usage: ${0##*/} file version" exit 1 } test -z "$1" && usage test -z "$2" && usage file="$1" version="$2" bump_version "${file}" "${version}" sushi-1.4.0+dfsg/tools/release.sh0000775000175000017500000000625311704537723016560 0ustar dfilonidfiloni#!/bin/sh # Copyright (c) 2008-2010 Michael Kuhn # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. set -e usage () { echo "Usage: ${0##*/} [branch] release" exit 1 } tag_release () { tag="$1" if echo "${tag}" | grep '^[0-9]\+\.[0-9]\+\.[0-9]\+$' > /dev/null then git tag "${tag}" fi } test $# -lt 1 && usage if [ ! -f ./tools/release.sh ] then echo 'Not in top-level directory.' exit 1 fi if [ $# -lt 2 ] then branch='master' release="$1" else branch="$1" release="$2" fi sushi_release="sushi-${release}" rm -f "${sushi_release}.tar" "${sushi_release}.tar.xz" "${sushi_release}.tar.bz2" "${sushi_release}.tar.gz" rm -f "${sushi_release}+dfsg.tar" "${sushi_release}+dfsg.tar.xz" "${sushi_release}+dfsg.tar.bz2" "${sushi_release}+dfsg.tar.gz" rm -fr "${sushi_release}" git checkout "${branch}" tag_release "${release}" git archive --prefix="${sushi_release}/" "${branch}" | tar xf - for component in maki tekka nigiri chirashi do ( cd "${component}" git checkout "${branch}" tag_release "${release}" git archive --prefix="${sushi_release}/${component}/" "${branch}" | tar xCf .. - git checkout master ) done git checkout master # Deduplicate Waf for component in maki tekka nigiri chirashi do ( cd "${sushi_release}/${component}" rm -f waf ln -s ../waf ) done tar cf "${sushi_release}.tar" "${sushi_release}" xz -k "${sushi_release}.tar" bzip2 -k "${sushi_release}.tar" gzip "${sushi_release}.tar" ### Debian rm -fr "${sushi_release}/maki/documentation/irc" # Unpack Waf (http://wiki.debian.org/UnpackWaf) ( cd "${sushi_release}" ./waf --help > /dev/null mv .waf-*/waflib waflib rmdir .waf-* find waflib -name '*.pyc' -delete sed -i '/^#==>$/,$d' waf ) # Link waflib for component in maki tekka nigiri chirashi do ( cd "${sushi_release}/${component}" ln -s ../waflib ) done tar cf "${sushi_release}+dfsg.tar" "${sushi_release}" xz -k "${sushi_release}+dfsg.tar" bzip2 -k "${sushi_release}+dfsg.tar" gzip "${sushi_release}+dfsg.tar" sushi-1.4.0+dfsg/tekka/0000775000175000017500000000000011704540066014524 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/glade_widgets.py0000664000175000017500000000075611700417156017707 0ustar dfilonidfiloni from tekka.lib.spell_entry import SpellEntry from tekka.lib.search_toolbar import SearchBar from tekka.lib.output_shell import OutputShell from tekka.lib.output_window import OutputWindow from tekka.lib.htmlbuffer import HTMLBuffer from tekka.lib.general_output_buffer import GOHTMLBuffer from tekka.lib.expanding_list import ExpandingList from tekka.lib.contrast_color_table import ContrastColorTable from tekka.lib.custom_color_button import CustomColorButton print "TEKKA WIDGETS LOADED." sushi-1.4.0+dfsg/tekka/tools/0000775000175000017500000000000011700417156015663 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tools/test_welcomewindow.py0000664000175000017500000000303311700417156022156 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import config from lib.welcome_window import WelcomeWindow if __name__ == "__main__": config.setup() w = gtk.Window() w.set_default_size(600,400) w.connect("destroy", lambda w: gtk.main_quit()) ww = WelcomeWindow() w.add(ww) w.show_all() gtk.main() sushi-1.4.0+dfsg/tekka/tools/install-mo.sh0000775000175000017500000000315011700417156020300 0ustar dfilonidfiloni#!/bin/sh # Copyright (c) 2008-2009 Michael Kuhn # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. test -z "${INSTALL}" && exit 1 test -z "${1}" && exit 1 test -z "${2}" && exit 1 test -z "${3}" && exit 1 prg="${1}" src="${2}" dst="${3}" mo="${src##*/}" lang="${mo%.mo}" "${INSTALL}" -d -m 755 "${dst}/${lang}/LC_MESSAGES/" "${INSTALL}" -m 644 "${src}" "${dst}/${lang}/LC_MESSAGES/${prg}.mo" sushi-1.4.0+dfsg/tekka/tools/little_irc.py0000664000175000017500000000640711700417156020376 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import sys import socket from threading import Thread read_t = None try: s = socket.socket(socket.AF_INET) s.connect(("localhost", 6667)) except BaseException as e: print "Connection failed: %s" % (e) sys.exit(1) def read_loop(s): _stop = False def stop(): _stop = True read_loop.stop = stop last_line = "" while True: if _stop: break try: a = s.recv(4096) except BaseException as e: print "READ ERROR: %s" % (e) break if a == "": print "No data." break i = a.find("PING :") if i>=0 and last_line[-1] == "\n" and (i==0 or a[i-1] == "\n"): j = a.find(" ", i+len("PING :")) pong_str = "PONG :%s" % (a[i+len("PING :"):j]) try: s.send(pong_str + "\r\n") except BaseException as e: print "Error while sending: %s" % (e) break print "SENT PONG: %s" % (pong_str) else: print a last_line = a def main(): read_t = Thread(target = read_loop, args = (s,)) read_t.start() last_input = "" while True: input = raw_input("Send: ") if input == "/quit": break elif input[0:len("/join")] == "/join": split = input.split(" ") input = "JOIN :%s" % (split[1]) elif input[0:len("/init")] == "/init": split = input.split(" ") input = "USER %s 0 0 0\r\nNICK %s" % (split[1], split[1]) print "ASDASD = %s" % (split[1]) elif input[0:len("/long")] == "/long": from random import randint split = input.split(" ") sam = ["lorem","ipsum","foo","bar","baz"] pre = "PRIVMSG %s :" % (split[1]) for i in range(int(split[2])): pre += sam[randint(0, len(sam)-1)]+" " input = pre elif input[0] == ".": split = input.split(" ") input = "PRIVMSG %s :%s" % (split[0][1:], " ".join(split[1:])) elif input == "=": input = last_input if input: try: s.send(input+"\r\n") except BaseException as e: print "Error while sending: %s" % (e) break last_input = input read_loop.stop() try: main() except BaseException as e: print "Error: %s" % (e) try: read_loop.stop() except: pass s.close() sys.exit(1) sushi-1.4.0+dfsg/tekka/tools/irc-link.py0000775000175000017500000000637111700417156017757 0ustar dfilonidfiloni#!/usr/bin/env python # coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import sys import re """ irc://[:]/[<((#|&|+)channel>|nick)>[,(isnick|needkey)] """ pattern = re.compile(r"irc://([\w.:]*)/(.*)") def prompt_for_key(): """ prompt the user for the needed channel key """ print "UH CHANNEL KEY PL=X: " def nick_connect(server, port, nickinfo): """ nickinfo can be the nick name or the usermask """ print "Connect to server %s:%s and talk to %s" % (server, port, nickinfo) pass def server_connect(server, port): """ server == "default" means default server, port == "default" means default port """ print "Connect to server %s:%s" % (server, port) pass def channel_connect(server, port, channel, key): """ key can be "" """ print "Connect to server %s:%s and join %s (key='%s')" % ( server, port, channel, key) pass if __name__ == "__main__": if len(sys.argv) != 2: sys.exit(1) input = sys.argv[1] match = pattern.match(input) if not match: print "No valid IRC URL." sys.exit(1) address, target = match.groups() address_split = address.split(":") if len(address_split) == 2: server, port = address_split elif len(address_split) == 1 and address_split[0]: server = address_split[0] port = "6667" else: server = "default" port = "default" target_split = target.split(",") if len(target_split) == 2: target_name, appendix = target_split elif len(target_split) == 1: target_name = target_split[0] appendix = "" else: print "Unknown target format." sys.exit(1) if target_name and target_name[0] in ("#","&","+"): # target is a channel key = "" if appendix == "isnick": print "Channel prefix and nick identifier. Abort." sys.exit(1) elif appendix == "needkey": prompt_for_key() else: if appendix: key = appendix channel_connect(server, port, target_name, key) elif target_name: if appendix != "isnick": print "No isnick flag set. Invalid syntax." sys.exit(1) nick_connect(server, port, target_name) else: server_connect(server, port) sushi-1.4.0+dfsg/tekka/tools/search_print.sh0000775000175000017500000000015711700417156020706 0ustar dfilonidfiloni#!/bin/sh egrep --exclude=config.py --exclude-dir=.git --exclude-dir=tools -Ir "([ ]+|^)print " . --color=auto sushi-1.4.0+dfsg/tekka/tools/compile.py0000664000175000017500000000264111700417156017670 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import compileall import sys if len(sys.argv) == 1: print >> sys.stderr, "Usage: %s " % (sys.argv[0]) else: compileall.compile_dir(sys.argv[1]) sushi-1.4.0+dfsg/tekka/tekka.desktop.in0000664000175000017500000000026711700417156017627 0ustar dfilonidfiloni[Desktop Entry] Name=tekka IRC Client GenericName=IRC Client Comment=Chat on IRC Exec=@BINDIR@/tekka Icon=tekka StartupNotify=true Terminal=false Type=Application Categories=Network; sushi-1.4.0+dfsg/tekka/tekka/0000775000175000017500000000000011700417156015622 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/__init__.py0000664000175000017500000000241111700417156017731 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ sushi-1.4.0+dfsg/tekka/tekka/menus/0000775000175000017500000000000011700417156016751 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/menus/__init__.py0000664000175000017500000000246711700417156021073 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ __all__ = ["servertree_menu","nicklist_menu"] sushi-1.4.0+dfsg/tekka/tekka/menus/nicklist_menu.py0000664000175000017500000001631511700417156022175 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ from .. import config from .. import gui from ..com import sushi, NoSushiError from ..helper.singleton import SingletonMeta def get_ident(serverTab, nick): """ retrieve the ident string of a given nick """ from_str = sushi.user_from(serverTab.name, nick) try: (names, host) = from_str.split("@") (nick, ident) = names.split("!") except ValueError: return None return ident class NickListMenu(object): __metaclass__ = SingletonMeta def __init__(self): self.menu = None self.widgets = gui.builder.load_menu("nickListMenu") self.deactivate_handler = [] if not self.widgets: gui.mgmt.show_inline_message( _("Widget creation failed."), _("tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. " "Check if you have appropriate permissions to " "access all files needed by tekka and restart tekka."), dtype="error") return sigdic = { "nickListMenu_deactivate_cb" : self.deactivate_cb, "ignoreItem_toggled_cb" : self.ignoreItem_toggled_cb, "kickItem_activate_cb" : self.kickItem_activate_cb, "banItem_activate_cb" : self.banItem_activate_cb, "whoisItem_activate_cb" : self.whoisItem_activate_cb, "sendFileItem_activate_cb" : self.sendFileItem_activate_cb, # modes "deVoiceItem_activate_cb" : self.deVoiceItem_activate_cb, "voiceItem_activate_cb" : self.voiceItem_activate_cb, "deHalfOpItem_activate_cb" : self.deHalfOpItem_activate_cb, "halfOpItem_activate_cb" : self.halfOpItem_activate_cb, "deOpItem_activate_cb" : self.deOpItem_activate_cb, "opItem_activate_cb" : self.opItem_activate_cb } self.widgets.connect_signals(sigdic) self.menu = self.widgets.get_object("nickListMenu") def get_menu(self, currentNick): """ return the menu customized menu, fit to the needs of pointedTab """ if not self.menu or not currentNick: return None self.current_nick = currentNick headerItem = gtk.MenuItem(label=currentNick, use_underline=False) self.menu.insert(headerItem, 0) headerItem.show() serverTab = gui.tabs.get_current_tabs()[0] ident = get_ident(serverTab, currentNick) if ident and ident in sushi.ignores(serverTab.name): self.widgets.get_object("ignoreItem").set_active(True) if sushi.remote: self.widgets.get_object("sendFileItem").set_sensitive(False) self.deactivate_handler.append( (lambda menu,header: menu.remove(header), headerItem)) return self.menu def deactivate_cb(self, menu): for handler in self.deactivate_handler: if handler[1:]: handler[0](menu, *handler[1:]) else: handler[0](menu) self.deactivate_handler = [] def ignoreItem_toggled_cb(self, item): serverTab = gui.tabs.get_current_tabs()[0] ident = get_ident(serverTab, self.current_nick) # FIXME: this is a "bug" in maki, ident can be None if not ident: return if item.get_active(): if ident in sushi.ignores(serverTab.name): # nothing new, abort return sushi.ignore(serverTab.name, ident) gui.mgmt.show_inline_message( _("Ignoring User %(user)s") % {"user":self.current_nick}, "", "info") else: sushi.unignore(serverTab.name, ident) gui.mgmt.show_inline_message( _("User %(user)s is unignored") % {"user":self.current_nick}, "", "info") def kickItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.kick(sTab.name, cTab.name, self.current_nick, "") def banItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.mode(sTab.name, cTab.name, "+b %s*!*@*" % (self.current_nick) ) def whoisItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not sTab: return if config.get_bool("tekka", "whois_dialog"): try: gui.dialogs.show_dialog("whois", sTab.name, self.current_nick, need_sushi = True) except NoSushiError as e: gui.mgmt.show_inline_message( _("No connection to maki."), e.args[0], dtype="error") else: sushi.sushi.whois(sTab.name, self.current_nick) def sendFileItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() def dialog_response_cb(dialog, id): if id == gtk.RESPONSE_OK: file = dialog.get_filename() if not file: gui.mgmt.show_error_dialog( title = _("No file selected"), message = _("You didn't select a file to send. Aborting.")) else: sushi.dcc_send(sTab.name, self.current_nick, file) dialog.destroy() d = gtk.FileChooserDialog( title = _("Choose a file to send to %(nick)s" % {"nick": self.current_nick}), buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) d.connect("response", dialog_response_cb) d.show() def deVoiceItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.mode(sTab.name, cTab.name, "-v %s" % (self.current_nick) ) def voiceItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.mode(sTab.name, cTab.name, "+v %s" % (self.current_nick) ) def deHalfOpItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.mode(sTab.name, cTab.name, "-h %s" % (self.current_nick) ) def halfOpItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.mode(sTab.name, cTab.name, "+h %s" % (self.current_nick) ) def deOpItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.mode(sTab.name, cTab.name, "-o %s" % (self.current_nick) ) def opItem_activate_cb(self, item): sTab,cTab = gui.tabs.get_current_tabs() if not cTab or not cTab.is_channel(): return sushi.mode(sTab.name, cTab.name, "+o %s" % (self.current_nick) ) sushi-1.4.0+dfsg/tekka/tekka/menus/mainmenu_context.py0000664000175000017500000002056011700417156022703 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ from gtk import main_quit from gettext import gettext as _ from .. import com from .. import config from .. import gui def ignore_on_welcome(on_welcome_cb=None, on_not_welcome_cb=None): def decorator(fun): def new_fun(*args, **kwargs): if gui.mgmt.is_welcome_screen(): if on_welcome_cb: on_welcome_cb() return if on_not_welcome_cb: on_not_welcome_cb() return fun(*args, **kwargs) return new_fun return decorator def _reset_item(item_name): def cb(): if hasattr(cb, "locked") and cb.locked: return item = gui.widgets.get_object(item_name) cb.locked = True item.set_property("active", not item.get_active()) cb.locked = False return cb class MenuContextType(object): def __init__(self, name = "", widgets = None): if widgets == None: raise ValueError, "%s: widgets is None" % (self, ) self.widgets = widgets self.signals = [] self.menu = widgets.get_object(name) def __getattribute__(self, attr): """ if (attr[0] != "_" and not attr in ("widgets","signals","menu") and not attr in self.signals): return getattr(self.menu, attr) """ try: return super(MenuContextType,self).__getattribute__(attr) except AttributeError: return getattr(self.menu, attr) class MainMenuContext(MenuContextType): class TekkaMenuContext(MenuContextType): """ tekka menu - Connect - Quit """ def __init__(self, *args, **kwargs): MenuContextType.__init__(self, *args, **kwargs) def connect_activate_cb(self, item): """ show up the server dialog or an error message if no connection to maki is given """ def server_dialog_callback(server_list): if server_list: for server in server_list: com.sushi.connect(server) try: gui.dialogs.show_dialog( "server", server_dialog_callback, need_sushi = True) except com.NoSushiError as e: gui.mgmt.show_inline_message( "NoSushiError", e.args[0], dtype="error") def quit_activate_cb(self, item): main_quit() class MakiMenuContext(MenuContextType): """ maki menu - Connect - Disconnect - Shutdown """ def __init__(self, *args, **kwargs): MenuContextType.__init__(self, *args, **kwargs) def connect_activate_cb(self, item): com.connect() def disconnect_activate_cb(self, item): com.disconnect() def shutdown_activate_cb(self, item): if not com.sushi.connected: gui.mgmt.show_maki_connection_error( _("No connection to maki."), _("You can't shutdown maki. You're not connected.")) else: com.sushi.shutdown(config.get( "chatting", "quit_message", "")) class ViewMenuContext(MenuContextType): """ View menu - Show general output - Show side pane - Show status bar - Show status icon - Show topic bar """ def __init__(self, *args, **kwargs): MenuContextType.__init__(self, *args, **kwargs) def apply_visibility_settings(self): """ read config, apply visibilites on widgets """ def apply_visibility(wname, cvalue): button = self.widgets.get_object(wname) if config.get_bool("tekka", cvalue): button.set_active(True) else: button.set_active(False) apply_visibility("view_general_output_item", "show_general_output") apply_visibility("view_side_pane_item", "show_side_pane") apply_visibility("view_status_bar_item", "show_status_bar") apply_visibility("view_status_icon_item", "show_status_icon") apply_visibility("view_topic_bar_item", "show_topic_bar") @ignore_on_welcome( on_welcome_cb=_reset_item("view_general_output_item")) def showGeneralOutput_toggled_cb(self, item): """ toggle visibility of general output """ gui.mgmt.visibility.show_general_output(item.get_active()) config.set("tekka","show_general_output",str(item.get_active())) @ignore_on_welcome(on_welcome_cb=_reset_item("view_side_pane_item")) def showSidePane_toggled_cb(self, item): """ toggle visibility of side pane """ gui.mgmt.visibility.show_side_pane(item.get_active()) config.set("tekka", "show_side_pane", str(item.get_active())) @ignore_on_welcome( on_welcome_cb=_reset_item("view_status_bar_item")) def showStatusBar_toggled_cb(self, item): """ toggle visibility of status bar """ gui.mgmt.visibility.show_status_bar(item.get_active()) config.set("tekka", "show_status_bar", str(item.get_active())) def showStatusIcon_toggled_cb(self, item): """ toggle visibility of status icon """ gui.mgmt.visibility.show_status_icon(item.get_active()) config.set("tekka", "show_status_icon", str(item.get_active())) @ignore_on_welcome(on_welcome_cb=_reset_item("view_topic_bar_item")) def showTopicBar_toggled_cb(self, item): """ toggle visibility of topic bar """ gui.mgmt.visibility.show_topic_bar(item.get_active()) config.set("tekka", "show_topic_bar", str(item.get_active())) class ToolsMenuContext(MenuContextType): """ Tools menu - Channel List - File transfers (DCC) - Plugins - Debug - Preferences """ def __init__(self, *args, **kwargs): MenuContextType.__init__(self, *args, **kwargs) def show_no_sushi_error(self, exp): gui.mgmt.show_inline_message( _("No connection to maki."), exp.args[0], dtype="error") def channelList_activate_cb(self, item): """ Show the channel list dialog or display an error message if there's no connection to maki or no server is active """ sTab,cTab = gui.tabs.get_current_tabs() if not sTab: gui.mgmt.show_inline_message( _("tekka could not determine server."), _("There is no active server. Click on " "a server tab or a child of a server " "tab to activate the server."), dtype="error") else: try: gui.dialogs.show_dialog( "channelList", sTab.name, need_sushi = True) except com.NoSushiError as e: self.show_no_sushi_error(e) def dcc_activate_cb(self, item): """ show file transfers dialog """ try: gui.dialogs.show_dialog("dcc", need_sushi = True) except com.NoSushiError as e: self.show_no_sushi_error(e) def plugins_activate_cb(self, item): gui.dialogs.show_dialog("plugins") def debug_activate_cb(self, item): gui.dialogs.show_dialog("debug") def preferences_activate_cb(self, item): gui.dialogs.show_dialog("preferences") class HelpMenuContext(MenuContextType): """ Help menu - IRC color table - About """ def __init__(self, *args, **kwargs): MenuContextType.__init__(self, *args, **kwargs) def colors_activate_cb(self, item): gui.dialogs.show_dialog("colorTable") def about_activate_cb(self, item): widgets = gui.builder.load_dialog("about") d = widgets.get_object("aboutDialog") d.connect("response", lambda d,i: d.destroy()) d.show_all() def __init__(self, *args, **kwargs): MenuContextType.__init__(self, *args, **kwargs) self.tekka = self.TekkaMenuContext( name="tekka_menu", widgets=self.widgets) self.maki = self.MakiMenuContext( name="maki_menu", widgets=self.widgets) self.view = self.ViewMenuContext( name="view_menu", widgets=self.widgets) self.tools = self.ToolsMenuContext( name="tools_menu", widgets=self.widgets) self.help = self.HelpMenuContext( name="help_menu", widgets=self.widgets) sushi-1.4.0+dfsg/tekka/tekka/menus/servertree_menu.py0000664000175000017500000002105711700417156022542 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ from .. import config from .. import gui from ..com import sushi from ..helper.singleton import SingletonMeta from ..lib import key_dialog from ..lib import topic_dialog class ServerTreeMenu(object): __metaclass__ = SingletonMeta def __init__(self): self.menu = None self.widgets = gui.builder.load_menu("serverTreeMenu") if not self.widgets: gui.mgmt.show_inline_message( _("Widget creation failed."), _("tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. " "Check if you have appropriate permissions to " "access all files needed by tekka and restart tekka."), dtype="error") return sigdic = { "serverTreeMenu_deactivate_cb" : self.deactivate_cb, "connectItem_activate_cb" : self.connectItem_activate_cb, "disconnectItem_activate_cb" : self.disconnectItem_activate_cb, "joinChannelItem_activate_cb" : self.joinChannelItem_activate_cb, "joinItem_activate_cb" : self.joinItem_activate_cb, "partItem_activate_cb" : self.partItem_activate_cb, "closeItem_activate_cb" : self.closeItem_activate_cb, "autoJoinItem_toggled_cb" : self.autoJoinItem_toggled_cb, "autoConnectItem_toggled_cb" : self.autoConnectItem_toggled_cb, "hideItem_activate_cb": self.hideItem_activate_cb, "historyItem_activate_cb" : self.historyItem_activate_cb, "setTopicItem_activate_cb": self.setTopicItem_activate_cb, "setKeyItem_activate_cb" : self.setKeyItem_activate_cb } self.widgets.connect_signals(sigdic) self.menu = self.widgets.get_object("serverTreeMenu") def get_menu(self, pointedTab): """ return the menu customized menu, fit to the needs of pointedTab """ if not self.menu: return None self.current_tab = pointedTab self.headline = gtk.MenuItem(pointedTab.name) self.menu.insert(self.headline,0) self.menu.show_all() connectItem = self.widgets.get_object("connectItem") disconnectItem = self.widgets.get_object("disconnectItem") joinChannelItem = self.widgets.get_object("joinChannelItem") joinItem = self.widgets.get_object("joinItem") partItem = self.widgets.get_object("partItem") autoConnectItem = self.widgets.get_object("autoConnectItem") autoJoinItem = self.widgets.get_object("autoJoinItem") hideItem = self.widgets.get_object("hideItem") historyItem = self.widgets.get_object("historyItem") closeItem = self.widgets.get_object("closeItem") setTopicItem = self.widgets.get_object("setTopicItem") setKeyItem = self.widgets.get_object("setKeyItem") # set up visibilty of menu items for each case if pointedTab.is_server(): joinItem.hide() partItem.hide() setTopicItem.hide() setKeyItem.hide() autoJoinItem.hide() hideItem.hide() historyItem.hide() if sushi.server_get( pointedTab.name, "server", "autoconnect") == "true": autoConnectItem.set_active(True) else: autoConnectItem.set_active(False) if pointedTab.connected: connectItem.hide() else: disconnectItem.hide() elif pointedTab.is_channel(): connectItem.hide() disconnectItem.hide() autoConnectItem.hide() joinChannelItem.hide() if sushi.server_get( pointedTab.server.name, pointedTab.name, "autojoin") == "true": autoJoinItem.set_active(True) else: autoJoinItem.set_active(False) if pointedTab.joined: joinItem.hide() else: partItem.hide() elif pointedTab.is_query(): autoConnectItem.hide() autoJoinItem.hide() setTopicItem.hide() setKeyItem.hide() connectItem.hide() disconnectItem.hide() joinItem.hide() partItem.hide() joinChannelItem.hide() return self.menu def deactivate_cb(self, menu): menu.remove(self.headline) def connectItem_activate_cb(self, item): """ Connect to the server. """ if self.current_tab and self.current_tab.is_server(): sushi.connect(self.current_tab.name) def disconnectItem_activate_cb(self, item): """ quit server with default quit message. """ if self.current_tab and self.current_tab.is_server(): sushi.quit( self.current_tab.name, config.get("chatting", "quit_message", "")) def joinChannelItem_activate_cb(self, item): """ pop up a dialog to ask which channel should be joined """ if self.current_tab and self.current_tab.is_server(): gui.dialogs.show_dialog("join", self.current_tab.name) def joinItem_activate_cb(self, item): """ join channel without key """ if self.current_tab and self.current_tab.is_channel(): sushi.join(self.current_tab.server.name, self.current_tab.name, "") def partItem_activate_cb(self, item): """ part channel with default part message """ if self.current_tab and self.current_tab.is_channel(): sushi.part( self.current_tab.server.name, self.current_tab.name, config.get("chatting", "part_message", "")) def closeItem_activate_cb(self, item): """ close tab. If the tab is a server emit a quit. If the tab is a channel, part the channel before. """ if not self.current_tab: return if self.current_tab.is_channel() and self.current_tab.joined: sushi.part( self.current_tab.server.name, self.current_tab.name, config.get("chatting", "part_message", "")) elif self.current_tab.is_server() and self.current_tab.connected: sushi.quit( self.current_tab.name, config.get("chatting", "quit_message", "")) gui.tabs.remove_tab(self.current_tab) gui.shortcuts.assign_numeric_tab_shortcuts(gui.tabs.get_all_tabs()) def autoJoinItem_toggled_cb(self, item): """ set the auto join state of the tab to the state of the menu item. (for channels) """ if not self.current_tab or not self.current_tab.is_channel(): return sushi.server_set( self.current_tab.server.name, self.current_tab.name, "autojoin", str(item.get_active()).lower()) def autoConnectItem_toggled_cb(self, item): """ set the auto connect state of the tab to the state of the menu item. (for servers) """ if not self.current_tab or not self.current_tab.is_server(): return sushi.server_set(self.current_tab.name, "server", "autoconnect", str(item.get_active()).lower()) def hideItem_activate_cb(self, item): """ show up hide messages dialog """ if not self.current_tab or self.current_tab.is_server(): return gui.dialogs.show_dialog("hide", self.current_tab) def historyItem_activate_cb(self, item): """ show up history dialog for current tab. """ if not self.current_tab or self.current_tab.is_server(): return gui.dialogs.show_dialog("history", self.current_tab) def setTopicItem_activate_cb(self, item): """ show up inline dialog to change topic """ def dialog_response_cb(dialog, id): if id != gtk.RESPONSE_OK: dialog.destroy() if not self.current_tab or not self.current_tab.is_channel(): return d = topic_dialog.TopicDialog( self.current_tab.server.name, self.current_tab.name) d.connect("response", dialog_response_cb) gui.mgmt.show_inline_dialog(d) def setKeyItem_activate_cb(self, item): """ show up dialog for key setting """ if not self.current_tab or not self.current_tab.is_channel(): return server = self.current_tab.server.name channel = self.current_tab.name d = key_dialog.KeyDialog(server, channel) d.checkButton.set_property("visible", False) d.checkButton.set_active(True) d.connect("response", lambda d,i: d.destroy()) gui.mgmt.show_inline_dialog(d) sushi-1.4.0+dfsg/tekka/tekka/gui/0000775000175000017500000000000011700417156016406 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/gui/__init__.py0000664000175000017500000000255711700417156020530 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from ._builder import widgets from ._status_manager import status from . import dialogs sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/0000775000175000017500000000000011700417156017337 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/gui/tabs/__init__.py0000664000175000017500000003173311700417156021457 0ustar dfilonidfiloni""" Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import logging from .. import builder from .. import mgmt from .. import shortcuts from .._builder import widgets from .. import _status_manager status = _status_manager.status from ... import config from ...lib.input_history import InputHistory from ...lib.nick_list_store import NickListStore from ...helper import markup from ...typecheck import types # current path/tab/tabs tracking # - get_current_path # - get_current_tab # - get_current_tabs from .current import * # make message types accessible # XXX this should probably have it's own namespace from .messages import * from .tab import TekkaTab from .server import TekkaServer from .channel import TekkaChannel from .query import TekkaQuery _callbacks = {} """ This module provides basic access to the tabs stored in the server list. This module also provides callbacks to get notified about changes. List of valid callbacks: "new_message": (tab, msgtype) new message arrived on the tab "new_name": (tab, name) tab received a new name (happens often in queries) "add": (tab) this tab was added "remove": (tab) this tab is about to removed. "new_markup": (tab) tab received a new markup in the UI "server_connected": (tab, connected) connected == True -> connected connected == False -> disconnected "joined": (tab, switch) a change on the join state switch == True -> joined switch == False -> parted "new_nick": (tab, nick) nick changed on tab "tab_switched": (oldtab, newtab) tab switched from old to new "topic": (tab, topic) topic changed """ @types (d = dict) def add_callbacks(d): """ get dict with {:,...} and apply the values to the internal callback dict as a list, resulting in: {:[,...],...} """ global _callbacks for (key, value) in d.items(): if _callbacks.has_key(key): _callbacks[key].append(value) else: _callbacks[key] = [value] @types (key = basestring) def get_callbacks(key): """ return all callback functions stored under the given key as a list. """ global _callbacks try: return _callbacks[key] except KeyError: raise ValueError, "No such signal handler: %s." % (key) @types (callbacks = tuple) def connect_tab_callbacks(obj, callbacks, *args): """ connect the object with all the callbacks identified by a string in the callbacks tuple. """ for cb in callbacks: cbFunctions = get_callbacks(cb) for fun in cbFunctions: obj.connect(cb, fun, *args) def call_callback(name, *args): for cb in get_callbacks(name): cb(*args) @types(tabtype = TekkaTab) def _create_tab(tabtype, name, *args, **kwargs): """ instance class of type tabtype, connect signals, create output window and setup input history. Returns a new child of TekkaTab. """ tab = tabtype(name, *args, **kwargs) tab.window = builder.get_new_output_window() tab.window.show_all() mgmt.set_font(tab.window.textview, mgmt.get_font()) connect_tab_callbacks(tab, ("new_message","new_name", "server_connected","new_markup")) tab.input_history = InputHistory( text_callback = widgets.get_object("input_entry").get_text) return tab @types (server = TekkaServer, name = basestring) def create_channel(server, name): """ create TekkaChannel object and associated a NickListStore with it. Returns the newly created Tab object. """ ns = NickListStore() ns.set_modes(server.support_prefix[1]) tab = _create_tab(TekkaChannel, name, server, nicklist = ns) connect_tab_callbacks(tab, ("joined","topic")) return tab @types(server = TekkaServer, name = basestring) def create_query(server, name): tab = _create_tab(TekkaQuery, name, server) return tab @types (server = basestring) def create_server(server): tab = _create_tab(TekkaServer, server) tab.update() connect_tab_callbacks(tab, ("new_nick",)) return tab @types(server = basestring, child = basestring) def search_tab(server, child = ""): store = widgets.get_object("tab_store") for row in store: if row[0].name.lower() == server.lower(): if child: for crow in row.iterchildren(): if crow[0].name.lower() == child.lower(): return crow[0] else: return row[0] return None @types (server = basestring, name = basestring) def search_tabs(server, name=""): """ Searches for a pair of tabs. name can be empty, in that case only the server string is used for the search. Possible return values: (,) (,None) (None,None) """ store = widgets.get_object("tab_store") for row in store: if row[0].name.lower() == server.lower(): if not name: return (row[0], None) else: for channel in row.iterchildren(): if channel[0].name.lower() == name.lower(): return (row[0], channel[0]) return (row[0], None) return (None, None) @types (server = (type(None), TekkaServer), object = TekkaTab, update_shortcuts = bool) def add_tab(server, object, update_shortcuts=True): """ Adds a tab object into the server tree. server can be a string identifying a server acting as parent for the tab or None. On succes the method returns the path to the new tab, otherwise None. """ store = widgets.get_object("tab_store") serverIter = None if server: for row in store: if row[0] == server: serverIter = row.iter iter = store.append(serverIter, row=(object,)) object.path = store.get_path(iter) callbacks = get_callbacks("add") for cb in callbacks: cb(object) if server and config.get("tekka", "auto_expand"): # expand the whole server tab path = store.get_path(serverIter) widgets.get_object("tabs_view").expand_row( store.get_path(store.iter_parent(iter)), True) if update_shortcuts: shortcuts.assign_numeric_tab_shortcuts(get_all_tabs()) return object.path @types (tab = TekkaTab, update_shortcuts = bool) def remove_tab(tab, update_shortcuts=True): """ Removes the tab from the server tree. There's no need for giving a parent due to to the unique identifying path stored inner the tekkaTab. """ store = widgets.get_object("tab_store") try: row = store[tab.path] except IndexError: # no tab in server tree at this path return False # part of hack: nextIter = store.iter_next(row.iter) if not nextIter: temp = store.iter_parent(row.iter) if temp: nextIter = store.iter_parent(temp) else: nextIter = None path = tab.path callbacks = get_callbacks("remove") for cb in callbacks: cb(tab) store.remove(row.iter) __updateLowerRows(store, nextIter) if update_shortcuts: shortcuts.assign_numeric_tab_shortcuts(get_all_tabs()) return True def __updateLowerRows(store, iter): """ iter points to the row after the deleted row. path is the path of the deleted row. This hack is UGLY! Would someone please fix the crappy rows-reordered signal? KTHXBYE """ if not iter: # no work, phew. return newLastPath = None nextIter = iter while True: if not nextIter: break tab = store.get(nextIter, 0) try: tab=tab[0] except: break tab.path = store.get_path(nextIter) oIter = nextIter nextIter = store.iter_next(oIter) if not nextIter: if store.iter_has_child(oIter): # oIter is a server nextIter = store.iter_children(oIter) else: # oIter is a channel and the next is (maybe) # a further server temp = store.iter_parent(oIter) nextIter = store.iter_next(temp) @types (old = TekkaTab, new = TekkaTab) def replace_tab(old, new): """ Replaces the tab `old` with the tab `new`. """ store = widgets.get_object("tab_store") try: row = store[old.path] except IndexError: # no such tab at path return False store.set(row.iter, 0, new) new.path = store.get_path(row.iter) # apply new server to childs if old.is_server(): for row in store.iter_children(iter): row[0].server = new def get_tab_by_path(path): if not path: return store = widgets.get_object("tab_store") try: return store[path][0] except (KeyError, IndexError): return None @types (servers = list, excludes = list) def get_all_tabs(servers=[], excludes=[]): """ Returns all registered tabs. If server is given, only the servers and it's children are returned. If exclude is given, the given servers will be ignored. Note: if there's a newly row inserted, the Note:: tab-column can be None. """ store = widgets.get_object("tab_store") tabs = [] def lower(l): return [n.lower() for n in l if n] def iterate_store(model, path, iter): tab = model[path][0] if (None == tab or (tab.is_server() and tab.name.lower() in lower(excludes)) or ( not tab.is_server() and tab.server.name.lower() in lower(excludes))): return tabs.append(tab) if not servers: store.foreach(iterate_store) else: for row in store: if row[0].name.lower() in lower(servers): tabs.append(row[0]) for child in row.iterchildren(): tabs.append(child[0]) break return tabs def get_next_server(current): store = widgets.get_object("tab_store") useNext = False for row in store: if useNext: return row[0] if row[0] == current: useNext = True if len(store) >= 2: # current was the last item, wrap to the first return store[0][0] return None @types (tab = TekkaTab) def get_next_tab(tab): """ get the next left tab near to tab. This function doesn't consider the type of the tab. """ if not tab or not tab.path: return None tablist = get_all_tabs() if not tablist or len(tablist) == 1: return None try: i = tablist.index(tab) except ValueError: return None return tablist[i-1] @types(path=tuple) def switch_to_path(path): """ Switch the server tree cursor to the row pointed to by path. This function returns None. """ if not mgmt.gui_is_useable: return tabs_view = widgets.get_object("tabs_view") store = widgets.get_object("tab_store") if not path: logging.error("switch_to_path(): empty path given, aborting.") return try: tab = store[path][0] except IndexError: logging.error( "switch_to_path(): tab not found in store, aborting.") return old_tab = get_current_tab() tabs_view.set_cursor(path) # explicit import to not make it accesible to the public from current import _set_current_path current._set_current_path(path) widgets.get_object("output_shell").set(tab.window) if tab.is_channel(): """ show up topicbar and nicklist (in case they were hidden) and fill them with tab specific data. """ tab.set_useable(tab.joined) mgmt.set_user_count( len(tab.nickList), tab.nickList.get_operator_count()) mgmt.set_topic(markup.markup_escape(tab.topic)) if config.get_bool("tekka","show_topic_bar"): if (tab.topic or not config.get_bool("tekka","hide_topic_if_empty")): mgmt.visibility.show_topic_bar(True) else: mgmt.visibility.show_topic_bar(False) mgmt.visibility.show_nicks(True) widgets.get_object("nicks_view").set_model(tab.nickList) elif tab.is_query() or tab.is_server(): # queries and server tabs don't have topics or nicklists if not status.get("connecting"): tab.set_useable(tab.connected) if config.get_bool("tekka","show_topic_bar"): # hide topic bar in queries if enabled mgmt.visibility.show_topic_bar(False) # hide nick list in queries mgmt.visibility.show_nicks(False) # reset message notification tab.set_new_message(None) mgmt.set_window_title(tab.name) if not tab.is_server(): mgmt.set_nick(tab.server.nick) else: mgmt.set_nick(tab.nick) call_callback("tab_switched", old_tab, tab) def switch_to_previous(): tabs = get_all_tabs() tab = get_current_tab() try: i = tabs.index(tab) except ValueError: return try: tabs[i-1].switch_to() except IndexError: return def switch_to_next(): tabs = get_all_tabs() tab = get_current_tab() try: i = tabs.index(tab) except ValueError: return try: i = i+1 if (i) == len(tabs): i = 0 tabs[i].switch_to() except IndexError: return sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/query.py0000664000175000017500000000404211700417156021056 0ustar dfilonidfiloniimport gobject import time from ... import config from ...helper import color from ...typecheck import types from . import tab from . import util from .messages import * class TekkaQuery(tab.TekkaTab): """ Class for typical query-tabs """ def __init__(self, name, server, textview=None): super(TekkaQuery,self).__init__(name, textview) self.server = server def is_query(self): return True def markup(self): italic = False bold = False foreground = None base = self.name if not self.connected: base = ""+base+"" if ACTION in self.newMessage: italic = True if MESSAGE in self.newMessage: bold = True if (HIGHMESSAGE in self.newMessage and HIGHACTION in self.newMessage): foreground = util._markup_color("new_highlightmessage") elif HIGHMESSAGE in self.newMessage: foreground = util._markup_color("new_highlightmessage") bold = True elif HIGHACTION in self.newMessage: foreground = util._markup_color("new_highlightaction") markup = "] to this tab's buffer """ timestring = time.strftime( config.get("chatting", "time_format", "%H:%M"), time.localtime(timestamp)) cString = color.colorize_message(msgtype, message) outputString = "[%s] %s" % (timestring, cString) buffer = self.window.textview.get_buffer() buffer.insert_html(buffer.get_end_iter(), outputString, **kwargs) if not self.is_active(): if (config.get_bool("tekka", "show_general_output") and not no_general_output): # write it to the general output, also util._write_to_general_output( msgtype, timestring, self, message) def notify(): self.set_new_message(msgtype) return False gobject.idle_add(notify) sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/tab.py0000664000175000017500000001226511700417156020465 0ustar dfilonidfiloniimport gtk import gobject from dbus import UInt64 from ... import config from ... import com # lastlog from ...helper import color from ...helper import markup from ...typecheck import types from .messages import * from .current import * """ Provides the basic tab with the basic functionality. All other tabs (server, channel, query) are derived from it. """ class TekkaTab(gobject.GObject): """ Provides basic attributes like the output textview, the name of the tab and a flag if a new message is received. Attributes: textview: the textview bound to this tag path: the identifying path in gtk.TreeModel name: the identifying name newMessage: a list containing message "flags" connected: is the tab active or not """ @types(switch=bool) def _set_connected(self, switch): self._connected=switch self.emit ("server_connected", switch) self.emit ("new_markup") connected = property(lambda x: x._connected, _set_connected) @types(path=tuple) def _set_path(self, path): self._path = path path = property(lambda x: x._path, _set_path) @types(name=basestring) def _set_name(self, name): self._name = name self.emit ("new_name", name) name = property(lambda x: x._name, _set_name) def __init__(self, name, window = None): gobject.GObject.__init__(self) self.window = window # the associated GUI output widget self.path = () # the path in the server tree self.name = name # identifying name self.newMessage = [] # status array of unread message types self.connected = False # status flag if the tab's server is connected self.input_text = "" # last typed input text self.input_history = None # input_history object placeholder def __repr__(self): return "" % (self.name, self.path) def is_server(self): return False def is_query(self): return False def is_channel(self): return False @types(text = str) def set_input_text(self, text): self.input_text = text def get_input_text(self): return self.input_text @types(status = (str, type(None))) def set_new_message(self, status): """ A message is unique set and represents the status of the tab. The message stack can be reset by using None as status. See MSGTYPES at the beginning of the file for a listing of available message types. """ new = False if not status: self.newMessage = [] else: try: self.newMessage.index(status) except ValueError: self.newMessage.append(status) new = True self.emit ("new_message", status) if not status or new: self.emit("new_markup") def markup(self): if self.newMessage: return ""+self.name+"" return self.name def write(self, *x): raise NotImplementedError def write_raw(self, msg, type=MESSAGE): """ unformatted, without timestamp """ buf = self.window.textview.get_buffer() end = buf.get_end_iter() buf.insert_html(end, msg) def notify(): self.set_new_message(type) return False gobject.idle_add(notify) def print_last_log(self, lines=0): """ Fetch the given amount of lines of history for the channel on the given server and print it to the channel's textview. """ from .server import TekkaServer # XXX: instead of catching this, cancel new() if type(self) == TekkaTab: raise NotImplementedError buffer = self.window.textview.get_buffer() lines = UInt64(lines or config.get( "chatting", "last_log_lines")) if type(self) == TekkaServer: server = self.name channel = "" else: server = self.server.name channel = self.name for line in com.sushi.log(server, channel, lines): line = color.strip_color_codes(line) buffer.insert_html(buffer.get_end_iter(), "%s" % ( color.get_color_by_key("last_log"), markup.escape(line))) def set_useable(self, switch): widgetList = [ widgets.get_object('nicks_view'), widgets.get_object("output")] for widget in widgetList: if widget.get_property("sensitive") == switch: continue widget.set_sensitive (switch) def is_active(self): serverTab, channelTab = get_current_tabs() if not serverTab or (not channelTab and self.is_channel()): return False if (self.is_server() and self.name.lower() == serverTab.name.lower() and not channelTab): return True if (( self.is_channel() or self.is_query() ) and channelTab and self.name.lower() == channelTab.name.lower() and self.server.name.lower() == serverTab.name.lower()): return True return False def switch_to(self): " convenience method for tabs.switch_to_path " from ..tabs import switch_to_path switch_to_path(self.path) gobject.signal_new( "server_connected", TekkaTab, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN,)) """ The tab's markup has changed """ gobject.signal_new( "new_markup", TekkaTab, gobject.SIGNAL_ACTION, gobject.TYPE_NONE,()) """ The tab's unread messages buffer changed """ gobject.signal_new( "new_message", TekkaTab, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)) """ The tab's name changed (new name as parameter) """ gobject.signal_new( "new_name", TekkaTab, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/server.py0000664000175000017500000000742611700417156021230 0ustar dfilonidfiloniimport gobject import time from ... import com # parse_from, sushi from ... import config from ...typecheck import types from . import tab from . import util from .messages import * from .current import * class TekkaServer(tab.TekkaTab): @types(msg=basestring) def _set_away(self, msg): self._away = msg self.emit("away", msg) self.emit("new_markup") @types(prefix = (tuple, list)) def _set_sprefix(self, prefix): self._sprefix = prefix self.emit("prefix_set", prefix) @types(ctypes = (tuple, list, basestring)) def _set_ctypes(self, ctypes): self._ctypes = ctypes self.emit("channeltypes_set", ctypes) @types(nick = basestring) def _set_nick(self, nick): self._nick = nick self.emit("new_nick", nick) support_prefix = property(lambda x: x._sprefix, _set_sprefix) support_chantypes = property(lambda x: x._ctypes, _set_ctypes) away = property(lambda x: x._away, _set_away) nick = property(lambda x: x._nick, _set_nick) def __init__(self, name, textview=None): super(TekkaServer,self).__init__(name, textview) self.nick = "" # IRC nick self.away = "" # Away message self.support_prefix = () # Which prefixed are supported self.support_chantypes = () # Which chantypes are supported def is_server(self): return True def markup(self): base = self.name if not self.connected: base = ""+base+"" if self.newMessage: base = ""+base+"" if self.away: base = ""+base+"" return base def write(self, timestamp, message, msgtype=MESSAGE, no_general_output=False): """ write [] to this tab's buffer """ buffer = self.window.textview.get_buffer() timestr = time.strftime( config.get("chatting", "time_format", "%H:%M"), time.localtime(timestamp)) buffer.insert_html( buffer.get_end_iter(), "[%s] %s" % (timestr, message)) if not self.is_active(): if (config.get_bool("tekka", "show_general_output") and not no_general_output): util._write_to_general_output( msgtype, timestr, self, message) def notify(): self.set_new_message(msgtype) return False gobject.idle_add(notify) def current_write(self, timestamp, message, msgtype=MESSAGE, no_general_output=False): """ write a string to the current active tab of this server or, if no tab is active, to the this tab """ cServerTab, cChannelTab = get_current_tabs() if (cServerTab and cServerTab.name.lower() == self.name.lower() and cChannelTab): cChannelTab.write( timestamp, message, msgtype, no_general_output) else: self.write( timestamp, message, msgtype, no_general_output) def update(self): """ fetch server info from sushi and apply them to this tab """ server = self.name if com.sushi.user_away(server, com.get_own_nick(server)): # TODO: better query management @ LP self.away = "-- Not implemented yet --" self.nick = com.parse_from(com.sushi.user_from(server, ""))[0] self.support_prefix = com.sushi.support_prefix(server) self.support_chantypes = com.sushi.support_chantypes(server) """ Away status changed (message as parameter) """ gobject.signal_new( "away", TekkaServer, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) """ Supported chantypes set (tuple as parameter) """ gobject.signal_new( "channeltypes_set", TekkaServer, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)) """ Supported prefixed set (tuple as parameter) """ gobject.signal_new( "prefix_set", TekkaServer, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)) """ IRC nick changed (nick as parameter) """ gobject.signal_new( "new_nick", TekkaServer, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/util.py0000664000175000017500000000172311700417156020671 0ustar dfilonidfilonifrom .._builder import widgets from ...helper import color """ Provides utility functions used by (nearly) all tabs. """ def _write_to_general_output(msgtype, timestring, tab, message): """ write the given data well-formatted to the general output. channel can be empty """ goBuffer = widgets.get_object("general_output").get_buffer() if (tab.is_channel() or tab.is_query()): # channel print goBuffer.go_insert( goBuffer.get_end_iter(), "[%s] <%s:%s> %s" % ( timestring, tab.server.name, tab.name, message), tab, msgtype) else: # server print goBuffer.go_insert( goBuffer.get_end_iter(), "[%s] <%s> %s" % ( timestring, tab.name, message), tab, msgtype) widgets.get_object("general_output").scroll_to_bottom() def _markup_color(key): return color.get_color_by_key(key, color.get_widget_base_color(widgets.get_object("tabs_view"))) sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/current.py0000664000175000017500000000236511700417156021401 0ustar dfilonidfiloni from .._builder import widgets """ Caching of the current_tab and convenience methods around it. """ current_path = () def _set_current_path(path): " called by the parent module on a tab switch " global current_path current_path = path def get_current_path(): return current_path def get_current_tab(): """ Returns the current tab """ global current_path store = widgets.get_object("tab_store") try: return store[current_path][0] except (IndexError,TypeError): return None def get_current_tabs(): """ Returns a tuple with the server as parent tab and the active channel tab. If only a server is active, the second field of the tuple is None. Possible return values: (,) (,None) (None,None) """ global current_path store = widgets.get_object("tab_store") if not current_path: return None,None # iter could be server or channel try: iter = store.get_iter(current_path) except ValueError: # tab is already closed return None, None if not iter: return None, None pIter = store.iter_parent(iter) if not pIter: # no parent, iter is a server return store.get_value(iter, 0), None else: return store.get_value(pIter, 0), store.get_value(iter, 0) return None, None sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/messages.py0000664000175000017500000000020011700417156021510 0ustar dfilonidfiloni (MESSAGE, ACTION, HIGHMESSAGE, HIGHACTION) = MSGTYPES = ( "message", "action", "highlightmessage", "highlightaction") sushi-1.4.0+dfsg/tekka/tekka/gui/tabs/channel.py0000664000175000017500000000611311700417156021322 0ustar dfilonidfiloniimport gobject import time from ... import config from ...helper import color from ...typecheck import types from . import tab from . import util from .messages import * class TekkaChannel(tab.TekkaTab): @types(switch=bool) def _set_joined(self, switch): self._joined = switch self.emit("joined", switch) self.emit("new_markup") @types(topic=basestring) def _set_topic(self, topic): self._topic = topic self.emit("topic", topic) joined = property(lambda x: x._joined, _set_joined) topic = property(lambda x: x._topic, _set_topic) def __init__(self, name, server, textview=None, nicklist=None, topic="", topicsetter=""): super(TekkaChannel,self).__init__(name, textview) self.nickList = nicklist # nick list object self.topic = topic # topic string self.topicSetter = topicsetter # the nick of the topic setter self.joined = False # status flag self.server = server # the server name string def is_channel(self): return True def markup(self): italic = False bold = False foreground = None base = self.name if not self.joined: base = ""+base+"" if ACTION in self.newMessage: italic = True if MESSAGE in self.newMessage: if config.get_bool("colors","color_new_message"): foreground = util._markup_color("new_message") bold = True if (HIGHMESSAGE in self.newMessage and HIGHACTION in self.newMessage): foreground = util._markup_color("new_highlightmessage") bold = True elif HIGHMESSAGE in self.newMessage: foreground = util._markup_color("new_highlightmessage") bold = True elif HIGHACTION in self.newMessage: foreground = util._markup_color("new_highlightaction") bold = True markup = "] to this tab's buffer """ timestring = time.strftime( config.get("chatting", "time_format", "%H:%M"), time.localtime(timestamp)) cString = color.colorize_message(msgtype, message) outputString = "[%s] %s" % (timestring, cString) buffer = self.window.textview.get_buffer() buffer.insert_html(buffer.get_end_iter(), outputString, **kwargs) if not self.is_active(): if (config.get_bool("tekka", "show_general_output") and not no_general_output): # write it to the general output, also util._write_to_general_output( msgtype, timestring, self, message) def notify(): self.set_new_message(msgtype) return False gobject.idle_add(notify) """ Joined status changed. status as parameter """ gobject.signal_new( "joined", TekkaChannel, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN,)) """ Topic changed. topic as parameter """ gobject.signal_new( "topic", TekkaChannel, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) sushi-1.4.0+dfsg/tekka/tekka/gui/shortcuts.py0000664000175000017500000001016311700417156021017 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from . import widgets from .. import config from ..helper import shortcuts """ Holds the information which shortcutname has which handler associated and how it is triggered (the shortcut itself). At this time everything about shortcuts happens in here but for future extension possibilities (remapping shortcuts etc.) this API is provided. Also it is possible for tekka specific plugin developers to add shortcuts easily. """ _handlers = { "clear_outputs": [], "output_page_up": [], "output_page_down": [], "input_clear_line": [], "input_search": [], "input_search_further": [], "input_copy": [], "change_topic": [], "servertree_previous": [], "servertree_next": [], "servertree_close": [], "show_sidepane": [] } def add_handlers(d): global _handlers for (key, val) in d.items(): if _handlers.has_key(key): _handlers[key].append(val) def get_shortcut_handler(shortcut): global _handlers try: return _handlers[shortcut] except KeyError: return None def associate_handler(short_name, shortcut, widget): global _handlers try: for handler in _handlers[short_name]: shortcuts.addShortcut( widgets.get_object("main_accel_group"), widgets.get_object(widget), shortcut, handler) except KeyError: pass def setup_shortcuts(): """ Set shortcuts to widgets. - ctrl + page_up -> scroll to prev tab in server tree - ctrl + page_down -> scroll to next tab in server tree - ctrl + w -> close the current tab - ctrl + l -> clear the output buffer - ctrl + u -> clear the input entry - ctrl + s -> hide/show the side pane """ associate_handler("clear_outputs", "l", "input_entry") associate_handler("input_clear_line", "u", "input_entry") associate_handler("input_search", "f", "input_entry") associate_handler("input_search_further", "g", "input_entry") associate_handler("input_copy", "c", "input_entry") associate_handler("change_topic", "t", "input_entry") associate_handler("servertree_previous", "Page_Up", "tabs_view") associate_handler("servertree_next", "Page_Down", "tabs_view") associate_handler("servertree_close", "w", "tabs_view") associate_handler("output_page_up", "Page_Up", "input_entry") associate_handler("output_page_down", "Page_Down", "input_entry") associate_handler("show_sidepane", "s", "view_side_pane_item") def assign_numeric_tab_shortcuts(tabList): """ assign numeric shortcuts (alt+N) for each tab in the list tabs. """ st = widgets.get_object("tabs_view") ag = widgets.get_object("main_accel_group") for i in range(1, 10): shortcuts.removeShortcut(ag, st, "%d" % (i)) c = 1 for tab in tabList: if c == 10: break if (tab.is_server() and not config.get("tekka", "server_shortcuts")): continue shortcuts.addShortcut(ag, st, "%d" % (c), lambda w, s, p: p.switch_to(), tab) c+=1 sushi-1.4.0+dfsg/tekka/tekka/gui/builder.py0000664000175000017500000001135311700417156020411 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import os from ._builder import widgets from .. import config from ..typecheck import types from ..lib.htmlbuffer import HTMLBuffer from ..lib.status_icon import TekkaStatusIcon from ..lib.output_window import OutputWindow from ..lib.output_shell import OutputShell from ..lib.search_toolbar import SearchBar from ..lib.expanding_list import ExpandingList from ..lib.contrast_color_table import ContrastColorTable from ..lib.custom_color_button import CustomColorButton from ..helper import URLHandler """ Creating/Bootstrapping module. This is the core of the UI creation. All gtk.Builder files are handled here. Therefore, gtk.Builder needs to find all dependend UI modules so they are imported here. """ def get_new_buffer(): """ Returns a HTMLBuffer with assigned URL handler. """ buffer = HTMLBuffer(handler=URLHandler.URLHandler) return buffer def get_new_output_window(): w = OutputWindow() return w def information_dialog(title="", message=""): """ create a dialog with an info icon, a title and a message. This dialog has one button (OK) and does not handle it's response. """ d = gtk.MessageDialog( type = gtk.MESSAGE_INFO, buttons = gtk.BUTTONS_OK, message_format = message) d.set_title(title) return d def question_dialog(title = "", message = ""): """ create a dialog with a question mark, a title and a message. This dialog has two buttons (yes, no) and does not handle it's response. """ d = gtk.MessageDialog( type = gtk.MESSAGE_QUESTION, buttons = gtk.BUTTONS_YES_NO, message_format = message) d.set_title(title) return d def error_dialog(title = "", message = ""): """ create a dialog with a exclamation mark, a title and a message. This dialog has one close button and does not handle it's response. """ err = gtk.MessageDialog( type = gtk.MESSAGE_ERROR, buttons = gtk.BUTTONS_CLOSE, message_format = message) err.set_title(title) return err def build_status_icon(): """ Sets up the status icon. """ if config.get_bool("tekka", "rgba"): gtk.widget_push_colormap( widgets.get_object("main_window")\ .get_screen().get_rgb_colormap() ) statusIcon = TekkaStatusIcon() widgets.add_object(statusIcon, "status_icon") if config.get_bool("tekka", "rgba"): gtk.widget_pop_colormap() statusIcon.set_visible(True) @types(ui_file=basestring, section=basestring) def load_main_window(ui_file): """ Load the widgets from the UI file, do simple setup on them, setup the widgets wrapper and return it. After succesful setup, load-finished is emitted. """ widgets.add_from_file(ui_file) def setup_mainmenu_context(): from ..menus.mainmenu_context import MainMenuContext return MainMenuContext(name="menubar", widgets=widgets) mainmenu = setup_mainmenu_context() widgets.add_object(mainmenu, "main_menu_context") return widgets def load_menu(name): # menus are gtkbuilder path = os.path.join( config.get("uifiles", "menus"), name + ".ui") builder = gtk.Builder() builder.add_from_file(path) return builder def load_dialog(name): path = os.path.join( config.get("uifiles", "dialogs"), name + ".ui" ) builder = gtk.Builder() builder.add_from_file(path) return builder class Builder(gtk.Builder): def load_dialog(self, name): path = os.path.join(config.get("uifiles", "dialogs"), name + ".ui") self.add_from_file(path) def load_menu(self, name): path = os.path.join(config.get("uifiles", "menus"), name + ".ui") self.add_from_file(path) sushi-1.4.0+dfsg/tekka/tekka/gui/_status_manager.py0000664000175000017500000000610211700417156022133 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gobject """ Holds the StatusManager, an object which holds a status application-wide. This is used for the status bar and error handling. """ class StatusManager(gobject.GObject): """ Hold the different states the application is in. Every state has an ID which can be retrieved by id(status). A status can be set or be unset or retrieved by get(status) """ def __init__(self): gobject.GObject.__init__(self) self.states = [] def set(self, status): """ Set the given status """ try: self.states.index(status) except ValueError: self.states.append(status) self.emit("set-status", status) return True return False def set_visible(self, status, message): """ Set the given status with a message which can be processed """ if self.set(status): self.emit("set-visible-status", status, message) def unset(self, status): """ Unset the given status """ try: index = self.states.index(status) except ValueError: return False self.emit("unset-status", status) del self.states[index] return True def get(self, status): """ return True if status is set, otherwise False """ try: self.states.index(status) except ValueError: return False else: return True def id(self, status): """ return an unique ID for the given status if it's set. Otherwise raise a ValueError """ try: return self.states.index(status) except ValueError: raise ValueError, "Status %s not in state list." % (status) gobject.signal_new("set-status", StatusManager, gobject.SIGNAL_ACTION, None, (gobject.TYPE_STRING,)) gobject.signal_new("set-visible-status", StatusManager, gobject.SIGNAL_ACTION, None, (gobject.TYPE_STRING, gobject.TYPE_STRING)) gobject.signal_new("unset-status", StatusManager, gobject.SIGNAL_ACTION, None, (gobject.TYPE_STRING,)) status = StatusManager() sushi-1.4.0+dfsg/tekka/tekka/gui/dialogs.py0000664000175000017500000000423211700417156020403 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import logging import gtk from gettext import gettext as _ from ..com import sushi, NoSushiError """ Provides access to dialogs for loading and showing them. """ def loadDialog(name): importName = "tekka.dialogs."+name try: dialog = __import__(importName) except ImportError as e: logging.error("loadDialog: ImportError: %s" % (e)) return None # get the sub-module (name) components = importName.split('.') for comp in components[1:]: dialog = getattr(dialog, comp) if not dialog: return None dialog.setup() return dialog def show_dialog(name, *param, **dparams): d = loadDialog(name) if not d: raise Exception, "Dialog with name '%s' not found." % (name) if dparams.has_key("need_sushi") and dparams["need_sushi"]: if not sushi.connected: raise NoSushiError, _("Can't open dialog '%s'. " "There's no connection to maki." % (name)) return d.run(*param) sushi-1.4.0+dfsg/tekka/tekka/gui/mgmt/0000775000175000017500000000000011700417156017352 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/gui/mgmt/__init__.py0000664000175000017500000001750311700417156021471 0ustar dfilonidfiloni# coding:utf-8 """ Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject import pango import gettext from gettext import gettext as _ from threading import Timer from ... import config from ..builder import build_status_icon, error_dialog from .._builder import widgets from ...helper import color from ...helper import code from ...typecheck import types from ...lib.inline_dialog import InlineMessageDialog from ...lib.welcome_window import WelcomeWindow from . import visibility def get_font(): if not config.get_bool("tekka", "use_default_font"): return config.get("tekka", "font") try: import gconf client = gconf.client_get_default() font = client.get_string( "/desktop/gnome/interface/monospace_font_name") return font except: return config.get("tekka", "font") def apply_new_font(): """ iterate over all widgets which use fonts and change them """ font = get_font() for row in widgets.get_object("tabs_view").get_model(): for child in row.iterchildren(): set_font(child[0].window.textview, font) set_font(row[0].window.textview, font) set_font(widgets.get_object("output"), font) set_font(widgets.get_object("input_entry"), font) set_font(widgets.get_object("general_output"), font) @types(switch=bool) def set_useable(switch): """ Dis- or enable the widgets which emit or receive signals to/from maki. """ global gui_is_useable widgetList = [ widgets.get_object("input_entry"), widgets.get_object("tabs_view"), widgets.get_object("nicks_view"), widgets.get_object("general_output_window") ] if switch or not is_welcome_screen(): # don't disable welcome screen, it knows better widgetList.append(widgets.get_object("output")) widgetList.append(widgets.get_object("output_shell")) for widget in widgetList: widget.set_sensitive(switch) if switch: widgets.get_object("input_entry").grab_focus() gui_is_useable = switch def is_welcome_screen(): """ returns True if the welcome screen is displayed """ return type(widgets.get_object("output_window")) == WelcomeWindow def has_focus(): """ return wether the mainwindow has focus or not """ win = widgets.get_object("main_window") return win.has_toplevel_focus() @types(switch=bool) def set_urgent(switch): """ Sets or unsets the urgent status to the main window. If the status icon is enabled it will be set flashing. """ win = widgets.get_object("main_window") if has_focus(): # don't urgent if we have already the focus return win.set_urgency_hint(switch) statusIcon = widgets.get_object("status_icon") if statusIcon: statusIcon.set_blinking(switch) @types(title=basestring) def set_window_title(title): """ Sets the window title to the main window. """ widgets.get_object("main_window").set_title(title) @types(nick=basestring) def set_nick(nick): """ Sets nick as label text of nick_label. """ widgets.get_object("nick_label").set_text(nick) @types(normal=int, ops=int) def set_user_count(normal, ops): """ sets the amount of users in the current channel. """ m_users = gettext.ngettext( "%d User", "%d Users", normal) % (normal) m_ops = gettext.ngettext( "%d Operator", "%d Operators", ops) % (ops) widgets.get_object("nick_stats_label").set_text( "%(users)s – %(ops)s" % { "users": m_users, "ops": m_ops }) def set_font(textView, font): """ Sets the font of the textView to the font identified by fontFamily """ fd = pango.FontDescription(font) if not fd: logging.error("set_font: Font _not_ modified (previous error)") else: textView.modify_font(fd) @types(string=basestring) def set_topic(string): """ Sets the given string as text in the topic bar. """ tb = widgets.get_object("topic_label") tb.set_markup(string) tb.set_tooltip_markup(string) def clear_all_outputs(): from .. import tabs def clear(buf): if buf: buf.set_text("") current_tab = tabs.get_current_tab() if current_tab: output = current_tab.window.textview buf = output.get_buffer() clear(buf) buf = widgets.get_object("general_output").get_buffer() clear(buf) @types(string=basestring, html=bool) def myPrint(string, html=False): """ prints the string `string` in the current output buffer. If html is true the string would be inserted via the insert_html-method falling back to normal insert if it's not possible to insert via insert_html. """ textview = widgets.get_object("output") output = textview.get_buffer() if not output: logging.error("myPrint: No output buffer.") return if not html: if output.get_char_count() > 0: string = "\n" + string output.insert(output.get_end_iter(), string) else: try: output.insert_html(output.get_end_iter(), string) except AttributeError: logging.info("myPrint: No HTML buffer, printing normal.") output.insert(output.get_end_iter(), "\n"+string) textview.scroll_to_bottom() def show_error_dialog(title = "", message = ""): """ create a dialog with error_dialog() and show it up. The dialog closes on every action. """ d = error_dialog(title, message) d.connect("response", lambda d,i: d.destroy()) d.show() return d def show_maki_connection_error(title, message): d = InlineMessageDialog( _("tekka could not connect to maki."), _("Please check whether maki is running.")) d.connect("response", lambda d,id: d.destroy()) show_inline_dialog(d) def show_inline_message(title, message, dtype="info"): """ title, the title of the dialog message, the message dtype, the type. Values can be "error","info" or "warning" """ if dtype == "error": icon = gtk.STOCK_DIALOG_ERROR elif dtype == "info": icon = gtk.STOCK_DIALOG_INFO elif dtype == "warning": icon = gtk.STOCK_DIALOG_WARNING d = InlineMessageDialog(title, message, icon=icon) d.connect("response", lambda d,id: d.destroy()) show_inline_dialog(d) return d def show_inline_dialog(dialog): """ show an InlineDialog in the notification_vbox""" # Purpose: auto removing messages (depends on config) self = code.init_function_attrs( show_inline_dialog, timeouts = []) area = widgets.get_object("notification_vbox") if dialog: area.set_no_show_all(False) area.add(dialog) area.show_all() area.set_no_show_all(True) if config.get_bool("tekka", "idialog_timeout"): def dialog_timeout_cb(): area.remove(dialog) self.timeouts.remove(dialog_timeout_cb.timer) if isinstance(dialog, InlineMessageDialog): # let only messages disappear t = Timer( int(config.get("tekka", "idialog_timeout_seconds")), dialog_timeout_cb) dialog_timeout_cb.timer = t self.timeouts.append(t) t.start() else: area.set_property("visible", False) for timer in self.timeouts: t.cancel() sushi-1.4.0+dfsg/tekka/tekka/gui/mgmt/visibility.py0000664000175000017500000000347711700417156022126 0ustar dfilonidfilonifrom ..builder import widgets, build_status_icon from ... import config from ...lib.welcome_window import WelcomeWindow def _show_hide(widget, show, all=False): if show: if all: widget.show_all() else: widget.show() else: if all: widget.hide_all() else: widget.hide() def show_topic_bar(show): _show_hide(widgets.get_object("topic_alignment"), show, all=True) def show_status_icon(show): icon = widgets.get_object("status_icon") if show: if not icon: build_status_icon() return else: if not icon: return icon.set_visible(show) def show_status_bar(show): _show_hide(widgets.get_object("statusbar"), show) def show_side_pane(show): _show_hide(widgets.get_object("list_vpaned"), show) def show_general_output(show): _show_hide(widgets.get_object("general_output_alignment"), show, all=True) def show_nicks(show): _show_hide(widgets.get_object("nicks_vbox"), show) def show_welcome_screen(show): """ show a welcome screen while hiding general output, topic bar and side pane. """ # widgets to hide on welcome hides = ( "show_side_pane", "show_topic_bar", "show_general_output" ) for to_hide in hides: if config.get_bool("tekka",to_hide): # it should be showed, hide it if welcome # screen should be showed, otherwise show it eval(to_hide)(not show) if show: s = widgets.get_object("output_shell") w = WelcomeWindow() s.set(w) s.show_all() def apply_visibility_from_config(): """ read the config values of the widgets which can be hidden and apply the configured value to the widgets """ c_w = { "show_general_output": show_general_output, "show_topic_bar": show_topic_bar, "show_side_pane": show_side_pane, "show_status_bar": show_status_bar, "show_status_icon": show_status_icon, } for option in c_w: c_w[option](config.get_bool("tekka", option)) sushi-1.4.0+dfsg/tekka/tekka/gui/_builder.py0000664000175000017500000000205111700417156020543 0ustar dfilonidfiloniimport gtk """ Holds the TekkaBuilder class object, initially needed for the builder module. Also provides a static reference to the initial instance of the TekkaBuilder class (widgets) which is used all over the application to access widgets. """ class TekkaBuilder(gtk.Builder): """ extended version of the gtk.Builder which supports adding GObject widgets to the list of storable objects in the builder. """ def __init__(self): super(TekkaBuilder,self).__init__() self._widgets = {} def get_object(self, name): obj = super(TekkaBuilder,self).get_object(name) if obj: return obj if self._widgets.has_key(name): return self._widgets[name] return None def add_object(self, object, name): if (super(TekkaBuilder,self).get_object(name) or self._widgets.has_key(name)): raise ValueError, "Object '%s' already in Builder." % (name) self._widgets[name] = object return True def remove_object(self, name): if self._widgets.has_key(name): del self._widgets[name] return True return False widgets = TekkaBuilder() sushi-1.4.0+dfsg/tekka/tekka/signals.py0000664000175000017500000000551111700417156017636 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ from .typecheck import types from .com import sushi signals = {} restore_list = [] def setup(): sushi.g_connect("maki-connected", handle_maki_connect_cb) sushi.g_connect("maki-disconnected", handle_maki_disconnect_cb) """ One should use this methods to connect to maki's signals. This API features automatic reconnection of the registered signals if the connection to maki was reset. - connect_signal(,) - disconnect_signal(,) """ @types (signal=basestring) def connect_signal (signal, handler, *userdata): """ connect handler to signal """ global signals if not signals.has_key (signal): signals[signal] = {} if signals[signal].has_key(handler): # no doubles return def handler_wrapper(*args, **kwargs): handler(*(args+userdata), **kwargs) signals[signal][handler] = sushi.connect_to_signal (signal, handler_wrapper) @types (signal=basestring) def disconnect_signal (signal, handler): """ disconnect handler from signal """ global signals try: ob = signals[signal][handler] except KeyError: return else: ob.remove() del signals[signal][handler] def _restore_signals(): global restore_list for (signal, handler) in restore_list: connect_signal(signal, handler) def handle_maki_disconnect_cb(sushi): global signals global restore_list for signal in signals: for handler in signals[signal]: h = signals[signal][handler] if h: h.remove() restore_list.append((signal, handler)) signals = {} def handle_maki_connect_cb(sushi): if restore_list: _restore_signals() sushi-1.4.0+dfsg/tekka/tekka/update_handler.py0000664000175000017500000000235211700417156021155 0ustar dfilonidfiloni""" Handler for updates between revisions and versions. """ import gobject import logging from . import gui def message_success(user_data): (title, message) = user_data gui.mgmt.show_inline_message(title, message) def message_failure(user_data): (title, message) = user_data gui.mgmt.show_inline_message(title, message, dtype="error") def json_get_list_update(): " get_list internals were replaced by json parsing, updates config " from . import config from .helper import escape if config.get_bool("updates", "json_config"): return logging.info("json_get_list_update starting.") changes = 0 for section in config.config_parser.sections(): for (name, value) in config.config_parser.items(section): if value.count(",") > 1 and value[0] != "[": # got old list # convert to list via old stuff l = escape.unescape_split(",", value) config.set_list(section, name, l) changes += 1 logging.info("Updated option %s from %s to %s" % ( name, value, config.get_list(section, name, []))) logging.info("json_get_list_update done: %d changes." % (changes,)) config.set_bool("updates", "json_config", True) gobject.idle_add(message_success, ("Update succeeded", "The config update was successfuly applied.")) sushi-1.4.0+dfsg/tekka/tekka/commands.py0000664000175000017500000000763211700417156020005 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ from gettext import gettext as _ from types import MethodType, FunctionType from . import gui from . import com from .helper import color from .com import sushi from .typecheck import types _commands = {} @types(text=basestring) def parseInput(text): """ 1. Parse color codes (%Cn[,m]), 2. Split text for blank, strip the command and search for it in _commands-dict. 3. Call the underlying function if found. Paramters for the function are: - the current server or None - the current channel or None - A list of words typed after the command ("parameters") split by space """ if not text: return # parse %C tags text = color.parse_color_markups_to_codes(text) serverTab,channelTab = gui.tabs.get_current_tabs() if ((channelTab and not channelTab.connected) or (serverTab and not serverTab.connected)): # there is no connection in this tab so # if you're typing something, it would have # no effect. So warn the user. warnNoConnection(serverTab) if text[0] != "/" or text[:2] == "//": # this is no command if not channelTab: # no command AND no channel is nonsense. # normal text is useless in context # with server tabs return # strip first slash if it's a fake command if text[0] == "/": text = text[1:] if channelTab.is_channel() and not channelTab.joined: warnNotJoined(channelTab) com.sendMessage(serverTab.name, channelTab.name, text) else: # we got a command here argv = text[1:].rstrip().split(" ") cmd = argv[0] if not cmd: # / typed return gui.mgmt.myPrint("No command given.") # search for the command global _commands if not _commands.has_key(cmd): # command not found, look if we # can send it as RAW. if not serverTab: return gui.mgmt.myPrint("No server active.") # build raw command raw = cmd.upper() if len(argv) > 1: raw += " " + " ".join(argv[1:]) gui.mgmt.myPrint(_( u"• Unknown command “%(command)s”, "\ u"sending raw command “%(raw)s”.") % { "command": cmd, "raw": raw }) sushi.raw(serverTab.name, raw) else: _commands[cmd](serverTab, channelTab, argv[1:]) @types(command=basestring,function=(MethodType,FunctionType)) def add_command(command, function): """ Add a command. Returns True on success, otherwise False. """ global _commands if _commands.has_key(command): return False _commands[command] = function return True @types(command=basestring) def remove_command(command): """ Removes a command. Returns True on success, otherwise False. """ global _commands if _commands.has_key(command): del _commands[command] return True return False sushi-1.4.0+dfsg/tekka/tekka/com.py0000664000175000017500000002172311700417156016757 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import os import re import gobject import dbus from dbus.mainloop.glib import DBusGMainLoop from gettext import gettext as _ from types import NoneType from tekka.typecheck import types """ The com module caches the nick, provides a persistent interface to maki, provides methods to connect / disconnect maki and to send messages. """ class NoSushiError (BaseException): pass class SushiWrapper (gobject.GObject): """ Wraps a DBus Interface to maki so if there's no connection, an error signal is emitted and can be catched by the GUI. Access to the underlying gobject methods is possible by prefixing an "g_": g_emit(), g_connect, ... The only methods available directly from this class are all methods beginning with an "_" and the "connected" property. All other getattr calls will be forwarded to the intern sushi interface. """ @types (sushi_interface = (dbus.Interface, NoneType)) def __init__(self, sushi_interface): gobject.GObject.__init__(self) self.connected = False self.remote = False self._set_interface(sushi_interface) @types(v = bool) def _set_remote(self, v): self._remote = v @types (connected = bool) def _set_connected(self, connected): if connected: self.g_emit("maki-connected") else: self.g_emit("maki-disconnected") self.__recent_reconnect = True self._connected = connected @types (interface = (dbus.Interface, NoneType)) def _set_interface(self, interface): self._sushi = interface self._set_connected(interface != None) @types (title = basestring, msg = basestring) def _emit_error(self, title, msg): self.g_emit("sushi-error", title, msg) def __getattribute__(self, attr): """ attributes prefixed with g_ will be resolved by GObject's getattribute with the g_ striped. attributes prefixed with _ will be resolved as they are for SushiWrapper. all other attributes are forwarded to self._sushi """ def dummy(*args, **kwargs): """ called if no connection is active """ if self.__recent_reconnect: self.__recent_reconnect = False sushi._emit_error( _("tekka could not connect to maki."), _("Please check whether maki is running.")) pass def errordummy(message): """ called if a DBusError was catched """ def new(*args, **kwargs): sushi._emit_error( _("tekka could not connect to maki."), _("Please check whether maki is running.\n" "The following error occurred: %(error)s") % { "error": message }) return new gobject_attr = False if attr[:2] == "g_": attr = attr[2:] gobject_attr = True if (attr[0] == "_" or gobject_attr or attr in ("connected", "remote")): # resolve it by gobject.__getattribute__. This function # will call getattr as well if there is no matching # method in the gobject hierarchy. return gobject.GObject.__getattribute__(self, attr) else: if not self._sushi: # return a dummy which reports an error return dummy else: try: # try local methods return self._sushi.__getattribute__(attr) except AttributeError: # try proxy methods try: def attr_dummy(*args, **kwargs): """ wrapped call to dbus proxy attr """ try: return self._sushi.__getattr__(attr)( *args, **kwargs) except dbus.DBusException as e: self._emit_error( _("Communication error with maki."), _("There was an error while executing " "'%s' with DBus: \n%s\n" "You should keep safe that maki is " "running " % (attr, e))) return attr_dummy except dbus.DBusException as e: # method not found, return dummy return errordummy(str(e)) raise AttributeError(attr) # Properties remote = property(lambda s: s._remote, _set_remote) connected = property(lambda s: s._connected, _set_connected) gobject.signal_new ("maki-connected", SushiWrapper, gobject.SIGNAL_ACTION, None, ()) gobject.signal_new ("maki-disconnected", SushiWrapper, gobject.SIGNAL_ACTION, None, ()) gobject.signal_new ("sushi-error", SushiWrapper, gobject.SIGNAL_ACTION, None, (str, str)) dbus_loop = DBusGMainLoop() required_version = (1, 2, 0) bus = None sushi = SushiWrapper(None) myNick = {} _shutdown_callback = None _nick_callback = None def disable_sushi_on_fail(cmethod): """ decorator: disable sushi wrapper if connect fails """ def new(*args, **kwargs): global sushi ret = cmethod(*args, **kwargs) if not ret: sushi._set_interface(None) return ret return new @disable_sushi_on_fail def connect(): """ Connect to maki over DBus. Returns True if the connection attempt was succesful. If the attempt was successful, the sushi object's attribute "connected" is set to "True" and the object has more attributes through the dbus proxy so you can call dbus methods directly. """ global sushi, _shutdown_callback, _nick_callback, bus bus_address = os.getenv("SUSHI_REMOTE_BUS_ADDRESS") def bus_remote_error(exception): sushi._emit_error( _("tekka could not connect to maki."), _("Please check whether maki is running.\n" "The following error occurred: %(error)s") % { "error": str(exception) }) def connect_session_bus(): global bus, dbus_loop try: return dbus.SessionBus(mainloop=dbus_loop) except DBusException as e: bus_remote_error(e) return None if bus_address: try: bus = dbus.connection.Connection(bus_address, mainloop=dbus_loop) except dbus.DBusException as e: bus_remote_error(e) return False else: bus = connect_session_bus() if bus == None: return False if type(bus) == dbus.connection.Connection: sushi.remote = True try: proxy = bus.get_object("de.ikkoku.sushi", "/de/ikkoku/sushi") except dbus.exceptions.DBusException as e: bus_remote_error(e) return False sushi._set_interface(dbus.Interface(proxy, "de.ikkoku.sushi")) version = tuple([int(v) for v in sushi.version()]) if not version or version < required_version: version_string = ".".join([str(x) for x in required_version]) sushi._emit_error( _("tekka requires a newer maki version."), _("Please update maki to at least version %(version)s.") % { "version": version_string }) sushi._set_interface(None) return False _shutdown_callback = sushi.connect_to_signal("shutdown", _shutdownSignal) _nick_callback = sushi.connect_to_signal("nick", _nickSignal) for server in sushi.servers(): fetch_own_nick(server) return True def disconnect(): global sushi, _shutdown_callback, _nick_callback sushi._set_interface(None) if _shutdown_callback: _shutdown_callback.remove() if _nick_callback: _nick_callback.remove() def parse_from (from_str): h = from_str.split("!", 2) if len(h) < 2: return (h[0],) t = h[1].split("@", 2) if len(t) < 2: return (h[0],) return (h[0], t[0], t[1]) def _shutdownSignal(time): disconnect() def _nickSignal(time, server, from_str, new_nick): nick = parse_from(from_str)[0] if not nick or nick == get_own_nick(server): cache_own_nick(server, new_nick) def sendMessage(server, channel, text): """ sends a PRIVMSG to channel @channel on server @server """ text = re.sub('(^|\s)(_\S+_)(\s|$)', '\\1' + chr(31) + '\\2' + chr(31) + '\\3', text) text = re.sub('(^|\s)(\*\S+\*)(\s|$)', '\\1' + chr(2) + '\\2' + chr(2) + '\\3', text) sushi.message(server, channel, text) # fetches the own nick for server @server from maki def fetch_own_nick(server): from_str = sushi.user_from(server, "") nick = parse_from(from_str)[0] cache_own_nick(server, nick) # caches the nick @nickname for server @server. def cache_own_nick(server, nickname): myNick[server] = nickname # returns the cached nick of server @server def get_own_nick(server): if myNick.has_key(server): return myNick[server] return "" sushi-1.4.0+dfsg/tekka/tekka/dialogs/0000775000175000017500000000000011700417156017244 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/dialogs/__init__.py0000664000175000017500000000246611700417156021365 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ ... """ __all__ = [] sushi-1.4.0+dfsg/tekka/tekka/dialogs/advancedPreferences.py0000664000175000017500000000660311700417156023552 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject import pango from .. import gui from .. import config widgets = None def addCategory(store, category): """ add parent item to store and return the treeiter """ iter = store.append(None, (category,"","")) return iter def fillConfigView(): """ fill config treeview with categories, options/values and defaults """ configView = widgets.get_object("configView") configStore = widgets.get_object("pref_store") for category in ("tekka","colors","chatting","dcc","colors"): cDict = config.get(category, default=None) if not cDict: continue iter = addCategory(configStore, category) if not iter: continue for (key, value) in cDict.items(): default = str(config.get_default(category, key)) configStore.append(iter, row=(key, value, default)) def renderOption(column, renderer, model, iter): if not model.iter_parent(iter): # category row, markup bold renderer.set_property("weight", pango.WEIGHT_BOLD) else: renderer.set_property("weight", pango.WEIGHT_NORMAL) def renderValue(column, renderer, model, iter): if not model.iter_parent(iter): renderer.set_property("editable", False) else: renderer.set_property("editable", True) def configValueEdited(renderer, path, newText): model = widgets.get_object("configView").get_model() treeIter = model.get_iter(path) catIter = model.iter_parent(treeIter) if not catIter: return model.set(treeIter, 1, newText) category = model.get(catIter, 0)[0] option = model[path][0] value = model[path][1] config.set(category, option, value) def setup(): """ called initially """ global widgets widgets = gui.builder.load_dialog("advancedPreferences") configView = widgets.get_object("configView") widgets.get_object("value_renderer").connect("edited", configValueEdited) widgets.get_object("value_column").set_cell_data_func( widgets.get_object("value_renderer"), renderValue) widgets.get_object("option_column").set_cell_data_func( widgets.get_object("option_renderer"), renderOption) def run(): dialog = widgets.get_object("advancedPreferences") fillConfigView() dialog.run() dialog.destroy() sushi-1.4.0+dfsg/tekka/tekka/dialogs/channelList.py0000664000175000017500000001151011700417156022060 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ from re import compile from gettext import gettext as _ import gtk import gobject import logging from .. import com from .. import signals from ..gui import builder from ..gui import mgmt from ..helper.markup import markup_escape PULSE_DELAY=100 running = False # dialog is running cache = [] # /list cache class ChannelListBuilder(builder.Builder): def __init__(self, server_name): super(ChannelListBuilder, self).__init__() self.load_dialog("channelList") self.server_name = server_name self.pulse_timer = None self.connect_signals(self) self.reset_progress_bar() def reset_progress_bar(self): self.get_object("progressBar").set_fraction(0) def start_pulsing(self): def pulse_it(): self.get_object("progressBar").pulse() return True self.pulse_timer = gobject.timeout_add(PULSE_DELAY, pulse_it) def stop_pulsing(self): if not self.pulse_timer: return gobject.source_remove(self.pulse_timer) self.reset_progress_bar() def start_list(self): pattern = None try: pattern = compile( self.get_object("regexpEntry").get_text()) except Exception as e: mgmt.show_inline_message( _("Channel list search error."), _("You've got a syntax error in your search string. " "The error is: %s\n" "Tip: You should not use special characters " "like '*' or '.' in your search string if you don't " "know about regular expressions." % (e)), dtype="error") self.get_object("listStore").clear() self.get_object("listButton").set_sensitive(False) self.get_object("stopListButton").set_sensitive(True) self.start_pulsing() if cache: # use cached values for (server, channel, user, topic) in cache: self.list_handler(0, server, channel, user, topic, pattern) else: signals.connect_signal("list", self.list_handler, pattern) try: com.sushi.list(self.server_name, "") except Exception as e: logging.error("Error in getting list: %s" % (e)) self.stop_list() def stop_list(self): signals.disconnect_signal("list", self.list_handler) self.get_object("listButton").set_sensitive(True) self.get_object("stopListButton").set_sensitive(False) self.stop_pulsing() def list_handler(self, time, server, channel, user, topic, pattern): """ receives the data from maki. add server/user/topic to listStore """ if time > 0: # no manual call cache.append((server,channel,user,topic)) if user < 0: # EOL, this is not reached if we use # manual call. self.stop_list() return store = self.get_object("listStore") if (not pattern or (pattern and (pattern.search(channel) or pattern.search(topic)))): store.append(row=(markup_escape(channel), int(user), markup_escape(topic))) def dialog_response(self, dialog, id): global running self.stop_list() running = False dialog.destroy() def find_button_clicked(self, button): self.start_list() def stop_button_clicked(self, button): # prevent incompleteness of cache global cache cache = [] self.stop_list() def regexp_entry_activate(self, entry): self.start_list() def listView_row_activated(self, view, path, column): channel = self.get_object("listStore")[path][0] com.sushi.join(self.server_name, channel, com.sushi.server_get(self.server_name, channel, "key")) def run(server): """ Show the dialog until close was hit. """ global cache global running if running: return running = True # clear the cache at the beginning cache = [] builder = ChannelListBuilder(server) builder.get_object("channelList").show() def setup(): pass sushi-1.4.0+dfsg/tekka/tekka/dialogs/server.py0000664000175000017500000001217211700417156021127 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import logging from gettext import gettext as _ from .. import com from .. import gui widgets = None serverSelection = None RESPONSE_CONNECT = 3 def setup(): global widgets, serverSelection if widgets: return widgets = gui.builder.load_dialog("server") sigdic = { "addButton_clicked_cb": lambda w: openAddDialog(), "editButton_clicked_cb": lambda w: openEditDialog(), "deleteButton_clicked_cb": lambda w: openDeleteDialog(), "serverRenderer_edited_cb": serverNameEdited } widgets.connect_signals(sigdic) # enable multiple selection serverSelection = widgets.get_object("serverList").get_selection() serverSelection.set_mode(gtk.SELECTION_MULTIPLE) def addServer(name): """ Add server from maki to the list store """ widgets.get_object("serverStore").append([name]) def retrieveServerlist(): """ Fetch server list from maki and get infos about every server. """ widgets.get_object("serverStore").clear() servers = com.sushi.server_list("","") if servers: for server in servers: addServer(server) def serverNameEdited(renderer, path, newText): """ User edited column in serverView """ try: oldText = widgets.get_object("serverStore")[path][0] except IndexError: return com.sushi.server_rename(oldText, newText) # at last, update the list from maki (caching would be better..) retrieveServerlist() def run(callback): dialog = widgets.get_object("serverDialog") retrieveServerlist() dialog.connect("response", dialog_response_cb, callback) dialog.show_all() def createServer(serverName, data): """ Create a server in maki. """ for (k,v) in data.items(): com.sushi.server_set(serverName, "server", k, v) def deleteServer(servername): """ Remove server from Serverlist widget and delete server in maki. """ serverList = widgets.get_object("serverStore") for row in serverList: if row[0] == servername: serverList.remove(row.iter) com.sushi.server_remove(servername, "", "") def openAddDialog(): gui.dialogs.show_dialog("addServer", add_dialog_cb) def openEditDialog(): view = widgets.get_object("serverList") serverList = view.get_model() path = view.get_cursor()[0] servername = None if not path: d = gui.builder.information_dialog( _("No server selected."), _("You must select a server to edit it.")) d.connect("response", lambda w,i: w.destroy()) d.show_all() return else: servername = serverList[path][0] data = gui.dialogs.show_dialog("editServer", servername) if not servername: logging.error("openEditDialog: Error in retrieving the servername") return if data: retrieveServerlist() def openDeleteDialog(): view = widgets.get_object("serverList") path = view.get_cursor()[0] servername = None if not path: d = gui.builder.information_dialog( _("No server selected."), _("You must select a server to delete it.")) d.connect("response", lambda w,i: w.destroy()) d.show_all() return else: servername = view.get_model()[path][0] if not servername: gui.mgmt.show_error_dialog( title=_("Error while retrieving server name."), message=_("There was an error while retrieving the server " "name.\nAre you connected to maki?")) return gui.dialogs.show_dialog("deleteServer", servername, delete_dialog_cb) def dialog_response_cb(dialog, response_id, callback): if response_id == RESPONSE_CONNECT: # get the selected server(s) serverList = widgets.get_object("serverStore") paths = serverSelection.get_selected_rows()[1] if not paths: return toConnect = [] for path in paths: toConnect.append(serverList[path][0]) callback(toConnect) else: callback(None) dialog.hide() def add_dialog_cb(): """ indicates, server was added """ retrieveServerlist() def delete_dialog_cb(servername): """ indicates that the server can be deleted """ deleteServer(servername) sushi-1.4.0+dfsg/tekka/tekka/dialogs/debug.py0000664000175000017500000000453311700417156020711 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ from .. import gui import logging error_textview = gtk.TextView() def button_clicked_cb(button, textView): """ compile statement and run it. """ logging.info("debugDialog: Compile and run!") exec(textView.get_buffer().get_property("text")) def destroy_dialog(dialog, rid): dialog.destroy() def run(): ag = gtk.AccelGroup() dialog = gtk.Dialog( title="Debug dialog", parent=gui.widgets.get_object("mainWindow"), flags=gtk.DIALOG_DESTROY_WITH_PARENT, buttons=( (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) )) dialog.resize(300,400) if not dialog: logging.error("DebugDialog creation failed!") return code_vbox = gtk.VBox() textView = gtk.TextView() button = gtk.Button(label=_("C_ompile and run")) dialog.vbox.pack_start(textView) dialog.vbox.pack_end(button) dialog.vbox.set_child_packing(button, False, True, 0L, gtk.PACK_END) dialog.vbox.show_all() button.connect("clicked", button_clicked_cb, textView) # close on cancel dialog.connect("response", destroy_dialog) dialog.show_all() def setup(): pass sushi-1.4.0+dfsg/tekka/tekka/dialogs/editServer.py0000664000175000017500000000764411700417156021745 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from ..com import sushi from .. import gui def setup(): pass def get_configurator(ctype, key, server): def bool_configurator(key, server): def apply_value(*arg): state = str(arg[0].get_active()) sushi.server_set(server, "server", key, state.lower()) return apply_value def text_configurator(key, server): def apply_value(*arg): s = arg[0].get_text() sushi.server_set(server, "server", key, s) return apply_value if ctype == "bool": return bool_configurator(key, server) elif ctype == "text": return text_configurator(key, server) return None def run(server): def dialog_response_cb(dialog, response_id): dialog.destroy() def update_commandList(widget, server): list = [i[0].get_text() for i in widget.get_widget_matrix() if i[0].get_text()] sushi.server_set_list(server, "server", "commands", list) widgets = gui.builder.load_dialog("serverEdit") types = {"address":"text", "port":"text", "nick":"text", "name":"text", "nickserv":"text", "autoconnect":"bool", "nickserv_ghost":"bool"} signals = { "addressEntry": { "key":"address", "signals":("focus-out-event", "activate")}, "portEntry": { "key":"port", "signals":("focus-out-event", "activate")}, "nickEntry": { "key":"nick", "signals":("focus-out-event", "activate")}, "nameEntry": { "key":"name", "signals":("focus-out-event", "activate")}, "nickservEntry": { "key":"nickserv", "signals": ("focus-out-event", "activate")}, "autoConnectCheckButton": { "key":"autoconnect", "signals":("toggled",)}, "nickservGhostCheckButton": { "key":"nickserv_ghost", "signals":("toggled",)} } for key in signals: c_type = types[signals[key]["key"]] widget = widgets.get_object(key) configurator = get_configurator(c_type, signals[key]["key"], server) for signal in signals[key]["signals"]: widget.connect(signal, configurator) value = sushi.server_get(server, "server", signals[key]["key"]) if c_type == "text": widget.set_text(value) elif c_type == "bool": widget.set_active(value == "true") bsignals = {"commandList_row_added_cb": lambda w,*x: update_commandList(w, server), "commandList_row_removed_cb": lambda w,*x: update_commandList(w, server) } widgets.connect_signals(bsignals) # fill the command list with the existing commands commandList = widgets.get_object("commandList") i = 0 for command in sushi.server_get_list(server, "server", "commands"): commandList.get_widget_matrix()[i][0].set_text(command) commandList.add_row() i += 1 dialog = widgets.get_object("serverEdit") dialog.connect("response", dialog_response_cb) dialog.show_all() sushi-1.4.0+dfsg/tekka/tekka/dialogs/colorTable.py0000664000175000017500000000440011700417156021702 0ustar dfilonidfiloni""" Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import re from .. import config from .. import gui from ..helper import color from ..lib import contrast builder = gtk.Builder() def dialog_response_cb(dialog, id): dialog.destroy() def run(): output_bg = gui.widgets.get_object("output")\ .get_style().base[gtk.STATE_NORMAL] pattern = re.compile("eventbox([0-9]*)") table = builder.get_object("table1") boxes = [n for n in table.get_children() if type(n) == gtk.EventBox] for box in boxes: name = gtk.Buildable.get_name(box) match = pattern.match(name) if not match: raise ValueError, "Invalid event box in table." i = int(match.groups()[0]) - 1 ccolor = color.COLOR_TABLE[i] box.modify_bg(gtk.STATE_NORMAL, contrast.contrast_render_foreground_color(output_bg, ccolor)) builder.get_object("colorTable").show_all() def setup(): path = config.get("uifiles","dialogs") + "colorTable.ui" builder.add_from_file(path) dialog = builder.get_object("colorTable") dialog.connect("response", dialog_response_cb) sushi-1.4.0+dfsg/tekka/tekka/dialogs/contrast.py0000664000175000017500000000602611700417156021457 0ustar dfilonidfiloni import gtk import gobject from .. import gui from ..lib import contrast from ..helper import color as hcolor from ..typecheck import types class ColorDialog(object): """ show the available contrast colors as colored buttons and show a textfield with text foreground colored in the selected color. """ def __init__(self): self.builder = gui.builder.load_dialog("contrast") self._setup_text_tag() self.builder.connect_signals(self) self._colors = (None,None) def __getattr__(self, attr): if attr in ("builder", "color_tag", "_colors" "_setup_text_tag", "set_example_color", "get_current_color", "show_all", "set_current_rgb_color", "set_current_contrast_color", "contrast_color_table_color_changed", "colorselection_color_changed"): # public attributes of this object return super(ColorDialog,self).__getattr__(attr) else: return getattr(self.builder.get_object("contrast_dialog"), attr) def show_all(self): # FIXME: for a reason i don't know yet, show_all() does not # FIXME:: apply show for the contrast_color_table, so this fixes it self.builder.get_object("contrast_dialog").show_all() self.builder.get_object("contrast_color_table").show_all() def _setup_text_tag(self): buffer = self.builder.get_object("example_text_view").get_buffer() self.color_tag = buffer.create_tag() buffer.apply_tag(self.color_tag, buffer.get_start_iter(), buffer.get_end_iter()) def set_example_color(self, color): self.color_tag.set_property("foreground", color) def set_current_rgb_color(self, color): self.builder.get_object("colorselection").set_current_color(color) @types(color_code=int) def set_current_contrast_color(self, color_code): """ take a contrast color number and behave as if the specific color is selected. """ table = self.builder.get_object("contrast_color_table") button = table.get_button_by_code(color_code) button.clicked() def get_current_color(self): """ return a tuple with two values like this: (,). If a color is set by the colorselection, no contrast color is set: (, None). If a contrast color is used, the first value is the RGB representation of the contrast color and the second value is the contrast color code: (). Default is (None, None). """ return self._colors def contrast_color_table_color_changed(self, table, color_code): color = contrast.contrast_render_foreground_color( hcolor._get_output_bg_color(), color_code) # set the colorselection to the contrast color self.builder.get_object("colorselection").set_current_color(color) self._colors = (color, color_code) self.set_example_color(color) def colorselection_color_changed(self, selection): color = selection.get_current_color() self._colors = (color, None) self.set_example_color(color) def setup():pass def run(parent=None): d = ColorDialog() if parent: d.set_transient_for(parent) d.show_all() return d sushi-1.4.0+dfsg/tekka/tekka/dialogs/deleteServer.py0000664000175000017500000000355311700417156022255 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from ..gui import builder def setup(): pass def dialog_response_cb(dialog, response_id, servername, callback): if response_id == gtk.RESPONSE_YES: callback(servername) dialog.destroy() def run(servername, callback): """ Returns True if the server should be deleted, otherwise False """ widgets = builder.load_dialog("serverDelete") dialog = widgets.get_object("serverDelete") label = widgets.get_object("warningLabel") label.set_text(label.get_text() % {"server": servername}) dialog.connect("response", dialog_response_cb, servername, callback) dialog.show_all() sushi-1.4.0+dfsg/tekka/tekka/dialogs/history.py0000664000175000017500000002374711700417156021334 0ustar dfilonidfiloniimport os import gtk import time import calendar as mod_calendar from gettext import gettext as _ from .. import gui from .. import config from ..com import sushi from ..helper import history def strip_date(text): new = [] for line in text.split("\n"): match = history.DATEPATTERN.match(line) if match: time_len = len(line[match.start():match.end()].split(" ")[-1]) new.append(line[match.end()-time_len:]) else: new.append(line) return "\n".join(new) class HistoryDialog(object): def __init__(self, history_tab): self.current_path = () self.current_file = None self.current_offsets = {} # last search result position self.last_search_iter = None self.last_result = None self.search_in_progress = False # use log API despite remotely maki connection self.force_remote = False self.builder = gtk.Builder() path = config.get("uifiles","dialogs") self.builder.add_from_file(os.path.join(path, "history.ui")) self.builder.connect_signals(self) if not self.verify_remote(): return gui.mgmt.set_font(self.builder.get_object("history_view"), gui.mgmt.get_font()) # jump to current date (year, month, day) = time.localtime(time.time())[0:3] self.builder.get_object("calendar").set_properties( year=year, month=month-1, day=day) self.fill_target_tree() self.switch_to_target(history_tab.server.name, history_tab.name) self.load_current_day() bar = self.builder.get_object("searchbar") bar.autohide = False bar.default_buttons = False bar.search_button.connect("clicked", self.search) bar.search_entry.connect("activate", self.search) def verify_remote(self): """ ask user if he wants to try reading logs even if maki is connected via sushi-remote. This is useful if maki runs on the same host. """ if not sushi.remote: return True d = gui.builder.question_dialog( _("Read history anyways?"), _("maki is connected remotely. It's possible that " "the history is not accessible. Do you want to " "try anyways?")) id = d.run() d.destroy() if id == gtk.RESPONSE_YES: self.force_remote = True return True else: self.builder.get_object("history_dialog").destroy() return False def fill_target_tree(self): """ fill target tree store with server/targets """ store = self.builder.get_object("target_tree") for server in history.get_available_servers( force_remote=self.force_remote): server_iter = store.append(None, (server,)) for conv in history.get_available_conversations(server, force_remote=self.force_remote): store.append(server_iter, (conv,)) def switch_to_target(self, server, target): """ switch to combo box entry identified by server / target """ cbox = self.builder.get_object("target_combobox") store = self.builder.get_object("target_tree") for srow in store: if srow[0].lower() == server.lower(): for trow in srow.iterchildren(): if trow[0].lower() == target.lower(): cbox.set_active_iter(trow.iter) d = self.builder.get_object("history_dialog") d.set_title(_("History for %(target)s") % { "target": target}) def get_current_names(self): """ return (server, target) of current selection return (server, None) if no target is active return (None, None) if no entry is active """ if not self.current_path: return (None, None) store = self.builder.get_object("target_tree") iter = store.get_iter(self.current_path) target = store.get_value(iter, 0) parent_iter = store.iter_parent(iter) if not parent_iter: return (target, None) server = store.get_value(parent_iter, 0) return (server, target) def update_calendar(self, highlight=True): """ update the calendar markings if highlight is True and the cache variables self.current_file and self.current_offsets """ calendar = self.builder.get_object("calendar") calendar.clear_marks() (server, target) = self.get_current_names() if not server or not target: return (year, month) = calendar.get_properties("year","month") month += 1 # 1-12 instead of 0-11 for log in history.get_available_logs(server, target, force_remote=self.force_remote): (lyear, lmonth) = history.get_log_date(log) if year == lyear and lmonth == month: path = history.get_log_path(server, target, log) try: fd = file(path, "r") except Exception,e: print "Exception %s while open %s." % (e, path) return self.current_file = path self.current_offsets = history.parse_day_offsets(fd) if highlight: for (year, month, day) in self.current_offsets.keys(): calendar.mark_day(day) def search_calender_marks(self): needle = self.builder.get_object( "searchbar").search_entry.get_text() if not self.current_file or not needle: return calender = self.builder.get_object("calendar") calender.clear_marks() if not self.current_offsets: return fd = file(self.current_file, "r") for ((year, month, day), (start,end)) in self.current_offsets.items(): fd.seek(start) if fd.read(end-start).find(needle) >= 0: calender.mark_day(day) def search_local(self): """ search in the text loaded into history_buffer and highlight the needle if found. Returns True on success otherwise False """ view = self.builder.get_object("history_view") buffer = self.builder.get_object("history_buffer") needle = self.builder.get_object( "searchbar").search_entry.get_text() if not needle: return False if (not self.last_search_iter or self.last_result != needle): # new search self.last_search_iter = buffer.get_start_iter() self.search_calender_marks() result = self.last_search_iter.forward_search(needle, gtk.TEXT_SEARCH_TEXT_ONLY) if not result or result == self.last_result: return False self.last_search_iter = result[1] self.last_result = buffer.get_text(*result) buffer.select_range(*result) # scroll the textview to the result view.scroll_to_iter(result[0], 0.0) return True def load_next_month(self): """ find the next possible month with data in it and jump to it. Return True on success, otherwise False """ calendar = self.builder.get_object("calendar") (year, month) = calendar.get_properties("year","month") real_month = month + 1 (server, target) = self.get_current_names() if not server and not target: return False available_months = {} for log in history.get_available_logs(server, target, force_remote=self.force_remote): (dyear, dmonth) = history.get_log_date(log) if dyear > year or (dyear == year and dmonth > real_month): if not available_months.has_key(dyear): available_months[dyear] = [] available_months[dyear].append(dmonth) if not available_months: return False # get lowest possible year low_year = sorted(available_months.keys())[0] # get lowest month in year low_month = sorted(available_months[low_year])[0] - 1 # get first day # XXX this mustnt be a day which has search results so it would # probably better to set the day to a day with search result day = mod_calendar.monthrange(low_year, low_month+1)[0] calendar.set_properties(year=low_year, month=low_month, day=day) return True def search(self,*x): """ search for a needle, mark all days where something was found. On every hit, iterate further until no further matches are found. """ needle = self.builder.get_object( "searchbar").search_entry.get_text() if not needle: print "aborting search.." self.abort_search() return self.search_in_progress = True print "in search" if not self.search_local(): # no results at current day, search for the next one. print "local didnt succeed..." calendar = self.builder.get_object("calendar") (cyear,cmonth,cday) = calendar.get_properties("year","month", "day") cmonth += 1 possible_days = [] for (year, month, day) in self.current_offsets: if year == cyear and cmonth == month and day > cday: possible_days.append(day) if possible_days: print "got possible days, %s" % (possible_days,) # switch to smallest possible day calendar.select_day(sorted(possible_days)[0]) self.search() else: # no days with data this month. load next month (if avail) if self.load_next_month(): print "loading next month" return self.search() else: # no next month, abort search self.reset_search() print "SEARCH ENDED!" return def reset_search(self): """ reset search variables """ self.search_in_progress = False self.last_search_iter = None def abort_search(self): """ clear the search markup and reset variables """ self.reset_search() self.update_calendar() def load_current_day(self): calendar = self.builder.get_object("calendar") if not self.current_file: return False (year, month, day) = calendar.get_properties("year", "month", "day") month += 1 # we work with 1-12 not 0-11 like the calendar widget if not self.current_offsets.has_key((year, month, day)): return False (start, end) = self.current_offsets[(year, month, day)] buffer = self.builder.get_object("history_buffer") fd = file(self.current_file, "r") fd.seek(start) buffer.set_text(strip_date(fd.read(end - start))) return True def calendar_date_changed(self, calendar): if not self.search_in_progress: self.update_calendar() else: self.update_calendar(highlight=False) self.search_calender_marks() def calendar_day_selected(self, calendar): if not self.load_current_day(): self.builder.get_object("history_buffer").set_text("") def target_combobox_changed(self, box): self.current_path = box.get_model().get_path(box.get_active_iter()) self.update_calendar() self.search_in_progress = False def history_dialog_response(self, dialog, id): dialog.destroy() def history_buffer_changed(self, buffer, *x): if self.search_in_progress: self.last_search_iter = buffer.get_start_iter() def run(tab): d = HistoryDialog(tab) dwin = d.builder.get_object("history_dialog") dwin.show_all() def setup(): pass sushi-1.4.0+dfsg/tekka/tekka/dialogs/addServer.py0000664000175000017500000000503311700417156021536 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ from gettext import gettext as _ from ..com import sushi from .. import gui from ..lib.expanding_list import ExpandingList RESPONSE_ADD = 1 def setup(): pass def dialog_response_cb(dialog, response_id, callback, widgets): if response_id == RESPONSE_ADD: server = widgets.get_object("servernameEntry").get_text() if not server: gui.mgmt.show_error_dialog( title = _("No server name given."), message = _("You must enter a server name.")) return # set text values for key in ("address","port","nick","name","nickserv"): exec ("value = widgets.get_object('%sEntry').get_text()" % key) if value: sushi.server_set(server, "server", key, value) # set autoconnect bool sushi.server_set(server, "server", "autoconnect", str (widgets.get_object( "autoConnectCheckButton").get_active()).lower()) # set up commands list = [i[0].get_text() for i in widgets.get_object("commandList").get_widget_matrix() if i[0].get_text()] if list: sushi.server_set_list(server, "server", "commands", list) callback() dialog.destroy() def run(callback): widgets = gui.builder.load_dialog("serverAdd") dialog = widgets.get_object("serverAdd") dialog.connect("response", dialog_response_cb, callback, widgets) dialog.show_all() sushi-1.4.0+dfsg/tekka/tekka/dialogs/join.py0000664000175000017500000000526511700417156020565 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ from .. import config from .. import com from .. import gui builder = gtk.Builder() def reset_values(): builder.get_object("autoJoinCheckButton").set_active(False) builder.get_object("nameEntry").set_text("#") def dialog_response_cb(dialog, id): global _current_server, builder if id == gtk.RESPONSE_OK: channel = builder.get_object("nameEntry").get_text() com.sushi.join(_current_server, channel, "") if builder.get_object("autoJoinCheckButton").get_active(): com.sushi.server_set( _current_server, channel, "autojoin", "true") dialog.hide() reset_values() def run(current_server): if not current_server: gui.show_inline_message( _("Could not determine server."), _("tekka could not figure out on which server to join."), dtype="error") else: global _current_server _current_server = current_server dialog = builder.get_object("joinDialog") dialog.set_title(_("Join a channel on %(server)s") % { "server": current_server}) dialog.show_all() def setup(): if builder.get_object("joinDialog") != None: return path = config.get("uifiles","dialogs") + "join.ui" builder.add_from_file(path) dialog = builder.get_object("joinDialog") dialog.connect("response", dialog_response_cb) # enter on entry -> join channel builder.get_object("nameEntry").connect("activate", lambda w: dialog_response_cb(dialog, gtk.RESPONSE_OK)) sushi-1.4.0+dfsg/tekka/tekka/dialogs/whois.py0000664000175000017500000000711511700417156020753 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject from gobject import TYPE_STRING from gettext import gettext as _ from .. import signals from .. import com class WhoisDialog(gtk.Dialog): def __init__(self, server, nick): gtk.Dialog.__init__(self, flags=gtk.DIALOG_DESTROY_WITH_PARENT, buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)) self.set_default_size(350, 200) self.end = False self.treeview = self._setup_treeview() self.scrolled_window = gtk.ScrolledWindow() self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.scrolled_window.add(self.treeview) self.get_content_area().add(self.scrolled_window) self.set_data(server, nick) def _setup_treeview(self): treeview = gtk.TreeView() treeview.set_model(gtk.ListStore(TYPE_STRING)) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn( "Data", renderer, text=0) treeview.append_column(column) return treeview def set_data(self, server, nick): self.nick = nick self.server = server self.set_title(_("Whois on %(server)s" % { "server":server})) label = gtk.Label() label.set_use_underline(False) label.set_text(_("Whois data of %(nick)s" % { "nick":nick})) label.show() self.treeview.get_column(0).set_widget(label) def whois_input(self, time, server, nick, message): # message == "" -> EOL if self.end: self.treeview.get_model().clear() self.end = False if message: self.treeview.get_model().append(row=(message,)) else: self.end = True diag = None def dialog_response_cb(dialog, id): if id in (gtk.RESPONSE_NONE, gtk.RESPONSE_CLOSE): global diag signals.disconnect_signal("whois", dialog.whois_input) diag = None dialog.destroy() def loading_timeout_cb(dialog): if (dialog.treeview.get_model() and len(dialog.treeview.get_model()) <= 1): dialog.end = True dialog.whois_input(0, "", "", _("No data received so far. Are you still connected?")) return False def run(server, nick): global diag if not diag: diag = WhoisDialog(server, nick) diag.connect("response", dialog_response_cb) signals.connect_signal("whois", diag.whois_input) else: diag.set_data(server, nick) com.sushi.whois(server, nick) diag.whois_input(0, "", "",_("Loading...")) diag.end = True gobject.timeout_add(20000, loading_timeout_cb, diag) diag.show_all() def setup(): pass sushi-1.4.0+dfsg/tekka/tekka/dialogs/hide.py0000664000175000017500000001151011700417156020525 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from .. import config from ..gui import tabs from ..gui import builder widgets = None active_tab = None buttons = { "joinButton":"join", "partButton":"part", "quitButton":"quit", "kickButton":"kick", "nickButton":"nick", "modeButton":"mode" } messagetypes = {} # fill types with mirrored buttons for (key, val) in buttons.items(): messagetypes[val] = key def get_tab_category(tab): cat = "" if type(active_tab) == tabs.TekkaServer: cat = "server_%s" % (active_tab.name.lower()) elif type(active_tab) == tabs.TekkaChannel: cat = "channel_%s_%s" % (active_tab.server.name.lower(), active_tab.name.lower()) elif type(active_tab) == tabs.TekkaQuery: cat = "query_%s_%s" % (active_tab.server.name.lower(), active_tab.name.lower()) return cat def get_hidden_types(tab): cat = get_tab_category(tab) return { "hide_own": config.get_list(cat, "hide_own", []), "hide": config.get_list(cat, "hide", []) } def check_empty_section(cat, data): if len(data["hide"]) == 0: config.unset(cat, "hide") if len(data["hide_own"]) == 0: config.unset(cat, "hide_own") def apply_button_setting(button): cat = get_tab_category(active_tab) d = get_hidden_types(active_tab) mtype = buttons[gtk.Buildable.get_name(button)] if not button.get_active(): # remove entry try: d["hide"].remove(mtype) except ValueError: pass else: # add entry if not given try: d["hide"].index(mtype) except ValueError: d["hide"].append(mtype) if not config.has_section(cat): config.create_section(cat) config.set_list(cat, "hide", d["hide"]) check_empty_section(cat, d) def apply_own_button_setting(button): cat = get_tab_category(active_tab) d = get_hidden_types(active_tab) mtype = buttons[gtk.Buildable.get_name(button)[:-4]] if not button.get_active(): # remove own entry try: d["hide_own"].remove(mtype) except ValueError: pass else: # add entry try: d["hide_own"].index(mtype) except ValueError: d["hide_own"].append(mtype) if not config.has_section(cat): config.create_section(cat) print "set_list(%s, hide_own, %s)" % (cat, d["hide_own"]) config.set_list(cat, "hide_own", d["hide_own"]) check_empty_section(cat, d) def apply_current_settings(): d = get_hidden_types(active_tab) for mtype in d["hide"]: button = widgets.get_object(messagetypes[mtype]) button.set_active(True) for mtype in d["hide_own"]: button = widgets.get_object(messagetypes[mtype]+"_own") button.set_active(True) def run(current_tab): global active_tab def dialog_response_cb(dialog, id): dialog.destroy() dialog = widgets.get_object("hideDialog") if not dialog: raise Exception, "Hide dialog cannot be retrieved." active_tab = current_tab apply_current_settings() dialog.connect("response", dialog_response_cb) dialog.show_all() def setup(): global widgets widgets = builder.load_dialog("hide") if not widgets: raise Exception, "Couldn't load the dialog" sigdic = { "joinButton_toggled_cb": apply_button_setting, "partButton_toggled_cb": apply_button_setting, "quitButton_toggled_cb": apply_button_setting, "kickButton_toggled_cb": apply_button_setting, "nickButton_toggled_cb": apply_button_setting, "modeButton_toggled_cb": apply_button_setting, "joinButton_own_toggled_cb": apply_own_button_setting, "partButton_own_toggled_cb": apply_own_button_setting, "quitButton_own_toggled_cb": apply_own_button_setting, "kickButton_own_toggled_cb": apply_own_button_setting, "nickButton_own_toggled_cb": apply_own_button_setting, "modeButton_own_toggled_cb": apply_own_button_setting, } widgets.connect_signals(sigdic) sushi-1.4.0+dfsg/tekka/tekka/dialogs/preferences.py0000664000175000017500000003202411700417156022120 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ # UHF = ultra high frequency :] import gtk import logging from gobject import idle_add from .. import gui from .. import config from .. import helper from ..lib.expanding_list import ExpandingList widgets = None MESSAGE_TYPES=gui.tabs.MSGTYPES def go_valid_types_toggled(typename, checkbtn): """ add the typename to the list of valid message types if the checkbox is checked, otherwise delete it """ section = "general_output" option = "valid_types" l = config.get_list(section, option, []) if typename not in l: if checkbtn.get_active(): config.append_list(section, option, typename) else: if not checkbtn.get_active(): del l[l.index(typename)] config.set_list(section, option, l) def generalOutputFilterList_instanced_widget_cb(elist, row, column, obj): if column == 0: model = gtk.ListStore(str) obj.set_model(model) renderer = gtk.CellRendererText() obj.pack_start(renderer, True) obj.add_attribute(renderer, "text", 0) for row in MESSAGE_TYPES: model.append((row,)) def fillTekka(): table = widgets.get_object("tekkaTable") # set checkbuttons for child in table.get_children(): if type(child) != gtk.CheckButton: continue name = gtk.Buildable.get_name(child) bval = config.get_bool("tekka", name) child.set_active(bval) # set font labels font = config.get("tekka", "font") widgets.get_object("fontSelectButton").set_font_name(font) def fillColors(): for key in ("own_nick", "own_text", "notification", "text_message", "text_action", "nick", "text_highlightmessage", "text_highlightaction", "last_log", "rules_color"): color = helper.color.get_color_by_key(key) widgets.get_object(key).set_color(color) btn = widgets.get_object("rules_color_yesno") btn.set_active(config.get_bool("tekka","text_rules")) btn.toggled() btn = widgets.get_object("auto_rule_color") btn.set_active(config.get("colors","rules_color") == "auto") btn.toggled() btn = widgets.get_object("irc_colors") btn.set_active(config.get_bool("colors","irc_colors")) btn.toggled() def fillChatting(): highlightList = widgets.get_object("highlightList") for key in ("quit_message", "part_message", "time_format"): val = config.get("chatting", key) widgets.get_object(key).set_text(val) i = 0 for highlight in config.get_list("chatting", "highlight_words", []): highlightList.get_widget_matrix()[i][0].set_text(highlight) highlightList.add_row() i+=1 highlightList.remove_row(i) val = config.get("chatting", "last_log_lines", default=0) widgets.get_object("last_log_lines").set_value(float(val)) def fillNickColors(): nickColorsList = widgets.get_object("nickColorsList") widgets.get_object("nick_contrast_colors").set_active( config.get_bool("colors", "nick_contrast_colors")) colors = config.get_list("colors", "nick_colors", []) if not colors: return i = 0 for color in colors: try: c = gtk.gdk.Color(color) except: c = gtk.gdk.Color() nickColorsList.get_widget_matrix()[i][0].set_color(c) nickColorsList.add_row() i+=1 nickColorsList.remove_row(i) def fillGeneralOutputFilters(): types = config.get_list("general_output", "valid_types", []) table = {} table[gui.tabs.MESSAGE] = "type_message" table[gui.tabs.ACTION] = "type_action" table[gui.tabs.HIGHMESSAGE] = "type_highlightmessage" table[gui.tabs.HIGHACTION] = "type_highlightaction" for type in types: if not table.has_key(type): logging.error("Invalid key: %s" % (type,)) continue w = widgets.get_object(table[type]) w.set_active(True) # (type, server, channel), (type, server), ... filter = config.get_list("general_output", "filter", []) generalOutputFilterList = widgets.get_object("generalOutputFilterList") i=0 for tuple in filter: try: e_tuple = eval(tuple) except BaseException as e: logging.error("Tuple '%s' in filter rule is malformed: %s" % ( tuple, e)) continue widget_row = generalOutputFilterList.get_widget_matrix()[i] combobox = widget_row[0] try: type_index = MESSAGE_TYPES.index(e_tuple[0]) except ValueError: logging.error("Unknown message type '%s'." % (e_tuple[0])) continue else: combobox.set_active(type_index) if len(e_tuple) >= 2: widget_row[1].set_text(e_tuple[1]) if len(e_tuple) == 3: widget_row[2].set_text(e_tuple[2]) generalOutputFilterList.add_row() i+=1 generalOutputFilterList.remove_row(i) def applyNickColors(): nickColorsList = widgets.get_object("nickColorsList") config.set_list("colors","nick_colors", [n[0].get_color().to_string() for n in nickColorsList.get_widget_matrix() if n and len(n) >= 1]) def applyChatting(): highlightList = widgets.get_object("highlightList") config.set_list("chatting", "highlight_words", [n[0].get_text() for n in highlightList.get_widget_matrix() if n and n[0].get_text()]) def applyGeneralOutputFilter(): generalOutputFilterList = widgets.get_object("generalOutputFilterList") filter_list = [] header = ("type", "server", "channel") for widget_row in generalOutputFilterList.get_widget_matrix(): cbox = widget_row[0] if not cbox.get_model() or cbox.get_active() == -1: logging.error("No message type selected.") continue mtype = cbox.get_model()[cbox.get_active()][0] server = widget_row[1].get_text() channel = widget_row[2].get_text() f_tuple = (str(mtype), str(server), str(channel)) filter_list.append(str(f_tuple)) config.set_list("general_output", "filter", filter_list) """ tekka page signals """ def tekka_show_status_icon_toggled(button): config.set("tekka", "show_status_icon", str(button.get_active())) gui.mgmt.visibility.show_status_icon(button.get_active()) def tekka_hide_on_close_toggled(button): config.set("tekka", "hide_on_close", str(button.get_active())) def tekka_font_clicked(button): font = button.get_font_name() if font: config.set("tekka", "font", font) gui.mgmt.apply_new_font() def tekka_use_default_font_toggled(button): config.set("tekka", "use_default_font", str(button.get_active())) gui.mgmt.apply_new_font() def tekka_auto_expand_toggled(button): config.set("tekka", "auto_expand", str(button.get_active())) def tekka_rgba_toggled(button): config.set("tekka", "rgba", str(button.get_active())) def tekka_close_maki_on_close_toggled(button): config.set("tekka", "close_maki_on_close", str(button.get_active())) """ colors page signals """ def colors_color_button_clicked(button): color_name = gtk.Buildable.get_name(button) def open_contrast_dialog(color_name): def response_cb(dialog, id, dialog_wrap): if id == gtk.RESPONSE_OK: (rcolor, ccolor) = dialog_wrap.get_current_color() if rcolor and not ccolor: value = str(rcolor) button.set_color(rcolor) elif ccolor: value = str(ccolor) button.set_color(rcolor) else: value = None if value: config.set("colors", color_name, value) dialog.destroy() dialog = gui.dialogs.show_dialog("contrast") conf_color = config.get("colors", color_name) if helper.color.is_contrast_color(conf_color): dialog.set_current_contrast_color(int(conf_color)) else: dialog.set_current_rgb_color(button.get_color()) dialog.connect("response", response_cb, dialog) open_contrast_dialog(color_name) def colors_rules_color_written(button): colors_set_color_from_button(button, "rules_color") def colors_rules_autodetect_toggled(button): if button.get_active(): config.set("colors","rules_color","auto") widgets.get_object("rules_color").set_sensitive(not button.get_active()) widgets.get_object("reset_rules_color").set_sensitive( not button.get_active()) def colors_rules_color_yesno_toggled(button): flag = button.get_active() config.set("tekka", "text_rules", str(flag)) widgets.get_object("auto_rule_color").set_sensitive(flag) widgets.get_object("rules_color").set_sensitive(flag) widgets.get_object("reset_rules_color").set_sensitive(flag) def colors_irc_colors_toggled(button): config.set("colors","irc_colors", str(button.get_active())) def reset_color(color_key): """ reset the color to it's default value (contrast color index) """ if config.is_default("colors",color_key): return config.reset_value("colors",color_key) widgets.get_object(color_key).set_color( helper.color.get_color_by_key(color_key)) """ chatting page signals """ def chatting_quit_message_written(entry, event): text = entry.get_text() config.set("chatting", "quit_message", text) def chatting_part_message_written(entry, event): text = entry.get_text() config.set("chatting", "part_message", text) def chatting_time_format_written(entry, *x): text = entry.get_text() config.set("chatting", "time_format", text) def chatting_log_lines_changed(button): value = int(button.get_value()) if value < 0: return config.set("chatting", "last_log_lines", str(value)) """ nick colors page signals """ def nick_contrast_colors_toggled_cb(button): config.set("colors", "nick_contrast_colors", str(button.get_active())) ncl = widgets.get_object("nickColorsList") if ncl: ncl.set_sensitive(not button.get_active()) """ advanced page signals """ def advanced_advancedSettingsClicked(button): d = gui.dialogs.loadDialog("advancedPreferences") if not d: logging.error("advanced settings dialog setup failed") return d.run() """ setup/run/maintenace methods """ def setup(): """ read ui stuff """ global widgets widgets = gui.builder.load_dialog("preferences") sigdic = { # tekka page "tekka_show_status_icon_toggled": tekka_show_status_icon_toggled, "tekka_hide_on_close_toggled": tekka_hide_on_close_toggled, "tekka_font_clicked": tekka_font_clicked, "tekka_use_default_font_toggled": tekka_use_default_font_toggled, "tekka_auto_expand_toggled": tekka_auto_expand_toggled, "tekka_rgba_toggled": tekka_rgba_toggled, "tekka_close_maki_on_close_toggled": tekka_close_maki_on_close_toggled, # colors page "colors_color_button_clicked": colors_color_button_clicked, "colors_rules_autodetect_toggled": colors_rules_autodetect_toggled, "colors_rules_color_yesno_toggled": colors_rules_color_yesno_toggled, "colors_irc_colors_toggled": colors_irc_colors_toggled, # chatting page "chatting_quit_message_written": chatting_quit_message_written, "chatting_part_message_written": chatting_part_message_written, "chatting_time_format_written": chatting_time_format_written, "chatting_log_lines_changed": chatting_log_lines_changed, # general output page "go_type_message_toggled": lambda *x: go_valid_types_toggled(gui.tabs.MESSAGE,*x), "go_type_action_toggled": lambda *x: go_valid_types_toggled(gui.tabs.ACTION,*x), "go_type_highlightmessage_toggled": lambda *x: go_valid_types_toggled(gui.tabs.HIGHMESSAGE,*x), "go_type_highlightaction_toggled": lambda *x: go_valid_types_toggled(gui.tabs.HIGHACTION,*x), "generalOutputFilterList_instanced_widget_cb": generalOutputFilterList_instanced_widget_cb, # nick colors page "nick_contrast_colors_toggled_cb": nick_contrast_colors_toggled_cb, # advanced page "advanced_advancedSettingsClicked": advanced_advancedSettingsClicked } def cb_factory(key): def cb(w): return reset_color(key) return cb # add color reset handler for key in ("own_nick", "own_text", "notification", "text_message", "text_action", "nick", "text_highlightmessage", "text_highlightaction", "last_log", "rules_color"): sigdic["reset_"+key+"_clicked"] = cb_factory(key) widgets.connect_signals(sigdic) def dialog_response_cb(dialog, response_id): applyNickColors() applyGeneralOutputFilter() applyChatting() dialog.destroy() def run(): dialog = widgets.get_object("preferencesDialog") # the widget is not initialized with a first row # (no_first_row in ui file set), do it here. widgets.get_object("generalOutputFilterList")._add_row(0) fillTekka() fillColors() fillChatting() fillNickColors() fillGeneralOutputFilters() dialog.connect("response", dialog_response_cb) dialog.show_all() sushi-1.4.0+dfsg/tekka/tekka/dialogs/plugins.py0000664000175000017500000001513411700417156021303 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import os import logging from gettext import gettext as _ from ..gui import builder from ..gui import mgmt from .. import plugins as pinterface from .. import config from ..lib import plugin_config_dialog widgets = None (COL_LOADED, COL_AUTOLOAD, COL_NAME, COL_PATH, COL_VERSION, COL_DESC, COL_AUTHOR) = range(7) def run(): """ show the dialog """ def dialog_response_cb(dialog, response_id): if response_id != 0: dialog.destroy() dialog = widgets.get_object("plugins") dialog.connect("response", dialog_response_cb) dialog.show_all() def update_button_sensitivity(loaded): widgets.get_object("unloadButton").set_sensitive(loaded) widgets.get_object("loadButton").set_sensitive(not loaded) def loadPlugin_clicked_cb(button): """ load active plugin. on success: - set loaded flag in treeview - update button states """ view = widgets.get_object("pluginView") store = view.get_model() path = view.get_cursor()[0] if not path: d = builder.information_dialog( _("No plugin selected."), _("You must select a plugin to load it.")) d.connect("response", lambda w,i: w.destroy()) d.show_all() return logging.info("loading plugin '%s'..." % (store[path][COL_NAME])) if pinterface.load(store[path][COL_NAME]): store.set(store.get_iter(path), COL_LOADED, True) update_button_sensitivity(loaded=True) def unloadPlugin_clicked_cb(button): """ unload active plugin. on success: - set COL_LOADED in treeview False - update button states """ view = widgets.get_object("pluginView") store = view.get_model() path = view.get_cursor()[0] if not path: d = builder.information_dialog( _("No plugin selected."), _("You must select a plugin to unload it.")) d.connect("response", lambda w,i: w.destroy()) d.show_all() return logging.info("unloading plugin '%s'..." % (store[path][COL_NAME])) if pinterface.unload(store[path][COL_NAME]): store.set(store.get_iter(path), COL_LOADED, False) update_button_sensitivity(loaded=False) def configureButton_clicked_cb(button): """ build and show configuration dialog for the currently selected plugin """ def dialog_response_cb(dialog, rID): """ apply the values and close the configuration dialog """ dialog.save() dialog.destroy() pluginView = widgets.get_object("pluginView") path = pluginView.get_cursor()[0] plugin_name = pluginView.get_model()[path][COL_NAME] dialog = plugin_config_dialog.PluginConfigDialog(plugin_name) dialog.connect("response", dialog_response_cb) dialog.show_all() def autoloadRenderer_toggled_cb(renderer, path): store = widgets.get_object("pluginStore") iter = store.get_iter(path) value = not store.get_value(iter, COL_AUTOLOAD) store.set(iter, COL_AUTOLOAD, value) list = config.get("autoload_plugins").items() name = store[path][COL_NAME] if not value: i = [i for (i,v) in list if v == name] if i: i = i[0] else: return config.unset("autoload_plugins", str(i)) else: # activated config.set("autoload_plugins", str(len(list)+1), name) def pluginView_button_press_event_cb(pluginView, event): """ activate the configure button if the selected plugin supports configuration """ if event.button == 1: # left click try: path = pluginView.get_path_at_pos(int(event.x),int(event.y))[0] pluginName = pluginView.get_model()[path][COL_NAME] except IndexError: return # no plugin selected except TypeError: return # s.a.a. loaded = pluginView.get_model()[path][COL_LOADED] update_button_sensitivity(loaded) options,err = pinterface.get_options(pluginName) if err != None: logging.error(err) mgmt.show_inline_message( "Error in %s" % (pluginName), "The config of plugin %s is faulty: %s." % ( pluginName, err), dtype="error") logging.debug(options) if options: widgets.get_object("configureButton").set_sensitive(True) else: widgets.get_object("configureButton").set_sensitive(False) def loadPluginList(): view = widgets.get_object("pluginView") view.get_model().clear() paths = config.get_list("tekka", "plugin_dirs", []) if not paths: logging.error("loadPluginList: no plugin paths!") return False list = config.get("autoload_plugins", default={}).values() for path in paths: try: for item in os.listdir(path): if item[-3:] != ".py": continue # we got a module here loaded = pinterface.is_loaded(item) try: list.index(item) except ValueError: autoload = False else: autoload = True info = pinterface.get_info(item) if not info: logging.debug( "loadPluginList: no info for plugin '%s'" % (info)) version = "N/A" desc = "N/A" author = "N/A" else: desc, version, author = info view.get_model().append( (loaded, autoload, item, os.path.join(path,item), version, desc, author)) except OSError: continue return True def setup(): global widgets widgets = builder.load_dialog("plugins") sigdic = { "loadButton_clicked_cb": loadPlugin_clicked_cb, "unloadButton_clicked_cb": unloadPlugin_clicked_cb, "configureButton_clicked_cb": configureButton_clicked_cb, "pluginView_button_press_event_cb": pluginView_button_press_event_cb, "autoloadRenderer_toggled_cb": autoloadRenderer_toggled_cb, } widgets.connect_signals(sigdic) loadPluginList() sushi-1.4.0+dfsg/tekka/tekka/dialogs/dcc.py0000664000175000017500000001247111700417156020354 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import glib import gobject import dbus import logging from gettext import gettext as _ import traceback from .. import config from ..com import parse_from, sushi from .. import gui from ..helper.dcc import s_incoming widgets = None (COL_STATUS, COL_ID, COL_SERVER, COL_PARTNER, COL_FILE, COL_SIZE, COL_PROGRESS, COL_SPEED) = range(8) class DCCWatcher(object): def __init__(self): self.timer_id = glib.timeout_add(1000, self._refresh_sends) self._init_cache() def stop(self): """ stop watching for dcc sends periodically """ gobject.source_remove(self.timer_id) def refresh(self): """ manually refresh the list by calling this method """ self._refresh_sends() def _init_cache(self): self.last_sends = [] self.row_id_map = {} def _refresh_sends(self): sends = sushi.dcc_sends() if (sends == None and not sushi.connected) or len(sends) == 0: return view = widgets.get_object("transferView") store = view.get_model() # all ids act_sends = sends[0] to_remove = set(self.last_sends) - set(act_sends) to_update = set(act_sends) - to_remove for i in range(len(sends[0])): id, server, sender, filename, size, progress, speed, status = \ [sends[n][i] for n in range(len(sends))] if id in to_update: if self.row_id_map.has_key(id): # update existing entry iter = self.row_id_map[id].iter store.set(iter, COL_STATUS, status, COL_SIZE, size, COL_PROGRESS, get_progress(progress, size), COL_SPEED, speed) else: # add new entry if not config.get_bool("dcc", "show_ident_in_dialog"): sender = parse_from(sender)[0] iter = store.append(row = ( status, id, server, sender, filename, size, get_progress(progress, size), speed)) self.row_id_map[id] = store[store.get_path(iter)] for id in to_remove: if self.row_id_map.has_key(id): store.remove(self.row_id_map[id].iter) self.last_sends = act_sends return True def get_progress(p, s): return int(float(p)/s*100) def cancel_transfer(transferID, watcher): sushi.dcc_send_remove(transferID) watcher.refresh() def get_selected_transfer_id(): view = widgets.get_object("transferView") store = view.get_model() cursor = view.get_cursor() try: id = dbus.UInt64(store[cursor[0]][COL_ID]) except: return None else: return id def dialog_response_cb(dialog, id, watcher): if id == 333: # FIXME: replace this with a meaningful ID # FIXME:: or connect to the button directly # remove was clicked def ask_are_you_sure(): # ask if the user is sure about removing the transfer def dialog_reponse_cb(dialog, id, transferID): if id == gtk.RESPONSE_YES: # yes, remove it! cancel_transfer(transferID, watcher) dialog.destroy() transferID = get_selected_transfer_id() if None == transferID: gui.mgmt.show_error_dialog( title=_("No transfer selected!"), message=_("You must select a transfer to remove it.")) else: d = gui.builder.question_dialog( title = _("Remove file transfer?"), message = _("Are you sure you want to remove the " "file transfer %(id)d?" % { "id": transferID })) d.connect("response", dialog_reponse_cb, transferID) d.show() ask_are_you_sure() else: global widgets watcher.stop() dialog.destroy() widgets = None def run(): dialog = widgets.get_object("DCCDialog") if dialog.get_property("visible"): return watcher = DCCWatcher() dialog.connect("response", dialog_response_cb, watcher) dialog.show() def setup(): global widgets if widgets != None: return widgets = gui.builder.load_dialog("dcc") # add direction icon column def type_symbol_render_cb(column, renderer, model, iter): status = model.get(iter, COL_STATUS) if status: if status[0] & s_incoming: # incoming renderer.set_property("stock-id", gtk.STOCK_GO_DOWN) else: # outgoing renderer.set_property("stock-id", gtk.STOCK_GO_UP) widgets.get_object("statusColumn").set_cell_data_func( widgets.get_object("statusRenderer"), type_symbol_render_cb) sushi-1.4.0+dfsg/tekka/tekka/main.py0000664000175000017500000010024111700417156017116 0ustar dfilonidfiloni#!/usr/bin/env python # coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ Purpose: setup and usage of submodules, main window signal handling, tekka internal signal handling, glue of all submodules """ import pygtk pygtk.require("2.0") import sys import traceback import gtk # TODO: catch gtk.Warning after init with warnings module import os import gobject import pango import dbus import webbrowser import locale import types as ptypes import logging import gettext from gettext import gettext as _ import gui import gui.tabs # local modules from . import config from . import com from . import signals from . import commands from . import plugins from .typecheck import types from .lib import nick_list_store from .lib.inline_dialog import InlineMessageDialog from .lib.welcome_window import WelcomeWindow from .lib.general_output_buffer import GOHTMLBuffer from .helper import tabcompletion from .helper import markup from .helper.URLHandler import URLHandler from .menus import * import gui.builder import gui.shortcuts """ Tekka intern signals """ def sushi_error_cb(sushi, title, message): """ Error in sushi interface occured. """ def response_cb(d, i): gui.status.unset(title) d.destroy() d = InlineMessageDialog(title, message) d.connect("response", response_cb) gui.mgmt.show_inline_dialog(d) gui.status.set_visible(title, title) def maki_connect_callback(sushi): """ connection to maki etablished """ gui.mgmt.set_useable(True) def maki_disconnect_callback(sushi): """ connection to maki lost """ gui.mgmt.set_useable(False) def tekka_server_new_nick_cb(tab, nick): """ New nick for the given tab. Apply the new nick in the GUI if the tab or a tab with the same server is active. """ activeTabs = gui.tabs.get_current_tabs() if (tab in activeTabs or (not tab.is_server() and tab.server in activeTabs)): gui.mgmt.set_nick(nick) def tekka_tab_new_markup_cb(tab): """ Push the CellRenderer to re-render the serverTree """ if not tab.path: return store = gui.widgets.get_object("tab_store") store[tab.path][0] = tab def tekka_tab_new_message_cb(tab, mtype): """ A new message of the given type was received. If the tab is active, reset the message buffer and scroll the tab's textview to bottom if auto scrolling is enabled for this window. """ if tab.is_active(): tab.set_new_message(None) if tab.window.auto_scroll and mtype: if tab.window.textview.is_smooth_scrolling(): tab.window.textview.stop_scrolling() tab.window.textview.scroll_to_bottom(no_smooth = True) else: tab.window.textview.scroll_to_bottom() else: pass def tekka_tab_new_name_cb(tab, name): tekka_tab_new_markup_cb(tab) def tekka_tab_server_connected_cb(tab, connected): """ the server of the tab connected/disconnected """ if tab.is_active(): tab.set_useable(connected) def tekka_channel_joined_cb(tab, switch): """ channel received a change on joined attribute """ if tab.is_active(): tab.set_useable(switch) def tekka_tab_switched_cb(old, new): """ switched from tab old to tab new """ inputBar = gui.widgets.get_object("input_entry") if old: itext = inputBar.get_text() old.set_input_text(itext) old.window.textview.set_read_line() inputBar.set_text("") inputBar.set_position(1) if new: inputBar.set_text(new.get_input_text()) inputBar.set_position(len(inputBar.get_text())) if new.window.auto_scroll: # XXX: Needs testing! def check_for_scrolling(): sw = new.window adj = sw.get_vadjustment() if adj.get_value() != (adj.upper - adj.page_size): sw.textview.scroll_to_bottom( no_smooth = True ) else: print "No need for scrolling!" return False gobject.idle_add(check_for_scrolling) def tekka_tab_add_cb(tab): """ a tab is added """ if gui.mgmt.is_welcome_screen(): # FIXME: this is called often if the tab is not changed gui.mgmt.visibility.show_welcome_screen(False) def tekka_tab_remove_cb(tab): """ a tab is about to be removed """ if gui.tabs.get_current_tab() == tab: # switch to another tab if tab.is_server(): # server and children are removed, choose # another server server = gui.tabs.get_next_server(tab) if server: tabs = gui.tabs.get_all_tabs(servers = [server.name]) nextTab = tabs[0] else: nextTab = None else: nextTab = gui.tabs.get_next_tab(tab) if None == nextTab: # lock interface # XXX: maybe the inputBar should # XXX:: useable, though. gui.mgmt.set_useable(False) else: nextTab.switch_to() elif (tab.is_server() and len(gui.widgets.get_object("tab_store")) == 1): gui.mgmt.set_useable(False) def tekka_channel_topic_changed_cb(tab, topic): if not tab.is_active(): return if (config.get_bool("tekka","hide_topic_if_empty") and config.get_bool("tekka", "show_topic_bar")): if topic: gui.mgmt.visibility.show_topic_bar(True) else: gui.mgmt.visibility.show_topic_bar(False) def mainWindow_scroll_event_cb(mainWindow, event): """ MOD1 + SCROLL_DOWN -> Next tab MOD1 + SCROLL_UP -> Prev. tab """ if (event.state & gtk.gdk.MOD1_MASK and event.direction == gtk.gdk.SCROLL_DOWN): gui.tabs.switch_to_next() elif (event.state & gtk.gdk.MOD1_MASK and event.direction == gtk.gdk.SCROLL_UP): gui.tabs.switch_to_previous() def mainWindow_delete_event_cb(mainWindow, event): """ If hide_on_close and the status icon are enabled, hide the main window. Otherwise stop the main loop. On hide, a read-line will be inserted in every tab. """ statusIcon = gui.widgets.get_object("status_icon") if (config.get_bool("tekka", "hide_on_close") and statusIcon and statusIcon.get_visible()): for tab in gui.tabs.get_all_tabs(): tab.window.textview.set_read_line() mainWindow.hide() return True else: gtk.main_quit() def mainWindow_focus_in_event_cb(mainWindow, event): """ Reset urgent status (if given) """ gui.mgmt.set_urgent(False) return False def mainWindow_size_allocate_cb(mainWindow, alloc): """ Main window was resized, store the new size in the config. """ if not mainWindow.window.get_state() & gtk.gdk.WINDOW_STATE_MAXIMIZED: config.set("sizes","window_width",alloc.width) config.set("sizes","window_height",alloc.height) def mainWindow_window_state_event_cb(mainWindow, event): """ Window state was changed. If it's maximized or unmaximized, save that state. """ if event.new_window_state & gtk.gdk.WINDOW_STATE_MAXIMIZED: config.set("tekka","window_maximized","True") else: config.set("tekka","window_maximized","False") def inputBar_activate_cb(inputBar): """ Enter hit, pass the inputBar text over to the commands.parseInput method and add the text to the input history. The inputBar is cleared after that. """ text = inputBar.get_text() tab = gui.tabs.get_current_tab() commands.parseInput(text) if tab: tab.input_history.add_entry(text) tab.input_history.reset() inputBar.set_text("") def inputBar_key_press_event_cb(inputBar, event): """ Up -> Input history previous entry Down -> Input history next entry Tab -> Completion of the current word Everything else than tab -> No further completion wished, tell that. """ key = gtk.gdk.keyval_name(event.keyval) tab = gui.tabs.get_current_tab() text = unicode(inputBar.get_text(), "UTF-8") if key == "Up": # get next input history item if not tab: return hist = tab.input_history.get_previous() if hist != None: inputBar.set_text(hist) inputBar.set_position(len(hist)) elif key == "Down": # get previous input history item if not tab: return hist = tab.input_history.get_next() if hist == None: return inputBar.set_text(hist) inputBar.set_position(len(hist)) elif key == "Tab": # tab completion comes here. tabcompletion.complete(tab, inputBar, text) return True if key != "Tab": tabcompletion.stopIteration() def notificationWidget_remove_cb(area, widget): """ restore the focus if a inline dialog is closed """ gui.widgets.get_object("input_entry").grab_focus() def outputShell_widget_changed_cb(shell, old_widget, new_widget): """ old_widget: OutputWindow new_widget: OutputWindow Set the current content of the output_shell in widgets store. - output_window <- new_widget - output <- new_widget.textview """ if (type(old_widget) == WelcomeWindow and type(new_widget) != WelcomeWindow): gui.mgmt.visibility.show_welcome_screen(False) gui.widgets.remove_object("output_window") gui.widgets.add_object(new_widget, "output_window") gui.widgets.remove_object("output") gui.widgets.add_object(new_widget.textview, "output") def serverTree_misc_menu_reset_activate_cb(menuItem): """ reset the markup of all tabs """ for tab in gui.tabs.get_all_tabs(): tab.set_new_message(None) def serverTree_button_press_event_cb(serverTree, event): """ A row in the server tree was activated. The main function of this method is to cache the current activated row as path. """ try: path = serverTree.get_path_at_pos(int(event.x),int(event.y))[0] tab = serverTree.get_model()[path][0] except Exception as e: tab = None if event.button == 1: # activate the tab if tab: gui.tabs.switch_to_path(path) elif event.button == 2: # if there's a tab, ask to close if tab: askToRemoveTab(tab) elif event.button == 3: # popup tab menu if tab: menu = servertree_menu.ServerTreeMenu().get_menu(tab) if not menu: logging.error("error in creating server tree tab menu.") return False else: menu.popup(None, None, None, event.button, event.time) return True else: # display misc. menu menu = gtk.Menu() reset = gtk.MenuItem(label=_(u"Reset markup")) reset.connect("activate", serverTree_misc_menu_reset_activate_cb) menu.append(reset) reset.show() menu.popup(None,None,None,event.button,event.time) return False def serverTree_row_activated_cb(serverTree, path, column): """ open the history dialog for the pointed tab """ model = serverTree.get_model() tab = model[path][0] # don't show the history dialog for server tabs, they don't # have a history. if type(tab) != gui.tabs.TekkaServer: gui.dialogs.show_dialog("history", tab) def nickList_row_activated_cb(nickList, path, column): """ The user activated a nick in the list. If there's a nick in the row a query for the nick on the current server will be opened. """ serverTab,channelTab = gui.tabs.get_current_tabs() try: name = nickList.get_model()[path][nick_list_store.COLUMN_NICK] except TypeError: # nickList has no model return except IndexError: # path is invalid return if gui.tabs.search_tab(serverTab.name, name): # already a query open return query = gui.tabs.create_query(serverTab, name) query.connected = True gui.tabs.add_tab(serverTab, query) query.print_last_log() query.switch_to() def nickList_button_press_event_cb(nickList, event): """ A button pressed inner nickList. If it's the right mouse button and there is a nick at the coordinates, pop up a menu for setting nick options. """ if event.button == 3: # right mouse button pressed. path = nickList.get_path_at_pos(int(event.x), int(event.y)) nick = None # get marked nick try: nick = nickList.get_model()[path[0]] except TypeError: # no model pass except IndexError: # path is "invalid" pass if nick: # display nick specific menu nick = nick[nick_list_store.COLUMN_NICK] menu = nicklist_menu.NickListMenu().get_menu(nick) if not menu: return False # finaly popup the menu menu.popup(None, None, None, event.button, event.time) return False def nicks_view_query_tooltip_cb(view, x, y, kbdmode, tooltip): """ generate a tooltip with the awaymessage of the nick at the given x/y coordinates. """ # TODO: would be nice to have ident string of the nick here cursor = view.get_path_at_pos(x, y) if not cursor: return user_row = view.get_model()[cursor[0]] tip = "" # away message appendix if user_row[nick_list_store.COLUMN_AWAY]: # the user is away (server,_) = gui.tabs.get_current_tabs() if server: """ msg = com.sushi.awaymessage(server.name, user_row[nick_list_store.COLUMN_NICK]) """ # TODO: retrieve awaymessage pass """ Shortcut callbacks """ def inputBar_shortcut_ctrl_u(inputBar, shortcut): """ Ctrl + U was hit, clear the inputBar """ gui.widgets.get_object("input_entry").set_text("") def output_shortcut_ctrl_l(inputBar, shortcut): """ Ctrl+L was hit, clear the outputs. """ gui.mgmt.clear_all_outputs() def output_shortcut_ctrl_f(inputBar, shortcut): """ show/hide the search toolbar """ sb = gui.widgets.get_object("output_searchbar") if sb.get_property("visible"): sb.hide() gui.widgets.get_object("input_entry").grab_focus() else: sb.show_all() sb.grab_focus() def output_shortcut_ctrl_g(inputBar, shortcut): """ search further """ gui.widgets.get_object("output_searchbar").search_further() def serverTree_shortcut_ctrl_Page_Up(serverTree, shortcut): """ Ctrl+Page_Up was hit, go up in server tree """ gui.tabs.switch_to_previous() def serverTree_shortcut_ctrl_Page_Down(serverTree, shortcut): """ Ctrl+Page_Down was hit, go down in server tree """ gui.tabs.switch_to_next() def askToRemoveTab(tab): def response_handler(dialog, response_id): if response_id == gtk.RESPONSE_YES: if tab.is_channel(): com.sushi.part(tab.server.name, tab.name, config.get("chatting", "part_message", "")) elif tab.is_server(): com.sushi.quit(tab.name, config.get("chatting", "quit_message", "")) gui.tabs.remove_tab(tab) dialog.destroy() if tab.is_channel(): message = _(u"Do you really want to close channel “%(name)s”?") elif tab.is_query(): message = _(u"Do you really want to close query “%(name)s”?") elif tab.is_server(): message = _(u"Do you really want to close server “%(name)s”?") dialog = InlineMessageDialog( message % { "name": tab.name }, icon=gtk.STOCK_DIALOG_QUESTION, buttons=gtk.BUTTONS_YES_NO ) dialog.connect("response", response_handler) gui.mgmt.show_inline_dialog(dialog) def serverTree_shortcut_ctrl_w(serverTree, shortcut): """ Ctrl+W was hit, close the current tab (if any) """ tab = gui.tabs.get_current_tab() if not tab: return askToRemoveTab(tab) def output_shortcut_Page_Up(inputBar, shortcut): """ Page_Up was hit, scroll up in output """ vadj = gui.widgets.get_object("output_window").get_vadjustment() if vadj.get_value() == 0.0: return # at top already n = vadj.get_value()-vadj.page_size if n < 0: n = 0 gobject.idle_add(vadj.set_value,n) def output_shortcut_Page_Down(inputBar, shortcut): """ Page_Down was hit, scroll down in output """ vadj = gui.widgets.get_object("output_window").get_vadjustment() if (vadj.upper - vadj.page_size) == vadj.get_value(): return # we are already at bottom n = vadj.get_value()+vadj.page_size if n > (vadj.upper - vadj.page_size): n = vadj.upper - vadj.page_size gobject.idle_add(vadj.set_value,n) def inputBar_shortcut_ctrl_c(inputBar, shortcut): """ Ctrl + C was hit. Check every text input widget for selection and copy the selection to clipboard. FIXME: this solution sucks ass. """ buffer = gui.widgets.get_object("output").get_buffer() goBuffer = gui.widgets.get_object("general_output").get_buffer() topicBar = gui.widgets.get_object("topic_label") cb = gtk.Clipboard() if buffer.get_property("has-selection"): buffer.copy_clipboard(cb) elif inputBar.get_selection_bounds(): inputBar.copy_clipboard() elif goBuffer.get_property("has-selection"): goBuffer.copy_clipboard(cb) elif topicBar.get_selection_bounds(): bounds = topicBar.get_selection_bounds() text = unicode(topicBar.get_text(), "UTF-8") text = text[bounds[0]:bounds[1]] cb.set_text(text) def changeTopic_shortcut(inputBar, shortcut): """ The user wants to change the topic for the current tab. """ channel = gui.tabs.get_current_tab() if not channel or not channel.is_channel(): return menu = servertree_menu.ServerTreeMenu() menu.get_menu(channel) menu.widgets.get_object("setTopicItem").activate() def serverTree_query_tooltip_cb(widget, x, y, kbdmode, tooltip): """ show tooltips for treeview rows. Server tabs: Nick: Channel tabs: Users: Topic: Last Sentence: Query tabs: Last Sentence: """ def limit(s): limit = int(config.get("tekka","popup_line_limit")) if len(s) > limit: return markup.escape(s[:limit-3]+u"...") return markup.escape(s) path = widget.get_path_at_pos(x,y) if not path: return path = path[0] try: tab = widget.get_model()[path][0] except IndexError: return if tab.is_server(): # TODO: away status s = "" + _("Nickname: ") + "" + markup.escape(tab.nick) elif tab.is_channel(): s = "" +_("User: ") + "" + str(len(tab.nickList)) +\ "\n" + _("Topic: ") + "" +\ limit(tab.topic) +\ "\n" + _("Last sentence: ") + "" +\ limit(tab.window.textview.get_last_line()) elif tab.is_query(): s = "" + _("Last sentence: ") + "" +\ limit(tab.window.textview.get_last_line()) tooltip.set_markup(s) return True def serverTree_render_server_cb(column, renderer, model, iter): """ Renderer func for column "Server" in servertree """ tab = model.get(iter, 0) if not tab or not tab[0]: return renderer.set_property("markup",tab[0].markup()) def nickList_render_nicks_cb(column, renderer, model, iter): """ Renderer func for column "Nicks" in NickList """ if not com.sushi.connected: # do not render if no connection exists return # highlight own nick serverTab = gui.tabs.get_current_tabs()[0] if not serverTab: return nick = model.get(iter, 1) away = model.get(iter, 2) if not nick: return nick = nick[0] away = away[0] # highlight own nick if com.get_own_nick(serverTab.name) == nick: renderer.set_property("weight", pango.WEIGHT_BOLD) else: renderer.set_property("weight", pango.WEIGHT_NORMAL) if away: renderer.set_property("style", pango.STYLE_ITALIC) else: renderer.set_property("style", pango.STYLE_NORMAL) def treemodel_rows_reordered_cb(treemodel, path, iter, new_order): """ new_order is not accessible, so hack arround it... """ # explicit import because what we do is bad. # there should be no one writing on current_path from gui.tabs.current import _set_current_path updated = False for row in treemodel: if not row[0]: continue if gui.tabs.get_current_path() == row[0].path and not updated: # update the currentPath cache _set_current_path(row.path) updated = True # update the tab's path cache row[0].path = row.path for child in row.iterchildren(): if not child[0]: continue if (gui.tabs.get_current_path() == child[0].path and not updated): _set_current_path(child.path) updated = True # update path's tab cache child[0].path = child.path def paned_notify_cb(paned, gparam): if not paned_notify_cb.init_done: return if gparam.name == "position": # only save if there are no inline dialogs displayed ids = gui.widgets.get_object("notification_vbox").get_children() if len(ids) == 0: config.set("sizes", gtk.Buildable.get_name(paned), paned.get_property("position")) paned_notify_cb.init_done = False """ Initial setup routines """ def setup_main_window(): """ - set window title - set window icon - set window size - set window state """ win = gui.widgets.get_object("main_window") win.set_title("tekka IRC client") if config.get_bool("tekka", "rgba"): colormap = win.get_screen().get_rgba_colormap() if colormap: gtk.widget_set_default_colormap(colormap) try: img = gtk.icon_theme_get_default().load_icon("tekka",64,0) win.set_icon(img) except gobject.GError: # file not found pass # Restore sizes from last start width = config.get("sizes","window_width") height = config.get("sizes","window_height") if width and height: win.resize(int(width),int(height)) # Restore window state from last start if config.get_bool("tekka","window_maximized"): win.maximize() # enable scrolling through server tree by scroll wheel def kill_mod1_scroll(w,e): if e.state & gtk.gdk.MOD1_MASK: w.emit_stop_by_name("scroll-event") for widget in ("general_output_window", "tabs_window", "nicks_window"): gui.widgets.get_object(widget).connect("scroll-event", kill_mod1_scroll) win.show() def setup_tabs_view(): """ Setup tab sorting, setup tab rendering """ model = gui.widgets.get_object("tab_store") # Sorting def cmpl(m,i1,i2): " compare columns lower case " a = m.get_value(i1, 0) b = m.get_value(i2, 0) c, d = None, None if a: c=a.name.lower() if b: d=b.name.lower() return cmp(c,d) model.set_sort_func(1, lambda m,i1,i2,*x: cmpl(m,i1,i2)) model.set_sort_column_id(1, gtk.SORT_ASCENDING) # Setup the renderer column = gui.widgets.get_object("tabs_view_name_column") column.set_cell_data_func( gui.widgets.get_object("tabs_view_name_renderer"), serverTree_render_server_cb) def setup_general_ouptut(): """ set the textview's buffer to a GOHTMLBuffer and add the textview as general_output to the widgets store """ w = gui.widgets.get_object("general_output_window") w.textview.set_buffer(GOHTMLBuffer(handler=URLHandler)) gui.widgets.add_object(w.textview, "general_output") def setup_nicks_view(): """ setup custom rendering of nick column """ column = gui.widgets.get_object("nicks_store_nick_column") column.set_cell_data_func( gui.widgets.get_object("nicks_store_nick_renderer"), nickList_render_nicks_cb) def load_paned_positions(): """ restore the positions of the paned dividers for the list, main and output paneds. """ paneds = [ "list_vpaned", "main_hpaned", "output_vpaned"] for paned_name in paneds: paned = gui.widgets.get_object(paned_name) position = config.get("sizes", paned_name, None) paned.set_property("position-set", True) if position == None: continue try: paned.set_position(int(position)) except ValueError: logging.error("Failed to set position for paned %s" % ( paned.name)) continue def setup_paneds(): load_paned_positions() paned_notify_cb.init_done = True return False def setup_fonts(): """ add default font callback """ try: import gconf def default_font_cb (client, id, entry, data): if not config.get_bool("tekka", "use_default_font"): return gui.mgmt.apply_new_font() c = gconf.client_get_default() c.add_dir("/desktop/gnome/interface", gconf.CLIENT_PRELOAD_NONE) c.notify_add("/desktop/gnome/interface/monospace_font_name", default_font_cb) except: # ImportError or gconf reported a missing dir. pass def setup_topic_label(): """ tooltip style box arround topic label """ def expose_event_cb(box, event): a = box.get_allocation() box.style.paint_flat_box( box.window, gtk.STATE_NORMAL, gtk.SHADOW_ETCHED_IN, None, box, "tooltip", a.x, a.y, a.width, a.height - 1 ) return False gui.widgets.get_object("topic_label").connect( "expose-event", expose_event_cb) def setupGTK(): """ Set locale, load UI file, connect signals, setup widgets. """ uifiles = config.get("uifiles", default={}) # setup locale stuff try: locale.setlocale(locale.LC_ALL, '') locale.bindtextdomain("tekka", config.get("tekka","locale_dir")) locale.textdomain("tekka") except: pass # Fix about dialog URLs def about_dialog_url_hook (dialog, link, data): if gtk.gtk_version >= (2, 16, 0): return webbrowser.open(link) gtk.about_dialog_set_url_hook(about_dialog_url_hook, None) # Fire gettext up with our locale directory gettext.bindtextdomain("tekka", config.get("tekka","locale_dir")) gettext.textdomain("tekka") # parse ui file for main window gui.builder.load_main_window(uifiles["mainwindow"]) setup_main_window() mmc = gui.widgets.get_object("main_menu_context") # tell the searchbar where it can get it's input gui.widgets.get_object("output_searchbar").textview_callback =\ lambda: gui.widgets.get_object("output") # connect tab control signals gui.tabs.add_callbacks({ "new_message": tekka_tab_new_message_cb, "new_name": tekka_tab_new_name_cb, "add": tekka_tab_add_cb, "remove": tekka_tab_remove_cb, "new_markup": tekka_tab_new_markup_cb, "server_connected": tekka_tab_server_connected_cb, "joined": tekka_channel_joined_cb, "new_nick": tekka_server_new_nick_cb, "tab_switched": tekka_tab_switched_cb, "topic": tekka_channel_topic_changed_cb, }) # connect main window signals: sigdic = { # main window signals "main_window_delete_event": mainWindow_delete_event_cb, "main_window_focus_in_event": mainWindow_focus_in_event_cb, "main_window_size_allocate": mainWindow_size_allocate_cb, "main_window_window_state_event": mainWindow_window_state_event_cb, "main_window_scroll_event": mainWindow_scroll_event_cb, # server tree signals "tabs_view_button_press_event" : serverTree_button_press_event_cb, "tabs_view_row_activated": serverTree_row_activated_cb, "tabs_view_query_tooltip": serverTree_query_tooltip_cb, # Store of the tabs view "tab_store_rows_reordered": treemodel_rows_reordered_cb, # Input entry... "input_entry_activate": inputBar_activate_cb, "input_entry_key_press_event": inputBar_key_press_event_cb, # Notification VBox "notification_vbox_remove": notificationWidget_remove_cb, "output_shell_widget_changed": outputShell_widget_changed_cb, # nick list signals "nicks_view_row_activated": nickList_row_activated_cb, "nicks_view_button_press_event": nickList_button_press_event_cb, "nicks_view_query_tooltip": nicks_view_query_tooltip_cb, # watch for position change of paneds "list_vpaned_notify": paned_notify_cb, "main_hpaned_notify": paned_notify_cb, "output_vpaned_notify": paned_notify_cb, # tekka menu context "tekka_server_list_item_activate": mmc.tekka.connect_activate_cb, "tekka_quit_item_activate": mmc.tekka.quit_activate_cb, # maki menu context "maki_connect_item_activate": mmc.maki.connect_activate_cb, "maki_disconnect_item_activate": mmc.maki.disconnect_activate_cb, "maki_shutdown_item_activate": mmc.maki.shutdown_activate_cb, # view menu context "view_general_output_item_toggled": mmc.view.showGeneralOutput_toggled_cb, "view_side_pane_item_toggled": mmc.view.showSidePane_toggled_cb, "view_status_bar_item_toggled": mmc.view.showStatusBar_toggled_cb, "view_status_icon_item_toggled": mmc.view.showStatusIcon_toggled_cb, "view_topic_bar_item_toggled": mmc.view.showTopicBar_toggled_cb, # tools menu context "tools_channel_list_item_activate": mmc.tools.channelList_activate_cb, "tools_file_transfers_item_activate" : mmc.tools.dcc_activate_cb, "tools_plugins_item_activate" : mmc.tools.plugins_activate_cb, "tools_debug_item_activate" : mmc.tools.debug_activate_cb, "tools_preferences_item_activate" : mmc.tools.preferences_activate_cb, # help menu context "help_irc_colors_item_activate": mmc.help.colors_activate_cb, "help_about_item_activate": mmc.help.about_activate_cb, } gui.widgets.connect_signals(sigdic) # push status messages directly in the status bar gui.status.connect("set-visible-status", lambda w,s,m: gui.widgets.get_object("statusbar")\ .push(gui.status.id(s), m)) # pop status message if they're unset gui.status.connect("unset-status", lambda w,s: gui.widgets.get_object("statusbar")\ .pop(gui.status.id(s))) # initialize output_shell again (signals are connected now) gui.widgets.get_object("output_shell").reset() # setup more complex widgets setup_tabs_view() setup_nicks_view() setup_general_ouptut() setup_topic_label() # apply visibility to widgets from config mmc.view.apply_visibility_settings() gui.mgmt.visibility.apply_visibility_from_config() setup_fonts() # set input font gui.mgmt.set_font(gui.widgets.get_object("input_entry"), gui.mgmt.get_font()) # set general output font gui.mgmt.set_font(gui.widgets.get_object("general_output"), gui.mgmt.get_font()) gui.shortcuts.add_handlers({ "clear_outputs": output_shortcut_ctrl_l, "output_page_up": output_shortcut_Page_Up, "output_page_down": output_shortcut_Page_Down, "input_clear_line": inputBar_shortcut_ctrl_u, "input_search": output_shortcut_ctrl_f, "input_search_further": output_shortcut_ctrl_g, "input_copy": inputBar_shortcut_ctrl_c, "change_topic": changeTopic_shortcut, "servertree_previous": serverTree_shortcut_ctrl_Page_Up, "servertree_next": serverTree_shortcut_ctrl_Page_Down, "servertree_close": serverTree_shortcut_ctrl_w, "show_sidepane": lambda w,s: w.set_active(not w.get_active()), }) gui.shortcuts.setup_shortcuts() gui.mgmt.visibility.show_welcome_screen(True) # disable the GUI and wait for commands :-) gui.mgmt.set_useable(False) gobject.idle_add(setup_paneds) def tekka_excepthook(extype, exobj, extb): """ we got an exception, print it in a dialog box and, if possible, to the standard output. """ message = "%s\n%s: %s\n" % ( "".join(traceback.format_tb(extb)), extype.__name__, str(exobj)) try: print >> sys.stderr, message except: pass self = tekka_excepthook def dialog_response_cb(dialog, rid): del self.dialog dialog.destroy() if not hasattr(self, "dialog"): from .lib.error_dialog import ErrorDialog self.dialog = ErrorDialog(message) self.dialog.connect("response", dialog_response_cb) self.dialog.show_all() else: self.dialog.set_message(message) sys.__excepthook__(extype, exobj, extb) def setup_logging(): """ set the path of the logfile to tekka.logfile config value and create it (including path) if needed. After that, add a logging handler for exceptions which reports exceptions catched by the logger to the tekka_excepthook. (DBus uses this) """ try: class ExceptionHandler(logging.Handler): """ handler for exceptions caught with logging.error. dump those exceptions to the exception handler. """ def emit(self, record): if record.exc_info: tekka_excepthook(*record.exc_info) logfile = config.get("tekka","logfile") logdir = os.path.dirname(logfile) if not os.path.exists(logdir): os.makedirs(logdir) logging.basicConfig(filename = logfile, level = logging.DEBUG, filemode="w") logging.getLogger("").addHandler(ExceptionHandler()) except BaseException as e: print >> sys.stderr, "Logging init error: %s" % (e) def setup(): """ Setup the UI """ # load config file, apply defaults config.setup() # create logfile, setup logging module setup_logging() # setup callbacks com.sushi.g_connect("sushi-error", sushi_error_cb) com.sushi.g_connect("maki-connected", maki_connect_callback) com.sushi.g_connect("maki-disconnected", maki_disconnect_callback) signals.setup() # build graphical interface setupGTK() # setup exception handler sys.excepthook = tekka_excepthook def main(): """ Fire up the UI """ # connect to maki daemon com.connect() plugins.load_autoloads() # start main loop gtk.main() # after main loop break, write config config.write_config_file() # At last, close maki if requested if config.get_bool("tekka", "close_maki_on_close"): com.sushi.shutdown(config.get("chatting", "quit_message", "")) sushi-1.4.0+dfsg/tekka/tekka/typecheck.py0000664000175000017500000000574211700417156020163 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import inspect def types (**type_dict): def decorate (fun): def typecheck_decorator (*args, **kwargs): argspec = inspect.getargspec (fun) parameters = argspec[0] check_dict = {} # make dict out of tuple parameters and update # them with values from kwargs for i in range (len(args[:len(parameters)])): check_dict[parameters[i]] = args[i] check_dict.update (kwargs) for t_param,t_type in type_dict.items(): def raise_error (origin_name, foreign_name): raise TypeError,\ "Parameter '%s' of function '%s' must "\ "be '%s'. ('%s' given)." % ( t_param, fun.func_name, origin_name, foreign_name) try: foreign = check_dict[t_param] foreign_type = type (check_dict[t_param]) except KeyError: # skip, this happens if an argument is not # given, let python handle this. continue # FIXME redundant code here... if type (t_type) == tuple: # more than one type given if (not isinstance(foreign, t_type) and (not issubclass(foreign, t_type))): typelist_name = " or ".join ( [n.__name__ for n in t_type]) raise_error (typelist_name, foreign_type.__name__) elif (type (t_type) == type or type(t_type).__name__ == "GObjectMeta"): # one type to check if (not isinstance(foreign, t_type) and (foreign == type and not issubclass(foreign, t_type))): raise_error (t_type.__name__, foreign_type.__name__) else: # no valid type-type raise TypeError, "Only tuple or type allowed for "\ "named parameters of function types ('%s' given)." % ( type (t_type).__name__) return fun (*args, **kwargs) return typecheck_decorator return decorate sushi-1.4.0+dfsg/tekka/tekka/lib/0000775000175000017500000000000011700417156016370 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/lib/__init__.py0000664000175000017500000000244611700417156020507 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ __all__ = [] sushi-1.4.0+dfsg/tekka/tekka/lib/search_toolbar.py0000664000175000017500000001263511700417156021740 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from .spell_entry import SpellEntry class SearchBar(gtk.Table): __gtype_name__ = "SearchBar" @property def textview_callback(self): return self._textview_callback @textview_callback.setter def textview_callback(self, callback): self._textview_callback = callback @property def textview(self): if self.textview_callback: return self.textview_callback() return self._textview @textview.setter def textview(self, textview): if self.textview_callback: self._textview = self.textview_callback() else: self._textview = textview @property def search_term(self): return self.search_entry.get_text() @search_term.setter def search_term(self, text): self.search_entry.set_text(text) @property def autohide(self): return self._autohide @autohide.setter def autohide(self, value): self._autohide = value # connect/disconnect the focus-out-event for auto-hiding if value: id = self.search_entry.connect( "focus-out-event", self.search_entry_focus_out_cb) self._autohide_sig_id = id else: if hasattr(self, "_autohide_sig_id"): self.search_entry.disconnect(self._autohide_sig_id) @property def default_buttons(self): return self._default_buttons @default_buttons.setter def default_buttons(self, value): """ default button behaviour (buttons will be connected to self.search_button_clicked_cb) if value == True Otherwise the handler will be disconnected. """ if value: h1 = self.search_button.connect("clicked", self.search_button_clicked_cb) h2 = self.search_entry.connect("activate", self.search_button_clicked_cb) self._btn_handler_1 = h1 self._btn_handler_2 = h2 else: if hasattr(self, "_btn_handler_1"): self.disconnect(self._btn_handler_1) self.disconnect(self._btn_handler_2) def __init__(self, textview=None, textview_callback = None, autohide=True, default_buttons=True): """ textview = TextView to operate on textview_callback = callback wich returns a TextView to operate on autohide = hide on focus loss if enabled (True) """ super(SearchBar,self).__init__(rows=1, columns=2) # arange widgets self.set_property("row-spacing", 1) self.search_entry = SpellEntry() self.attach(self.search_entry, 0, 1, 1, 2) self.child_set_property(self.search_entry, "y-options", gtk.SHRINK) self.search_button = gtk.ToolButton(stock_id = gtk.STOCK_FIND) self.attach(self.search_button, 1, 2, 1, 2) self.child_set_property(self.search_button, "y-options", gtk.SHRINK) self.child_set_property(self.search_button, "x-options", gtk.SHRINK) # setup own properties self.last_iter = None self.last_result = "" self.textview_callback = textview_callback self.textview = textview self.autohide = autohide # connect widget signals self.default_buttons = default_buttons def search_entry_focus_out_cb(self, entry, event): self.hide() def search_further(self): self.search_button_clicked_cb(None) def search_button_clicked_cb(self, button): if not self.search_term or not self.textview: return if not self.last_iter or self.last_result != self.search_term: self.last_iter = self.textview.get_buffer().get_start_iter() result = self.last_iter.forward_search(self.search_term, gtk.TEXT_SEARCH_TEXT_ONLY) if not result: return self.last_iter = result[1] self.last_result = self.textview.get_buffer().get_text(*result) self.textview.get_buffer().select_range(*result) # scroll the textview self.textview.scroll_to_iter(result[0], 0.0) def grab_focus(self): self.search_entry.grab_focus() def test(): win = gtk.Window() win.resize(400,400) vbox = gtk.VBox() tv = gtk.TextView() tv.get_buffer().set_text( """Oh hai! Das ist ein Test! Wer hier suchen will der findet das. Auch doppelte und doppelte Woerter. """) bar = SearchBar(textview_callback=lambda: tv, autohide=False) vbox.add(tv) vbox.add(bar) vbox.child_set_property(bar, "fill", False) vbox.child_set_property(bar, "expand", False) bar.grab_focus() win.add(vbox) win.connect("destroy", lambda *x: gtk.main_quit()) win.show_all() gtk.main() if __name__ == "__main__": test() sushi-1.4.0+dfsg/tekka/tekka/lib/output_shell.py0000664000175000017500000000473111700417156021476 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject from .output_window import OutputWindow from ..typecheck import types class OutputShell(gtk.VBox): """ A shell for one OutputWindow with methods to display another OutputWindow. """ __gtype_name__ = "OutputShell" @types (widget = OutputWindow) def __init__(self, window=OutputWindow()): """ Takes a default window which is shown if reset() is called (which is the default). """ gtk.VBox.__init__(self) self.init_window = window self.output_window = None self.reset() @types (new_window = OutputWindow) def set(self, new_window): """ Set a new OutputWindow which replaces the current. Emits widget-changed with the old and the new widget. """ old_window = self.output_window if old_window: self.remove(old_window) self.pack_start(new_window) self.output_window = new_window self.emit("widget-changed", old_window, new_window) def reset(self): """ Reset to the default window. """ self.set(self.init_window) def get(self): """ Return the current OutputWindow """ return self.output_window gobject.signal_new( "widget-changed", OutputShell, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,gobject.TYPE_PYOBJECT)) sushi-1.4.0+dfsg/tekka/tekka/lib/output_textview.py0000664000175000017500000001430111700417156022240 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject from threading import Timer # for smooth scrolling from .htmlbuffer import HTMLBuffer from ..helper import URLHandler from .. import config class OutputTextView(gtk.TextView): def __init__(self): gtk.TextView.__init__(self, HTMLBuffer(handler=URLHandler.URLHandler)) self.set_property("editable", False) self.set_property("can-focus", False) self.set_property("wrap-mode", gtk.WRAP_WORD_CHAR) self.set_property("cursor-visible", False) self.read_line = () ## self.smooth_id = None #self.smooth_scroll_timer is set in smooth_scroll_to_end ## """ < """ # Smooth scrolling inspired by Gajim Code # smooth scroll constants MAX_SCROLL_TIME = 0.4 # seconds SCROLL_DELAY = 33 # milliseconds """ TODO: optimize the whole code for manual smooth TODO:: scrolling even if the slider is set directly TODO:: to a position. This needs a replacement for TODO:: the current end-mark (the bottom of the buffer) """ def smooth_scroll(self): """ idle add handler for smooth scrolling. Returns True if it's going to be recalled. Scrolls 1/3rd of the distance to the bottom. TODO: add direction parameter for use with TODO:: manual scrolling. """ parent = self.get_parent() if not parent: return False vadj = parent.get_vadjustment() max_val = vadj.upper - vadj.page_size cur_val = vadj.get_value() # scroll by 1/3rd of remaining distance onethird = cur_val + ((max_val - cur_val) / 3.0) vadj.set_value(onethird) if max_val - onethird < 0.1: self._do_smooth_scroll_timeout() return False return True def _smooth_scroll_timeout(self): gobject.idle_add(self._do_smooth_scroll_timeout) def _do_smooth_scroll_timeout(self): """ Timout handler. Time's up, if we were done, ok, if not and it's remaing space given, remove the timer and jump fast forward. """ if not self.smooth_id: # we finished scrolling return False parent = self.get_parent() if parent: vadj = parent.get_vadjustment() vadj.set_value(vadj.upper - vadj.page_size) gobject.source_remove(self.smooth_id) self.smooth_id = None return False def _smooth_scroll_to_end(self): """ Call SCROLL_DELAY seconds smooth_scroll and scroll 1/3 of the distance. If MAX_SCROLL_TIME is reached and we're not at the end, fast forward. """ if None != self.smooth_id: # already scrolling return False self.smooth_id = gobject.timeout_add(self.SCROLL_DELAY, self.smooth_scroll) self.smooth_scroll_timer = Timer(self.MAX_SCROLL_TIME, self._smooth_scroll_timeout) self.smooth_scroll_timer.start() return False def _scroll_to_end(self): """ Scroll normally to the end of the buffer """ # TODO: could be replaced by parent -> vscrollbar -> adj.value = 0 parent = self.get_parent() buffer = self.get_buffer() end_mark = buffer.create_mark("end", buffer.get_end_iter(), False) self.scroll_to_mark(end_mark, 0, True, 0, 1) # reset horizontal scrollbar (do avoid side effects) # FIXME: maybe straight left is not that good for # FIXME:: non-western encodings if parent: adjustment = parent.get_hadjustment() adjustment.set_value(0) # avoid recalling through idle_add return False """ > """ def is_smooth_scrolling(self): """ return if we're in the middle of smooth scrolling process """ return self.smooth_id != None def stop_scrolling(self): """ interrupts smooth scrolling procedure """ if self.smooth_id: gobject.source_remove(self.smooth_id) self.smooth_id = None self.smooth_scroll_timer.cancel() def scroll_to_bottom(self, no_smooth = False): """ scroll to the end of the textbuffer """ if config.get_bool("tekka","smooth_scrolling") and not no_smooth: self._smooth_scroll_to_end() else: self._scroll_to_end() def get_last_line(self): """ returns the last readable line (without read_line) """ buffer = self.get_buffer() count = buffer.get_line_count() if self.read_line: count -= 2 lineEnd = buffer.get_iter_at_mark(self.read_line[1]) else: lineEnd = buffer.get_end_iter() if count <= 0: return "" lineStart = buffer.get_iter_at_line(count) return buffer.get_text(lineStart, lineEnd) def set_read_line(self): buffer = self.get_buffer() if self.read_line: markA, markB = self.read_line[1:] iterA = buffer.get_iter_at_mark(markA) iterB = buffer.get_iter_at_mark(markB) if None in (iterA, iterB): raise ValueError, "set_read_line: %s,%s in None." % ( iterA, iterB) buffer.delete(iterA, iterB) buffer.remove_tag(self.read_line[0], iterA, iterB) tag = buffer.create_tag(None, justification = gtk.JUSTIFY_CENTER, strikethrough = True) end_iter = buffer.get_end_iter() start_mark = buffer.create_mark(None, end_iter, True) buffer.insert_with_tags(end_iter, "\n"+" "*int(config.get("tekka","divider_length")), tag) end_mark = buffer.create_mark(None, buffer.get_end_iter(), True) self.read_line = (tag, start_mark, end_mark) sushi-1.4.0+dfsg/tekka/tekka/lib/status_icon.py0000664000175000017500000000464211700417156021303 0ustar dfilonidfiloni""" Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ import logging from .. import gui from .. import config class TekkaStatusIcon(gtk.StatusIcon): def __init__(self): gtk.StatusIcon.__init__(self) self.set_tooltip("tekka IRC client") self.set_from_icon_name("tekka") self.connect("activate", self.activate_cb) self.connect("popup-menu", self.popup_menu_cb) def activate_cb(self, icon): """ Click on status icon """ mw = gui.widgets.get_object("main_window") if mw.get_property("visible"): mw.hide() else: mw.show() def popup_menu_cb(self, statusIcon, button, time): """ User wants to see the menu of the status icon """ m = gtk.Menu() if gui.widgets.get_object("main_window").get_property("visible"): msg = _("Hide main window") else: msg = _("Show main window") hide = gtk.MenuItem(label= msg) m.append(hide) hide.connect("activate", self.activate_cb) sep = gtk.SeparatorMenuItem() m.append(sep) quit = gtk.ImageMenuItem(stock_id=gtk.STOCK_QUIT) m.append(quit) quit.connect("activate", lambda *x: gtk.main_quit()) m.show_all() m.popup(None, None, gtk.status_icon_position_menu, button, time, statusIcon) sushi-1.4.0+dfsg/tekka/tekka/lib/welcome_window.py0000664000175000017500000001000611700417156021761 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ from .. import com from .. import config from .output_window import OutputWindow class WelcomeWindow(OutputWindow): def __init__(self, *args, **kwargs): OutputWindow.__init__(self, *args, **kwargs) self.set_properties( hscrollbar_policy=gtk.POLICY_AUTOMATIC, vscrollbar_policy = gtk.POLICY_NEVER ) self.remove(self.textview) self.table = gtk.Table(rows = 2, columns = 2) self.table.set_homogeneous(False) self.table.set_property("border-width", 12) try: self.pixbuf = gtk.icon_theme_get_default().load_icon("tekka",128,0) except: self.pixbuf = None self.image = gtk.image_new_from_pixbuf(self.pixbuf) # Create Header label self.label = gtk.Label() self.label.set_property("yalign", 1) self.label.set_property("xalign", 0.05) self.label.set_markup( _("Welcome to tekka!")) # Add Image to table self.ibox = gtk.EventBox() self.ibox.add(self.image) self.table.attach(self.ibox, 0, 1, 0, 2, xoptions=gtk.FILL|gtk.SHRINK, yoptions = gtk.FILL|gtk.EXPAND) # Add Label to table self.lbox = gtk.EventBox() self.lbox.add(self.label) self.table.attach(self.lbox, 1, 2, 0, 1, xoptions=gtk.FILL|gtk.EXPAND, yoptions=gtk.FILL|gtk.EXPAND) # Create Description label self.descr = gtk.Label() self.descr.set_properties( xalign=0.05, yalign=0.2, selectable=True, use_markup=True, width_chars=30, wrap=True) # Add Description to table self.dbox = gtk.EventBox() self.dbox.add(self.descr) self.table.attach(self.dbox, 1, 2, 1, 2, xoptions=gtk.FILL|gtk.EXPAND, yoptions=gtk.FILL|gtk.EXPAND) def mod_bg(w, c): # for debugging purposes if False: s = w.get_style().copy() s.bg[gtk.STATE_NORMAL] = c w.set_style(s) mod_bg(self.lbox, gtk.gdk.Color("#FF0000")) mod_bg(self.dbox, gtk.gdk.Color("#00FF00")) mod_bg(self.ibox, gtk.gdk.Color("#0000FF")) self.add_with_viewport(self.table) if com.sushi.connected: self.sushi_connected_cb(com.sushi) else: self.sushi_disconnected_cb(com.sushi) com.sushi.g_connect("maki-connected", self.sushi_connected_cb) com.sushi.g_connect("maki-disconnected", self.sushi_disconnected_cb) def sushi_connected_cb(self, sushi): s = _("You are connected to maki. The next step " "is to connect to a server via the server " "dialog in the tekka menu.") self.descr.set_markup(s) def sushi_disconnected_cb(self, sushi): s = _("You are not connected to maki. " "Without maki you can not connect to " "servers or write messages.\n\n" "If you are having problems running maki " "visit http://sushi.ikkoku.de/ and look whether there is " "a solution for your problem. Otherwise, feel free " "to ask for support.") self.descr.set_markup(s) sushi-1.4.0+dfsg/tekka/tekka/lib/topic_dialog.py0000664000175000017500000001000311700417156021371 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ from .. import signals from .. import gui from ..helper import color from ..com import sushi from .inline_dialog import InlineDialog, InlineMessageDialog from .spell_entry import SpellEntry class TopicDialog(InlineDialog): """ [ICON] Topic for channel %s on %s [Ok] [Dis is da topic for da channel] [Cancel] """ def __init__(self, server, channel): InlineDialog.__init__(self, buttons = (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL), icon = gtk.STOCK_DIALOG_INFO) self.server = server self.channel = channel self._topic_changed = False self.table = gtk.Table(rows = 2, columns = 1) self.label = gtk.Label(None) self.label.set_markup( (""+_("Topic for channel %(channel)s " "on %(server)s")+"\n") % { "server": server, "channel": channel }) self.table.attach(self.label, 0, 1, 0, 1) self.topicBar = SpellEntry() self.table.attach(self.topicBar, 0, 1, 1, 2) signals.connect_signal("topic", self._topic_changed_cb) self.topicBar.set_text(color.parse_color_codes_to_markups( sushi.channel_topic(server, channel))) self.topicBar.set_position(len(self.topicBar.get_text())) self.topicBar.connect("activate", self._topicBar_activate_cb) self.vbox.add(self.table) def _topicBar_activate_cb(self, edit): self.response(gtk.RESPONSE_OK) def _topic_changed_cb(self, time, server, sender, channel, topic): self._topic_changed = True def response(self, id, ignore_updated = False): def outdated_dialog_response_cb(dialog, id, topic_dialog): if id == gtk.RESPONSE_OK: # want apply topic_dialog.response( gtk.RESPONSE_OK, ignore_updated = True) else: # update the topic bar topic_dialog.topicBar.set_text( color.parse_color_codes_to_markups( sushi.channel_topic( topic_dialog.server, topic_dialog.channel))) topic_dialog.topicBar.set_position( len(topic_dialog.topicBar.get_text())) topic_dialog._topic_changed = False dialog.destroy() if id == gtk.RESPONSE_OK: if self._topic_changed and not ignore_updated: # topic changed during edit, ask user what to do d = InlineMessageDialog( _("Topic changed before."), _("The topic was changed before your " "update. Do you want to commit the changes anyway?"), buttons = (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) d.connect("response", outdated_dialog_response_cb, self) gui.mgmt.show_inline_dialog(d) return else: # apply new topic sushi.topic( self.server, self.channel, color.parse_color_markups_to_codes( self.topicBar.get_text())) InlineDialog.response(self, id) sushi-1.4.0+dfsg/tekka/tekka/lib/expanding_list.py0000664000175000017500000001601511700417156021755 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject import logging class ExpandingList(gtk.Table): __gtype_name__ = "ExpandingList" # add ability of setting widgets as tuple represended by a string. # This is a hack for glade support def set_str_widgets(self, str_widgets): try: widgets = eval(str_widgets) except Exception as e: logging.debug("Error in set_str_widgets: %s" % (e,), exc_info=True) return self.init_widgets(widgets) str_widgets = gobject.property(setter=set_str_widgets, type=str) def set_no_first_row(self, no_first_row): self._no_first_row = no_first_row no_first_row = gobject.property(setter=set_no_first_row, default=False, type=bool) def __init__(self, no_first_row=False, *widgets, **kwargs): self._rows = 1 self._columns = len(widgets) + 2 self._matrix = [ [] ] self._widgets = () self._no_first_row = no_first_row gtk.Table.__init__(self, rows=1, columns=self._columns) if not widgets: return init_widgets(widgets) def init_widgets(self, widgets): self._widgets = widgets if not self._no_first_row: self._add_row(row=0) def get_widget_matrix(self): return self._matrix def _add_row(self, row): """ Adds a row filled with the given widgets (self._widgets) and a plus (add) as well as a minus (remove) button. It also extends the matrix which holds the widgets. """ self._matrix[row]=[] column = 0 for widget in self._widgets: try: instance = widget() except: logging.error( "ExpandingList: error while instancing %s" % (widget)) continue self.emit("instanced_widget", row, column, instance) logging.debug("attaching instance of %s" % (widget)) self.attach(instance, column, column+1, row, row+1) self._matrix[row].append(instance) column += 1 self._add_plus_button(row, column) self._add_minus_button(row, column+1) self.emit("row-added", row) self.show_all() def add_row(self, under=-1): """ under is the index (starting at 0) under which row the new one shall be added. if under is not given or is under 0, the new row is added under the last one. """ if not self._widgets: return # determine the row to add the new row under if under >= 0: if under > self._rows: logging.error( "expanding_list: add_row: under (%d) > " "self._rows (%d)" % (under, self._rows)) return row = under + 1 else: row = self._rows self._rows += 1 self.resize(self._rows, self._columns) self._matrix.append([]) """ rows = 5; under = 2 last row is newly added _____ 0| | | | 1| | | | 2| | | |------. 3| | | |--. <-' 4|_|_|_|<-' """ if row < (self._rows-1): # swap needed for i in reversed(range(row, self._rows-1)): cells = self._matrix[i] column = 0 for widget in cells: self.remove(widget) self.attach(widget, column, column+1, i+1, i+2) column += 1 cells[-1].row = i+1 cells[-2].row = i+1 self._matrix[i+1] = self._matrix[i] self._add_row(row) def remove_row(self, index): """ Remove the row with the given index from the table. """ if not self._widgets: return if index > (self._rows - 1) or index < 0: raise Exception("index out of bounds") if self._rows == 1: # replace the last row with a new, empty one self.add_row(under=0) self.remove_row(0) return cells = self._matrix[index] # remove the widgets in the destinasted row for widget in cells: self.remove(widget) for i in range(index+1, self._rows): # i -> (i-1) row = self._matrix[i] newRow = i - 1 column = 0 for widget in row: self.remove(widget) self.attach(widget, column, column+1, newRow, i) column += 1 row[-1].row = newRow row[-2].row = newRow self._matrix[newRow] = self._matrix[i] # NOW remove the line del self._matrix[-1] self.emit("row-removed", index) # bring the table to the new size self._rows -= 1 self.resize(self._rows, self._columns) def attach(self, *x): if not x: return widget = x[0] gtk.Table.attach(self, *x) if widget.parent: self.child_set_property(widget, "y-options", gtk.SHRINK) def _button_add_clicked(self, button): self.add_row(under=button.row) def _button_remove_clicked(self, button): self.remove_row(button.row) def _add_plus_button(self, row, column): a = gtk.Button(stock=gtk.STOCK_ADD) # remove the label of the button a.get_children()[0].get_children()[0].get_children()[1].set_text("") # show icon a.get_image().show() a.row = row a.column = column a.connect("clicked", self._button_add_clicked) self._matrix[row].append(a) self.attach(a, column, column+1, row, row+1, gtk.FILL|gtk.SHRINK, gtk.FILL|gtk.SHRINK) def _add_minus_button(self, row, column): a = gtk.Button(stock=gtk.STOCK_REMOVE) # remove the label of the button a.get_children()[0].get_children()[0].get_children()[1].set_text("") # show icon a.get_image().show() a.row = row a.column = column a.connect("clicked", self._button_remove_clicked) self._matrix[row].append(a) self.attach(a, column, column+1, row, row+1, gtk.FILL|gtk.SHRINK, gtk.FILL|gtk.SHRINK) gobject.signal_new("instanced_widget", ExpandingList, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_INT, gobject.TYPE_PYOBJECT)) gobject.signal_new("row-added", ExpandingList, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_INT,)) gobject.signal_new("row-removed", ExpandingList, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_INT,)) if __name__ == "__main__": win = gtk.Window() win.resize(400,400) sWin = gtk.ScrolledWindow() expList = ExpandingList(gtk.Entry, gtk.Entry) expList.set_property("homogeneous", True) sWin.add_with_viewport(expList) win.add(sWin) win.connect("destroy", lambda *x: gtk.main_quit()) win.show_all() gtk.main() sushi-1.4.0+dfsg/tekka/tekka/lib/input_history.py0000664000175000017500000000657011700417156021672 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ - no entries, no scrolling - typed but not confirmed stuff is the latest item - confirmed stuff is pushed into a stack - button up: no entries: abort - button up: an entry: set position to entry, return entry - button up: on top: abort - button down: check for typed OR no entries: abort - button down: an entry: set position to entry, return entry - button down: on bottom: check for typed OR abort """ from ..typecheck import types class InputHistory (object): _history = [] _size = 20 _position = None _get_text_callback = lambda: "" _origin_text = "" @types (size=int) def __init__ (self, size=20, text_callback=lambda: ""): self._size = size self._history = [] self._position = None self._origin_text = "" self._get_text_callback = text_callback def reset(self): self._position = None @types (fun=type(lambda:"")) def set_text_callback(self, fun): self._get_text_callback = fun @types (entry=basestring) def add_entry (self, entry): """ add a string to the history """ self._history.append (entry) if len(self._history) == self._size: del self._history[0] def get_previous(self): """ walk the stack down to zero, button up """ if self._position == None: # first call, return the latest item if not self._history: return None # get the original text self._origin_text = self._get_text_callback() self._position = len(self._history)-1 return self._history[-1] if self._position == 0: # abort return None self._position -= 1 return self._history[self._position] def get_next(self): """ walk the stack up to self._size, button down """ if self._position == None: # first call, get the origin text and return None self._origin_text = self._get_text_callback() return None if self._position == len(self._history)-1: # the old input should be restored by # the calling method self._position = None return self._origin_text self._position += 1 return self._history[self._position] @types (index=int) def get_value(self, index): try: return self._history[index] except IndexError: return None return None sushi-1.4.0+dfsg/tekka/tekka/lib/fading_box.py0000664000175000017500000001454211700417156021050 0ustar dfilonidfiloni""" Copyright (c) 2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gobject import gtk class FadingBox(gtk.EventBox): """ Has the ability to fade it's background color to another """ """ NOTE: color attributes suffer from integer overflow (0xffff) """ MAX_FADING_TIME = 700 # miliseconds # background color as defined in style rc origin_bg_color = property(lambda s: s._origin_bg_color.copy(), None) # bool property if fading is in progress is_fading = property(lambda s: s._timeout_id != None, None) def __init__(self): super(FadingBox,self).__init__() self._origin_bg_color = self.get_style().bg[gtk.STATE_NORMAL].copy() self._timeout_id = None self._timer = None def reset_background(self): """ reset the background color to what it should be according to the gtkrc loaded """ style = self.get_style().copy() style.bg[gtk.STATE_NORMAL] = self._origin_bg_color.copy() self.set_style(style) def _fade_timeout(self, color): def do_timeout(self, color): style = self.get_style().copy() style.bg[gtk.STATE_NORMAL] = color.copy() self.set_style(style) self.stop_fading() gobject.idle_add(do_timeout, self, color) return False def _fade_channel(self, channel, reference): if channel == reference: return (True, reference) if channel > reference: up = (channel / 10) + 1 if channel-up < 0 or channel-up < reference: return (True, reference) return (False, channel-up) else: up = (reference / 10) + 1 if channel+up >= 0xffff or channel+up > reference: return (True, reference) return (False, channel+up) def _fade_bg(self, color): """ modifiy each color channel of the background color according to color and refresh the style with the new background color """ if not self._timeout_id: return False bg_color = self.bg_color (rdone, bg_color.red) = self._fade_channel(bg_color.red, color.red) (gdone, bg_color.green) = self._fade_channel(bg_color.green, color.green) (bdone, bg_color.blue) = self._fade_channel(bg_color.blue, color.blue) self.bg_color = bg_color style = self.get_style().copy() style.bg[gtk.STATE_NORMAL] = bg_color.copy() self.set_style(style) if rdone and gdone and bdone: self.stop_fading() return False return True def fade(self, to_color, interval=40): """ fade the background color of this box to the given color. interval is the time in miliseconds between each fade """ if self._timeout_id: return False # already fading style = self.get_style() self.bg_color = style.bg[gtk.STATE_NORMAL].copy() self._timeout_id = gobject.timeout_add(interval, self._fade_bg, to_color) self._timer = gobject.timeout_add(self.MAX_FADING_TIME, self._fade_timeout, to_color) return True def stop_fading(self): if self._timeout_id: gobject.source_remove(self._timeout_id) gobject.source_remove(self._timer) self._timeout_id = None self._timer = None self.emit("fade-finished") gobject.signal_new("fade-finished", FadingBox, gobject.SIGNAL_ACTION, None, ()) if __name__ == "__main__": win = gtk.Window() win.set_default_size(500,300) vbox = gtk.VBox() win.add(vbox) box = FadingBox() vbox.pack_start(box) btn = gtk.Button("Green") vbox.add(btn) btn2 = gtk.Button("Background") vbox.add(btn2) btn3 = gtk.Button("Blue") vbox.add(btn3) btn4 = gtk.Button("Red") vbox.add(btn4) box.fade(gtk.gdk.Color("#0000ff")) btn5 = gtk.Button("Black") vbox.add(btn5) def btn_clicked_cb(btn): """ def do_setup(): def new_fade(box): if new_fade.ran: return print "new fade" c = gtk.gdk.Color("#FF0000") box.fade(c) new_fade.ran = True c = gtk.gdk.Color("#00FF00") box.fade(c) new_fade.ran = False if not btn_clicked_cb.init: box.connect("fade-finished", new_fade) btn_clicked_cb.init = True box.stop_fading() box.reset_background() gobject.timeout_add(1000, do_setup) """ """ def finished_cb(box, callback): self = finished_cb if self.count == 0: callback() return if self.back_fade: gobject.idle_add(box.fade, self.two) else: gobject.idle_add(box.fade, self.one) self.back_fade = not self.back_fade self.count -= 1 def killsig(): box.disconnect(killsig.handle) handle = box.connect("fade-finished", finished_cb, killsig) finished_cb.back_fade = False finished_cb.one = gtk.gdk.Color("#0f0") finished_cb.two = box.origin_bg_color finished_cb.count = 4 killsig.handle = handle box.fade(gtk.gdk.Color("#0f0")) """ box.fade(gtk.gdk.Color("#0f0")) def btn2_clicked_cb(btn): box.fade(box.origin_bg_color) def btn3_clicked_cb(btn): box.fade(gtk.gdk.Color("#00f")) def btn4_clicked_cb(btn): box.fade(gtk.gdk.Color("#f00")) def btn5_clicked_cb(btn): box.fade(gtk.gdk.Color("#000")) btn_clicked_cb.init = False btn.connect("clicked", btn_clicked_cb) btn2.connect("clicked", btn2_clicked_cb) btn3.connect("clicked", btn3_clicked_cb) btn4.connect("clicked", btn4_clicked_cb) btn5.connect("clicked", btn5_clicked_cb) win.connect("destroy", lambda w: gtk.main_quit()) win.show_all() gtk.main() sushi-1.4.0+dfsg/tekka/tekka/lib/general_output_buffer.py0000664000175000017500000001374011700417156023335 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import pango from gettext import gettext as _ from . import htmlbuffer from .. import config from .. import gui from ..gui.tabs import TekkaServer def build_handler_menu(tag, widget, event, iter, attrs): def hide_message_cb(item, tab, msgtype): r_tuple = build_tuple(msgtype, tab) config.append_list("general_output", "filter", str(r_tuple)) def build_tuple(msgtype, tab): if tab.is_channel() or tab.is_query(): r_tuple = (str(msgtype), str(tab.server.name), str(tab.name)) else: r_tuple = (str(msgtype), str(tab.name)) return r_tuple tab = gui.tabs.get_tab_by_path(eval(attrs["path"])) if not tab: raise ValueError, "tab could not be retrieved (%s)" % ( attrs["path"]) items = [] items.append(gtk.MenuItem(label = tab.name)) items.append(gtk.SeparatorMenuItem()) items.append(gtk.ImageMenuItem(gtk.STOCK_ZOOM_OUT)) filter = config.get_list("general_output", "filter", []) label_s = _("Hide '%s' messages") items[-1].set_label(label_s % (attrs["type"])) items[-1].connect("activate", hide_message_cb, tab, attrs["type"]) menu = gtk.Menu() for item in items: menu.add(item) menu.show_all() return menu def go_handler(tag, widget, event, iter, attrs): def switch_highlight(tag, switch): """ switch highlighting of given tag """ if switch: tag.set_property("weight", pango.WEIGHT_BOLD) else: self.tag.set_property("weight", pango.WEIGHT_NORMAL) self = go_handler # check for previous tag and unhighlight it if hasattr(self, "tag"): if self.tag != tag: switch_highlight(tag, False) # initialize (new) attributes self.tag = tag self.widget = widget self.event = event self.iter = iter self.path_string = attrs["path"] # __init__ if not hasattr(self, "c_init"): self.c_init = True def outer_cb(*x): switch_highlight(self.tag, False) gui.widgets.get_object("main_window").connect( "motion-notify-event", outer_cb) # abort event handling on tags for itag in iter.get_tags(): try: itag.s_attribute["a"] except KeyError: pass else: return False # event handling if event.type == gtk.gdk.MOTION_NOTIFY: if event.state & gtk.gdk.BUTTON1_MASK: return False switch_highlight(tag, True) return True if event.type == gtk.gdk.BUTTON_PRESS: if event.button == 3: # right mbtn menu = build_handler_menu(tag, widget, event, iter, attrs) menu.popup(None, None, None, event.button, event.time) return True if event.type == gtk.gdk.BUTTON_RELEASE: # left mbtn if (event.button == 1 and not widget.get_buffer().get_has_selection()): path = eval(self.path_string) gui.tabs.switch_to_path(path) class GOHTMLHandler(htmlbuffer.HTMLHandler): def __init__(self, textbuffer, GOHandler, URLhandler): htmlbuffer.HTMLHandler.__init__(self, textbuffer, URLhandler) self.go_handler = GOHandler def startElement(self, name, attrs): if name == "goref": if self.go_handler: # TODO caching of goref tag = self.textbuffer.create_tag(None) tag.s_attribute = {"goref":True} # workaround the priority in the taglist of HTMLHandler # Given # Results in [font, goref, msg], so goref has a higher # priority than font. As a result, every change made in # goref overrides properties of font. We don't want this, # so we set the goref tag to a low priority. tag.set_priority(0) tag.connect("event", self.go_handler, attrs) self._apply_tag(name, tag) else: htmlbuffer.HTMLHandler.startElement(self, name, attrs) class GOHTMLBuffer(htmlbuffer.HTMLBuffer): __gtype_name__ = "GOHTMLBuffer" def __init__(self, go_handler=go_handler, handler=None): htmlbuffer.HTMLBuffer.__init__(self, handler) contentHandler = GOHTMLHandler(self, go_handler, self.URLHandler) self.parser.setContentHandler(contentHandler) self.go_handler = go_handler def go_insert(self, iter, text, tab, msgtype): """ Filter messages and insert other into the buffer """ # check the type generally allowed_types = config.get_list("general_output", "valid_types",[]) if msgtype not in allowed_types: return # check for special filters filter = config.get_list("general_output", "filter", []) if type(tab) == TekkaServer: server = tab.name channel = "" else: server = tab.server.name channel = tab.name for tuple_str in filter: try: r_tuple = eval(tuple_str) except BaseException as e: logging.error("Error in filter tuple '%s': %s" % ( tuple_str, e)) continue # if the rule matches, abort execution if r_tuple[0] == msgtype and r_tuple[-1] in (server, channel): return # not filtered, insert self.insert_html(iter, "%s" % ( msgtype, tab.path, text)) sushi-1.4.0+dfsg/tekka/tekka/lib/nick_list_store.py0000664000175000017500000001524311700417156022142 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject import logging from ..typecheck import types COLUMN_PREFIX=0 COLUMN_NICK=1 COLUMN_AWAY=2 class NickListStore(gtk.ListStore): """ Store class for the nickList widget. Stores the prefix and the nick name in a list: , , ... prefix is a item of NickListStore.modes, nick is a string. """ def __init__(self, nicks=None, prefixes=None, aways=None): gtk.ListStore.__init__(self, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) self.__modes = [] # user count, operator count, dowehaveoperators? self.__count = 0 self.__opcount = 0 if nicks and prefixes and len(nicks) == len(prefixes): self.add_nicks(nicks, prefixes) if aways and len(aways) == len(nicks): self.set_aways(nicks, aways) def __len__(self): return self.__count def get_operator_count(self): return self.__opcount def set_modes(self, modes): self.__modes = list(modes) self.__modes.append("") @types(needle = basestring) def find_nick_row(self, needle): for row in self: if row[COLUMN_NICK].lower() == needle.lower(): return row return None def set_aways(self, nicks, aways): if not nicks or not aways: return for i in range(len(nicks)): self.set_away(nicks[i], aways[i]) def add_nicks(self, nicks, prefixes): """ Adds a list of nicks to the NickListStore. After adding all nicks sortNicks is called. """ if not nicks or not prefixes: return for i in range(len(nicks)): self.append_nick(nicks[i], sort=False) self.set_prefix(nicks[i], prefixes[i], sort=False) self.sort_nicks() def has_nick(self, nick): return nick in self.get_nicks() def get_nicks(self): """ returns all nick names stored """ return [l[COLUMN_NICK] for l in self if l is not None ] def get_nicks_mode(self): """ return a tuple per nick with (prefix,nick) """ return [ (l[COLUMN_PREFIX],l[COLUMN_NICK]) for l in self if l] def append_nick(self, nick, sort=True): """ appends a nick to the store, if sort is false, data in the NickListStore would'nt be sorted in-place """ iter = self.append(None) self.set(iter, COLUMN_NICK, nick) self.set(iter, COLUMN_PREFIX, "") self.set(iter, COLUMN_AWAY, False) self.__count += 1 if sort: self.sort_nicks() def modify_nick(self, nick, newnick): """ renames the nick `nick` to `newnick` """ row = self.find_nick_row(nick) if row: self.set(row.iter, COLUMN_NICK, newnick) self.sort_nicks() def remove_nick(self, nick): """ removes the whole column where nick name = `nick` """ store = self row = self.find_nick_row(nick) if not row: return if row[COLUMN_PREFIX] in self.__modes[:-2]: self.__opcount -= 1 self.__count -= 1 store.remove(row.iter) def clear(self, count_reset = True): """ remove all entries from the store and set counts to 0. """ gtk.ListStore.clear(self) if count_reset: self.__count = 0 self.__opcount = 0 def set_away(self, nick, away): row = self.find_nick_row(nick) if not row: return row[COLUMN_AWAY] = away def set_prefix(self, nick, prefix, sort=True): """ sets the prefix `prefix` to the nick `nick`. After setting the prefix and sort is true the data in the NickListStore will be sorted in place. """ row = self.find_nick_row(nick) if not row: return # list without voice and no-mode op_pre = self.__modes[:-2] if row[COLUMN_PREFIX] in op_pre and prefix not in op_pre: # op goes to non-op self.__opcount -= 1 elif row[COLUMN_PREFIX] not in op_pre and prefix in op_pre: # wasn't an op and becomes one self.__opcount += 1 row[COLUMN_PREFIX] = prefix if sort: self.sort_nicks() def get_prefix(self, nick): """ returns the prefix for the nick identified by `nick`. If the nick is not found None is returned. """ row = self.find_nick_row(nick) if not row: # this is possible if outer-channel-talking is allowed return "" return row[COLUMN_PREFIX] def search_nick(self, needle): """ returns a list of nicks wich are beginning with the string `needle` """ return [l[COLUMN_NICK] for l in self if l and l[COLUMN_NICK][0:len(needle)].lower()==needle] def search_nick_by_prefix(self, prefixes): """ Searches for nicks which prefix is in the tuple prefixes and returns the found nicks as a list. """ return [l[COLUMN_NICK] for l in self if l and l[COLUMN_PREFIX] in prefixes] def sort_nicks(self): """ sort the NickListStore in-place by prefix and then by nick name. Use insertion sort. """ def retreive_prefix(row): try: return self.__modes.index(row[COLUMN_PREFIX]) except ValueError: logging.error( "sort_nicks: prefix '%s' (%s) not in modes (%s)" % ( row[COLUMN_PREFIX], row[COLUMN_NICK], self.__modes)) return None def compare(left, current): # left >? current pLeft = retreive_prefix(left) pRight = retreive_prefix(current) # pLeft < pRight => Left > Right # smallest prefix index p is highest mode d = lambda: cmp(left[COLUMN_NICK].lower(), current[COLUMN_NICK].lower())==1 return (pLeft > pRight) or (pLeft == pRight and d()) for j in range(len(self)): i = j - 1 current = [self[j][0],self[j][1],self[j][2]] while i > -1 and compare(self[i], current): self.set(self[i+1].iter, 0, self[i][0], 1, self[i][1], 2, self[i][2]) i -= 1 self.set(self[i+1].iter, 0, current[0], 1, current[1], 2, current[2]) sushi-1.4.0+dfsg/tekka/tekka/lib/dcc_dialog.py0000664000175000017500000001030711700417156021013 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ dcc inline dialog. displayed on incoming dcc call """ import gtk from gettext import gettext as _ import tekka.signals as signals from tekka.com import sushi from .inline_dialog import InlineDialog class DCCDialog(InlineDialog): def __init__(self, id, nick, filename, size, resumable): InlineDialog.__init__(self, buttons = (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE), icon = gtk.STOCK_DIALOG_INFO) self.table = gtk.Table(rows = 3, columns = 2) self.transfer_id = id self.transfer_info = { "id": id, "nick": nick, "filename": filename, "size": size, "resumable": resumable, "original_directory": sushi.dcc_send_get(id, "directory")} self.label = gtk.Label(None) self._update_label() self.table.attach(self.label, 0, 2, 0, 2, xoptions = gtk.FILL) # Setup the destination chooser button self.destination_dialog = None self.destination_button = gtk.Button(_("Select destination")) self.destination_button.connect("clicked", self._destination_button_clicked_cb) self.table.attach(self.destination_button, 0, 1, 2, 3, xoptions = gtk.FILL) self.destination_button.set_property("border-width", 6) self.vbox.add(self.table) def _destination_button_clicked_cb(self, dialog): def create_file_dialog(): def _file_dialog_response_cb(dialog, id): if id == gtk.RESPONSE_OK: # apply directory sushi.dcc_send_set(self.transfer_id, "directory", dialog.get_current_folder()) self._update_label() self.destination_dialog = None dialog.destroy() d = gtk.FileChooserDialog( title = _("Select a destination to save the file"), action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) d.connect("response", _file_dialog_response_cb) self.destination_dialog = d return d if not self.destination_dialog: d = create_file_dialog() d.show_all() def _update_label(self): def resumable_str(): if (self.transfer_info["resumable"] and sushi.dcc_send_get(self.transfer_id, "directory") \ == self.transfer_info["original_directory"]): return _("\nInfo: If you don't choose another " "destination, this file will be resumed.") else: return "" self.label.set_markup( ""+_("Incoming file transfer")+"\n"+ _( "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s" "%(resumable)s" % \ { "nick": self.transfer_info["nick"], "filename": self.transfer_info["filename"], "bytes": self.transfer_info["size"], "destination": sushi.dcc_send_get(self.transfer_id, "directory"), "resumable": resumable_str() })) def show(self): if sushi.remote: self.destination_button.set_sensitive(False) InlineDialog.show(self) def response(self, id): InlineDialog.response(self, id) sushi-1.4.0+dfsg/tekka/tekka/lib/htmlbuffer.py0000664000175000017500000002324111700417156021102 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import pango import logging import xml.sax import xml.sax.handler from StringIO import StringIO from .. import gui from ..helper.url import URLToTag from .. import helper from .. import config class HTMLHandler(xml.sax.handler.ContentHandler): """ Parses HTML like strings and applies the tags as format rules for the given text buffer. """ def __init__(self, textbuffer, handler): xml.sax.handler.ContentHandler.__init__(self) self.textbuffer = textbuffer self.ignoreableEndTags = ["msg","br","su","sb"] self.no_cache = ["a","sb","su"] self.URLHandler = handler self._reset_values() def _reset_values(self): self.elms = [] self.tags = [] self.sucount = 0 self.sbcount = 0 def _get_cache_name(self, name, attrs): " return the caching name of a element for tag caching " def attrs_to_dict(attrs): return "{"+ ",".join( [n+":"+attrs.getValue(n) for n in attrs.getNames()]) +"}" if name in ("font","span"): return name + attrs_to_dict(attrs) return name def _get_cached(self, cachename): " return the cached tag for the given element or None " return self.textbuffer.get_tag_table().lookup(cachename) def _apply_tag(self, name, tag): """ mark the element and the tag to be added later. This is usually called in startElement. """ self.elms.insert(0, name) self.tags.insert(0, tag) def characters(self, text): """ Raw characters? Apply them (with tags, if given) to the text buffer """ if len(self.tags): # there are tags, apply them to the text self.textbuffer.insert_with_tags( self.textbuffer.get_end_iter(), text, *self.tags) else: # no tags, just add the text self.textbuffer.insert( self.textbuffer.get_end_iter(), text) def startDocument(self): pass def startElement(self, name, attrs): if not name in self.no_cache: cname = self._get_cache_name(name,attrs) tag = self.textbuffer.get_tag_table().lookup(cname) if tag: # found a already known tag, use it self._apply_tag(name, tag) return # handle no tag creating elements if name == "br": self.textbuffer.insert(self.textbuffer.get_end_iter(),"\n") return # create a new tag if name in self.no_cache: tag = self.textbuffer.create_tag(None) else: tag = self.textbuffer.create_tag( self._get_cache_name(name, attrs)) tag.s_attribute = {} # special attribute for identifying tag.s_attribute[name] = True if name == "b": tag.set_property("weight", pango.WEIGHT_BOLD) elif name == "i": tag.set_property("style", pango.STYLE_ITALIC) elif name == "u": tag.set_property("underline", pango.UNDERLINE_SINGLE) elif name == "a": if self.URLHandler: tag.set_property("underline", pango.UNDERLINE_SINGLE) tag.connect("event", self.URLHandler, attrs["href"]) tag.s_attribute["a.href"] = attrs["href"] elif name == "su": self.sucount += 1 if self.sucount % 2 != 0: tag.set_property("underline", pango.UNDERLINE_SINGLE) else: tag.set_property("underline", pango.UNDERLINE_NONE) elif name == "sb": self.sbcount += 1 if self.sbcount % 2 != 0: tag.set_property("weight", pango.WEIGHT_BOLD) else: tag.set_property("weight", pango.WEIGHT_NORMAL) elif name in ("font","span"): self._parseFont(tag, attrs) elif name == "msg": # start tag to avoid errors due to # missing overall-tag # self._parseFont(tag, attrs) self._apply_tag(name, tag) def endElement(self, name): if name in self.ignoreableEndTags: return try: i = self.elms.index(name) except ValueError: pass else: del self.elms[i] del self.tags[i] def endDocument(self): """ Close all special bold/underline tags. """ if self.sbcount % 2 != 0 or self.sucount % 2 != 0: tag = self.textbuffer.create_tag(None) if self.sbcount % 2 != 0: tag.set_property("weight", pango.WEIGHT_NORMAL) if self.sucount % 2 != 0: tag.set_property("underline", pango.UNDERLINE_NONE) self.textbuffer.insert_with_tags( self.textbuffer.get_end_iter(), "", tag) self._reset_values() """ PARSING HELPER """ def _parseFont(self, tag, attrs): if not attrs or attrs.getLength() == 0: return for name in attrs.getNames(): if name == "weight": if attrs[name] == "bold": tag.set_property("weight", pango.WEIGHT_BOLD) elif attrs[name] == "normal": tag.set_property("weight", pango.WEIGHT_NORMAL) elif name == "style": if attrs[name] == "italic": tag.set_property("style", pango.STYLE_ITALIC) elif attrs[name] == "normal": tag.set_property("style", pango.STYLE_NORMAL) else: try: tag.set_property(name, attrs[name]) except Exception as ex: logging.error("_parseFont: %s" % (ex)) class ScanHandler(xml.sax.ContentHandler): def __init__(self): xml.sax.ContentHandler.__init__(self) class HTMLBuffer(gtk.TextBuffer): __gtype_name__ = "HTMLBuffer" global_tagtable = gtk.TextTagTable() def __init__(self, handler=None, tagtable=None): self.lines = 0 self.group_string = None self.group_color = False if tagtable: self.tagtable = tagtable else: self.tagtable = self.global_tagtable self.URLHandler = handler gtk.TextBuffer.__init__(self, self.tagtable) self.scanner = xml.sax.make_parser() self.parser = xml.sax.make_parser() self.scanner.setContentHandler(ScanHandler()) contentHandler = HTMLHandler(self, self.URLHandler) self.parser.setContentHandler(contentHandler) def setURLHandler(self, handler): self.URLHandler = handler self.parser.getContentHandler().URLHandler = handler def getURLHandler(self): return self.URLHandler def clear(self): """ Clears the output and resets the tag table to zero to save memory. """ self.set_text("") # clear the tagtable tt = self.get_tag_table() if tt: tt.foreach(lambda tag,data: data.remove(tag), tt) def insert(self, iter, text, *x): " make the buffer a ring buffer with a limit of max_output_lines " siter = self.get_selection_bounds() if siter: soff = siter[0].get_offset() ioff = siter[1].get_offset() gtk.TextBuffer.insert(self, iter, text, *x) self.lines += text.count("\n") try: max_lines = int(config.get("tekka", "max_output_lines")) except ValueError: max_lines = int(config.get_default("tekka", "max_output_lines")) diff = self.lines - max_lines if diff > 0: a = self.get_iter_at_line(0) b = self.get_iter_at_line(diff) self.delete(a,b) self.lines -= diff if siter: self.select_range( self.get_iter_at_offset(soff), self.get_iter_at_offset(ioff) ) # FIXME new selection range is off by some bytes def insert_html(self, iter, text, group_string=None): """ parse text for HTML markups before adding it to the buffer at the given iter. This method is deprecated. Use insert_html. """ startoffset = iter.get_offset() if gtk.TextBuffer.get_char_count(self) > 0: text = "
" + text text = URLToTag(text) if self.group_string != group_string: self.group_string = group_string self.group_color = not self.group_color # color the lines, group coloring by some string if (config.get_bool("tekka","text_rules") and self.group_color and self.group_string): color = helper.color.get_color_by_key("rules_color").to_string() text = "%s" % ( color, text) else: text = "%s" % text def applyToParser(text): try: self.parser.parse(StringIO(text)) except xml.sax.SAXParseException,e: raise Exception,\ "%s.applyToParser: '%s' raised with '%s'." % (e, text) while True: try: self.scanner.parse(StringIO(text)) except xml.sax.SAXParseException, e: # Exception while parsing, get (if caused by char) # the character and delete it. Then try again to # add the text. # If the exception is caused by a syntax error, # abort parsing and print the error with line # and position. pos = e.getColumnNumber() line = e.getLineNumber() if (pos-2 >= 0 and text[pos-2:pos] == " 0.04045: return ((K+a)/(1+a))**gamma else: return K / 12.92 def xyz_to_lab_f (t): if (t > 0.008856): return t ** (1/3.0) else: return 7.787*t + 16/116.0 def rgb_to_lab (R, G, B): """ returns (L,a,b) """ Xn = 0.93819 Yn = 0.98705 Zn = 1.07475 gr = srgb_to_xyz_g(R / 65535.0) gg = srgb_to_xyz_g(G / 65535.0) gb = srgb_to_xyz_g(B / 65535.0) x = 0.412424 * gr + 0.357579 * gg + 0.180464 * gb y = 0.212656 * gr + 0.715158 * gg + 0.072186 * gb z = 0.019332 * gr + 0.119193 * gg + 0.950444 * gb fy = xyz_to_lab_f(y / Yn) L = 116 * fy - 16 a = 500 * (xyz_to_lab_f(x / Xn) - fy) b = 200 * (fy - xyz_to_lab_f(z / Zn)) return (L,a,b) def xyz_to_srgb_C (K): a = 0.055 gamma = 2.4 if (K > 0.00304): return (1 + a) * (K ** (1.0 / gamma)) - a else: return K * 12.92 def CLAMP(x, low, high): if x > high: return high elif x < low: return low else: return x def lab_to_rgb (L, a, b): """ returns (R, G, B) """ Xn = 0.93819 Yn = 0.98705 Zn = 1.07475 fy = (L + 16) / 116 fx = fy + a / 500 fz = fy - b / 200 delta = 6.0 / 29 delta2 = delta ** 2 if (fx > delta): x = Xn * fx ** 3 else: x = (fx - 16.0/116) * 3 * delta2 * Xn if (fy > delta): y = Yn * fy ** 3 else: y = (fy - 16.0/116) * 3 * delta2 * Yn if (fz > delta): z = Zn * fz ** 3 else: z = (fz - 16.0/116) * 3 * delta2 * Zn rs = 3.2410 * x - 1.5374 * y - 0.4986 * z gs = -0.9692 * x + 1.8760 * y + 0.0416 * z bs = 0.0556 * x - 0.2040 * y + 1.0570 * z R = CLAMP(int(round(xyz_to_srgb_C(rs) * 65535)), 0, 65535) G = CLAMP(int(round(xyz_to_srgb_C(gs) * 65535)), 0, 65535) B = CLAMP(int(round(xyz_to_srgb_C(bs) * 65535)), 0, 65535) return (R, G, B) def lab_distance (La, aa, ba, Lb, ab, bb): dL = fabs(Lb - La) da = fabs(ab - aa) db = fabs(bb - ba) return sqrt(dL*dL + da*da + db*db) def contrast_render_foreground_color (background, color): """ * contrast_render_foreground_color * @background: the background color (GdkColor) * @color: the desired foreground color (one of those constants on the top) * * Creates a specific color value for a foreground color, optimizing for * maximum readability against the background. """ points = [[0 for n in range(3)] for n in range(8)] (L, a, b) = rgb_to_lab(background.red, background.green, background.blue) points[0][0] = color_regions[color][0]; points[0][1] = color_regions[color][2]; points[0][2] = color_regions[color][4]; points[1][0] = color_regions[color][0]; points[1][1] = color_regions[color][2]; points[1][2] = color_regions[color][5]; points[2][0] = color_regions[color][0]; points[2][1] = color_regions[color][3]; points[2][2] = color_regions[color][4]; points[3][0] = color_regions[color][0]; points[3][1] = color_regions[color][3]; points[3][2] = color_regions[color][5]; points[4][0] = color_regions[color][1]; points[4][1] = color_regions[color][2]; points[4][2] = color_regions[color][4]; points[5][0] = color_regions[color][1]; points[5][1] = color_regions[color][2]; points[5][2] = color_regions[color][5]; points[6][0] = color_regions[color][1]; points[6][1] = color_regions[color][3]; points[6][2] = color_regions[color][4]; points[7][0] = color_regions[color][1]; points[7][1] = color_regions[color][3]; points[7][2] = color_regions[color][5]; max_dist = 0 max_color = 0 for i in range(8): dist = lab_distance(L, a, b, points[i][0], points[i][1], points[i][2]) if dist > max_dist: max_dist = dist max_color = i """ If the luminosity distance is really short, extend the vector further out. This may push it outside the bounds of the region that a color is specified in, but it keeps things readable when the background and foreground are really close. """ ld = fabs( L - points[max_color][0] ) cd = sqrt( fabs(a - points[max_color][1]) ** 2 + fabs(b - points[max_color][2]) ** 2 ) if (ld < 10.0) and (cd < 60.0): dL = points[max_color][0] - L da = points[max_color][1] - a db = points[max_color][2] - b points[max_color][0] = L + (dL * 4.0) points[max_color][1] = a + (da * 1.5) points[max_color][2] = b + (db * 1.5) red, green, blue = lab_to_rgb( points[max_color][0], points[max_color][1], points[max_color][2]) return gtk.gdk.Color (red, green, blue) if __name__ == "__main__": import sys if len(sys.argv) < 2: sys.exit(1) cnames = [ "aqua","black","blue","brown","cyan","darkblue", "darkgreen","darkgray","darkred","green","gray", "lightblue","lightbrown","lightgreen","lightgrey", "lightred","magenta","orange","purple","red", "violet","white","yellow","last"] c = gtk.gdk.Color(sys.argv[1]) for i in range(23): r = contrast_render_foreground_color(c, i) print "output(%d:%s): \t%s" % (i, cnames[i], r) sushi-1.4.0+dfsg/tekka/tekka/lib/custom_color_button.py0000664000175000017500000000036611700417156023052 0ustar dfilonidfiloniimport gtk class CustomColorButton(gtk.ColorButton): """ A ColorButton which leaves it to the developer what to open after a click. """ __gtype_name__ = "CustomColorButton" def do_clicked(self): pass def do_color_set(self): pass sushi-1.4.0+dfsg/tekka/tekka/lib/error_dialog.py0000664000175000017500000000312211700417156021410 0ustar dfilonidfiloni# coding:utf-8 import gtk from gettext import gettext as _ from .. import gui class ErrorDialog(gtk.Dialog): def __init__(self, message): super(ErrorDialog,self).__init__( parent = gui.widgets.get_object("main_window"), title = _("Error occured"), buttons = (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)) self.set_default_size(400,300) self.error_label = gtk.Label() self.error_label.set_properties(width_chars=50, wrap=True, xalign=0.0) self.error_label.set_markup(_( "Don't Panic!\n\n" "An error occured – we apologize for that. " "Feel free to submit a bug report at " "
" "https://bugs.launchpad.net/sushi.")) self.tv = gtk.TextView() self.tv.get_buffer().set_text(message) self.sw = gtk.ScrolledWindow() self.sw.set_properties( shadow_type=gtk.SHADOW_ETCHED_IN, hscrollbar_policy=gtk.POLICY_AUTOMATIC, vscrollbar_policy=gtk.POLICY_AUTOMATIC) self.sw.add(self.tv) self.vbox_inner = gtk.VBox() self.vbox_inner.set_property("border-width", 6) hbox = gtk.HBox() hbox.set_property("border-width", 6) hbox.set_spacing(12) hbox.pack_start(gtk.image_new_from_stock( gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_DIALOG), expand=False) hbox.pack_end(self.error_label) align = gtk.Alignment() align.add(hbox) align.set_padding(0,6,0,0) self.vbox_inner.pack_start(align, expand=False) self.vbox_inner.pack_start(self.sw) self.vbox.pack_start(self.vbox_inner) def set_message(self, msg): self.tv.get_buffer().set_text(msg) sushi-1.4.0+dfsg/tekka/tekka/lib/inline_dialog.py0000664000175000017500000001323411700417156021542 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject from ..typecheck import types class InlineDialog(gtk.HBox): def __init__(self, icon = gtk.STOCK_DIALOG_WARNING, buttons = gtk.BUTTONS_CLOSE): """ /!\ I'm a warning! [Close] /!\ I'm a long warning [Close] which got no place for buttons. (?) Do you want? [Yes] [No] """ def style_set_cb (widget, style): if widget.setting_style: return tt = gtk.Window() tt.set_name("gtk-tooltip") tt.ensure_style() # set_style() may cause style-set to be triggered again. # It should not happen in our case, but better be safe # than sorry. widget.setting_style = True widget.hbox.set_style(tt.get_style().copy()) widget.setting_style = False tt.destroy() widget.hbox.queue_draw() def expose_event_cb (widget, event): a = widget.get_allocation() widget.style.paint_flat_box( widget.window, gtk.STATE_NORMAL, gtk.SHADOW_ETCHED_IN, None, widget, "tooltip", a.x + 1, a.y + 1, a.width - 2, a.height - 2 ) return False def size_allocate_cb (widget, allocation): widget.queue_draw() widget.parent.queue_draw() gtk.HBox.__init__(self) self.set_property("border-width", 6) self.setting_style = False self.hbox = gtk.HBox(spacing=6) self.hbox.set_app_paintable(True) self.hbox.set_property("border-width", 6) # add icon self.icon = gtk.image_new_from_stock(icon, gtk.ICON_SIZE_DIALOG) self.icon.set_property("yalign", 0.0) self.hbox.add_with_properties(self.icon, "expand", False) # add vbox self.vbox = gtk.VBox(spacing=6) self.hbox.add_with_properties(self.vbox, "padding", 6) # add buttonbox self.buttonbox = gtk.VButtonBox() self.buttonbox.set_layout(gtk.BUTTONBOX_START) self.hbox.add_with_properties(self.buttonbox, "expand", False) if type(buttons) == gtk.ButtonsType: self.apply_buttons_type(buttons) else: self.add_buttons(*buttons) self.connect("style-set", style_set_cb) self.hbox.connect("expose-event", expose_event_cb) self.hbox.connect("size-allocate", size_allocate_cb) self.add(self.hbox) @types(btype = gtk.ButtonsType) def apply_buttons_type(self, btype): if btype == gtk.BUTTONS_NONE: pass elif btype == gtk.BUTTONS_OK: self.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK) elif btype == gtk.BUTTONS_CLOSE: self.add_buttons(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE) elif btype == gtk.BUTTONS_YES_NO: self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO) elif btype == gtk.BUTTONS_OK_CANCEL: self.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) def add_buttons(self, *args): """ add_buttons(Label0, ResponseID0, StockID1, ResponseID1, ...) """ if len(args) % 2 != 0: raise ValueError, "Not enough arguments supplied, (Button, Response,...)" i = 0 while i < len(args)-1: try: stock_info = gtk.stock_lookup(args[i]) except TypeError: stock_info = None if stock_info != None: # Stock item button = gtk.Button(stock = args[i]) else: # Label button = gtk.Button(label = args[i]) button.connect("clicked", lambda w,id: self.response(id), args[i+1]) self.buttonbox.add(button) i += 2 def response(self, id): """ button was activated, react on id """ self.emit("response", id) gobject.signal_new("response", InlineDialog, gobject.SIGNAL_ACTION, None, (gobject.TYPE_INT,)) class InlineMessageDialog(InlineDialog): def __init__(self, primary, secondary = None, *args, **kwargs): InlineDialog.__init__(self, *args, **kwargs) # add label self.primary_label = gtk.Label() self.primary_label.set_markup("%s" % (primary)) self.primary_label.set_selectable(True) self.primary_label.set_property("xalign", 0.0) self.primary_label.set_property("yalign", 0.0) self.vbox.add(self.primary_label) if secondary: self.secondary_label = gtk.Label() self.secondary_label.set_markup("%s" % (secondary)) self.secondary_label.set_selectable(True) self.secondary_label.set_property("xalign", 0.0) self.secondary_label.set_property("yalign", 0.0) self.vbox.add(self.secondary_label) else: self.secondary_label = None self.connect_after("style-set", self.__style_set_cb) def __style_set_cb(self, widget, style): self.primary_label.set_style(self.hbox.get_style().copy()) if self.secondary_label: self.secondary_label.set_style(self.hbox.get_style().copy()) sushi-1.4.0+dfsg/tekka/tekka/lib/spell_entry.py0000664000175000017500000001156311700417156021310 0ustar dfilonidfiloniimport gtk import pango from gettext import gettext as _ from ..helper import color from ..lib import contrast try: from sexy import SpellEntry as _SpellEntry except ImportError: from gtk import Entry as _SpellEntry class SpellEntry(_SpellEntry): __gtype_name__ = "SpellEntry" def __init__(self, *args, **kwargs): super(SpellEntry, self).__init__(*args, **kwargs) self._ranges = {} self.connect("populate-popup", self._determine_popup_menu) self.connect("activate", lambda s,*u: s._apply_color_tags()) def _determine_popup_menu(self, widget, menu, *user): self._popup_menu_handler(menu) # TODO: # nothing marked: set color for whole text: { "all" : {"fg":x,"bg":y} } # text marked: set color for specific text: { ..., (n,m) : {"fg":x,"bg":y} } # nothing marked & dict !empty: goto "nothing marked" # text marked & dict !empty: goto "text marked" # TODO: mark color setting visually via the pango Layout (set_markup) # TODO: determine what happens if the user edits the text... def _apply_color_tags(self): pass def _new_range_entry(self, id, before=False): self._ranges[id] = {"fg":None,"bg":None} def _new_attr(self, atype, colorcode, start, end): def get_gdk_color(ccolor): bg_color = self.get_style().base[gtk.STATE_NORMAL] return contrast.contrast_render_foreground_color( bg_color, ccolor) gcolor = get_gdk_color(colorcode) if atype == "fg": return pango.AttrForeground(gcolor.red, gcolor.green, gcolor.blue, start, end) elif atype == "bg": return pango.AttrBackground(gcolor.red, gcolor.green, gcolor.blue, start, end) def _dump_attributes(self): a = self.get_layout().get_attributes() i = a.get_iterator() o = [] while True: l = i.get_attrs() o.append(l) if not i.next(): break print o def _modify_general_color(self, fg="", bg=""): if not self._ranges.has_key("all"): self._new_range_entry("all") elem = self._ranges["all"] if fg: fg_attr = self._new_attr("fg", fg, 0, self.get_text_length()) elem["fg"] = fg_attr self.get_layout().get_attributes().change(fg_attr) self._dump_attributes() self.get_layout().context_changed() if bg: bg_attr = self._new_attr("bg", bg, 0, self.get_text_length()) elem["bg"] = bg_attr self.get_layout().get_attributes().insert(bg_attr) self._dump_attributes() self.get_layout().context_changed() def _add_range_color(self, start, end, fg="",bg=""): if not bg and not fg: return if not self._ranges.has_key((start,end)): self._new_range_entry((start,end)) elem = self._ranges[(start,end)] if fg: fg_attr = self._new_attr("fg", fg, start, end) elem["fg"] = fg_attr self.get_layout().get_attributes().insert(fg_attr) self._dump_attributes() if bg: bg_attr = self._new_attr("bg", bg ,start, end) elem["bg"] = bg_attr self.get_layout().get_attributes().insert(bg_attr) self._dump_attributes() def _fg_item_activate(self, item, value): bounds = self.get_selection_bounds() if not bounds: self._modify_general_color(fg=value) else: self._add_range_color(*bounds, fg=value) def _bg_item_activate(self, item, value): bounds = self.get_selection_bounds() if not bounds: self._modify_general_color(bg=value) else: self._add_range_color(*bounds, bg=value) def _reset_item_activate(self, item): bounds = self.get_selection_bounds() if not bounds: self._ranges = {} elif self._ranges.has_key((bounds[0],bounds[1])): del self._ranges[(bounds[0],bounds[1])] elif bounds: for (cbounds,colors) in self._ranges.items(): if cbounds == "all": continue start,end = cbounds wstart,wend = bounds if wstart >= start and wend <= end: del self._ranges[cbounds] return # if we reach this, we have not found a suitable entry, maybe # the user means to reset it all but has a selection. reset all. self._ranges = {} def _popup_menu_handler(self, menu): # FIXME: remove this if everything works.. return fg_item = gtk.MenuItem(label=_("Foreground Color")) fg_submenu = gtk.Menu() for (value, name) in color.COLOR_NAMES.items(): item = gtk.MenuItem(label=" ".join([n.capitalize() for n in name.split(" ")])) item.connect("activate", self._fg_item_activate, value) fg_submenu.append(item) fg_item.set_submenu(fg_submenu) fg_item.show_all() menu.insert(fg_item, 0) bg_item = gtk.MenuItem(label=_("Background Color")) bg_submenu = gtk.Menu() for (value, name) in color.COLOR_NAMES.items(): item = gtk.MenuItem(label=" ".join([n.capitalize() for n in name.split(" ")])) item.connect("activate", self._bg_item_activate, value) bg_submenu.append(item) bg_item.set_submenu(bg_submenu) bg_item.show_all() menu.insert(bg_item, 1) reset_item = gtk.MenuItem(label=_("Reset Color")) reset_item.connect("activate", self._reset_item_activate) reset_item.show() menu.insert(reset_item, 2) sushi-1.4.0+dfsg/tekka/tekka/lib/output_window.py0000664000175000017500000000735511700417156021703 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject from .output_textview import OutputTextView from math import ceil class OutputWindow(gtk.ScrolledWindow): """ A gtk.ScrolledWindow with a TextView inside of it. This widget watches for autoscrolling and adjusts the scrollbar on size-allocations. This widget is supposed to be hold by a OutputShell. """ __gtype_name__ = "OutputWindow" # overload show def do_show(self): gtk.ScrolledWindow.do_show(self) self.textview.show() def __init__(self): gtk.ScrolledWindow.__init__(self) self.set_properties( hscrollbar_policy = gtk.POLICY_AUTOMATIC, vscrollbar_policy = gtk.POLICY_AUTOMATIC, shadow_type = gtk.SHADOW_ETCHED_IN ) self.textview = OutputTextView() self.auto_scroll = True self.add(self.textview) self.old_allocation = self.get_allocation() # XXX: redundant code, see main.py::setup_mainWindow def kill_mod1_scroll_cb(w,e): if e.state & gtk.gdk.MOD1_MASK: w.emit_stop_by_name("scroll-event") self.connect("scroll-event", kill_mod1_scroll_cb) def size_allocate_cb(win, alloc): """ Called when the window has a new size. If the new size differs from the old size, determine if we wanted to be at the bottom (auto_scroll = True) and scroll down. """ if alloc.height != self.old_allocation.height: if self.auto_scroll: def doit(): self.textview.scroll_to_bottom(no_smooth = True) return False gobject.idle_add(doit) self.old_allocation = alloc self.connect("size-allocate", size_allocate_cb) def value_changed_cb(sbar): """ Called if the scrollbar value has changed. If the scrollbar is at the bottom, set auto_scroll to True. If we're in the middle of a smooth scrolling action, and self.auto_scroll is True, it will be True after all. In all other cases, we don't want auto scroll anymore. """ def idle_handler_cb(): adjust = sbar.get_property("adjustment") if (self.auto_scroll and self.textview.is_smooth_scrolling()): # XXX: instead of setting, ignore this completely. self.auto_scroll = True elif ceil(adjust.upper - adjust.page_size) \ == ceil(sbar.get_value()): self.auto_scroll = True else: self.auto_scroll = False return False # XXX: maybe one can get rid of this if using connect_after # XXX:: instead of connect gobject.idle_add(idle_handler_cb) def doit(): self.get_vscrollbar().connect("value-changed", value_changed_cb) gobject.idle_add(doit) sushi-1.4.0+dfsg/tekka/tekka/lib/psushi.py0000664000175000017500000000321511700417156020256 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ TYPE_STRING: Takes one argument (default string) TYPE_PASSWORD: Hidden string. Takes one argument (default string) TYPE_NUMBER: Takes one argument (default number) TYPE_BOOL: Takes one argument (default bool value) TYPE_CHOICE: Takes n key/value tuple and a default index. """ (TYPE_STRING, TYPE_PASSWORD, TYPE_NUMBER, TYPE_BOOL, TYPE_CHOICE, TYPE_LIST, TYPE_MAP ) = range(7) sushi-1.4.0+dfsg/tekka/tekka/lib/contrast_color_table.py0000664000175000017500000000623211700417156023147 0ustar dfilonidfiloniimport gtk import gobject from gettext import gettext as _ from . import contrast from . import custom_color_button from ..helper import color class ContrastColorTable(gtk.Table): """ Display all available contrast colors as color buttons in n >= 1 rows depending on the column count. The default column count is 6. """ __gtype_name__ = "ContrastColorTable" def __init__(self, columns=6): super(ContrastColorTable, self).__init__() self._buttons = [] self.set_columns(columns) self.contrast_color = contrast.CONTRAST_COLOR_BLACK def get_color_palette(self): return [ contrast.CONTRAST_COLOR_BLACK, contrast.CONTRAST_COLOR_WHITE, contrast.CONTRAST_COLOR_LIGHT_GREY, contrast.CONTRAST_COLOR_GREY, contrast.CONTRAST_COLOR_DARK_GREY, contrast.CONTRAST_COLOR_LIGHT_GREEN, contrast.CONTRAST_COLOR_GREEN, contrast.CONTRAST_COLOR_DARK_GREEN, contrast.CONTRAST_COLOR_AQUA, contrast.CONTRAST_COLOR_CYAN, contrast.CONTRAST_COLOR_LIGHT_BLUE, contrast.CONTRAST_COLOR_BLUE, contrast.CONTRAST_COLOR_DARK_BLUE, contrast.CONTRAST_COLOR_PURPLE, contrast.CONTRAST_COLOR_VIOLET, contrast.CONTRAST_COLOR_MAGENTA, contrast.CONTRAST_COLOR_BROWN, contrast.CONTRAST_COLOR_LIGHT_BROWN, contrast.CONTRAST_COLOR_LIGHT_RED, contrast.CONTRAST_COLOR_RED, contrast.CONTRAST_COLOR_DARK_RED, contrast.CONTRAST_COLOR_ORANGE, contrast.CONTRAST_COLOR_YELLOW, ] def get_buttons(self): return self._buttons def get_button_by_code(self, contrast_color): """ return the button responsible for the given color code """ palette = self.get_color_palette() for i in range(len(palette)): if contrast_color == palette[i]: return self.get_buttons()[i] return None def fill(self, columns): """ fill the table """ self.foreach(lambda w: self.remove(w)) self._buttons = [] x,y = (0,0) try: bg = color._get_output_bg_color() except: # in case of glade or test bg = gtk.gdk.Color("#fff") for code in self.get_color_palette(): ccolor = contrast.contrast_render_foreground_color(bg, code) button = custom_color_button.CustomColorButton(ccolor) button.connect("clicked", self.button_clicked, code) xoptions = yoptions = gtk.FILL self.attach(button, x, x+1, y, y+1, xoptions, yoptions) self._buttons.append(button) x += 1 if x == columns: x = 0 y += 1 def button_clicked(self, button, color_code): self.set_contrast_color(color_code) def change_color(self, color_code): self.emit("color-changed", color_code) def set_columns(self, columns): self.fill(columns) self._columns = columns def set_contrast_color(self, color_code): self._contrast_color = color_code self.change_color(color_code) columns = property( lambda s: s._columns, set_columns, doc="Number of columns per row. Default is 6.") gcolumns = gobject.property( getter=lambda s: s.columns, setter=set_columns, default=6, type=int) contrast_color = property( lambda s: s._contrast_color, set_contrast_color, doc="The selected color. Default is black.") gobject.signal_new( "color-changed", ContrastColorTable, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_INT,)) sushi-1.4.0+dfsg/tekka/tekka/lib/plugin_config_dialog.py0000664000175000017500000002136611700417156023114 0ustar dfilonidfiloni""" Copyright (c) 2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ Purpose: Raw config dialog for a plugin which can save the settings for a given plugin and displays the options the plugin offers. This is used by the plugin management dialog. """ import gtk import gobject from gettext import gettext as _ import logging import json from .. import config from .. import plugins from . import psushi from .error import TekkaError PLUGIN_OPTIONS_LENGTH = 4 class PluginConfigDialog(gtk.Dialog): def __init__(self, plugin_name): super(PluginConfigDialog, self).__init__( title=_("Configure %(name)s" % {"name": plugin_name}), buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE) ) self.plugin_name = plugin_name self.plugin_options, err = plugins.get_options(plugin_name) if err != None: logging.error(err) gui.mgmt.show_inline_message( "Config dialog %s" % (plugin_name), "Can't load the config dialog for plugin '%s': %s" % ( plugin_name, err), dtype="error") return self._data_map = {} self._build_interface() self._fill() def _build_interface(self): self.table = table = gtk.Table( rows=len(self.plugin_options), columns=2) table.set_property("column-spacing", 12) table.set_property("row-spacing", 6) # put another vbox arround it because # d.vbox.set_property("border-width",..) does not work... self.content_vbox = vbox = gtk.VBox() vbox.set_property("border-width", 12) vbox.pack_start(table) self.vbox.pack_start(vbox) def composit_list_widget(self, opt, label, value, dataMap): """ Return a widget which holds and manages a list widget """ def row_content_to_entry(tv, path, column, entry): model = tv.get_model() entry.set_text(model[path][0]) entry.grab_focus() model.remove(model.get_iter(path)) def add_data_to_list(btn, listview, entry): model = listview.get_model() model.append(row=(entry.get_text(),)) entry.set_text("") def delete_data_from_list(btn, listview): (model, iter) = listview.get_selection().get_selected() if iter == None: return model.remove(iter) def update_data_map(model, path, *_): dataMap[opt] = json.dumps([n[0] for n in model]) addButton = gtk.Button(stock=gtk.STOCK_ADD) deleteButton = gtk.Button(stock=gtk.STOCK_REMOVE) listStore = gtk.ListStore(str) listRenderer = gtk.CellRendererText() listView = gtk.TreeView(listStore) listWindow = gtk.ScrolledWindow() textEntry = gtk.Entry() # list setup listView.insert_column_with_attributes(0, "", listRenderer, text=0) listView.set_property("headers-visible", False) default_list = [] if value: try: default_list = json.loads(value) except Exception as e: default_list = [] if default_list and not isinstance(default_list, list): logging.error("Invalid default value (not a list)") else: for item in default_list: listStore.append(row=(item,)) # window setup listWindow.set_properties(hscrollbar_policy=gtk.POLICY_AUTOMATIC, vscrollbar_policy=gtk.POLICY_AUTOMATIC, border_width=3) listWindow.set_shadow_type(gtk.SHADOW_ETCHED_IN) listWindow.add(listView) container = gtk.VBox() buttonBox = gtk.HBox() buttonBox.pack_start(addButton) buttonBox.pack_start(deleteButton) container.pack_start(listWindow, expand=True) container.pack_start(textEntry, expand=False) container.pack_start(buttonBox, expand=False) frame = gtk.Frame(label=label) frame.set_shadow_type(gtk.SHADOW_ETCHED_IN) frame.set_property("border-width", 6) frame.add(container) # signals listView.connect("row-activated", row_content_to_entry, textEntry) listStore.connect("row-changed", update_data_map) listStore.connect("row-deleted", update_data_map) addButton.connect("clicked", add_data_to_list, listView, textEntry) deleteButton.connect("clicked", delete_data_from_list, listView) return frame,None def composit_map_widget(*x): return None def _fill(self): """ fill the dialog's content box/table with widgets according to the plugin options. """ cSection = plugins.get_plugin_config_section( self.plugin_name) dataMap = {} # config_key : value rowCount = 0 for option in self.plugin_options: if len(option) != PLUGIN_OPTIONS_LENGTH: logging.error("Faulty plugin %s: Invalid plugin options count: %d" % ( self.plugin_name, len(option))) return (opt, label, vtype, value) = option def text_changed_cb(widget, option): value = widget.get_text() dataMap[option] = value wLabel = gtk.Label(label+": ") wLabel.set_property("xalign", 0) widget = None cValue = config.get(cSection, opt) or value dataMap[opt] = cValue if vtype == psushi.TYPE_STRING: # Simple text entry widget = gtk.Entry() widget.set_text(cValue) widget.connect("changed", text_changed_cb, opt) elif vtype == psushi.TYPE_PASSWORD: # Hidden char. entry widget = gtk.Entry() widget.set_text(cValue) widget.set_property("visibility", False) widget.connect("changed", text_changed_cb, opt) elif vtype == psushi.TYPE_NUMBER: # Number entry field def changed_cb(widget, option): dataMap[option] = widget.get_value_as_int() widget = gtk.SpinButton() widget.set_range(-99999,99999) widget.set_increments(1, 5) widget.set_value(int(cValue)) widget.connect("value-changed", changed_cb, opt) elif vtype == psushi.TYPE_BOOL: # Check button for boolean values def changed_cb(widget, option): dataMap[option] = widget.get_active() widget = gtk.CheckButton() if type(cValue) == bool: widget.set_active(cValue) else: widget.set_active(cValue.lower() != "false") widget.connect("toggled", changed_cb, opt) elif vtype == psushi.TYPE_CHOICE: # Multiple values. Stored as [0] = key and [1] = value def changed_cb(widget, option): if widget.get_active() >= 0: value = widget.get_model()[widget.get_active()][1] dataMap[option] = value else: dataMap[option] = "" wModel = gtk.ListStore( gobject.TYPE_STRING, gobject.TYPE_STRING) widget = gtk.ComboBox(wModel) widget.connect("changed", changed_cb, opt) wRenderer = gtk.CellRendererText() widget.pack_start(wRenderer, True) widget.add_attribute(wRenderer, "text", 0) for (key, val) in value: wModel.append(row = (key, val)) # this is tricky, if there's a saved value, # find the matching value (second field!) # and set the index to that position. if cValue and cValue != value: i = 0 for row in wModel: if row[1] == cValue: break i+=1 widget.set_active(i) else: widget.set_active(0) elif vtype == psushi.TYPE_LIST: widget,error = self.composit_list_widget(opt, label, cValue, dataMap) if error != None: logging.error(error) continue wLabel = gtk.Label("") # no need for extra label elif vtype == psushi.TYPE_MAP: widget = self.composit_map_widget(opt, label, value, dataMap) else: logging.error( "PluginConfigDialog: Wrong type given: %d" % (vtype)) self.table.attach(wLabel, 0, 1, rowCount, rowCount+1) self.table.attach(widget, 1, 2, rowCount, rowCount+1) rowCount += 1 self._data_map = dataMap def save(self): """ save the changes made in the plugin's config section """ cSection = plugins.get_plugin_config_section( self.plugin_name) config.create_section(cSection) for (key, value) in self._data_map.items(): logging.debug("PluginConfigDialog: Result: %s -> %s" % ( key, str(value))) config.set(cSection, key, str(value)) sushi-1.4.0+dfsg/tekka/tekka/lib/key_dialog.py0000664000175000017500000000515611700417156021060 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk from gettext import gettext as _ from .. import com from .inline_dialog import InlineDialog class KeyDialog(InlineDialog): def __init__(self, server, channel): InlineDialog.__init__( self, icon = gtk.STOCK_DIALOG_AUTHENTICATION, buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) self.server = server self.channel = channel self.sub_hbox = gtk.HBox() self.sub_vbox = gtk.VBox() self.label = gtk.Label( _("Enter the key for the channel %(channel)s." %\ { "channel": self.channel })) self.sub_vbox.add(self.label) self.entry = gtk.Entry() self.entry.set_property("visibility", False) self.entry.connect("activate", self._entryActivated) self.sub_vbox.add(self.entry) self.checkButton = gtk.CheckButton(_("Save key for channel")) self.sub_vbox.add(self.checkButton) self.sub_hbox.add(self.sub_vbox) self.vbox.add(self.sub_hbox) key = com.sushi.server_get(self.server, self.channel, "key") self.entry.set_text(key) self.entry.set_position(len(key)) def response(self, id): if id == gtk.RESPONSE_OK and self.checkButton.get_active(): # save key for the channel com.sushi.server_set(self.server, self.channel, "key", self.entry.get_text()) InlineDialog.response(self, id) def _entryActivated(self, entry): self.response(gtk.RESPONSE_OK) sushi-1.4.0+dfsg/tekka/tekka/helper/0000775000175000017500000000000011700417156017101 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka/helper/URLHandler.py0000664000175000017500000000656511700417156021427 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import logging import webbrowser from .. import config eventIDs = {} def _resetCursor(widget, event, window, cursor): window.set_cursor(cursor) widget.disconnect(eventIDs[widget]) del eventIDs[widget] def _build_url_menu(browser, url): menu = gtk.Menu() cb = gtk.Clipboard() if browser: openitem = gtk.MenuItem(label="Open") openitem.connect("activate", lambda w,b: b.open(url), browser) menu.append(openitem) copyitem = gtk.MenuItem(label="Copy URL") copyitem.connect("activate", lambda w,u,c: c.set_text(u), url, cb) menu.append(copyitem) return menu def _get_browser(): name = config.get("tekka","browser") try: if name and webbrowser.get(name): browser = webbrowser.get(name) else: browser = webbrowser except webbrowser.Error: logging.error("Could not open a browser") browser = None except TypeError: logging.debug("Fetching bug in python2.4") browser = None return browser def URLHandler(texttag, widget, event, iter, url): """ do URL specific stuff """ if event.type == gtk.gdk.MOTION_NOTIFY: # TODO: LP#303346 # TODO:: if the state is BUTTON1_MASK and this event # TODO:: occurs, create a object aware of DND and # TODO:: let it take over. if event.state & gtk.gdk.BUTTON1_MASK: return False # cursor moved on the URL, change cursor to HAND2 cursor = gtk.gdk.Cursor(gtk.gdk.HAND2) textWin = widget.get_window(gtk.TEXT_WINDOW_TEXT) textWin.set_cursor(cursor) # add signal to reset the cursor if not eventIDs.has_key(widget): id = widget.connect("motion-notify-event", _resetCursor, textWin, gtk.gdk.Cursor(gtk.gdk.XTERM)) eventIDs[widget] = id return True browser = _get_browser() if event.type == gtk.gdk.BUTTON_RELEASE: if (event.button == 1 and browser and not widget.get_buffer().get_has_selection()): # open URL in browser browser.open(url) elif event.type == gtk.gdk.BUTTON_PRESS: if event.button == 3: # print menu for URL actions menu = _build_url_menu(browser, url) menu.show_all() menu.popup(None, None, None, button=event.button, activate_time=event.time) return True sushi-1.4.0+dfsg/tekka/tekka/helper/__init__.py0000664000175000017500000000245511700417156021220 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ __all__ = ["url"] sushi-1.4.0+dfsg/tekka/tekka/helper/escape.py0000664000175000017500000000523511700417156020720 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ Module for splitting after strings but ignoring the escaped ones. """ test_string = "abc,de\\,,f\\,g,\\\\,h,i" # result: ["abc","de,","f,g","\\\\","h","i"] def _get_escape_char_count(part, char): c = 0 rev = range(len(part)) rev.reverse() for i in rev: if part[i] == char: c += 1 else: break return c def _unescape_splitted(separator, splitted, escape_char): escaped = [] i = 0 for split in splitted: if not split: escaped.append(split) continue if split[-1] == escape_char: count = _get_escape_char_count(split, escape_char) if count % 2 != 0: # the , was escaped if (i+1) == len(splitted): escaped.append(split) break # merge this and the next split together. # add the escaped separator and remove the escape new_split = [split[:-1] + separator + splitted[i+1]] return escaped + _unescape_splitted( separator, new_split + splitted[i+2:], escape_char) else: escaped.append(split) else: escaped.append(split) i+=1 return escaped def unescape_split(separator, tosplit, escape_char="\\"): splitted = tosplit.split(separator) escaped = _unescape_splitted(separator, splitted, escape_char) return escaped def escape_join (separator, list, escape_char="\\"): return separator.join([ item.replace(escape_char, 2*escape_char)\ .replace(separator,escape_char+separator) for item in list if item]) sushi-1.4.0+dfsg/tekka/tekka/helper/shortcuts.py0000664000175000017500000001046511700417156021517 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import logging from gobject import signal_new, signal_lookup, SIGNAL_ACTION from gtk.gdk import CONTROL_MASK, SHIFT_MASK, MOD1_MASK, keyval_from_name from gtk import ACCEL_VISIBLE from re import compile shortExp = compile("(<[a-z]*>){0,1}(<[a-z]*>){0,2}(<[a-z]*>){0,3}(.*)") regmap = {} def removeShortcuts(accelGroup, widget): """ Removes all shortcuts registered to widget """ if not regmap.has_key(accelGroup): logging.error("removeShortcuts: No shortcuts registered to " "accel group.") return False if not regmap[accelGroup].has_key(widget): logging.info("removeShortcuts: No shortcuts registered to " "widget %s." % (widget)) return False for (handler,keys,keyval,mask) in regmap[accelGroup][widget]: widget.remove_accelerator(accelGroup, keyval, mask) widget.disconnect(handler) del regmap[accelGroup][widget] return True def removeShortcut(accelGroup, widget, shortcut): """ Removes the shortcut identified by shortcut string. """ if not regmap.has_key(accelGroup): logging.info("No shortcuts registered to accel group.") return False if not regmap[accelGroup].has_key(widget): logging.info("No shortcuts registered for widget.") return False i = 0 for (handler, keys, keyval, mask) in regmap[accelGroup][widget]: if "".join(keys) == shortcut: widget.remove_accelerator(accelGroup, keyval, mask) widget.disconnect(handler) del regmap[accelGroup][widget][i] #logging.debug("deleted shortcut %s." % ("".join(keys))) break i+=1 def addShortcut(accelGroup, widget, shortcut, callback, *args): """ Adds a shortcut identified by a string to the widget and sets the callback to the shortcut. The shortcut string looks like this: 2 => (l/r)-CTRL + (l/r)-shift + 2 There are max. 3 modifier (ctrl/shift/alt/...) allowed. """ match = shortExp.match(shortcut) if not match: logging.error("addShortcut: No pattern match for %s" % (shortcut)) return None vGroups = [g for g in match.groups() if g] if not vGroups: logging.error("addShortcut: No filled groups for %s" % (shortcut)) return None mask = 0 for group in vGroups[:-1]: if group == "": mask |= CONTROL_MASK if group == "": mask |= SHIFT_MASK if group == "": mask |= MOD1_MASK key = vGroups[-1] if len(key) > 1: keyval = keyval_from_name(key) if not keyval: logging.error("addShortcut: Too much chars for (%s)." % (key)) return None else: keyval = ord(key) # name like shortCut_ctrl_shift_2 signame = "shortCut_"+"_".join([i.strip("<>") for i in vGroups]) if not signal_lookup(signame, widget): signal_new(signame, widget, SIGNAL_ACTION, None, ()) widget.add_accelerator( signame, accelGroup, keyval, mask, ACCEL_VISIBLE) handler = widget.connect(signame, callback, shortcut, *args) if not regmap.has_key(accelGroup): regmap[accelGroup] = {} if not regmap[accelGroup].has_key(widget): regmap[accelGroup][widget]=[ (handler,vGroups,keyval,mask) ] else: regmap[accelGroup][widget].append( (handler,vGroups,keyval,mask) ) return handler sushi-1.4.0+dfsg/tekka/tekka/helper/code.py0000664000175000017500000000401611700417156020366 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ Misc. code helper """ def _generate_unique_attribute(fun): return "__init_%s_%s" % (fun.func_name, str(id(fun))) def init_function_attrs(fun, **vars): """ Add the variables with values as attributes to the function fun if they do not exist and return the function. Usage: self = init_function_attr(myFun, a = 2, b = 3) Results in: self = myFun, self.a = 2, self.b = 3 """ unique_attr = _generate_unique_attribute(fun) try: getattr(fun, unique_attr) except AttributeError: for (key, val) in vars.items(): setattr(fun, key, val) setattr(fun, unique_attr, True) return fun def reset_function_attrs(fun): try: getattr(fun, _generate_unique_attribute(fun)) except AttributeError: pass else: delattr(fun, _generate_unique_attribute(fun)) sushi-1.4.0+dfsg/tekka/tekka/helper/history.py0000664000175000017500000000511211700417156021153 0ustar dfilonidfiloni""" provide functions for history handling. note that history stuff is only possible if maki is not running remote. """ import re import os from ..com import sushi from ..typecheck import types FILEPATTERN= re.compile(r'([0-9]+)-([0-9]+)\.txt') DATEPATTERN= re.compile(r'^([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)') def get_log_dir(): return sushi.config_get("directories","logs") def get_available_servers(force_remote=False): """ return a list with all servers containing logs """ if not force_remote and sushi.remote: return [] log_dir = get_log_dir() if not os.path.exists(log_dir): return [] return [dir for dir in os.listdir(log_dir) if os.path.isdir( os.path.join(log_dir, dir))] @types(server=basestring) def get_available_conversations(server, force_remote=False): """ return a list with all available logged channels/queries """ if (not force_remote and sushi.remote) or not server: return [] log_dir = os.path.join(get_log_dir(), server) if not os.path.exists(log_dir) or not os.path.isdir(log_dir): return [] return [dir for dir in os.listdir(log_dir) if os.path.isdir( os.path.join(log_dir, dir))] @types(server=basestring, target=basestring) def get_available_logs(server, target, force_remote=False): """ return a list with all available logs for the target """ if (not force_remote and sushi.remote) or not server or not basestring: return [] log_dir = os.path.join(get_log_dir(), server, target) if not os.path.exists(log_dir): return [] return [f for f in os.listdir(log_dir) if FILEPATTERN.match(f) and os.path.isfile( os.path.join(log_dir, f))] @types(log_file=basestring) def get_log_date(log_file): """ return (year,month) tuple """ match = FILEPATTERN.match(log_file) if not match: return "" return [int(n) for n in match.groups()] @types(server=basestring, target=basestring, log=basestring) def get_log_path(server, target, log): if not server or not target or not log: return "" return os.path.join(get_log_dir(), server, target, log) @types(fd=file) def parse_day_offsets(fd): offsets = {} start = fd.tell() offset = fd.tell() last_day = 0 year = month = day = hour = minute = second = 0 for line in fd: match = DATEPATTERN.match(line) if not match: continue (year, month, day, hour, minute, second) = [int(n) for n in match.groups()] if day != last_day: offsets[(year, month, last_day)] = (start, offset) last_day = day start = offset offset += len(line) if last_day != 0: offsets[(year, month, last_day)] = (start, offset) return offsets sushi-1.4.0+dfsg/tekka/tekka/helper/tabcompletion.py0000664000175000017500000001546411700417156022325 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ from .. import commands from .. import com from .. import config from .. import gui # types identificating the current scroll position ( NO_TYPE, NICK_TYPE, QUERY_TYPE, CHANNEL_TYPE, COMMAND_TYPE ) = range(5) # cache of position _current = { "position": None, "tab": None, "type": NO_TYPE, "needle": None, "lastCompletion": None } def _reset_iteration(): global _current _current["position"] = None _current["tab"] = None _current["type"] = NO_TYPE _current["needle"] = None _current["lastCompletion"] = None def _appendMatch(entry, text, word, match, separator = " "): """ Complete `word` in `text` with `match` and apply it to the input bar widget. Add separator too. """ # old text without needle + new_word + separator + rest new_text = text[0:entry.get_position()-len(word)] + \ match + \ separator + \ text[entry.get_position():] old_position = entry.get_position() entry.set_text(new_text) entry.set_position(old_position + len(match+separator) -len(word)) global _current _current["lastCompletion"] = match + separator def _removeLastCompletion(entry, text): """ this function assumes, we're on the position _after_ the completion... """ lc = _current["lastCompletion"] if lc == None: return text # strip of the match, keep the needle: # 'n' => 'nemo: ' => strip 'emo: ' needle = _current["needle"] skip = (entry.get_position() - len(lc)) + len(needle) new_text = text[:skip]+text[entry.get_position():] entry.set_text(new_text) entry.set_position(skip) return new_text def _raise_position(matches, i_type): if _current["type"] == i_type: # continue iterating if (_current["position"]+1 >= len(matches) or _current["position"] == None): _current["position"] = 0 else: _current["position"] += 1 else: # set type to the current and begin iterating _current["type"] = i_type _current["position"] = 0 def _match_nick_in_channel(tab, word): matches = tab.nickList.search_nick(word.lower()) # sort nicks alphabetically matches.sort(lambda x, y: cmp(x.lower(), y.lower())) if matches: _raise_position(matches, NICK_TYPE) return matches[_current["position"]] return None def _match_nick_in_query(tab, word): matches = [nick for nick in (tab.name, (tab.is_server() and tab.nick or tab.server.nick)) if nick[:len(word)].lower() == word.lower()] if matches: _raise_position(matches, QUERY_TYPE) return matches[_current["position"]] return None def _match_channel(word): tabs = gui.tabs.get_all_tabs() # find all matching tabs matches = [tab.name for tab in tabs if tab and tab.name[:len(word)].lower() == word.lower()] if matches: _raise_position(matches, CHANNEL_TYPE) return matches[_current["position"]] return None def _match_command(word): matches = [cmd for cmd in commands._commands.keys() if cmd[:len(word)].lower()==word.lower()] if matches: _raise_position(matches, COMMAND_TYPE) return matches[_current["position"]] return None def stopIteration(): """ user does not want any more results, stop the iteration. This is the case if, for example, the tab is switched or the input bar is activated. """ _reset_iteration() def complete(currentTab, entry, text): """ search for the last typed word and try to complete it in the following order: - search for a suitable nick in the channel (if tab is a channel) - search for a suitable nick in the query (if tab is a query) - search for a suitable command (if the first letter is a '/') - search for a suitable channel (if the first letter is a valid channel prefix) If one of the searches matches, this function returns True. If no search matches, False is returned. The function checks, if the word searched for was the same as last time. So if complete is called another time, it will continue searching and using the next result to the one before. """ global _current if not text: return False if currentTab != _current["tab"]: # reset iteration, data is not up to date. # start new iteration, then _reset_iteration() _current["tab"] = currentTab if _current["needle"]: # continue searching for `needle` word = _current["needle"] text = _removeLastCompletion(entry, text) else: # get the word to complete # "f| || f |" word = text[0:entry.get_position()].split(" ")[-1].strip() _current["needle"] = word if not word: return False match = None if currentTab and currentTab.is_channel(): # look for nicks match = _match_nick_in_channel(currentTab, word) if match: # if the word is in a sentence, use command # completion (only whitespace) if text.count(" ") < 1: separator = config.get("chatting", "nick_separator") else: separator = " " _appendMatch(entry, text, word, match, separator = separator) return True elif currentTab and currentTab.is_query(): # look for my nick or the other nick match = _match_nick_in_query(currentTab, word) if match: if text.count(" ") < 1: separator = config.get("chatting", "nick_separator") else: separator = " " _appendMatch(entry, text, word, match, separator = separator) return True # ** no successful completion so far ** # channel completion if (currentTab and word[0] in (currentTab.is_server() and currentTab.support_chantypes or currentTab.server.support_chantypes)): match = _match_channel(word) if match: _appendMatch(entry, text, word, match) return True # *** command completion *** if word[0] == "/": match = _match_command(word[1:]) if match: _appendMatch(entry, text, word, "/"+match) return True return False sushi-1.4.0+dfsg/tekka/tekka/helper/url.py0000664000175000017500000000445411700417156020264 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import re urlExp = re.compile("(\w+)://[^ \t\"'<>]+[^ \t\"'<>,.]") def URLToTag(message): """ searches for an URL in message and sets an -tag arround it, then returns the new string """ lastEnd = 0 while True: match = urlExp.search(message, lastEnd) if not match: break mStart = match.start() mEnd = match.end() lastEnd = mStart url = message[mStart:mEnd] if url[-1] == ")" and (url.count("(") - url.count(")") != 0): mEnd -= 1 url = message[mStart:mEnd] tagStart="" % url tagEnd = "" msgStart = message[0:mStart] msgEnd = message[mEnd:] newUrl = tagStart + url + tagEnd message = msgStart + newUrl + msgEnd lastEnd += len(tagStart)+len(tagEnd)+len(url) return message if __name__ == "__main__": urls = ("http://www.example.com/", "See http://www.example.com, and http://www.example.com/.", "http://www.example.com/ex_(ample)", "See URL (http://www.example.com/ex_(ample)).") for url in urls: print url print u"→", URLToTag(url) sushi-1.4.0+dfsg/tekka/tekka/helper/markup.py0000664000175000017500000000551411700417156020757 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ Escape strings so they pass the markup parser of GTK. """ import gobject from . import escape as escape_helper from . import color from .. import config def _escape_ml(msg): """ escape every invalid character via gobject.markup_escape_text from the given string but leave the irc color/bold characters: - chr(2) - chr(3) - chr(31) """ msg = msg.replace("%","%%") # escape % msg = msg.replace(chr(2), "%2") msg = msg.replace(chr(31), "%31") msg = msg.replace(chr(3), "%3") msg = gobject.markup_escape_text(msg) l = escape_helper.unescape_split("%2", msg, escape_char="%") msg = chr(2).join(l) l = escape_helper.unescape_split("%3", msg, escape_char="%") msg = chr(3).join(l) l = escape_helper.unescape_split("%31", msg, escape_char="%") msg = chr(31).join(l) return msg.replace("%%","%") def markup_escape(msg): """ escape for pango markup language """ msg = _escape_ml(msg) # don't want bold/underline, can't use it msg = msg.replace(chr(2), "") msg = msg.replace(chr(31), "") if config.get_bool("color","irc_colors"): msg = color.parse_color_codes_to_tags(msg) else: msg = color.strip_color_codes(msg) return msg def escape(msg): """ Converts special characters in msg and returns the new string. This function should only be used in combination with HTMLBuffer. """ msg = _escape_ml(msg) msg = msg.replace(chr(2), "") # bold-char msg = msg.replace(chr(31), "") # underline-char if config.get_bool("color","irc_colors"): msg = color.parse_color_codes_to_tags(msg) else: msg = color.strip_color_codes(msg) return msg sushi-1.4.0+dfsg/tekka/tekka/helper/color.py0000664000175000017500000001721411700417156020576 0ustar dfilonidfiloni""" Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ IRC color specifications """ import re import gtk from gettext import gettext as _ from .. import config from ..typecheck import types from . import code from . import escape from ..lib import contrast from .. import gui COLOR_PATTERN = "([0-9]{1,2})(,[0-9]{1,2}){0,1}.*" COLOR_TABLE = { 0: contrast.CONTRAST_COLOR_WHITE, 1: contrast.CONTRAST_COLOR_BLACK, 2: contrast.CONTRAST_COLOR_BLUE, 3: contrast.CONTRAST_COLOR_DARK_GREEN, 4: contrast.CONTRAST_COLOR_DARK_RED, 5: contrast.CONTRAST_COLOR_LIGHT_BROWN, 6: contrast.CONTRAST_COLOR_PURPLE, 7: contrast.CONTRAST_COLOR_ORANGE, 8: contrast.CONTRAST_COLOR_YELLOW, 9: contrast.CONTRAST_COLOR_LIGHT_GREEN, 10: contrast.CONTRAST_COLOR_CYAN, 11: contrast.CONTRAST_COLOR_AQUA, 12: contrast.CONTRAST_COLOR_LIGHT_BLUE, 13: contrast.CONTRAST_COLOR_MAGENTA, 14: contrast.CONTRAST_COLOR_GREY, 15: contrast.CONTRAST_COLOR_LIGHT_GREY } COLOR_NAMES = { 0: _("white"), 1: _("black"), 2: _("blue"), 3: _("dark green"), 4: _("dark red"), 5: _("light brown"), 6: _("purple"), 7: _("orange"), 8: _("yellow"), 9: _("light green"), 10: _("cyan"), 11: _("aqua"), 12: _("light blue"), 13: _("magenta"), 14: _("gray"), 15: _("light gray") } def _get_output_bg_color(): return gui.widgets.get_object("output").get_style().base[ gtk.STATE_NORMAL] def _get_output_fg_color(): return gui.widgets.get_object("output").get_style().fg[NORMAL] def get_widget_base_color(widget): return widget.get_style().base[gtk.STATE_NORMAL] @types (msg = basestring) def parse_color_codes_to_tags(msg): """ Parse the mIRC color format ^Cn[,m] and convert it to the intern handled tag. Convert the numbers n and m into contrast color codes and use them as foreground/background. """ def get_gdk_color(ccolor): return contrast.contrast_render_foreground_color( _get_output_bg_color(), ccolor) last_i = -1 count = 0 # openend # initialize attributes self.pattern / self.color_table self = code.init_function_attrs( parse_color_codes_to_tags, pattern = re.compile(chr(3)+COLOR_PATTERN), color_table = COLOR_TABLE) while True: try: i = msg.index(chr(3), last_i+1) except ValueError: break match = self.pattern.match(msg[i:i+6]) if match: groups = match.groups() tag = " 0: # single ^C, if there's an open tag, close it msg = msg[:i] + "
" + msg[i+1:] count -= 1 last_i = i if count != 0: # make sure the is closed. msg = msg + "
" return msg @types (s = basestring) def parse_color_codes_to_markups(s): """ convert color codes to color markups (%C) and escape every % in s with %%. """ s = s.replace("%", "%%") return s.replace(chr(3), "%C") @types (s = basestring) def parse_color_markups_to_codes(s): """ split s for %C markups and parse the numbers following. After parsing, return the new string. """ s_split = escape.unescape_split("%C", s, escape_char="%") return chr(3).join(s_split) @types (text = basestring) def strip_color_codes(text): """ strip all color codes (chr(3)) and the following numbers """ pattern = re.compile("\003([0-9]{1,2}(,[0-9]{1,2})?)?") start = 0 while True: result = pattern.search(text, start) if not result: break text = text[:result.start()] + text[result.end():] start = result.end() return text # Text coloring def is_contrast_color(value): """ checks if the given value is a contrast color or a RGB color """ return isinstance(value, basestring) and value[0] != "#" def get_color_by_key(key, bgcolor=None): """ get the configured color for the given key as GdkColor. The key is defined in config section "colors". Example: get_color_by_key("last_log") -> gtk.gdk.Color("#dddddd") Note that str(gtk.gdk.Color("#000")) == "#000". If bgcolor is None, the bgcolor is retrieved by _get_output_bg_color. """ cvalue = config.get("colors",key) if not bgcolor: bgcolor = _get_output_bg_color() if cvalue == None: raise KeyError, "Unknown color key: '%s'" % (key) if cvalue[0] == "#": return gtk.gdk.Color(cvalue) elif key == "rules_color" and config.is_default("colors",key): return gui.widgets.get_object("output").get_style().base[ gtk.STATE_INSENSITIVE] else: return contrast.contrast_render_foreground_color( bgcolor, int(cvalue)) def get_nick_color(nick): """ Returns a static color for the nick given. The returned color depends on the color mapping set in config module. """ def pick_nick_color(colors, nick): return colors[sum([ord(n) for n in nick]) % len(colors)] if not config.get_bool("tekka","color_text"): return _get_output_fg_color() if not config.get_bool("colors", "nick_contrast_colors"): # pick a color out of the user defined list colors = config.get_list("colors", "nick_colors", []) color = pick_nick_color(colors, nick) return color else: # pick a contrast color bg_color = _get_output_bg_color() color = pick_nick_color(contrast.colors[:-1], nick) r = contrast.contrast_render_foreground_color(bg_color, color) return r def get_text_color(nick): """ Same as color.get_nick_color but for text and defaults to another value (text_message) """ if not config.get_bool("tekka","color_text"): return _get_output_fg_color() colors = contrast.colors[:-1] if not colors or not config.get_bool("tekka","color_nick_text"): return get_color_by_key("text_message") bg_color = _get_output_bg_color() color = colors[sum([ord(n) for n in nick]) % len(colors)] r = contrast.contrast_render_foreground_color(bg_color, color) return r def colorize_message(msgtype, message): if not config.get_bool("tekka", "color_text"): return message else: return "%s" % ( get_color_by_key("text_%s" % msgtype), message) sushi-1.4.0+dfsg/tekka/tekka/helper/singleton.py0000664000175000017500000000274511700417156021465 0ustar dfilonidfiloni""" Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ class SingletonMeta(type): def __new__(cls, name, bases, attrs): instances = {} if cls not in instances: instances[cls] = super(SingletonMeta, cls).__new__( cls, name, bases, attrs) return instances[cls] sushi-1.4.0+dfsg/tekka/tekka/helper/dcc.py0000664000175000017500000000257611700417156020216 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ # status constants (s_new, s_incoming, s_resumable, s_resumed, s_running, s_error) = [1 << n for n in range(6)] sushi-1.4.0+dfsg/tekka/tekka/helper/profile.py0000664000175000017500000000373111700417156021117 0ustar dfilonidfiloni""" Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ # profiling imports import os import sys import logging import cProfile from xdg.BaseDirectory import xdg_cache_home def profileMe(file): def get_location(file): path = os.path.join(xdg_cache_home, "sushi", "tekka") if not os.path.exists(path): try: os.makedirs(path) except BaseException as e: logging.info("Profiling disabled: %s" % e) return None return os.path.join(path, file) def deco(fun): def new(*args, **kwargs): val = None file_path = get_location(file) if None == file: return fun(*args, **kwargs) cProfile.runctx("val = fun(*args,**kwargs)", {"fun":fun}, locals(), file_path) return val if "-p" in sys.argv: return new return fun return deco sushi-1.4.0+dfsg/tekka/tekka/config.py0000664000175000017500000003566411700417156017457 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2008 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import os import sys import logging # lists are parsed via json import json from xdg.BaseDirectory import xdg_config_home, xdg_data_home, \ xdg_cache_home import ConfigParser from .lib import contrast from .typecheck import types from .helper.escape import unescape_split, escape_join from . import update_handler prefix = "" defaults = {} config_parser = None config_file = "" encoder = json.JSONEncoder() decoder = json.JSONDecoder() _watcher = {} update_handler = [update_handler.json_get_list_update] def get_path(*c): return os.path.abspath(os.path.join(prefix, *c)) def set_defaults(): """ Sets the default values. I know that the ConfigParser class has a method to set defaults but these defaults are global and not bound to a section. If you want a default nick color you can set it but if you have another option with the same name the default value will be the same and this sucks. A further point is that this way realizes "private" values which are not written to config files but can be used with the same API. For example the section "uifiles". """ global defaults defaults = {} defaults["tekka"] = {} defaults["tekka"]["logfile"] = os.path.join(xdg_cache_home, "sushi", "tekka.txt") defaults["tekka"]["locale_dir"] = get_path("..", "..", "locale") defaults["tekka"]["plugin_dirs"] = '["' + '","'.join(( os.path.join(xdg_data_home, "tekka", "plugins"), os.path.join(xdg_data_home, "chirashi"), get_path("plugins"), get_path("..", "chirashi") )) + '"]' defaults["tekka"]["use_default_font"] = "True" defaults["tekka"]["font"] = "Monospace 10" defaults["tekka"]["auto_expand"] = "True" defaults["tekka"]["smooth_scrolling"] = "False" defaults["tekka"]["idialog_timeout"] = "False" defaults["tekka"]["idialog_timeout_seconds"] = "5" defaults["tekka"]["show_general_output"] = "True" defaults["tekka"]["show_topic_bar"] = "False" defaults["tekka"]["hide_topic_if_empty"] = "True" defaults["tekka"]["show_side_pane"] = "True" defaults["tekka"]["show_status_bar"] = "True" defaults["tekka"]["rgba"] = "False" defaults["tekka"]["close_maki_on_close"] = "False" defaults["tekka"]["color_text"] = "True" # colors enabled? defaults["tekka"]["color_nick_text"] = "False" # color the text as well as the nick defaults["tekka"]["ask_for_key_on_cannotjoin"] = "True" defaults["tekka"]["switch_to_channel_after_join"] = "True" defaults["tekka"]["whois_dialog"] = "True" # pop up a dialog on /whois? defaults["tekka"]["divider_length"] = "30" # how much spaces one divider has defaults["tekka"]["max_output_lines"] = "500" # max. lines in one output window defaults["tekka"]["profiling"] = "False" # performance profiling switch defaults["tekka"]["popup_line_limit"] = "10" defaults["tekka"]["names_columns"] = "5" # nicks in one row in /names output defaults["tekka"]["browser"] = None defaults["tekka"]["text_rules"] = "True" defaults["tekka"]["rules_limit"] = "3" defaults["dcc"] = {} defaults["dcc"]["show_ident_in_dialog"] = "False" defaults["general_output"] = {} defaults["general_output"]["valid_types"] = '["message","action","highlightmessage","highlightaction"]' defaults["general_output"]["filter"] = "" """ filter take place here. 'type == "message" and server == "euIRC" and channel == "#bsdunix"' 'not (type == "action" and server == "Freenode" and channel == "#sushi-irc")' """ defaults["sizes"] = {} defaults["sizes"]["outputVPaned"] = "150" """ [window_height] [window_width] [$(paned)] = """ defaults["colors"]={} defaults["colors"]["own_nick"] = str(contrast.CONTRAST_COLOR_GREY) defaults["colors"]["own_text"] = str(contrast.CONTRAST_COLOR_GREY) defaults["colors"]["notification"] = str(contrast.CONTRAST_COLOR_LIGHT_GREY) defaults["colors"]["text_message"] = str(contrast.CONTRAST_COLOR_BLACK) defaults["colors"]["text_action"] = str(contrast.CONTRAST_COLOR_BLACK) defaults["colors"]["text_highlightmessage"] = str(contrast.CONTRAST_COLOR_RED) defaults["colors"]["text_highlightaction"] = str(contrast.CONTRAST_COLOR_RED) defaults["colors"]["nick"] = str(contrast.CONTRAST_COLOR_GREEN) # default foreign nick color defaults["colors"]["last_log"] = str(contrast.CONTRAST_COLOR_LIGHT_GREY) defaults["colors"]["nick_contrast_colors"] = "True" defaults["colors"]["nick_colors"] = '["#AA0000","#2222AA","#44AA44","#123456","#987654"]' defaults["colors"]["rules_color"] = "auto" # color for htmlbuffer ruling defaults["colors"]["irc_colors"] = "True" # display IRC colors (\003X,Y) # markup colors defaults["colors"]["new_message"] = str(contrast.CONTRAST_COLOR_LIGHT_BROWN) defaults["colors"]["new_action"] = str(contrast.CONTRAST_COLOR_LIGHT_BROWN) defaults["colors"]["new_highlightmessage"] = str(contrast.CONTRAST_COLOR_DARK_RED) defaults["colors"]["new_highlightaction"] = str(contrast.CONTRAST_COLOR_DARK_GREEN) defaults["colors"]["color_new_messages"] = "False" defaults["chatting"]={} defaults["chatting"]["last_log_lines"] = "10" defaults["chatting"]["quit_message"] = "Leading." defaults["chatting"]["part_message"] = "Partitioning." defaults["chatting"]["nick_separator"] = ": " defaults["chatting"]["time_format"] = "%H:%M" defaults["chatting"]["highlight_words"] = "[]" defaults["autoload_plugins"] = {} # section for update handler specific options defaults["updates"]={} # Add default sections to config parser # so setting is easier for section in defaults.keys(): try: config_parser.add_section(section) except ConfigParser.DuplicateSectionError: continue # sections defined below are not added to the configParser and # can't be set by the set method (will raise NoSectionError) defaults["uifiles"] = {} defaults["uifiles"]["mainwindow"] = get_path("ui", "main_window.ui") defaults["uifiles"]["menus"] = get_path("ui", "menus") + os.path.sep defaults["uifiles"]["dialogs"] = get_path("ui", "dialogs") + os.path.sep def read_config_file(): """ Reads the config file. """ success = config_parser.read([config_file]) if not success: print "Failed to parse config file '%s'" % config_file return False return True def write_config_file(): """ Writes the config values from the ConfigParser object into the given file (config_file) """ if not config_parser: logging.error("Config module not loaded. I don't save anything.") return # remove empty sections so the won't be written for section in config_parser.sections(): if len(config_parser.items(section)) == 0: config_parser.remove_section(section) f = file(config_file, "w") config_parser.write(f) f.close() @types(section=basestring, user_data=tuple) def add_watcher(section, value, callback, user_data=()): """ add watcher to listen for changes on a variable """ if _watcher.has_key(section): if _watcher.has_key(value): _watcher[section][value][callback] = user_data else: _watcher[section][value] = {callback:user_data} else: _watcher[section] = {value:{callback:user_data}} def remove_watcher(section, value, callback): """ remove a watcher (callback) for this section/value """ try: l = _watcher[section][value] i = l.index(callback) del l[i] return True except ValueError, KeyError: return False def _call_watcher(section, value): """ call registered watcher for section and value """ try: w = _watcher[section][value] except KeyError: return for (callback,args) in w: watcher(section, value, *args) @types (section = basestring) def has_section(section): return config_parser.has_section(section) @types (section=basestring) def create_section(section): """ creates config section `section`. """ if not config_parser or config_parser.has_section(section): return False config_parser.add_section(section) return True @types (section=basestring) def remove_section(section): """ removes the section """ if not config_parser or not config_parser.has_section(section): return False config_parser.remove_section(section) return True @types (section=basestring, option=basestring) #@on_fail (print_debug, "ConfigError while setting %s:%s to %s") def set(section, option, value): """ Sets in the section the option to value. On success the method returns True. """ if not config_parser: return False # TODO: enable, test, stuff #_call_watcher(section, option) try: config_parser.set(section, option, str(value)) except ConfigParser.NoSectionError: return False else: return True @types(section=basestring, option=basestring, value=bool) def set_bool(section, option, value): return set(section, option, str(value)) @types (section=basestring, option=basestring, l=list) def set_list(section, option, l): """ Set the content of l as value of option. Lists are saved in a JSON parseable format. """ s = encoder.encode(l) return set(section, option, s) @types (section=basestring, option=basestring, value=basestring) def append_list(section, option, value): """ Add value to the list identified by option """ v = get_list(section, option, []) v.append(value) return set_list(section, option, v) @types (section=basestring, option=basestring) def unset(section, option): """ Removes the option in the section. Returns True on success otherwise False. """ if not config_parser: return False try: config_parser.remove_option(section, option) except ConfigParser.NoSectionError,e: print "Unsetting ('%s','%s') failed: %s" % (section,option,e) return False return True @types (section=basestring, option=basestring) def get(section, option="", default=None): """ Returns the value for option in section, on error the method returns default. If option is not given, the whole section is returned as dictionary of type {option:value}. If there are default values for the section they will be merged in. The `option`-value is handled case-insensitive. get("tekka") will return {"server_shortcuts":"1"} get("tekka","server_shortcuts") will return "1" get("tekki") will return default """ if not config_parser: return default if not option: # get the whole section if config_parser.has_section(section): # the section is noticed by the parser, # merge with defaults (if any) and return # the value-dict new = dict(config_parser.items(section)) if defaults.has_key(section): # merge defaults + config values together copy = defaults[section].copy() copy.update(new) return copy else: return new elif defaults.has_key(section): # the config parser does not know the # section but it's found in defaults-dict. # This is probably a private section. return defaults[section] else: return default else: # get specific option try: return config_parser.get(section, option) except (ConfigParser.NoOptionError, ConfigParser.NoSectionError),e: if defaults.has_key(section): try: return defaults[section][option] except KeyError: return default else: return default # usually this is not reached return default @types (section=basestring, option=basestring) def get_list(section, option, default): """ Splits the option in the section for "," and returns a list if the splitting was successful. Else the method will return "default". Notice: If there's an empty string set, this function will return default. """ res = get(section, option, default) if res == default or not res: return default l = decoder.decode(res) if l == default or not l: return default return l @types (section=basestring, option=basestring) def get_bool(section, option, default=False): """ Returns True or False if the value is set or unset. """ res = get(section, option, default) if res == default: return default if res.lower() == "true" or res == "1": return True return default @types (section=basestring, option=basestring) def get_default(section, option=""): """ Returns the default value for the option in the given section. If no option is given (option = None) all defaults of the given section are returned as a dictionary. If there are no defaults, None is returned. """ if not option: if defaults.has_key(section): return defaults[section] else: if defaults.has_key(section): if defaults[section].has_key(option): return str(defaults[section][option]) return None def is_default(section, option): """ check if the value of the option matches the default value for the option in the section. """ return get_default(section,option) == get(section,option) def reset_value(section, option): set(section, option, get_default(section, option)) @types (path=basestring) def check_config_file(path): """ check if config file exists and create it if not """ if not os.path.exists (path): # create the directories try: os.makedirs (os.path.join (os.path.split (path)[0])) except os.error: print "Error while creating neccessary directories: %s"\ % (os.error) return False try: f = file (path, "w") except BaseException as e: print "Error while creating config file: %s" % (e) return False else: f.close() return True else: return True return False def setup(): """ Find the usual location of the config dir (XDG_CONFIG_HOME/sushi/tekka) and parse the config file if found. """ global config_parser, config_file global prefix if os.path.islink(sys.argv[0]): link = os.readlink(sys.argv[0]) if not os.path.isabs(link): link = os.path.join(os.path.dirname(sys.argv[0]), link) prefix = os.path.dirname(os.path.abspath(link)) else: prefix = os.path.dirname(os.path.abspath(sys.argv[0])) config_parser = ConfigParser.ConfigParser() set_defaults() config_file = os.path.join (xdg_config_home, "sushi", "tekka") if not check_config_file(config_file): print "Config file creation failed. Aborting." return read_config_file() for handler in update_handler: handler() sushi-1.4.0+dfsg/tekka/tekka/plugins.py0000664000175000017500000002142311700417156017657 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ """ plugin interface load(filename) -> imp(filename) -> plugins[filename] = .filename(pluginInterface) unload(filename) -> plugins[filename].unload() -> del plugins[filename] """ import os import imp import sys from gettext import gettext as _ import logging from . import config from . import gui from .lib.error import TekkaError _module_prefix = "tekkaplugin_" _plugins = {} ( PLUGIN_MODNAME, PLUGIN_MODULE, PLUGIN_INSTANCE, PLUGIN_INFO_LENGTH ) = range(4) def generic_error(primary, secondary): gui.mgmt.show_inline_message(primary, secondary, dtype="error") def strip_suffix(filename): """ foo.py -> foo """ return os.path.split(filename)[-1].split(".")[0] def get_plugin_config_section(filename): return "plugin_"+strip_suffix(filename) def is_loaded(filename): """ returns True if the plugin is loaded, otherwise False """ return _plugins.has_key(filename) def _register_plugin(filename, modname, module, instance): """ add plugin to local plugin dict, key is filename """ global _plugins if _plugins.has_key(filename): return False _plugins[filename] = (modname, module, instance) return True def _unregister_plugin(filename): """ remove plugin from local plugin dict """ global _plugins if not _plugins.has_key(filename): return False del _plugins[filename] return True def _find_module(filename): """ wrapper for imp.find_module. Searches for the module named after filename in the configured search path (tekka, plugin_dirs). """ # get the name of the module to search for name = strip_suffix(filename) mod_info = None try: mod_info = imp.find_module( name, config.get_list("tekka","plugin_dirs",[])) except ImportError as e: generic_error( _("Plugin could not be loaded."), _("Plugin %(plugin)s could not be loaded.\n" "The following error occurred: %(error)s") % { "plugin": filename, "error": e}) return None if not mod_info: generic_error( _("Plugin could not be loaded."), _("Plugin %(plugin)s could not be loaded.") % { "plugin": filename}) return None return mod_info def _load_module(filename, mod_info): """ wrapper for imp.load_module. Returns a tuple with the identifying name of the loaded module and the module itself if loading was successful. Otherwise the function returns (None,None). """ name = strip_suffix(filename) plugin = None modname = _module_prefix + name try: plugin = imp.load_module(modname, *mod_info) except Exception as e: generic_error( _("Plugin could not be loaded."), _("Plugin %(plugin)s could not be loaded.\n" "The following error occurred: %(error)s") % { "plugin":name, "error":e}) try: mod_info[0].close() except (IndexError,AttributeError): pass return modname, plugin def _unload_module(name): """ unload the module loaded by imp.load_module by deleting it's reference from sys.modules """ try: del sys.modules[name] except KeyError: logging.debug("plugin_control: failed to unload.", exc_info = True) def load(filename): """ load a module named after filename in the configured search path (tekka, plugin_dirs), instance the class named after the module (np for np.py) and register the bunch. On error this function calls generic_error() with an specific error message and returns False. Otherwise this function returns True. """ global _plugins if _plugins.has_key(filename): generic_error( _("Plugin is already loaded."), _("Plugin %(plugin)s is already loaded.") % { "plugin": filename}) return False mod_info = _find_module(filename) if not mod_info: return False modname, plugin = _load_module(filename, mod_info) classname = strip_suffix(filename) if not plugin: _unload_module(modname) return False try: instance = eval ("plugin.%s()" % (classname)) except BaseException as e: generic_error(_("Plugin could not be loaded."), _("Plugin %(plugin)s could not be loaded.\n" "The following error occurred: %(error)s") % { "plugin": filename, "error": e}) _unload_module(modname) return False if not _register_plugin(filename, modname, plugin, instance): _unload_module(modname) return False return True def unload(filename): """ Call unload() in the plugin instance, unload the module and unregister it. On success this function returns True, otherwise it returns False. """ global _plugins try: entry = _plugins[filename] except KeyError: generic_error(_("Plugin could not be unloaded."), _("Plugin %(plugin)s could not be unloaded, because it is not loaded.") % {"plugin": filename}) return False # tell the instance, it's time to go try: entry[PLUGIN_INSTANCE].unload() except: pass _unload_module(entry[PLUGIN_MODNAME]) # unregister locally return _unregister_plugin(filename) def _check_info_tuple(info): if (type(info) != tuple or len(info) != PLUGIN_INFO_LENGTH or len([n for n in info if type(n) != str])): return False return True def get_info(filename): """ return the plugin info from the plugin. If any error occurs, this function returns None, else it returns a tuple. tuple returned: (, , ) """ global _plugins if _plugins.has_key(filename): try: info = _plugins[filename][PLUGIN_MODULE].plugin_info except: return None if not _check_info_tuple(info): return None return info else: mod_info = _find_module(filename) if not mod_info: return None modname, plugin = _load_module(filename, mod_info) if not plugin: return None try: info = plugin.plugin_info except AttributeError: _unload_module(modname) return None # return None if the attribute is not a tuple # or any item in the tuple is not a string if not _check_info_tuple(info): _unload_module(modname) return None _unload_module(modname) return info return None def _check_options_tuple(options): if type(options) != tuple: return TekkaError("Need type tuple") for x in options: # name, label and type are required if type(x) != tuple or len(x) < 3: return TekkaError( "Invalid type or incorrect number of parameters in option " "tuple: %s" % (x)) return None def get_options(filename): """ Return the configurable options and the input types associated with every option as well as an error object in case an error happened. Otherwise the error object is None. If no options are found, None is returned. e.g. ( ("pass", "some label", sushi.TYPE_PASSWORD, ""), ("name", "another label", sushi.TYPE_ENTRY, "default")) """ global _plugins def retrieve_options(plugin): try: options = plugin.plugin_options except AttributeError: return None,None # there are no options err = _check_options_tuple(options) if err: return None,err return options,None if _plugins.has_key(filename): return retrieve_options(_plugins[filename][PLUGIN_MODULE]) else: mod_info = _find_module(filename) if not mod_info: return None,TekkaError("Module not found.") modname, plugin = _load_module(filename, mod_info) if not plugin: return None,TekkaError("Can't load plugin.") options,err = retrieve_options(plugin) if err != None: return None,err _unload_module(modname) return options,None return None,TekkaError("Unknown error.") def load_autoloads(): autoloads = config.get("autoload_plugins").items() for opt,filename in autoloads: logging.info("autoloading '%s'" % (filename)) if not load(filename): generic_error( _("Plugin could not be loaded."), _("Plugin %(plugin)s could not be loaded " "automatically.") % {"plugin": filename}) sushi-1.4.0+dfsg/tekka/waf0000777000175000017500000000000011704540066016132 2../wafustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tekka.1.in0000664000175000017500000000053211700417156016311 0ustar dfilonidfiloni.\"Text automatically generated by txt2man .TH tekka 1 "" "tekka @SUSHI_VERSION@" "" .SH NAME tekka \- Graphical IRC client .SH SYNOPSIS \fBtekka\fP .SH DESCRIPTION \fBtekka\fP provides a graphical IRC client that uses \fBmaki\fP. .SH SEE ALSO \fBmaki\fP(1), \fBnigiri\fP(1), \fBsushi\-remote\fP(1) .SH AUTHORS Marian Tietz .br Michael Kuhn sushi-1.4.0+dfsg/tekka/tests/0000775000175000017500000000000011700417156015665 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/tests/test_historyhelper.py0000664000175000017500000000140311700417156022175 0ustar dfilonidfiloniimport os from tekka.helper import history def start_test(gui): def dprint(*x,**y): gui.mgmt.myPrint(*x,**y) dprint("get_log_dir()") dprint("%s" % history.get_log_dir()) dprint("get_available_servers()") dprint("%s" % history.get_available_servers()) dprint("get_available_conversations('euIRC')") dprint("%s" % history.get_available_conversations('euIRC')) dprint("get_available_logs('euIRC','#bsdunix')") dprint("%s" % history.get_available_logs('euIRC', '#bsdunix')) dprint("get_log_data('2009-13.txt')") dprint("%s" % (history.get_log_date('2009-13.txt'),)) fpath = os.path.join(history.get_log_dir(), 'euIRC', '#bsdunix', '2009-03.txt') dprint("parse_day_offsets(%s)" % (fpath)) dprint("%s" % (history.parse_day_offsets(file(fpath,"r")),)) sushi-1.4.0+dfsg/tekka/tests/test_contrast_selector.py0000664000175000017500000000036211700417156023034 0ustar dfilonidfiloni import gtk import tekka.main tekka.main.setup() from tekka.lib.contrast_color_table import ContrastColorTable w = gtk.Window() x = ContrastColorTable() w.add(x) w.connect("destroy", lambda *_: gtk.main_quit()) w.show_all() gtk.main() sushi-1.4.0+dfsg/tekka/tests/test_typecheck.py0000664000175000017500000000203611700417156021256 0ustar dfilonidfilonifrom tekka.typecheck import types @types() def test0(a): return True @types(a = int, b = int) def test1(a,b): return True @types(a = str, b = str) def test2(a,b): return True @types(a = (unicode,str), b = (unicode,str)) def test3(a,b): return True if __name__ == "__main__": def red(s): return "%s[31m%s%s[0m" % (chr(27),s,chr(27)) def green(s): return "%s[32m%s%s[0m" % (chr(27),s,chr(27)) def assert_raise(et, cs): try: print "Executing '%s'...\t" % (cs), eval(cs) except BaseException as e: if type(e) == et: print green("success") return print red("fail") assert( True == test0(1) ) assert( True == test1(1,2) ) assert_raise(TypeError, """test1(1.1,2.1)""") assert_raise(TypeError, """test1("1","2")""") assert( True == test2("a","b") ) assert_raise(TypeError, """test2(1,2)""") assert_raise(TypeError, """test2(u"foo",u"bar")""") assert( True == test3(u"foo",u"bar") ) assert( True == test3("foo", "bar") ) assert_raise(TypeError, """test3(1,2)""") assert_raise(TypeError, """test3(1.0,2.0)""") sushi-1.4.0+dfsg/tekka/tests/test_commands.py0000664000175000017500000000734511700417156021110 0ustar dfilonidfiloniimport command_handler as cmdh """ This file is more likely to find programming errors than to check logical flaws. It will NOT show you if a command acted correctly, it will only show if it's not faulty programmed. """ def start_test(gui): _commands = { "connect" : cmdh.cmd_connect, "nick" : cmdh.cmd_nick, "part" : cmdh.cmd_part, "join" : cmdh.cmd_join, "j" : cmdh.cmd_join, "me" : cmdh.cmd_action, "kick" : cmdh.cmd_kick, "mode" : cmdh.cmd_mode, "topic": cmdh.cmd_topic, "quit" : cmdh.cmd_quit, "away" : cmdh.cmd_away, "back" : cmdh.cmd_back, "nickserv" : cmdh.cmd_nickserv, "ctcp" : cmdh.cmd_ctcp, "names" : cmdh.cmd_names, "notice" : cmdh.cmd_notice, "msg" : cmdh.cmd_message, "oper" : cmdh.cmd_oper, "list" : cmdh.cmd_list, "raw" : cmdh.cmd_raw, "stoplist" : cmdh.cmd_stop_list, "whois" : cmdh.cmd_whois, "query": cmdh.cmd_query, "clear": cmdh.cmd_clear, "help": cmdh.cmd_help } for (cmd,hdl) in _commands.items(): gui.mgmt.myPrint("Testing %s with None args..." % (cmd)) hdl(None, None, []) gui.mgmt.myPrint("Testing simple commands...") s,c = gui.tabs.get_current_tabs() gui.mgmt.myPrint("Testing with server %s and channel %s.\n" "Server is connected: %s\n" "Channel is query: %s\n" "Channel is joined: %s\n" % ( s, c, s and s.connected, c and c.is_query(), c and c.is_channel() and c.joined)) gui.mgmt.myPrint("cmd_connect(%s)" % (s.name,)) # Should do nothing if we're connected cmdh.cmd_connect(s, c, [s.name]) gui.mgmt.myPrint("cmd_nick(%s)" % (s.nick,)) # Should do nothing (nick change to the same nick) cmdh.cmd_nick(s, c, [s.nick]) gui.mgmt.myPrint("cmd_part(%s)" % (c.name,)) # Part the current channel cmdh.cmd_part(s, c, [c.name]) gui.mgmt.myPrint("cmd_join(%s)" % (c.name,)) # Should join the channel cmdh.cmd_join(s, c, [c.name]) gui.mgmt.myPrint("cmd_action(%s)" % (["tests","arround"],)) # Should print " tests arround" cmdh.cmd_action(s, c, ["tests","arround"]) gui.mgmt.myPrint("cmd_mode(%s)" % ([c.name, "+b", s.nick],)) # Should ban us cmdh.cmd_mode(s, c, [c.name, "+b", s.nick]) gui.mgmt.myPrint("cmd_mode(%s)" % ([c.name, "-b", s.nick],)) # Should unban us cmdh.cmd_mode(s, c, [c.name, "-b", s.nick]) gui.mgmt.myPrint("cmd_away(%s)" % ("i am away now",)) # Should set us away with the message "i am away nao" cmdh.cmd_away(s, c, ["i","am","away","nao"]) gui.mgmt.myPrint("cmd_back()") # Should set us back cmdh.cmd_back(s, c, []) gui.mgmt.myPrint("cmd_ctcp(%s)" % ([s.nick, "CTCPOHAI"],)) # should send us a CTCP message with content "CTCPOHAI" cmdh.cmd_ctcp(s, c, [s.nick, "CTCPOHAI"]) gui.mgmt.myPrint("cmd_names(%s)" % (c.name,)) # should print the NAMES list of the given channel cmdh.cmd_names(s, c, [c.name]) gui.mgmt.myPrint("cmd_notice(%s)" % ([s.nick, "NOTICEOHAI"],)) # Should send us a notice with the content "NOTICEOHAI" cmdh.cmd_notice(s, c, [s.nick, "NOTICEOHAI"]) gui.mgmt.myPrint("cmd_message(%s)" % ([s.nick, "MESSAGEOHAI"],)) # Should send us a message with the content "MESSAGEOHAI" cmdh.cmd_message(s, c, [s.nick, "MESSAGEOHAI"]) gui.mgmt.myPrint("cmd_list(%s)" % (c.name,)) # Should LIST the current channel cmdh.cmd_list(s, c, [c.name]) gui.mgmt.myPrint("cmd_stop_list()") # Should do nothing or stop the listing from above (if still running) cmdh.cmd_stop_list(s, c, []) gui.mgmt.myPrint("RAW") # Should send a raw PRIVMSG to ourself cmdh.cmd_raw(s, c, ["PRIVMSG","",":",s.nick,"","RAWOHAI"]) gui.mgmt.myPrint("cmd_whois(%s)" % (s.nick,)) # Trigger whois on ourself cmdh.cmd_whois(s, c, [s.nick]) gui.mgmt.myPrint("cmd_clear()") # Should clear all outputs cmdh.cmd_clear(s, c, []) # XXX: Not tested here: # - quit # - oper # - kick # - topic # - nickserv sushi-1.4.0+dfsg/tekka/COPYING0000664000175000017500000000231311700417156015555 0ustar dfilonidfiloniRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. sushi-1.4.0+dfsg/tekka/plugins/0000775000175000017500000000000011700417156016204 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/plugins/sound.py0000664000175000017500000000715011700417156017711 0ustar dfilonidfiloni""" Channel / Query context menu at 4. position [ ] Sound on message receive Configuration dialog: - Position of the entry [menu_position] - Which sound to play [filename] - Use system speaker instead of a file [use_speaker] - Use a command instead of a file [beep_command] GStreamer as playing backend. """ import sushi import tekka from tekka import com import gtk import subprocess from gettext import gettext as _ DEFAULT_POSITION = 8 def tab_id_str(serverName, tabName): if not tabName: return serverName.lower() return "%s_%s" % (serverName.lower(), tabName.lower()) def tab_id(tab): if tab.is_server(): return tab.name.lower() return "%s_%s" % (tab.server.name.lower(),tab.name.lower()) def create_menu_entry(pointedTab, echanged): entry = gtk.CheckMenuItem(label=_("Play sound on message")) entry.connect("toggled", echanged, pointedTab) return entry def beep_speaker(): """ tries several beep methods for different platforms and frameworks and returns if one method was successful. """ try: import winsound return winsound.Beep(30, 1) except: pass try: import MacOS # not in 64 bit return MacOS.SysBeep() except: pass try: return gtk.gdk.beep() except: pass try: tty = file("/dev/tty", "w") tty.write(chr(7)) tty.close() return None except: pass def beep_sound(file): if not file: return try: import winsound return winsound.PlaySound( file, winsound.SND_FILENAME|winsound.SND_ASYNC) except: pass # TODO: WAV playing with GStreamer def setup_menu_wrapper(sound_plugin, entry_value_changed): # entry_value_changed: callback origin_get_menu = tekka.menus.servertree_menu.ServerTreeMenu.get_menu def new_get_menu(self, pointedTab): entry = create_menu_entry(pointedTab, entry_value_changed) entry.show() entry.set_active(eval(sound_plugin.get_config( "beep_%s" % (tab_id(pointedTab)), "False"))) position = int( sound_plugin.get_config( "menu_position", default=str(DEFAULT_POSITION))) menu = origin_get_menu(self, pointedTab) menu.insert(entry, position) return menu tekka.menus.servertree_menu.ServerTreeMenu.get_menu = new_get_menu plugin_info = ( "Plays an optional sound on every message", "0.9", "Marian Tietz") plugin_options = ( ("filename", _("File to play"), sushi.TYPE_STRING, ""), ("use_speaker", _("Make a beep with the speaker"), sushi.TYPE_BOOL, True), ("beep_command", _("Use a command to beep."), sushi.TYPE_STRING, ""), ("menu_position", _("The position in the menu"), sushi.TYPE_NUMBER, DEFAULT_POSITION) ) class sound(sushi.Plugin): def __init__(self): sushi.Plugin.__init__(self, "sound") setup_menu_wrapper( sound_plugin=self, entry_value_changed=self._entry_value_cb) self.connect_signal("message", self._message_cb) def unload(self): self.disconnect_signal("message", self._message_cb) def beep(self): cmd = self.get_config("beep_command") if type(cmd) == str and cmd != "": subprocess.Popen(cmd.split(" ")) return v = self.get_config("use_speaker", default="true") if v.lower() == "true": beep_speaker() else: beep_sound(self.get_config("filename")) def _entry_value_cb(self, entry, tab): """ set config value beep_ to the value of the entry. True -> Beep on new messages, False -> Silence! """ self.set_config( "beep_%s" % (tab_id(tab)), str(entry.get_active())) def _message_cb(self, time, server, from_str, target, msg): if com.parse_from(from_str)[0] == self.get_nick(server): return if (self.get_config( "beep_%s" % (tab_id_str(server, target))) == "True"): self.beep() sushi-1.4.0+dfsg/tekka/plugins/notify.py0000664000175000017500000001153511700417156020073 0ustar dfilonidfiloni# coding: UTF-8 """ Copyright (c) 2009 Michael Kuhn All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import sushi # tekka-specific import tekka.config as config import tekka.gui as gui import gobject import gtk import pynotify import string import json # FIXME configurable highlight words plugin_info = ( "Notifies on highlight.", "1.1", "Michael Kuhn" ) plugin_options = ( ("targets", "Targets (e.g. Freenode:#sushi-irc)", sushi.TYPE_LIST, ""), ) class notify (sushi.Plugin): def __init__ (self): sushi.Plugin.__init__(self, "notify") pynotify.init("tekka") self.caps = pynotify.get_server_caps() try: self.pixbuf = gtk.icon_theme_get_default().load_icon("tekka",64,0) except: self.pixbuf = None # FIXME self.connect_signal("message", self.message_cb) self.connect_signal("action", self.action_cb) def unload (self): self.disconnect_signal("message", self.message_cb) self.disconnect_signal("action", self.action_cb) def notify (self, subject, body): if gui.mgmt.has_focus(): return notification = pynotify.Notification(subject, body) if self.pixbuf: notification.set_icon_from_pixbuf(self.pixbuf) if "append" in self.caps: notification.set_hint_string("append", "allowed") if "x-canonical-append" in self.caps: notification.set_hint_string("x-canonical-append", "allowed") notification.show() def escape (self, message): # Bold message = message.replace(chr(2), "") # Underline message = message.replace(chr(31), "") message = gobject.markup_escape_text(message) return message def has_highlight(self, text, needle): punctuation = string.punctuation + " \n\t" needle = needle.lower() ln = len(needle) for line in text.split("\n"): line = line.lower() i = line.find(needle) if i >= 0: if (line[i-1:i] in punctuation and line[ln+i:ln+i+1] in punctuation): return True return False def build_tab_name(self, server, target): return "%s:%s" % (server, target) def notify_target(self, server, target): """ return True if the user wants to be notified about text in server/target. """ targets = self.get_config("targets") if not targets: return [] return self.build_tab_name(server,target) in json.loads(targets) def message_cb (self, timestamp, server, from_str, target, message): nick = from_str.split("!")[0] own_nick = self.get_nick(server) if own_nick: own_nick = own_nick.lower() if not own_nick: return elif own_nick == nick.lower(): return def in_notify(): self.notify(target, "<%s> %s" % ( nick, self.escape(message))) if own_nick == target.lower(): self.notify(nick, self.escape(message)) elif self.has_highlight(message, own_nick): in_notify() elif self.notify_target(server, target): self.notify("%s:%s:%s" % (server, target, nick), self.escape(message)) else: for word in config.get_list("chatting","highlight_words",[]): if self.has_highlight(message, word): in_notify() break def action_cb (self, time, server, from_str, target, action): nick = from_str.split("!")[0] own_nick = self.get_nick(server) if own_nick: own_nick = own_nick.lower() if not own_nick: return elif own_nick == nick.lower(): return def in_notify(): self.notify(target, "%s %s" % (nick, self.escape(action))) if own_nick == target.lower(): self.notify(nick, self.escape(action)) elif self.has_highlight(action, own_nick): in_notify() elif self.notify_target(server, target): self.notify("%s:%s:%s" % (server, target, nick), self.escape(action)) else: for word in config.get_list("chatting","highlight_words",[]): if self.has_highlight(action, word): in_notify() break sushi-1.4.0+dfsg/tekka/po/0000775000175000017500000000000011700417156015141 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/po/pl.po0000664000175000017500000005340611700417156016124 0ustar dfilonidfiloni# Polish translation for tekka # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-02-14 11:41+0000\n" "Last-Translator: Launchpad Translations Administrators \n" "Language-Team: Polish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "" #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "" #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "" #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "" #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "" #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "" #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "" #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "" #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "" #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "" #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "" #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "" #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "" #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "" #: ../tekka/main.py:785 msgid "Topic: " msgstr "" #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" sushi-1.4.0+dfsg/tekka/po/gl.po0000664000175000017500000010017711700417156016111 0ustar dfilonidfiloni# Galician translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 12:46+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Galician\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Asunto para %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Cambiou o asunto a %(topic)s" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s cambiou o asunto a %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s está ausente (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modos para %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP de %(nick)s al Canal:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Petición CTCP aúa a %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Agora chamase %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s agora chamase %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Foi expulsado de %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s foi expulsado de %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Vostede saíu (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Vostede saíu." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s saíu por (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s saíu." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» uniuse a %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s uniuse a %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Abandonou %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Abandonou %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s abandonouo %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s abandonou %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Vostede non é un operador de canle." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Non existe ese nick/canle." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Non existe ese servidor." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Non existe esa canle." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Razón descoñecida" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "A canle está chea." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "A canle é só para convidados." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Vostede foi vetado" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Necesita a chave correcta da canle." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Vostede non pode unirse a %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Aceptar automaticamente a transferencia de ficheiros" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "«maki» aceptou automaticamente a transferencia dos ficheiros seguintes:\n" "Nome do ficheiro: %(filename)s\n" "Remitente: %(sender)s\n" "Tamaño: %(size)s\n" "Servidor: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "O complemento “%(plugin)s” provocou un erro." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "«tekka» non pode conectar con «maki»." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Comprobe que «maki» está executándose." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Verifique se «maki» está executándose\n" "Ocorreu o erro seguinte: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Produciuse un erro de comunicación con «maki»." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Aconteceu un erro mentres se executaba «%s» con DBus: \n" "%s\n" "Asegúrese de que «maki» está funcionando " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "«tekka» require unha versión superior de «maki»." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Actualice «maki» alomenos á versión %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "Orde descoñecida “%(command)s”, enviando orde crúa «%(raw)s»." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Non se indicou nome de servidor" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Debe introducir un nome de servidor." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Produciuse un erro ao buscar na lista da canle." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Aconteceu un erro de sintaxe na súa busca. O erro é: %s\n" "Consejo: Non debería usar caracteres especiais como «*» ou «.» na súa " "cadea busca se non sabe de expresións regulares." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Está seleccionado sen transferencia!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Vostede debe seleccionar unha transferencia para eliminalo." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Eliminar a transferencia de ficheiros?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" "Ten certeza de que desexa eliminar a transferencia de ficheiros %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompilar e executar" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Ler o historial de todos os xeitos?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "«maki» está conectado remotamente. É posíbel que o historial non estea " "accesíbel. Quere tentalo aínda así?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Historial de %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Non se seleccionou ningún engadido." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Vostede debe seleccionar un engadido para cargalo." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Vostede debe seleccionar un engadido para descargalo." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Non se seleccionou ningún servidor." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Vostede debe seleccionar un servidor para editalo." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Vostede debe seleccionar un servidor para eliminalo." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Produciuse un erro ao recuperar o nome do servidor." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Aconteceu un erro ao recuperar o nome do servidor.\n" "Está conectado a «maki»?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Quen está en %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Datos «quen é» de %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Non se recibiron datos aínda. Está conectado?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Cargando..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Escolla un destino" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Escolla un destino para gardar o ficheiro" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Info: Se vostede non elixe outro destino, este ficheiro vai " "reanudarse." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Transferencia de ficheiro entrante" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Remitente: «%(nick)s»\n" "Nombre do ficheiro: «%(filename)s»\n" "Tamaño do ficheiro: %(bytes)d bytes\n" "Destino: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Ocorreu un erro" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Que non cunda o pánico!\n" "\n" "Aconteceu un erro – sentímolo moito. Síntete libre de reportar un fallo a https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Agochar «%s» mensaxes" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Introduza a chave da canle %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Gardar a chave da canle" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Configurar %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Cor de primeiro plano" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Cor de fondo" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Restablecer cor" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Agochar a xanela principal" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Mostrar a xanela principal" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Asunto da canle %(channel)s en %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Asunto cambiado anteriormente" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "O asunto foi cambiado antes da súa actualización. Desexa facer os cambios " "aínda así?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Benvido/a «tekka»!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Vostede está conectado a «maki». O seguinte paso é conectar cun servidor " "mediante o diálogo de servidores no menú «tekka»." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Non está conectado a «maki». Sen «maki» non pode conectarse a servidores ou " "escribir mensaxes.\n" "\n" "Se está a ter problemas ao executar «maki», visite: http://sushi.ikkoku.de/ " "e busque unha solución ao seu problema. De non atopala, síntase libre de " "preguntar á asistencia." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Reiniciar marcado" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Está certo de que quere pechar a canle «%(name)s»?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Está certo de que quere pechar a consulta «%(name)s»?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Está certo de que quere pechar o servidor «%(name)s»?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Alcume: " #: ../tekka/main.py:784 msgid "User: " msgstr "Usuario: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Asunto: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Última liña: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Non hai ningunha conexión con «maki»." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Vostede non pode apagar «maki». Non está conectado." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "«tekka» non puido determinar o servidor." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Non hai un servidor activo. Prema nunha lapela de servidor ou na lapela de " "servidor fillo para activar o servidor" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Fallo a creación do widget." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "Produciuse un fallo en «tekka» ao crear o menú de lista de nomes.\n" "É posíbel que haxa ficheiros extraviados. Comprobe se ten os permisos " "axeitados para acceder a todos os ficheiros necesarios para «tekka» e " "reinicie «tekka»." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Ignorando Usuario %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Non escolleu ningún ficheiro" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Vostede non escolleu ningún ficheiro para enviar. Interrompendo." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Escolla un ficheiro para enviar a %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Daniel V. https://launchpad.net/~vzquezdaniel-hotmail\n" " Michael Kuhn https://launchpad.net/~suraia" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Preferencias avanzadas" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Lista de canles" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Cores IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Transferencias de ficheiros" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Tipo de mensaxes a agochar" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Outro" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Propios" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Agochar tipos de mensaxe" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Unión:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Expulsar:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Modo:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Alcume:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Abandonar:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Saír:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Unirse a unha canle" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Unirse _automaticamente" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Nome:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Unirse" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "C_onfigurar" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Engadidos" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Cargar" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Descargar" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filtrar mensaxes" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Axuda:\n" "O primeiro campo é o tipo de mensaxe.\n" "O segundo campo representa ao servidor do que proven a " "mensaxe.\n" "O último campo é a canle/consulta que enviou a mensaxe.\n" "\n" "O último campo é opcional." #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Información:\n" "Os cambios efectuados aplicaranse despois de cerrar este aviso." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "A_uto expandir a árbore do servidor" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Accións:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Ajustes a_vanzados" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Detectar automaticamente as regras da cor" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Co_nversar" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "C_ores" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Apodo predeterminado:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Activar as regras da cor" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Tipo de letra:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Accións destacadas:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Mensaxes destacadas:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Marcar palabras:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Se quiere ter o control de todos os axustes pode usar o diálogo de " "axustes avanzados.\n" "\n" "Aviso:\n" "En algunhas opcións é preciso reiniciar «tekka» para que os cambios teñan " "efecto." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Últimas liñas do rexistro:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Último rexistro:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Mensaxes:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notificación:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Apodo propio:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Texto propio:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Mensaxe de abandono:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Preferencias" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Mensaxe de saída:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Regras da cor:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Apagar «_maki ao pechar" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Formato da hora:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Usar _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Usar o _tipo de letra predeterminado" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Use coles sensíbeis ao contraste" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "Saída _xeral" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "Agoc_har ao pechar" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "Coles do _alcume" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Mostrar a icona de estado" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Lista de servidores" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Engadir servidor" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Lista de ordes" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Engadir un servidor" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Enderezo:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Conexión automática:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Alcume:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Contrasinal de NickServ:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Porto:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Nome real:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Nome do servidor:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Eliminar servidor\n" "\n" "Ten certeza de que desexa eliminar o servidor «%(server)s»?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Eliminar o servidor" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Editar servidor" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Editar o servidor" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ pantasma:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "_Cores do IRC" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "E_ngadidos" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "_Panel lateral" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Barra de estado" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "_Icona de estado" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "_Ferramentas" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Lista de _canles" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Depuración" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "Transferencias de _ficheiros" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Axuda" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "Lista de _servidores" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Apagar" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "Barra de asun_tos" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Ver" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Vetar" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Conceder Semi-Op" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Conceder Op" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Dar voz" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Expulsar" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modos" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Enviar ficheiro" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Retirar Semi-Op" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Retirar Op" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Retirar voz" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Quen é" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Conectar automáticamente" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "Ago_char mensaxes" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Unirse automaticamente" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Estabelecer _chave" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Estabelecer asun_to" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Pechar" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Conectar" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Desconectar" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Historial" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Unirse a unha canle" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Abandonar" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Usuario" #~ msgstr[1] "%d Usuarios" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operador" #~ msgstr[1] "%d Operadores" #~ msgid "Plugin is already loaded." #~ msgstr "O engadido xa está cargado." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "O engadido %(plugin)s xa está cargado." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Non foi posíbel cargar o engadido %(plugin)s.\n" #~ "Ocorreu o erro seguinte: %(error)s" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Non foi posíbel cargar o engadido %(plugin)s." #~ msgid "Plugin could not be loaded." #~ msgstr "Non foi posíbel cargar o engadido." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Non foi posíbel cargar automáticamente o engadido %(plugin)s." #~ msgid "Plugin could not be unloaded." #~ msgstr "Non foi posíbel cargar o engadido." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "Non foi posíbel descargar o engadido %(plugin)s, xa que non está cargado." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Erro\n" #~ "\n" #~ "Ocorreu un erro — pedimoslle disculpas por iso. Síntase libre de enviar un " #~ "informe de fallo a: https://bugs.launchpad.net/sushi." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "Produciuse un fallo en «tekka» ao crear a árbore de servidores.\n" #~ "É poasíbel que falten algúns focheiros. Comprobe que ten os permisos " #~ "necesarios para acceder a todos os ficheiros que precisa «tekka» e reinicie " #~ "«tekka»." #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ " IRC a cores reais \n" #~ "\n" #~ "Exemplo de uso: \n" #~ "Escriba %C02,01 para o primer plano en azul e o fondo en negro." #~ msgid "#" #~ msgstr "Num." #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Aviso:\n" #~ "Os cambios aplicaranse ao pechar este diálogo." sushi-1.4.0+dfsg/tekka/po/tekka.pot0000664000175000017500000006320111700417156016766 0ustar dfilonidfiloni# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-01-02 22:15+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: ../command_handler.py:53 ../command_handler.py:59 msgid "Warning:" msgstr "" #: ../command_handler.py:54 #, python-format msgid "You are not connected to server %(server)s." msgstr "" #: ../command_handler.py:60 #, python-format msgid "" "The channel %(channel)s is not joined. Everything you write will not be send." msgstr "" #: ../command_handler.py:278 msgid "You are now away." msgstr "" #: ../command_handler.py:291 msgid "You are now back." msgstr "" #: ../command_handler.py:348 msgid "• Begin of names" msgstr "" #: ../command_handler.py:353 msgid "• End of names" msgstr "" #: ../command_handler.py:504 msgid "User" msgstr "" #: ../command_handler.py:505 msgid "Topic" msgstr "" #: ../command_handler.py:582 #, python-format msgid "[%(nick)s] %(message)s" msgstr "" #: ../command_handler.py:587 #, python-format msgid "[%(nick)s] End of whois." msgstr "" #: ../command_handler.py:707 #, python-format msgid "Ignoring %(user)s." msgstr "" #: ../command_handler.py:722 #, python-format msgid "Unignoring %(user)s." msgstr "" #: ../command_handler.py:736 msgid "No users are ignored on this server." msgstr "" #: ../command_handler.py:738 #, python-format msgid "The following users are ignored: %(ulist)s." msgstr "" #: ../plugins/sound.py:37 msgid "Play sound on message" msgstr "" #: ../plugins/sound.py:121 msgid "File to play" msgstr "" #: ../plugins/sound.py:122 msgid "Make a beep with the speaker" msgstr "" #: ../plugins/sound.py:124 msgid "Use a command to beep." msgstr "" #: ../plugins/sound.py:125 msgid "The position in the menu" msgstr "" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "" #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "" #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "" #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "" #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "" #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "" #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "" #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "" #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "" #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "" #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 #: ../tekka/gui/mgmt/__init__.py:266 msgid "tekka could not connect to maki." msgstr "" #: ../tekka/com.py:127 ../tekka/gui/mgmt/__init__.py:267 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "" #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/join.py:61 msgid "Could not determine server." msgstr "" #: ../tekka/dialogs/join.py:62 msgid "tekka could not figure out on which server to join." msgstr "" #: ../tekka/dialogs/join.py:71 #, python-format msgid "Join a channel on %(server)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "" #: ../tekka/gui/dialogs.py:65 #, python-format msgid "Can't open dialog '%s'. There's no connection to maki." msgstr "" #: ../tekka/gui/mgmt/__init__.py:162 #, python-format msgid "%d User" msgid_plural "%d Users" msgstr[0] "" msgstr[1] "" #: ../tekka/gui/mgmt/__init__.py:164 #, python-format msgid "%d Operator" msgid_plural "%d Operators" msgstr[0] "" msgstr[1] "" #: ../tekka/helper/color.py:66 msgid "white" msgstr "" #: ../tekka/helper/color.py:67 msgid "black" msgstr "" #: ../tekka/helper/color.py:68 msgid "blue" msgstr "" #: ../tekka/helper/color.py:69 msgid "dark green" msgstr "" #: ../tekka/helper/color.py:70 msgid "dark red" msgstr "" #: ../tekka/helper/color.py:71 msgid "light brown" msgstr "" #: ../tekka/helper/color.py:72 msgid "purple" msgstr "" #: ../tekka/helper/color.py:73 msgid "orange" msgstr "" #: ../tekka/helper/color.py:74 msgid "yellow" msgstr "" #: ../tekka/helper/color.py:75 msgid "light green" msgstr "" #: ../tekka/helper/color.py:76 msgid "cyan" msgstr "" #: ../tekka/helper/color.py:77 msgid "aqua" msgstr "" #: ../tekka/helper/color.py:78 msgid "light blue" msgstr "" #: ../tekka/helper/color.py:79 msgid "magenta" msgstr "" #: ../tekka/helper/color.py:80 msgid "gray" msgstr "" #: ../tekka/helper/color.py:81 msgid "light gray" msgstr "" #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/" "sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "" #: ../tekka/main.py:785 msgid "Topic: " msgstr "" #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../tekka/plugins.py:110 ../tekka/plugins.py:118 ../tekka/plugins.py:141 #: ../tekka/plugins.py:199 ../tekka/plugins.py:362 msgid "Plugin could not be loaded." msgstr "" #: ../tekka/plugins.py:111 ../tekka/plugins.py:142 ../tekka/plugins.py:200 #, python-format msgid "" "Plugin %(plugin)s could not be loaded.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/plugins.py:119 #, python-format msgid "Plugin %(plugin)s could not be loaded." msgstr "" #: ../tekka/plugins.py:178 msgid "Plugin is already loaded." msgstr "" #: ../tekka/plugins.py:179 #, python-format msgid "Plugin %(plugin)s is already loaded." msgstr "" #: ../tekka/plugins.py:223 msgid "Plugin could not be unloaded." msgstr "" #: ../tekka/plugins.py:223 #, python-format msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." msgstr "" #: ../tekka/plugins.py:363 #, python-format msgid "Plugin %(plugin)s could not be loaded automatically." msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" sushi-1.4.0+dfsg/tekka/po/ru.po0000664000175000017500000011517511700417156016141 0ustar dfilonidfiloni# Russian translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-01-17 11:50+0000\n" "Last-Translator: Alexander 'FONTER' Zinin \n" "Language-Team: Russian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Топик для %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Вы сменили топик на %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s сменил топик на %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s отсутствует (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Моды для %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP сообщение от %(nick)s на канал:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Ваш CTCP запрос к %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Ваш псевдоним изменен на %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s теперь известен как %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(nick)s выпнул вас с %(channel)s по причине (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(nick)s выпнул %(who)s с %(channel)s по причине (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Вы покинули чат по причине (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Вы покинули чат." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s покинул чат по причине (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s покинул чат." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Вы присоеденились к %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s присоеденился к %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Вы покинули %(channel)s по причине (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Вы покинули канал %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s покинул %(channel)s по причине (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s покинул %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Вы не являетесь оператором канала." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Этого ника/канала не существует." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Этого сервера не существует." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Этого канала не существует." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Причина неизвестна" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Канал переполнен." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Канал доступен только по приглашению." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Вы заблокированы." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Требуется правильный ключ канала." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Вы не можете присоедениться к %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Автоматически принятая передача файла" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki автоматически разрешил передачу следующего файла:\n" "Имя файла: %(filename)s\n" "Отправитель: %(sender)s\n" "Размер: %(size)s\n" "Сервер: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Плагин \"%(plugin)s\" вызвал ошибку." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka не может соедениться с maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Пожалуйста проверьте, что maki запущен." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Пожалуйста, убедитесь, запущен ли maki.\n" "Произошла следующая ошибка: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Ошибка связи с maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Произошла ошибка при исполнении '%s' с помощью DBus: \n" "%s\n" "You should keep safe that maki is running " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "требуется новая версия maki для tekka." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Пожалуйста обновите maki до версии, не ниже %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" "• Неизвестная команда “%(command)s”, отправление необработанной команды " "“%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Не задано имя сервера." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Вы должны ввести имя сервера." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Ошибка поиска по списку каналов" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "В вашем поисковом запросе имеется синтаксическая ошибка: %s\n" "Подсказка: Вы не должны использовать специальные символы, такие как " "'*' или '.' в вашем поисковом запросе, если вы не знаете регулярные " "выражения." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Передача не выбрана!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Вы должны выбрать передачу для ее удаления." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Удалить передачу файла?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Вы уверены, что хотите удалить передачу файла %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "К_омпилировать и запустить" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Читать историю в любом случае?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki подключен удаленно. Возможно, история недоступна. Все равно продолжить?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "История для %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Плагин не выбран." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Вы должны выбрать плагин, чтобы загрузить его." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Вы должны выбрать плагин, чтобы выгрузить его." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Сервер не выбран." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Вы должны выбрать сервер для редактирования." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Вы должны выбрать сервер для удаления." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Ошибка при получении имени сервера." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Ошибка при получении имени сервера.\n" "Вы соеденены с maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois на %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Информация о %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "В ближайшее время данные не были получены. Вы все еще подключаетесь?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Загрузка..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Выберите назначение" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Выберете путь для сохранения файла" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Информация: Если вы не укажете другое место назначения, передача " "этого файла будет продолжена." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Входящая передача файла" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Отправитель: ”%(nick)s”\n" "Имя файла: “%(filename)s“\n" "Размер файла: %(bytes)d байт\n" "Направление: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Произошла ошибка" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Не паникуйте!\n" "\n" "Произошла ошибка - мы приносим свои извинения за это. Вы можете сообщит об " "ошибке https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Скрыть '%s' сообщения" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Введите пароль для канала %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Сохранить пароль для канала" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Настроить %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Цвет переднего плана" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Цвет заднего фона" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Сбросить цвет" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Скрыть главное окно" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Показать главное окно" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Топик для канала %(channel)s на %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Топик был поменян раньше." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Тема была изменена до выших изменений. Все равно хотите внести изменения?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Добро пожаловать в tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Вы успешно присоединились к maki. Следующий шаг - присоединение к серверу " "через диалог сервера в меню tekka." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Вы не подключены к maki. Без maki вы не можете подключиться к серверу или " "написать сообщение.\n" "\n" "Если у вас появились проблемы при запуске maki посетите " "http://sushi.ikkoku.de/ и поищите там решение своей проблемы. Либо задайте " "вопрос службе поддержки ." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Сброс разметки" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Вы действительно хотите закрыть канал “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Вы действительно хотите закрыть запрос “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Вы действительно хотите закрыть сервер “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Ник: " #: ../tekka/main.py:784 msgid "User: " msgstr "Пользователь: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Топик: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Последнее предложение: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Нет соединения с maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Вы не можите выйти из maki. Вы не подсоеденины." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka не может определить сервер." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Не выбран активный сервер. Щелкните на вкладку сервера или дочернюю вкладку " "сервера чтобы его активировать." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Не удалось создать виджет" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "tekka не удалось создать меню списка пользователей.\n" "Возможно, некоторые файлы отсутствуют. Проверьте, имеете ли вы доступ ко " "всем файлам, требуемым для tekka и перезапустите tekka." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Игнорирование пользователя %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "C пользователя %(user)s снято игнорирование" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Ни один файл не выбран" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Вы не выбрали файл для отправки. Прерывание." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Выберите файл для отправки %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Alexander 'FONTER' Zinin https://launchpad.net/~spore-09\n" " Ilja https://launchpad.net/~mushketer888-gmail\n" " Ivan Ysh https://launchpad.net/~gadjin\n" " kreo https://launchpad.net/~kreo" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Дополнительные параметры" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Список каналов" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "Реальные цвета IRC" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Цвета IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" "Этот диалог пытается объяснить, как можно использовать цвет в текстt, чтобы " "подчеркнуть фраз в тексте.\n" "\n" "Если вы находитесь в канале или в запросе можно просто отправить " "%C02,01fonter%C, и вы получите синий текст \"fonter\" на черном фоне.\n" "\n" "Синтаксис %C очень простой: %Cforeground,задний_фон.\n" "\n" "Вы даже можете применить только \"задний_фон\", если вас не интересует цвет " "текста.\n" "\n" "Если вы вводите просто \"%С\" это означает, что вы хотите использовать цвета " "по умолчанию.\n" "\n" "Пример использования:\n" "%C02,01 для синего текста и чёрного фона.\n" "\n" "Следующий листинг дает вам представление о цифрах которые вы можете " "использовать в %C и их соответствию цветам." #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "Контрастные цвета" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Пример" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Выберите цвет" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "Quick Brown Fox перепрыгивает через ленивых разработчиков." #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Передачи файлов" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Типы сообщений, которые нужно скрыть" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Прочее" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Собственное" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Скрывать типы сообщений" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Присоединиться:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Выпнуть:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Мод:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Ник:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Часть:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Выход:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Присоединиться к каналу" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Присоединиться автоматически" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Название:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Присоединиться" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "_Настроить" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Плагины" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Загрузить" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Выгрузить" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Фильтр сообщений" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Помощь:\n" "Первое поле - тип сообщения.\n" "Второе поле представляет сообщение сервера.\n" "Последнее поле - канал/запрос, который послал сообщение.\n" "\n" "The last field is optional." #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Информация:\n" "Изменения будут применены после закрытия диалога." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "_Автоматически разворачивать дерево сервера" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Действия:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Рас_ширенные настройки" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Автоопределение цвета правил" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Об_щение" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "Ц_вета" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Ник по умолчанию:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Включить цвет правил" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Шрифт:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Выделенные действия:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Выделенные сообщения:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Выделенные слова:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Если вы хотите управлять всеми настройками, вы можете использовать " "диалоговое окно расширенных настроек.\n" "\n" "Примечание:\n" "Для применения некоторых настроек требуется перезапуск tekka." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Последние строки лога:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Последний лог:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Сообщения:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Уведомления:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Свой ник:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Собственный текст:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Сообщение выхода с канала:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Настройки" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Сообщение при выходе:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Сброс" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Цвет правил:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Выгрузить _maki при закрытии" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Формат времени:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Использовать _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Использовать _стандартный шрифт" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Использовать контрастные цвета" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "О_бщий вывод" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Скрыть при закрытии" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Цвета ника" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Показать значок состояния" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Список серверов" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Добавить Сервер" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Список Комманд" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Добавить Сервер" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Адрес:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Авто-соединение:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Ник:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Пароль для NickServ:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Порт:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Настоящее имя:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Имя сервера:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Удалить сервер\n" "\n" "Вы уверены, что хотите удалить сервер '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Удалить сервер" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Изменить сервер" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Изменить сервер" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "_Цвета IRC" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "П_лагины" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "Б_оковая панель" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Строка состояния" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "_Значок состояния" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "_Инструменты" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Список _Каналов" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Отладка" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "Передачи _файлов" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Справка" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Список серверов" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "В_ыключить" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Строка темы" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Вид" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Блокировка" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Дать статус полу-оператора" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Дать статус оператора" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Дать право голоса" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Игнорировать" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Выкинуть" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Режимы" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Отправить файл" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Забрать права полу-оператора" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Забрать статус оператора" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Забрать голос" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Подключаться автоматически" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "Скрыть сообщения" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Присоединяться автоматически" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Установить _ключ" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Задать тему" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Закрыть" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "Под_ключиться" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Отключиться" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_История" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Присоединиться к каналу" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "Покинуть канал" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Плагин %(plugin)s не может быть загружен автоматически." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Плагин %(plugin)s уже загружен." #~ msgid "Plugin is already loaded." #~ msgstr "Плагин уже загружен." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Плагин %(plugin)s не может быть загружен." #~ msgid "Plugin could not be loaded." #~ msgstr "Плагин не может быть загружен." #~ msgid "Plugin could not be unloaded." #~ msgstr "Плагин не может быть выгружен." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "Плагин %(plugin)s не может быть выгружен, потому что он не загружен." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Плагин %(plugin)s не может быть загружен.\n" #~ "Произошла следующая ошибка: %(error)s" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d пользователь" #~ msgstr[1] "%d пользователя" #~ msgstr[2] "%d пользователей" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Оператор" #~ msgstr[1] "%d Операторы" #~ msgstr[2] "%d Операторов" #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Ошибка\n" #~ "\n" #~ "Сожалеем, произошла ошибка. Вы можете сообщить о ней на " #~ "https://bugs.launchpad.net/sushi." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "tekka не удалось создать меню дерева сервера.\n" #~ "Возможно, некоторые файлы отсутствуют. Проверьте, имеете ли вы доступ ко " #~ "всем файлам, требуемым для tekka и перезапустите tekka." #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Внимание:\n" #~ "Изменения будет применены после закрытия этого диалогового окна." #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ "Настоящие цвета IRC\n" #~ "\n" #~ "Пример использования:\n" #~ "Наберите %C02,01 для использования синего текста на черном фоне." #~ msgid "#" #~ msgstr "#" sushi-1.4.0+dfsg/tekka/po/nb.po0000664000175000017500000006253511700417156016113 0ustar dfilonidfiloni# Norwegian Bokmal translation for tekka # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 12:28+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Norwegian Bokmal\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Emne for %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Du endret emnet til %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s endret emnet til %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s er borte (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "Du er nå kjent som: %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s er nå kjent som %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« Du har blitt kastet ut fra kanalen %(channel)s av %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(who)s ble kastet ut fra kanalen %(channel)s av %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Du har avsluttet (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Du har koblet deg av." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s har koblet seg av (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s har koblet seg av." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Du har blitt med i %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s har blitt med i %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Du har koblet deg av %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Du har igjen %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s har koblet seg av %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s har koblet seg av %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Ingen navn/kanal funnet." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Feil ved servertilkobling." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Ingen kanal valgt." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Ukjent grunn" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Kanalen er full." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Kanalen har invite-only" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Du er bannlyst." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Du trenger korrekt nøkkel til kanalen." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Du kan ikke koble deg til %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka klarte ikke koble til maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Sjekk om maki kjører på maksinen." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Feil med kobling til maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka trenger en oppdatert versjon av maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• Ukjent kommando “%(command)s”, sender kommando som rå “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Feil ved søk i kanaler" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "K_ompiler og kjør" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Hvem er på %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Hvem er oppslag på %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Ingen data oversendt. Er du tilkoblet?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Laster inn..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Velg et sted å lagre filen" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Overføring av fil" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "En feil oppstod" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Tast en nøkkel for kanalen %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Lagre nøkkel for kanalen" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Skjul hovedvinduet" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Vis hovedvindu" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Gjennopprett oppsett" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Ønsker du å lukke kanalen “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Ønsker du å lukke samtalen med “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Øsnker du å avslutte koblingen til serveren “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Brukernavn: " #: ../tekka/main.py:784 msgid "User: " msgstr "Bruker: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Emne: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Siste setning: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " KaiO https://launchpad.net/~kaio-okai\n" " Michael Kuhn https://launchpad.net/~suraia" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Avanserte innstillinger" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Kanal liste" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "IRC-farger" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Filoverføringer" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Annet" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Eie" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Slå sammen:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Spark:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Modus:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Kallenavn:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Del:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Avslutt:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Koble til" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "K_onfigurer" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Programutvidelser" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Last inn" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Fjern innlastet" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filtrer beskjed" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "A_utomatisk forgren serveroppsett" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Handlinger:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "A_vansert Oppsett" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "P_ersonlige meldinger" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "F_arger" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Standard kallenavn:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Skrifttype:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Markerte handling:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Markerte handlinger:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Marker ord:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Hvis du ønsker å ha kontroll på alle alternativer på oppsettet kan du " "bruke avansert oppsett.\n" "\n" "Melding\n" "For noen av valgene er det nødvendig å starte tekka på nytt for å oppdatere " "oppsettet." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Siste linjer i loggen:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Siste loggføring:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Meldinger:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Melding:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Eget kallenavn:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Egen tekst:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Del av beskjed:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Oppsett" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Avsluttningsmelding:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Slå av _maki ved avslutting" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Tidsformat:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Bruk _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Bruk _starndard skriftoppsett" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_Generell utdata" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Skjul ved avslutting" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Navnfarge" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Vis statusikon" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Tjenerliste" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Servertilkobling" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Kommando Liste" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Legg til tjener" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adresse:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Tilkobel automatisk:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Kallenavn:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ passord:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Port:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Eget navn:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Tjenernavn:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Slett Tilkoblingsmaskin\n" "\n" "Er du sikker på at du ønsker å slette tilkoblingsmaskinen '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Fjern tjener" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Endre Server" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Rediger tjener" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "Status _Linje" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Status _Ikon" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Kanalliste" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Feilsøk" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Filoverføringer" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Hjelp" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Emnefelt" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Vis" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Bannlys" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Gi Halv-Operator status" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Gi Operator status" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Gi voice-status" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignorer" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Spark" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Rettigheter" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Velg Halv-Operator" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Fjern Op status" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Fjern voice" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Sett nø_kkel" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Koble til" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Koble fra" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Historikk" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Del" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operator" #~ msgstr[1] "%d Operatorer" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Bruker" #~ msgstr[1] "%d Brukere" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "Advarsel:" sushi-1.4.0+dfsg/tekka/po/fi.po0000664000175000017500000007704411700417156016113 0ustar dfilonidfiloni# Finnish translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 12:48+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Finnish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Aihe kanavalle %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Vaihdoit aiheeksi %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s vaihtoi aiheeksi %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s on poissa (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Tila %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP %(nick)s kanavalle:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP-pyyntö sinulta kohteelle %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Sinut tunnetaan nyt nimellä %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s tunnetaan nyt nimellä %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(nick)s potkaisi sinut kanavalta %(channel)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(nick)s potkaisi käyttäjän %(who)s kanavalta %(channel)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Lopetit (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Lopetit" #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s lopetti (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s lopetti." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Liityit kanavalle %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s liittyi kanavalle %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Poistuit kanavalta %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Poistuit kanvalta %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s poistui kanavalta %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s poistui kanavalta %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Et ole kanavaoperaattori" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: nimimerkkiä/kanavaa ei ole." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: palvelinta ei löydy." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Kanavaa ei ole." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Tuntematon syy" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Kanava on täynnä." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Kanava edellyttää kutsua." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Olet bannattu." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Tarvitset oikean kanava-avaimen" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Et voi liittyä kanavalle %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Tiedostojen siirto hyväksyttiin automaattisesti" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki hyväksyi automaattisesti tiedostojen siirron:\n" "Tiedostonimi: %(filename)s\n" "Lähettäjä: %(sender)s\n" "Koko: %(size)s\n" "Palvelin: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Liitännäinen \"%(plugin)s\" aiheutti virheen." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka ei voinut yhdistää makiin." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Tarkista onko maki käynnissä." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Tarkista onko maki käynnissä.\n" "Virhe tapahtui: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "tiedonvälitysvirhe makin kanssa." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Suoritettaessa kohtaa '%s' DBus kanssa tapahtui virhe: \n" "%s\n" "Turvaa makin suorittaminen " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka vaatii uudemman makin version." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Päivitä maki vähintään versioon %(version)s" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" "• Tuntematon komento “%(command)s”, lähetetään raaka komento “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Palvelimen nimeä ei annettu." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Palvelimen nimi täytyy antaa." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Kanavalistan hakuvirhe." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Virhe hakukyselyssä. Virhe: %s\n" "Vinkki: Älä käytä erikoismerkkejä kuten '*' tai '.' haussa ellet " "tunne säännöllisiä lausekkeita." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Ei siirtoa valittuna!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Sinun tulee valita siirto poistaaksesi sen." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Poistetaanko tiedoston siirto?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Haluatko varmasti poistaa tiedoston siirron %(id)d" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "Käännä ja aja" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Lue historia kuitenkin?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki on yhdistetty etänä. On mahdollista että historia ei ole saatavilla. " "Haluatko kuitenkin yrittää?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Kohteen %(target)s historia" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Yhtään liitännäistä ei ole valittu." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Valitse liitännäinen ladataksesi sen." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Valitse liitännäinen sulkeaksesi sen" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Palvelinta ei valittu." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Valitse palvelin muokataksesi sitä." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Valitse palvelin poistaaksesi sen." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Virhe hakiessa palvelimen nimeä." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Virhe hakiessa palvelimen nimeä.\n" "Oletko yhteydessä makiin?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois palvelimella %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Nimimerkin %(nick)s Whois-tiedot" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Toistaiseksi ei tietoa ole vastaanotettu. Oletko yhä yhteydessä?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Ladataan..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Valitse kohde" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Valitse kohde tallentaaksesi tiedoston" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Tietoa: Tätä tiedostoa jatketaan ellet valitse toista kohdetta." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Saapuva tiedostonsiirto" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Lähettäjä: ”%(nick)s”\n" "Tiedostonimi: “%(filename)s“\n" "Koko: %(bytes)d bytes\n" "Kohde: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Tapahtui virhe" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Älä pelkää!\n" "\n" "Tapahtui virhe - olemme pahoillamme. Voit lähettää virheraportin osoitteessa " "https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Piilota '%s' viestit" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Syötä avain kanavalle %(channel)s" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Tallenna avain kanavalle" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Muuta asetuksia %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Edustaväri" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Taustaväri" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Resetoi väri" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Piilota pääikkuna" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Näytä pääikkuna" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Aihe kanavalle %(channel)s palvelimella %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Aihe muutettu ennen." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Aihe muutettiin ennen päivitystäsi. Haluatko silti suorittaa muutokset?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Tervetuloa tekkaan!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Olet yhteydessä makiin. Seuraava askel on yhdistää palvelimeen käyttäen " "palvelin-ikkunaa tekka-valikossa." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Et ole yhteydessä makiin. Ilman makia et voi yhdistää palvelimiin tai " "kirjoittaa viestejä.\n" "\n" "Jos sinulla on ongelmia makin käyttämisessä vieraile osoitteessa " "http://sushi.ikkoku.de/ ja etsi ratkaisua ongelmiisi. Voit myös kysyä neuvoa." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Palauta oletusmerkintä." #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Haluatko varmasti sulkea kanavan \"%(name)s\"?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Haluatko varmasti sulkea yksityiskeskustelun \"%(name)s\"?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Haluatko varmasti sulkea palvelimen \"%(name)s\"?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Nimimerkki: " #: ../tekka/main.py:784 msgid "User: " msgstr "Käyttäjä: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Aihe: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Viimeinen lause: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Ei yhteyttä makiin." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Et voi sammuttaa makia, koska et ole yhteydessä siihen." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka ei voinut määrittää palvelinta." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Ei aktiivisia palvelimia. Napsauta palvelinvälilehteä tai sen alaista " "aktivoidaksesi palvelimen." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Käyttöliittymäelementin luonti epäonnistui." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "Tekka ei voinut luoda nimimerkkilistavalikkoa.\n" "Tiedostoja saattaa puuttua. Tarkista että tekkan tarvitsemilla tiedostoilla " "on asianmukaiset oikeudet ja käynnistä tekka uudelleen." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Sivuuta käyttäjä %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "Käyttäjää %(user)s ei sivuuteta" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Ei valittua tiedostoa" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Et valinnut lähetettävää tiedostoa. Lopetetaan." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Valitse tiedosto lähetettäväksi käyttäjälle %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Heikki Kulhia https://launchpad.net/~hessuk\n" " Samuel Laurén https://launchpad.net/~softcode\n" " Tuomas Lähteenmäki https://launchpad.net/~lahtis" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Lisäasetukset" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Kanavalista" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "IRC-värien muunto oikeiksi väreiksi" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Värit" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Tiedostosiirrot" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Piilotettavat viestityypit" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Muut" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Omat" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Piilota viestityypit" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Liity:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Potki:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Tila:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Nimimerkki:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Poistu:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Lopeta:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Liity kanavalle" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Liity _automaattisesti" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Nimi:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Liity" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "_Asetukset" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Liitännäiset" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Lataa" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Poistakäytöstä" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Suodata viestit" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Ohje:\n" "ensimmäinen kenttä on viestityyppi.\n" "toinen kenttä on palvelin jolta viesti saapuu.\n" "viimeinen kenttä on kanava/yksityiskeskustelu joka lähetti " "viestin.\n" "\n" "Viimeinen kenttä on vapaaehtoinen" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Tietoa:\n" "Muutokset otetaan käyttöön ikkunan sulkemisen jälkeen." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "Laajenna palvelinpuu a_utomaattisesti" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Toiminnot:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Lisäasetukset" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Tunnista automaattisesti säännön väri" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Keskustelu" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "_Värit" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Oletus nimimerkki:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Salli säännön väri" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Kirjasin:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Korostettavat toiminnot:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Korostettavat viestit:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Korosta sanat:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Jos haluat muokata kaikkia asetuksia voit käyttää lisäasetukset " "ikkunaa.\n" "\n" "Huomautus:\n" "Eräät asetukset edellyttävät tekkan uudelleenkäynnistystä tullakseen voimaan." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Viimeiset lokiviestit:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Viimeisin loki:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Viestit:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Ilmoitus:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Oma nimimerkki:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Oma teksti:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Poistumisviesti:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Asetukset" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Lopetusviesti:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Säännön väri:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Sulje _maki lopettaessa" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Ajan muoto:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Käytä _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Käytä oletuskirjasinta" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Käytä kontrastiherkkiä värejä" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_Yleinen tulostus" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Piilota suljettaessa" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Nimimerkkivärit" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Näytä tilakuvake" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Palvelinluettelo" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Lisää palvelin" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Toimintoluettelo" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Lisää palvelin" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Osoite:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Yhdistä automaattisesti:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Nimimerkki:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ salasana:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Portti:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Oikea nimi:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Palvelimen nimi:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Poista palvelin\n" "\n" "Haluatko varmasti poistaa palvelimen '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Poista palvelin" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Muokkaa palvelinta" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Muokkaa palvelinta" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Haamu:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "IRC _Värit" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "L_iitännäiset" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "S_ivupaneeli" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Tilarivi" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Tilakuvake" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "T_yökalut" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Kanavaluettelo" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Vianetsintä" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Tiedostosiirrot" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "O_hje" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Palvelinluettelo" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Sulje" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Aihepalkki" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Näytä" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Bannaa" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Anna Half-Op" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Anna operaattorioikeus" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Anna puheoikeus" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Hylkää" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Potki" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Tilat" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Lähetä tiedosto" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Peruuta Half-Op" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Peruuta operaattorioikeus" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Peruuta äänioikeus" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Käyttäjän tiedot (Whois)" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Yhdistä automaattisesti" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "P_iilota viestit" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Yhdistä automaattisesti" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Aseta _avain" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Aseta aihe" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Sulje" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Yhdistä" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Katkaise yhteys" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Historia" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Liity kanavalle" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Poistu" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d käyttäjä" #~ msgstr[1] "%d käyttäjää" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d operaattori" #~ msgstr[1] "%d operaattoria" #~ msgid "Plugin is already loaded." #~ msgstr "Lisäosa on jo käynnissä." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Lisäosa %(plugin)s on jo käynnissä." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Lisäosaa %(plugin)s ei voitu ladata.\n" #~ "Virhe tapahtui: %(error)s" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Lisäosaa %(plugin)s ei voitu ladata." #~ msgid "Plugin could not be loaded." #~ msgstr "Lisäosaa ei voitu ladata." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Lisäosaa %(plugin)s ei voitu käynnistää automaattisesti." #~ msgid "Plugin could not be unloaded." #~ msgstr "Lisäosaa ei voitu poistaa käytöstä." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "Lisäosaa %(plugin)s ei voitu poistaa käytöstä, koska se ei ole käytössä." #~ msgid "#" #~ msgstr "#" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Varoitus:\n" #~ "Muutokset toteutetaan suljettuasi ikkunan." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Virhe\n" #~ "\n" #~ "Tapahtui virhe, pahoittelumme. Voit lähettää virheraportin osoitteessa " #~ "https://bugs.launchpad.net/sushi." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "Tekka ei voinut luoda palvelinpuuvalikkoa.\n" #~ "Tiedostoja saattaa puuttua. Tarkista että tekkan tarvitsemilla tiedostoilla " #~ "on asianmukaiset oikeudet ja käynnistä tekka uudelleen." #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ "IRC oikeisiin väreihin\n" #~ "\n" #~ "Käyttöesimerkki:\n" #~ "Kirjoita %C02,01 saadaksesi sinisen korostuksen ja mustan taustan." sushi-1.4.0+dfsg/tekka/po/cs.po0000664000175000017500000006203411700417156016113 0ustar dfilonidfiloni# Czech translation for tekka # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-01-09 10:16+0000\n" "Last-Translator: Konki \n" "Language-Team: Czech\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Téma pro %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Změnili jste téma na %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s změnil téma na %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s je pryč (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Módy pro %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Jste nyní znám/a jako %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s je nyní znám/a jako %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Máte skončit (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Máte skončit." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "" #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Stali jste se členy %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s se stal členem %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "" #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "" #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "Nejste operátorem kanálu." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Neznámý důvod" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Kanál je plný." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Kanál je pouze pro zvané." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Jste banováni." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Potřebujete správný kanálový klíč" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Byl automaticky přijat přenos souboru" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki auto akceptoval následující transfer:\n" "Název souboru: %(filename)s\n" "Odesílatel: %(sender)s\n" "Velikost: %(size)s\n" "Server: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka se nemůže připojit k maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Chyba komunikace s maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka vyžaduje novější verzi maki" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Nebyl zadán název serveru." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Musíte vložit název serveru." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Chyba vyhledávání seznamu kanálů." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Nebyl vybrán převod!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Odstranit převod souboru?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "_Zkompilovat a spustit" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Přesto číst historii?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Nebyl vybrán zásuvný modul." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Musíte vybrat zásuvný modul pro jeho nahrání." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Nebyl vybrán žádný server." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Musíte vybrat server pro jeho editaci." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Musíte vybrat server pro jeho smazání." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Vyskytla se chyba při přijímání názvu serveru.\n" "Jste připojeni k maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Zatim nebyla přijata žádná data. Jste stále připojeni?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Načítá se..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Zvolte umístění" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Zvolte umístění pro uložení souboru" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Příchozí převod souboru" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Vyskytla se chyba" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Uložit klíč ke kanálu" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Konfigurovat %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Barva popředí" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Barva pozadí" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Resetovat barvu" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Skrýt hlavní okno" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Zobrazit hlavní okno" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Vítejte v tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Jste připojeni k maki. Dalším krokem je připojení k serveru přes serverový " "dialog v nabídce tekka." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Opravdu chcete zavřít server “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Přezdívka: " #: ../tekka/main.py:784 msgid "User: " msgstr "Uživatel: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Téma: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Poslední věta: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Žádné připojení k maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Nemůžete vypnout maki. Nejste připojeni." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Selhalo vytváření widgetu." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Nebyl vybrán soubor" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Zvolte soubor pro zaslání k %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Konki https://launchpad.net/~pavel-konkol\n" " Michal Chlup https://launchpad.net/~axs204b" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Pokročilé nastavení" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Seznam kanálů" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Barvy IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Přenosy souborů" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Jiné" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Vlasntní" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Připojit:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Vyhodit:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Přezdívka:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Část:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Odejít:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Připojit ke kanálu" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Připojit _automaticky" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Název:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Připojit" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Zásuvné moduly" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Načíst" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Uvolnit" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filtr zpráv" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Informace:\n" "Změny se projeví po zavření tohoto dialogu." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Písmo:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Poslední záznam:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Zprávy:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Upozornění:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Vlastní přezdívka:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Vlastní text:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Část zprávy:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Nastavení" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Formát času:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Použít _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Použít _základní font" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_Hlavní výstup" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Seznam serverů" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Přidat server" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Seznam příkazů" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Přidat server" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adresa:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Automatické připojení:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Přezdívka:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ heslo:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Port:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Skutečné jméno:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Název serveru:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Smazat server" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Upravit server" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Upravit server" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Seznam kanálů" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Ladit" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Pomoc" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Nabídka témat" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Náhled" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Zablokovat" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Režimy" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #~ msgid "Plugin is already loaded." #~ msgstr "Zásuvný modul je již načtený." #~ msgid "Plugin could not be loaded." #~ msgstr "Zásuvný modul nelze načíst." #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Uživatel" #~ msgstr[1] "%d Uživatelé" #~ msgstr[2] "%d Uživatelů" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operátor" #~ msgstr[1] "%d Operátoři" #~ msgstr[2] "%d Operátorů" sushi-1.4.0+dfsg/tekka/po/uk.po0000664000175000017500000010360211700417156016122 0ustar dfilonidfiloni# Ukrainian translation for tekka # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-01-19 14:20+0000\n" "Last-Translator: Tarnawsky Vitaly \n" "Language-Team: Ukrainian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Тема для %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Ви змінили тему на %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s змінив тему на %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s відсутній (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Режими %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP від %(nick)s у Канал:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Ваше CTCP запрошення %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Ваш нік %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s змінив ім’я на %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(nick)s викинули Вас з каналу %(channel)s по причині: (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(nick)s викинув %(who)s з каналу %(channel)s з причини: (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Ви вийшли (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Ви вийшли." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s вийшов(%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s вийшов." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Ви приєднались до %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s приєднався до %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Ви покинули %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Ви покинули %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s покинув %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s покинув %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Ви не оператор каналу." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Такого ніку/каналу не існує." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Такого сервера не існує." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Канал не існує." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Невідома причина" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Канал наразі переповнений." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Канал тільки по запрошеннях." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Вас заблокували." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Вам потрібний правильний пароль.." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Ви не можете приєднатись до %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Автоматично-одобрена передача файлів" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki автоматично одобрила передачу файлів:\n" "Назва файлу: %(filename)s\n" "Відправник: %(sender)s\n" "Розмір: %(size)s\n" "Сервер: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Плагін “%(plugin)s” викликав помилку." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka не може зєднатись з maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Перевірте чи maki увімкнений." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Перевірте чи maki увімкнений.\n" "Виникла наступна помилка: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Проблема зєднання з maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Виникла помилка під час викнонання '%s' з DBus: \n" "%s\n" "Ви повинні переконатись що maki запущений. " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka просить вас оновити вашу версію maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Будьласка оновіть maki до версії %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• Невідома команда “%(command)s”, відправляю raw команду “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Не задана назва серверу." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Ви повинні ввести назву серверу" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Помилка пошуку по списку каналів" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Виникла помилка в пошуці. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Не вибрана передача данних." #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Ви повинні вибрати передачу, щоб її видалити." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Видалити передачу?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Ви впевнені що хочете видалити передачу %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "ЗІбрати та запустити" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Прочитати історію?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "Зєднання відбувається віддалено. Історія переписок буде не доступною." #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Історя для %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Ви не вибрали плагін." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Щоб завантажити плагін ви повинні спочатку його вибрати." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Ви повинні вибрати плагін щоб вивантажити його." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Сервер не вибрано" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Ви повинні вибрати сервер щоб редагувати його." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Виберіть сервер щоб його видалити." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Помилка отримання назви серверу" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Виникла помилка при отриманні назви серверу.\n" "Ви приєднанні до maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois на %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Данні Whois на %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Данні не були передані. Ви точно з’єднанні?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Завантаження..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Виберіть призначення" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Виберіть куди зберегти файл." #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Інформація: Якщо ви не виберете іншу папку, цей файл буде " "перезаписано." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Вхідна передача файлів." #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Відправник: ”%(nick)s”\n" "Назва файлу: “%(filename)s“\n" "Розмір файлу: %(bytes)d bytes\n" "Призначення: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Виникла помилка" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Без Паніки\n" "\n" "Виникла помилка - ми вибачаємся за це. Ви можете відправити багрепорт на https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Сховати '%s' повідомлення" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Введіть пароль для каналу %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Зберегти пароль для каналу" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Налаштування %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Основний колір" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Колір фону" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Скинути колір" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Сховати головне вікно" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Показати головне вікно" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Тема для каналу %(channel)s на %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Раніше змінена тема" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "Тема була змінена перед вашим оновленням. Ви хочете змінити тему?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "tekka вітає вас!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Ви приєднані до maki. Наступний крок це зєднатись з сервером через меню " "tekka." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Ви не приєднані до maki. Без maki ви не зможете підєднатись до серверів та " "листуватись.\n" "\n" "Якщо у вас виникли проблеми з maki відвідайте http://sushi.ikkoku.de/ та " "пошукайте рішення проблеми." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Скинути маркування" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Ви дійсно хочете закрити “%(name)s” ?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Ви точно хочете закрити запит “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Ви дійсно хочете закрити сервер “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Псевдонім: " #: ../tekka/main.py:784 msgid "User: " msgstr "Користувач: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Тема: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Останнє речення: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Немає зєднання з maki" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Ви не можете вимкнути maki. Ви не зєднанні" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka не може знайти сервер." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Немає активних серверів. Клацніть по вкладці серверів щоб їх активувати.." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Помилка при створенню віджету" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "Неможливо створити список псевдонімів..\n" "Можливо відсутні конфігураційні файли.Перевірте чи має tekka доступ до " "файлів та перезапустіть. tekka." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Ігнорування %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "Ви більше не ігноруєте %(user)s" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Не обрано файла" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Ви не вибрали файл для відправки." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Виберіть файл для відправки %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Tarnawsky Vitaly https://launchpad.net/~lordnightcon" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Розширені налаштування" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Список каналів" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "Реальні кольори IRC" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Кольори IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" "Це повідомлення допоможе вам зрозуміти як відбувається розфарбовування " "речень та фраз різними кольорами.\n" "\n" "Якщо ви на каналі ви можете просто відправити %C02,01test%C і ви отримаєте " "слово \"тест\" синього кольору на чорному фоні.\n" "\n" "Синтаксис для %C трактується дуже легко: %Cпереднійлпан,заднійплан.\n" "\n" "Також ви можете не користуватись фоном.\n" "\n" "Якщо ви напишете просто %C і це будуть стандартні налаштування.\n" "\n" "Приклад:\n" "Напишіть %C02,01 для синього тексту на чорному фоні.\n" "\n" "Цей список дасть вам знання про порядкові номера кольорів." #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "Контрастні кольори" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Приклад" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Виберіть колір" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "Швидка лисиці стрибає через адміна." #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Передача файлів" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Приховати повідомлення" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Інше" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Свій" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Приховати типи повідомлень" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "З’єднання:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Викидання:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Режим:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Псевдонім:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Покидання:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Вихід:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Підєднатись до каналу" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "З’єднатись автоматично" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Ім'я:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "Приєднатися" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "На_лаштувати" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Додатки" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Завантажити" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Вивантажити" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Фільтр повідомлень" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Допомога:\n" "Перше поле це тип повідомлення .\n" "Друге поле це сервер з якого прийшло повідомлення.\n" "Останнє поле це канал який послав його..\n" "\n" "Останнє поле опціональне." #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Інформація:\n" "Зміни будуть збереженні після закриття вікна.." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "Автоматично збільшувати вікно серверів." #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Дії:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Додаткові налаштування" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Автовизначення кольору" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Р_озмова" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "К_ольори" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Псевдонім по замовчуванню" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Увімкнути кольори" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Шрифт:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Підсвічувати дії." #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Підсвічувати повідомлення." #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Підсвічування слів." #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Якщо ви хочете більше контролю над налаштуваннями Скористайтесь " "Розширеними налаштуваннями.\n" "\n" "Увага:\n" "Для деяких опцій потрібно перезапускати tekka" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Останні логи" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Останній Лог" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Повідомлення:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notification" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Власний нік" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Власний текст" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Повідомлення покидання каналу." #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Налаштування" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Повідомлення при виході:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Скинути" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Кольори правил" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Вимкнути _maki при виході" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Формат часу:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Використати _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Використати _шрифт по замовчуванню" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Використати контрастні кольори" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_Головний вихід" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Сховати при закритті" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "Колір псевдонімів" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "Показати іконку _стану" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Список серверів" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Додати Сервер" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Список команд" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Додати сервер" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Адреса:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Автоматичне з’єднання" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Псевдонім" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Пароль доступу до NickServ:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Порт:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Справжнє ім'я:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Назва серверу:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Видалити сервер\n" "Ви впевнені що хочете видаолити сервер '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Видалити сервер" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Редагувати сервер" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Редагувати сервер" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "IRC _кольори" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "М_одулі" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "Б_окова панель" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "Панель _стану" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Іконка _стану" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "С_ервіс" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Список каналів" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Налагодження" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Передача файлів" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Допомога" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Список Серверів" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Зупинити" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Панель Теми" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Вигляд" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Заблокувати" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Дати статус Пів-оператора" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Дати Статус Оператора" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Надати Право Голосу" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ігнорування" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Викинути" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Режими" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Надіслати файл" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Забрати статус пів-оператора" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Забрати Статус Оператора" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Забрати право голосу" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "З’єднуватися автоматично" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "С_ховати повідомлення" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Приєднатись автоматично" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Встановити ключ" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Встановити_тему" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Закрити" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_З'єднатись" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Від'єднатися" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Історія" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Зайти на канал" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Покинути" sushi-1.4.0+dfsg/tekka/po/pt.po0000664000175000017500000006445211700417156016137 0ustar dfilonidfiloni# Portuguese translation for tekka # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 12:17+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Tópico de %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Mudou o tópico para %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s mudou o tópico para %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s está ausente (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modos de %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP de %(nick)s para o Canal:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Pedido CTCP de si para %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Você é agora conhecido como %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s é agora conhecido como %(newnick)s" #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Foi expulso do canal %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(who)s foi expulso do canal %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Você saiu (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Você saiu." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s saiu (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s saiu." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Você entrou no canal %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s entrou no canal %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Você saiu do canal %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Você saiu do canal %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s saiu do canal %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s saiu do canal %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Motivo desconhecido" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "O canal está cheio." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "O canal é só para convidados." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Você foi banido." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Precisa da chave de canal correcta." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Você não pode entrar em %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Aceitar automáticamente a transferência de ficheiros" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki aceitou automáticamente a seguinte transferência de ficheiro:\n" "Ficheiro: %(filename)s\n" "De: %(sender)s\n" "Tamanho: %(size)s\n" "Servidor: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka não se conseguiu ligar a maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Por favor verifique que maki está a correr." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Por favor verifique se maki está a correr.\n" "Ocorreu o seguinte erro: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Erro de comunicação com maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka necessita de uma versão mais recente do maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Por favor actualiza maki no mínimo para a versão %(version)s" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Não foi indicado nenhum nome de servidor." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Tem de introduzir o nome de um servidor." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Erro na procura da lista de canais." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Tem um erro de sintaxe na sua frase de pesquisa: O erro é: %s\n" "Pista: Não deve usar caracteres especiais como \"*\" ou \".\" na sua " "pesquisa se não tem conhecimento sobre expressões regulares (regexp)." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Nenhuma transferência selecionada!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Tem de selecionar uma transferência para a remover." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Remover transferência de ficheiro?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Tem a certeza que deseja remover a transferência de ficheiro %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Erro ao obter o nome do servidor." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Ocorreu um erro ao obter o nome do servidor.\n" "Está ligado ao maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "A carregar..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Escolha o destino" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Escolha o destino para gravar o ficheiro" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Transferência de ficheiro a chegar" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "De: \"%(nick)s\"\n" "Ficheiro: \"%(filename)s\"\n" "Tamanho: %(bytes)d bytes\n" "Destino: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Esconder mensagens '%s'" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Introduza a chave para o canal %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Guardar chave do canal" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Configurar %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Esconder a janela principal" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Mostrar a janela principal" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Tópico para o canal %(channel)s em %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "O tópico foi alterado antes." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "O tópico foi alterado antes da sua actualização. Pretende manter as " "alterações na mesma?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Bem vindo ao tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Está ligado ao maki. O próximo passo é ligar-se a um servidor através da " "janela de servidores no menu do tekka." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Não está ligado ao maki. Sem o maki, você não pode ligar-se a servidores ou " "escrever mensagens.\n" "\n" "Se está a ter problemas em executar o maki, visite http://sushi.ikkoku.de/ e " "procure por uma solução para o seu problema. Caso contrário, esteja à " "vontade para pedir apoio." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Deseja realmente fechar o canal \"%(name)s\"?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "" #: ../tekka/main.py:785 msgid "Topic: " msgstr "" #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Mário Pereira https://launchpad.net/~bin-to-hex" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Barra de Estado" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "Transferências de _Ficheiros" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modos" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Histórico" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Utilizador" #~ msgstr[1] "%d Utilizadores" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operador" #~ msgstr[1] "%d Operadores" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Não foi possível carregar o plugin %(plugin)s automáticamente." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "O plugin %(plugin)s já está carregado." #~ msgid "Plugin is already loaded." #~ msgstr "O plugin já está carregado." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Não foi possível carregar o plugin %(plugin)s.\n" #~ "Ocorreram os seguintes erros: %(error)s" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Não foi possível carregar o plugin %(plugin)s." #~ msgid "Plugin could not be loaded." #~ msgstr "Não foi possível carregar o plugin." #~ msgid "Plugin could not be unloaded." #~ msgstr "O plugin não pode ser descarregado." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "O plugin %(plugin)s não pode ser descarregado porque não está carregado." sushi-1.4.0+dfsg/tekka/po/nl.po0000664000175000017500000007053211700417156016121 0ustar dfilonidfiloni# Dutch translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-10-03 14:41+0000\n" "Last-Translator: Elco \n" "Language-Team: Dutch\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "Onderwerp voor %(channel)s:%(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "%(nick)s heeft het onderwerp aangepast naar %(topic)s" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "%(nick)s is afwezig (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP van %(nick)s naar Kanaal:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP aanvraag van jou aan %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "U bent nu bekend als %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "%(nick)s is nu bekend als %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "<< U bent uit het uit %(channel)s verwijderd door %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s is uit %(channel)s verwijderd door %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« U hebt afgesloten (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« U hebt afgesloten." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s heeft afgesloten (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s heeft afgesloten." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "U bent kanaal %(channel)s binnengegaan." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s is kanaal %(channel)s binnen gekomen." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« U hebt %(channel)s verlaten (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« U hebt %(channel)s verlaten." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s heeft %(channel)s verlaten (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s heeft %(channel)s verlaten." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "U bent geen kanaal manager." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Deze naam/dit kanaal bestaat niet." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Deze server bestaat niet." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Dit kanaal bestaat niet." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Reden onbekend" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Dit kanaal is vol." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Dit kanaal is alleen op uitnodiging." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "U bent geblokkeerd." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "U hebt de correcte kanaal sleutel nodig." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "U kunt %(channel)s niet betreden: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Automatisch accepteer bestandsoverdrachten" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Invoegtoepassing \"%(plugin)s\" heeft een fout veroorzaakt." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka kon geen verbinding maken met maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Controleer alstublieft of maki opgestart is." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Controleer alstublieft of maki opgestart is.\n" "Het volgende probleem is opgetreden: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Communicatieprobleem met maki" #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Er is een fout opgetreden bij het uitvoeren van '%s' met DBus: \n" "%s\n" "Controleer of maki nog actief is. " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka vereist een meer recente versie van maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Update maki tot minimaal versie %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" "Onbekend commando \"%(command)s\", verzenden ruw commando \"%(raw)s\"." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Geen servernaam opgegeven." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "U moet een servernaam opgeven." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Fout bij zoeken in kanaal lijst." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "U hebt een syntax probeem in uw zoekreeks. Het probleem is: %s\n" "Advies: Het is aangeraden geen speciale karakters zoals '*' of '.' te " "gebruiken in uw zoekreeks tenzij u bekend bent met reguliere expressies." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Geen overdracht geselecteerd." #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "U moet een overdracht selecteren om deze te verwijderen." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Verwijder bestandsoverdracht?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Bent u zeker dat u bestandsoverdracht %(id)d wilt verwijderen?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompileer en voer uit" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Haal historie toch op?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki is op afstand verbonden. Het is mogelijk dat de historie niet " "beschikbaar is. Wilt u het toch proberen?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Historie voor %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Geen plugin geselecteerd." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "U moet een invoegtoepassing selecteren om te laden" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "U moet een invoegtoepassing selecteren om te verwijderen." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Geen server geselecteerd." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "U moet een server selecteren om deze aan te passen." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "U moet een server selecteren om deze te verwijderen" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Fout bij ophalen server naam." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Er is een probleem opgetreden bij het opvragen van de server naam.\n" "Ben je nog verbonden met maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Geen gegevens ontvangen tot nu toe. Bent u nog steeds verbonden?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Bezig met laden" #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Selecteer doel" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Selecteer een doel om het bestand op te slaan" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Informatief: Als u geen ander doel selecteert zal er verder gegaan " "worden met downloaden van dit bestand." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Inkomende bestandsoverdracht" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Afzender: ”%(nick)s”\n" "Bestandsnaam: “%(filename)s“\n" "Bestandsgrootte: %(bytes)d bytes\n" "Bestemming: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Er is een fout opgetreden" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Blijf kalm!\n" "\n" "Er is een fout opgetreden – onze excuses hiervoor. Je kunt deze fout melden " "op https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Verberg '%s' berichten" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Voorgrondkleur" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Achtergrondkleur" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Kleur herstellen" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Beginscherm verbergen" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Beginscherm verbergen" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Onderwerp voor kanaal %(channel)s op %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Onderwerp is eerder aangepast." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Het onderwerp is veranderd voor uw aanpassing. Wilt u uw aanpassingen toch " "doorvoeren?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Welkom bij tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "U bent verbonden met maki. De volgende stap is verbinding maken met een " "server via het server-venster in het tekka menu." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "U bent niet verbonden met maki. Zonder maki kunt u geen verbinding maken met " "servers of berichten schrijven.\n" "\n" "Als u problemen hebt met het draaien van maki, kijk op " "http://sushi.ikkoku.de/ of er een oplossing voor uw probleem is. Zo niet, " "voel u vrij om hulp te vragen." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Herstel opmaak" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Weet u zeker dat u het kanaal \"%(name)s\" wilt verlaten?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Weet u zeker dat u het gesprek met \"%(name)s\" wilt afsluiten?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Weet u zeker dat u de server \"%(name)s\" wilt afsluiten?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Bijnaam: " #: ../tekka/main.py:784 msgid "User: " msgstr "Gebruiker: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Onderwerp: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Laatste zin: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Geen verbinding met maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "U kunt maki niet afsluiten. U bent niet verbonden." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka kon de server niet bepalen" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Er is geen actieve server. Klik op het server tab of een onderliggend tab om " "de server te activeren." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Het maken van de widget is mislukt." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Gebruiker %(user)s wordt genegeerd" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Geen bestand geselecteerd" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Er is geen bestand geselecteerd. Verzenden afgebroken." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Kies een bestand om te sturen naar %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " AJorink https://launchpad.net/~arjan-jorink\n" " Elco https://launchpad.net/~eajnab\n" " Joshua Lückers https://launchpad.net/~joshualuckers\n" " eelco.bel https://launchpad.net/~eelco-bit\n" " fireprog https://launchpad.net/~daandeweerdt" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Geavanceerde instellingen" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Kanaallijst" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "IRC-kleuren" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Voorbeeld" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Selecteer een kleur" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Bestandsoverdrachten" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Overige" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Eigen" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Schermnaam:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Verlaten:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Naam:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Plug-ins" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Laden" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Berichten filteren" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Informatie:\n" "Veranderingen worden doorgestuurd nadat dit venster gesloten wordt.." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Geavanceerde instellingen" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Chatten" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "_Kleuren" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Standaard schermnaam:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Lettertype:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Als je controle wilt over alle instellingen kan je de geavanceerde " "instellingen gebruiken.\n" "\n" "Let op:\n" "Voor sommige opties moet tekka herstart worden voordat de wijzigingen " "doorgevoerd worden." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Laatste log:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "Bericht" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Berichten:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Eigen schermnaam:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Instellingen" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Bericht bij afsluiten:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Opnieuw Instellen" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Stop maki bij sluiten" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Tijdsformaat:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Gebruik RGBA-kleuren" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Gebruik standaard lettertype" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "Verbergen bij afsluiten" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Statuspictogram weergeven" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Serverlijst" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Server toevoegen" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Server toevoegen" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adres:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Automatisch verbinden:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Schermnaam:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ-wachtwoord:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Poort:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Echte naam:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Servernaam:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Server verwijderen\n" "\n" "Weet je zeker dat je de server '%(server)s' wilt verwijderen?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Server verwijderen" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Server bewerken" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Server bewerken" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "_Plug-ins" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "Zijpaneel" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Statusbalk" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "E_xtra" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Kanalen lijst" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Foutopsporing" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Bestandsoverdrachten" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Help" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "Server lijst" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Afsluiten" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Beeld" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Blokkeren" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Operatorstatus geven" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Voice geven" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Negeren" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Kicken" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Bestand versturen" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Operatorstatus nemen" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Voice nemen" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Automatisch verbinden" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "Verberg berichten" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Onderwerp instellen" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Sluiten" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Verbinden" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "Verbin_ding verbreken" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "" #~ msgstr[1] "%d gebruikers" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d beheerder" #~ msgstr[1] "%d beheerders" sushi-1.4.0+dfsg/tekka/po/fr.po0000664000175000017500000010237411700417156016117 0ustar dfilonidfiloni# French translation for tekka # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-12-29 09:51+0000\n" "Last-Translator: bouchard renaud \n" "Language-Team: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Sujet du %(channel)s : %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Vous avez changé le sujet du canal en %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s a changé le sujet du canal en %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s est absent (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modes pour %(target)s : %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP de %(nick)s pour le canal :" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Demande CTCP pour vous de %(target)s : %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Vous vous appellez maintenant %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s s'appelle maintenant %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Vous avez été éjecté de %(channel)s par %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s a été ejecté de %(channel)s par %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Vous avez quitté le canal (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Vous avez quitté le canal." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s a quitté le canal (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s a quitté le canal." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Vous avez rejoint %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s a rejoint %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Vous avez quitté %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« You avez quitté %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s a quitté %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s a quitté %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Vous n'êtes pas un opérateur du canal." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Aucun pseudo/canal de ce nom." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Aucun server." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Aucun canal" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Raison inconnue" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Le canal est plein." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Le canal est sur invitation uniquement." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Vous êtes banni." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Vous devez entrez le bon mot de passe de canal." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Vous ne pouvez joindre%(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Transfert de fichiers accepté automatiquement" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki a accepté automatiquement ce transfert de fichier :\n" "Nom du fichier : %(filename)s\n" "Émetteur : %(sender)s\n" "Taille : %(size)s\n" "Server: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Le greffon « %(plugin)s » à causé une erreur." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka n'a pu se connecter à maki" #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Veuillez vérifier si maki est démarré." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Veuillez vérifier si maki est démarré.\n" "L'erreur suivant a été rencontrée:%(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Erreur de communication avec maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Une erreur a été rencontrée lors de l'execution de '%s' avec DBus:\n" "%s\n" "Vous devriez vérifier que maki est lancé. " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka nécessite une plus récente version de maki" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Maki nécessite d'être au moins en version %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• Commande inconnue “%(command)s”, commande brute envoyée “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Aucun nom de serveur donné." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Vous devez entrer un nom de serveur." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Erreur de recherche de la liste des canaux." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Vous avez une erreur de syntaxe dans votre expression de recherche. Cette " "erreur est: %s\n" "Astuce:Vous ne devez pas utiliser de caractère spécial comme '*' ou " "'.' dans votre expression de recherche si vous ne maitrisez pas les " "expression régulières." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Aucun transfert sélectionné !" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Vous devez sélectionner un transfert pour le supprimer." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Enlever le transfert du fichier ?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Êtes-vous sûr de vouloir enlever le transfert du fichier %(id)d ?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompiler et lancer" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Lire histoire quand même?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki est connecté à distance. C'est possible que l'histoire n'est pas " "accessible. Voulez-vous essayer quand même?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Historique pour %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Aucun plugin sélectionné." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Vous devez sélectionner un plugin pour le charger." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Vous devez sélectionner un plugin pour le désactiver." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Aucun serveur sélectionné." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Vous devez sélectionner un serveur pour l'éditer." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Vous devez sélectionner un serveur pour le supprimer." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Erreur à la réception du nom de serveur." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Il y a eu une erreur à la réception du nom de serveur.\n" "Êtes vous connecté à maki ?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois on %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Données whois de %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Aucune donnée reçue jusque là. Etes-vous toujours connecté ?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Chargement..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Sélectionnez la destination" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Choisissez une destination pour sauver le fichier" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Info : Si vous ne choisissez pas une autre destination, ce fichier " "sera repris." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Arrivée d'un transfert de fichier" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Émetteur : ”%(nick)s”\n" "Nom du fichier : “%(filename)s“\n" "Taille du fichier : %(bytes)d bytes\n" "Destination : %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Erreur rencontrée" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Ne paniquez pas !\n" "\n" "Une erreur est survenue - nous nous excusons pour cela. N'hésitez pas à " "soumettre un rapport de bogue à https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Cacher les messages de '%s'" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Entrez le mot de passe du canal %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Enregistrer le mot de passe du canal." #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Configurer %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Couleur d'avant-plan" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Couleur d'arrière-plan" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Réinitialiser la couleur" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Cacher la fenêtre principale" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Afficher la fenêtre principale" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Sujet du canal %(channel)s sur le serveur %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Topic modifié précédemment" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Le sujet du canal a été modifié avant votre mise à jour. Voulez vous valider " "cette modification quand même ?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Bienvenue dans tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Vous êtes connecté à maki. La prochaine étape est de se connecter à un " "serveur via le dialogue serveur dans le menu tekka." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Vous n'êtes pas connecté à maki. Sans maki vous ne pouvez pas vous connecter " "à un serveur ni envoyer de message." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Réinitialiser les signets." #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Voulez vous vraiment fermer le canal “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Voulez vous vraiment fermer la requête “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Voulez vous vraiment fermer le serveur “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Pseudonyme: " #: ../tekka/main.py:784 msgid "User: " msgstr "Utilisateur: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Sujet : " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Dernière phrase: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Aucune connexion à maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Vous ne pouvez éteindre maki. Vous n'êtes pas connecté." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka ne peut pas determiner le server." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Il n'y a pas de serveur actif. Cliquez sur un onglet ou un sous-onglet de " "serveur pour activer le serveur." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Echec de création du widget" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "tekka n'a pas réussi a créer le menu de liste des pseudonymes.\n" "Il est possible que des fichiers soient manquants. Vérifiez si vous avez les " "permissions appropriée pour accéder aux fichiers nécessaires à takka et " "redémarrez takka." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "L'utilisateur %(user)s est maintenant ignoré" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "L'utilisateur %(user)s n'est plus ignoré" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Aucun fichier sélectionné" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Vous n'avez sélectionné aucun fichier à envoyer. Interruption" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Choisissez un fichier à envoyer à %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Bernard Opic https://launchpad.net/~cpio\n" " Jean-Philippe Monette https://launchpad.net/~jpmonette\n" " Thibault Févry https://launchpad.net/~thibaultfevry\n" " bouchard renaud https://launchpad.net/~renaud-bouchard" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Préférences avancées" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Liste des canaux" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "IRC vers couleurs réelles" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Couleurs IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" "Cette boîte de dialogue tente d'expliquer comment vous pouvez utiliser des " "marqueurs de couleur dans votre texte pour mettre en évidence des phrases " "dans une couleur différente.\n" "\n" "Si vous êtes dans un canal ou dans une requête, vous pouvez envoyer " "%C02,01test%C et vous obtiendrez \"test\" en bleu sur fond noir.\n" "\n" "La syntaxe pour le marqueur %C est simple : %Ccouleur de texte,couleur de " "fond.\n" "\n" "Vous pouvez également ignorer \",couleur de fond\" si vous n'êtes intéressé " "que par les couleurs de texte.\n" "\n" "Si vous utilisez un simple %C cela signifie que vous souhaitez utiliser le " "paramétrage par défaut.\n" "\n" "Exemple d'utilisation :\n" "\n" "Insérez %C02,01 pour un texte bleu sur fond noir.\n" "\n" "La liste qui suit vous donne un aperçu des nombres que vous pouvez utiliser " "et des couleurs que chaque nombre représente." #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "Contraste des couleurs" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Exemple" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Sélectionner une couleur" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "Le rapide renard marron saute sur les développeurs paresseux." #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Transferts de fichiers" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Types de messages à masquer" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Autres" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Propres messages" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Cacher type de message" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Joindre:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Ejecter:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Mode:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Pseudonyme:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Sortir:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Quitter:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Rejoindre un canal" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Rejoindre _automatiquement" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Nom :" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Joindre" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "C_onfigurer" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Extensions" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Charger" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Décharger" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filtrer messages" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "Aide:" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Information :\n" "Les changement seront appliqués après la fermeture de cette fenêtre." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "Ouvrir automatiquement l'arbre serveur" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Actions:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Réglages Avancés" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Détecter automatiquement les règles de couleur" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Discution" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "Couleurs:" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Pseudonyme par défaut:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Activer les régles de couleur" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Police :" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Actions surlignées:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Messages surlignés:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Mots surlignés:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Si vous voulez contrôler tous les réglages, vous pouvez utiliser le " "menu de réglages avancées.\n" "\n" "Note:\n" "Pour quelques options il est nécessaire de redémarrer tekka pour les " "changements prennent effet." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Dernières lignes du journal:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Dernier journal:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Messages:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notification:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Votre pseudonyme:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Votre texte:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Message de départ:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Préférences" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Message de sortie:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Réinitialiser" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Regles couleur:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Eteindre _maki à la fermeture." #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Format de temps:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Utiliser _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Utiliser la police par _defaut" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Utiliser des conleurs sensibles au contraste" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "Canal de sortie _général" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Cacher à la fermeture" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Couleur des pseudonymes" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Montrer icone de statut" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Liste des serveurs" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Add Server" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Liste de commandes" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Ajouter un serveur" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adresse :" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Connexion automatique:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Pseudonyme :" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Mot de passe NickServ:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Port :" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Nom réel :" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Nom du serveur :" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Effacer serveur\n" "\n" "Êtes vous sûr de vouloir effacer ce serveur '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Supprimer serveur" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Modifier le serveur" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Modifier le serveur" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "IRC_Couleurs" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "P_lugins" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "Panel latéral" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Barre d'état" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Icône de statut" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "Ou_tils" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Listes des _canaux" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Débogage" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "Transferts de _fichiers" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Aide" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Liste des serveurs" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Éteindre" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Barre de sujet" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Affichage" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Bannir" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Donner les droits de demi-opérateur" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Donner les droits opérateur" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Donner la parole" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignorer" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Expulser" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modes" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Envoyer le fichier" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Retirer les droits de demi-opérateur" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Retirer les droits d'opérateur" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Retirer la parole" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Connecter automatiquement" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "Cacher les messages" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Rejoindre automatiquement" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Définir la _touche" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Définir _sujet" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Fermer" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Connexion" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Déconnecter" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Historique" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "Re_joindre un canal" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Sortir" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d opérateur" #~ msgstr[1] "%d opérateurs" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Utilisateur" #~ msgstr[1] "%d Utilisateurs" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Le plugin %(plugin)s n'a pa pu être chargé automatiquement." #~ msgid "Plugin is already loaded." #~ msgstr "Le plugin est déjà chargé." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Le plugin %(plugin)s est déjà chargé." #~ msgid "Plugin could not be unloaded." #~ msgstr "Le plugin ne peut pas être déchargé." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "Le plugin %(plugin)s ne peut pas être déchargé, parce qu'il n'est pas chargé." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Le plugin %(plugin)s n'a pu être chargé.\n" #~ "L'erreur suivante a été rencontrée: %(error)s" #~ msgid "Plugin could not be loaded." #~ msgstr "Le plugin n'a pu être chargé." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Le plugin %(plugin)s ne peut pas être chargé." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "Erreur" #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "tekka n'a pas réussi a créer le menu d'arbre serveur.\n" #~ "Il est possible que des fichiers soient manquants. Vérifiez si vous avez les " #~ "permissions appropriée pour accéder aux fichiers nécessaires à takka et " #~ "redémarrez takka." #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "Attention:" #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ "vraies couleurs IRC\n" #~ "\n" #~ "Exemple d'utilisation :\n" #~ "Tapez %C02,01 pour du bleu sur fond noir." #~ msgid "#" #~ msgstr "#" sushi-1.4.0+dfsg/tekka/po/zh_CN.po0000664000175000017500000006023311700417156016506 0ustar dfilonidfiloni# Chinese (Simplified) translation for tekka # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-10-12 18:20+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Chinese (Simplified)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "•%(nick)s 离开 (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "•你已经改名为 %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "•%(nick)s 改名为 %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« 你已经被 %(nick)s 从 %(channel)s 频道中踢出, (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s 被 %(nick)s 踢出了 %(channel)s 频道(%(reason)s)。" #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« 你已经退出,(%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« 你已经退出." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s 已经退出, (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s 已经退出." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» 你已经加入 %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s 已经进入 %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« 你已经离开 %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« 你已经离开 %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s 已经离开 %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s 已经离开 %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s:该服务器不存在。" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s:该频道不存在。" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "未知原因" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "些频道已经满员" #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "您被禁止了。" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "您需要正确的频道密钥。" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "你不进加入 %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "" #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "" #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• 未知命令 “%(command)s”,将发送原始命令 “%(raw)s”。" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "编译并运行(_O)" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "载入中..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "输入 %(channel)s 频道的密钥。" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "保存频道的密钥" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "隐藏主窗口" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "显示主窗口" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "你是否确定退出“%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "你是否确定断开服务器“%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "" #: ../tekka/main.py:785 msgid "Topic: " msgstr "话题: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Marian Tietz https://launchpad.net/~nemo-ikkoku\n" " chattan https://launchpad.net/~chattan" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "高级首选项" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "频道列表" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "插件" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "载入(_L)" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "卸载(_U)" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "自动展开服务器树(_U)" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "动作:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "高级设置(_V)" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "颜色(_O)" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "默认昵称" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "字体:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "高亮的动作:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "高亮的消息:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "消息:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "通知:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "自己的昵称:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "离开时的消息:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "首选项" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "退出时的消息:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "在关闭时结束 _maki" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "使用 _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "使用默认字体(_D)" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "常规输出(_G)" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "关闭时隐藏(_H)" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "昵称颜色(_N)" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "显示状态图标(_S)" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "服务器列表" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "添加服务器" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "命令列表" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "添加服务器" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "地址:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "自动连接" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "昵称:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "端口:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "真实姓名:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "服务器名称:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "删除服务器\n" "\n" "您真的要删除 '%(server)s' 这个服务器吗?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "删除服务器" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "编辑服务器" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "编辑服务器" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "状态栏" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "状态图标(_I)" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "频道列表" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "调试" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "帮助(_H)" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "查看(_V)" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "禁止" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "给予操作权限" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "给予发言权限" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "踢" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "模式" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "撤除发言权限" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "他是谁" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d 个用户" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "警告:" #~ msgid "Plugin is already loaded." #~ msgstr "插件已经被装载" #~ msgid "Plugin could not be loaded." #~ msgstr "插件没有被装载" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d 操作者" sushi-1.4.0+dfsg/tekka/po/it.po0000664000175000017500000010245411700417156016123 0ustar dfilonidfiloni# Italian translation for tekka # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-05-27 12:50+0000\n" "Last-Translator: simone.sandri \n" "Language-Team: Italian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Argomento per %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Hai cambiato l'argomento in %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s ha cambiato l'argomento in %(topic)s" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s è uscito (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modalità per %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP da %(nick)s al Canale:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Richiesta CTCP da te a %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Sei ora conosciuto come %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s è ora conosciuto come %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« Sei stato cacciato dal canale %(channel)s da %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(who)s è stato cacciato dal canale %(channel)s da %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Sei uscito (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Sei uscito." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s è uscito (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s è uscito." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Sei entrato nel canale %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s si è connesso a %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Hai lasciato %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Hai lasciato %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s ha lasciato %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s ha lasciato %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Non sei operatore del canale." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Nick/Canale inesistente." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Server inesistente." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Canale inesistente" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Motivo sconosciuto" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Il canale è pieno." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Il canale è accessibile solo su invito." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Sei stato bannato" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "È necessaria la chiave corretta del canale." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Impossibile connettersi a %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Accettamento automatico dei file trasferiti" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "miki ha accettato automaticamente il seguente trasferimento di file:\n" "Nome file: %(filename)s\n" "Mittente: %(sender)s\n" "Dimensione: %(size)s\n" "Server: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Il plugin “%(plugin)s” ha causato un errore" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka non riesce a connettersi a maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Controlla che maki sia in esecuzione." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Per favore controlla che maki sia in esecuzione.\n" "Si è verificato questo errore: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Errore di comunicazione con maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Si è verificato un errore eseguendo '%s' con DBus: \n" "%s\n" "Dovresti assicurarti che maki sia in esecuzione " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka richiede una versione di maki più recente." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Aggiorna maki almeno alla versione %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• Comando sconosciuto “%(command)s”, invio il comando raw “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Non è stato fornito alcun nome di server." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Devi inserire un nome di server." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Ricerca di errori nella lista dei canali" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "C'è un errore di sintassi nella tua stringa di ricerca. L'errore è: %s.\n" "Consiglio: Non dovresti usare caratteri speciali come '*' o '.' nella " "tua stringa di ricerca se non conosci le espressioni regolari." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Nessun trasferimento selezionato!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Devi selezionare un trasferimento per rimuoverlo." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Rimuovi documento trasferito?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Sei sicuro di voler rimuovere il trasferimento file %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompila ed esegui" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Leggere lo stesso la cronologia?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki è connesso in modo remoto. È possibile che la cronologia non sia " "accessibile. Vuoi provare comunque?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Cronologia per %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Nessun componente selezionato" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Devi selezionare un componente da caricare" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Devi selezionare un componente da scaricare" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Nessun server selezionato" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Devi selezionare un server da modificare" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Devi selezionare un server da eliminare" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Errore nel recupero del nome del server." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "È avvenuto un errore nel recupero del nome del server.\n" "Sei connesso a maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois su %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Dati whois per %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Nessun dato ricevuto finora. Sei ancora connesso?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Caricamento in corso..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Seleziona destinazione" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Seleziona una destinazione dove salvare il documento" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Informazione: Se non scegli un'altra destinazione, lo scaricamento di " "questo file verrà ripreso." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Trasferimento file in entrata" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Mittente: “%(nick)s”\n" "Nome file: “%(filename)s”\n" "Dimensione file: %(bytes)d byte\n" "Destinazione: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Si è verificato un errore" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Non ti Agitare!\n" "\n" "Si e' manifestato un errore - ci scusiamo per questo inconveniente. Sentiti " "libero di inviare una relazione a https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Nascondi '%s? messaggi" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Inserisci la chiave per il canale %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Salva la chiave per il canale" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Configura %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Colore in primo piano" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Colore di sfondo" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Ripristina Colore" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Nascondi finestra principale" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Mostra finestra principale" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Argomento per il canale %(channel)s su %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "L'argomento è stato cambiato." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "L'argomento è stato cambiato prima del tuo aggiornamento. Vuoi applicare " "comunque le modifiche?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Benvenuto su tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Sei connesso a maki. Il prossimo passo è connetterti a un server attraverso " "la finestra di dialogo dei server nel menu di tekka." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Non sei connesso a maki. Senza maki non puoi connetterti ai server o " "scrivere messaggi.\n" "\n" "Se stai riscontrando problemi nell'esecuzione di maki visita " "http://sushi.ikkoku.de/ e controlla se c'è una soluzione al tuo problema. " "Altrimenti, sentiti libero di chiedere supporto." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Reset markup" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Vuoi veramente chiudere il canale “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Vuoi veramente chiudere la query “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Vuoi veramente chiudere il server “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Nome Utente: " #: ../tekka/main.py:784 msgid "User: " msgstr "Utente: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Argomento: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Ultima Frase: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Nessuna connessione a maki" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Non puoi spegnere maki. Non sei collegato." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka non è riuscito a determinare il server." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Nessun server attivo. Fai clic su una scheda server o sul figlio di una " "tabella server per attivarlo." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Impossibile creare il widget." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "tekka non e' riuscito a creare il menu nicklist.\n" "E' possibile che ci sono dei file mancanti. Controlla se hai i giusti " "permessi per accedere a tutti i file richiesti da tekka e riavvia tekka." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Ignora Utente %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "L'utente %(user)s non è ignorato" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Nessun file selezionato" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Non hai selezionato un file da inviare. Annullamento." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Scegli un file da inviare a %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Andrea Amoroso https://launchpad.net/~heiko81\n" " Andrea Vidal https://launchpad.net/~sfoghiamoci\n" " Guybrush88 https://launchpad.net/~guybrush\n" " Maurizio.Colella https://launchpad.net/~m-colella88\n" " Michael Kuhn https://launchpad.net/~suraia\n" " simone.sandri https://launchpad.net/~lexluxsox" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Preferenze avanzate" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Elenco canali" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "IRC a colori reali" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Colori IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" "Questa finestra di dialogo cerca di spiegare come è possibile utilizzare gli " "evidenziatori per evidenziare le frasi in colori diversi.\n" "\n" "Se siete in un canale o in una query si può semplicemente inviare " "C02%,01test%C e si otterrà un blu in primo piano \"test\" su uno sfondo " "nero.\n" "\n" "La sintassi per il %Cmarkup è facile: %Cforeground,fondo.\n" "\n" "Si può anche lasciare che il \"background\" così come è se siete interessati " "solo a colori di primo piano.\n" "\n" "Se si dà un unico %C significa che si desidera utilizzare l'impostazione " "predefinita.\n" "\n" "Esempio di utilizzo:\n" "Digita %C02,01 per il primo piano blu e sfondo nero.\n" "\n" "Il seguente elenco fornisce una panoramica sui numeri che si possono " "utilizzare e che colore ogni numero rappresenta." #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "Colori di contrasto" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Esempio" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Seleziona un colore" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "La vecloce volpe marrone salta oltre il pigro sviluppatore." #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Trasferimenti file" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Tipi di messaggio da nascondere" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Altro" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Proprio" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Nascondi i tipi di messaggio" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Unisciti:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Caccia:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Modalità:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Nickname:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Parte:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Esci:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "unisciti al canale" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Unisciti _automaticamente" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Nome:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Unisciti" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "C_onfigura" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Plugin" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Carica" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Scarica" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filtra messaggi" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Aiuto:\n" "Il primo campo è il tipo di messaggio.\n" "Il secondo campo rappresenta il server da cui proviene il " "messaggio.\n" "L'ultimo campo è il canale o la chat privata dove è " "stato inviato il messaggio.\n" "\n" "L'ultimo campo è opzionale." #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Informazione:\n" "I cambiamenti saranno applicati dopo aver chiuso questa finestra di dialogo." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "A_utoespandi l'albero dei server" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Azioni:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Impostazioni a_vanzate" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Riconosci automaticamente il colore delle regole" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "C_hat" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "C_olori" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Nick predefinito:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Abilita il colore delle regole" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Carattere:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Azioni Evidenziate:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Messaggi Evidenziati:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Parole da evidenziare:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Se vuoi avere il controllo su tutte le impostazioni puoi usare la " "finestra di dialogo delle impostazioni avanzate.\n" "\n" "Avviso:\n" "Per alcune opzioni è necessario riavviare tekka perché le modifiche abbiano " "effetto." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Ultime linee del log:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Ultimo log:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Messaggi:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notifica:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Proprio nick:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Proprio testo:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Messaggio di abbandono:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Preferenze" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Messaggio di uscita:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Reimposta" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Colore delle regole:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Spegni _maki all'uscita" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Formato dell'ora:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Usa _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Usa il carattere pre_definito" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Usa colori sensibili al contrasto" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "Output _Generale" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Nascondi in chiusura" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "Colori dei sopra_nnomi" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "Mo_stra l'icona di stato" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Lista server" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Aggiungi server" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Elenco comandi" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Aggiungi server" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Indirizzo:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Connessione automatica:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Nick:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Password NickServ:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Porta:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Nome reale:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Nome server:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Elimina server\n" "\n" "Sei sicuro di voler eliminare il server '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Elimina server" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Modifica Server" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Modifica server" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "_Colori IRC" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "C_omponenti" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "Pannello Laterale" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Barra di stato" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "_Icona di stato" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "S_trumenti" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Elenco _Canali" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Debug" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "Trasferimenti _file" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Aiuto" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Lista Server" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Spegni" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "Barra dell'argomen_to" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Visualizza" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Vieta" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Dai l'Half-Op" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Dai l'Op" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Assegna Voce" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignora" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Caccia" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modalità" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Invia Documento" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Prendi l'Half-Op" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Prendi l'Op" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Prendi la Voce" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Connetti Automaticamente" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "N_ascondi Messaggi" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Unisciti Automaticamente" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Imposta _chiave" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Imposta_argomento" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Chiudi" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Connetti" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Disconnetti" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Cronologia" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Unisciti a un canale" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Part" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Utente" #~ msgstr[1] "%d Utenti" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operatore" #~ msgstr[1] "%d Operatori" #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Il plugin %(plugin)s non può essere caricato.\n" #~ "Si è verificato il seguente errore: %(error)s" #~ msgid "Plugin could not be loaded." #~ msgstr "Il plugin non può essere caricato." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Il plugin %(plugin)s non può essere caricato automaticamente." #~ msgid "Plugin is already loaded." #~ msgstr "Il plugin è già caricato." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Il plugin %(plugin)s è già caricato." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Il plugin %(plugin)s non può essere caricato." #~ msgid "Plugin could not be unloaded." #~ msgstr "Il plugin non può essere disabilitato." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "Il plugin %(plugin)s non può essere disabilitato perché non è caricato." #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Avviso:\n" #~ "I cambiamenti saranno applicati dopo aver chiuso questa finestra di dialogo." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Errore\n" #~ "\n" #~ "Si è verificato un errore, chiediamo scusa. Puoi inviare una segnalazione " #~ "bug su https://bugs.launchpad.net/sushi." #~ msgid "#" #~ msgstr "#" #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ "Copia testo\n" #~ " IRC a colori reali \n" #~ "\n" #~ "Esempio di utilizzo:\n" #~ "Digita %C02,01 per il primo piano blu e sfondo nero." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "Tekka non è riuscito a creare il menu del server.\n" #~ "E' possibile che ci siano file mancanti. Controllare se si dispone delle " #~ "autorizzazioni appropriate per accedere a tutti i file necessari a Tekka e " #~ "riavviare Tekka." sushi-1.4.0+dfsg/tekka/po/ast.po0000664000175000017500000006174411700417156016304 0ustar dfilonidfiloni# Asturian translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 13:43+0000\n" "Last-Translator: Xuacu Saturio \n" "Language-Team: Asturian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "Asuntu de %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "Camudasti l'asuntu a %(topic)s" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "%(nick)s camudó l'asuntu a %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s ta ausente (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Moos pa %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP de %(nick)s a la Canal:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Petición CTCP tuya a %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Agora te llames %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s agora se llama %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« T'espulsaron de %(channel)s: %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s queda espulsáu de %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Salisti (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Salisti." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s salió (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s salió." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Entrasti en %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s entró en %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Dexasti %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Dexasti %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s dexó %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s dexó %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Nun yes un operador de la canal." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Nun esiste esi nick/canal." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Nun esiste esi sirvidor." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Nun esiste esa canal." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Motivu desconocíu" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "La canal ta llena." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "La canal ye sólo pa convidaos." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Tas bloquiáu." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Necesites la llave correuta de la canal." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Nun puedes entrar en %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Tresferencia de ficheros auto aceptada" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "Maki auto aceptó la tresferencia de los ficheros siguientes:\n" "Nome del ficheru: %(filename)s\n" "Remitente: %(sender)s\n" "Tamañu: %(size)s\n" "Sirvidor: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "El complementu «%(plugin)s» provocó un error." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka nun pudo coneutar con maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Comprueba que maki tea executandose." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Por favor comprueba si maki ta executandose\n" "Hebo el siguiente error: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Error de comunicación con maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Hebo un error mientres s'executaba '%s' con DBus: \n" "%s\n" "Asegurate de que maki tea funcionando " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka requier una versión superior de maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Por favor actualiza maki polo menos a la versión %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" "Comandu desconocíu «%(command)s», unviando comandu en bruto «%(raw)s»." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Nun se dio un nome de sirvidor." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Tienes d'escribir un nome de sirvidor." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Error al guetar na llista de la canal." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Tienes un error de sintaxis na cadena de gueta. L'error ye: %s\n" "Conseyu: Nun tendríes d'usar caráuteres especiales como '*' o '.' na " "cadena de gueta si nun sabes d'espresiones regulares." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "¡Nun se seleiciono denguna tresferencia!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Tienes de seleicionar una tresferencia pa desaniciala." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "¿Desaniciar la tresferencia de ficheros?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "¿Seguro que quies desaniciar la tresferencia de ficheros %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompilar y executar" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "¿Lleer la historia de toles maneres?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki ta coneutáu de mou remotu. Ye posible que la historia nun tea " "accesible. ¿Quies probar de toles maneres?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Historia de %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Dengún complementu seleicionáu." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Tienes de seleicionar un complementu pa cargalu." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Tienes de seleicionar un complementu pa descargalu." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Dengún sirvidor seleicionáu." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Tienes de seleicionar un sirvidor para editalu." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Tienes de seleicionar un sirvidor para desanicialu." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Error al recuperar el nome del sirvidor." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Hebo un error al recuperar el nome del sirvidor.\n" "¿Tas coneutáu a maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois en %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Datos Whois de %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Nun se recibieron datos de momentu. ¿Tas coneutáu entá?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Cargando..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Seleiciona destín" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Seleiciona un destín pa guardar el ficheru" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "" #: ../tekka/main.py:785 msgid "Topic: " msgstr "" #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Xuacu Saturio https://launchpad.net/~xuacusk8" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Usuariu" #~ msgstr[1] "%d Usuarios" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operador" #~ msgstr[1] "%d Operadores" sushi-1.4.0+dfsg/tekka/po/en_GB.po0000664000175000017500000007746011700417156016471 0ustar dfilonidfiloni# English (United Kingdom) translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-03-29 21:38+0000\n" "Last-Translator: Chris Woollard \n" "Language-Team: English (United Kingdom)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Topic for %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• You changed the topic to %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s changed the topic to %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s is away (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modes for %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP from %(nick)s to Channel:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP request from you to %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• You are now known as %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s is now known as %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« You have quit (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« You have quit." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s has quit (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s has quit." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» You have joined %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s has joined %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« You have left %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« You have left %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s has left %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s has left %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• You are not a channel operator." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: No such nick/channel." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: No such server." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: No such channel." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Unknown reason" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "The channel is full." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "The channel is invite-only." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "You are banned." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "You need the correct channel key." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "You can not join %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Auto accepted file transfer" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki auto-accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Plugin “%(plugin)s” caused an error." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka could not connect to maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Please check whether maki is running." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Communication error with maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka requires a newer maki version." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Please update maki to at least version %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• Unknown command “%(command)s”, sending raw command “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "No server name given." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "You must enter a server name." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Channel list search error." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "No transfer selected!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "You must select a transfer to remove it." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Remove file transfer?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Are you sure you want to remove the file transfer %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompile and run" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Read history anyway?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyway?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "History for %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "No plugin selected." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "You must select a plugin to load it." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "You must select a plugin to unload it." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "No server selected." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "You must select a server to edit it." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "You must select a server to delete it." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Error while retrieving server name." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois on %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Whois data of %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "No data received so far. Are you still connected?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Loading..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Select destination" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Select a destination to save the file" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Info: If you don't choose another destination this file will be " "resumed." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Incoming file transfer" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Error occured" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Hide '%s' messages" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Enter the key for the channel %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Save key for channel" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Configure %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Foreground Colour" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Background Colour" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Reset Colour" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Hide main window" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Show main window" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Topic for channel %(channel)s on %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Topic changed already." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Welcome to tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "You are connected to maki. The next step is to connect to a server via the " "server dialogue in the tekka menu." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Reset markup" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Do you really want to close channel “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Do you really want to close query “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Do you really want to close server “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Nickname: " #: ../tekka/main.py:784 msgid "User: " msgstr "User: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Topic: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Last sentence: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "No connection to maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "You can't shutdown maki. You're not connected." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka could not determine server." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Widget creation failed." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Ignoring User %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "User %(user)s is unignored" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "No file selected" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "You didn't select a file to send. Aborting." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Choose a file to send to %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Chris Woollard https://launchpad.net/~cwoollard" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Advanced Preferences" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Channel List" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "IRC to real colours" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "IRC Colours" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" "This dialog tries to explain how you can use colour markups in your text to " "highlight phrases in a different colour.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which colour every number represents." #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "Contrast colours" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Example" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Select a colour" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "The quick brown fox jumps over the lazy developer." #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "File Transfers" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Message types to hide" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Other" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Own" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Hide message types" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Join:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Kick:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Mode:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Nick:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Part:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Quit:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Join a channel" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Join _automatically" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Name:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Join" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "C_onfigure" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Plug-ins" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Load" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Unload" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filter messages" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Information:\n" "Changes will be applied after closing this dialog." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "A_uto expand server tree" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Actions:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Ad_vanced Settings" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Autodetect rules colour" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "C_hatting" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "C_olours" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Default nick:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Enable rules colour" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Font:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Highlighted actions:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Highlighted messages:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Highlightwords:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "If you want to have control about all settings you can use the " "advanced settings dialogue.\n" "\n" "Notice:\n" "For some options it is necessary to restart tekka for the changes to take " "effect." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Last log lines:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Last log:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Messages:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notification:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Own nick:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Own text:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Part message:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Preferences" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Quit message:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Reset" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Rules colour:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Shutdown _maki on close" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Time format:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Use _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Use _default font" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Use contrast sensitive colours" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_General Output" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Hide on close" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Nick Colours" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Show status icon" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Server List" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Add Server" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Command List" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Add Server" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Address:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Auto-connect:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Nick name:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ password:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Port:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Real name:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Server name:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Delete Server" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Edit Server" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Edit Server" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "IRC _Colours" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "P_lugins" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "S_ide Pane" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "Status _Bar" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Status _Icon" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "T_ools" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Channel List" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Debug" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_File Transfers" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Help" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Server List" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Shutdown" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Topic Bar" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_View" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Ban" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Give Half-Op" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Give Op" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Give Voice" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignore" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Kick" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modes" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Send File" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Take Half-Op" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Take Op" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Take Voice" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Connect automatically" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "H_ide Messages" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Join automatically" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Set _Key" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Set _Topic" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Close" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Connect" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Disconnect" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_History" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Join a Channel" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Part" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operator" #~ msgstr[1] "%d Operators" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d User" #~ msgstr[1] "%d Users" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialogue." #~ msgid "Plugin could not be loaded." #~ msgstr "Plugin could not be loaded." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Plugin %(plugin)s could not be loaded." #~ msgid "Plugin is already loaded." #~ msgstr "Plugin is already loaded." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Plugin %(plugin)s is already loaded." #~ msgid "Plugin could not be unloaded." #~ msgstr "Plugin could not be unloaded." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "Plugin %(plugin)s could not be unloaded, because it is not loaded." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Plugin %(plugin)s could not be loaded automatically." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ "IRC to real colours\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgid "#" #~ msgstr "#" sushi-1.4.0+dfsg/tekka/po/pt_BR.po0000664000175000017500000005714111700417156016517 0ustar dfilonidfiloni# Brazilian Portuguese translation for tekka # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-02-20 22:12+0000\n" "Last-Translator: shimon \n" "Language-Team: Brazilian Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Tópico para %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Você mudou o tópico para %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s mudou o tópico para %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s está away (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modos para %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP de %(nick)s para o Canal:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP requisitado para %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Você é agora conhecido como %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s é agora conhecido como %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Você foi kickado de %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s foi kickado do %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Você saiu (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Você saiu." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s saiu (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s saiu." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Você se juntou %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s se juntou %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Você abandonou %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Você abandonou %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s deixou %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s deixou %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Você não é um operador de canal." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Não existe tal nick/canal." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Servidor inexistente." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Canal inexistente." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "O canal está cheio." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka não pode se conectar ao maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Erro de comunicação com maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompilar e executar" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Carregando..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "" #: ../tekka/main.py:785 msgid "Topic: " msgstr "" #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Osvaldo Zonetti https://launchpad.net/~zonetti\n" " shimon https://launchpad.net/~shimon-soares" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notificação:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Preferências" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Formato de hora:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_Saída geral" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Lista de Servidores" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Adicionar Servidor" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Lista de comandos" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Adicionar Servidor" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Endereço:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Auto-conectar" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Nick name:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ senha:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Porta:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Nome real:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Nome do Servidor:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Remover servidor\n" "\n" "Você tem certeza que deseja remover o servidor '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Deletar Servidor" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Editar Servidor" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Editar Servidor" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Transferências de arquivo" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Ajuda" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Desligar" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Visualizar" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Banir" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Dar Half-Op" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Dar OP" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Dar Voice" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignorar" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Chutar" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modos" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Enviar Arquivo" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Retirar OP" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Tirar Voice" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Conectar automaticamente" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Conectar" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Desconectar" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Histórico" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Usuário" #~ msgstr[1] "%d Usuários" sushi-1.4.0+dfsg/tekka/po/he.po0000664000175000017500000007532211700417156016106 0ustar dfilonidfiloni# Hebrew translation for tekka # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-06-11 14:37+0000\n" "Last-Translator: Yaron \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• הנושא עבור %(channel)s:‏ %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• שינית את הנושא ל־%(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s שינה את הנושא ל־%(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s הנו מרוחק (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• מצבים עבור %(target)s:‏ %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP מ־%(nick)s אל הערוץ:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "בקשת CTCP ממך אל %(target)s:‏ %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• כינויך החדש הינו %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s כעת ידוע תחת השם %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« נבעטת אל מחוץ לערוץ %(channel)s על ידי %(nick)s ‏(%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(who)s נבעט אל מחוץ לערוץ %(channel)s על ידי %(nick)s ‏(%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« יצאת מהערוץ (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« יצאת." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s יצא מהערוץ (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s יצא." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» הצטרפת לערוץ %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s הצטרף לערוץ %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« עזבת את הערוץ %(channel)s‏ (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« עזבת את הערוץ %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s עזב את הערוץ %(channel)s ‏(%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s עזב את הערוץ %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• אינך מנהל ערוץ." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: אין כינוי/ערוץ כזה." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: אין שרת כזה." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: אין ערוץ כזה." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "סיבה לא ידועה" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "הערוץ מלא." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "הערוץ מיועד למוזמנים בלבד." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "נחסמת." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "תזדקק למפתח הערוץ הנכון." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "לא תוכל להצטרף לערוץ %(channel)s:‏ %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "העברת קובץ שהתקבלה אוטומטית" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "מאקי מקבל אוטומטית את העברת הקובץ הבא:\n" "שם הקובץ: %(filename)s\n" "שולח: %(sender)s\n" "גודל: %(size)s\n" "שרת: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "התוסף “%(plugin)s” גרם לשגיאה." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka נתקל בבעיה בהתחברות ל־maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "נא לבדוק האם maki פעיל." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "יש לבדוק האם maki פעיל.\n" "השגיאה הבאה אירעה: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "שגיאת התקשרות עם maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "התרחשה שגיאה בזמן ביצוע '%s' עם DBus: \n" "%s\n" "עליך לוודא שמאקי מופעל " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka דורשת גרסה חדשה יותר של maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "יש לעדכן את maki לפחות לגרסה %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• הפקודה “%(command)s”אינה ידועה, שולח את הפקודה הגולמית “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "לא ניתן שם לשרת." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "הינך חייב להכניס שם לשרת." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "שגיאת חיפוש ברשימת הערוצים." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "לא נבחרה העברה!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "הינך חייב לבחור העברה כדי להסיר אותה." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "להסיר את העברת הקובץ?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "האם הינך בטוח שברצונך להסיר את העברת הקובץ %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "הי_דור והרצה" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "לקרוא את ההיסטוריה בכל מקרה?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "מאקי מחובר מרחוק. יכול להיות שההיסטוריה אינה זמינה. האם להריץ בכל מקרה?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "היסטוריה עבור %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "לא נבחר תוסף." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "הינך חייב לבחור תוסף כדי לטעון אותו." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "הינך חייב לבחור תוסף כדי להסיר אותו." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "לא נבחר שרת." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "הינך חייב לבחור שרת כדי לערוך אותו." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "הינך חייב לבחור שרת כדי למחוק אותו." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "התרחשה שגיאה בזמן איחזור שם השרת." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "שאילתת whois כלפי %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "נתוני whois עבור %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "לא התקבלו נתונים עד כה. האם החיבור עדיין פעיל?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "בטעינה..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "בחר יעד" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "בחר ידע לשמירת הקובץ" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "מידע: אם לא יבחר ידע אחר, העברת הקובץ הזה תמשך." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "העברת קובץ נכנסת" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "שולח: ”%(nick)s”\n" "שם הקובץ: “%(filename)s“\n" "גודל הקובץ: %(bytes)d bytes\n" "יעד: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "ארעה שגיאה" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "הסתרת הודעות '%s'" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "יש להזין את המפתח עבור הערוץ %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "שמירת המפתח עבור הערוץ" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "הגדרת %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "צבע החזית" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "צבע הרקע" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "אפס צבע" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "הסתרת החלון הראשי" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "הצגת החלון הראשי" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "נושא הערוץ %(channel)s ב־%(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "הנושא שונה קודם לכן." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "הנושא שונה בטרם עדכונך. האם ברצונך להחיל את השינויים בכל מקרה?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "ברוך הבא לטאקה!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "הינך מחובר למאקי. הצעד הבא הוא להתחבר לשרת באמצעות שרת השיח בתפריט טאקה." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "איפוס הסימון" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "האם אתה בטוח שברצונך לסגור את הערוץ “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "האם ברצונך לסגור את השאילתה “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "האם ברצונך לסגור את השרת “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "כינוי: " #: ../tekka/main.py:784 msgid "User: " msgstr "משתמש: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "נושא: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "המשפט האחרון: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "אין חיבור למאקי." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "אינך יכול לכבות את מאקי. אינך מחובר." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "ל־tekka לא היתה אפשרות לקבוע איזה שרת." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "אין שרת פעיל. יש ללחוץ על הלשונית שרת או על צאצא של לשונית שרת כדי להפעיל את " "השרת." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "יצירת הווידג'ט נכשלה." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "מתעלם ממשתמש %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "הוסרה ההתעלמות ממשתמש %(user)s" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "לא נבחר קובץ" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "לא בחרת קובץ לשליחה. מבטל." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "בחר קובץ לשליחה ל-%(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Omri Strumza https://launchpad.net/~blueomega" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "העדפות מתקדמות" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "רשימת הערוצים" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "IRC לצבעים אמיתיים" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "צבעי IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "העברות קבצים" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "סוגי הודעה להסתרה" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "אחר" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "עצמי" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "הסרת סוגי הודעות" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "הצטרף:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "בעט:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "מצב:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "כינוי:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "יציאה:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "התנתק:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "הצטרף לערוץ" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "הצטרף _אוטומטית" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "שם:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_הצטרף" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "ה_גדרה" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "תוספים" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_טעינה" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_פריקה" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "סנן הודעות" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "הרחבת עץ ה_שרתים אוטומטית" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "פעולות:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "הגדרות _מתקדמות" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "גלה אוטומטית את חוקי הצבא" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "_שיחה" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "_צבעים" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "כינוי ברירת המחדל:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "הפעל חוקי צבע" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "גופן:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "פעולות מודגשות:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "הודעות מודגשות:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "מילים מודגשות:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "אם ישנו צורך לשלוט בכל ההגדרות ניתן להשתמש בדו־שיח ההגדרות המתקדמות.\n" "\n" "לתשומת לבך:\n" "עבור אפשרויות מסוימות יש צורך להפעיל מחדש את tekka כדי שהשינויים יכנסי לתוקף." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "שורות הרישום האחרונות:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "הרישום אחרון:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "הודעות:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "התרעה:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "כינוי עצמי:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "טקסט עצמי:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "הודעת עזיבה:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "העדפות" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "הודעת יציאה:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "חוקי צבע:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "_כיבוי maki בעת הסגירה" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "תבנית זמן:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "_שימוש ב־RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "שימוש ב_גופן ברירת המחדל" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_פלט כללי" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "ה_סתרה בעת הסגירה" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_צבעי הכינויים" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "הצגת _סמל המצב" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "רשימת שרתים" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "הוספת שרת" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "רשימת פקודות" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "הוספת שרת" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "כתובת:‏" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "התחברות אוטומטית:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "כינוי:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "סיסמת ה־NickServ:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "פתחה:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "שם אמיתי:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "שם השרת:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "מחיקת שרת\n" "\n" "האם באמת למחוק את השרת '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "מחק את השרת" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "עריכת שרת" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "ערוך שרת" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "_צבעי IRC" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "תו_ספים" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "חלונית צ_ד" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "שורת ה_מצב" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "סמל ה_מצב" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "כ_לים" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "רשימת ה_ערוצים" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_ניפוי שגיאות" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "העברות _קבצים" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "ע_זרה" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "רשימת _שרתים" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_כבה" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "סרגל ה_נושא" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_תצוגה" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "חסימה" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "הענק חצי־מפעיל" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "הענק מפעיל" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "הענק קול" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "התעלם" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "בעיטה" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "מצבים" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "שלח קובץ" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "שלילת חצי־מפעיל" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "שלילת מפעיל" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "שלילת קול" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "התחבר אוטומטית" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "ה_סתר הודעות" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "הצטרף אוטומטית" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "הגדר _מקש" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "הגדר _נושא" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_סגור" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_התחבר" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #~ msgid "Plugin is already loaded." #~ msgstr "התוסף כבר נטען." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "לא ניתן לטעון את התוסף %(plugin)s.\n" #~ "השגיאה הבאה ארעה: %(error)s" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "משתמש אחד" #~ msgstr[1] "%d משתמשים" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "מפעיל אחד" #~ msgstr[1] "%d מפעילים" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "לא ניתן לטעון את התוסף %(plugin)s." #~ msgid "Plugin could not be loaded." #~ msgstr "לא ניתן לטעון את התוסף." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "לא ניתן לטעון את התוסף %(plugin)s אוטומטית." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "התוסף %(plugin)s כבר נטען." #~ msgid "Plugin could not be unloaded." #~ msgstr "לא ניתן לבטל את טעינת התוסף." #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "אזהרה:\n" #~ "השינויים יחולו לאחר סגירת תיבת הדו־שיח." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "לא ניתן לפרוק את התוסף %(plugin)s, מכיוון שלא נטען." sushi-1.4.0+dfsg/tekka/po/lt.po0000664000175000017500000007150311700417156016126 0ustar dfilonidfiloni# Lithuanian translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-02-15 03:57+0000\n" "Last-Translator: Mantas Kriaučiūnas \n" "Language-Team: Lithuanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Tema kanalui %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• jūs pakeitėte temą į %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s pakeitė temą į %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s yra pasitraukęs nuo kompiterio (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Režimai %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP iš %(nick)s į kanalą:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP request from you to %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Dabar tavo slapyvardis yra %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s pakeitė slapyvardį į %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Tu buvai išspirtas iš %(channel)s %(nick)s sprendimu (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s buvo išspirtas %(nick)s iš %(channel)s dėl (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Jūs išėjote dėl (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Jūs išėjote." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s išėjo dėl (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s išėjo." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Jūs prisijungėte prie %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s prisijungė prie %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Jūs palikote %(channel)s dėl (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Jūs palikote %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s paliko %(channel)s dėl (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s paliko %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Jūs nesate kanalo operatorius." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Nėra tokio slapyvardžio arba kanalo." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Nėra tokio serverio." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Nėra tokio kanalo." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Nežinoma priežastis" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Kanalas jau pilnas." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Į kanalą priimama tik su pakvietimais." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Jums uždrausta lankytis šiame kanale." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Jums reikia teisingo kanalo raktažodžio." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Jums nepavyko prisijungti prie %(channel)s dėl: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Automatiškai priimti failų siuntimus" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki automatiškai priėmė šį siuntinį:\n" "Failo pavadinimas: %(filename)s\n" "Siuntėjas: %(sender)s\n" "Dydis: %(size)s\n" "Serveris: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka nepavyko prisijungti prie maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Prašome patikrinti, ar maki paleistas." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Prašome patikrinti, ar maki paleistas.\n" "Įvyko ši klaida: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Bendravimo klaida su maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Įvyko klaida paleidžiant '%s' su DBus: \n" "%s\n" "Jums reikėtų saugoti, kad maki paleistas " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka rikia naujesnės maki versijos." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Prašome atnaujinti maki bent iki %(version)s versijos." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" "• Nežinoma komanda “%(command)s”, siunčiama neapdorota komanda “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Nenurodytas serverio pavadinimas." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Jūs turite įvesti serverio pavadinimą." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Kanalų sąrašo paieškos klaida." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Sintaksės klaida paieškos eilutėje. Klaida yra tokia: %s\n" "Patarimas: Nenaudokite specialiųjų simbolių, pvz,. '*' arba '.' " "paieškos eilutėje, jeigu nežinote apie įprastas išraiškas." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Nepasirinktas siuntinys!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Privalote pasirinkti siuntinį, kad jį galėtumėte pašalinti." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Pašalinti failo siuntinį?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Ar tikrai norite pašalinti failo siuntinį %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "K_ompiliuoti ir paleisti" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Klaida gaunant serverio pavadinimą." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Įvyko klaida gaunant serverio pavadinimą.\n" "Ar Jūs esate prisijungęs prie maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois komanda serveriui %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Whois duomenys slapyvardžiui %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Vis dar negauti jokie duomenys. Ar Jūs vis dar prisijungęs?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Kraunama..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Pasirinkti vietą" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Pasirinkti vietą, kur norite išsaugoti failą" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Informacija: Jei nepasirinksite kitos vietos, šis failas bus " "pratęstas." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Ateinantis failo siuntinys" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Siuntėjas: ”%(nick)s”\n" "Failo pavadinimas: “%(filename)s“\n" "Failo dydis: %(bytes)d baitų\n" "Vieta: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Įvyko klaida" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Slėpti '%s' žinutes" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Įvesti kanalo %(channel)s raktažodį." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Išsaugoti kanalo raktažodį" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Konfigūruoti %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Slėpti pagrindinį langą" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Rodyti pagrindinį langą" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Kanalo %(channel)s tema %(server)s serveryje" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Tema pakeista prieš tai." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Tema buvo pakeista prieš Jūsų atnaujinimą. Ar vis tiek norite tęsti su " "pakeitimais?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Sveiki prisijungę prie tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Jūs prisijungėte prie maki. Kitas žingsnis yra prisijungti prie serverio per " "serverio langelį tekka meniu." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Jūs nesate prisijungęs prie maki. Be maki negalėsite jungtis prie serveriu " "ir rašyti žinučių.\n" "\n" "Jei Jums iškyla problemų naudojant maki, aplankykite http://sushi.ikkoku.de/ " "ir pažiūrėkite, ar Jūsų problemai nėra sprendimo. Kitu atveju, nesidrovėkite " "prašyti pagalbos." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Atstatyti žymėjimą" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Ar tikrai norite uždaryti kanalą “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Ar tikrai norite uždaryti užklausą “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Ar tirkai norite uždaryti serverį “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Slapyvardis: " #: ../tekka/main.py:784 msgid "User: " msgstr "Naudotojas: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Tema: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Paskutinis sakinys: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Neprisijungta prie maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Nepavyko išjungti maki. Jūs nesate prisijungęs." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka nepavyko nustatyti serverio." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Nėra aktyvaus serverio. Spustelėkite ant serverio kortelės arba serverio " "kortelės vaiko, kad aktyvuotumėte serverį." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Valdiklio sukūrimas nepavyko." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "tekka nepavyko sukurti slapyvardžių sąrašo meniu.\n" "Galimai trūksta tam tikrų failų. Pasitikrinkite, ar turite teises pasiekti " "failus, kurių reikia tekka, tada perkraukite tekka." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Nepasirinktas joks failas" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Nepasirinkote failo siuntimui. Nutraukiama." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Pasirinkite failą, kurį norite nusiųsti %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Darius Kulikauskas https://launchpad.net/~dkulikauskas\n" " Mantas Kriaučiūnas https://launchpad.net/~mantas\n" " Michael Kuhn https://launchpad.net/~suraia" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Sudėtingesni nustatymai" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Kanalų sąrašas" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Failų siuntimai" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Žinučių tipai, kurias slėpti" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Kita" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Savi" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Žinučių tipai, kurias slėpti" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Prisijungti:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Išspirti:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Režimas:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Slapyvardis:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Palikti:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Išeiti:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "K_onfigūruoti" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Įskiepiai" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "Į_krauti" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "Iškrauti" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operatorius" #~ msgstr[1] "%d Operatoriai" #~ msgstr[2] "%d Operatorių" #~ msgid "Plugin is already loaded." #~ msgstr "Įskiepis jau įkrautas." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Įskiepis %(plugin)s jau įkrautas." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Nepavyko įkrauti įskiepio %(plugin)s.\n" #~ "Įvyko ši klaida: %(error)s" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Nepavyko įkrauti %(plugin)s įskiepio." #~ msgid "Plugin could not be loaded." #~ msgstr "Nepavyko įkrauti įskiepio." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "Nepavyko iškrauti %(plugin)s įskiepio, nes jis nebuvo įkrautas." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Nepavyko įkrauti %(plugin)s įskiepio automatiškai." #~ msgid "Plugin could not be unloaded." #~ msgstr "Nepavyko iškrauti įskiepio." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Klaida\n" #~ "\n" #~ "Atsiprašome — įvyko klaida. Nesidrovėkite pranešti apie programos klaidą " #~ "šiuo adresu https://bugs.launchpad.net/sushi." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "tekka nepavyko sukurti serverių medžio meniu.\n" #~ "Galimai trūksta tam tikrų failų. Pasitikrinkite, ar turite teises pasiekti " #~ "reikiamus tekka failus, tada perkraukite tekka." #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d naudotojas" #~ msgstr[1] "%d naudotojai" #~ msgstr[2] "%d naudotojų" sushi-1.4.0+dfsg/tekka/po/POTFILES.in0000664000175000017500000000275011700417156016722 0ustar dfilonidfilonicommand_handler.py plugins/sound.py signal_handler.py sushi.py tekka/com.py tekka/dialogs/addServer.py tekka/dialogs/channelList.py tekka/dialogs/dcc.py tekka/dialogs/debug.py tekka/dialogs/history.py tekka/dialogs/join.py tekka/dialogs/plugins.py tekka/dialogs/server.py tekka/dialogs/whois.py tekka/gui/dialogs.py tekka/gui/mgmt/__init__.py tekka/helper/color.py tekka/lib/dcc_dialog.py tekka/lib/error_dialog.py tekka/lib/general_output_buffer.py tekka/lib/key_dialog.py tekka/lib/plugin_config_dialog.py tekka/lib/spell_entry.py tekka/lib/status_icon.py tekka/lib/topic_dialog.py tekka/lib/welcome_window.py tekka/main.py tekka/menus/mainmenu_context.py tekka/menus/nicklist_menu.py tekka/menus/servertree_menu.py tekka/plugins.py [type: gettext/glade] ui/dialogs/about.ui.in [type: gettext/glade] ui/dialogs/advancedPreferences.ui [type: gettext/glade] ui/dialogs/channelList.ui [type: gettext/glade] ui/dialogs/colorTable.ui [type: gettext/glade] ui/dialogs/contrast.ui [type: gettext/glade] ui/dialogs/dcc.ui [type: gettext/glade] ui/dialogs/hide.ui [type: gettext/glade] ui/dialogs/join.ui [type: gettext/glade] ui/dialogs/plugins.ui [type: gettext/glade] ui/dialogs/preferences.ui [type: gettext/glade] ui/dialogs/server.ui [type: gettext/glade] ui/dialogs/serverAdd.ui [type: gettext/glade] ui/dialogs/serverDelete.ui [type: gettext/glade] ui/dialogs/serverEdit.ui [type: gettext/glade] ui/main_window.ui [type: gettext/glade] ui/menus/nickListMenu.ui [type: gettext/glade] ui/menus/serverTreeMenu.ui sushi-1.4.0+dfsg/tekka/po/bg.po0000664000175000017500000010334011700417156016072 0ustar dfilonidfiloni# Bulgarian translation for tekka # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 12:51+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Bulgarian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "Тема за %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "Сменихте темата на %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "%(nick)s смени темата на %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "%(nick)s отсъства (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "Режим на %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP от %(nick)s до канал:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP изисква от Вас %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Твоят псевдоним сега е %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s сега е %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« Ти беше изритан в %(channel)s от %(nick)s с причина (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" "« %(who)s беше изритан в %(channel)s от %(nick)s с причина (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Ти напусна (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Ти напусна." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s излезе (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s излезе." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Ти влезе в %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s влезе в %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Ти напусна %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Ти напусна %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s напусна %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s напусна %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Не сте оператор в този канал" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Несъществува такъв прякор/канал." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Няма такъв сървър." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Несъществува такъв канал." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Непозната причина" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Канала е пълен." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "В канала се влиза само с покана." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Ти си изгонен." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Трябва ти ключ за този канал." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Неможеш да се присъединиш към %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Автоматично одобрен файлов трансфер" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki автоматично одобри следния файлов трансфер:\n" "Име на файл: %(filename)s\n" "Подател: %(sender)s\n" "Размер: %(size)s\n" "Сървър: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka не можа да се свърже с maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Моля, проверете дали maki работи." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Проверете работи ли маки.\n" "Възникна следната грешка: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Връзкова грешка с maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Имаше грешка при изпълнението на '%s' с DBus:\n" "%s " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka изисква по-нова версия на maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Моля, обновете maki поне до версия %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" "• Непозната команда “%(command)s”, задай първичната команда “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Не сте задали име на сървъра." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Трябва да въведете име на сървъра." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Грешка в списъка на търсене за канала" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Имате синтактична грешка във Вашото условие за търсене. Грешката е: %s\n" "Tip: Не трябва да използвате специални символи като '*' или '.' във " "Вашето условие за търсене, ако не знаете коректни изрази." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Не е избран трансфер!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Трябва да изберете трансфер, за да го изтриете." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Изтрий файловия трансфер?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Сигурни ли сте, че искате да откажете файлов превод %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "С_ъстави и изпълни" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Все пак прочетете изторията?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki е свързан дистанционно. Възможно е историята да не е достъпна. Искате " "ли да пробвате все пак?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "История за %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Няма избрани добавки" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Трябва да изберете добавка за да я заредите." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Трябва да изберете добавка за да я премахнете." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Не е избран сървър" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Трябва да изберете сървър за да го редактирате." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Трябва да изберете сървър за да го изтриете." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Грешка при получаването на сървърно име." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Грешка при получаването на сървърно име.\n" "Свързани ли сте с maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Резултат от Whois за %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Данни от Whois за %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Няма данни, получени до този момент. Все още ли сте свързани?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Зареждане…" #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Избор на дестинация" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Изберете дестинация за да запазите файла." #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Info: Ако не изберете друга дестинация, файлът ще продължи " "изтеглянето си." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Входящ файлов превод" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Изпращач: „%(nick)s“\n" "Име на файла: „%(filename)s“\n" "Размер: %(bytes)d байта\n" "Местоназначение: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Възникна грешка" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Въведете ключа за стая %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Запази ключа за стая" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Настрой %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Крий главния прозорец" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Покажи главния прозорец" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Тема на канал %(channel)s на %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Добре дошли в текка!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Имате връзка с маки. Сега можете да се свържете със сървър от диалога " "„Сървър“ в менюто на текка." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Няма връзка с маки. Без такава не можете да се свързвате със сървъри или да " "пишете съобщения.\n" "При проблеми с ползването на маки прегледайте hhtp://sushi.ikkoku.de/ за " "решение на проблема. Или помолете за помощ." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Премахни маркираното" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Сигурен ли си, че искаш да затвориш този канал “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Сигурен ли си, че искаш да затвориш ЛС “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Сигурен ли си, че искаш да напуснеш сървъра “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Псевдоним: " #: ../tekka/main.py:784 msgid "User: " msgstr "Потребител: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Тема: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Няма връзка с маки." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Не можете да спрете маки, тъй като не сте сте свързани." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "текка не можа да идентифицира сървъра." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Неуспех при създаване на джаджа." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "Неуспех при съставяне на списъка с псевдоними.\n" "Възможно е да липсват файлове. Проверете дали имате право на достъп до " "всички необходими на текка файлове и я рестартирайте." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Не е избран файл" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Не сте избрали файл за пращане. Прекъсвам." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Изберете файл, който да пратите на %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " PhobosK https://launchpad.net/~phobosk\n" " Ивайло Маринков https://launchpad.net/~ivyl\n" " Румен Йонков https://launchpad.net/~sfweed" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Разширени опции" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Списък канал" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Файлови преводи" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Крий следните типове съобщения" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Други" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Собствени" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Крий съобщения от тип" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Присъединяване:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Изритване:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Режим:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Псевдоним:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Присъединявай се _автоматично" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Име:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Плугини" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Load" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Unload" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "A_uto expand server tree" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Действия:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Ad_vanced Настройки" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "C_hatting" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "C_olors" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Прякор по подразбиране:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Шрифт:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Highlighted actions:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Ако искаш да имаш контрол над всички настройки ти можеш да използваш " "Разширените настройки.\n" "\n" "Бележка:\n" "За някой настройки трябва да се рестартира tekka за да има ефект." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Последни логове:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Съобщения:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notification:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Собствен прякор:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Собствен текст:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Съобщение при напускане:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Настройки" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Съобщение при изход:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Изход _maki при затваряне" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Използвай _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_General Output" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Hide при затваряне" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Nick Цветове" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Show статус икони" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Списък със сървъри" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Добави сървър" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Списък командиt" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Добави сървър" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Адрес:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Автоматичен вход:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Прякор:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ парола:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Порт:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Истинско име:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Име на сървър:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Изтриване на сървър\n" "\n" "Сигурен ли сте, че искате да изтриете сървъра '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Изтрии сървър" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Промени сървър" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Промени сървър" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "Статус _Bar" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Статус _Icon" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Channel списък" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Debug" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Help" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_View" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Бан" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Дай половин-оператор" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Дай операторски права" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Дай Voice" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Забрани" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Изритай" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Модове" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Вземи половин-оператор" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Вземи Op" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Вземи Voice" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "Потребител %d" #~ msgstr[1] "Потребители %d" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "Оператор %d" #~ msgstr[1] "Оператори %d" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Внимание:\n" #~ "Промените ще влязат в сила след като затворите този прозорец." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Добавката %(plugin)s не бе заредена успешно." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Добавката %(plugin)s не бе заредена успешно.\n" #~ "Възникна следната грешка: %(error)s" #~ msgid "Plugin could not be loaded." #~ msgstr "Добавката не бе заредена успешно." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Добавката %(plugin)s не можа да се зареди автоматично." #~ msgid "Plugin is already loaded." #~ msgstr "Тази добавка вече е активна." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Добавката %(plugin)s вече е активна." #~ msgid "Plugin could not be unloaded." #~ msgstr "Добавката не може да бъде изключена." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "Добавката %(plugin)s не може да бъде изключена – тя не е активна." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Грешка\n" #~ "\n" #~ "Възникна грешка, моля да ни извините. Приканваме Ви да докладвате за " #~ "проблема на https://bugs.launchpad.net/sushi." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "Неуспех при съставяне на сървърното дърво.\n" #~ "Възможно е да липсват файлове. Проверете дали имате право на достъп до " #~ "всички необходими на текка файлове и я рестартирайте." #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ "IRC цветове към истински такива\n" #~ "\n" #~ "Например:\n" #~ "Въведете %C02,01 за син преден план и черен фон." #~ msgid "#" #~ msgstr "№" sushi-1.4.0+dfsg/tekka/po/sv.po0000664000175000017500000005730711700417156016145 0ustar dfilonidfiloni# Swedish translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 12:09+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Swedish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "" #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "" #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "" #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "" #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "" #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "" #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "" #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "" #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "" #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "" #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka kunde inte ansluta till maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Var god kontrollera ifall maki körs.\n" "Följande fel inträffade: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Kommunikationsfel med maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka kräver en nyare maki-version." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Ingen data mottagen såhär långt. Är du fortfarande ansluten?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Laddar..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Inkommande filöverföring" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Ett fel inträffade" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Konfigurera %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Dölj huvudfönstret" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Visa huvudfönstret" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Ämne för kanalen %(channel)s på %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Ämnet ändrades förut." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Ämnet ändrades före din uppdatering. Vill du genomföra ändringarna iallafall?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Välkommen till tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Du är ansluten till maki. Nästa steg är att ansluta till en server via " "serverdialogen i tekkas meny." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Alias: " #: ../tekka/main.py:784 msgid "User: " msgstr "Användare: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Ämne: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Sista meningen: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Ingen anslutning till maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka kunde inte avgöra servern." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Treecko https://launchpad.net/~treeckosour" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Avancerade inställningar" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Serverlista" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Hjälp" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Visa" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Bannlys" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Tillägget %(plugin)s kunde inte laddas.\n" #~ "Följande fel inträffade: %(error)s" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Tillägget %(plugin)s kunde inte laddas." #~ msgid "Plugin could not be loaded." #~ msgstr "Tillägget kunde inte laddas." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "TIllägget %(plugin)s kunde inte laddas automatiskt." #~ msgid "Plugin is already loaded." #~ msgstr "Tillägget är redan laddat." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Tillägget %(plugin)s är redan laddat." #~ msgid "Plugin could not be unloaded." #~ msgstr "Tillägget kunde inte avaktiveras." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "TIllägget %(plugin)s kunde inte avaktiveras, för att det inte är laddat." #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d användare" #~ msgstr[1] "%d användare" sushi-1.4.0+dfsg/tekka/po/id.po0000664000175000017500000005344611700417156016111 0ustar dfilonidfiloni# Indonesian translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-05-31 06:00+0000\n" "Last-Translator: Abdul Munif Hanafi \n" "Language-Team: Indonesian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "" #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "" #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "" #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Anda telah keluar." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "" #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "" #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "" #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "" #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "" #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "" #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "" #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "" #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "" #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "" #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "" #: ../tekka/main.py:785 msgid "Topic: " msgstr "" #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Abdul Munif Hanafi https://launchpad.net/~nafica-coroz" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" sushi-1.4.0+dfsg/tekka/po/.gitignore0000664000175000017500000000000511700417156017124 0ustar dfilonidfiloni*.mo sushi-1.4.0+dfsg/tekka/po/oc.po0000664000175000017500000006074611700417156016117 0ustar dfilonidfiloni# Occitan (post 1500) translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-11-24 19:13+0000\n" "Last-Translator: Cédric VALMARY (Tot en òc) \n" "Language-Team: Occitan (post 1500)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Subjècte del %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Avètz cambiat lo subjècte del canal en %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s a cambiat lo subjècte del canal en %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s es absent (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Mòdes per %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP de %(nick)s pel canal :" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Demanda CTCP per vos de %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Ara, vos disètz %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s s'apèla ara %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Sètz estat ejectat de %(channel)s per %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s es estat ejectat de %(channel)s per %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Avètz quitat lo canal (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Avètz quitat lo canal." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s a quitat lo canal (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s a quitat lo canal." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Avètz rejonch %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s a rejonch %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Avètz quitat %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Avètz quitat %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s a quitat %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s a quitat %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Sètz pas un operador del canal." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Pas cap d'escais/canal d'aqueste nom." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Pas cap de servidor." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Pas cap de canal" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Rason desconeguda" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Lo canal es plen." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "" #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Sètz bandit." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "" #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "" #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompilar e aviar" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Cargament en cors..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Configurar %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Benvenguda dins tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Escais : " #: ../tekka/main.py:784 msgid "User: " msgstr "Utilizaire : " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Subjècte : " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Pas de fichièr seleccionat" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Cédric VALMARY (Tot en òc) https://launchpad.net/~cvalmary" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Preferéncias avançadas" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Lista dels canals" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Transferiment de fichièrs" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Autres" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Ejectar :" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Mòde :" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Escais :" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Sortir :" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Quitar :" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Nom :" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Jónher" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "C_onfigurar" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Moduls extèrnes" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Cargar" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filtrar los messatges" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "Ajuda :" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Accions :" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Reglatges A_vançats" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Discussion" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "C_olors" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Escais per defaut :" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Poliça :" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Messatges :" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notificacion :" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Preferéncias" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Messatge de sortida :" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Format d'ora :" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Utilizar _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "Far _veire una icòna d'estatut" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Apondre un servidor" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adreça :" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Connexion automatica :" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Escais :" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Senhal NickServ :" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Pòrt :" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Nom vertadièr :" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Nom del servidor :" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "E_mpeutons" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Barra d'estat" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "_Aisinas" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Listas dels _canals" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Desbugatge" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "Transferiments de _fichièrs" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Ajuda" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Lista dels servidors" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Atudar" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Afichatge" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Bandir" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignorar" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Exclòure" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Mòdes" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Mandar lo fichièr" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Se connectar automaticament" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Definir la _clau" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Tampar" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "Se _connectar" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "Se _desconnectar" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Istoric" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "Re_jónher un canal" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Sortir" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d utilizaire" #~ msgstr[1] "%d utilizaires" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d operador" #~ msgstr[1] "%d operadors" #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "Error" #~ msgid "#" #~ msgstr "#" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "Atencion :" sushi-1.4.0+dfsg/tekka/po/tr.po0000664000175000017500000005635611700417156016145 0ustar dfilonidfiloni# Turkish translation for tekka # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 13:37+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "Konuyu değiştirerek %(topic)s yaptınız." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "%(nick)s konuyu değiştirerek %(topic)s yaptı." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "" #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "" #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "" #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "" #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "" #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "" #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "" #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "" #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "" #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "" #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "" #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "" #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "" #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "" #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Kanal dolu" #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Kanal sadece davetlilere açık." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Engellisiniz." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "" #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "" #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "" #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "" #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "" #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "" #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "D_erle ve çalıştır" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Yükleniyor..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "" #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Kanal anahtarını kaydet." #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Ana pencereyi gizle" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Ana pencereyi göster" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "Kullanıcı: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Konu: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "" #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "" #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "" #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Dosya seçilmedi" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Gelişmiş Seçenekler" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Kanal Listesi" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "IRC Renkleri" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Dosya Transferleri" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Diğer" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Kick:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Mod:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Takma ad:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Ad:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Bağlan" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "_Yapılandır" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Eklentiler" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Yükle" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Eylemler:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "_Gelişmiş Ayarlar" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "_Renkler" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Varsayılan nick:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Yazı tipi:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Son giriş:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "İletiler:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Bildiriler:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Tercihler" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Çıkış mesajı:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Saat biçimi:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "_Varsayılan fontu kullan" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "Genel Çıktılar" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Durum simgesini göster" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Sunucu Listesi" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Sunucu Ekle" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Komut Listesi" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Sunucu Ekle" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adres:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Otomatik-bağlan" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Gerçek isim:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Sunucu adı:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Sunucuyu Sil\n" "'%(sunucu)' sunucusunu silmek istediğinizden emin misiniz?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Sunucu Sil" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Sunucuyu Düzelt" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Sunucuyu Düzenle" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "_Eklentiler" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Durum _Simgesi" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "_Araçlar" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Kanal Listesi" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Hata Ayıklama" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Dosya Transferleri" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Yardım" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Sunucu Listesi" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Görünüm" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Engelle" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Yarım Op ver" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Op Ver" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Voice (Ses) Ver" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Tekmele" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modlar" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Dosya Gönder" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Yarım Op Al" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Op Al" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Voice (Ses) Al" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Kim" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Otomatik bağlan" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Kapat" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Bağlan" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Bağlantıyı Kes" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Geçmiş" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "" #~ msgid "#" #~ msgstr "#" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Kullanıcı" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operatör" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Uyarı:\n" #~ "Bu pencereyi kapandıktan sonra değişiklikler uygulanacak." sushi-1.4.0+dfsg/tekka/po/da.po0000664000175000017500000006431711700417156016100 0ustar dfilonidfiloni# Danish translation for tekka # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-14 12:49+0000\n" "Last-Translator: Michael Kuhn \n" "Language-Team: Danish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Emne for %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Du ændrede emnet til %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "" #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s ikke tilstede (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP fra %(nick)s til kanal:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP anmodning fra dig til %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Du er nu kendt som %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s er nu kendt som %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Du blev sparket fra %(channel)s af %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s blev sparket fra %(channel)s af %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Du afsluttede (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Du afsluttede." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s afsluttede (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s afsluttede." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Du ankom til %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s er ankommet til %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Du har forladt %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Du har forladt %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s har forladt %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s har forladt %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "" #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Ingen sådan øgenavn/kanal." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Ingen sådan server." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Ingen sådan kanal." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Ukendt grund" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Kanalen er fuld" #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Kanalen er kun ved invitation." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Du er nu bandlyst." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Du har brug for den korrekte kanal nøgle." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Du kan ikke tilslutte %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "" #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka kunne ikke forbinde til maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Tjek venligst om maki kører." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Tjek venligst om maki kører.\n" "Følgende fejl opstod: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Kommunikationsfejl med maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka kræver en nyere maki version." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Opdatér venligst maki til mindst version %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "• Ukendt kommando “%(command)s”, sender rå kommando “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "" #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "" #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "" #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompile og kør" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "" #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Hvem-er på %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Hvem-er data af %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Ingen data modtaget indtil nu. Er du stadig forbundet?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Loader..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Indgående filoverførsel" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Fejl opstod" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Indtast nøglen for denne kanal %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Gem nøglen for kanal" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "konfigurér %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Skjul hovedvindue" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Vis hovedvindue" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Emne for kanal %(channel)s på %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Emne tidligere ændret." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Emnet blev ændret før din opdatering. Vil du stadig bidrage med ændringer?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Velkommen til tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Nulstil markering" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Ønsker du virkelig at lukke kanal \"%(name)s\"?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Ønsker du virkelig at lukke forespørgelse \"%(name)s\"?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Ønsker du virkelig at lukke server \"%(name)s\"?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "" #: ../tekka/main.py:784 msgid "User: " msgstr "Bruger: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Emne: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "" #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Ingen forbindelse til maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "" #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka kunne ikke bestemme server." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Widget skabelse fejlede." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "" #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " EFJoKeR https://launchpad.net/~jlassesen\n" " Jimmy Frydkær Jensen https://launchpad.net/~jimmy-frydkaer\n" " nanker https://launchpad.net/~nanker" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Advancerede Indstillinger" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Kanal liste" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "IRC-farver" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Filoverførsler" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Meddelelsestype at skjule" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Andet" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Egen" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Skjul meddelelsestype" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Deltag i:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Spark:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Modus:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Alias:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Deltag:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Forlad:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Deltag" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "K_onfigurér" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Udvidelser" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Indlæs" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Udlæs" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filter meddelelser" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "A_uto udvide server træ" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Handlinger:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Ad_vanceret Indstillinger" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "C_hatting" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "_Farver" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Standard Øgenavn:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Skrifttype:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Fremhævede handlinger:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Fremhævede beskeder:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Fremhævede-ord:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Hvis du ønsker at have kontrol over alle indstillinger da kan du " "bruge den advancerede instillings dialog.\n" "\n" "Bemærk:\n" "For nogen indstillinger og få effekt er det nødvendigt at genstarte tekka." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Sidste log linjer:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Sidste log:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Beskeder:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notifikation:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Eget øgenavn:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Egen tekst:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Delt besked:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Indstillinger" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Afslut besked:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Luk _maki ved afslutning" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Tidsformat:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Benyt _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Benyt _standard skrifttype" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_Generel Uddata" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Skjul ved luk" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Øgenavn Farver" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Vis status ikon" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Server-liste" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr " Tilføj Server" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Kommando Liste" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Tilføj Server" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adresse:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Auto-forbind:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Øgenavn:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Øgenavn Adgangskode:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Port:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Reele Navn:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Servernavn:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Fjern Server\n" "\n" "Er du sikker på du vil slette server '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Fjern Server" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Rediger Server" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Rediger Server" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "Status _Bar" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Status _Icon" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Channel Liste" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Debug" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Filoverførsler" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Hjælp" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Emne bjælke" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Se" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Bandlys" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Giv Halv-Op" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Giv Op" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Giv stemme" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Spark" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Tilstande" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Tag Half-Op" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Tag Op" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Tag Voice" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Hvem-er" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "SK_JUL meddelelse" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Indstil _tast" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Indstil _emne" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Forbind" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Afbryd forbindelse" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Historik" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Forlad" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Bruger" #~ msgstr[1] "%d Brugere" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operatør" #~ msgstr[1] "%d Operatører" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Advarsel:\n" #~ "Ændringer vil blive udført efter afslutning at denne dialog." #~ msgid "Plugin is already loaded." #~ msgstr "Udvidelsesmodul er allerede indlæst." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Udvidelsesmodul %(plugin)s er allerede indlæst." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Udvidelsesmodul %(plugin)s kunne ikke indlæses automatisk." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Udvidelsesmodul %(plugin)s kunne ikke indlæses." sushi-1.4.0+dfsg/tekka/po/es.po0000664000175000017500000010217311700417156016114 0ustar dfilonidfiloni# Spanish translation for tekka # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2010-11-15 16:09+0000\n" "Last-Translator: Fitoschido \n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:40+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "Tema para %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "Ha cambiado el tema a %(topic)s" #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "%(nick)s cambió el tema a %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s está ausente (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modos para %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP de %(nick)s al Canal:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "Petición CTCP tuya a %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Ahora te llamas %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s ahora se llama %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Ha sido expulsado de %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s fue expulsado de %(channel)s por %(nick)s (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Tú has salido (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Tu has salido." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s ha salido por (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s ha salido." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Te has unido a %(channel)s." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s se ha unido a %(channel)s." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Has dejado %(channel)s (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Has dejado %(channel)s." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s ha dejado %(channel)s (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s ha dejado %(channel)s." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Usted no es un operador de canal." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: No existe ese nick/canal." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: No existe ese servidor." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: No existe ese canal." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Motivo desconocido" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "El canal esta lleno." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "El canal es sólo para invitados." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Has sido bloqueado." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Necesita la llave correcta del canal." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "No se puede unirse a %(channel)s: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Auto aceptar la transferencia de archivos" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "Maki auto aceptado la transferencia de archivos siguientes:\n" "Nombre del archivo: %(filename)s\n" "Remitente: %(sender)s\n" "Tamaño: %(size)s\n" "Servidor: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "El complemento «%(plugin)s» provocó un error." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka no puede conectar con maki." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Compruebe que maki se está ejecutando." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Por favor verifique si maki está ejecutándose\n" "Ocurrio el siguiente error: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Error de comunicación con maki." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Hubo un error mientras se ejecutaba '%s' con DBus: \n" "%s\n" "Quédese seguro que maki está funcionando " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka requiere una versión superior de maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Por favor actualice maki al menos a la versión %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "Orden desconocida “%(command)s”, enviando orden errónea “%(raw)s”." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Nombre del servidor no informado." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Debe introducir un nombre de servidor." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Error al buscar en la lista del canal" #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Tuvo un error de sintaxis en su búsqueda. El error es: %s\n" "Consejo: No debería usar caracteres especiales como '*' o '.' en su " "búsqueda si no sabe de expresiones regulares." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Ausencia de transferencia seleccionado!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Usted debe seleccionar una transferencia para eliminarlo." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Eliminar la transferencia de archivos?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "" "¿Estás seguro de que deseas eliminar la transferencia de archivos %(id)d?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "C_ompilar y ejecutar" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Leer de todos modos la historia?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki está conectado de forma remota. Es posible que la historia no sea " "accesible. ¿Quieres probar de todos modos?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Historia de %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Ningun complemento selecionado" #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Uds. debe selecionar un complemento para cargar" #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Uds. debe selecionar un complemento para descargarlo" #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Ningun Servidor Selecionado" #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Uds. debe selecionar un servidor para editarlo" #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Uds. debe selecionar un Servidor para borrarlo" #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Error al recuperar el nombre del servidor." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Se produjo un error al recuperar el nombre del servidor.\n" "¿Estás conectado a Maki?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Quién está en %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Datos Whois de %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "No se recibieron datos aun. ¿Está conectado?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Cargando..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Seleccione destino" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Seleccione un destino para guardar el archivo" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Info: Si usted no elige otro destino, este archivo se reanudará." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Transferencia de archivos entrante" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Remitente: \"%(nick)s\"\n" "Nombre del archivo: \"%(filename)s\"\n" "Tamaño del archivo: %(bytes)d bytes\n" "Destino: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Ocurrió un error" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "¡Que no cunda el pánico!\n" "\n" "Ha ocurrido un error – nos disculpamos por eso. Siéntase libre de enviarnos " "un reporte de error a https://bugs.launchpad.net/sushi." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Ocultar '%s' Mensajes" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Introduzca la lalve del canal %(channel)s." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Guardar llave del canal" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Configurar %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Color del primer plano" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Color de fondo" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Reiniciar color" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Ocultar la ventana principal" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Mostrar la ventana principal" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Tema para canal %(channel)s en %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Tema cambiado anteriormente" #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "El tema fué cambiado antes de su actualización. ¿Desea realizar los cambios " "de igual manera?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "¡Bienvenido tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Está conectado a maki. El próximo paso es conectar a un servidor mediante el " "diálogo de servidores en el menú tekka." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "No está conectado a maki. Sin maki no puede conectarse a servidores o " "escribir mensajes.\n" "\n" "Si está teniendo problemas al correr maki, visite: http://sushi.ikkoku.de/ y " "busque una solución a su problema. De no encontrarla, siéntase libre de " "preguntar al soporte." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Reiniciar marcación" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "¿Realmente quieres cerrar el canal “%(name)s”?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "¿Realmente quiere cerrar la consulta “%(name)s”?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "¿Realmente quieres cerrar el servidor “%(name)s”?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Nickname: " #: ../tekka/main.py:784 msgid "User: " msgstr "Usuario: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Tema: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Última linea: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Ninguna conexión con maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Usted no puede apagar maki. Usted no está conectado." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka no pudo determinar el servidor." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "No hay servidor activo. De clic en una pestaña de servidor o en una pestaña " "de servidor hijo para activar el servidor" #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Creación de Widget fallida." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "tekka falló al crear el menú de lista de nombres.\n" "Es posible que haya archivos extraviados. Compruebe si tiene los permisos " "apropiados para acceder a todos los archivos necesareos por tekka y reinicie " "tekka." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Ignorar usuario %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "El usuario %(user)s está ignorado" #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "No se ha seleccionado ningún archivo" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Usted no ha seleccionado un archivo a enviar. Abortar." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Elija un archivo para enviar al %(nick)s" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Dennis Tobar https://launchpad.net/~dennis-tobar\n" " Fitoschido https://launchpad.net/~fitoschido\n" " Monkey https://launchpad.net/~monkey-libre\n" " Ricardo A. Hermosilla Carrillo https://launchpad.net/~rahermosillac" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Preferencias Avanzadas" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Lista de Canales" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "IRC a colores reales" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "Colores IRC" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" "Este diálogo intenta explicar como usted puede utilizar marcas de colores en " "su texto para resaltas frases en un color diferente.\n" "\n" "Si usted está en un canal o en un privado, simplemente envíe %C02,01prueba%C " "y obtendrá el mensaje \"prueba\" con letras de color azul y fondo negro.\n" "\n" "La sintaxis de la marca %C es sencilla: %Ccolordeltexto,colordefondo.\n" "\n" "Incluso usted puede dejar el \",colordefondo\" en blanco si sólo le interesa " "cambiar el color del texto.\n" "\n" "Si únicamente utiliza %C significa que se utilizará la configuración por " "defecto.\n" "\n" "Ejemplo de uso:\n" "Escriba %C02,01 para un color de texto azul y un fondo negro.\n" "\n" "La siguiente lista le dará una visión general acerca de los número que puede " "utilizar y el color que representa cada uno." #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "Colores de contraste" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Ejemplo" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Selecciona un color" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "Programador emponzoñado de whisky: ¡Qué figurota exhibe!" #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Transferencia de Archivos" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Tipo de mensajes a ocultar" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Otro" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Propios" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Ocultar tipos de mensaje" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Unir:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Echar" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Modo:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Apodo:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Parte:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Abandonar:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Unirse a un Canal" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "Unirse _automaticamente" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Nombre:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "Unirse" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "C_onfigurar" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Complementos" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Cargar" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Descargar" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Filtrar mensajes" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Ayuda:\n" "El primer campo es el tipo de mensaje.\n" "El segundo campo representa al servidor del que proviene el " "mensaje.\n" "El último campo es el canal/solicitud que envió el mensaje.\n" "\n" "El último campo es opcional." #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Información:\n" "Se aplicarán los cambios después de cerrar este diálogo." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "A_uto expandir el árbol del servidor" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Acciones:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Ajustes A_vanzados" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Detección automática reglas de color" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "C_harlar" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "C_olores" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Apodo predeterminado:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Habilitar reglas de color" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Tipografía:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Acciones destacadas:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Mensajes destacados:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Marcar palabras:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Si quiere tener el control de todos los ajustes puede usar el diálogo " "de ajustes avanzados.\n" "\n" "Advertencia:\n" "En algunas opciones es necesario reiniciar tekka para que los cambios tengan " "efecto." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Últimas líneas del registro:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Último registro:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Mensajes:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Notificación:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Apodo personal:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Texto personal:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Parte del mensaje:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Preferencias" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Mensaje de salida:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Restablecer" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Reglas de color:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "Apagar _maki al cerrar" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Formato del tiempo:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "Usar _RGBA" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "Usar la tipografía predeterminada" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Use colores sensibles al contraste" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "Salida _General" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "_Ocultar al cerrar" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "Colores del _Apodo" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "_Mostrar icono de estado" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Lista de Servidores" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Añadir Servidor" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Lista de Comandos" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Añadir Servidor" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Dirección:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Conexión automática:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Apodo:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "Contraseña de NickServ:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Puerto:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Nombre real:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Nombre del servidor:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Eliminar Servidor\n" "\n" "¿Está seguro de que desea eliminar el servidor '%(server)s'?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Eliminar Servidor" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Editar Servidor" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Editar Servidor" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "Fantasma NickServ:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "Colores_IRC" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "C_omplementos" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "P_anel lateral" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "_Barra de estado" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "_Icono de estado" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "H_erramientas" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "Lista de _Canales" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Depurar" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Transferencias de Archivos" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Ayuda" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Lista de Servidores" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "_Apagar" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "Barra de _Temas" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Ver" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Banear" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Dar Half-Op" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Dar Op" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Dar voz" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignorar" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Patear" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modos" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Enviar Archivo" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Tomar Half-Op" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Quitar Op" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Tomar Voz" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Quién es" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Conectar Automaticamente" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "O_cultar Mensajes" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Unirse Automaticamente" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "Establecer _clave" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "Estabelcer _Tema" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "_Cerrar" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Conectar" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "_Desconectar" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "_Historial" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Unirse a un Canal" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "_Parte" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operador" #~ msgstr[1] "%d Operadores" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Usuario" #~ msgstr[1] "%d Usuarios" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "El complemento %(plugin)s no pudo cargarse automáticamente." #~ msgid "Plugin is already loaded." #~ msgstr "El complemento ya está cargado." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "El complemento %(plugin)s ya está cargado." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "El complemento %(plugin)s no pudo ser cargado.\n" #~ "Ocurrió el siguiente error: %(error)s" #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "El complemento %(plugin)s no pudo ser cargado." #~ msgid "Plugin could not be loaded." #~ msgstr "El complemento no pudo ser cargado." #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Advertencia:\n" #~ "Los cambios se aplicarán al cerrar este diálogo." #~ msgid "Plugin could not be unloaded." #~ msgstr "El complemento no se pudo cargar" #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "tekka falló al crear el menú de árbol de servidores.\n" #~ "Es posible que falten algunos archivos. Verifique si tiene los permisos " #~ "necesarios para acceder a todos los archivos necesitados por tekka y " #~ "reinicie tekka." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "El Plugin %(plugin)s no pudo ser descargado, por que no está cargado." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Error\n" #~ "\n" #~ "Ha ocurrido un error — pedimos disculpas por eso. Siéntase libre de " #~ "registrar un reporte de bug en: https://bugs.launchpad.net/sushi." #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ " IRC a los colores reales \n" #~ "\n" #~ "Ejemplo de uso: \n" #~ "Tipee %C02,01 para el primer plano azul y fondo negro." #~ msgid "#" #~ msgstr "#" sushi-1.4.0+dfsg/tekka/po/wscript0000664000175000017500000000021511700417156016555 0ustar dfilonidfiloni#!/usr/bin/env python def configure (ctx): ctx.load('intltool') def build (ctx): ctx( features = 'intltool_po', appname = 'tekka' ) sushi-1.4.0+dfsg/tekka/po/LINGUAS0000664000175000017500000000011711700417156016165 0ustar dfilonidfiloniast bg cs da de en_GB es fi fr gl he id it lt nb nl oc pt_BR pt ru sv tr zh_CN sushi-1.4.0+dfsg/tekka/po/de.po0000664000175000017500000010334411700417156016076 0ustar dfilonidfiloni# German translation for tekka # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the tekka package. # msgid "" msgstr "" "Project-Id-Version: tekka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-15 20:13+0200\n" "PO-Revision-Date: 2011-12-05 18:41+0000\n" "Last-Translator: Jens Maucher \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-01-02 20:41+0000\n" "X-Generator: Launchpad (build 14560)\n" #: ../signal_handler.py:363 #, python-format msgid "• Topic for %(channel)s: %(topic)s" msgstr "• Thema in %(channel)s: %(topic)s" #: ../signal_handler.py:399 #, python-format msgid "• You changed the topic to %(topic)s." msgstr "• Sie haben das Thema geändert zu %(topic)s." #: ../signal_handler.py:401 #, python-format msgid "• %(nick)s changed the topic to %(topic)s." msgstr "• %(nick)s hat das Thema geändert zu %(topic)s." #: ../signal_handler.py:460 #, python-format msgid "• %(nick)s is away (%(message)s)." msgstr "• %(nick)s ist abwesend (%(message)s)." #: ../signal_handler.py:592 #, python-format msgid "• Modes for %(target)s: %(mode)s" msgstr "• Modi für %(target)s: %(mode)s" #. normal ctcp #: ../signal_handler.py:685 #, python-format msgid "CTCP from %(nick)s to Channel:" msgstr "CTCP von %(nick)s für Channel:" #: ../signal_handler.py:716 #, python-format msgid "CTCP request from you to %(target)s: %(message)s" msgstr "CTCP-Anfrage von Ihnen für %(target)s: %(message)s" #: ../signal_handler.py:919 #, python-format msgid "• You are now known as %(newnick)s." msgstr "• Sie sind jetzt bekannt als %(newnick)s." #: ../signal_handler.py:925 #, python-format msgid "• %(nick)s is now known as %(newnick)s." msgstr "• %(nick)s ist jetzt bekannt als %(newnick)s." #: ../signal_handler.py:1016 #, python-format msgid "« You have been kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« Sie wurden von %(nick)s aus %(channel)s geworfen (%(reason)s)." #: ../signal_handler.py:1037 #, python-format msgid "« %(who)s was kicked from %(channel)s by %(nick)s (%(reason)s)." msgstr "« %(who)s wurde von %(nick)s aus %(channel)s geworfen (%(reason)s)." #: ../signal_handler.py:1075 #, python-format msgid "« You have quit (%(reason)s)." msgstr "« Sie haben die Verbindung beendet (%(reason)s)." #: ../signal_handler.py:1077 msgid "« You have quit." msgstr "« Sie haben die Verbindung beendet." #: ../signal_handler.py:1100 #, python-format msgid "« %(nick)s has quit (%(reason)s)." msgstr "« %(nick)s hat die Verbindung beendet (%(reason)s)." #: ../signal_handler.py:1102 #, python-format msgid "« %(nick)s has quit." msgstr "« %(nick)s hat die Verbindung beendet." #: ../signal_handler.py:1198 #, python-format msgid "» You have joined %(channel)s." msgstr "» Sie haben %(channel)s betreten." #: ../signal_handler.py:1209 #, python-format msgid "» %(nick)s has joined %(channel)s." msgstr "» %(nick)s hat %(channel)s betreten." #: ../signal_handler.py:1288 #, python-format msgid "« You have left %(channel)s (%(reason)s)." msgstr "« Sie haben %(channel)s verlassen (%(reason)s)." #: ../signal_handler.py:1290 #, python-format msgid "« You have left %(channel)s." msgstr "« Sie haben %(channel)s verlassen." #: ../signal_handler.py:1314 #, python-format msgid "« %(nick)s has left %(channel)s (%(reason)s)." msgstr "« %(nick)s hat %(channel)s verlassen (%(reason)s)." #: ../signal_handler.py:1317 #, python-format msgid "« %(nick)s has left %(channel)s." msgstr "« %(nick)s hat %(channel)s verlassen." #: ../signal_handler.py:1338 msgid "• You are not a channel operator." msgstr "• Sie sind kein Channel-Operator." #: ../signal_handler.py:1348 #, python-format msgid "• %(target)s: No such nick/channel." msgstr "• %(target)s: Kein solcher Nick/Channel." #: ../signal_handler.py:1351 #, python-format msgid "• %(target)s: No such server." msgstr "• %(target)s: Kein solcher Server." #: ../signal_handler.py:1354 #, python-format msgid "• %(target)s: No such channel." msgstr "• %(target)s: Kein solcher Channel." #: ../signal_handler.py:1366 msgid "Unknown reason" msgstr "Unbekannter Grund" #: ../signal_handler.py:1369 msgid "The channel is full." msgstr "Der Channel ist voll." #: ../signal_handler.py:1371 msgid "The channel is invite-only." msgstr "Der Channel kann nur auf Einladung betreten werden." #: ../signal_handler.py:1373 msgid "You are banned." msgstr "Sie sind gebannt." #: ../signal_handler.py:1389 msgid "You need the correct channel key." msgstr "Sie benötigen den richtigen Channel-Schlüssel." #: ../signal_handler.py:1394 #, python-format msgid "You can not join %(channel)s: %(reason)s" msgstr "Sie können %(channel)s nicht betreten: %(reason)s" #: ../signal_handler.py:1466 msgid "Auto accepted file transfer" msgstr "Dateitransfer automatisch akzeptiert" #: ../signal_handler.py:1467 #, python-format msgid "" "maki auto accepted the following file transfer:\n" "Filename: %(filename)s\n" "Sender: %(sender)s\n" "Size: %(size)s\n" "Server: %(server)s" msgstr "" "maki hat den folgenden Dateitransfer automatisch akzeptiert:\n" "Dateiname: %(filename)s\n" "Sender: %(sender)s\n" "Größe: %(size)s\n" "Server: %(server)s" #: ../sushi.py:96 #, python-format msgid "Plugin “%(plugin)s” caused an error." msgstr "Plugin \"%(plugin)s\" versursachte einen Fehler." #: ../tekka/com.py:126 ../tekka/com.py:136 ../tekka/com.py:240 msgid "tekka could not connect to maki." msgstr "tekka konnte sich nicht mit maki verbinden." #: ../tekka/com.py:127 msgid "Please check whether maki is running." msgstr "Bitte überprüfen Sie, ob maki läuft." #: ../tekka/com.py:137 ../tekka/com.py:241 #, python-format msgid "" "Please check whether maki is running.\n" "The following error occurred: %(error)s" msgstr "" "Bitte überprüfen Sie, ob maki läuft.\n" "Der folgende Fehler ist aufgetreten: %(error)s" #: ../tekka/com.py:174 msgid "Communication error with maki." msgstr "Es trat ein Fehler bei der Kommunikation mit maki auf." #: ../tekka/com.py:175 #, python-format msgid "" "There was an error while executing '%s' with DBus: \n" "%s\n" "You should keep safe that maki is running " msgstr "" "Es trat ein Fehler beim Ausführen von '%s' mit DBus auf: \n" "%s\n" "Sie sollten sicherstellen, dass maki läuft. " #: ../tekka/com.py:284 msgid "tekka requires a newer maki version." msgstr "tekka benötigt eine neuere Version von maki." #: ../tekka/com.py:285 #, python-format msgid "Please update maki to at least version %(version)s." msgstr "Bitte aktualisieren Sie maki mindestens auf Version %(version)s." #: ../tekka/commands.py:115 #, python-format msgid "• Unknown command “%(command)s”, sending raw command “%(raw)s”." msgstr "" "• Kommando »%(command)s« ist unbekannt, Roh-Kommando »%(raw)s« wird gesendet." #: ../tekka/dialogs/addServer.py:47 msgid "No server name given." msgstr "Es wurde kein Servername angegeben." #: ../tekka/dialogs/addServer.py:48 msgid "You must enter a server name." msgstr "Sie müssen einen Servernamen angeben." #: ../tekka/dialogs/channelList.py:89 msgid "Channel list search error." msgstr "Es trat ein Fehler beim Suchen in der Channel-Liste auf." #: ../tekka/dialogs/channelList.py:90 #, python-format msgid "" "You've got a syntax error in your search string. The error is: %s\n" "Tip: You should not use special characters like '*' or '.' in your " "search string if you don't know about regular expressions." msgstr "" "Es befindet sich ein Syntaxfehler in Ihrem Suchwort. Der Fehler lautet: %s\n" "Tipp: Sie sollten keine Spezialzeichen wie „*“ oder „.“ in Ihrem " "Suchwort benutzen, wenn Sie nicht wissen was ein regulärer Ausdruck ist." #: ../tekka/dialogs/dcc.py:161 msgid "No transfer selected!" msgstr "Es wurde kein Transfer ausgewählt!" #: ../tekka/dialogs/dcc.py:162 msgid "You must select a transfer to remove it." msgstr "Sie müssen einen Transfer auswählen, um ihn zu entfernen." #: ../tekka/dialogs/dcc.py:166 msgid "Remove file transfer?" msgstr "Wollen Sie diesen Dateitransfer entfernen?" #: ../tekka/dialogs/dcc.py:167 #, python-format msgid "Are you sure you want to remove the file transfer %(id)d?" msgstr "Sind Sie sicher, dass Sie den Dateitransfer %(id)d entfernen wollen?" #: ../tekka/dialogs/debug.py:63 msgid "C_ompile and run" msgstr "K_ompilieren und ausführen" #: ../tekka/dialogs/history.py:78 msgid "Read history anyways?" msgstr "Chronik trotzdem lesen?" #: ../tekka/dialogs/history.py:79 msgid "" "maki is connected remotely. It's possible that the history is not " "accessible. Do you want to try anyways?" msgstr "" "maki ist vage verbunden. Es ist möglich dass die Chronik unzugänglich ist. " "Wollen Sie es trotzdem versuchen?" #: ../tekka/dialogs/history.py:117 #, python-format msgid "History for %(target)s" msgstr "Chronik für %(target)s" #: ../tekka/dialogs/plugins.py:83 ../tekka/dialogs/plugins.py:111 msgid "No plugin selected." msgstr "Kein Plugin ausgewählt." #: ../tekka/dialogs/plugins.py:84 msgid "You must select a plugin to load it." msgstr "Sie müssen ein Plugin auswählen, um es laden zu können." #: ../tekka/dialogs/plugins.py:112 msgid "You must select a plugin to unload it." msgstr "Sie müssen ein Plugin auswählen, um es entladen zu können." #: ../tekka/dialogs/server.py:140 ../tekka/dialogs/server.py:167 msgid "No server selected." msgstr "Kein Server ausgewählt." #: ../tekka/dialogs/server.py:141 msgid "You must select a server to edit it." msgstr "Sie müssen einen Server auswählen, um ihn bearbeiten zu können." #: ../tekka/dialogs/server.py:168 msgid "You must select a server to delete it." msgstr "Sie müssen einen Server auswählen, um ihn löschen zu können." #: ../tekka/dialogs/server.py:178 msgid "Error while retrieving server name." msgstr "Es trat ein Fehler auf während der Servername empfangen wurde." #: ../tekka/dialogs/server.py:179 msgid "" "There was an error while retrieving the server name.\n" "Are you connected to maki?" msgstr "" "Es trat ein Fehler auf während der Servername empfangen wurde.\n" "Sind Sie mit maki verbunden?" #: ../tekka/dialogs/whois.py:74 #, python-format msgid "Whois on %(server)s" msgstr "Whois-Anfrage auf %(server)s" #: ../tekka/dialogs/whois.py:79 #, python-format msgid "Whois data of %(nick)s" msgstr "Whois-Daten von %(nick)s" #: ../tekka/dialogs/whois.py:111 msgid "No data received so far. Are you still connected?" msgstr "Noch keine Daten empfangen. Sind Sie noch verbunden?" #: ../tekka/dialogs/whois.py:127 msgid "Loading..." msgstr "Lade..." #: ../tekka/lib/dcc_dialog.py:67 msgid "Select destination" msgstr "Wählen Sie das Ziel" #: ../tekka/lib/dcc_dialog.py:86 msgid "Select a destination to save the file" msgstr "Wählen Sie ein Ziel, um die Datei zu speichern" #: ../tekka/lib/dcc_dialog.py:104 msgid "" "\n" "Info: If you don't choose another destination, this file will be " "resumed." msgstr "" "\n" "Information: Wenn Sie kein anderes Ziel wählen, wird der " "Dateitransfer wiederaufgenommen." #: ../tekka/lib/dcc_dialog.py:110 msgid "Incoming file transfer" msgstr "Eingehende Dateiübertragung" #: ../tekka/lib/dcc_dialog.py:111 #, python-format msgid "" "Sender: ”%(nick)s”\n" "Filename: “%(filename)s“\n" "File size: %(bytes)d bytes\n" "Destination: %(destination)s%(resumable)s" msgstr "" "Sender: „%(nick)s“\n" "Dateiname: „%(filename)s“\n" "Dateigröße: %(bytes)d Byte\n" "Ziel: %(destination)s%(resumable)s" #: ../tekka/lib/error_dialog.py:14 msgid "Error occured" msgstr "Es ist ein Fehler aufgetreten" #: ../tekka/lib/error_dialog.py:24 msgid "" "Don't Panic!\n" "\n" "An error occured – we apologize for that. Feel free to submit a bug report " "at https://bugs.launchpad.net/sushi." msgstr "" "Keine Panik!\n" "Ein Fehler ist aufgetaucht - wir entschuldigen uns dafür. Sei bitte so nett " "und stelle einen Fehlerbericht auf https://bugs.launchpad.net/sushi ein." #: ../tekka/lib/general_output_buffer.py:65 #, python-format msgid "Hide '%s' messages" msgstr "Verstecke „%s“-Nachrichten" #: ../tekka/lib/key_dialog.py:50 #, python-format msgid "Enter the key for the channel %(channel)s." msgstr "Geben Sie den Schlüssel für den Channel %(channel)s ein." #: ../tekka/lib/key_dialog.py:61 msgid "Save key for channel" msgstr "Schlüssel für den Channel speichern" #: ../tekka/lib/plugin_config_dialog.py:53 #, python-format msgid "Configure %(name)s" msgstr "Konfiguriere %(name)s" #: ../tekka/lib/spell_entry.py:152 msgid "Foreground Color" msgstr "Vordergrundfarbe" #: ../tekka/lib/spell_entry.py:164 msgid "Background Color" msgstr "Hintergrundfarbe" #: ../tekka/lib/spell_entry.py:176 msgid "Reset Color" msgstr "Farben zurücksetzen" #: ../tekka/lib/status_icon.py:61 msgid "Hide main window" msgstr "Hauptfenster verstecken" #: ../tekka/lib/status_icon.py:63 msgid "Show main window" msgstr "Hauptfenster anzeigen" #: ../tekka/lib/topic_dialog.py:62 #, python-format msgid "Topic for channel %(channel)s on %(server)s" msgstr "Thema für Kanal %(channel)s auf %(server)s" #: ../tekka/lib/topic_dialog.py:115 msgid "Topic changed before." msgstr "Das Thema hat sich davor verändert." #: ../tekka/lib/topic_dialog.py:116 msgid "" "The topic was changed before your update. Do you want to commit the changes " "anyway?" msgstr "" "Das Thema wurde vor Ihrer Änderung geändert. Wollen Sie ihre Änderung " "trotzdem absenden?" #: ../tekka/lib/welcome_window.py:63 msgid "Welcome to tekka!" msgstr "Willkommen zu tekka!" #: ../tekka/lib/welcome_window.py:121 msgid "" "You are connected to maki. The next step is to connect to a server via the " "server dialog in the tekka menu." msgstr "" "Sie sind mit maki verbunden. Der nächste Schritt besteht darin sich über das " "„tekka“-Menü mit einem Server zu verbinden." #: ../tekka/lib/welcome_window.py:127 msgid "" "You are not connected to maki. Without maki you can not connect to servers " "or write messages.\n" "\n" "If you are having problems running maki visit http://sushi.ikkoku.de/ and " "look whether there is a solution for your problem. Otherwise, feel free to " "ask for support." msgstr "" "Sie sind nicht mit maki verbunden. Ohne maki können Sie keine Verbindung zu " "Servern aufbauen oder Nachrichten schreiben.\n" "\n" "Wenn Sie Probleme bei der Ausführung von maki haben, besuchen Sie " "http://sushi.ikkoku.de/ und schauen Sie, ob eine Lösung für ihr Problem " "vorliegt. Falls nicht, zögern Sie nicht den Kundendienst zu kontaktieren." #: ../tekka/main.py:463 msgid "Reset markup" msgstr "Textauszeichnung zurücksetzen" #: ../tekka/main.py:652 #, python-format msgid "Do you really want to close channel “%(name)s”?" msgstr "Wollen Sie Channel »%(name)s« wirklich schließen?" #: ../tekka/main.py:654 #, python-format msgid "Do you really want to close query “%(name)s”?" msgstr "Wollen sie Query »%(name)s« wirklich schließen?" #: ../tekka/main.py:656 #, python-format msgid "Do you really want to close server “%(name)s”?" msgstr "Wollen Sie Server »%(name)s« wirklich schließen?" #. TODO: away status #: ../tekka/main.py:781 msgid "Nickname: " msgstr "Nickname: " #: ../tekka/main.py:784 msgid "User: " msgstr "Benutzer: " #: ../tekka/main.py:785 msgid "Topic: " msgstr "Thema: " #: ../tekka/main.py:787 ../tekka/main.py:791 msgid "Last sentence: " msgstr "Letzter Satz: " #: ../tekka/menus/mainmenu_context.py:135 #: ../tekka/menus/mainmenu_context.py:220 ../tekka/menus/nicklist_menu.py:175 msgid "No connection to maki." msgstr "Keine Verbindung zu maki." #: ../tekka/menus/mainmenu_context.py:136 msgid "You can't shutdown maki. You're not connected." msgstr "Sie können maki nicht herunterfahren. Sie sind nicht verbunden." #: ../tekka/menus/mainmenu_context.py:231 msgid "tekka could not determine server." msgstr "tekka konnte den Server nicht bestimmen." #: ../tekka/menus/mainmenu_context.py:232 msgid "" "There is no active server. Click on a server tab or a child of a server tab " "to activate the server." msgstr "" "Kein Server ist aktiv. Klicken Sie auf den Server-Reiter oder das Kind eines " "Server-Reiters, um den Server zu aktivieren." #: ../tekka/menus/nicklist_menu.py:61 ../tekka/menus/servertree_menu.py:51 msgid "Widget creation failed." msgstr "Das Widget konnte nicht erstellt werden." #: ../tekka/menus/nicklist_menu.py:62 ../tekka/menus/servertree_menu.py:52 msgid "" "tekka failed to create the nicklist menu.\n" "It's possible that there are files missing. Check if you have appropriate " "permissions to access all files needed by tekka and restart tekka." msgstr "" "tekka ist fehlgeschlagen das Nicklisten-Menü zu erstellen.\n" "Es ist möglich dass Dateien fehlen. Überprüfen Sie ob Sie die entsprechenden " "Rechte für alle Dateien die tekka benötigt besitzen, und starten Sie tekka " "neu." #: ../tekka/menus/nicklist_menu.py:137 #, python-format msgid "Ignoring User %(user)s" msgstr "Ignoriere User %(user)s" #: ../tekka/menus/nicklist_menu.py:143 #, python-format msgid "User %(user)s is unignored" msgstr "User %(user)s wird nicht ignoriert." #: ../tekka/menus/nicklist_menu.py:190 msgid "No file selected" msgstr "Keine Datei ausgewählt" #: ../tekka/menus/nicklist_menu.py:191 msgid "You didn't select a file to send. Aborting." msgstr "Sie haben keine Datei zum Senden ausgewählt. Abbruch." #: ../tekka/menus/nicklist_menu.py:197 #, python-format msgid "Choose a file to send to %(nick)s" msgstr "Wählen Sie eine Datei aus, die sie %(nick)s senden möchten" #: ../ui/dialogs/about.ui.in.h:1 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jarosław Ogrodnik https://launchpad.net/~goz\n" " Jens Maucher https://launchpad.net/~jensmaucher\n" " Julian Jacques Maurer https://launchpad.net/~mail-julianjmaurer\n" " Matthias Loidolt https://launchpad.net/~kedapperdrake\n" " Michael Konrad https://launchpad.net/~nephelyn\n" " Tim O. https://launchpad.net/~tim.o\n" " pert7 https://launchpad.net/~pert7" #: ../ui/dialogs/advancedPreferences.ui.h:1 msgid "Advanced Preferences" msgstr "Erweiterte Einstellungen" #: ../ui/dialogs/channelList.ui.h:1 msgid "Channel List" msgstr "Channelliste" #: ../ui/dialogs/colorTable.ui.h:1 msgid "IRC to real colors" msgstr "IRC zu echte Farben" #: ../ui/dialogs/colorTable.ui.h:2 msgid "IRC Colors" msgstr "IRC-Farben" #: ../ui/dialogs/colorTable.ui.h:4 #, no-c-format msgid "" "This dialog tries to explain how you can use color markups in your text to " "highlight phrases in a different color.\n" "\n" "If you're in a channel or in a query you can simply send %C02,01test%C and " "you will get a blue foregrounded \"test\" on a black background.\n" "\n" "The syntax for the %C markup is easy: %Cforeground,background.\n" "\n" "You can even let the \",background\" away if you're only interested in " "foreground colors.\n" "\n" "If you give a single %C this means that you want to use the default " "setting.\n" "\n" "Example use:\n" "Type %C02,01 for blue foreground and black background.\n" "\n" "The following listing gives you an overview about the numbers you can use " "and which color every number represents." msgstr "" "Dieser Dialog versucht zu erklären, wie Sie Farbbefehle in Ihrem Text " "verwenden können, um Sätze in einer anderen Farbe hervorzuheben.\n" "\n" "Wenn Sie sich in einem Channel oder in einer Query befinden, können Sie " "einfach %C02,01test%C senden und erhalten den Text \"test\" in blauer " "Schrift auf schwarzem Grund.\n" "\n" "Die Syntax der Farbbefehle ist einfach: %Cforeground,background.\n" "\n" "Sie könne sogar d\",background\" weglassen, wenn Sie nur die Schriftfarbe " "ändern wollen.\n" "\n" "Wenn Sie nur %C heißt das, dass Sie Standarteinstellungen verwenden " "wollen.\n" "\n" "Beispiel:\n" "Geben Sie %C02,01 für blaue Schrift auf schwarzem Grund ein.\n" "\n" "Die folgende Aufzählung gibt Ihnen einen Überblick über die Zahlen, die Sie " "verwenden können und welche Farbe sie repräsentieren." #: ../ui/dialogs/contrast.ui.h:1 msgid "Contrast colors" msgstr "Kontrastfarbe" #: ../ui/dialogs/contrast.ui.h:2 msgid "Example" msgstr "Beispiel" #: ../ui/dialogs/contrast.ui.h:3 msgid "Select a color" msgstr "Wähle eine Farbe" #: ../ui/dialogs/contrast.ui.h:4 msgid "The quick brown fox jumps over the lazy developer." msgstr "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern." #: ../ui/dialogs/dcc.ui.h:1 msgid "File Transfers" msgstr "Dateiübertragungen" #: ../ui/dialogs/hide.ui.h:1 msgid "Message types to hide" msgstr "Zu versteckende Nachrichtentypen" #: ../ui/dialogs/hide.ui.h:2 msgid "Other" msgstr "Andere" #: ../ui/dialogs/hide.ui.h:3 msgid "Own" msgstr "Eigene" #: ../ui/dialogs/hide.ui.h:4 msgid "Hide message types" msgstr "Verstecke Nachrichtentypen" #: ../ui/dialogs/hide.ui.h:5 msgid "Join:" msgstr "Betreten:" #: ../ui/dialogs/hide.ui.h:6 msgid "Kick:" msgstr "Rauswurf:" #: ../ui/dialogs/hide.ui.h:7 msgid "Mode:" msgstr "Modus:" #: ../ui/dialogs/hide.ui.h:8 msgid "Nick:" msgstr "Nickwechsel:" #: ../ui/dialogs/hide.ui.h:9 msgid "Part:" msgstr "Verlassen:" #: ../ui/dialogs/hide.ui.h:10 msgid "Quit:" msgstr "Beenden:" #: ../ui/dialogs/join.ui.h:1 msgid "Join a channel" msgstr "Betreten Sie einen Channel" #: ../ui/dialogs/join.ui.h:2 msgid "Join _automatically" msgstr "_Automatisch betreten" #: ../ui/dialogs/join.ui.h:3 msgid "Name:" msgstr "Name:" #: ../ui/dialogs/join.ui.h:4 ../ui/menus/serverTreeMenu.ui.h:10 msgid "_Join" msgstr "_Betreten" #: ../ui/dialogs/plugins.ui.h:1 msgid "C_onfigure" msgstr "K_onfigurieren" #: ../ui/dialogs/plugins.ui.h:2 msgid "Plugins" msgstr "Plugins" #: ../ui/dialogs/plugins.ui.h:3 msgid "_Load" msgstr "_Laden" #: ../ui/dialogs/plugins.ui.h:4 msgid "_Unload" msgstr "_Entladen" #: ../ui/dialogs/preferences.ui.h:1 msgid "Displayed message types" msgstr "" #: ../ui/dialogs/preferences.ui.h:2 msgid "Filter messages" msgstr "Nachrichten filtern" #: ../ui/dialogs/preferences.ui.h:3 msgid "" "Help:\n" "The first field is the message type.\n" "The second field represents the server the message comes " "from.\n" "The last field is the channel/query which sent the message.\n" "\n" "The last field is optional." msgstr "" "Hilfe:\n" "Das erste Feld ist der Nachrichtentyp.\n" "Das zweite Feld ist der Ursprungsserver.\n" "Das letzte Feld ist der Ursprungschannel/-query.\n" "\n" "Das letzte Feld ist optional." #: ../ui/dialogs/preferences.ui.h:9 msgid "" "Information:\n" "Changes will be applied after closing this dialog." msgstr "" "Information:\n" "Die Änderungen werden nach dem Schließen dieses Dialoges angewandt." #: ../ui/dialogs/preferences.ui.h:11 msgid "A_uto expand server tree" msgstr "Serverliste automatisch ausklappen" #: ../ui/dialogs/preferences.ui.h:12 msgid "Action" msgstr "Aktion" #: ../ui/dialogs/preferences.ui.h:13 msgid "Actions:" msgstr "Aktionen:" #: ../ui/dialogs/preferences.ui.h:14 msgid "Ad_vanced Settings" msgstr "Erweiterte Einstellungen" #: ../ui/dialogs/preferences.ui.h:15 msgid "Autodetect rules color" msgstr "Zeilenkontrastfarbe automatisch bestimmen" #: ../ui/dialogs/preferences.ui.h:16 msgid "C_hatting" msgstr "Chatten" #: ../ui/dialogs/preferences.ui.h:17 msgid "C_olors" msgstr "Farben" #: ../ui/dialogs/preferences.ui.h:18 msgid "Default nick:" msgstr "Standard-Nickname:" #: ../ui/dialogs/preferences.ui.h:19 msgid "Display IRC colors" msgstr "" #: ../ui/dialogs/preferences.ui.h:20 msgid "Enable rules color" msgstr "Zeilenkontrastfarbe benutzen" #: ../ui/dialogs/preferences.ui.h:21 msgid "Font:" msgstr "Schrift:" #: ../ui/dialogs/preferences.ui.h:22 msgid "Highlighted action" msgstr "" #: ../ui/dialogs/preferences.ui.h:23 msgid "Highlighted actions:" msgstr "Hervorgehobene Aktionen:" #: ../ui/dialogs/preferences.ui.h:24 msgid "Highlighted message" msgstr "Hervorgehobene Nachricht" #: ../ui/dialogs/preferences.ui.h:25 msgid "Highlighted messages:" msgstr "Hervorgehobene Nachrichten:" #: ../ui/dialogs/preferences.ui.h:26 msgid "Highlightwords:" msgstr "Hervorgehobene Wörter:" #: ../ui/dialogs/preferences.ui.h:27 msgid "" "If you want to have control about all settings you can use the " "advanced settings dialog.\n" "\n" "Notice:\n" "For some options it is neccessary to restart tekka for the changes to take " "effect." msgstr "" "Wenn Sie Kontrolle über alle Einstellungen haben möchten, können Sie " "den Dialog »Erweiterte Einstellungen« nutzen." #: ../ui/dialogs/preferences.ui.h:31 msgid "Last log lines:" msgstr "Verlaufslänge:" #: ../ui/dialogs/preferences.ui.h:32 msgid "Last log:" msgstr "Verlauf:" #: ../ui/dialogs/preferences.ui.h:33 msgid "Message" msgstr "Nachricht" #: ../ui/dialogs/preferences.ui.h:34 msgid "Messages:" msgstr "Nachrichten:" #: ../ui/dialogs/preferences.ui.h:35 msgid "Notification:" msgstr "Benachrichtigung:" #: ../ui/dialogs/preferences.ui.h:36 msgid "Own nick:" msgstr "Eigener Nickname:" #: ../ui/dialogs/preferences.ui.h:37 msgid "Own text:" msgstr "Eigener Text:" #: ../ui/dialogs/preferences.ui.h:38 msgid "Part message:" msgstr "Verlassen-Nachricht:" #: ../ui/dialogs/preferences.ui.h:39 msgid "Preferences" msgstr "Einstellungen" #: ../ui/dialogs/preferences.ui.h:40 msgid "Quit message:" msgstr "Quit-Nachricht:" #: ../ui/dialogs/preferences.ui.h:41 msgid "Reset" msgstr "Zurücksetzen" #: ../ui/dialogs/preferences.ui.h:42 msgid "Rules color:" msgstr "Zeilenkontrastfarbe:" #: ../ui/dialogs/preferences.ui.h:43 msgid "Shutdown _maki on close" msgstr "_maki mit tekka beenden" #: ../ui/dialogs/preferences.ui.h:44 msgid "Time format:" msgstr "Zeitformat:" #: ../ui/dialogs/preferences.ui.h:45 msgid "Use _RGBA" msgstr "_RGBA aktivieren" #: ../ui/dialogs/preferences.ui.h:46 msgid "Use _default font" msgstr "_Standardschrift benutzen" #: ../ui/dialogs/preferences.ui.h:47 msgid "Use contrast sensitive colors" msgstr "Kontrast-sensitive Farben benutzen" #: ../ui/dialogs/preferences.ui.h:48 ../ui/main_window.ui.h:10 msgid "_General Output" msgstr "_Allgemeine Ausgabe" #: ../ui/dialogs/preferences.ui.h:49 msgid "_Hide on close" msgstr "Beim Beenden _verstecken" #: ../ui/dialogs/preferences.ui.h:50 msgid "_Nick Colors" msgstr "_Nicknamen-Farben" #: ../ui/dialogs/preferences.ui.h:51 msgid "_Show status icon" msgstr "Status-Icon anzeigen" #: ../ui/dialogs/preferences.ui.h:52 ../ui/main_window.ui.h:17 msgid "_tekka" msgstr "_tekka" #: ../ui/dialogs/server.ui.h:1 msgid "Server List" msgstr "Serverliste" #: ../ui/dialogs/serverAdd.ui.h:1 msgid "Add Server" msgstr "Server hinzufügen" #: ../ui/dialogs/serverAdd.ui.h:2 ../ui/dialogs/serverEdit.ui.h:1 msgid "Command List" msgstr "Kommandoliste" #: ../ui/dialogs/serverAdd.ui.h:3 msgid "Add Server" msgstr "Server hinzufügen" #: ../ui/dialogs/serverAdd.ui.h:4 ../ui/dialogs/serverEdit.ui.h:3 msgid "Address:" msgstr "Adresse:" #: ../ui/dialogs/serverAdd.ui.h:5 ../ui/dialogs/serverEdit.ui.h:4 msgid "Auto-connect:" msgstr "Automatisch verbinden:" #: ../ui/dialogs/serverAdd.ui.h:6 ../ui/dialogs/serverEdit.ui.h:6 msgid "Nick name:" msgstr "Nickname:" #: ../ui/dialogs/serverAdd.ui.h:7 ../ui/dialogs/serverEdit.ui.h:8 msgid "NickServ password:" msgstr "NickServ-Passwort:" #: ../ui/dialogs/serverAdd.ui.h:8 ../ui/dialogs/serverEdit.ui.h:9 msgid "Port:" msgstr "Port:" #: ../ui/dialogs/serverAdd.ui.h:9 ../ui/dialogs/serverEdit.ui.h:10 msgid "Real name:" msgstr "Realer Name:" #: ../ui/dialogs/serverAdd.ui.h:10 msgid "Server name:" msgstr "Servername:" #: ../ui/dialogs/serverDelete.ui.h:2 #, no-c-format msgid "" "Delete Server\n" "\n" "Are you sure you want to delete the server '%(server)s'?" msgstr "" "Server löschen\n" "Wollen Sie wirklich den Server '%(server)s' löschen?" #: ../ui/dialogs/serverDelete.ui.h:5 msgid "Delete Server" msgstr "Server löschen" #: ../ui/dialogs/serverEdit.ui.h:2 msgid "Edit Server" msgstr "Server bearbeiten" #: ../ui/dialogs/serverEdit.ui.h:5 msgid "Edit Server" msgstr "Server bearbeiten" #: ../ui/dialogs/serverEdit.ui.h:7 msgid "NickServ Ghost:" msgstr "NickServ-Ghost:" #: ../ui/main_window.ui.h:1 msgid "IRC _Colors" msgstr "IRC-_Farben" #: ../ui/main_window.ui.h:2 msgid "P_lugins" msgstr "P_lugins" #: ../ui/main_window.ui.h:3 msgid "S_ide Pane" msgstr "Se_itenleiste" #: ../ui/main_window.ui.h:4 msgid "Status _Bar" msgstr "Status_leiste" #: ../ui/main_window.ui.h:5 msgid "Status _Icon" msgstr "Status_symbol" #: ../ui/main_window.ui.h:6 msgid "T_ools" msgstr "W_erkzeuge" #: ../ui/main_window.ui.h:7 msgid "_Channel List" msgstr "_Channel-Liste" #: ../ui/main_window.ui.h:8 msgid "_Debug" msgstr "_Debug" #: ../ui/main_window.ui.h:9 msgid "_File Transfers" msgstr "_Dateiübertragungen" #: ../ui/main_window.ui.h:11 msgid "_Help" msgstr "_Hilfe" #: ../ui/main_window.ui.h:12 msgid "_Server List" msgstr "_Server-Liste" #: ../ui/main_window.ui.h:13 msgid "_Shutdown" msgstr "Heru_nterfahren" #: ../ui/main_window.ui.h:14 msgid "_Topic Bar" msgstr "_Themenleiste" #: ../ui/main_window.ui.h:15 msgid "_View" msgstr "_Ansicht" #: ../ui/main_window.ui.h:16 msgid "_maki" msgstr "_maki" #: ../ui/menus/nickListMenu.ui.h:1 msgid "Ban" msgstr "Bannen" #: ../ui/menus/nickListMenu.ui.h:2 msgid "Give Half-Op" msgstr "Half-Op geben" #: ../ui/menus/nickListMenu.ui.h:3 msgid "Give Op" msgstr "Op geben" #: ../ui/menus/nickListMenu.ui.h:4 msgid "Give Voice" msgstr "Voice geben" #: ../ui/menus/nickListMenu.ui.h:5 msgid "Ignore" msgstr "Ignoriere" #: ../ui/menus/nickListMenu.ui.h:6 msgid "Kick" msgstr "Kicken" #: ../ui/menus/nickListMenu.ui.h:7 msgid "Modes" msgstr "Modi" #: ../ui/menus/nickListMenu.ui.h:8 msgid "Send File" msgstr "Datei senden" #: ../ui/menus/nickListMenu.ui.h:9 msgid "Take Half-Op" msgstr "Half-Op nehmen" #: ../ui/menus/nickListMenu.ui.h:10 msgid "Take Op" msgstr "Op nehmen" #: ../ui/menus/nickListMenu.ui.h:11 msgid "Take Voice" msgstr "Voice nehmen" #: ../ui/menus/nickListMenu.ui.h:12 msgid "Whois" msgstr "Whois" #: ../ui/menus/serverTreeMenu.ui.h:1 msgid "Connect automatically" msgstr "Automatisch verbinden" #: ../ui/menus/serverTreeMenu.ui.h:2 msgid "H_ide Messages" msgstr "Nachr_ichten verstecken" #: ../ui/menus/serverTreeMenu.ui.h:3 msgid "Join automatically" msgstr "Automatisch betreten" #: ../ui/menus/serverTreeMenu.ui.h:4 msgid "Set _Key" msgstr "_Schlüssel setzen" #: ../ui/menus/serverTreeMenu.ui.h:5 msgid "Set _Topic" msgstr "_Thema setzen" #: ../ui/menus/serverTreeMenu.ui.h:6 msgid "_Close" msgstr "S_chließen" #: ../ui/menus/serverTreeMenu.ui.h:7 msgid "_Connect" msgstr "_Verbinden" #: ../ui/menus/serverTreeMenu.ui.h:8 msgid "_Disconnect" msgstr "Verbindung _trennen" #: ../ui/menus/serverTreeMenu.ui.h:9 msgid "_History" msgstr "Ve_rlauf" #: ../ui/menus/serverTreeMenu.ui.h:11 msgid "_Join a Channel" msgstr "_Channel betreten" #: ../ui/menus/serverTreeMenu.ui.h:12 msgid "_Part" msgstr "V_erlassen" #, python-format #~ msgid "%d User" #~ msgid_plural "%d Users" #~ msgstr[0] "%d Benutzer" #~ msgstr[1] "%d Benutzer" #, python-format #~ msgid "%d Operator" #~ msgid_plural "%d Operators" #~ msgstr[0] "%d Operator" #~ msgstr[1] "%d Operatoren" #~ msgid "" #~ "Warning:\n" #~ "Changes will be applied after closing this dialog." #~ msgstr "" #~ "Warnung:\n" #~ "Die Änderungen werden nach Schließen dieses Dialogs angewendet." #~ msgid "Plugin is already loaded." #~ msgstr "Plugin wurde schon geladen." #, python-format #~ msgid "Plugin %(plugin)s is already loaded." #~ msgstr "Plugin %(plugin)s wurde schon geladen." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded." #~ msgstr "Plugin %(plugin)s konnte nicht geladen werden." #~ msgid "Plugin could not be loaded." #~ msgstr "Plugin konnte nicht geladen werden." #, python-format #~ msgid "Plugin %(plugin)s could not be unloaded, because it is not loaded." #~ msgstr "" #~ "Plugin %(plugin)s konnte nicht entladen werden, weil es nicht geladen ist." #, python-format #~ msgid "Plugin %(plugin)s could not be loaded automatically." #~ msgstr "Plugin %(plugin)s konnte nicht automatisch geladen werden." #, python-format #~ msgid "" #~ "Plugin %(plugin)s could not be loaded.\n" #~ "The following error occurred: %(error)s" #~ msgstr "" #~ "Plugin %(plugin)s konnte nicht geladen werden.\n" #~ "Der folgende Fehler trat auf: %(error)s" #~ msgid "Plugin could not be unloaded." #~ msgstr "Plugin konnte nicht entladen werden." #~ msgid "" #~ "Error\n" #~ "\n" #~ "An error occured — we apologize for that. Feel free to submit a bug report " #~ "at https://bugs.launchpad.net/sushi." #~ msgstr "" #~ "Fehler\n" #~ "\n" #~ "Ein Fehler ist aufgetreten - wir entschuldigen uns dafür. Zögern Sie nicht, " #~ "einen Fehlerbericht an https://bugs.launchpad.net/sushi zu senden." #~ msgid "#" #~ msgstr "Nr." #~ msgid "" #~ "tekka failed to create the server tree menu.\n" #~ "It's possible that there are files missing. Check if you have appropriate " #~ "permissions to access all files needed by tekka and restart tekka." #~ msgstr "" #~ "tekka ist fehlgeschlagen das Serverbaum-Menü zu erstellen.\n" #~ "Es ist möglich dass Dateien fehlen. Überprüfen Sie ob Sie die entsprechenden " #~ "Rechte für alle Dateien die tekka benötigt besitzen, und starten Sie tekka " #~ "neu." #, no-c-format #~ msgid "" #~ "IRC to real colors\n" #~ "\n" #~ "Example use:\n" #~ "Type %C02,01 for blue foreground and black background." #~ msgstr "" #~ "IRC in Echtfarben\n" #~ "\n" #~ "Anwendungsbeispiel:\n" #~ "Geben Sie %C02,01 für einen blauen Vorder- und einen schwarzen Hintergrund " #~ "ein." sushi-1.4.0+dfsg/tekka/graphics/0000775000175000017500000000000011700417156016323 5ustar dfilonidfilonisushi-1.4.0+dfsg/tekka/graphics/tekka-mono-dark.svg0000664000175000017500000003640611700417156022041 0ustar dfilonidfiloni image/svg+xml sushi-1.4.0+dfsg/tekka/graphics/tekka-mono-light.svg0000664000175000017500000003531411700417156022224 0ustar dfilonidfiloni image/svg+xml sushi-1.4.0+dfsg/tekka/graphics/tekka-generic.svg0000664000175000017500000004375711700417156021575 0ustar dfilonidfiloni image/svg+xml sushi-1.4.0+dfsg/tekka/signal_handler.py0000664000175000017500000011262711700417156020060 0ustar dfilonidfiloni# coding:UTF-8 """ Copyright (c) 2009-2010 Marian Tietz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import gtk import gobject import logging import string import time as mtime from dbus import UInt64 from gettext import gettext as _ from tekka import com from tekka import config from tekka import signals from tekka import gui from tekka.lib import contrast from tekka.com import sushi, parse_from from tekka.signals import connect_signal from tekka.lib import key_dialog from tekka.lib import dcc_dialog from tekka.lib import inline_dialog from tekka.helper import code from tekka.helper import color from tekka.helper import markup from tekka.typecheck import types init = False def setup(): sushi.g_connect("maki-connected", maki_connected_cb) sushi.g_connect("maki-disconnected", maki_disconnected_cb) def maki_connected_cb(sushi): global init if init == False: # Message-Signals connect_signal("message", userMessage_cb) connect_signal("notice", userNotice_cb) connect_signal("action", userAction_cb) connect_signal("away_message", userAwayMessage_cb) connect_signal("ctcp", userCTCP_cb) connect_signal("error", userError_cb) # action signals connect_signal("part", userPart_cb) connect_signal("join", userJoin_cb) connect_signal("names", userNames_cb) connect_signal("quit", userQuit_cb) connect_signal("kick", userKick_cb) connect_signal("nick", userNick_cb) connect_signal("user_away", userAway_cb) connect_signal("mode", userMode_cb) connect_signal("oper", userOper_cb) # Server-Signals connect_signal("connect", serverConnect_cb) connect_signal("connected", serverConnected_cb) connect_signal("motd", serverMOTD_cb) connect_signal("dcc_send", dcc_send_cb) # Channel-Signals connect_signal("topic", channelTopic_cb) connect_signal("banlist", channelBanlist_cb) # Maki signals connect_signal("shutdown", makiShutdown_cb) init = True _add_servers() def maki_disconnected_cb(sushi): pass @types (server = basestring) def _setup_server(server): tab = gui.tabs.create_server(server) gui.tabs.add_tab(None, tab, update_shortcuts = config.get_bool("tekka","server_shortcuts")) return tab def _add_servers(): """ Adds all servers to tekka which are reported by maki. """ # in case we're reconnecting, clear all stuff gui.widgets.get_object("tab_store").clear() for server in sushi.servers(): tab = _setup_server(server) tab.connected = True _add_channels(tab) try: toSwitch = gui.tabs.get_all_tabs()[1] except IndexError: return else: gui.tabs.switch_to_path(toSwitch.path) def _add_channels(server_tab): """ Adds all channels to tekka wich are reported by maki. """ channels = sushi.channels(server_tab.name) for channel in channels: add = False nicks, prefixes = sushi.channel_nicks(server_tab.name, channel) tab = gui.tabs.search_tab(server_tab.name, channel) if not tab: tab = gui.tabs.create_channel(server_tab, channel) add = True tab.nickList.clear() tab.nickList.add_nicks(nicks, prefixes) for nick in nicks: # FIXME inefficient → nicks, prefixes, aways = …? tab.nickList.set_away(nick, sushi.user_away(server_tab.name, nick)) tab.topic = sushi.channel_topic(server_tab.name, channel) tab.topicsetter = "" if tab.is_active(): gui.set_topic(markup.markup_escape(tab.topic)) gui.mgmt.set_user_count( len(tab.nickList), tab.nickList.get_operator_count()) # TODO: handle topic setter tab.joined = True tab.connected = True if add: gui.tabs.add_tab(server_tab, tab, update_shortcuts = False) tab.print_last_log() topic = sushi.channel_topic(server_tab.name, channel) _report_topic(mtime.time(), server_tab.name, channel, topic) gui.shortcuts.assign_numeric_tab_shortcuts(gui.tabs.get_all_tabs()) def isHighlighted (server_tab, text): def has_highlight(text, needle): punctuation = string.punctuation + " \n\t" needle = needle.lower() ln = len(needle) for line in text.split("\n"): line = line.lower() i = line.find(needle) if i >= 0: if (line[i-1:i] in punctuation and line[ln+i:ln+i+1] in punctuation): return True return False highlightwords = config.get_list("chatting", "highlight_words", []) highlightwords.append(server_tab.nick) for word in highlightwords: if has_highlight(text, word): return True return False def action_nick_color(nick): """ return the nick color if color_action_nicks is activated, otherwise return the default text color """ if config.get_bool("colors", "color_action_nicks"): return color.get_nick_color(nick) return color.get_color_by_key("text_action") @types (server = basestring, name = basestring) def _createTab (server, name): """ check if tab exists, create it if not, return the tab """ server_tab = gui.tabs.search_tab(server) if not server_tab: raise Exception("No server tab in _createTab(%s, %s)" % (server,name)) tab = gui.tabs.search_tab(server, name) if not tab: if name[0] in server_tab.support_chantypes: tab = gui.tabs.create_channel(server_tab, name) else: tab = gui.tabs.create_query(server_tab, name) tab.connected = True gui.tabs.add_tab(server_tab, tab) tab.print_last_log() if tab.name != name: # the name of the tab differs from the # real nick, correct this. tab.name = name return tab def _getPrefix(server, channel, nick): tab = gui.tabs.search_tab(server, channel) if tab and tab.is_channel(): return tab.nickList.get_prefix(nick) else: return "" @types (tab = gui.tabs.TekkaTab, what = basestring, own = bool) def _hide_output(tab, what, own = False): """ Returns bool. Check if the message type determined by "what" shall be hidden or not. tab should be a TekkaServer, -Channel or -Query """ if type(tab) == gui.tabs.TekkaChannel: cat = "channel_%s_%s" % ( tab.server.name.lower(), tab.name.lower()) elif type(tab) == gui.tabs.TekkaQuery: cat = "query_%s_%s" % ( tab.server.name.lower(), tab.name.lower()) else: return False hide = what in config.get_list(cat, "hide", []) hideOwn = what in config.get_list(cat, "hide_own", []) return ((hide and not own) or (own and hideOwn) or (hide and own and not hideOwn)) @types (servertab = gui.tabs.TekkaServer, tab = gui.tabs.TekkaTab, what = basestring, own = bool) def _show_output_exclusive(servertab, tab, what, own = False): """ Returns bool. Determine if the message identified by -what- shall be shown in tab -tab- or not. -servertab- is not used at the moment. """ return not _hide_output(tab, what, own = own) """ Server callbacks """ def serverConnect_cb(time, server): """ maki is connecting to a server. """ gui.mgmt.set_useable(True) tab = gui.tabs.search_tab(server) if not tab: tab = _setup_server(server) if tab.connected: tab.connected = False channels = gui.tabs.get_all_tabs(servers = [server])[1:] if channels: for channelTab in channels: if channelTab.is_channel(): channelTab.joined=False channelTab.connected=False tab.write(time, "Connecting...", msgtype=gui.tabs.ACTION) gui.status.set_visible("connecting", "Connecting to %s" % server) def serverConnected_cb(time, server): """ maki connected successfuly to a server. """ tab = gui.tabs.search_tab(server) if not tab: tab = _setup_server(server) tab.connected = True # iterate over tabs, set the connected flag to queries for query in [tab for tab in gui.tabs.get_all_tabs( servers = [server])[1:] if tab.is_query()]: query.connected = True tab.write(time, "Connected.", msgtype=gui.tabs.ACTION) def serverMOTD_cb(time, server, message, first_time = {}): """ Server is sending a MOTD. Channes are joined 3s after the end of the MOTD so at the end of the MOTD, make sure that the prefixes and chantypes are read correctly. """ if not first_time.has_key(server): tab = gui.tabs.search_tab(server) if not tab: tab = _setup_server(server) else: tab.update() gui.status.unset("connecting") tab.connected = True first_time[server] = tab if not message: # get the prefixes for the server to make # sure they are correct tab = first_time[server] tab.support_prefix = sushi.support_prefix(server) tab.support_chantypes = sushi.support_chantypes(server) del first_time[server] else: first_time[server].write(time, markup.escape(message), no_general_output = True) """ Callbacks for channel interaction """ def _report_topic(time, server, channel, topic): message = _(u"• Topic for %(channel)s: %(topic)s") % { "channel": channel, "topic": markup.escape(topic) } tab = gui.tabs.search_tab(server, channel) if not tab: raise Exception, "%s:%s not found." % (server, channel) tab.write(time, message, gui.tabs.ACTION, no_general_output=True) def channelTopic_cb(time, server, from_str, channel, topic): """ The topic was set on server "server" in channel "channel" by user "nick" to "topic". Apply this! """ nick = parse_from(from_str)[0] serverTab, channelTab = gui.tabs.search_tabs(server, channel) if not channelTab: raise Exception("Channel %s does not exist but " "emits topic signal." % channel) channelTab.topic = topic channelTab.topicsetter = nick if channelTab == gui.tabs.get_current_tab(): gui.mgmt.set_topic(markup.markup_escape(topic)) if not nick: # just reporting the topic. _report_topic(time, server, channel, topic) else: if nick == serverTab.nick: message = _(u"• You changed the topic to %(topic)s.") else: message = _(u"• %(nick)s changed the topic to %(topic)s.") channelTab.write(time, message % { "nick": nick, "topic": markup.escape(topic) }, gui.tabs.ACTION) def channelBanlist_cb(time, server, channel, mask, who, when): """ ban list signal. """ self = code.init_function_attrs(channelBanlist_cb, tab = gui.tabs.search_tab(server, channel)) if not mask and not who and when == -1: self.tab.write(time, "End of banlist.", gui.tabs.ACTION) code.reset_function_attrs(channelBanlist_cb) else: timestring = mtime.strftime( "%Y-%m-%d %H:%M:%S", mtime.localtime(when)) self.tab.write( time, "%s by %s on %s" % ( markup.escape(mask), markup.escape(who), markup.escape(timestring)), gui.tabs.ACTION) """ Callbacks of maki signals """ def makiShutdown_cb(time): gui.mgmt.myPrint("Maki is shut down!") gui.mgmt.set_useable(False) """ Callbacks for users """ def userAwayMessage_cb(timestamp, server, nick, message): """ The user is away and the server gives us the message he left for us to see why he is away and probably when he's back again. """ tab = gui.tabs.get_current_tab() # XXX: you can still write /msg and get an away message # XXX:: in the query window. This would be a more complex fix. try: tab.printed_away_message except AttributeError: print_it = True else: print_it = not tab.printed_away_message if print_it: tab.write( timestamp, _(u"• %(nick)s is away (%(message)s).") % { "nick": nick, "message": markup.escape(message)}, gui.tabs.ACTION) if tab and tab.name == nick: tab.printed_away_message = True def userMessage_cb(timestamp, server, from_str, channel, message): """ PRIVMSGs are coming in here. """ nick = parse_from(from_str)[0] (server_tab, channel_tab) = gui.tabs.search_tabs(server, channel) if server_tab == None: return # happens if the target server does not exist if nick.lower() == server_tab.nick.lower(): ownMessage_cb(timestamp, server, channel, message) return elif channel.lower() == server_tab.nick.lower(): userQuery_cb(timestamp, server, from_str, message) return message = markup.escape(message) if isHighlighted(server_tab, message): # set mode to highlight and disable setting # of text color for the main message (would # override channelPrint() highlight color) type = gui.tabs.HIGHMESSAGE messageString = message gui.mgmt.set_urgent(True) else: # no highlight, normal message type and # text color is allowed. type = gui.tabs.MESSAGE messageString = "%s" % ( color.get_text_color(nick), message) channel_tab.write(timestamp, "<%s%s> %s" % ( _getPrefix(server, channel, nick), color.get_nick_color(nick), markup.escape(nick), messageString, ), type, group_string=nick) def ownMessage_cb(timestamp, server, channel, message): """ The maki user wrote something on a channel or a query """ tab = _createTab(server, channel) nick = gui.tabs.search_tab(server).nick tab.write(timestamp, "<%s%s>" " %s" % ( _getPrefix(server, channel, nick), color.get_color_by_key("own_nick"), nick, color.get_color_by_key("own_text"), markup.escape(message)), group_string=nick) def userQuery_cb(timestamp, server, from_str, message): """ A user writes to us in a query. """ nick = parse_from(from_str)[0] tab = _createTab(server, nick) if isHighlighted(tab.server, message): mtype = gui.tabs.HIGHMESSAGE else: mtype = gui.tabs.MESSAGE tab.write(timestamp, "<%s> %s" % ( color.get_nick_color(nick), markup.escape(nick), markup.escape(message) ), mtype, group_string=nick) # queries are important gui.mgmt.set_urgent(True) def userMode_cb(time, server, from_str, target, mode, param): """ Mode change on target from nick detected. nick and param are optional arguments and can be empty. As nemo: /mode #xesio +o nemo will result in: userMode(