Compare commits

...

16 Commits

53 changed files with 25040 additions and 3699 deletions

View File

@@ -405,19 +405,21 @@ documentation.append(_(u"""We would also like to thank the translators of TWBlue
documentation.append(_(u"""
"""))
documentation.append(_(u"""* English: [Bryner Villalobos](https://twitter.com/Bry_StarkCR) and [Bill Dengler](https://twitter.com/codeofdusk)."""))
documentation.append(_(u"""* Arabic: Mohammed Al Shara."""))
documentation.append(_(u"""* Arabic: [Mohammed Al Shara](https://twitter.com/mohammed0204)."""))
documentation.append(_(u"""* Catalan: [Joan Rabat](https://twitter.com/joanrabat) and Juan Carlos Rivilla."""))
documentation.append(_(u"""* Spanish: [Manuel Cortéz](https://twitter.com/manuelcortez00)."""))
documentation.append(_(u"""* Basque: [Sukil Etxenike](https://twitter.com/sukil2011)."""))
documentation.append(_(u"""* Finnish: Jani Kinnunen."""))
documentation.append(_(u"""* French: Rémi Ruiz."""))
documentation.append(_(u"""* Finnish: [Jani Kinnunen](https://twitter.com/jani_kinnunen)."""))
documentation.append(_(u"""* French: [Rémi Ruiz](https://twitter.com/blindhelp38)."""))
documentation.append(_(u"""* Galician: [Alba Kinteiro](https://twitter.com/albasmileforeve)."""))
documentation.append(_(u"""* German: Steffen Schultz."""))
documentation.append(_(u"""* German: [Steffen Schultz](https://twitter.com/schulle4u)."""))
documentation.append(_(u"""* Croatian: [Zvonimir Stanečić](https://twitter.com/zvonimirek222)."""))
documentation.append(_(u"""* Hungarian: Robert Osztolykan."""))
documentation.append(_(u"""* Italian: [Christian Leo Mameli](https://twitter.com/llajta2012)."""))
documentation.append(_(u"""* Polish: Pawel Masarczyk."""))
documentation.append(_(u"""* Portuguese: Odenilton Júnior Santos."""))
documentation.append(_(u"""* Russian: Alexander Jaszyn."""))
documentation.append(_(u"""* Turkish: Burak."""))
documentation.append(_(u"""* Russian: [Александр Яшин](https://twitter.com/radovest)."""))
documentation.append(_(u"""* Turkish: [Burak Yüksek](https://twitter.com/burakyuksek)."""))
documentation.append(_(u"""
"""))
documentation.append(_(u"""Many thanks also to the people who worked on the documentation. Initially, [Manuel Cortez](https://twitter.com/manuelcortez00) did the documentation in Spanish, and translated to English by [Bryner Villalobos](https://twitter.com/Bry_StarkCR), [Robert Spangler](https://twitter.com/glasscity1837), [Sussan Rey](https://twitter.com/sussanrey17), [Anibal Hernandez](https://twitter.com/anibalmetal), and [Holly Scott-Gardner](https://twitter.com/holly1994). It was updated by [Sukil Etxenike](https://twitter.com/sukil2011), with some valuable corrections by [Brian Hartgen](https://twitter.com/brianhartgen) and [Bill Dengler](https://twitter.com/codeofdusk)."""))

View File

@@ -8,7 +8,7 @@ language = string(default="system")
hide_gui = boolean(default=False)
voice_enabled = boolean(default=False)
ask_at_exit = boolean(default=True)
handle_longtweets = boolean(default=False)
handle_longtweets = boolean(default=True)
use_invisible_keyboard_shorcuts = boolean(default=True)
play_ready_sound = boolean(default=True)
speak_ready_msg = boolean(default=True)

View File

@@ -5,7 +5,7 @@ if snapshot == False:
version = "0.80"
update_url = 'http://twblue.es/updates/twblue_ngen.json'
else:
version = "10.6"
version = "10.8"
update_url = 'http://twblue.es/updates/snapshots_ngen.json'
author = u"Manuel Cortéz, Bill Dengler"
authorEmail = "manuel@manuelcortez.net"

View File

@@ -231,7 +231,8 @@ class baseBufferController(bufferController):
return self.get_message()
def get_message(self):
return " ".join(self.compose_function(self.get_right_tweet(), self.session.db, self.session.settings["general"]["relative_times"]))
tweet = self.get_right_tweet()
return " ".join(self.compose_function(tweet, self.session.db, self.session.settings["general"]["relative_times"]))
def get_full_tweet(self):
tweet = self.get_right_tweet()
@@ -604,6 +605,26 @@ class baseBufferController(bufferController):
user.profileController(session=self.session, user=dlg.get_user())
if hasattr(dlg, "destroy"): dlg.destroy()
def get_quoted_tweet(self, tweet):
# try:
quoted_tweet = self.session.twitter.twitter.show_status(id=tweet["id"])
urls = utils.find_urls_in_text(quoted_tweet["text"])
for url in range(0, len(urls)):
try: quoted_tweet["text"] = quoted_tweet["text"].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
# except TwythonError as e:
# utils.twitter_error(e)
# return
l = tweets.is_long(quoted_tweet)
id = tweets.get_id(l)
# try:
original_tweet = self.session.twitter.twitter.show_status(id=id)
urls = utils.find_urls_in_text(original_tweet["text"])
for url in range(0, len(urls)):
try: original_tweet["text"] = original_tweet["text"].replace(urls[url], original_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
return compose.compose_quoted_tweet(quoted_tweet, original_tweet, self.session.db, self.session.settings["general"]["relative_times"])
class listBufferController(baseBufferController):
def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, list_id=None, *args, **kwargs):
super(listBufferController, self).__init__(parent, function, name, sessionObject, account, sound=None, bufferType=None, *args, **kwargs)
@@ -887,6 +908,7 @@ class trendsBufferController(bufferController):
self.buffer.name = name
self.compose_function = self.compose_function_
self.get_formatted_message = self.get_message
self.reply = self.search_topic
def start_stream(self):
try:
@@ -913,10 +935,12 @@ class trendsBufferController(bufferController):
def bind_events(self):
log.debug("Binding events...")
self.buffer.list.list.Bind(wx.EVT_CHAR_HOOK, self.get_event)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.post_tweet, self.buffer.tweet)
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.post_tweet, self.buffer.tweet)
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.tweet_about_this_trend, self.buffer.tweetTrendBtn)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.retweet, self.buffer.retweet)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.direct_message, self.buffer.dm)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.reply, self.buffer.reply)
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.search_topic, self.buffer.search_topic)
widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_ITEM_RIGHT_CLICK, self.show_menu)
widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_KEY_DOWN, self.show_menu_by_key)
@@ -933,11 +957,13 @@ class trendsBufferController(bufferController):
elif dlg == widgetUtils.NO:
return False
def interact(self, *args, **kwargs):
self.searchfunction(value=self.get_message())
def search_topic(self, *args, **kwargs):
topic = self.trends[self.buffer.list.get_selected()]["name"]
pub.sendMessage("search", term=topic)
def show_menu(self, ev, pos=0, *args, **kwargs):
menu = menus.trendsPanelMenu()
widgetUtils.connect_event(menu, widgetUtils.MENU, self.search_topic, menuitem=menu.search_topic)
widgetUtils.connect_event(menu, widgetUtils.MENU, self.tweet_about_this_trend, menuitem=menu.tweetThisTrend)
widgetUtils.connect_event(menu, widgetUtils.MENU, self.view, menuitem=menu.view)
widgetUtils.connect_event(menu, widgetUtils.MENU, self.copy, menuitem=menu.copy)

View File

@@ -15,12 +15,22 @@ class listsController(object):
self.dialog.populate_list(self.get_all_lists())
widgetUtils.connect_event(self.dialog.createBtn, widgetUtils.BUTTON_PRESSED, self.create_list)
widgetUtils.connect_event(self.dialog.editBtn, widgetUtils.BUTTON_PRESSED, self.edit_list)
widgetUtils.connect_event(self.dialog.deleteBtn, widgetUtils.BUTTON_PRESSED, self.remove_list)
widgetUtils.connect_event(self.dialog.view, widgetUtils.BUTTON_PRESSED, self.open_list_as_buffer)
else:
self.dialog = lists.userListViewer(user)
self.dialog.populate_list(self.get_user_lists(user))
widgetUtils.connect_event(self.dialog.createBtn, widgetUtils.BUTTON_PRESSED, self.subscribe)
widgetUtils.connect_event(self.dialog.deleteBtn, widgetUtils.BUTTON_PRESSED, self.unsubscribe)
self.dialog.get_response()
def get_all_lists(self):
return [compose.compose_list(item) for item in self.session.db["lists"]]
def get_user_lists(self, user):
self.lists = self.session.twitter.twitter.show_lists(reverse=True, screen_name=user)
return [compose.compose_list(item) for item in self.lists]
def create_list(self, *args, **kwargs):
dialog = lists.createListDialog()
if dialog.get_response() == widgetUtils.OK:
@@ -73,4 +83,23 @@ class listsController(object):
def open_list_as_buffer(self, *args, **kwargs):
if self.dialog.lista.get_count() == 0: return
list = self.session.db["lists"][self.dialog.get_item()]
pub.sendMessage("create-new-buffer", buffer="list", account=self.session.db["user_name"], create=list["name"])
pub.sendMessage("create-new-buffer", buffer="list", account=self.session.db["user_name"], create=list["name"])
def subscribe(self, *args, **kwargs):
if self.dialog.lista.get_count() == 0: return
list_id = self.lists[self.dialog.get_item()]["id"]
try:
list = self.session.twitter.twitter.subscribe_to_list(list_id=list_id)
item = utils.find_item(list["id"], self.session.db["lists"])
self.session.db.settings["lists"].append(list)
except TwythonError as e:
output.speak("error %s: %s" % (e.status_code, e.msg))
def unsubscribe(self, *args, **kwargs):
if self.dialog.lista.get_count() == 0: return
list_id = self.lists[self.dialog.get_item()]["id"]
try:
list = self.session.twitter.twitter.unsubscribe_from_list(list_id=list_id)
self.session.db.settings["lists"].remove(list)
except TwythonError as e:
output.speak("error %s: %s" % (e.status_code, e.msg))

View File

@@ -129,6 +129,7 @@ class Controller(object):
pub.subscribe(self.create_new_buffer, "create-new-buffer")
pub.subscribe(self.restart_streams, "restart-streams")
pub.subscribe(self.execute_action, "execute-action")
pub.subscribe(self.search_topic, "search")
if system == "Windows":
pub.subscribe(self.invisible_shorcuts_changed, "invisible-shorcuts-changed")
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.show_hide, menuitem=self.view.show_hide)
@@ -156,6 +157,7 @@ class Controller(object):
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.delete, self.view.delete)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.follow, menuitem=self.view.follow)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.send_dm, self.view.dm)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.view_user_lists, menuitem=self.view.viewLists)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.get_more_items, menuitem=self.view.load_previous_items)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.clear_buffer, menuitem=self.view.clear)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.remove_buffer, self.view.deleteTl)
@@ -394,7 +396,11 @@ class Controller(object):
self.buffers.remove(buffer)
del buffer
def search(self, value="", *args, **kwargs):
def search_topic(self, term):
self.search(value=term)
def search(self, event=None, value="", *args, **kwargs):
""" Searches words or users in twitter. This creates a new buffer containing the search results."""
log.debug("Creating a new search...")
dlg = dialogs.search.searchDialog(value)
@@ -468,8 +474,20 @@ class Controller(object):
buffer = self.get_best_buffer()
SoundsTutorial.soundsTutorial(buffer.session)
def view_user_lists(self, users):
pass
def view_user_lists(self, *args, **kwargs):
buff = self.get_best_buffer()
if not hasattr(buff, "get_right_tweet"): return
tweet = buff.get_right_tweet()
if buff.type != "people":
users = utils.get_all_users(tweet, buff.session.db)
else:
users = [tweet["screen_name"]]
dlg = dialogs.utils.selectUserDialog(_(u"Select the user"), users)
if dlg.get_response() == widgetUtils.OK:
user = dlg.get_user()
else:
return
l = listsController.listsController(buff.session, user=user)
def add_to_list(self, *args, **kwargs):
buff = self.get_best_buffer()

View File

@@ -74,10 +74,10 @@ class audioUploader(object):
def on_pause(self, *args, **kwargs):
if self.dialog.get("pause") == _(u"Pause"):
self.recording.pause()
self.dialog.set("pause", _(u"Resume"))
self.dialog.set("pause", _(u"&Resume"))
elif self.dialog.get("pause") == _(u"Resume"):
self.recording.play()
self.dialog.set("pause", _(U"Pause"))
self.dialog.set("pause", _(U"&Pause"))
def on_record(self, *args, **kwargs):
if self.recording != None:
@@ -92,7 +92,7 @@ class audioUploader(object):
self.file = tempfile.mktemp(suffix='.wav')
self.recording = sound.recording(self.file)
self.recording.play()
self.dialog.set("record", _(u"Stop"))
self.dialog.set("record", _(u"&Stop"))
output.speak(_(u"Recording"))
def stop_recording(self):
@@ -100,11 +100,11 @@ class audioUploader(object):
self.recording.free()
output.speak(_(u"Stopped"))
self.recorded = True
self.dialog.set("record", _(u"Record"))
self.dialog.set("record", _(u"&Record"))
self.file_attached()
def file_attached(self):
self.dialog.set("pause", _(u"Pause"))
self.dialog.set("pause", _(u"&Pause"))
self.dialog.disable_control("record")
self.dialog.enable_control("play")
self.dialog.enable_control("discard")
@@ -137,11 +137,11 @@ class audioUploader(object):
# try:
self.playing = sound_lib.stream.FileStream(file=unicode(self.file), flags=sound_lib.stream.BASS_UNICODE)
self.playing.play()
self.dialog.set("play", _(u"Stop"))
self.dialog.set("play", _(u"&Stop"))
try:
while self.playing.is_playing:
pass
self.dialog.set("play", _(u"Play"))
self.dialog.set("play", _(u"&Play"))
self.playing.free()
self.playing = None
except:
@@ -151,7 +151,7 @@ class audioUploader(object):
output.speak(_(u"Stopped"))
self.playing.stop()
self.playing.free()
self.dialog.set("play", _(u"Play"))
self.dialog.set("play", _(u"&Play"))
self.playing = None
def postprocess(self):

View File

@@ -31,14 +31,14 @@ class audioDialog(widgetUtils.BaseDialog):
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
btnSizer2 = wx.BoxSizer(wx.HORIZONTAL)
self.play = wx.Button(panel, -1, _(u"Play"))
self.play = wx.Button(panel, -1, _(u"&Play"))
self.play.Disable()
self.pause = wx.Button(panel, -1, _(u"Pause"))
self.pause = wx.Button(panel, -1, _(u"&Pause"))
self.pause.Disable()
self.record = wx.Button(panel, -1, _(u"Record"))
self.record = wx.Button(panel, -1, _(u"&Record"))
self.record.SetFocus()
self.attach_exists = wx.Button(panel, -1, _(u"Add an existing file"))
self.discard = wx.Button(panel, -1, _(u"Discard"))
self.attach_exists = wx.Button(panel, -1, _(u"&Add an existing file"))
self.discard = wx.Button(panel, -1, _(u"&Discard"))
self.discard.Disable()
label = wx.StaticText(panel, -1, _(u"Upload to"))
self.services = wx.ComboBox(panel, -1, choices=services, value=services[0], style=wx.CB_READONLY)
@@ -47,7 +47,7 @@ class audioDialog(widgetUtils.BaseDialog):
servicesBox.Add(self.services, 0, wx.ALL, 5)
self.attach = wx.Button(panel, wx.ID_OK, _(u"Attach"))
self.attach.Disable()
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"Cancel"))
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"&Cancel"))
btnSizer.Add(self.play, 0, wx.ALL, 5)
btnSizer.Add(self.pause, 0, wx.ALL, 5)
btnSizer.Add(self.record, 0, wx.ALL, 5)

View File

@@ -11,9 +11,17 @@ def fix():
locales.BasqueLocale = BasqueLocale
locales.TurkishLocale.names[-1] = "tr_tr"
locales.ArabicLocale.names[-1] = "ar_eg"
# insert a modified function so if there is no language available in arrow, returns English locale.
locales.get_locale = get_locale
# We need to reassign the locales list for updating the list with our new contents.
locales._locales = locales._map_locales()
def get_locale(name):
locale_cls = locales._locales.get(name.lower())
if locale_cls is None:
return locales.EnglishLocale()
return locale_cls()
class CatalaLocale(Locale):
names = ['ca', 'ca_ca']
past = 'Fa {0}'

View File

@@ -1,6 +1,5 @@
import win32com.client
def fix():
if win32com.client.gencache.is_readonly == True:
win32com.client.gencache.is_readonly = False

View File

@@ -69,6 +69,7 @@ def getLanguageDescription(language):
"ar":pgettext("languageName","Arabic"),
"ne":pgettext("languageName","Nepali"),
"sr":pgettext("languageName","Serbian (Latin)"),
"ja":pgettext("languageName","Japanese"),
}.get(language,None)
return desc
@@ -195,10 +196,13 @@ def langToWindowsLocale(lang):
"gl": "glc",
"eu": "euq",
"hu": "hun",
"hr": "hrv",
"it": "ita",
"ja": "jpn",
"pl": "plk",
"pt": "ptb",
"ru": "rus",
"tr": "trk"
"tr": "trk",
"sr": "eng",
}
return languages[lang]

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue 0.51\n"
"POT-Creation-Date: 2015-08-04 13:37+Hora de verano central (Mxico)\n"
"PO-Revision-Date: 2015-08-04 23:07+0200\n"
"POT-Creation-Date: 2015-09-04 08:51+Hora de verano central (Mxico)\n"
"PO-Revision-Date: 2015-09-04 16:45+0200\n"
"Last-Translator: Steffen Schultz <schulle3o@yahoo.de>\n"
"Language-Team: Steffen Schultz <schulle3o@yahoo.de>\n"
"Language: de\n"
@@ -19,174 +19,176 @@ msgstr ""
msgid "This action is not supported for this buffer"
msgstr "Diese Aktion ist in dieser Ansicht nicht verfügbar."
#: ../src\controller\buffersController.py:128 ../src\wxUI\buffers\base.py:24
#: ../src\controller\buffersController.py:128
#: ../src\controller\buffersController.py:957 ../src\wxUI\buffers\base.py:24
#: ../src\wxUI\buffers\events.py:14 ../src\wxUI\buffers\trends.py:17
#: ../src\wxUI\dialogs\message.py:250 ../src\wxUI\sysTrayIcon.py:33
#: ../src\wxUI\dialogs\message.py:251 ../src\wxUI\sysTrayIcon.py:33
msgid "Tweet"
msgstr "Tweet"
#: ../src\controller\buffersController.py:129
#: ../src\controller\buffersController.py:958
msgid "Write the tweet here"
msgstr "Gib deinen Tweet hier ein"
#: ../src\controller\buffersController.py:297
#: ../src\controller\buffersController.py:667
#: ../src\controller\buffersController.py:312
#: ../src\controller\buffersController.py:753
msgid "%s items retrieved"
msgstr "%s Einträge abgerufen"
#: ../src\controller\buffersController.py:317
#: ../src\controller\buffersController.py:332
msgid "This buffer is not a timeline; it can't be deleted."
msgstr "Diese Ansicht ist keine Zeitleiste und kann nicht gelöscht werden."
#: ../src\controller\buffersController.py:378
#: ../src\controller\buffersController.py:448
msgid "Reply to %s"
msgstr "Antwort an %s"
#: ../src\controller\buffersController.py:378
#: ../src\controller\buffersController.py:448
#: ../src\keystrokeEditor\constants.py:11 ../src\wxUI\buffers\base.py:26
msgid "Reply"
msgstr "Antwort"
#: ../src\controller\buffersController.py:405
#: ../src\controller\buffersController.py:475
msgid "Direct message to %s"
msgstr "Direktnachricht an %s"
#: ../src\controller\buffersController.py:405
#: ../src\controller\mainController.py:1105
#: ../src\controller\buffersController.py:475
#: ../src\controller\mainController.py:1125
msgid "New direct message"
msgstr "Neue Direktnachricht"
#: ../src\controller\buffersController.py:426
#: ../src\controller\buffersController.py:496
msgid "Add your comment to the tweet"
msgstr "Gib deinen Kommentar ein."
#: ../src\controller\buffersController.py:426
#: ../src\controller\buffersController.py:496
#: ../src\keystrokeEditor\constants.py:12 ../src\wxUI\buffers\base.py:25
#: ../src\wxUI\commonMessageDialogs.py:9 ../src\wxUI\dialogs\message.py:126
msgid "Retweet"
msgstr "Retweet"
#: ../src\controller\buffersController.py:498
#: ../src\controller\buffersController.py:567
msgid "Opening URL..."
msgstr "URL wird geöffnet..."
#: ../src\controller\buffersController.py:533
#: ../src\controller\buffersController.py:602
msgid "User details"
msgstr "Benutzerdetails"
#: ../src\controller\buffersController.py:582
#: ../src\controller\buffersController.py:651
msgid "Empty"
msgstr "Leer"
#: ../src\controller\buffersController.py:626
#: ../src\controller\buffersController.py:712
msgid "Mention to %s"
msgstr "Erwähnung an %s"
#: ../src\controller\buffersController.py:626 ../src\wxUI\buffers\people.py:15
#: ../src\controller\buffersController.py:712 ../src\wxUI\buffers\people.py:15
msgid "Mention"
msgstr "Erwähnung"
#: ../src\controller\mainController.py:250
#: ../src\controller\mainController.py:254
msgid "Ready"
msgstr "Bereit"
#: ../src\controller\mainController.py:281
#: ../src\controller\mainController.py:286
msgid "Home"
msgstr "Start"
#: ../src\controller\mainController.py:285
#: ../src\controller\mainController.py:290
msgid "Mentions"
msgstr "Erwähnungen"
#: ../src\controller\mainController.py:289
#: ../src\controller\mainController.py:294
msgid "Direct messages"
msgstr "Direktnachrichten"
#: ../src\controller\mainController.py:293
#: ../src\controller\mainController.py:298
msgid "Sent direct messages"
msgstr "Gesendete Direktnachrichten"
#: ../src\controller\mainController.py:297
#: ../src\controller\mainController.py:302
msgid "Sent tweets"
msgstr "Gesendete Tweets"
#: ../src\controller\mainController.py:302
#: ../src\controller\mainController.py:1221
#: ../src\wxUI\dialogs\userSelection.py:18
#: ../src\controller\mainController.py:307
#: ../src\controller\mainController.py:1248
#: ../src\wxUI\dialogs\userSelection.py:20
msgid "Favourites"
msgstr "Favoriten"
#: ../src\controller\mainController.py:306
#: ../src\controller\mainController.py:1226
#: ../src\controller\mainController.py:311
#: ../src\controller\mainController.py:1253
msgid "Followers"
msgstr "Folger"
#: ../src\controller\mainController.py:310
#: ../src\controller\mainController.py:1231
#: ../src\controller\mainController.py:315
#: ../src\controller\mainController.py:1258
msgid "Friends"
msgstr "Freunde"
#: ../src\controller\mainController.py:314
#: ../src\controller\mainController.py:1236
#: ../src\controller\mainController.py:319
#: ../src\controller\mainController.py:1263
msgid "Blocked users"
msgstr "Blockierte Benutzer"
#: ../src\controller\mainController.py:318
#: ../src\controller\mainController.py:1241
#: ../src\controller\mainController.py:323
#: ../src\controller\mainController.py:1268
msgid "Muted users"
msgstr "Stummgeschaltete Benutzer"
#: ../src\controller\mainController.py:322
#: ../src\controller\mainController.py:1246
#: ../src\controller\mainController.py:327
#: ../src\controller\mainController.py:1273
msgid "Events"
msgstr "Ereignisse"
#: ../src\controller\mainController.py:325
#: ../src\controller\mainController.py:330
msgid "Timelines"
msgstr "Zeitleisten"
#: ../src\controller\mainController.py:329
#: ../src\controller\mainController.py:737
#: ../src\controller\mainController.py:334
#: ../src\controller\mainController.py:756
msgid "Timeline for {}"
msgstr "Zeitleiste für {}"
#: ../src\controller\mainController.py:332
#: ../src\controller\mainController.py:337
msgid "Favourites timelines"
msgstr "Favoritenzeitleisten"
#: ../src\controller\mainController.py:336
#: ../src\controller\mainController.py:749
#: ../src\controller\mainController.py:341
#: ../src\controller\mainController.py:771
msgid "Favourites timeline for {}"
msgstr "Favoritenzeitleiste für {}"
#: ../src\controller\mainController.py:341 ../src\wxUI\dialogs\lists.py:12
#: ../src\controller\mainController.py:346 ../src\wxUI\dialogs\lists.py:12
msgid "Lists"
msgstr "Listen"
#: ../src\controller\mainController.py:346
#: ../src\controller\mainController.py:1256
#: ../src\controller\mainController.py:351
#: ../src\controller\mainController.py:1284
msgid "List for {}"
msgstr "Liste für {}"
#: ../src\controller\mainController.py:349
#: ../src\controller\mainController.py:354
msgid "Searches"
msgstr "Suchen"
#: ../src\controller\mainController.py:353
#: ../src\controller\mainController.py:424
#: ../src\controller\mainController.py:358
#: ../src\controller\mainController.py:416
msgid "Search for {}"
msgstr "Suche nach {}"
#: ../src\controller\mainController.py:361
#: ../src\controller\mainController.py:795
#: ../src\controller\mainController.py:368
#: ../src\controller\mainController.py:817
msgid "Trending topics for %s"
msgstr "Trends für %s"
#: ../src\controller\mainController.py:443
#: ../src\controller\mainController.py:890
#: ../src\controller\mainController.py:909
#: ../src\controller\mainController.py:929
#: ../src\controller\mainController.py:949
#: ../src\controller\mainController.py:435
#: ../src\controller\mainController.py:912
#: ../src\controller\mainController.py:931
#: ../src\controller\mainController.py:950
#: ../src\controller\mainController.py:969
msgid ""
"No session is currently in focus. Focus a session with the next or previous "
"session shortcut."
@@ -194,98 +196,99 @@ msgstr ""
"Derzeit ist keine Sitzung im Fokus. Bitte benutze die Tastenkombinationen "
"vorherige und nächste Sitzung, um eine Sitzung zu fokussieren."
#: ../src\controller\mainController.py:447
#: ../src\controller\mainController.py:439
msgid "Empty buffer."
msgstr "Leere Ansicht."
#: ../src\controller\mainController.py:454
#: ../src\controller\mainController.py:446
msgid "{0} not found."
msgstr "{0} nicht gefunden."
#: ../src\controller\mainController.py:490
#: ../src\controller\mainController.py:482
#: ../src\controller\mainController.py:509
msgid "Select the user"
msgstr "Wähle den Benutzer"
#: ../src\controller\mainController.py:768
#: ../src\controller\mainController.py:790
msgid "Conversation with {0}"
msgstr "Unterhaltung mit {0}"
#: ../src\controller\mainController.py:812
#: ../src\controller\mainController.py:831
#: ../src\controller\mainController.py:834
#: ../src\controller\mainController.py:853
msgid "There are no coordinates in this tweet"
msgstr "Dieser Tweet hat keine Koordinaten."
#: ../src\controller\mainController.py:814
#: ../src\controller\mainController.py:833
#: ../src\controller\mainController.py:836
#: ../src\controller\mainController.py:855
msgid "There are no results for the coordinates in this tweet"
msgstr "Keine Ergebnisse für die Koordinaten in diesem Tweet."
#: ../src\controller\mainController.py:816
#: ../src\controller\mainController.py:835
#: ../src\controller\mainController.py:838
#: ../src\controller\mainController.py:857
msgid "Error decoding coordinates. Try again later."
msgstr ""
"Fehler beim Umwandeln der Koordinaten. Bitte versuche es später erneut."
#: ../src\controller\mainController.py:940
#: ../src\controller\mainController.py:959
#: ../src\controller\mainController.py:960
#: ../src\controller\mainController.py:979
msgid "%s, %s of %s"
msgstr "%s, %s von %s"
#: ../src\controller\mainController.py:942
#: ../src\controller\mainController.py:961
#: ../src\controller\mainController.py:982
#: ../src\controller\mainController.py:1003
#: ../src\controller\mainController.py:962
#: ../src\controller\mainController.py:981
#: ../src\controller\mainController.py:1002
#: ../src\controller\mainController.py:1023
msgid "%s. Empty"
msgstr "%s. Leer"
#: ../src\controller\mainController.py:974
#: ../src\controller\mainController.py:994
msgid "{0}: This account is not logged into Twitter."
msgstr "{0}: Dieser Account ist nicht bei Twitter eingeloggt."
#: ../src\controller\mainController.py:980
#: ../src\controller\mainController.py:1001
#: ../src\controller\mainController.py:1000
#: ../src\controller\mainController.py:1021
msgid "%s. %s, %s of %s"
msgstr "%s. %s, %s von %s"
#: ../src\controller\mainController.py:995
#: ../src\controller\mainController.py:1015
msgid "{0}: This account is not logged into twitter."
msgstr "{0}: Dieser Account ist nicht bei Twitter eingeloggt."
#: ../src\controller\mainController.py:1096
#: ../src\controller\mainController.py:1116
msgid "One mention from %s "
msgstr "Eine Erwähnung von %s"
#: ../src\controller\mainController.py:1185
#: ../src\controller\mainController.py:1194
#: ../src\controller\mainController.py:1205
#: ../src\controller\mainController.py:1214
msgid "One tweet from %s"
msgstr "Ein Tweet von %s"
#: ../src\controller\mainController.py:1251
#: ../src\controller\mainController.py:1278
msgid "This list is already opened"
msgstr "Diese Liste ist bereits geöffnet."
#: ../src\controller\mainController.py:1309
#: ../src\controller\mainController.py:1337
msgid "The auto-reading of new tweets is enabled for this buffer"
msgstr "Das automatische Vorlesen von Tweets ist für diese Ansicht aktiv."
#: ../src\controller\mainController.py:1312
#: ../src\controller\mainController.py:1340
msgid "The auto-reading of new tweets is disabled for this buffer"
msgstr ""
"Das automatische Vorlesen von Tweets ist für diese Ansicht deaktiviert."
#: ../src\controller\mainController.py:1318
#: ../src\controller\mainController.py:1346
msgid "Session mute on"
msgstr "Sitzung stummgeschaltet"
#: ../src\controller\mainController.py:1321
#: ../src\controller\mainController.py:1349
msgid "Session mute off"
msgstr "Sitzung nicht stummgeschaltet"
#: ../src\controller\mainController.py:1328
#: ../src\controller\mainController.py:1356
msgid "Buffer mute on"
msgstr "Stummschaltung ein"
#: ../src\controller\mainController.py:1331
#: ../src\controller\mainController.py:1359
msgid "Buffer mute off"
msgstr "Stummschaltung aus"
@@ -293,73 +296,73 @@ msgstr "Stummschaltung aus"
msgid "Copied"
msgstr "Kopiert"
#: ../src\controller\messages.py:43
#: ../src\controller\messages.py:44
msgid "Translated"
msgstr "Übersetzt"
#: ../src\controller\messages.py:50
#: ../src\controller\messages.py:51
msgid "There's no URL to be shortened"
msgstr "Es gibt keine URL zum Kürzen."
#: ../src\controller\messages.py:54 ../src\controller\messages.py:61
#: ../src\controller\messages.py:55 ../src\controller\messages.py:62
msgid "URL shortened"
msgstr "URL gekürzt"
#: ../src\controller\messages.py:67
#: ../src\controller\messages.py:68
msgid "There's no URL to be expanded"
msgstr "Es gibt keine URL zum Expandieren."
#: ../src\controller\messages.py:71 ../src\controller\messages.py:78
#: ../src\controller\messages.py:72 ../src\controller\messages.py:79
msgid "URL expanded"
msgstr "URL expandiert"
#: ../src\controller\messages.py:89
#: ../src\controller\messages.py:90
msgid "%s - %s of %d characters"
msgstr "%s - %s von %d Zeichen"
#: ../src\controller\messages.py:93
#: ../src\controller\messages.py:94
msgid "%s - %s characters"
msgstr "%s - %s Zeichen"
#: ../src\controller\messages.py:109
#: ../src\controller\messages.py:111
msgid "Unable to upload the audio"
msgstr "Audio kann nicht hochgeladen werden."
#: ../src\controller\messages.py:124 ../src\controller\messages.py:132
#: ../src\controller\messages.py:127 ../src\controller\messages.py:135
#: ../src\wxUI\dialogs\update_profile.py:77
msgid "Discard image"
msgstr "Bild verwerfen"
#: ../src\controller\messages.py:127 ../src\controller\user.py:53
#: ../src\controller\messages.py:130 ../src\controller\user.py:53
#: ../src\extra\AudioUploader\audioUploader.py:127
msgid "Discarded"
msgstr "Verworfen"
#: ../src\controller\messages.py:128 ../src\wxUI\dialogs\message.py:133
#: ../src\controller\messages.py:131 ../src\wxUI\dialogs\message.py:133
#: ../src\wxUI\dialogs\update_profile.py:32
#: ../src\wxUI\dialogs\update_profile.py:75
msgid "Upload a picture"
msgstr "Ein Bild hochladen"
#: ../src\controller\settings.py:119 ../src\controller\settings.py:178
#: ../src\controller\settings.py:121 ../src\controller\settings.py:180
#: ../src\wxUI\dialogs\configuration.py:100
msgid "Ask"
msgstr "Fragen"
#: ../src\controller\settings.py:121 ../src\controller\settings.py:180
#: ../src\controller\settings.py:123 ../src\controller\settings.py:182
#: ../src\wxUI\dialogs\configuration.py:100
msgid "Retweet without comments"
msgstr "Retweet ohne Kommentar"
#: ../src\controller\settings.py:123 ../src\wxUI\dialogs\configuration.py:100
#: ../src\controller\settings.py:125 ../src\wxUI\dialogs\configuration.py:100
msgid "Retweet with comments"
msgstr "Retweet mit Kommentar"
#: ../src\controller\settings.py:155
#: ../src\controller\settings.py:157
msgid "Account settings for %s"
msgstr "Account-Einstellungen für %s"
#: ../src\controller\settings.py:263 ../src\wxUI\dialogs\configuration.py:291
#: ../src\controller\settings.py:265 ../src\wxUI\dialogs\configuration.py:291
msgid "Connect your Pocket account"
msgstr "Pocket-Account verbinden"
@@ -419,7 +422,7 @@ msgstr "Tweets: %s\n"
msgid "Favourites: %s"
msgstr "Favoriten: %s"
#: ../src\controller\userActionsController.py:69
#: ../src\controller\userActionsController.py:75
msgid "You can't ignore direct messages"
msgstr "Du kannst keine Direktnachrichten ignorieren."
@@ -705,6 +708,8 @@ msgstr ""
#: ../src\extra\SpellChecker\wx_ui.py:76 ../src\issueReporter\wx_ui.py:83
#: ../src\issueReporter\wx_ui.py:86 ../src\wxUI\commonMessageDialogs.py:38
#: ../src\wxUI\commonMessageDialogs.py:50
#: ../src\wxUI\commonMessageDialogs.py:57
#: ../src\wxUI\commonMessageDialogs.py:60
msgid "Error"
msgstr "Fehler"
@@ -1169,8 +1174,8 @@ msgid "autodetect"
msgstr "Automatisch"
#: ../src\extra\translator\wx_ui.py:25 ../src\wxUI\dialogs\message.py:140
#: ../src\wxUI\dialogs\message.py:201 ../src\wxUI\dialogs\message.py:279
#: ../src\wxUI\dialogs\message.py:334
#: ../src\wxUI\dialogs\message.py:201 ../src\wxUI\dialogs\message.py:280
#: ../src\wxUI\dialogs\message.py:335
msgid "Translate message"
msgstr "Nachricht übersetzen"
@@ -1506,7 +1511,7 @@ msgid "Keystroke"
msgstr "Tastenkombination"
#: ../src\keystrokeEditor\wx_ui.py:13 ../src\wxUI\dialogs\userActions.py:9
#: ../src\wxUI\dialogs\userActions.py:16
#: ../src\wxUI\dialogs\userActions.py:18
msgid "Action"
msgstr "Aktion"
@@ -1514,57 +1519,61 @@ msgstr "Aktion"
msgid "Edit"
msgstr "Bearbeiten"
#: ../src\keystrokeEditor\wx_ui.py:20
msgid "Execute action"
msgstr "Aktion ausführen"
#: ../src\keystrokeEditor\wx_ui.py:21 ../src\wxUI\dialogs\configuration.py:349
#: ../src\wxUI\dialogs\message.py:84 ../src\wxUI\dialogs\message.py:144
#: ../src\wxUI\dialogs\message.py:204 ../src\wxUI\dialogs\message.py:280
#: ../src\wxUI\dialogs\message.py:335 ../src\wxUI\dialogs\search.py:26
#: ../src\wxUI\dialogs\message.py:204 ../src\wxUI\dialogs\message.py:281
#: ../src\wxUI\dialogs\message.py:336 ../src\wxUI\dialogs\search.py:26
#: ../src\wxUI\dialogs\show_user.py:17 ../src\wxUI\dialogs\trends.py:28
#: ../src\wxUI\dialogs\update_profile.py:35
#: ../src\wxUI\dialogs\userActions.py:40
#: ../src\wxUI\dialogs\userSelection.py:28 ../src\wxUI\dialogs\utils.py:35
#: ../src\wxUI\dialogs\userActions.py:42
#: ../src\wxUI\dialogs\userSelection.py:30 ../src\wxUI\dialogs\utils.py:37
msgid "Close"
msgstr "Schließen"
#: ../src\keystrokeEditor\wx_ui.py:43
#: ../src\keystrokeEditor\wx_ui.py:45
msgid "Editing keystroke"
msgstr "Bearbeite Tastenkombination"
#: ../src\keystrokeEditor\wx_ui.py:46
#: ../src\keystrokeEditor\wx_ui.py:48
msgid "Control"
msgstr "STRG"
#: ../src\keystrokeEditor\wx_ui.py:47
#: ../src\keystrokeEditor\wx_ui.py:49
msgid "Alt"
msgstr "Alt"
#: ../src\keystrokeEditor\wx_ui.py:48
#: ../src\keystrokeEditor\wx_ui.py:50
msgid "Shift"
msgstr "Umschalt"
#: ../src\keystrokeEditor\wx_ui.py:49
#: ../src\keystrokeEditor\wx_ui.py:51
msgid "Windows"
msgstr "Windows"
#: ../src\keystrokeEditor\wx_ui.py:55
#: ../src\keystrokeEditor\wx_ui.py:57
msgid "Key"
msgstr "Taste"
#: ../src\keystrokeEditor\wx_ui.py:60 ../src\wxUI\dialogs\find.py:18
#: ../src\keystrokeEditor\wx_ui.py:62 ../src\wxUI\dialogs\find.py:18
#: ../src\wxUI\dialogs\search.py:24 ../src\wxUI\dialogs\trends.py:26
#: ../src\wxUI\dialogs\userActions.py:38
#: ../src\wxUI\dialogs\userSelection.py:26 ../src\wxUI\dialogs\utils.py:32
#: ../src\wxUI\dialogs\userActions.py:40
#: ../src\wxUI\dialogs\userSelection.py:28 ../src\wxUI\dialogs\utils.py:34
msgid "OK"
msgstr "OK"
#: ../src\keystrokeEditor\wx_ui.py:73
#: ../src\keystrokeEditor\wx_ui.py:75
msgid "You need to use the Windows key"
msgstr "Du musst die Windows-Taste verwenden."
#: ../src\keystrokeEditor\wx_ui.py:73 ../src\keystrokeEditor\wx_ui.py:76
#: ../src\keystrokeEditor\wx_ui.py:75 ../src\keystrokeEditor\wx_ui.py:78
msgid "Invalid keystroke"
msgstr "Ungültige Tastenkombination"
#: ../src\keystrokeEditor\wx_ui.py:76
#: ../src\keystrokeEditor\wx_ui.py:78
msgid "You must provide a character for the keystroke"
msgstr "Du musst ein Zeichen für die Tastenkombination angeben."
@@ -1572,11 +1581,11 @@ msgstr "Du musst ein Zeichen für die Tastenkombination angeben."
msgid "User default"
msgstr "Benutzerstandard"
#: ../src\sessionmanager\session.py:185
#: ../src\sessionmanager\session.py:186
msgid "%s failed. Reason: %s"
msgstr "%s fehlgeschlagen. Grund: %s"
#: ../src\sessionmanager\session.py:191
#: ../src\sessionmanager\session.py:192
msgid "%s succeeded."
msgstr "%s erfolgreich."
@@ -1844,7 +1853,7 @@ msgstr "Datum"
#: ../src\wxUI\buffers\base.py:11 ../src\wxUI\buffers\people.py:10
#: ../src\wxUI\buffers\user_searches.py:9
#: ../src\wxUI\dialogs\userActions.py:10
#: ../src\wxUI\dialogs\userSelection.py:10 ../src\wxUI\dialogs\utils.py:29
#: ../src\wxUI\dialogs\userSelection.py:10 ../src\wxUI\dialogs\utils.py:30
msgid "User"
msgstr "Benutzer"
@@ -1900,7 +1909,7 @@ msgid ""
msgstr ""
"Möchtest du diesen Tweet wirklich löschen? Er wird auch auf Twitter gelöscht."
#: ../src\wxUI\commonMessageDialogs.py:12 ../src\wxUI\dialogs\lists.py:133
#: ../src\wxUI\commonMessageDialogs.py:12 ../src\wxUI\dialogs\lists.py:134
msgid "Delete"
msgstr "Löschen"
@@ -2020,6 +2029,17 @@ msgstr ""
msgid "We need your help"
msgstr "Wir brauchen deine Hilfe"
#: ../src\wxUI\commonMessageDialogs.py:57
msgid "This user has no tweets. {0} can't create a timeline."
msgstr ""
"Dieser Benutzer hat keine Tweets, {0} kann daher keine Zeitleiste erstellen."
#: ../src\wxUI\commonMessageDialogs.py:60
msgid "This user has no favorited tweets. {0} can't create a timeline."
msgstr ""
"Dieser Benutzer hat keine Favoriten. {0} kann daher keine Zeitleiste "
"erstellen."
#: ../src\wxUI\dialogs\configuration.py:14
msgid "Language"
msgstr "Sprache"
@@ -2333,7 +2353,7 @@ msgstr "Hinzufügen"
msgid "Select a list to remove the user"
msgstr "Wähle eine Liste zum Entfernen des Benutzers."
#: ../src\wxUI\dialogs\lists.py:133
#: ../src\wxUI\dialogs\lists.py:134
msgid "Do you really want to delete this list?"
msgstr "Möchtest du diese Liste wirklich löschen?"
@@ -2359,8 +2379,8 @@ msgid "Shorten URL"
msgstr "URL kürzen"
#: ../src\wxUI\dialogs\message.py:77 ../src\wxUI\dialogs\message.py:137
#: ../src\wxUI\dialogs\message.py:198 ../src\wxUI\dialogs\message.py:277
#: ../src\wxUI\dialogs\message.py:332
#: ../src\wxUI\dialogs\message.py:198 ../src\wxUI\dialogs\message.py:278
#: ../src\wxUI\dialogs\message.py:333
msgid "Expand URL"
msgstr "URL expandieren"
@@ -2369,7 +2389,8 @@ msgid "Translate..."
msgstr "Übersetzen..."
#: ../src\wxUI\dialogs\message.py:81 ../src\wxUI\dialogs\message.py:141
#: ../src\wxUI\dialogs\message.py:186
#: ../src\wxUI\dialogs\message.py:186 ../src\wxUI\dialogs\userActions.py:13
#: ../src\wxUI\dialogs\userSelection.py:13 ../src\wxUI\dialogs\utils.py:29
msgid "&Autocomplete users"
msgstr "&Auto-Vervollständigung der Benutzer"
@@ -2389,7 +2410,7 @@ msgid "Select the picture to be uploaded"
msgstr "Wähle das hochzuladende Bild aus."
#: ../src\wxUI\dialogs\message.py:134 ../src\wxUI\dialogs\message.py:195
#: ../src\wxUI\dialogs\message.py:276 ../src\wxUI\dialogs\message.py:331
#: ../src\wxUI\dialogs\message.py:277 ../src\wxUI\dialogs\message.py:332
msgid "Spelling correction"
msgstr "Rechtschreibprüfung"
@@ -2397,27 +2418,27 @@ msgstr "Rechtschreibprüfung"
msgid "Recipient"
msgstr "Empfänger"
#: ../src\wxUI\dialogs\message.py:236
#: ../src\wxUI\dialogs\message.py:237
msgid "Men&tion to all"
msgstr "Alle er&wähnen"
#: ../src\wxUI\dialogs\message.py:245
#: ../src\wxUI\dialogs\message.py:246
msgid "Tweet - %i characters "
msgstr "Tweet - %i Zeichen "
#: ../src\wxUI\dialogs\message.py:262
#: ../src\wxUI\dialogs\message.py:263
msgid "Retweets: "
msgstr "Retweets: "
#: ../src\wxUI\dialogs\message.py:267
#: ../src\wxUI\dialogs\message.py:268
msgid "Favourites: "
msgstr "Favoriten: "
#: ../src\wxUI\dialogs\message.py:317
#: ../src\wxUI\dialogs\message.py:318
msgid "View"
msgstr "Ansehen"
#: ../src\wxUI\dialogs\message.py:319
#: ../src\wxUI\dialogs\message.py:320
msgid "Item"
msgstr "Eintrag"
@@ -2429,7 +2450,7 @@ msgstr "Auf Twitter suchen"
msgid "Search"
msgstr "Suchen"
#: ../src\wxUI\dialogs\search.py:18 ../src\wxUI\dialogs\userSelection.py:17
#: ../src\wxUI\dialogs\search.py:18 ../src\wxUI\dialogs\userSelection.py:19
msgid "Tweets"
msgstr "Tweets"
@@ -2489,35 +2510,35 @@ msgstr "Profil aktualisieren"
msgid "Select URL"
msgstr "Wähle eine URL"
#: ../src\wxUI\dialogs\userActions.py:17
#: ../src\wxUI\dialogs\userActions.py:19
msgid "Follow"
msgstr "Folgen"
#: ../src\wxUI\dialogs\userActions.py:18
#: ../src\wxUI\dialogs\userActions.py:20
msgid "Unfollow"
msgstr "Entfolgen"
#: ../src\wxUI\dialogs\userActions.py:19
#: ../src\wxUI\dialogs\userActions.py:21
msgid "Mute"
msgstr "Stummschalten"
#: ../src\wxUI\dialogs\userActions.py:20
#: ../src\wxUI\dialogs\userActions.py:22
msgid "Unmute"
msgstr "Stummschaltung aufheben"
#: ../src\wxUI\dialogs\userActions.py:21
#: ../src\wxUI\dialogs\userActions.py:23
msgid "Block"
msgstr "Blockieren"
#: ../src\wxUI\dialogs\userActions.py:22
#: ../src\wxUI\dialogs\userActions.py:24
msgid "Unblock"
msgstr "Blockierung aufheben"
#: ../src\wxUI\dialogs\userActions.py:23
#: ../src\wxUI\dialogs\userActions.py:25
msgid "Report as spam"
msgstr "Als Spam melden"
#: ../src\wxUI\dialogs\userActions.py:24
#: ../src\wxUI\dialogs\userActions.py:26
msgid "Ignore tweets from this client"
msgstr "Tweets dieses Clients ignorieren"
@@ -2525,10 +2546,84 @@ msgstr "Tweets dieses Clients ignorieren"
msgid "Timeline for %s"
msgstr "Zeitleiste von %s"
#: ../src\wxUI\dialogs\userSelection.py:16
#: ../src\wxUI\dialogs\userSelection.py:18
msgid "Buffer type"
msgstr "Ansichts-Typ"
#: ../src\wxUI\menus.py:7 ../src\wxUI\view.py:29
msgid "&Retweet"
msgstr "&Retweet"
#: ../src\wxUI\menus.py:9 ../src\wxUI\menus.py:31 ../src\wxUI\view.py:28
msgid "Re&ply"
msgstr "Ant&worten"
#: ../src\wxUI\menus.py:11 ../src\wxUI\view.py:30
msgid "Add to &favourites"
msgstr "Zu &Favoriten hinzufügen"
#: ../src\wxUI\menus.py:13 ../src\wxUI\view.py:31
msgid "Remove from favo&urites"
msgstr "Aus Fav&oriten entfernen"
#: ../src\wxUI\menus.py:15 ../src\wxUI\menus.py:33 ../src\wxUI\menus.py:49
msgid "&Open URL"
msgstr "URL &öffnen"
#: ../src\wxUI\menus.py:17 ../src\wxUI\menus.py:35 ../src\wxUI\menus.py:51
msgid "&Play audio"
msgstr "Audio abs&pielen"
#: ../src\wxUI\menus.py:19 ../src\wxUI\menus.py:53 ../src\wxUI\view.py:32
msgid "&Show tweet"
msgstr "Tweet an&sehen"
#: ../src\wxUI\menus.py:21 ../src\wxUI\menus.py:39 ../src\wxUI\menus.py:55
#: ../src\wxUI\menus.py:65 ../src\wxUI\menus.py:82 ../src\wxUI\menus.py:94
msgid "&Copy to clipboard"
msgstr "in Zwischenablage &kopieren"
#: ../src\wxUI\menus.py:23 ../src\wxUI\menus.py:41 ../src\wxUI\menus.py:57
#: ../src\wxUI\menus.py:67 ../src\wxUI\view.py:35
msgid "&Delete"
msgstr "Löschen"
#: ../src\wxUI\menus.py:25 ../src\wxUI\menus.py:43 ../src\wxUI\menus.py:84
msgid "&User actions..."
msgstr "Ben&utzeraktionen"
#: ../src\wxUI\menus.py:37
msgid "&Show direct message"
msgstr "Direktnachricht an&sehen"
#: ../src\wxUI\menus.py:63
msgid "&Show event"
msgstr "Ereignis an&sehen"
#: ../src\wxUI\menus.py:73
msgid "Direct &message"
msgstr "Direkt&nachricht"
#: ../src\wxUI\menus.py:75 ../src\wxUI\view.py:44
msgid "&View lists"
msgstr "Listen &ansehen"
#: ../src\wxUI\menus.py:78 ../src\wxUI\view.py:46
msgid "Show user &profile"
msgstr "Benutzer&profil ansehen"
#: ../src\wxUI\menus.py:80
msgid "&Show user"
msgstr "Benutzer an&sehen"
#: ../src\wxUI\menus.py:90
msgid "&Tweet about this trend"
msgstr "Über diesen &Trend twittern"
#: ../src\wxUI\menus.py:92
msgid "&Show item"
msgstr "Eintrag an&sehen"
#: ../src\wxUI\sysTrayIcon.py:34 ../src\wxUI\view.py:22
msgid "&Global settings"
msgstr "&Globale Einstellungen"
@@ -2545,7 +2640,7 @@ msgstr "&Profil aktualisieren"
msgid "&Show / hide"
msgstr "&Zeigen / verbergen"
#: ../src\wxUI\sysTrayIcon.py:38 ../src\wxUI\view.py:63
#: ../src\wxUI\sysTrayIcon.py:38 ../src\wxUI\view.py:62
msgid "&Documentation"
msgstr "Dokumentation^"
@@ -2585,30 +2680,10 @@ msgstr "Tasten&kombinationen bearbeiten"
msgid "E&xit"
msgstr "&Beenden"
#: ../src\wxUI\view.py:27 ../src\wxUI\view.py:74
#: ../src\wxUI\view.py:27 ../src\wxUI\view.py:73
msgid "&Tweet"
msgstr "&Tweet"
#: ../src\wxUI\view.py:28
msgid "Re&ply"
msgstr "Ant&worten"
#: ../src\wxUI\view.py:29
msgid "&Retweet"
msgstr "&Retweet"
#: ../src\wxUI\view.py:30
msgid "Add to &favourites"
msgstr "Zu &Favoriten hinzufügen"
#: ../src\wxUI\view.py:31
msgid "Remove from favo&urites"
msgstr "Aus Fav&oriten entfernen"
#: ../src\wxUI\view.py:32
msgid "&Show tweet"
msgstr "Tweet an&sehen"
#: ../src\wxUI\view.py:33
msgid "View &address"
msgstr "&Adresse abrufen"
@@ -2617,10 +2692,6 @@ msgstr "&Adresse abrufen"
msgid "View conversa&tion"
msgstr "Konversa&tion anzeigen"
#: ../src\wxUI\view.py:35
msgid "&Delete"
msgstr "Löschen"
#: ../src\wxUI\view.py:39
msgid "&Actions..."
msgstr "&Aktionen..."
@@ -2641,95 +2712,87 @@ msgstr "Zur L&iste hinzufügen"
msgid "R&emove from list"
msgstr "Aus Liste &entfernen"
#: ../src\wxUI\view.py:45
msgid "&View lists"
msgstr "Listen &ansehen"
#: ../src\wxUI\view.py:47
msgid "Show user &profile"
msgstr "Benutzer&profil ansehen"
#: ../src\wxUI\view.py:48
msgid "V&iew favourites"
msgstr "Favor&iten ansehen"
#: ../src\wxUI\view.py:52
#: ../src\wxUI\view.py:51
msgid "New &trending topics buffer..."
msgstr "Neue &Trends-Ansicht"
#: ../src\wxUI\view.py:53
#: ../src\wxUI\view.py:52
msgid "Find a string in the currently focused buffer..."
msgstr "Eine Zeichenkette im der momentan fokussierten Ansicht suchen..."
#: ../src\wxUI\view.py:54
#: ../src\wxUI\view.py:53
msgid "&Load previous items"
msgstr "Vorhergehende Einträge &laden"
#: ../src\wxUI\view.py:56
#: ../src\wxUI\view.py:55
msgid "&Mute"
msgstr "Stu&mmschalten"
#: ../src\wxUI\view.py:57
#: ../src\wxUI\view.py:56
msgid "&Autoread"
msgstr "&Automatisch vorlesen"
#: ../src\wxUI\view.py:58
#: ../src\wxUI\view.py:57
msgid "&Clear buffer"
msgstr "Ansicht l&eeren"
#: ../src\wxUI\view.py:59
#: ../src\wxUI\view.py:58
msgid "&Destroy"
msgstr "&Löschen"
#: ../src\wxUI\view.py:64
#: ../src\wxUI\view.py:63
msgid "Sounds &tutorial"
msgstr "Sounds &erlernen"
#: ../src\wxUI\view.py:65
#: ../src\wxUI\view.py:64
msgid "&What's new in this version?"
msgstr "&Was ist neu in dieser Version?"
#: ../src\wxUI\view.py:67
#: ../src\wxUI\view.py:66
msgid "&Check for updates"
msgstr "Nach &Updates suchen"
#: ../src\wxUI\view.py:68
#: ../src\wxUI\view.py:67
msgid "&Report an error"
msgstr "Fehle&r melden"
#: ../src\wxUI\view.py:69
#: ../src\wxUI\view.py:68
msgid "{0}'s &website"
msgstr "{0}-&Webseite"
#: ../src\wxUI\view.py:70
#: ../src\wxUI\view.py:69
msgid "About &{0}"
msgstr "Über &{0}"
#: ../src\wxUI\view.py:73
#: ../src\wxUI\view.py:72
msgid "&Application"
msgstr "&Anwendung"
#: ../src\wxUI\view.py:75
#: ../src\wxUI\view.py:74
msgid "&User"
msgstr "Ben&utzer"
#: ../src\wxUI\view.py:76
#: ../src\wxUI\view.py:75
msgid "&Buffer"
msgstr "A&nsicht"
#: ../src\wxUI\view.py:77
#: ../src\wxUI\view.py:76
msgid "&Help"
msgstr "&Hilfe"
#: ../src\wxUI\view.py:158
#: ../src\wxUI\view.py:159
msgid "Address"
msgstr "Adresse"
#: ../src\wxUI\view.py:181
#: ../src\wxUI\view.py:182
msgid "Update"
msgstr "Update"
#: ../src\wxUI\view.py:181
#: ../src\wxUI\view.py:182
msgid "Your {0} version is up to date"
msgstr "Deine {0}-Version ist aktuell"

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
############################################################
from twitter import utils
def get_id(url):
return url.split("/")[-1]
@@ -25,4 +26,9 @@ def is_long(tweet):
for url in range(0, len(tweet["entities"]["urls"])):
if "twitter.com" in tweet["entities"]["urls"][url]["expanded_url"]:
long = get_id(tweet["entities"]["urls"][url]["expanded_url"])
return long
return long
def clear_url(tweet):
urls = utils.find_urls_in_text(tweet["text"])
tweet["message"] = tweet["message"].replace(urls[-1]+".", "")
return tweet

View File

@@ -9,7 +9,7 @@ import output
import time
import sound
import logging
from twitter import utils
from twitter import utils, compose
from twython import TwythonError, TwythonRateLimitError, TwythonAuthError
import config_utils
import shelve
@@ -18,6 +18,7 @@ import os
from mysc.thread_utils import stream_threaded
from pubsub import pub
log = logging.getLogger("sessionmanager.session")
from long_tweets import tweets
sessions = {}
@@ -61,6 +62,7 @@ class Session(object):
self.db[name] = []
for i in data:
if utils.find_item(i["id"], self.db[name]) == None and utils.is_allowed(i, self.settings["twitter"]["ignored_clients"]) == True:
i = self.check_quoted_status(i)
if self.settings["general"]["reverse_timelines"] == False: self.db[name].append(i)
else: self.db[name].insert(0, i)
num = num+1
@@ -413,3 +415,27 @@ class Session(object):
os.remove(shelfname)
except:
pass
def check_quoted_status(self, tweet):
status = tweets.is_long(tweet)
if status != False:
tweet["quoted"] = 1
tweet = self.get_quoted_tweet(tweet)
return tweet
def get_quoted_tweet(self, tweet):
quoted_tweet = self.twitter.twitter.show_status(id=tweet["id"])
urls = utils.find_urls_in_text(quoted_tweet["text"])
for url in range(0, len(urls)):
try: quoted_tweet["text"] = quoted_tweet["text"].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
l = tweets.is_long(quoted_tweet)
id = tweets.get_id(l)
original_tweet = self.twitter.twitter.show_status(id=id)
urls = utils.find_urls_in_text(original_tweet["text"])
for url in range(0, len(urls)):
try: original_tweet["text"] = original_tweet["text"].replace(urls[url], original_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
return compose.compose_quoted_tweet(quoted_tweet, original_tweet)

View File

@@ -30,6 +30,10 @@ class timelinesStreamer(TwythonStreamer):
def check_tls(self, data):
for i in self.session.settings["other_buffers"]["timelines"]:
if data["user"]["screen_name"] == i:
if utils.find_item(data["id"], self.session.db["%s-timeline" % (i,)]) != None:
log.error("duplicated tweet. Ignoring it...")
return
data = self.session.check_quoted_status(data)
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s-timeline" % (i,)].append(data)
else: self.session.db["%s-timeline" % (i,)].insert(0, data)
pub.sendMessage("item-in-timeline", data= data, user= self.session.db["user_name"], who= i)
@@ -38,6 +42,7 @@ class timelinesStreamer(TwythonStreamer):
i.users.index(data["user"]["id"])
usr = data["in_reply_to_user_id"]
if (usr != None and usr in self.friends) or data.has_key("retweeted_status"):
data = self.session.check_quoted_status(data)
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data)
else: self.session.db["%s" % (i,)].insert(0, data)
pub.sendMessage("item-in-list", data= data, user= self.session.db["user_name"], where= i.name)

View File

@@ -33,6 +33,10 @@ class streamer(TwythonStreamer):
def put_data(self, place, data):
if self.session.db.has_key(place):
if utils.find_item(data["id"], self.session.db[place]) != None:
log.error("duplicated tweet. Ignoring it...")
return
data = self.session.check_quoted_status(data)
if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db[place].append(data)
else:

View File

@@ -10,7 +10,7 @@ import languageHandler
import arrow
import logging
import config
from long_tweets import twishort
from long_tweets import twishort, tweets
log = logging.getLogger("compose")
def StripChars(s):
@@ -60,11 +60,33 @@ def compose_tweet(tweet, db, relative_times):
try:
oldtext=text
text=twishort.get_full_text(tweet['long_uri'])
try: text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(text))
except KeyError: pass
except:
text=oldtext
if tweet.has_key("message"):
text = tweet["message"]
return [user+", ", text, ts+", ", source]
tweet["text"] = text
return [user+", ", tweet["text"], ts+", ", source]
def compose_quoted_tweet(quoted_tweet, original_tweet):
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
text = StripChars(quoted_tweet["text"])
quoting_user = quoted_tweet["user"]["name"]
source = re.sub(r"(?s)<.*?>", "", quoted_tweet["source"])
try: text = "rt @%s: %s" % (quoted_tweet["retweeted_status"]["user"]["screen_name"], StripChars(quoted_tweet["retweeted_status"]["text"]))
except KeyError: text = "%s" % (StripChars(quoted_tweet["text"]))
if text[-1] in chars: text=text+"."
original_user = original_tweet["user"]["screen_name"]
original_text = StripChars(original_tweet["text"])
try: original_text = "rt @%s: %s" % (original_tweet["retweeted_status"]["user"]["screen_name"], StripChars(original_tweet["retweeted_status"]["text"]))
except KeyError: original_text = "%s" % (StripChars(original_tweet["text"]))
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet["text"], original_user, original_text)
quoted_tweet = tweets.clear_url(quoted_tweet)
return quoted_tweet
def compose_followers_list(tweet, db, relative_times=True):
if system == "Windows":
original_date = arrow.get(tweet["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en")

View File

@@ -16,9 +16,11 @@ class trendsPanel(wx.Panel):
self.create_list()
self.tweet = wx.Button(self, -1, _(u"Tweet"))
self.tweetTrendBtn = wx.Button(self, -1, _(u"Tweet about this trend"))
self.search_topic = wx.Button(self, -1, _(u"Search topic"))
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
btnSizer.Add(self.tweet, 0, wx.ALL, 5)
btnSizer.Add(self.tweetTrendBtn, 0, wx.ALL, 5)
btnSizer.Add(self.search_topic, 0, wx.ALL, 5)
self.sizer.Add(btnSizer, 0, wx.ALL, 5)
self.sizer.Add(self.list.list, 0, wx.ALL, 5)
self.SetSizer(self.sizer)

View File

@@ -87,6 +87,8 @@ class peoplePanelMenu(wx.Menu):
class trendsPanelMenu(wx.Menu):
def __init__(self):
super(trendsPanelMenu, self).__init__()
self.search_topic = wx.MenuItem(self, wx.NewId(), _(u"Search topic"))
self.AppendItem(self.search_topic)
self.tweetThisTrend = wx.MenuItem(self, wx.NewId(), _(u"&Tweet about this trend"))
self.AppendItem(self.tweetThisTrend)
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show item"))

View File

@@ -42,7 +42,6 @@ class mainFrame(wx.Frame):
self.addToList = user.Append(wx.NewId(), _(u"&Add to list"))
self.removeFromList = user.Append(wx.NewId(), _(u"R&emove from list"))
self.viewLists = user.Append(wx.NewId(), _(u"&View lists"))
self.viewLists.Enable(False)
self.details = user.Append(wx.NewId(), _(u"Show user &profile"))
self.favs = user.Append(wx.NewId(), _(u"V&iew favourites"))

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2015-08-04 13:37+Hora de verano central (M<>xico)\n"
"POT-Creation-Date: 2015-09-29 09:37+Hora de verano central (M<>xico)\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -51,7 +51,7 @@ msgstr ""
#: ../doc\strings.py:378 ../doc\strings.py:381 ../doc\strings.py:384
#: ../doc\strings.py:387 ../doc\strings.py:390 ../doc\strings.py:393
#: ../doc\strings.py:396 ../doc\strings.py:399 ../doc\strings.py:402
#: ../doc\strings.py:405 ../doc\strings.py:421 ../doc\strings.py:424
#: ../doc\strings.py:405 ../doc\strings.py:423 ../doc\strings.py:426
msgid ""
"\n"
msgstr ""
@@ -361,7 +361,7 @@ msgid "* Global settings: Opens a dialogue which lets you configure settings for
msgstr ""
#: ../doc\strings.py:166
msgid "* Quit: asks whether you want to exit the program. If the answer is yes, it closes the application. If you do not want to be asked for confirmation before exiting, uncheck the checkbox from the global settings dialogue box."
msgid "* Exit: asks whether you want to exit the program. If the answer is yes, it closes the application. If you do not want to be asked for confirmation before exiting, uncheck the checkbox from the global settings dialogue box."
msgstr ""
#: ../doc\strings.py:169
@@ -973,7 +973,7 @@ msgid "* English: [Bryner Villalobos](https://twitter.com/Bry_StarkCR) and [Bill
msgstr ""
#: ../doc\strings.py:408
msgid "* Arabic: Mohammed Al Shara."
msgid "* Arabic: [Mohammed Al Shara](https://twitter.com/mohammed0204)."
msgstr ""
#: ../doc\strings.py:409
@@ -989,11 +989,11 @@ msgid "* Basque: [Sukil Etxenike](https://twitter.com/sukil2011)."
msgstr ""
#: ../doc\strings.py:412
msgid "* Finnish: Jani Kinnunen."
msgid "* Finnish: [Jani Kinnunen](https://twitter.com/jani_kinnunen)."
msgstr ""
#: ../doc\strings.py:413
msgid "* French: R\303\251mi Ruiz."
msgid "* French: [R\303\251mi Ruiz](https://twitter.com/blindhelp38)."
msgstr ""
#: ../doc\strings.py:414
@@ -1001,38 +1001,46 @@ msgid "* Galician: [Alba Kinteiro](https://twitter.com/albasmileforeve)."
msgstr ""
#: ../doc\strings.py:415
msgid "* German: Steffen Schultz."
msgid "* German: [Steffen Schultz](https://twitter.com/schulle4u)."
msgstr ""
#: ../doc\strings.py:416
msgid "* Hungarian: Robert Osztolykan."
msgid "* Croatian: [Zvonimir Stane\304\215i\304\207](https://twitter.com/zvonimirek222)."
msgstr ""
#: ../doc\strings.py:417
msgid "* Polish: Pawel Masarczyk."
msgid "* Hungarian: Robert Osztolykan."
msgstr ""
#: ../doc\strings.py:418
msgid "* Portuguese: Odenilton J\303\272nior Santos."
msgid "* Italian: [Christian Leo Mameli](https://twitter.com/llajta2012)."
msgstr ""
#: ../doc\strings.py:419
msgid "* Russian: Alexander Jaszyn."
msgid "* Polish: Pawel Masarczyk."
msgstr ""
#: ../doc\strings.py:420
msgid "* Turkish: Burak."
msgid "* Portuguese: Odenilton J\303\272nior Santos."
msgstr ""
#: ../doc\strings.py:423
#: ../doc\strings.py:421
msgid "* Russian: [\320\220\320\273\320\265\320\272\321\201\320\260\320\275\320\264\321\200 \320\257\321\210\320\270\320\275](https://twitter.com/radovest)."
msgstr ""
#: ../doc\strings.py:422
msgid "* Turkish: [Burak Y\303\274ksek](https://twitter.com/burakyuksek)."
msgstr ""
#: ../doc\strings.py:425
msgid "Many thanks also to the people who worked on the documentation. Initially, [Manuel Cortez](https://twitter.com/manuelcortez00) did the documentation in Spanish, and translated to English by [Bryner Villalobos](https://twitter.com/Bry_StarkCR), [Robert Spangler](https://twitter.com/glasscity1837), [Sussan Rey](https://twitter.com/sussanrey17), [Anibal Hernandez](https://twitter.com/anibalmetal), and [Holly Scott-Gardner](https://twitter.com/holly1994). It was updated by [Sukil Etxenike](https://twitter.com/sukil2011), with some valuable corrections by [Brian Hartgen](https://twitter.com/brianhartgen) and [Bill Dengler](https://twitter.com/codeofdusk)."
msgstr ""
#: ../doc\strings.py:426
#: ../doc\strings.py:428
msgid "---"
msgstr ""
#: ../doc\strings.py:427
#: ../doc\strings.py:429
msgid "Copyright \302\251 2013-2015. Manuel Cort\303\251z"
msgstr ""

File diff suppressed because it is too large Load Diff