Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
80b0ea4f0e | |||
6efb1790bb | |||
d5d1e616ba | |||
1ea919bdc2 | |||
65167de1fe | |||
db519e2608 | |||
19893c5c28 | |||
8e6d37e23c | |||
aae71d081f | |||
9c129e925b | |||
87392ea95a | |||
1bbd9a629c |
@ -346,7 +346,6 @@ def video_receive_frame(toxav, friend_number, width, height, y, u, v, ystride, u
|
||||
width // 2 width // 2
|
||||
|
||||
It can be created from initial y, u, v using slices
|
||||
For more info see callback_video_receive_frame docs
|
||||
"""
|
||||
try:
|
||||
y_size = abs(max(width, abs(ystride)))
|
||||
@ -375,6 +374,55 @@ def video_receive_frame(toxav, friend_number, width, height, y, u, v, ystride, u
|
||||
except Exception as ex:
|
||||
print(ex)
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Callbacks - groups
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
def group_invite(tox, friend_number, gc_type, data, length, user_data):
|
||||
invoke_in_main_thread(Profile.get_instance().group_invite, friend_number, gc_type,
|
||||
bytes(data[:length]))
|
||||
|
||||
|
||||
def show_gc_notification(window, tray, message, group_number, peer_number):
|
||||
profile = Profile.get_instance()
|
||||
settings = Settings.get_instance()
|
||||
chat = profile.get_group_by_number(group_number)
|
||||
peer_name = chat.get_peer_name(peer_number)
|
||||
if not window.isActiveWindow() and (profile.name in message or settings['group_notifications']):
|
||||
if settings['notifications'] and profile.status != TOX_USER_STATUS['BUSY'] and not settings.locked:
|
||||
invoke_in_main_thread(tray_notification, chat.name + ' ' + peer_name, message, tray, window)
|
||||
if settings['sound_notifications'] and profile.status != TOX_USER_STATUS['BUSY']:
|
||||
sound_notification(SOUND_NOTIFICATION['MESSAGE'])
|
||||
invoke_in_main_thread(tray.setIcon, QtGui.QIcon(curr_directory() + '/images/icon_new_messages.png'))
|
||||
|
||||
|
||||
def group_message(window, tray):
|
||||
def wrapped(tox, group_number, peer_number, message, length, user_data):
|
||||
message = str(message[:length], 'utf-8')
|
||||
invoke_in_main_thread(Profile.get_instance().new_gc_message, group_number,
|
||||
peer_number, TOX_MESSAGE_TYPE['NORMAL'], message)
|
||||
show_gc_notification(window, tray, message, group_number, peer_number)
|
||||
return wrapped
|
||||
|
||||
|
||||
def group_action(window, tray):
|
||||
def wrapped(tox, group_number, peer_number, message, length, user_data):
|
||||
message = str(message[:length], 'utf-8')
|
||||
invoke_in_main_thread(Profile.get_instance().new_gc_message, group_number,
|
||||
peer_number, TOX_MESSAGE_TYPE['ACTION'], message)
|
||||
show_gc_notification(window, tray, message, group_number, peer_number)
|
||||
return wrapped
|
||||
|
||||
|
||||
def group_title(tox, group_number, peer_number, title, length, user_data):
|
||||
invoke_in_main_thread(Profile.get_instance().new_gc_title, group_number,
|
||||
title[:length])
|
||||
|
||||
|
||||
def group_namelist_change(tox, group_number, peer_number, change, user_data):
|
||||
invoke_in_main_thread(Profile.get_instance().update_gc, group_number)
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Callbacks - initialization
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
@ -411,3 +459,9 @@ def init_callbacks(tox, window, tray):
|
||||
|
||||
tox.callback_friend_lossless_packet(lossless_packet, 0)
|
||||
tox.callback_friend_lossy_packet(lossy_packet, 0)
|
||||
|
||||
tox.callback_group_invite(group_invite)
|
||||
tox.callback_group_message(group_message(window, tray))
|
||||
tox.callback_group_action(group_action(window, tray))
|
||||
tox.callback_group_title(group_title)
|
||||
tox.callback_group_namelist_change(group_namelist_change)
|
||||
|
@ -61,6 +61,8 @@ class Contact(basecontact.BaseContact):
|
||||
"""
|
||||
Get all chat history from db for current friend
|
||||
"""
|
||||
if self._message_getter is None:
|
||||
return
|
||||
data = list(self._message_getter.get_all())
|
||||
if data is not None and len(data):
|
||||
data.reverse()
|
||||
@ -124,7 +126,7 @@ class Contact(basecontact.BaseContact):
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
def delete_message(self, time):
|
||||
elem = list(filter(lambda x: type(x) is TextMessage and x.get_data()[2] == time, self._corr))[0]
|
||||
elem = list(filter(lambda x: type(x) in (TextMessage, GroupChatMessage) and x.get_data()[2] == time, self._corr))[0]
|
||||
tmp = list(filter(lambda x: x.get_type() <= 1, self._corr))
|
||||
if elem in tmp[-self._unsaved_messages:] and self._unsaved_messages:
|
||||
self._unsaved_messages -= 1
|
||||
|
@ -66,3 +66,10 @@ class Friend(contact.Contact):
|
||||
if self._receipts:
|
||||
self._receipts -= 1
|
||||
self.mark_as_sent()
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Full status
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
def get_full_status(self):
|
||||
return self._status_message
|
||||
|
49
toxygen/group_chat.py
Normal file
49
toxygen/group_chat.py
Normal file
@ -0,0 +1,49 @@
|
||||
import contact
|
||||
import util
|
||||
from PyQt5 import QtGui, QtCore
|
||||
import toxcore_enums_and_consts as constants
|
||||
|
||||
|
||||
class GroupChat(contact.Contact):
|
||||
|
||||
def __init__(self, name, status_message, widget, tox, group_number):
|
||||
super().__init__(None, group_number, name, status_message, widget, None)
|
||||
self._tox = tox
|
||||
self.set_status(constants.TOX_USER_STATUS['NONE'])
|
||||
|
||||
def set_name(self, name):
|
||||
self._tox.group_set_title(self._number, name)
|
||||
super().set_name(name)
|
||||
|
||||
def send_message(self, message):
|
||||
self._tox.group_message_send(self._number, message.encode('utf-8'))
|
||||
|
||||
def new_title(self, title):
|
||||
super().set_name(title)
|
||||
|
||||
def load_avatar(self):
|
||||
path = util.curr_directory() + '/images/group.png'
|
||||
width = self._widget.avatar_label.width()
|
||||
pixmap = QtGui.QPixmap(path)
|
||||
self._widget.avatar_label.setPixmap(pixmap.scaled(width, width, QtCore.Qt.KeepAspectRatio,
|
||||
QtCore.Qt.SmoothTransformation))
|
||||
self._widget.avatar_label.repaint()
|
||||
|
||||
def remove_invalid_unsent_files(self):
|
||||
pass
|
||||
|
||||
def get_names(self):
|
||||
peers_count = self._tox.group_number_peers(self._number)
|
||||
names = []
|
||||
for i in range(peers_count):
|
||||
name = self._tox.group_peername(self._number, i)
|
||||
names.append(name)
|
||||
names = sorted(names, key=lambda n: n.lower())
|
||||
return names
|
||||
|
||||
def get_full_status(self):
|
||||
names = self.get_names()
|
||||
return '\n'.join(names)
|
||||
|
||||
def get_peer_name(self, peer_number):
|
||||
return self._tox.group_peername(self._number, peer_number)
|
BIN
toxygen/images/group.png
Normal file
BIN
toxygen/images/group.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
@ -5,7 +5,6 @@ from widgets import MultilineEdit, ComboBox
|
||||
import plugin_support
|
||||
from mainscreen_widgets import *
|
||||
import settings
|
||||
import platform
|
||||
import toxes
|
||||
|
||||
|
||||
@ -41,6 +40,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
self.menuAbout.setObjectName("menuAbout")
|
||||
|
||||
self.actionAdd_friend = QtWidgets.QAction(window)
|
||||
self.actionAdd_gc = QtWidgets.QAction(window)
|
||||
self.actionAdd_friend.setObjectName("actionAdd_friend")
|
||||
self.actionprofilesettings = QtWidgets.QAction(window)
|
||||
self.actionprofilesettings.setObjectName("actionprofilesettings")
|
||||
@ -64,6 +64,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
self.reloadPlugins = QtWidgets.QAction(window)
|
||||
self.lockApp = QtWidgets.QAction(window)
|
||||
self.menuProfile.addAction(self.actionAdd_friend)
|
||||
self.menuProfile.addAction(self.actionAdd_gc)
|
||||
self.menuProfile.addAction(self.actionSettings)
|
||||
self.menuProfile.addAction(self.lockApp)
|
||||
self.menuSettings.addAction(self.actionPrivacy_settings)
|
||||
@ -86,6 +87,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
self.actionAbout_program.triggered.connect(self.about_program)
|
||||
self.actionNetwork.triggered.connect(self.network_settings)
|
||||
self.actionAdd_friend.triggered.connect(self.add_contact)
|
||||
self.actionAdd_gc.triggered.connect(self.create_gc)
|
||||
self.actionSettings.triggered.connect(self.profile_settings)
|
||||
self.actionPrivacy_settings.triggered.connect(self.privacy_settings)
|
||||
self.actionInterface_settings.triggered.connect(self.interface_settings)
|
||||
@ -115,6 +117,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
self.menuSettings.setTitle(QtWidgets.QApplication.translate("MainWindow", "Settings"))
|
||||
self.menuAbout.setTitle(QtWidgets.QApplication.translate("MainWindow", "About"))
|
||||
self.actionAdd_friend.setText(QtWidgets.QApplication.translate("MainWindow", "Add contact"))
|
||||
self.actionAdd_gc.setText(QtWidgets.QApplication.translate("MainWindow", "Create group chat"))
|
||||
self.actionprofilesettings.setText(QtWidgets.QApplication.translate("MainWindow", "Profile"))
|
||||
self.actionPrivacy_settings.setText(QtWidgets.QApplication.translate("MainWindow", "Privacy"))
|
||||
self.actionInterface_settings.setText(QtWidgets.QApplication.translate("MainWindow", "Interface"))
|
||||
@ -431,6 +434,9 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
self.a_c = AddContact(link or '')
|
||||
self.a_c.show()
|
||||
|
||||
def create_gc(self):
|
||||
self.profile.create_group_chat()
|
||||
|
||||
def profile_settings(self, *args):
|
||||
self.p_s = ProfileSettings()
|
||||
self.p_s.show()
|
||||
@ -512,7 +518,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
|
||||
def send_file(self):
|
||||
self.menu.hide()
|
||||
if self.profile.active_friend + 1:
|
||||
if self.profile.active_friend + 1and self.profile.is_active_a_friend():
|
||||
choose = QtWidgets.QApplication.translate("MainWindow", 'Choose file')
|
||||
name = QtWidgets.QFileDialog.getOpenFileName(self, choose, options=QtWidgets.QFileDialog.DontUseNativeDialog)
|
||||
if name[0]:
|
||||
@ -520,7 +526,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
|
||||
def send_screenshot(self, hide=False):
|
||||
self.menu.hide()
|
||||
if self.profile.active_friend + 1:
|
||||
if self.profile.active_friend + 1 and self.profile.is_active_a_friend():
|
||||
self.sw = ScreenShotWindow(self)
|
||||
self.sw.show()
|
||||
if hide:
|
||||
@ -538,7 +544,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
|
||||
def send_sticker(self):
|
||||
self.menu.hide()
|
||||
if self.profile.active_friend + 1:
|
||||
if self.profile.active_friend + 1 and self.profile.is_active_a_friend():
|
||||
self.sticker = StickerWindow(self)
|
||||
self.sticker.setGeometry(QtCore.QRect(self.x() if Settings.get_instance()['mirror_mode'] else 270 + self.x(),
|
||||
self.y() + self.height() - 200,
|
||||
@ -583,7 +589,10 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
auto = QtWidgets.QApplication.translate("MainWindow", 'Disallow auto accept') if allowed else QtWidgets.QApplication.translate("MainWindow", 'Allow auto accept')
|
||||
if item is not None:
|
||||
self.listMenu = QtWidgets.QMenu()
|
||||
is_friend = type(friend) is Friend
|
||||
if is_friend:
|
||||
set_alias_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Set alias'))
|
||||
set_alias_item.triggered.connect(lambda: self.set_alias(num))
|
||||
|
||||
history_menu = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Chat history'))
|
||||
clear_history_item = history_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Clear history'))
|
||||
@ -593,6 +602,7 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
copy_menu = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Copy'))
|
||||
copy_name_item = copy_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Name'))
|
||||
copy_status_item = copy_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Status message'))
|
||||
if is_friend:
|
||||
copy_key_item = copy_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Public key'))
|
||||
|
||||
auto_accept_item = self.listMenu.addAction(auto)
|
||||
@ -600,19 +610,31 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
block_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Block friend'))
|
||||
notes_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Notes'))
|
||||
|
||||
chats = self.profile.get_group_chats()
|
||||
if len(chats) and self.profile.is_active_online():
|
||||
invite_menu = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Invite to group chat'))
|
||||
for i in range(len(chats)):
|
||||
name, number = chats[i]
|
||||
item = invite_menu.addAction(name)
|
||||
item.triggered.connect(lambda: self.invite_friend_to_gc(num, number))
|
||||
|
||||
plugins_loader = plugin_support.PluginLoader.get_instance()
|
||||
if plugins_loader is not None:
|
||||
submenu = plugins_loader.get_menu(self.listMenu, num)
|
||||
if len(submenu):
|
||||
plug = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Plugins'))
|
||||
plug.addActions(submenu)
|
||||
set_alias_item.triggered.connect(lambda: self.set_alias(num))
|
||||
copy_key_item.triggered.connect(lambda: self.copy_friend_key(num))
|
||||
remove_item.triggered.connect(lambda: self.remove_friend(num))
|
||||
block_item.triggered.connect(lambda: self.block_friend(num))
|
||||
copy_key_item.triggered.connect(lambda: self.copy_friend_key(num))
|
||||
clear_history_item.triggered.connect(lambda: self.clear_history(num))
|
||||
auto_accept_item.triggered.connect(lambda: self.auto_accept(num, not allowed))
|
||||
notes_item.triggered.connect(lambda: self.show_note(friend))
|
||||
else:
|
||||
leave_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Leave chat'))
|
||||
set_title_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Set title'))
|
||||
leave_item.triggered.connect(lambda: self.leave_gc(num))
|
||||
set_title_item.triggered.connect(lambda: self.set_title(num))
|
||||
clear_history_item.triggered.connect(lambda: self.clear_history(num))
|
||||
copy_name_item.triggered.connect(lambda: self.copy_name(friend))
|
||||
copy_status_item.triggered.connect(lambda: self.copy_status(friend))
|
||||
export_to_text_item.triggered.connect(lambda: self.export_history(num))
|
||||
@ -675,6 +697,12 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
def clear_history(self, num):
|
||||
self.profile.clear_history(num)
|
||||
|
||||
def leave_gc(self, num):
|
||||
self.profile.leave_gc(num)
|
||||
|
||||
def set_title(self, num):
|
||||
self.profile.set_title(num)
|
||||
|
||||
def auto_accept(self, num, value):
|
||||
settings = Settings.get_instance()
|
||||
tox_id = self.profile.friend_public_key(num)
|
||||
@ -684,6 +712,9 @@ class MainWindow(QtWidgets.QMainWindow, Singleton):
|
||||
settings['auto_accept_from_friends'].remove(tox_id)
|
||||
settings.save()
|
||||
|
||||
def invite_friend_to_gc(self, friend_number, group_number):
|
||||
self.profile.invite_friend(friend_number, group_number)
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Functions which called when user click somewhere else
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
@ -34,6 +34,10 @@ class MessageArea(QtWidgets.QPlainTextEdit):
|
||||
self.parent.send_message()
|
||||
elif event.key() == QtCore.Qt.Key_Up and not self.toPlainText():
|
||||
self.appendPlainText(Profile.get_instance().get_last_message())
|
||||
elif event.key() == QtCore.Qt.Key_Tab and not self.parent.profile.is_active_a_friend():
|
||||
text = self.toPlainText()
|
||||
pos = self.textCursor().position()
|
||||
self.insertPlainText(Profile.get_instance().get_gc_peer_name(text[:pos]))
|
||||
else:
|
||||
self.parent.profile.send_typing(True)
|
||||
if self.timer.isActive():
|
||||
|
@ -508,15 +508,17 @@ class NotificationsSettings(CenteredWidget):
|
||||
|
||||
def initUI(self):
|
||||
self.setObjectName("notificationsForm")
|
||||
self.resize(350, 180)
|
||||
self.setMinimumSize(QtCore.QSize(350, 180))
|
||||
self.setMaximumSize(QtCore.QSize(350, 180))
|
||||
self.resize(350, 210)
|
||||
self.setMinimumSize(QtCore.QSize(350, 210))
|
||||
self.setMaximumSize(QtCore.QSize(350, 210))
|
||||
self.enableNotifications = QtWidgets.QCheckBox(self)
|
||||
self.enableNotifications.setGeometry(QtCore.QRect(10, 20, 340, 18))
|
||||
self.callsSound = QtWidgets.QCheckBox(self)
|
||||
self.callsSound.setGeometry(QtCore.QRect(10, 120, 340, 18))
|
||||
self.callsSound.setGeometry(QtCore.QRect(10, 170, 340, 18))
|
||||
self.soundNotifications = QtWidgets.QCheckBox(self)
|
||||
self.soundNotifications.setGeometry(QtCore.QRect(10, 70, 340, 18))
|
||||
self.groupNotifications = QtWidgets.QCheckBox(self)
|
||||
self.groupNotifications.setGeometry(QtCore.QRect(10, 120, 340, 18))
|
||||
font = QtGui.QFont()
|
||||
s = Settings.get_instance()
|
||||
font.setFamily(s['font'])
|
||||
@ -524,8 +526,10 @@ class NotificationsSettings(CenteredWidget):
|
||||
self.callsSound.setFont(font)
|
||||
self.soundNotifications.setFont(font)
|
||||
self.enableNotifications.setFont(font)
|
||||
self.groupNotifications.setFont(font)
|
||||
self.enableNotifications.setChecked(s['notifications'])
|
||||
self.soundNotifications.setChecked(s['sound_notifications'])
|
||||
self.groupNotifications.setChecked(s['group_notifications'])
|
||||
self.callsSound.setChecked(s['calls_sound'])
|
||||
self.retranslateUi()
|
||||
QtCore.QMetaObject.connectSlotsByName(self)
|
||||
@ -533,6 +537,7 @@ class NotificationsSettings(CenteredWidget):
|
||||
def retranslateUi(self):
|
||||
self.setWindowTitle(QtWidgets.QApplication.translate("notificationsForm", "Notification settings"))
|
||||
self.enableNotifications.setText(QtWidgets.QApplication.translate("notificationsForm", "Enable notifications"))
|
||||
self.groupNotifications.setText(QtWidgets.QApplication.translate("notificationsForm", "Notify about all messages in groups"))
|
||||
self.callsSound.setText(QtWidgets.QApplication.translate("notificationsForm", "Enable call\'s sound"))
|
||||
self.soundNotifications.setText(QtWidgets.QApplication.translate("notificationsForm", "Enable sound notifications"))
|
||||
|
||||
@ -540,6 +545,7 @@ class NotificationsSettings(CenteredWidget):
|
||||
settings = Settings.get_instance()
|
||||
settings['notifications'] = self.enableNotifications.isChecked()
|
||||
settings['sound_notifications'] = self.soundNotifications.isChecked()
|
||||
settings['group_notifications'] = self.groupNotifications.isChecked()
|
||||
settings['calls_sound'] = self.callsSound.isChecked()
|
||||
settings.save()
|
||||
|
||||
@ -881,6 +887,8 @@ class VideoSettings(CenteredWidget):
|
||||
self.desktopAreaSelection = DesktopAreaSelectionWindow(self)
|
||||
|
||||
def closeEvent(self, event):
|
||||
if self.input.currentIndex() == 0:
|
||||
return
|
||||
try:
|
||||
settings = Settings.get_instance()
|
||||
settings.video['device'] = self.devices[self.input.currentIndex()]
|
||||
|
@ -5,7 +5,9 @@ MESSAGE_TYPE = {
|
||||
'ACTION': 1,
|
||||
'FILE_TRANSFER': 2,
|
||||
'INLINE': 3,
|
||||
'INFO_MESSAGE': 4
|
||||
'INFO_MESSAGE': 4,
|
||||
'GC_TEXT': 5,
|
||||
'GC_ACTION': 6
|
||||
}
|
||||
|
||||
|
||||
@ -39,6 +41,16 @@ class TextMessage(Message):
|
||||
return self._message, self._owner, self._time, self._type
|
||||
|
||||
|
||||
class GroupChatMessage(TextMessage):
|
||||
|
||||
def __init__(self, message, owner, time, message_type, name):
|
||||
super().__init__(message, owner, time, message_type)
|
||||
self._user_name = name
|
||||
|
||||
def get_data(self):
|
||||
return self._message, self._owner, self._time, self._type, self._user_name
|
||||
|
||||
|
||||
class TransferMessage(Message):
|
||||
"""
|
||||
Message with info about file transfer
|
||||
|
@ -16,6 +16,8 @@ import basecontact
|
||||
import items_factory
|
||||
import cv2
|
||||
import threading
|
||||
from group_chat import *
|
||||
import re
|
||||
|
||||
|
||||
class Profile(basecontact.BaseContact, Singleton):
|
||||
@ -129,6 +131,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
filter_str = filter_str.lower()
|
||||
settings = Settings.get_instance()
|
||||
number = self.get_active_number()
|
||||
is_friend = self.is_active_a_friend()
|
||||
if sorting > 1:
|
||||
if sorting & 2:
|
||||
self._contacts = sorted(self._contacts, key=lambda x: int(x.status is not None), reverse=True)
|
||||
@ -164,7 +167,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
self._sorting, self._filter_string = sorting, filter_str
|
||||
settings['sorting'] = self._sorting
|
||||
settings.save()
|
||||
self.set_active_by_number(number)
|
||||
self.set_active_by_number_and_type(number, is_friend)
|
||||
|
||||
def update_filtration(self):
|
||||
"""
|
||||
@ -177,7 +180,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
def get_friend_by_number(self, num):
|
||||
return list(filter(lambda x: x.number == num, self._contacts))[0]
|
||||
return list(filter(lambda x: x.number == num and type(x) is Friend, self._contacts))[0]
|
||||
|
||||
def get_friend(self, num):
|
||||
if num < 0 or num >= len(self._contacts):
|
||||
@ -204,6 +207,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
if value == -1: # all friends were deleted
|
||||
self._screen.account_name.setText('')
|
||||
self._screen.account_status.setText('')
|
||||
self._screen.account_status.setToolTip('')
|
||||
self._active_friend = -1
|
||||
self._screen.account_avatar.setHidden(True)
|
||||
self._messages.clear()
|
||||
@ -251,12 +255,15 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
print('Incoming not started transfer - no info found')
|
||||
elif message.get_type() == MESSAGE_TYPE['INLINE']: # inline
|
||||
self.create_inline_item(message.get_data())
|
||||
else: # info message
|
||||
elif message.get_type() < 5: # info message
|
||||
data = message.get_data()
|
||||
self.create_message_item(data[0],
|
||||
data[2],
|
||||
'',
|
||||
data[3])
|
||||
else:
|
||||
data = message.get_data()
|
||||
self.create_gc_message_item(data[0], data[2], data[1], data[4], data[3])
|
||||
self._messages.scrollToBottom()
|
||||
self._load_history = True
|
||||
if value in self._call:
|
||||
@ -270,6 +277,10 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
|
||||
self._screen.account_name.setText(friend.name)
|
||||
self._screen.account_status.setText(friend.status_message)
|
||||
self._screen.account_status.setToolTip(friend.get_full_status())
|
||||
if friend.tox_id is None:
|
||||
avatar_path = curr_directory() + '/images/group.png'
|
||||
else:
|
||||
avatar_path = (ProfileHelper.get_path() + 'avatars/{}.png').format(friend.tox_id[:TOX_PUBLIC_KEY_SIZE * 2])
|
||||
if not os.path.isfile(avatar_path): # load default image
|
||||
avatar_path = curr_directory() + '/images/avatar.png'
|
||||
@ -282,9 +293,10 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
log('Error in set active: ' + str(ex))
|
||||
raise
|
||||
|
||||
def set_active_by_number(self, number):
|
||||
def set_active_by_number_and_type(self, number, is_friend):
|
||||
for i in range(len(self._contacts)):
|
||||
if self._contacts[i].number == number:
|
||||
c = self._contacts[i]
|
||||
if c.number == number and (type(c) is Friend == is_friend):
|
||||
self._active_friend = i
|
||||
break
|
||||
|
||||
@ -347,7 +359,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
elif data[1] == friend_number and not data[2]:
|
||||
self.send_file(data[0], friend_number, True, key)
|
||||
del self._paused_file_transfers[key]
|
||||
if friend_number == self.get_active_number():
|
||||
if friend_number == self.get_active_number() and self.is_active_a_friend():
|
||||
self.update()
|
||||
except Exception as ex:
|
||||
print('Exception in file sending: ' + str(ex))
|
||||
@ -389,7 +401,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
"""
|
||||
Display incoming typing notification
|
||||
"""
|
||||
if friend_number == self.get_active_number():
|
||||
if friend_number == self.get_active_number() and self.is_active_a_friend():
|
||||
self._screen.typing.setVisible(typing)
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
@ -445,7 +457,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
:param message_type: message type - plain text or action message (/me)
|
||||
:param message: text of message
|
||||
"""
|
||||
if friend_num == self.get_active_number(): # add message to list
|
||||
if friend_num == self.get_active_number()and self.is_active_a_friend(): # add message to list
|
||||
t = time.time()
|
||||
self.create_message_item(message, t, MESSAGE_OWNER['FRIEND'], message_type)
|
||||
self._messages.scrollToBottom()
|
||||
@ -465,6 +477,9 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
:param text: message text
|
||||
:param friend_num: num of friend
|
||||
"""
|
||||
if not self.is_active_a_friend():
|
||||
self.send_gc_message(text)
|
||||
return
|
||||
if friend_num is None:
|
||||
friend_num = self.get_active_number()
|
||||
if text.startswith('/plugin '):
|
||||
@ -480,8 +495,8 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
friend.inc_receipts()
|
||||
if friend.status is not None:
|
||||
self.split_and_send(friend.number, message_type, text.encode('utf-8'))
|
||||
if friend.number == self.get_active_number():
|
||||
t = time.time()
|
||||
if friend.number == self.get_active_number() and self.is_active_a_friend():
|
||||
self.create_message_item(text, t, MESSAGE_OWNER['NOT_SENT'], message_type)
|
||||
self._screen.messageEdit.clear()
|
||||
self._messages.scrollToBottom()
|
||||
@ -504,7 +519,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
s = Settings.get_instance()
|
||||
if hasattr(self, '_history'):
|
||||
if s['save_history']:
|
||||
for friend in self._contacts:
|
||||
for friend in filter(lambda x: type(x) is Friend, self._contacts):
|
||||
if not self._history.friend_exists_in_db(friend.tox_id):
|
||||
self._history.add_friend_to_db(friend.tox_id)
|
||||
if not s['save_unsent_only']:
|
||||
@ -636,6 +651,16 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
return self._factory.message_item(text, time, name, owner != MESSAGE_OWNER['NOT_SENT'],
|
||||
message_type, append, pixmap)
|
||||
|
||||
def create_gc_message_item(self, text, time, owner, name, message_type, append=True):
|
||||
pixmap = None
|
||||
if self._show_avatars:
|
||||
if owner == MESSAGE_OWNER['FRIEND']:
|
||||
pixmap = self.get_curr_friend().get_pixmap()
|
||||
else:
|
||||
pixmap = self.get_pixmap()
|
||||
return self._factory.message_item(text, time, name, True,
|
||||
message_type - 5, append, pixmap)
|
||||
|
||||
def create_file_transfer_item(self, tm, append=True):
|
||||
data = list(tm.get_data())
|
||||
data[3] = self.get_friend_by_number(data[4]).name if data[3] else self._name
|
||||
@ -692,7 +717,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
except:
|
||||
pass
|
||||
settings.save()
|
||||
if num == self.get_active_number():
|
||||
if num == self.get_active_number() and self.is_active_a_friend():
|
||||
self.update()
|
||||
|
||||
def friend_public_key(self, num):
|
||||
@ -863,7 +888,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
QtCore.QTimer.singleShot(50000, self.reconnect)
|
||||
|
||||
def close(self):
|
||||
for friend in self._contacts:
|
||||
for friend in filter(lambda x: type(x) is Friend, self._contacts):
|
||||
self.friend_exit(friend.number)
|
||||
for i in range(len(self._contacts)):
|
||||
del self._contacts[0]
|
||||
@ -936,7 +961,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
friend_number,
|
||||
file_number)
|
||||
accepted = False
|
||||
if friend_number == self.get_active_number():
|
||||
if friend_number == self.get_active_number() and self.is_active_a_friend():
|
||||
item = self.create_file_transfer_item(tm)
|
||||
if accepted:
|
||||
self._file_transfers[(friend_number, file_number)].set_state_changed_handler(item.update_transfer_state)
|
||||
@ -967,7 +992,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
else:
|
||||
if not already_cancelled:
|
||||
self._tox.file_control(friend_number, file_number, TOX_FILE_CONTROL['CANCEL'])
|
||||
if friend_number == self.get_active_number():
|
||||
if friend_number == self.get_active_number() and self.is_active_a_friend():
|
||||
tmp = self._messages.count() + i
|
||||
if tmp >= 0:
|
||||
self._messages.itemWidget(self._messages.item(tmp)).update(TOX_FILE_TRANSFER_STATE['CANCELLED'],
|
||||
@ -1121,7 +1146,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
t = type(transfer)
|
||||
if t is ReceiveAvatar:
|
||||
self.get_friend_by_number(friend_number).load_avatar()
|
||||
if friend_number == self.get_active_number():
|
||||
if friend_number == self.get_active_number() and self.is_active_a_friend():
|
||||
self.set_active(None)
|
||||
elif t is ReceiveToBuffer or (t is SendFromBuffer and Settings.get_instance()['allow_inline']): # inline image
|
||||
print('inline')
|
||||
@ -1129,7 +1154,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
i = self.get_friend_by_number(friend_number).update_transfer_data(file_number,
|
||||
TOX_FILE_TRANSFER_STATE['FINISHED'],
|
||||
inline)
|
||||
if friend_number == self.get_active_number():
|
||||
if friend_number == self.get_active_number() and self.is_active_a_friend():
|
||||
count = self._messages.count()
|
||||
if count + i + 1 >= 0:
|
||||
elem = QtWidgets.QListWidgetItem()
|
||||
@ -1171,7 +1196,7 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
ra.set_transfer_finished_handler(self.transfer_finished)
|
||||
else:
|
||||
self.get_friend_by_number(friend_number).load_avatar()
|
||||
if self.get_active_number() == friend_number:
|
||||
if self.get_active_number() == friend_number and self.is_active_a_friend():
|
||||
self.set_active(None)
|
||||
|
||||
def reset_avatar(self):
|
||||
@ -1196,6 +1221,8 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
def call_click(self, audio=True, video=False):
|
||||
"""User clicked audio button in main window"""
|
||||
num = self.get_active_number()
|
||||
if not self.is_active_a_friend():
|
||||
return
|
||||
if num not in self._call and self.is_active_online(): # start call
|
||||
if not Settings.get_instance().audio['enabled']:
|
||||
return
|
||||
@ -1265,6 +1292,130 @@ class Profile(basecontact.BaseContact, Singleton):
|
||||
self.create_message_item(text, time.time(), '', MESSAGE_TYPE['INFO_MESSAGE'])
|
||||
self._messages.scrollToBottom()
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# GC support
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
def is_active_a_friend(self):
|
||||
return type(self.get_curr_friend()) is Friend
|
||||
|
||||
def get_group_by_number(self, number):
|
||||
groups = filter(lambda x: type(x) is GroupChat and x.number == number, self._contacts)
|
||||
return list(groups)[0]
|
||||
|
||||
def add_gc(self, number):
|
||||
widget = self.create_friend_item()
|
||||
gc = GroupChat('Group chat #' + str(number), '', widget, self._tox, number)
|
||||
self._contacts.append(gc)
|
||||
|
||||
def create_group_chat(self):
|
||||
number = self._tox.add_av_groupchat()
|
||||
self.add_gc(number)
|
||||
|
||||
def leave_gc(self, num):
|
||||
gc = self._contacts[num]
|
||||
self._tox.del_groupchat(gc.number)
|
||||
del self._contacts[num]
|
||||
self._screen.friends_list.takeItem(num)
|
||||
if num == self._active_friend: # active friend was deleted
|
||||
if not len(self._contacts): # last friend was deleted
|
||||
self.set_active(-1)
|
||||
else:
|
||||
self.set_active(0)
|
||||
|
||||
def group_invite(self, friend_number, gc_type, data):
|
||||
text = QtWidgets.QApplication.translate('MainWindow', 'User {} invites you to group chat. Accept?')
|
||||
title = QtWidgets.QApplication.translate('MainWindow', 'Group chat invite')
|
||||
friend = self.get_friend_by_number(friend_number)
|
||||
reply = QtWidgets.QMessageBox.question(None, title, text.format(friend.name), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
|
||||
if reply == QtWidgets.QMessageBox.Yes: # accepted
|
||||
if gc_type == TOX_GROUPCHAT_TYPE['TEXT']:
|
||||
number = self._tox.join_groupchat(friend_number, data)
|
||||
else:
|
||||
number = self._tox.join_av_groupchat(friend_number, data)
|
||||
self.add_gc(number)
|
||||
|
||||
def new_gc_message(self, group_number, peer_number, message_type, message):
|
||||
name = self._tox.group_peername(group_number, peer_number)
|
||||
message_type += 5
|
||||
if group_number == self.get_active_number() and not self.is_active_a_friend(): # add message to list
|
||||
t = time.time()
|
||||
self.create_gc_message_item(message, t, MESSAGE_OWNER['FRIEND'], name, message_type)
|
||||
self._messages.scrollToBottom()
|
||||
self.get_curr_friend().append_message(
|
||||
GroupChatMessage(message, MESSAGE_OWNER['FRIEND'], t, message_type, name))
|
||||
else:
|
||||
gc = self.get_group_by_number(group_number)
|
||||
gc.inc_messages()
|
||||
gc.append_message(
|
||||
GroupChatMessage(message, MESSAGE_OWNER['FRIEND'], time.time(), message_type, name))
|
||||
if not gc.visibility:
|
||||
self.update_filtration()
|
||||
|
||||
def new_gc_title(self, group_number, title):
|
||||
gc = self.get_group_by_number(group_number)
|
||||
gc.new_title(title)
|
||||
if not self.is_active_a_friend() and self.get_active_number() == group_number:
|
||||
self.update()
|
||||
|
||||
def update_gc(self, group_number):
|
||||
count = self._tox.group_number_peers(group_number)
|
||||
gc = self.get_group_by_number(group_number)
|
||||
text = QtWidgets.QApplication.translate('MainWindow', '{} users in chat')
|
||||
gc.status_message = text.format(str(count)).encode('utf-8')
|
||||
if not self.is_active_a_friend() and self.get_active_number() == group_number:
|
||||
self.update()
|
||||
|
||||
def send_gc_message(self, text):
|
||||
group_number = self.get_active_number()
|
||||
if text.startswith('/me '):
|
||||
text = text[4:]
|
||||
self._tox.group_action_send(group_number, text.encode('utf-8'))
|
||||
else:
|
||||
self._tox.group_message_send(group_number, text.encode('utf-8'))
|
||||
self._screen.messageEdit.clear()
|
||||
|
||||
def set_title(self, num):
|
||||
"""
|
||||
Set new title for gc
|
||||
"""
|
||||
gc = self._contacts[num]
|
||||
name = gc.name
|
||||
dialog = QtWidgets.QApplication.translate('MainWindow',
|
||||
"Enter new title for group {}:")
|
||||
dialog = dialog.format(name)
|
||||
title = QtWidgets.QApplication.translate('MainWindow',
|
||||
'Set title')
|
||||
text, ok = QtWidgets.QInputDialog.getText(None,
|
||||
title,
|
||||
dialog,
|
||||
QtWidgets.QLineEdit.Normal,
|
||||
name)
|
||||
if ok:
|
||||
text = text.encode('utf-8')
|
||||
self._tox.group_set_title(gc.number, text)
|
||||
self.new_gc_title(gc.number, text)
|
||||
|
||||
def get_group_chats(self):
|
||||
chats = filter(lambda x: type(x) is GroupChat, self._contacts)
|
||||
chats = map(lambda c: (c.name, c.number), chats)
|
||||
return list(chats)
|
||||
|
||||
def invite_friend(self, friend_num, group_number):
|
||||
friend = self._contacts[friend_num]
|
||||
self._tox.invite_friend(friend.number, group_number)
|
||||
|
||||
def get_gc_peer_name(self, text):
|
||||
gc = self.get_curr_friend()
|
||||
if type(gc) is not GroupChat:
|
||||
return '\t'
|
||||
names = gc.get_names()
|
||||
name = re.split("\s+", text)[-1]
|
||||
suggested_names = list(filter(lambda x: x.startswith(name), names))
|
||||
if not len(suggested_names):
|
||||
return '\t'
|
||||
return suggested_names[0][len(name):] + ': '
|
||||
|
||||
|
||||
def tox_factory(data=None, settings=None):
|
||||
"""
|
||||
|
@ -144,7 +144,8 @@ class Settings(dict, Singleton):
|
||||
'show_welcome_screen': True,
|
||||
'close_to_tray': False,
|
||||
'font': 'Times New Roman',
|
||||
'update': 1
|
||||
'update': 1,
|
||||
'group_notifications': True
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
|
@ -1,5 +1,4 @@
|
||||
from ctypes import c_char_p, Structure, c_bool, byref, c_int, c_size_t, POINTER, c_uint16, c_void_p, c_uint64
|
||||
from ctypes import create_string_buffer, ArgumentError, CFUNCTYPE, c_uint32, sizeof, c_uint8
|
||||
from ctypes import *
|
||||
from toxcore_enums_and_consts import *
|
||||
from toxav import ToxAV
|
||||
from libtox import LibToxCore
|
||||
@ -91,6 +90,11 @@ class Tox:
|
||||
self.file_recv_chunk_cb = None
|
||||
self.friend_lossy_packet_cb = None
|
||||
self.friend_lossless_packet_cb = None
|
||||
self.group_namelist_change_cb = None
|
||||
self.group_title_cb = None
|
||||
self.group_action_cb = None
|
||||
self.group_message_cb = None
|
||||
self.group_invite_cb = None
|
||||
|
||||
self.AV = ToxAV(self._tox_pointer)
|
||||
|
||||
@ -1509,3 +1513,89 @@ class Tox:
|
||||
return result
|
||||
elif tox_err_get_port == TOX_ERR_GET_PORT['NOT_BOUND']:
|
||||
raise RuntimeError('The instance was not bound to any port.')
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Group chats
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
def del_groupchat(self, groupnumber):
|
||||
result = Tox.libtoxcore.tox_del_groupchat(self._tox_pointer, c_int(groupnumber), None)
|
||||
return result
|
||||
|
||||
def group_peername(self, groupnumber, peernumber):
|
||||
buffer = create_string_buffer(TOX_MAX_NAME_LENGTH)
|
||||
result = Tox.libtoxcore.tox_group_peername(self._tox_pointer, c_int(groupnumber), c_int(peernumber),
|
||||
buffer, None)
|
||||
return str(buffer[:result], 'utf-8')
|
||||
|
||||
def invite_friend(self, friendnumber, groupnumber):
|
||||
result = Tox.libtoxcore.tox_invite_friend(self._tox_pointer, c_int(friendnumber),
|
||||
c_int(groupnumber), None)
|
||||
return result
|
||||
|
||||
def join_groupchat(self, friendnumber, data):
|
||||
result = Tox.libtoxcore.tox_join_groupchat(self._tox_pointer,
|
||||
c_int(friendnumber), c_char_p(data), c_uint16(len(data)), None)
|
||||
return result
|
||||
|
||||
def group_message_send(self, groupnumber, message):
|
||||
result = Tox.libtoxcore.tox_group_message_send(self._tox_pointer, c_int(groupnumber), c_char_p(message),
|
||||
c_uint16(len(message)), None)
|
||||
return result
|
||||
|
||||
def group_action_send(self, groupnumber, action):
|
||||
result = Tox.libtoxcore.tox_group_action_send(self._tox_pointer,
|
||||
c_int(groupnumber), c_char_p(action),
|
||||
c_uint16(len(action)), None)
|
||||
return result
|
||||
|
||||
def group_set_title(self, groupnumber, title):
|
||||
result = Tox.libtoxcore.tox_group_set_title(self._tox_pointer, c_int(groupnumber),
|
||||
c_char_p(title), c_uint8(len(title)), None)
|
||||
return result
|
||||
|
||||
def group_get_title(self, groupnumber):
|
||||
buffer = create_string_buffer(TOX_MAX_NAME_LENGTH)
|
||||
result = Tox.libtoxcore.tox_group_get_title(self._tox_pointer,
|
||||
c_int(groupnumber), buffer,
|
||||
c_uint32(TOX_MAX_NAME_LENGTH), None)
|
||||
return str(buffer[:result], 'utf-8')
|
||||
|
||||
def group_number_peers(self, groupnumber):
|
||||
result = Tox.libtoxcore.tox_group_number_peers(self._tox_pointer, c_int(groupnumber), None)
|
||||
return result
|
||||
|
||||
def add_av_groupchat(self):
|
||||
result = self.AV.libtoxav.toxav_add_av_groupchat(self._tox_pointer, None, None)
|
||||
return result
|
||||
|
||||
def join_av_groupchat(self, friendnumber, data):
|
||||
result = self.AV.libtoxav.toxav_join_av_groupchat(self._tox_pointer, c_int32(friendnumber),
|
||||
c_char_p(data), c_uint16(len(data)),
|
||||
None, None)
|
||||
return result
|
||||
|
||||
def callback_group_invite(self, callback, user_data=None):
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_int32, c_uint8, POINTER(c_uint8), c_uint16, c_void_p)
|
||||
self.group_invite_cb = c_callback(callback)
|
||||
Tox.libtoxcore.tox_callback_group_invite(self._tox_pointer, self.group_invite_cb, user_data)
|
||||
|
||||
def callback_group_message(self, callback, user_data=None):
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_int, c_int, c_char_p, c_uint16, c_void_p)
|
||||
self.group_message_cb = c_callback(callback)
|
||||
Tox.libtoxcore.tox_callback_group_message(self._tox_pointer, self.group_message_cb, user_data)
|
||||
|
||||
def callback_group_action(self, callback, user_data=None):
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_int, c_int, c_char_p, c_uint16, c_void_p)
|
||||
self.group_action_cb = c_callback(callback)
|
||||
Tox.libtoxcore.tox_callback_group_action(self._tox_pointer, self.group_action_cb, user_data)
|
||||
|
||||
def callback_group_title(self, callback, user_data=None):
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_int, c_int, c_char_p, c_uint8, c_void_p)
|
||||
self.group_title_cb = c_callback(callback)
|
||||
Tox.libtoxcore.tox_callback_group_title(self._tox_pointer, self.group_title_cb, user_data)
|
||||
|
||||
def callback_group_namelist_change(self, callback, user_data=None):
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_int, c_int, c_uint8, c_void_p)
|
||||
self.group_namelist_change_cb = c_callback(callback)
|
||||
Tox.libtoxcore.tox_callback_group_namelist_change(self._tox_pointer, self.group_namelist_change_cb, user_data)
|
||||
|
@ -188,6 +188,17 @@ TOX_ERR_GET_PORT = {
|
||||
'NOT_BOUND': 1,
|
||||
}
|
||||
|
||||
TOX_CHAT_CHANGE = {
|
||||
'PEER_ADD': 0,
|
||||
'PEER_DEL': 1,
|
||||
'PEER_NAME': 2
|
||||
}
|
||||
|
||||
TOX_GROUPCHAT_TYPE = {
|
||||
'TEXT': 0,
|
||||
'AV': 1
|
||||
}
|
||||
|
||||
TOX_PUBLIC_KEY_SIZE = 32
|
||||
|
||||
TOX_ADDRESS_SIZE = TOX_PUBLIC_KEY_SIZE + 6
|
||||
|
@ -84,98 +84,98 @@ can produce IP leak</source>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="118"/>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<source>Profile</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<source>Settings</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="417"/>
|
||||
<location filename="mainscreen.py" line="420"/>
|
||||
<source>About</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="117"/>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<source>Add contact</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<source>Privacy</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<source>Interface</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<source>Notifications</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<source>Network</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<source>About program</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="827"/>
|
||||
<location filename="profile.py" line="852"/>
|
||||
<source>User {} wants to add you to contact list. Message:
|
||||
{}</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="829"/>
|
||||
<location filename="profile.py" line="854"/>
|
||||
<source>Friend request</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="517"/>
|
||||
<location filename="mainscreen.py" line="523"/>
|
||||
<source>Choose file</source>
|
||||
<translation>Choose file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="583"/>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<source>Disallow auto accept</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="584"/>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<source>Allow auto accept</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="586"/>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<source>Set alias</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<location filename="mainscreen.py" line="598"/>
|
||||
<source>Clear history</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<location filename="mainscreen.py" line="609"/>
|
||||
<source>Remove friend</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="667"/>
|
||||
<location filename="profile.py" line="692"/>
|
||||
<source>Enter new alias for friend {} or leave empty to use friend's name:</source>
|
||||
<translation>Enter new alias for friend {} or leave empty to use friend's name:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<location filename="mainscreen.py" line="128"/>
|
||||
<source>Audio</source>
|
||||
<translation>Audio</translation>
|
||||
</message>
|
||||
@ -185,24 +185,24 @@ can produce IP leak</source>
|
||||
<translation type="obsolete">Find contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="799"/>
|
||||
<location filename="profile.py" line="824"/>
|
||||
<source>Friend added</source>
|
||||
<translation>Friend added</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="418"/>
|
||||
<location filename="mainscreen.py" line="421"/>
|
||||
<source>Toxygen is Tox client written on Python.
|
||||
Version: </source>
|
||||
<translation>Toxygen is Tox client written on Python.
|
||||
Version:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="800"/>
|
||||
<location filename="profile.py" line="825"/>
|
||||
<source>Friend added without sending friend request</source>
|
||||
<translation>Friend added without sending friend request</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="643"/>
|
||||
<location filename="mainscreen.py" line="665"/>
|
||||
<source>Choose folder</source>
|
||||
<translation>Choose folder</translation>
|
||||
</message>
|
||||
@ -217,47 +217,47 @@ Version:</translation>
|
||||
<translation type="obsolete">Send file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<source>Send message</source>
|
||||
<translation>Send message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<source>Start audio call with friend</source>
|
||||
<translation>Start audio call with friend</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="607"/>
|
||||
<location filename="mainscreen.py" line="625"/>
|
||||
<source>Plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<location filename="mainscreen.py" line="115"/>
|
||||
<source>List of plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="408"/>
|
||||
<location filename="mainscreen_widgets.py" line="412"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<location filename="mainscreen.py" line="135"/>
|
||||
<source>All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<source>Online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="601"/>
|
||||
<location filename="mainscreen.py" line="611"/>
|
||||
<source>Notes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="628"/>
|
||||
<location filename="mainscreen.py" line="650"/>
|
||||
<source>Notes about user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -307,7 +307,7 @@ Version:</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="315"/>
|
||||
<location filename="profile.py" line="327"/>
|
||||
<source>User {} is now known as {}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -317,32 +317,32 @@ Version:</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="111"/>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<source>Lock</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="491"/>
|
||||
<location filename="mainscreen.py" line="497"/>
|
||||
<source>Cannot lock app</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="493"/>
|
||||
<location filename="mainscreen.py" line="499"/>
|
||||
<source>Error. Profile password is not set.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<location filename="mainscreen.py" line="603"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="595"/>
|
||||
<location filename="mainscreen.py" line="604"/>
|
||||
<source>Status message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="596"/>
|
||||
<location filename="mainscreen.py" line="606"/>
|
||||
<source>Public key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -357,32 +357,32 @@ Version:</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<location filename="menu.py" line="667"/>
|
||||
<source>Choose folder with sticker pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="673"/>
|
||||
<location filename="menu.py" line="679"/>
|
||||
<source>Choose folder with smiley pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="141"/>
|
||||
<location filename="mainscreen.py" line="144"/>
|
||||
<source>Import plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="470"/>
|
||||
<location filename="mainscreen.py" line="476"/>
|
||||
<source>Choose folder with plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="479"/>
|
||||
<location filename="mainscreen.py" line="485"/>
|
||||
<source>Restart Toxygen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="481"/>
|
||||
<location filename="mainscreen.py" line="487"/>
|
||||
<source>Plugin will be loaded after restart</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -392,85 +392,125 @@ Version:</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="588"/>
|
||||
<location filename="mainscreen.py" line="597"/>
|
||||
<source>Chat history</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<source>Export as text</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="591"/>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<source>Export as HTML</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<source>Updates</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="134"/>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<source>Online first</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<location filename="mainscreen.py" line="139"/>
|
||||
<source>Online and by name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<location filename="mainscreen.py" line="140"/>
|
||||
<source>Online first and by name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<location filename="mainscreen.py" line="610"/>
|
||||
<source>Block friend</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="470"/>
|
||||
<location filename="mainscreen_widgets.py" line="474"/>
|
||||
<source>Not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="468"/>
|
||||
<location filename="mainscreen_widgets.py" line="472"/>
|
||||
<source>Text "{}" was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="142"/>
|
||||
<location filename="mainscreen.py" line="145"/>
|
||||
<source>Reload plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<source>Video</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1328"/>
|
||||
<source>User {} invites you to group chat. Accept?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1329"/>
|
||||
<source>Group chat invite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1365"/>
|
||||
<source>{} users in chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1386"/>
|
||||
<source>Enter new title for group {}:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="634"/>
|
||||
<source>Set title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<source>Create group chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="615"/>
|
||||
<source>Invite to group chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="633"/>
|
||||
<source>Leave chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MenuWindow</name>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="213"/>
|
||||
<location filename="mainscreen_widgets.py" line="217"/>
|
||||
<source>Send screenshot</source>
|
||||
<translation type="unfinished">Send screenshot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="214"/>
|
||||
<location filename="mainscreen_widgets.py" line="218"/>
|
||||
<source>Send file</source>
|
||||
<translation type="unfinished">Send file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="215"/>
|
||||
<location filename="mainscreen_widgets.py" line="219"/>
|
||||
<source>Add smiley</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="216"/>
|
||||
<location filename="mainscreen_widgets.py" line="220"/>
|
||||
<source>Send sticker</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -542,42 +582,42 @@ Version:</translation>
|
||||
<context>
|
||||
<name>PluginsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="957"/>
|
||||
<location filename="menu.py" line="967"/>
|
||||
<source>Plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="958"/>
|
||||
<location filename="menu.py" line="968"/>
|
||||
<source>Open selected plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>No GUI found for this plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="985"/>
|
||||
<location filename="menu.py" line="995"/>
|
||||
<source>No description available</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1001"/>
|
||||
<location filename="menu.py" line="1011"/>
|
||||
<source>Disable plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<location filename="menu.py" line="1013"/>
|
||||
<source>Enable plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="993"/>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<source>No plugins found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -718,67 +758,67 @@ Version:</translation>
|
||||
<context>
|
||||
<name>WelcomeScreen</name>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="291"/>
|
||||
<location filename="mainscreen_widgets.py" line="295"/>
|
||||
<source>Don't show again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="292"/>
|
||||
<location filename="mainscreen_widgets.py" line="296"/>
|
||||
<source>Tip of the day</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="297"/>
|
||||
<location filename="mainscreen_widgets.py" line="301"/>
|
||||
<source>Press Esc if you want hide app to tray.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="303"/>
|
||||
<location filename="mainscreen_widgets.py" line="307"/>
|
||||
<source>You can use Tox over Tor. For more info read <a href="https://wiki.tox.chat/users/tox_over_tor_tot">this post</a></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="309"/>
|
||||
<location filename="mainscreen_widgets.py" line="313"/>
|
||||
<source>Set profile password via Profile -> Settings. Password allows Toxygen encrypt your history and settings.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="300"/>
|
||||
<location filename="mainscreen_widgets.py" line="304"/>
|
||||
<source>Right click on screenshot button hides app to tray during screenshot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="306"/>
|
||||
<location filename="mainscreen_widgets.py" line="310"/>
|
||||
<source>Use Settings -> Interface to customize interface.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="315"/>
|
||||
<location filename="mainscreen_widgets.py" line="319"/>
|
||||
<source>Toxygen supports faux offline messages and file transfers. Send message or file to offline friend and he will get it later.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="327"/>
|
||||
<location filename="mainscreen_widgets.py" line="331"/>
|
||||
<source>Set new NoSpam to avoid spam friend requests: Profile -> Settings -> Set new NoSpam.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="321"/>
|
||||
<location filename="mainscreen_widgets.py" line="325"/>
|
||||
<source>Delete single message in chat: make right click on spinner or message time and choose "Delete" in menu</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="324"/>
|
||||
<location filename="mainscreen_widgets.py" line="328"/>
|
||||
<source>Use right click on inline image to save it</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="312"/>
|
||||
<location filename="mainscreen_widgets.py" line="316"/>
|
||||
<source>Since v0.1.3 Toxygen supports plugins. <a href="https://github.com/toxygen-project/toxygen/blob/master/docs/plugins.md">Read more</a></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="318"/>
|
||||
<location filename="mainscreen_widgets.py" line="322"/>
|
||||
<source>New in Toxygen 0.3.0:<br>Video calls<br>Python3.6 support<br>Migration to PyQt5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -786,17 +826,17 @@ Version:</translation>
|
||||
<context>
|
||||
<name>audioSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="794"/>
|
||||
<location filename="menu.py" line="800"/>
|
||||
<source>Audio settings</source>
|
||||
<translation>Audio settings</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="795"/>
|
||||
<location filename="menu.py" line="801"/>
|
||||
<source>Input device:</source>
|
||||
<translation>Input device:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="796"/>
|
||||
<location filename="menu.py" line="802"/>
|
||||
<source>Output device:</source>
|
||||
<translation>Output device:</translation>
|
||||
</message>
|
||||
@ -804,32 +844,32 @@ Version:</translation>
|
||||
<context>
|
||||
<name>incoming_call</name>
|
||||
<message>
|
||||
<location filename="profile.py" line="1223"/>
|
||||
<location filename="profile.py" line="1250"/>
|
||||
<source>Incoming video call</source>
|
||||
<translation>Incoming video call</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1225"/>
|
||||
<location filename="profile.py" line="1252"/>
|
||||
<source>Incoming audio call</source>
|
||||
<translation>Incoming audio call</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1206"/>
|
||||
<location filename="profile.py" line="1233"/>
|
||||
<source>Outgoing video call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1208"/>
|
||||
<location filename="profile.py" line="1235"/>
|
||||
<source>Outgoing audio call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1254"/>
|
||||
<location filename="profile.py" line="1281"/>
|
||||
<source>Call declined</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1256"/>
|
||||
<location filename="profile.py" line="1283"/>
|
||||
<source>Call finished</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -837,82 +877,82 @@ Version:</translation>
|
||||
<context>
|
||||
<name>interfaceForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="644"/>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<source>Interface settings</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="645"/>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<source>Theme:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="646"/>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<source>Language:</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="647"/>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<source>Smileys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="648"/>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<source>Smiley pack:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<source>Mirror mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<source>Messages font size:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart app to apply settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart required</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<location filename="menu.py" line="657"/>
|
||||
<source>Select unread messages notification color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<location filename="menu.py" line="658"/>
|
||||
<source>Compact contact list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<location filename="menu.py" line="659"/>
|
||||
<source>Import smiley pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<location filename="menu.py" line="660"/>
|
||||
<source>Import sticker pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="643"/>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<source>Show avatars in chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<source>Close to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<location filename="menu.py" line="662"/>
|
||||
<source>Select font</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -993,25 +1033,30 @@ Version:</translation>
|
||||
<context>
|
||||
<name>notificationsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="534"/>
|
||||
<location filename="menu.py" line="538"/>
|
||||
<source>Notification settings</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="535"/>
|
||||
<location filename="menu.py" line="539"/>
|
||||
<source>Enable notifications</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="536"/>
|
||||
<location filename="menu.py" line="541"/>
|
||||
<source>Enable call's sound</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="537"/>
|
||||
<location filename="menu.py" line="542"/>
|
||||
<source>Enable sound notifications</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="540"/>
|
||||
<source>Notify about all messages in groups</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>pass</name>
|
||||
@ -1155,57 +1200,57 @@ Version:</translation>
|
||||
<context>
|
||||
<name>updateSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="1041"/>
|
||||
<location filename="menu.py" line="1051"/>
|
||||
<source>Update settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1042"/>
|
||||
<location filename="menu.py" line="1052"/>
|
||||
<source>Select update mode:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1043"/>
|
||||
<location filename="menu.py" line="1053"/>
|
||||
<source>Update Toxygen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1044"/>
|
||||
<location filename="menu.py" line="1054"/>
|
||||
<source>Disabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1045"/>
|
||||
<location filename="menu.py" line="1055"/>
|
||||
<source>Manual</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1046"/>
|
||||
<location filename="menu.py" line="1056"/>
|
||||
<source>Auto</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1065"/>
|
||||
<location filename="menu.py" line="1075"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1058"/>
|
||||
<location filename="menu.py" line="1068"/>
|
||||
<source>Problems with internet connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1066"/>
|
||||
<location filename="menu.py" line="1076"/>
|
||||
<source>Updater not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1077"/>
|
||||
<location filename="menu.py" line="1087"/>
|
||||
<source>No updates found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1078"/>
|
||||
<location filename="menu.py" line="1088"/>
|
||||
<source>Toxygen is up to date</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1213,22 +1258,22 @@ Version:</translation>
|
||||
<context>
|
||||
<name>videoSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="876"/>
|
||||
<location filename="menu.py" line="882"/>
|
||||
<source>Video settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="877"/>
|
||||
<location filename="menu.py" line="883"/>
|
||||
<source>Device:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="856"/>
|
||||
<location filename="menu.py" line="862"/>
|
||||
<source>Desktop</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="878"/>
|
||||
<location filename="menu.py" line="884"/>
|
||||
<source>Select region</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -86,58 +86,58 @@ peut entrainer une fuite d'IP</translation>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="118"/>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<source>Profile</source>
|
||||
<translation>Profil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<source>Settings</source>
|
||||
<translation>Paramètres</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="417"/>
|
||||
<location filename="mainscreen.py" line="420"/>
|
||||
<source>About</source>
|
||||
<translation>À Propos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="117"/>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<source>Add contact</source>
|
||||
<translation>Ajouter un contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<source>Privacy</source>
|
||||
<translation>Confidentialité</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<source>Interface</source>
|
||||
<translation>Interface</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<source>Notifications</source>
|
||||
<translation>Notifications</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<source>Network</source>
|
||||
<translation>Réseau</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<source>About program</source>
|
||||
<translation>À propos de toxygen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="827"/>
|
||||
<location filename="profile.py" line="852"/>
|
||||
<source>User {} wants to add you to contact list. Message:
|
||||
{}</source>
|
||||
<translation>L'Utilisateur {} veut vous ajouter à sa liste de contacts. Message : {}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="829"/>
|
||||
<location filename="profile.py" line="854"/>
|
||||
<source>Friend request</source>
|
||||
<translation>Demande de contact</translation>
|
||||
</message>
|
||||
@ -147,27 +147,27 @@ peut entrainer une fuite d'IP</translation>
|
||||
<translation type="obsolete">Toxygen est un client Tox écris en Python 2.7. Version : </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="517"/>
|
||||
<location filename="mainscreen.py" line="523"/>
|
||||
<source>Choose file</source>
|
||||
<translation>Sélectionner un fichier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="583"/>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<source>Disallow auto accept</source>
|
||||
<translation>Désactiver l'auto-réception</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="584"/>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<source>Allow auto accept</source>
|
||||
<translation>Activer l'auto-réception</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="586"/>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<source>Set alias</source>
|
||||
<translation>Définir un alias</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<location filename="mainscreen.py" line="598"/>
|
||||
<source>Clear history</source>
|
||||
<translation>Vider l'historique</translation>
|
||||
</message>
|
||||
@ -177,17 +177,17 @@ peut entrainer une fuite d'IP</translation>
|
||||
<translation type="obsolete">Copier la clé publique</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<location filename="mainscreen.py" line="609"/>
|
||||
<source>Remove friend</source>
|
||||
<translation>Retirer ce contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="667"/>
|
||||
<location filename="profile.py" line="692"/>
|
||||
<source>Enter new alias for friend {} or leave empty to use friend's name:</source>
|
||||
<translation>Entrez un nouvel alias pour le contact {} ou laissez vide pour garder son nom de base :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<location filename="mainscreen.py" line="128"/>
|
||||
<source>Audio</source>
|
||||
<translation>Audio</translation>
|
||||
</message>
|
||||
@ -197,24 +197,24 @@ peut entrainer une fuite d'IP</translation>
|
||||
<translation type="obsolete">Trouver le contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="799"/>
|
||||
<location filename="profile.py" line="824"/>
|
||||
<source>Friend added</source>
|
||||
<translation>Contact ajouté</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="418"/>
|
||||
<location filename="mainscreen.py" line="421"/>
|
||||
<source>Toxygen is Tox client written on Python.
|
||||
Version: </source>
|
||||
<translation>Toxygen est un client Tox écrit en Python.
|
||||
Version :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="800"/>
|
||||
<location filename="profile.py" line="825"/>
|
||||
<source>Friend added without sending friend request</source>
|
||||
<translation>Contact ajouté sans envoi de demande</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="643"/>
|
||||
<location filename="mainscreen.py" line="665"/>
|
||||
<source>Choose folder</source>
|
||||
<translation>Sélectionner un dossier</translation>
|
||||
</message>
|
||||
@ -229,47 +229,47 @@ Version :</translation>
|
||||
<translation type="obsolete">Envoyer le fichier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<source>Send message</source>
|
||||
<translation>Envoyer le message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<source>Start audio call with friend</source>
|
||||
<translation>Démarrer un appel audio avec un ami</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="607"/>
|
||||
<location filename="mainscreen.py" line="625"/>
|
||||
<source>Plugins</source>
|
||||
<translation>Plugins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<location filename="mainscreen.py" line="115"/>
|
||||
<source>List of plugins</source>
|
||||
<translation>Liste de plugins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="408"/>
|
||||
<location filename="mainscreen_widgets.py" line="412"/>
|
||||
<source>Search</source>
|
||||
<translation>Chercher</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<location filename="mainscreen.py" line="135"/>
|
||||
<source>All</source>
|
||||
<translation>Tous</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<source>Online</source>
|
||||
<translation>En ligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="601"/>
|
||||
<location filename="mainscreen.py" line="611"/>
|
||||
<source>Notes</source>
|
||||
<translation>Notes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="628"/>
|
||||
<location filename="mainscreen.py" line="650"/>
|
||||
<source>Notes about user</source>
|
||||
<translation>Notes sur l'utilisateur</translation>
|
||||
</message>
|
||||
@ -319,7 +319,7 @@ Version :</translation>
|
||||
<translation>Sauvegarder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="315"/>
|
||||
<location filename="profile.py" line="327"/>
|
||||
<source>User {} is now known as {}</source>
|
||||
<translation>L'utilisateur {} s'appelle désormais {}</translation>
|
||||
</message>
|
||||
@ -329,32 +329,32 @@ Version :</translation>
|
||||
<translation>Supprimer ce message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="111"/>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<source>Lock</source>
|
||||
<translation>Verrouiller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="491"/>
|
||||
<location filename="mainscreen.py" line="497"/>
|
||||
<source>Cannot lock app</source>
|
||||
<translation>Impossible de verrouiller l'application</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="493"/>
|
||||
<location filename="mainscreen.py" line="499"/>
|
||||
<source>Error. Profile password is not set.</source>
|
||||
<translation>Erreur. Le profil n'a pas de mot de passe.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<location filename="mainscreen.py" line="603"/>
|
||||
<source>Name</source>
|
||||
<translation>Nom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="595"/>
|
||||
<location filename="mainscreen.py" line="604"/>
|
||||
<source>Status message</source>
|
||||
<translation>Status</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="596"/>
|
||||
<location filename="mainscreen.py" line="606"/>
|
||||
<source>Public key</source>
|
||||
<translation>Clé publique</translation>
|
||||
</message>
|
||||
@ -369,32 +369,32 @@ Version :</translation>
|
||||
<translation>Un profil ayant ce nom existe déjà</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<location filename="menu.py" line="667"/>
|
||||
<source>Choose folder with sticker pack</source>
|
||||
<translation>Sélectionner le dossier contenant le pack de stickers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="673"/>
|
||||
<location filename="menu.py" line="679"/>
|
||||
<source>Choose folder with smiley pack</source>
|
||||
<translation>Sélectionner le dossier contenant le pack de smileys</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="141"/>
|
||||
<location filename="mainscreen.py" line="144"/>
|
||||
<source>Import plugin</source>
|
||||
<translation>Importer un plugin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="470"/>
|
||||
<location filename="mainscreen.py" line="476"/>
|
||||
<source>Choose folder with plugin</source>
|
||||
<translation>Sélectionner un dossier avec des plugins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="479"/>
|
||||
<location filename="mainscreen.py" line="485"/>
|
||||
<source>Restart Toxygen</source>
|
||||
<translation>Redémarrer Toxyger</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="481"/>
|
||||
<location filename="mainscreen.py" line="487"/>
|
||||
<source>Plugin will be loaded after restart</source>
|
||||
<translation>Le plugin sera chargé après le redémarrage</translation>
|
||||
</message>
|
||||
@ -404,85 +404,125 @@ Version :</translation>
|
||||
<translation>Citer le texte sélectionné</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="588"/>
|
||||
<location filename="mainscreen.py" line="597"/>
|
||||
<source>Chat history</source>
|
||||
<translation>Historique de la conversation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<source>Export as text</source>
|
||||
<translation>Exporter comme texte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="591"/>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<source>Export as HTML</source>
|
||||
<translation>Exporter comme HTML</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<source>Updates</source>
|
||||
<translation>Mises à jour</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="134"/>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<source>Online first</source>
|
||||
<translation>En ligne d'abord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<location filename="mainscreen.py" line="139"/>
|
||||
<source>Online and by name</source>
|
||||
<translation>En ligne et par nom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<location filename="mainscreen.py" line="140"/>
|
||||
<source>Online first and by name</source>
|
||||
<translation>En ligne d'abord puis par nom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<location filename="mainscreen.py" line="610"/>
|
||||
<source>Block friend</source>
|
||||
<translation>Bloquer le contact</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="470"/>
|
||||
<location filename="mainscreen_widgets.py" line="474"/>
|
||||
<source>Not found</source>
|
||||
<translation>Non trouvé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="468"/>
|
||||
<location filename="mainscreen_widgets.py" line="472"/>
|
||||
<source>Text "{}" was not found</source>
|
||||
<translation>Le texte "{}" n'a pas été trouvé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="142"/>
|
||||
<location filename="mainscreen.py" line="145"/>
|
||||
<source>Reload plugins</source>
|
||||
<translation>Recharger les plugins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<source>Video</source>
|
||||
<translation>Vidéo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1328"/>
|
||||
<source>User {} invites you to group chat. Accept?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1329"/>
|
||||
<source>Group chat invite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1365"/>
|
||||
<source>{} users in chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1386"/>
|
||||
<source>Enter new title for group {}:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="634"/>
|
||||
<source>Set title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<source>Create group chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="615"/>
|
||||
<source>Invite to group chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="633"/>
|
||||
<source>Leave chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MenuWindow</name>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="213"/>
|
||||
<location filename="mainscreen_widgets.py" line="217"/>
|
||||
<source>Send screenshot</source>
|
||||
<translation>Envoyer une capture d'écran</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="214"/>
|
||||
<location filename="mainscreen_widgets.py" line="218"/>
|
||||
<source>Send file</source>
|
||||
<translation>Envoyer un fichier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="215"/>
|
||||
<location filename="mainscreen_widgets.py" line="219"/>
|
||||
<source>Add smiley</source>
|
||||
<translation>Ajouter un smiley</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="216"/>
|
||||
<location filename="mainscreen_widgets.py" line="220"/>
|
||||
<source>Send sticker</source>
|
||||
<translation>Ajouter un sticker</translation>
|
||||
</message>
|
||||
@ -554,42 +594,42 @@ Version :</translation>
|
||||
<context>
|
||||
<name>PluginsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="957"/>
|
||||
<location filename="menu.py" line="967"/>
|
||||
<source>Plugins</source>
|
||||
<translation>Plugins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="958"/>
|
||||
<location filename="menu.py" line="968"/>
|
||||
<source>Open selected plugin</source>
|
||||
<translation>Ouvrir le plugin sélectionné</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>No GUI found for this plugin</source>
|
||||
<translation>Pas d'interface pour ce plugin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="985"/>
|
||||
<location filename="menu.py" line="995"/>
|
||||
<source>No description available</source>
|
||||
<translation>Pas de description</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1001"/>
|
||||
<location filename="menu.py" line="1011"/>
|
||||
<source>Disable plugin</source>
|
||||
<translation>Désactiver le plugin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<location filename="menu.py" line="1013"/>
|
||||
<source>Enable plugin</source>
|
||||
<translation>Activer le plugin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="993"/>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<source>No plugins found</source>
|
||||
<translation>Pas de plugin trouvé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>Error</source>
|
||||
<translation>Erreur</translation>
|
||||
</message>
|
||||
@ -730,67 +770,67 @@ Version :</translation>
|
||||
<context>
|
||||
<name>WelcomeScreen</name>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="291"/>
|
||||
<location filename="mainscreen_widgets.py" line="295"/>
|
||||
<source>Don't show again</source>
|
||||
<translation>Ne plus montrer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="292"/>
|
||||
<location filename="mainscreen_widgets.py" line="296"/>
|
||||
<source>Tip of the day</source>
|
||||
<translation>Astuce du jou</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="297"/>
|
||||
<location filename="mainscreen_widgets.py" line="301"/>
|
||||
<source>Press Esc if you want hide app to tray.</source>
|
||||
<translation>Appuyez sur échap pour réduire l'application.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="303"/>
|
||||
<location filename="mainscreen_widgets.py" line="307"/>
|
||||
<source>You can use Tox over Tor. For more info read <a href="https://wiki.tox.chat/users/tox_over_tor_tot">this post</a></source>
|
||||
<translation>Vous pouvez utiliser Tox avec Tor. Pour plus d'informations, voir <a href="https://wiki.tox.chat/users/tox_over_tor_tot">cet article</a></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="309"/>
|
||||
<location filename="mainscreen_widgets.py" line="313"/>
|
||||
<source>Set profile password via Profile -> Settings. Password allows Toxygen encrypt your history and settings.</source>
|
||||
<translation>Vous pouvez mettre un mot de passe dans Profil -> Paramètres -> Mot de passe pour que toxygen encrypte votre historique et vos paramètres.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="300"/>
|
||||
<location filename="mainscreen_widgets.py" line="304"/>
|
||||
<source>Right click on screenshot button hides app to tray during screenshot.</source>
|
||||
<translation>Faire un clic droit sur le bouton de capture d'écran réduit l'application avant de capturer l'écran.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="306"/>
|
||||
<location filename="mainscreen_widgets.py" line="310"/>
|
||||
<source>Use Settings -> Interface to customize interface.</source>
|
||||
<translation>Vous pouvez customizer votre interface dans Paramètres -> Interface.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="315"/>
|
||||
<location filename="mainscreen_widgets.py" line="319"/>
|
||||
<source>Toxygen supports faux offline messages and file transfers. Send message or file to offline friend and he will get it later.</source>
|
||||
<translation>Toxygen permet d'envoyer des messages et fichiers en différé. Envoyez des messages ou fichiers à un contact hors ligne et il le recevra plus tard.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="327"/>
|
||||
<location filename="mainscreen_widgets.py" line="331"/>
|
||||
<source>Set new NoSpam to avoid spam friend requests: Profile -> Settings -> Set new NoSpam.</source>
|
||||
<translation>Vous pouvez empecher le spam dans les demandes de contact avec Profil -> Paramètres -> Nouveau NoSpam.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="321"/>
|
||||
<location filename="mainscreen_widgets.py" line="325"/>
|
||||
<source>Delete single message in chat: make right click on spinner or message time and choose "Delete" in menu</source>
|
||||
<translation>Pour supprimer un seul message dans une conversation, faites un clic droit sur l'heure du message et sélectionnez "Supprimer ce message" dans le menu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="324"/>
|
||||
<location filename="mainscreen_widgets.py" line="328"/>
|
||||
<source>Use right click on inline image to save it</source>
|
||||
<translation>Pour sauvegarder une image intégrée, faites un clic droit dessus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="312"/>
|
||||
<location filename="mainscreen_widgets.py" line="316"/>
|
||||
<source>Since v0.1.3 Toxygen supports plugins. <a href="https://github.com/toxygen-project/toxygen/blob/master/docs/plugins.md">Read more</a></source>
|
||||
<translation>Depuis la version 0.1.3 Toxygen supporte les plugins. <a href="https://github.com/toxygen-project/toxygen/blob/master/docs/plugins.md">En savoir plus</a></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="318"/>
|
||||
<location filename="mainscreen_widgets.py" line="322"/>
|
||||
<source>New in Toxygen 0.3.0:<br>Video calls<br>Python3.6 support<br>Migration to PyQt5</source>
|
||||
<translation>Nouveau dans Toxygen 0.3.0 : <br>Appels vidéo<br>Support de Python3.6<br>Migration vers PyQt5</translation>
|
||||
</message>
|
||||
@ -798,17 +838,17 @@ Version :</translation>
|
||||
<context>
|
||||
<name>audioSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="794"/>
|
||||
<location filename="menu.py" line="800"/>
|
||||
<source>Audio settings</source>
|
||||
<translation>Paramètres audio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="795"/>
|
||||
<location filename="menu.py" line="801"/>
|
||||
<source>Input device:</source>
|
||||
<translation>Péripherique d'entrée :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="796"/>
|
||||
<location filename="menu.py" line="802"/>
|
||||
<source>Output device:</source>
|
||||
<translation>Péripherique de sortie :</translation>
|
||||
</message>
|
||||
@ -816,32 +856,32 @@ Version :</translation>
|
||||
<context>
|
||||
<name>incoming_call</name>
|
||||
<message>
|
||||
<location filename="profile.py" line="1223"/>
|
||||
<location filename="profile.py" line="1250"/>
|
||||
<source>Incoming video call</source>
|
||||
<translation>Appel vidéo entrant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1225"/>
|
||||
<location filename="profile.py" line="1252"/>
|
||||
<source>Incoming audio call</source>
|
||||
<translation>Appel audio entrant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1206"/>
|
||||
<location filename="profile.py" line="1233"/>
|
||||
<source>Outgoing video call</source>
|
||||
<translation>Appel vidéo sortant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1208"/>
|
||||
<location filename="profile.py" line="1235"/>
|
||||
<source>Outgoing audio call</source>
|
||||
<translation>Appel audio sortant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1254"/>
|
||||
<location filename="profile.py" line="1281"/>
|
||||
<source>Call declined</source>
|
||||
<translation>Appel refusé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1256"/>
|
||||
<location filename="profile.py" line="1283"/>
|
||||
<source>Call finished</source>
|
||||
<translation>Appel terminé</translation>
|
||||
</message>
|
||||
@ -849,82 +889,82 @@ Version :</translation>
|
||||
<context>
|
||||
<name>interfaceForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="644"/>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<source>Interface settings</source>
|
||||
<translation>Paramètres de l'interface</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="645"/>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<source>Theme:</source>
|
||||
<translation>Thème :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="646"/>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<source>Language:</source>
|
||||
<translation>Langue :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="647"/>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<source>Smileys</source>
|
||||
<translation>Smileys</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="648"/>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<source>Smiley pack:</source>
|
||||
<translation>Pack de smileys :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<source>Mirror mode</source>
|
||||
<translation>Mode miroir</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<source>Messages font size:</source>
|
||||
<translation>Taille des messages :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart app to apply settings</source>
|
||||
<translation>Redémarrer toxygen pour appliquer les paramètres</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart required</source>
|
||||
<translation>Redémarrage nécessaire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<location filename="menu.py" line="657"/>
|
||||
<source>Select unread messages notification color</source>
|
||||
<translation>Sélectionner la couleur des messages non-lus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<location filename="menu.py" line="658"/>
|
||||
<source>Compact contact list</source>
|
||||
<translation>Liste de contacts compacte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<location filename="menu.py" line="659"/>
|
||||
<source>Import smiley pack</source>
|
||||
<translation>Importer un pack de smileys</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<location filename="menu.py" line="660"/>
|
||||
<source>Import sticker pack</source>
|
||||
<translation>Importer un pack de stickers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="643"/>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<source>Show avatars in chat</source>
|
||||
<translation>Montrer les avatars dans la conversation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<source>Close to tray</source>
|
||||
<translation>Réduire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<location filename="menu.py" line="662"/>
|
||||
<source>Select font</source>
|
||||
<translation>Sélectionner la police</translation>
|
||||
</message>
|
||||
@ -1010,25 +1050,30 @@ Version :</translation>
|
||||
<context>
|
||||
<name>notificationsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="534"/>
|
||||
<location filename="menu.py" line="538"/>
|
||||
<source>Notification settings</source>
|
||||
<translation>Paramètres de notification</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="535"/>
|
||||
<location filename="menu.py" line="539"/>
|
||||
<source>Enable notifications</source>
|
||||
<translation>Activer les notifications</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="536"/>
|
||||
<location filename="menu.py" line="541"/>
|
||||
<source>Enable call's sound</source>
|
||||
<translation>Activer les sons d'appel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="537"/>
|
||||
<location filename="menu.py" line="542"/>
|
||||
<source>Enable sound notifications</source>
|
||||
<translation>Activer les sons de notifications</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="540"/>
|
||||
<source>Notify about all messages in groups</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>pass</name>
|
||||
@ -1172,57 +1217,57 @@ Version :</translation>
|
||||
<context>
|
||||
<name>updateSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="1041"/>
|
||||
<location filename="menu.py" line="1051"/>
|
||||
<source>Update settings</source>
|
||||
<translation>Paramètres de mise à jour</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1042"/>
|
||||
<location filename="menu.py" line="1052"/>
|
||||
<source>Select update mode:</source>
|
||||
<translation>Sélectionner le mode de mise à jour :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1043"/>
|
||||
<location filename="menu.py" line="1053"/>
|
||||
<source>Update Toxygen</source>
|
||||
<translation>Mettre à jour toxygen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1044"/>
|
||||
<location filename="menu.py" line="1054"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Désactivé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1045"/>
|
||||
<location filename="menu.py" line="1055"/>
|
||||
<source>Manual</source>
|
||||
<translation>Manuel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1046"/>
|
||||
<location filename="menu.py" line="1056"/>
|
||||
<source>Auto</source>
|
||||
<translation>Automatique</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1065"/>
|
||||
<location filename="menu.py" line="1075"/>
|
||||
<source>Error</source>
|
||||
<translation>Erreur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1058"/>
|
||||
<location filename="menu.py" line="1068"/>
|
||||
<source>Problems with internet connection</source>
|
||||
<translation>Il y à des problèmes avec votre connexion internet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1066"/>
|
||||
<location filename="menu.py" line="1076"/>
|
||||
<source>Updater not found</source>
|
||||
<translation>Updater non trouvé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1077"/>
|
||||
<location filename="menu.py" line="1087"/>
|
||||
<source>No updates found</source>
|
||||
<translation>Pas de mises à jour trouvés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1078"/>
|
||||
<location filename="menu.py" line="1088"/>
|
||||
<source>Toxygen is up to date</source>
|
||||
<translation>Toxygen est à jour</translation>
|
||||
</message>
|
||||
@ -1230,22 +1275,22 @@ Version :</translation>
|
||||
<context>
|
||||
<name>videoSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="876"/>
|
||||
<location filename="menu.py" line="882"/>
|
||||
<source>Video settings</source>
|
||||
<translation>Paramètres vidéo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="877"/>
|
||||
<location filename="menu.py" line="883"/>
|
||||
<source>Device:</source>
|
||||
<translation>Périphérique :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="856"/>
|
||||
<location filename="menu.py" line="862"/>
|
||||
<source>Desktop</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="878"/>
|
||||
<location filename="menu.py" line="884"/>
|
||||
<source>Select region</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
Binary file not shown.
@ -87,84 +87,84 @@ can produce IP leak</source>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="118"/>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<source>Profile</source>
|
||||
<translation>Профиль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<source>Settings</source>
|
||||
<translation>Настройки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="417"/>
|
||||
<location filename="mainscreen.py" line="420"/>
|
||||
<source>About</source>
|
||||
<translation>О программе</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="117"/>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<source>Add contact</source>
|
||||
<translation>Добавить контакт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<source>Privacy</source>
|
||||
<translation>Приватность</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<source>Interface</source>
|
||||
<translation>Интерфейс</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<source>Notifications</source>
|
||||
<translation>Уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<source>Network</source>
|
||||
<translation>Сеть</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<source>About program</source>
|
||||
<translation>О программе</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="827"/>
|
||||
<location filename="profile.py" line="852"/>
|
||||
<source>User {} wants to add you to contact list. Message:
|
||||
{}</source>
|
||||
<translation>Пользователь {} хочет добавить Вас в список контактов. Сообщение:
|
||||
{}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="829"/>
|
||||
<location filename="profile.py" line="854"/>
|
||||
<source>Friend request</source>
|
||||
<translation>Запрос на добавление в друзья</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="517"/>
|
||||
<location filename="mainscreen.py" line="523"/>
|
||||
<source>Choose file</source>
|
||||
<translation>Выберите файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="583"/>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<source>Disallow auto accept</source>
|
||||
<translation>Запретить автоматическое получение файлов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="584"/>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<source>Allow auto accept</source>
|
||||
<translation>Разрешить автоматическое получение файлов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="586"/>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<source>Set alias</source>
|
||||
<translation>Изменить псевдоним</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<location filename="mainscreen.py" line="598"/>
|
||||
<source>Clear history</source>
|
||||
<translation>Очистить историю</translation>
|
||||
</message>
|
||||
@ -174,17 +174,17 @@ can produce IP leak</source>
|
||||
<translation type="obsolete">Копировать публичный ключ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<location filename="mainscreen.py" line="609"/>
|
||||
<source>Remove friend</source>
|
||||
<translation>Удалить друга</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="667"/>
|
||||
<location filename="profile.py" line="692"/>
|
||||
<source>Enter new alias for friend {} or leave empty to use friend's name:</source>
|
||||
<translation>Введите новый псевдоним для друга {} или оставьте пустым для использования его имени:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<location filename="mainscreen.py" line="128"/>
|
||||
<source>Audio</source>
|
||||
<translation>Аудио</translation>
|
||||
</message>
|
||||
@ -194,23 +194,23 @@ can produce IP leak</source>
|
||||
<translation type="obsolete">Найти контакт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="799"/>
|
||||
<location filename="profile.py" line="824"/>
|
||||
<source>Friend added</source>
|
||||
<translation>Друг добавлен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="418"/>
|
||||
<location filename="mainscreen.py" line="421"/>
|
||||
<source>Toxygen is Tox client written on Python.
|
||||
Version: </source>
|
||||
<translation>Toxygen - клиент для мессенджера Tox, написанный на Python. Версия: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="800"/>
|
||||
<location filename="profile.py" line="825"/>
|
||||
<source>Friend added without sending friend request</source>
|
||||
<translation>Друг добавлен без отправки запроса на добавление в друзья</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="643"/>
|
||||
<location filename="mainscreen.py" line="665"/>
|
||||
<source>Choose folder</source>
|
||||
<translation>Выбрать папку</translation>
|
||||
</message>
|
||||
@ -225,47 +225,47 @@ Version: </source>
|
||||
<translation type="obsolete">Отправить файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<source>Send message</source>
|
||||
<translation>Отправить сообщение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<source>Start audio call with friend</source>
|
||||
<translation>Начать аудиозвонок с другом</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="607"/>
|
||||
<location filename="mainscreen.py" line="625"/>
|
||||
<source>Plugins</source>
|
||||
<translation>Плагины</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<location filename="mainscreen.py" line="115"/>
|
||||
<source>List of plugins</source>
|
||||
<translation>Список плагинов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="408"/>
|
||||
<location filename="mainscreen_widgets.py" line="412"/>
|
||||
<source>Search</source>
|
||||
<translation>Поиск</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<location filename="mainscreen.py" line="135"/>
|
||||
<source>All</source>
|
||||
<translation>Все</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<source>Online</source>
|
||||
<translation>Онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="601"/>
|
||||
<location filename="mainscreen.py" line="611"/>
|
||||
<source>Notes</source>
|
||||
<translation>Заметки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="628"/>
|
||||
<location filename="mainscreen.py" line="650"/>
|
||||
<source>Notes about user</source>
|
||||
<translation>Заметки о пользователе</translation>
|
||||
</message>
|
||||
@ -315,7 +315,7 @@ Version: </source>
|
||||
<translation>Сохранить</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="315"/>
|
||||
<location filename="profile.py" line="327"/>
|
||||
<source>User {} is now known as {}</source>
|
||||
<translation>Пользователь {} сейчас известен как {}</translation>
|
||||
</message>
|
||||
@ -325,32 +325,32 @@ Version: </source>
|
||||
<translation>Удалить сообщение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="111"/>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<source>Lock</source>
|
||||
<translation>Заблокировать</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="491"/>
|
||||
<location filename="mainscreen.py" line="497"/>
|
||||
<source>Cannot lock app</source>
|
||||
<translation>Невозможно заблокировать приложение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="493"/>
|
||||
<location filename="mainscreen.py" line="499"/>
|
||||
<source>Error. Profile password is not set.</source>
|
||||
<translation>Ошибка. Пароль профиля не установлен.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<location filename="mainscreen.py" line="603"/>
|
||||
<source>Name</source>
|
||||
<translation>Имя</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="595"/>
|
||||
<location filename="mainscreen.py" line="604"/>
|
||||
<source>Status message</source>
|
||||
<translation>Статус</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="596"/>
|
||||
<location filename="mainscreen.py" line="606"/>
|
||||
<source>Public key</source>
|
||||
<translation>Публичный ключ</translation>
|
||||
</message>
|
||||
@ -365,32 +365,32 @@ Version: </source>
|
||||
<translation>Профиль с данным именем уже существует</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<location filename="menu.py" line="667"/>
|
||||
<source>Choose folder with sticker pack</source>
|
||||
<translation>Выберите папку в паком стикеров</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="673"/>
|
||||
<location filename="menu.py" line="679"/>
|
||||
<source>Choose folder with smiley pack</source>
|
||||
<translation>Выберите папку с паком смайлов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="141"/>
|
||||
<location filename="mainscreen.py" line="144"/>
|
||||
<source>Import plugin</source>
|
||||
<translation>Импортировать плагин</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="470"/>
|
||||
<location filename="mainscreen.py" line="476"/>
|
||||
<source>Choose folder with plugin</source>
|
||||
<translation>Выберите папку с плагином</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="479"/>
|
||||
<location filename="mainscreen.py" line="485"/>
|
||||
<source>Restart Toxygen</source>
|
||||
<translation>Перезапустите Toxygen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="481"/>
|
||||
<location filename="mainscreen.py" line="487"/>
|
||||
<source>Plugin will be loaded after restart</source>
|
||||
<translation>Плагин будет загружен после перезапуска</translation>
|
||||
</message>
|
||||
@ -400,65 +400,105 @@ Version: </source>
|
||||
<translation>Цитировать выбранный текст</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="588"/>
|
||||
<location filename="mainscreen.py" line="597"/>
|
||||
<source>Chat history</source>
|
||||
<translation>История чата</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<source>Export as text</source>
|
||||
<translation>Экспортировать как текст</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="591"/>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<source>Export as HTML</source>
|
||||
<translation>Экспортировать как HTML</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<source>Updates</source>
|
||||
<translation>Обновления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="134"/>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<source>Online first</source>
|
||||
<translation>Сначала онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<location filename="mainscreen.py" line="139"/>
|
||||
<source>Online and by name</source>
|
||||
<translation>Онлайн и по имени</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<location filename="mainscreen.py" line="140"/>
|
||||
<source>Online first and by name</source>
|
||||
<translation>Сначала онлайн и по имени</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<location filename="mainscreen.py" line="610"/>
|
||||
<source>Block friend</source>
|
||||
<translation>Заблокировать друга</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="470"/>
|
||||
<location filename="mainscreen_widgets.py" line="474"/>
|
||||
<source>Not found</source>
|
||||
<translation>Не найдено</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="468"/>
|
||||
<location filename="mainscreen_widgets.py" line="472"/>
|
||||
<source>Text "{}" was not found</source>
|
||||
<translation>Текст "{}" не был найден</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="142"/>
|
||||
<location filename="mainscreen.py" line="145"/>
|
||||
<source>Reload plugins</source>
|
||||
<translation>Перезагрузить плагины</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<source>Video</source>
|
||||
<translation>Видео</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1328"/>
|
||||
<source>User {} invites you to group chat. Accept?</source>
|
||||
<translation>Пользователь {} приглашает Вас в групповой чат. Принять приглашение?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1329"/>
|
||||
<source>Group chat invite</source>
|
||||
<translation>Приглашение в групповой чат</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1365"/>
|
||||
<source>{} users in chat</source>
|
||||
<translation>{} пользователей в чате</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1386"/>
|
||||
<source>Enter new title for group {}:</source>
|
||||
<translation>Введите название для группы {}:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="634"/>
|
||||
<source>Set title</source>
|
||||
<translation>Изменить название</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<source>Create group chat</source>
|
||||
<translation>Создать групповой чат</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="615"/>
|
||||
<source>Invite to group chat</source>
|
||||
<translation>Пригласить в групповой чат</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="633"/>
|
||||
<source>Leave chat</source>
|
||||
<translation>Покинуть чат</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MenuWindow</name>
|
||||
@ -478,12 +518,12 @@ Version: </source>
|
||||
<translation type="obsolete">Остановить запись</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="213"/>
|
||||
<location filename="mainscreen_widgets.py" line="217"/>
|
||||
<source>Send screenshot</source>
|
||||
<translation>Отправить снимок экрана</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="214"/>
|
||||
<location filename="mainscreen_widgets.py" line="218"/>
|
||||
<source>Send file</source>
|
||||
<translation>Отправить файл</translation>
|
||||
</message>
|
||||
@ -498,12 +538,12 @@ Version: </source>
|
||||
<translation type="obsolete">Отправить видеосообщение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="215"/>
|
||||
<location filename="mainscreen_widgets.py" line="219"/>
|
||||
<source>Add smiley</source>
|
||||
<translation>Добавить смайлик</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="216"/>
|
||||
<location filename="mainscreen_widgets.py" line="220"/>
|
||||
<source>Send sticker</source>
|
||||
<translation>Отправить стикер</translation>
|
||||
</message>
|
||||
@ -575,42 +615,42 @@ Version: </source>
|
||||
<context>
|
||||
<name>PluginsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="957"/>
|
||||
<location filename="menu.py" line="967"/>
|
||||
<source>Plugins</source>
|
||||
<translation>Плагины</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="958"/>
|
||||
<location filename="menu.py" line="968"/>
|
||||
<source>Open selected plugin</source>
|
||||
<translation>Открыть выбранный плагин</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>No GUI found for this plugin</source>
|
||||
<translation>GUI для данного плагина не найден</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="985"/>
|
||||
<location filename="menu.py" line="995"/>
|
||||
<source>No description available</source>
|
||||
<translation>Описание недоступно</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1001"/>
|
||||
<location filename="menu.py" line="1011"/>
|
||||
<source>Disable plugin</source>
|
||||
<translation>Отключить плагин</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<location filename="menu.py" line="1013"/>
|
||||
<source>Enable plugin</source>
|
||||
<translation>Включить плагин</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="993"/>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<source>No plugins found</source>
|
||||
<translation>Плагины не найдены</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>Error</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
@ -756,17 +796,17 @@ Version: </source>
|
||||
<context>
|
||||
<name>WelcomeScreen</name>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="291"/>
|
||||
<location filename="mainscreen_widgets.py" line="295"/>
|
||||
<source>Don't show again</source>
|
||||
<translation>Не показывать снова</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="292"/>
|
||||
<location filename="mainscreen_widgets.py" line="296"/>
|
||||
<source>Tip of the day</source>
|
||||
<translation>Подсказка дня</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="297"/>
|
||||
<location filename="mainscreen_widgets.py" line="301"/>
|
||||
<source>Press Esc if you want hide app to tray.</source>
|
||||
<translation>Нажатие Esc сворачивает приложение в трей.</translation>
|
||||
</message>
|
||||
@ -776,7 +816,7 @@ Version: </source>
|
||||
<translation type="obsolete">Правый клик на кнопке скриншота сворачивает приложение в трей на время скриншота</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="303"/>
|
||||
<location filename="mainscreen_widgets.py" line="307"/>
|
||||
<source>You can use Tox over Tor. For more info read <a href="https://wiki.tox.chat/users/tox_over_tor_tot">this post</a></source>
|
||||
<translation>Вы можете использовать Tox через Tor. Дополнительная информация <a href="https://wiki.tox.chat/users/tox_over_tor_tot">тут</a></translation>
|
||||
</message>
|
||||
@ -786,7 +826,7 @@ Version: </source>
|
||||
<translation type="obsolete">Используйте Настройки -> Интерфейс для настройки интерфейса</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="309"/>
|
||||
<location filename="mainscreen_widgets.py" line="313"/>
|
||||
<source>Set profile password via Profile -> Settings. Password allows Toxygen encrypt your history and settings.</source>
|
||||
<translation>Установите пароль профиля: Профиль -> Настройки. Пароль позволяет шифровать историю переписки и настройки.</translation>
|
||||
</message>
|
||||
@ -811,22 +851,22 @@ Version: </source>
|
||||
<translation type="obsolete">Установите новый NoSpam, чтобы избежать спам запросов в друзья: Профиль->Настройки->Новый NoSpam</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="300"/>
|
||||
<location filename="mainscreen_widgets.py" line="304"/>
|
||||
<source>Right click on screenshot button hides app to tray during screenshot.</source>
|
||||
<translation>Правый клик на кнопке скриншота сворачивает приложение в трей на время скриншота.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="306"/>
|
||||
<location filename="mainscreen_widgets.py" line="310"/>
|
||||
<source>Use Settings -> Interface to customize interface.</source>
|
||||
<translation>Используйте Настройки -> Интерфейс для настройки интерфейса.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="315"/>
|
||||
<location filename="mainscreen_widgets.py" line="319"/>
|
||||
<source>Toxygen supports faux offline messages and file transfers. Send message or file to offline friend and he will get it later.</source>
|
||||
<translation>Toxygen поддерживает псевдооффлайн сообщения и файл трансферы.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="327"/>
|
||||
<location filename="mainscreen_widgets.py" line="331"/>
|
||||
<source>Set new NoSpam to avoid spam friend requests: Profile -> Settings -> Set new NoSpam.</source>
|
||||
<translation>Установите новый NoSpam, чтобы избежать спам запросов в друзья: Профиль->Настройки->Новый NoSpam.</translation>
|
||||
</message>
|
||||
@ -836,12 +876,12 @@ Version: </source>
|
||||
<translation type="obsolete">Новое в Toxygen 0.2.3:<br>Соответствие TCS<br>Импорт плагинов, смайлов и стикеров<br>Исправления ошибок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="321"/>
|
||||
<location filename="mainscreen_widgets.py" line="325"/>
|
||||
<source>Delete single message in chat: make right click on spinner or message time and choose "Delete" in menu</source>
|
||||
<translation>Чтобы удалить отдельное сообщение в чате сделайте правый клик на спиннер или время сообщения и выберите "Удалить" в меню</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="324"/>
|
||||
<location filename="mainscreen_widgets.py" line="328"/>
|
||||
<source>Use right click on inline image to save it</source>
|
||||
<translation>Правый клик на инлайн изображении позволит сохранить его</translation>
|
||||
</message>
|
||||
@ -856,12 +896,12 @@ Version: </source>
|
||||
<translation type="obsolete">Новое в Toxygen v0.2.6:<br>Поддержка обновлений<br>Улучшенная сортировка контактов<br>Улучшения в работе плагинов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="312"/>
|
||||
<location filename="mainscreen_widgets.py" line="316"/>
|
||||
<source>Since v0.1.3 Toxygen supports plugins. <a href="https://github.com/toxygen-project/toxygen/blob/master/docs/plugins.md">Read more</a></source>
|
||||
<translation>С версии 0.1.3 Toxygen поддерживает плагины. <a href="https://github.com/toxygen-project/toxygen/blob/master/docs/plugins.md">Узнать больше.</a></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="318"/>
|
||||
<location filename="mainscreen_widgets.py" line="322"/>
|
||||
<source>New in Toxygen 0.3.0:<br>Video calls<br>Python3.6 support<br>Migration to PyQt5</source>
|
||||
<translation>Новое в Toxygen 0.3.0:<br>Видеозвонки<br>Поддержка Python3.6<br>Миграция на PyQt5</translation>
|
||||
</message>
|
||||
@ -869,17 +909,17 @@ Version: </source>
|
||||
<context>
|
||||
<name>audioSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="794"/>
|
||||
<location filename="menu.py" line="800"/>
|
||||
<source>Audio settings</source>
|
||||
<translation>Настройки аудио</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="795"/>
|
||||
<location filename="menu.py" line="801"/>
|
||||
<source>Input device:</source>
|
||||
<translation>Устройство ввода:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="796"/>
|
||||
<location filename="menu.py" line="802"/>
|
||||
<source>Output device:</source>
|
||||
<translation>Устройство вывода:</translation>
|
||||
</message>
|
||||
@ -887,32 +927,32 @@ Version: </source>
|
||||
<context>
|
||||
<name>incoming_call</name>
|
||||
<message>
|
||||
<location filename="profile.py" line="1223"/>
|
||||
<location filename="profile.py" line="1250"/>
|
||||
<source>Incoming video call</source>
|
||||
<translation>Входящий видеозвонок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1225"/>
|
||||
<location filename="profile.py" line="1252"/>
|
||||
<source>Incoming audio call</source>
|
||||
<translation>Входящий аудиозвонок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1206"/>
|
||||
<location filename="profile.py" line="1233"/>
|
||||
<source>Outgoing video call</source>
|
||||
<translation>Исходящий видеозвонок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1208"/>
|
||||
<location filename="profile.py" line="1235"/>
|
||||
<source>Outgoing audio call</source>
|
||||
<translation>Исходящий аудиозвонок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1254"/>
|
||||
<location filename="profile.py" line="1281"/>
|
||||
<source>Call declined</source>
|
||||
<translation>Звонок отменен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1256"/>
|
||||
<location filename="profile.py" line="1283"/>
|
||||
<source>Call finished</source>
|
||||
<translation>Звонок завершен</translation>
|
||||
</message>
|
||||
@ -920,82 +960,82 @@ Version: </source>
|
||||
<context>
|
||||
<name>interfaceForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="644"/>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<source>Interface settings</source>
|
||||
<translation>Настройки интерфейса</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="645"/>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<source>Theme:</source>
|
||||
<translation>Тема:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="646"/>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<source>Language:</source>
|
||||
<translation>Язык:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="647"/>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<source>Smileys</source>
|
||||
<translation>Смайлики</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="648"/>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<source>Smiley pack:</source>
|
||||
<translation>Набор смайликов:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<source>Mirror mode</source>
|
||||
<translation>Зеркальный режим</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<source>Messages font size:</source>
|
||||
<translation>Размер шрифта сообщений:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart app to apply settings</source>
|
||||
<translation>Для применения настроек необходимо перезапустить приложение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart required</source>
|
||||
<translation>Требуется перезапуск</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<location filename="menu.py" line="657"/>
|
||||
<source>Select unread messages notification color</source>
|
||||
<translation>Цвет уведомления о сообщении</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<location filename="menu.py" line="658"/>
|
||||
<source>Compact contact list</source>
|
||||
<translation>Компактный список контактов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<location filename="menu.py" line="659"/>
|
||||
<source>Import smiley pack</source>
|
||||
<translation>Импортировать смайлы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<location filename="menu.py" line="660"/>
|
||||
<source>Import sticker pack</source>
|
||||
<translation>Импортировать стикеры</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="643"/>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<source>Show avatars in chat</source>
|
||||
<translation>Показывать аватары в чате</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<source>Close to tray</source>
|
||||
<translation>Сворачивать в трей</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<location filename="menu.py" line="662"/>
|
||||
<source>Select font</source>
|
||||
<translation>Выбрать шрифт</translation>
|
||||
</message>
|
||||
@ -1081,26 +1121,31 @@ Version: </source>
|
||||
<context>
|
||||
<name>notificationsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="534"/>
|
||||
<location filename="menu.py" line="538"/>
|
||||
<source>Notification settings</source>
|
||||
<translation>Настройки уведомлений</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="535"/>
|
||||
<location filename="menu.py" line="539"/>
|
||||
<source>Enable notifications</source>
|
||||
<translation>Включить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="536"/>
|
||||
<location filename="menu.py" line="541"/>
|
||||
<source>Enable call's sound</source>
|
||||
<translation>Включить звук звонка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="537"/>
|
||||
<location filename="menu.py" line="542"/>
|
||||
<source>Enable sound notifications</source>
|
||||
<translation>Включить звуковые уведомления
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="540"/>
|
||||
<source>Notify about all messages in groups</source>
|
||||
<translation>Уведомлять обо всех сообщениях в группах</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>pass</name>
|
||||
@ -1244,57 +1289,57 @@ Version: </source>
|
||||
<context>
|
||||
<name>updateSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="1041"/>
|
||||
<location filename="menu.py" line="1051"/>
|
||||
<source>Update settings</source>
|
||||
<translation>Обновить настройки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1042"/>
|
||||
<location filename="menu.py" line="1052"/>
|
||||
<source>Select update mode:</source>
|
||||
<translation>Выбрать режим обновлений:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1043"/>
|
||||
<location filename="menu.py" line="1053"/>
|
||||
<source>Update Toxygen</source>
|
||||
<translation>Обновить Toxygen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1044"/>
|
||||
<location filename="menu.py" line="1054"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Отключены</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1045"/>
|
||||
<location filename="menu.py" line="1055"/>
|
||||
<source>Manual</source>
|
||||
<translation>Вручную</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1046"/>
|
||||
<location filename="menu.py" line="1056"/>
|
||||
<source>Auto</source>
|
||||
<translation>Автоматически</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1065"/>
|
||||
<location filename="menu.py" line="1075"/>
|
||||
<source>Error</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1058"/>
|
||||
<location filename="menu.py" line="1068"/>
|
||||
<source>Problems with internet connection</source>
|
||||
<translation>Проблемы с соединением</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1066"/>
|
||||
<location filename="menu.py" line="1076"/>
|
||||
<source>Updater not found</source>
|
||||
<translation>Апдейтер не был найден</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1077"/>
|
||||
<location filename="menu.py" line="1087"/>
|
||||
<source>No updates found</source>
|
||||
<translation>Обновления не найдены</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1078"/>
|
||||
<location filename="menu.py" line="1088"/>
|
||||
<source>Toxygen is up to date</source>
|
||||
<translation>Toxygen уже обновлен</translation>
|
||||
</message>
|
||||
@ -1302,22 +1347,22 @@ Version: </source>
|
||||
<context>
|
||||
<name>videoSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="876"/>
|
||||
<location filename="menu.py" line="882"/>
|
||||
<source>Video settings</source>
|
||||
<translation>Настройки видео</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="877"/>
|
||||
<location filename="menu.py" line="883"/>
|
||||
<source>Device:</source>
|
||||
<translation>Устройство:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="856"/>
|
||||
<location filename="menu.py" line="862"/>
|
||||
<source>Desktop</source>
|
||||
<translation>Рабочий стол</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="878"/>
|
||||
<location filename="menu.py" line="884"/>
|
||||
<source>Select region</source>
|
||||
<translation>Выберите область</translation>
|
||||
</message>
|
||||
|
@ -84,27 +84,27 @@ can produce IP leak</source>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<source>About program</source>
|
||||
<translation>Про проґраму</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="829"/>
|
||||
<location filename="profile.py" line="854"/>
|
||||
<source>Friend request</source>
|
||||
<translation>Запит дружби</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="417"/>
|
||||
<location filename="mainscreen.py" line="420"/>
|
||||
<source>About</source>
|
||||
<translation>Про</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<location filename="mainscreen.py" line="128"/>
|
||||
<source>Audio</source>
|
||||
<translation>Звук</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="799"/>
|
||||
<location filename="profile.py" line="824"/>
|
||||
<source>Friend added</source>
|
||||
<translation>Друга додано</translation>
|
||||
</message>
|
||||
@ -114,19 +114,19 @@ can produce IP leak</source>
|
||||
<translation type="obsolete">Надіслати файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="827"/>
|
||||
<location filename="profile.py" line="852"/>
|
||||
<source>User {} wants to add you to contact list. Message:
|
||||
{}</source>
|
||||
<translation>Користувач {} хоче додати вас до списку контактів. Повідомлення
|
||||
{}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<location filename="mainscreen.py" line="125"/>
|
||||
<source>Network</source>
|
||||
<translation>Мережа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<location filename="mainscreen.py" line="598"/>
|
||||
<source>Clear history</source>
|
||||
<translation>Очистити журнал</translation>
|
||||
</message>
|
||||
@ -136,69 +136,69 @@ can produce IP leak</source>
|
||||
<translation type="obsolete">Копіювати публічний ключ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<source>Send message</source>
|
||||
<translation>Надіслати повідомлення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="586"/>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<source>Set alias</source>
|
||||
<translation>Встановити скорочення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<location filename="mainscreen.py" line="122"/>
|
||||
<source>Privacy</source>
|
||||
<translation>Приватність</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="118"/>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<source>Profile</source>
|
||||
<translation>Профіль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="418"/>
|
||||
<location filename="mainscreen.py" line="421"/>
|
||||
<source>Toxygen is Tox client written on Python.
|
||||
Version: </source>
|
||||
<translation>Toxygen — це клієнт Tox написаний на Python.
|
||||
Версія:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="517"/>
|
||||
<location filename="mainscreen.py" line="523"/>
|
||||
<source>Choose file</source>
|
||||
<translation>Обрати файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="667"/>
|
||||
<location filename="profile.py" line="692"/>
|
||||
<source>Enter new alias for friend {} or leave empty to use friend's name:</source>
|
||||
<translation>Введіть нове скорочення для друга {} або залишіть порожнім, щоб використовувати його псевдо:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="117"/>
|
||||
<location filename="mainscreen.py" line="119"/>
|
||||
<source>Add contact</source>
|
||||
<translation>Додати контакт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="800"/>
|
||||
<location filename="profile.py" line="825"/>
|
||||
<source>Friend added without sending friend request</source>
|
||||
<translation>Друга додано без надсилання запиту дружби</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<location filename="mainscreen.py" line="123"/>
|
||||
<source>Interface</source>
|
||||
<translation>Зовнішній вигляд</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<source>Settings</source>
|
||||
<translation>Налаштування</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="121"/>
|
||||
<location filename="mainscreen.py" line="124"/>
|
||||
<source>Notifications</source>
|
||||
<translation>Сповіщення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<location filename="mainscreen.py" line="609"/>
|
||||
<source>Remove friend</source>
|
||||
<translation>Вилучити друга</translation>
|
||||
</message>
|
||||
@ -208,22 +208,22 @@ Version: </source>
|
||||
<translation type="obsolete">Знайти контакт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="643"/>
|
||||
<location filename="mainscreen.py" line="665"/>
|
||||
<source>Choose folder</source>
|
||||
<translation>Обрати теку</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="584"/>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<source>Allow auto accept</source>
|
||||
<translation>Дозволити автоприймання</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="583"/>
|
||||
<location filename="mainscreen.py" line="589"/>
|
||||
<source>Disallow auto accept</source>
|
||||
<translation>Заборонити автоприймання</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<source>Start audio call with friend</source>
|
||||
<translation>Почати звуковий дзвінок</translation>
|
||||
</message>
|
||||
@ -243,17 +243,17 @@ Version: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="315"/>
|
||||
<location filename="profile.py" line="327"/>
|
||||
<source>User {} is now known as {}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<location filename="menu.py" line="667"/>
|
||||
<source>Choose folder with sticker pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="673"/>
|
||||
<location filename="menu.py" line="679"/>
|
||||
<source>Choose folder with smiley pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -263,7 +263,7 @@ Version: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="607"/>
|
||||
<location filename="mainscreen.py" line="625"/>
|
||||
<source>Plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -273,107 +273,107 @@ Version: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="111"/>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<source>Lock</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="113"/>
|
||||
<location filename="mainscreen.py" line="115"/>
|
||||
<source>List of plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="126"/>
|
||||
<location filename="mainscreen.py" line="129"/>
|
||||
<source>Video</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="127"/>
|
||||
<location filename="mainscreen.py" line="130"/>
|
||||
<source>Updates</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="408"/>
|
||||
<location filename="mainscreen_widgets.py" line="412"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="132"/>
|
||||
<location filename="mainscreen.py" line="135"/>
|
||||
<source>All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="133"/>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<source>Online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="134"/>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<source>Online first</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="594"/>
|
||||
<location filename="mainscreen.py" line="603"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="136"/>
|
||||
<location filename="mainscreen.py" line="139"/>
|
||||
<source>Online and by name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="137"/>
|
||||
<location filename="mainscreen.py" line="140"/>
|
||||
<source>Online first and by name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="141"/>
|
||||
<location filename="mainscreen.py" line="144"/>
|
||||
<source>Import plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="142"/>
|
||||
<location filename="mainscreen.py" line="145"/>
|
||||
<source>Reload plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="470"/>
|
||||
<location filename="mainscreen.py" line="476"/>
|
||||
<source>Choose folder with plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="479"/>
|
||||
<location filename="mainscreen.py" line="485"/>
|
||||
<source>Restart Toxygen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="481"/>
|
||||
<location filename="mainscreen.py" line="487"/>
|
||||
<source>Plugin will be loaded after restart</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="491"/>
|
||||
<location filename="mainscreen.py" line="497"/>
|
||||
<source>Cannot lock app</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="493"/>
|
||||
<location filename="mainscreen.py" line="499"/>
|
||||
<source>Error. Profile password is not set.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="588"/>
|
||||
<location filename="mainscreen.py" line="597"/>
|
||||
<source>Chat history</source>
|
||||
<translation type="unfinished">Журнал бесіди</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="590"/>
|
||||
<location filename="mainscreen.py" line="599"/>
|
||||
<source>Export as text</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="591"/>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<source>Export as HTML</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -383,27 +383,27 @@ Version: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="595"/>
|
||||
<location filename="mainscreen.py" line="604"/>
|
||||
<source>Status message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="596"/>
|
||||
<location filename="mainscreen.py" line="606"/>
|
||||
<source>Public key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="600"/>
|
||||
<location filename="mainscreen.py" line="610"/>
|
||||
<source>Block friend</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="601"/>
|
||||
<location filename="mainscreen.py" line="611"/>
|
||||
<source>Notes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="628"/>
|
||||
<location filename="mainscreen.py" line="650"/>
|
||||
<source>Notes about user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -448,35 +448,75 @@ Version: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="468"/>
|
||||
<location filename="mainscreen_widgets.py" line="472"/>
|
||||
<source>Text "{}" was not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="470"/>
|
||||
<location filename="mainscreen_widgets.py" line="474"/>
|
||||
<source>Not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1328"/>
|
||||
<source>User {} invites you to group chat. Accept?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1329"/>
|
||||
<source>Group chat invite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1365"/>
|
||||
<source>{} users in chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1386"/>
|
||||
<source>Enter new title for group {}:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="634"/>
|
||||
<source>Set title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="120"/>
|
||||
<source>Create group chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="615"/>
|
||||
<source>Invite to group chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen.py" line="633"/>
|
||||
<source>Leave chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MenuWindow</name>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="213"/>
|
||||
<location filename="mainscreen_widgets.py" line="217"/>
|
||||
<source>Send screenshot</source>
|
||||
<translation type="unfinished">Надіслати знімок екрану</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="214"/>
|
||||
<location filename="mainscreen_widgets.py" line="218"/>
|
||||
<source>Send file</source>
|
||||
<translation type="unfinished">Надіслати файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="215"/>
|
||||
<location filename="mainscreen_widgets.py" line="219"/>
|
||||
<source>Add smiley</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="216"/>
|
||||
<location filename="mainscreen_widgets.py" line="220"/>
|
||||
<source>Send sticker</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -548,42 +588,42 @@ Version: </source>
|
||||
<context>
|
||||
<name>PluginsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="957"/>
|
||||
<location filename="menu.py" line="967"/>
|
||||
<source>Plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="958"/>
|
||||
<location filename="menu.py" line="968"/>
|
||||
<source>Open selected plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>No GUI found for this plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="970"/>
|
||||
<location filename="menu.py" line="980"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="985"/>
|
||||
<location filename="menu.py" line="995"/>
|
||||
<source>No description available</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1001"/>
|
||||
<location filename="menu.py" line="1011"/>
|
||||
<source>Disable plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<location filename="menu.py" line="1013"/>
|
||||
<source>Enable plugin</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="993"/>
|
||||
<location filename="menu.py" line="1003"/>
|
||||
<source>No plugins found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -724,67 +764,67 @@ Version: </source>
|
||||
<context>
|
||||
<name>WelcomeScreen</name>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="291"/>
|
||||
<location filename="mainscreen_widgets.py" line="295"/>
|
||||
<source>Don't show again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="292"/>
|
||||
<location filename="mainscreen_widgets.py" line="296"/>
|
||||
<source>Tip of the day</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="297"/>
|
||||
<location filename="mainscreen_widgets.py" line="301"/>
|
||||
<source>Press Esc if you want hide app to tray.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="300"/>
|
||||
<location filename="mainscreen_widgets.py" line="304"/>
|
||||
<source>Right click on screenshot button hides app to tray during screenshot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="303"/>
|
||||
<location filename="mainscreen_widgets.py" line="307"/>
|
||||
<source>You can use Tox over Tor. For more info read <a href="https://wiki.tox.chat/users/tox_over_tor_tot">this post</a></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="306"/>
|
||||
<location filename="mainscreen_widgets.py" line="310"/>
|
||||
<source>Use Settings -> Interface to customize interface.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="309"/>
|
||||
<location filename="mainscreen_widgets.py" line="313"/>
|
||||
<source>Set profile password via Profile -> Settings. Password allows Toxygen encrypt your history and settings.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="312"/>
|
||||
<location filename="mainscreen_widgets.py" line="316"/>
|
||||
<source>Since v0.1.3 Toxygen supports plugins. <a href="https://github.com/toxygen-project/toxygen/blob/master/docs/plugins.md">Read more</a></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="315"/>
|
||||
<location filename="mainscreen_widgets.py" line="319"/>
|
||||
<source>Toxygen supports faux offline messages and file transfers. Send message or file to offline friend and he will get it later.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="318"/>
|
||||
<location filename="mainscreen_widgets.py" line="322"/>
|
||||
<source>New in Toxygen 0.3.0:<br>Video calls<br>Python3.6 support<br>Migration to PyQt5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="321"/>
|
||||
<location filename="mainscreen_widgets.py" line="325"/>
|
||||
<source>Delete single message in chat: make right click on spinner or message time and choose "Delete" in menu</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="324"/>
|
||||
<location filename="mainscreen_widgets.py" line="328"/>
|
||||
<source>Use right click on inline image to save it</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainscreen_widgets.py" line="327"/>
|
||||
<location filename="mainscreen_widgets.py" line="331"/>
|
||||
<source>Set new NoSpam to avoid spam friend requests: Profile -> Settings -> Set new NoSpam.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -792,17 +832,17 @@ Version: </source>
|
||||
<context>
|
||||
<name>audioSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="796"/>
|
||||
<location filename="menu.py" line="802"/>
|
||||
<source>Output device:</source>
|
||||
<translation>Пристрій виводу:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="794"/>
|
||||
<location filename="menu.py" line="800"/>
|
||||
<source>Audio settings</source>
|
||||
<translation>Налаштування звуку</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="795"/>
|
||||
<location filename="menu.py" line="801"/>
|
||||
<source>Input device:</source>
|
||||
<translation>Пристрій вводу:</translation>
|
||||
</message>
|
||||
@ -810,32 +850,32 @@ Version: </source>
|
||||
<context>
|
||||
<name>incoming_call</name>
|
||||
<message>
|
||||
<location filename="profile.py" line="1223"/>
|
||||
<location filename="profile.py" line="1250"/>
|
||||
<source>Incoming video call</source>
|
||||
<translation>Вхідний відеодзвінок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1225"/>
|
||||
<location filename="profile.py" line="1252"/>
|
||||
<source>Incoming audio call</source>
|
||||
<translation>Вхідний аудіодзвінок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1206"/>
|
||||
<location filename="profile.py" line="1233"/>
|
||||
<source>Outgoing video call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1208"/>
|
||||
<location filename="profile.py" line="1235"/>
|
||||
<source>Outgoing audio call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1254"/>
|
||||
<location filename="profile.py" line="1281"/>
|
||||
<source>Call declined</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="profile.py" line="1256"/>
|
||||
<location filename="profile.py" line="1283"/>
|
||||
<source>Call finished</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -843,82 +883,82 @@ Version: </source>
|
||||
<context>
|
||||
<name>interfaceForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="646"/>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<source>Language:</source>
|
||||
<translation>Мова:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="645"/>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<source>Theme:</source>
|
||||
<translation>Тема:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="644"/>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<source>Interface settings</source>
|
||||
<translation>Налаштування зовнішнього вигляду</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="643"/>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<source>Show avatars in chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="647"/>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<source>Smileys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="648"/>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<source>Smiley pack:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="649"/>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<source>Mirror mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="650"/>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<source>Messages font size:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="651"/>
|
||||
<location filename="menu.py" line="657"/>
|
||||
<source>Select unread messages notification color</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="652"/>
|
||||
<location filename="menu.py" line="658"/>
|
||||
<source>Compact contact list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="653"/>
|
||||
<location filename="menu.py" line="659"/>
|
||||
<source>Import smiley pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="654"/>
|
||||
<location filename="menu.py" line="660"/>
|
||||
<source>Import sticker pack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="655"/>
|
||||
<location filename="menu.py" line="661"/>
|
||||
<source>Close to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="656"/>
|
||||
<location filename="menu.py" line="662"/>
|
||||
<source>Select font</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart app to apply settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="743"/>
|
||||
<location filename="menu.py" line="749"/>
|
||||
<source>Restart required</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1004,25 +1044,30 @@ Version: </source>
|
||||
<context>
|
||||
<name>notificationsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="537"/>
|
||||
<location filename="menu.py" line="542"/>
|
||||
<source>Enable sound notifications</source>
|
||||
<translation>Увімкнути звукові сповіщення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="535"/>
|
||||
<location filename="menu.py" line="539"/>
|
||||
<source>Enable notifications</source>
|
||||
<translation>Увімкнути сповіщення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="534"/>
|
||||
<location filename="menu.py" line="538"/>
|
||||
<source>Notification settings</source>
|
||||
<translation>Налаштування сповіщень</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="536"/>
|
||||
<location filename="menu.py" line="541"/>
|
||||
<source>Enable call's sound</source>
|
||||
<translation>Увімкнути звук дзвінка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="540"/>
|
||||
<source>Notify about all messages in groups</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>pass</name>
|
||||
@ -1166,57 +1211,57 @@ Version: </source>
|
||||
<context>
|
||||
<name>updateSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="1041"/>
|
||||
<location filename="menu.py" line="1051"/>
|
||||
<source>Update settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1042"/>
|
||||
<location filename="menu.py" line="1052"/>
|
||||
<source>Select update mode:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1043"/>
|
||||
<location filename="menu.py" line="1053"/>
|
||||
<source>Update Toxygen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1044"/>
|
||||
<location filename="menu.py" line="1054"/>
|
||||
<source>Disabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1045"/>
|
||||
<location filename="menu.py" line="1055"/>
|
||||
<source>Manual</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1046"/>
|
||||
<location filename="menu.py" line="1056"/>
|
||||
<source>Auto</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1065"/>
|
||||
<location filename="menu.py" line="1075"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1058"/>
|
||||
<location filename="menu.py" line="1068"/>
|
||||
<source>Problems with internet connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1066"/>
|
||||
<location filename="menu.py" line="1076"/>
|
||||
<source>Updater not found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1077"/>
|
||||
<location filename="menu.py" line="1087"/>
|
||||
<source>No updates found</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="1078"/>
|
||||
<location filename="menu.py" line="1088"/>
|
||||
<source>Toxygen is up to date</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1224,22 +1269,22 @@ Version: </source>
|
||||
<context>
|
||||
<name>videoSettingsForm</name>
|
||||
<message>
|
||||
<location filename="menu.py" line="876"/>
|
||||
<location filename="menu.py" line="882"/>
|
||||
<source>Video settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="877"/>
|
||||
<location filename="menu.py" line="883"/>
|
||||
<source>Device:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="856"/>
|
||||
<location filename="menu.py" line="862"/>
|
||||
<source>Desktop</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="menu.py" line="878"/>
|
||||
<location filename="menu.py" line="884"/>
|
||||
<source>Select region</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -5,7 +5,7 @@ import sys
|
||||
import re
|
||||
|
||||
|
||||
program_version = '0.3.1'
|
||||
program_version = '0.3.2'
|
||||
|
||||
|
||||
def cached(func):
|
||||
|
Reference in New Issue
Block a user