Locale support for en, pt and es

This commit is contained in:
Vinicius Moreira
2019-06-13 17:17:56 -03:00
parent 672b432181
commit 83ddad0d68
9 changed files with 127 additions and 22 deletions

View File

@@ -16,5 +16,5 @@ Type in the terminal: sudo python3 sandbox_installer.py. If you want to uninstal
### Roadmap ### Roadmap
- Test installer for Ubuntu - Test installer for Ubuntu
- Locales - Show update commands
- Search and install applications. - Search and install applications.

10
app.py
View File

@@ -8,18 +8,24 @@ from PyQt5.QtWidgets import QApplication, QWidget
from core.controller import FlatpakController from core.controller import FlatpakController
from core.model import FlatpakManager from core.model import FlatpakManager
from view.qt.systray import TrayIcon from view.qt.systray import TrayIcon
from core import __version__ from core import __version__, resource, util
parser = argparse.ArgumentParser(prog='fpakman', description="GUI for Flatpak applications management") parser = argparse.ArgumentParser(prog='fpakman', description="GUI for Flatpak applications management")
parser.add_argument('-v', '--version', action='version', version='%(prog)s {}'.format(__version__)) parser.add_argument('-v', '--version', action='version', version='%(prog)s {}'.format(__version__))
args = parser.parse_args() args = parser.parse_args()
locale_keys = util.get_locale_keys()
app = QApplication(sys.argv) app = QApplication(sys.argv)
manager = FlatpakManager() manager = FlatpakManager()
manager.load_database_async() manager.load_database_async()
controller = FlatpakController(manager) controller = FlatpakController(manager)
hidden_widget = QWidget() hidden_widget = QWidget()
trayIcon = TrayIcon(parent=hidden_widget, controller=controller, check_interval=int(os.getenv('FPAKMAN_CHECK_INTERVAL', 30)))
trayIcon = TrayIcon(locale_keys=locale_keys,
parent=hidden_widget,
controller=controller,
check_interval=int(os.getenv('FPAKMAN_CHECK_INTERVAL', 30)))
trayIcon.show() trayIcon.show()
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -2,5 +2,9 @@ import os
def get_path(resource_path): def get_path(resource_path):
cur_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) app_dir = get_app_dir()
return cur_dir + '/resources/' + resource_path return app_dir + '/resources/' + resource_path
def get_app_dir():
return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

35
core/util.py Normal file
View File

@@ -0,0 +1,35 @@
import locale
from core import resource
import glob
def get_locale_keys():
current_locale = locale.getdefaultlocale()
locale_path = None
if current_locale:
current_locale = current_locale[0]
locale_dir = '{}/resources/locale'.format(resource.get_app_dir())
for locale_file in glob.glob(locale_dir + '/*'):
name = locale_file.split('/')[-1]
if current_locale == name or current_locale.startswith(name + '_'):
locale_path = locale_file
break
if not locale_path:
locale_path = '{}/resources/locale/en'.format(resource.get_app_dir())
with open(locale_path, 'r') as f:
locale_keys = f.readlines()
locale_obj = {}
for line in locale_keys:
if line:
keyval = line.strip().split('=')
locale_obj[keyval[0].strip()] = keyval[1].strip()
return locale_obj

17
resources/locale/en Normal file
View File

@@ -0,0 +1,17 @@
manage_window.columns.name=Name
manage_window.columns.version=Version
manage_window.columns.latest_version=Latest Version
manage_window.columns.branch=Branch
manage_window.columns.arch=Arch
manage_window.columns.ref=Ref
manage_window.columns.origin=Origin
manage_window.columns.update=Update ?
manage_window.checkbox.only_apps=Apps
manage_window.label.updates=Updates
manage_window.status.refreshing=Refreshing
manage_window.status.updating=Updating
popup.flatpak_not_installed.title=Error
popup.flatpak_not_installed.msg=flatpak seems not to be installed. Exiting
tray.action.manage=Manage applications
tray.action.exit=Exit
notification.new_updates=Updates found

17
resources/locale/es Normal file
View File

@@ -0,0 +1,17 @@
manage_window.columns.name=Nombre
manage_window.columns.version=Versión
manage_window.columns.latest_version=Ultima Versión
manage_window.columns.branch=Branch
manage_window.columns.arch=Arch
manage_window.columns.ref=Ref
manage_window.columns.origin=Origen
manage_window.columns.update=¿Actualizar?
manage_window.checkbox.only_apps=Apps
manage_window.label.updates=Actualizaciones
manage_window.status.refreshing=Recargando
manage_window.status.updating=Actualizando
popup.flatpak_not_installed.title=Error
popup.flatpak_not_installed.msg=flatpak no parece estar instalado. Saliendo
tray.action.manage=Administrar aplicativos
tray.action.exit=Salir
notification.new_updates=Actualizaciones encontradas

17
resources/locale/pt Normal file
View File

@@ -0,0 +1,17 @@
manage_window.columns.name=Nome
manage_window.columns.version=Versão
manage_window.columns.latest_version=Última Versão
manage_window.columns.branch=Branch
manage_window.columns.arch=Arch
manage_window.columns.ref=Ref
manage_window.columns.origin=Origem
manage_window.columns.update=Atualizar ?
manage_window.checkbox.only_apps=Apps
manage_window.label.updates=Actualizaciones
manage_window.status.refreshing=Recarregando
manage_window.status.updating=Atualizando
popup.flatpak_not_installed.title=Erro
popup.flatpak_not_installed.msg=flatpak não parece estar instalado. Saindo
tray.action.manage=Gerenciar aplicativos
tray.action.exit=Sair
notification.new_updates=Atualizações encontradas

View File

@@ -36,7 +36,8 @@ class UpdateCheck(QThread):
class TrayIcon(QSystemTrayIcon): class TrayIcon(QSystemTrayIcon):
def __init__(self, controller: FlatpakController, check_interval: int = 60, parent=None): def __init__(self, locale_keys: dict, controller: FlatpakController, check_interval: int = 60, parent=None):
self.locale_keys = locale_keys
self.controller = controller self.controller = controller
self.icon_default = QIcon(resource.get_path('img/flathub_45.svg')) self.icon_default = QIcon(resource.get_path('img/flathub_45.svg'))
@@ -44,13 +45,13 @@ class TrayIcon(QSystemTrayIcon):
QSystemTrayIcon.__init__(self, self.icon_default, parent) QSystemTrayIcon.__init__(self, self.icon_default, parent)
self.menu = QMenu(parent) self.menu = QMenu(parent)
self.action_manage = self.menu.addAction("Manage applications") self.action_manage = self.menu.addAction(self.locale_keys['tray.action.manage'])
self.action_manage.triggered.connect(self.show_manage_window) self.action_manage.triggered.connect(self.show_manage_window)
self.action_exit = self.menu.addAction("Exit") self.action_exit = self.menu.addAction(self.locale_keys['tray.action.exit'])
self.action_exit.triggered.connect(lambda: QCoreApplication.exit()) self.action_exit.triggered.connect(lambda: QCoreApplication.exit())
self.setContextMenu(self.menu) self.setContextMenu(self.menu)
self.manage_window = ManageWindow(controller=controller, tray_icon=self) self.manage_window = ManageWindow(locale_keys=self.locale_keys, controller=controller, tray_icon=self)
self.check_thread = UpdateCheck(check_interval=check_interval, controller=self.controller) self.check_thread = UpdateCheck(check_interval=check_interval, controller=self.controller)
self.check_thread.signal.connect(self.notify_updates) self.check_thread.signal.connect(self.notify_updates)
self.check_thread.start() self.check_thread.start()
@@ -60,7 +61,7 @@ class TrayIcon(QSystemTrayIcon):
if self.icon().cacheKey() != self.icon_update.cacheKey(): if self.icon().cacheKey() != self.icon_update.cacheKey():
self.setIcon(self.icon_update) self.setIcon(self.icon_update)
msg = 'Updates found: {}'.format(updates) msg = '{}: {}'.format(self.locale_keys['notification.new_updates'], updates)
self.setToolTip(msg) self.setToolTip(msg)
if bool(os.getenv('FPAKMAN_UPDATE_NOTIFICATION', 1)): if bool(os.getenv('FPAKMAN_UPDATE_NOTIFICATION', 1)):

View File

@@ -38,11 +38,19 @@ class UpdateToggleButton(QToolButton):
class ManageWindow(QWidget): class ManageWindow(QWidget):
__COLUMNS__ = ['Name', 'Version', 'Latest Version', 'Branch', 'Arch', 'Ref', 'Origin', 'Update ?']
__BASE_HEIGHT__ = 400 __BASE_HEIGHT__ = 400
def __init__(self, controller: FlatpakController, tray_icon = None): def __init__(self, locale_keys: dict, controller: FlatpakController, tray_icon = None):
super(ManageWindow, self).__init__() super(ManageWindow, self).__init__()
self.locale_keys = locale_keys
self.column_names = [locale_keys['manage_window.columns.name'],
locale_keys['manage_window.columns.version'],
locale_keys['manage_window.columns.latest_version'],
locale_keys['manage_window.columns.branch'],
locale_keys['manage_window.columns.arch'],
locale_keys['manage_window.columns.ref'],
locale_keys['manage_window.columns.origin'],
locale_keys['manage_window.columns.update']]
self.controller = controller self.controller = controller
self.icon_cache = {} self.icon_cache = {}
self.tray_icon = tray_icon self.tray_icon = tray_icon
@@ -64,7 +72,7 @@ class ManageWindow(QWidget):
self.setLayout(self.layout) self.setLayout(self.layout)
self.checkbox_only_apps = QCheckBox() self.checkbox_only_apps = QCheckBox()
self.checkbox_only_apps.setText('Only apps') self.checkbox_only_apps.setText(self.locale_keys['manage_window.checkbox.only_apps'])
self.checkbox_only_apps.setChecked(True) self.checkbox_only_apps.setChecked(True)
self.checkbox_only_apps.stateChanged.connect(self.filter_only_apps) self.checkbox_only_apps.stateChanged.connect(self.filter_only_apps)
@@ -97,12 +105,12 @@ class ManageWindow(QWidget):
self.layout.addWidget(toolbar) self.layout.addWidget(toolbar)
self.table_apps = QTableWidget() self.table_apps = QTableWidget()
self.table_apps.setColumnCount(len(ManageWindow.__COLUMNS__)) self.table_apps.setColumnCount(len(self.column_names))
self.table_apps.setFocusPolicy(Qt.NoFocus) self.table_apps.setFocusPolicy(Qt.NoFocus)
self.table_apps.setShowGrid(False) self.table_apps.setShowGrid(False)
self.table_apps.verticalHeader().setVisible(False) self.table_apps.verticalHeader().setVisible(False)
self.table_apps.setSelectionBehavior(QTableView.SelectRows) self.table_apps.setSelectionBehavior(QTableView.SelectRows)
self.table_apps.setHorizontalHeaderLabels(ManageWindow.__COLUMNS__) self.table_apps.setHorizontalHeaderLabels(self.column_names)
self.table_apps.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.table_apps.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self._change_table_headers_policy() self._change_table_headers_policy()
@@ -130,7 +138,7 @@ class ManageWindow(QWidget):
def _change_table_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents): def _change_table_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents):
header_horizontal = self.table_apps.horizontalHeader() header_horizontal = self.table_apps.horizontalHeader()
for i in range(0, len(ManageWindow.__COLUMNS__)): for i in range(0, len(self.column_names)):
header_horizontal.setSectionResizeMode(i, policy) header_horizontal.setSectionResizeMode(i, policy)
def changeEvent(self, e: QEvent): def changeEvent(self, e: QEvent):
@@ -162,8 +170,8 @@ class ManageWindow(QWidget):
if not self.controller.check_installed(): if not self.controller.check_installed():
error_msg = QMessageBox() error_msg = QMessageBox()
error_msg.setIcon(QMessageBox.Critical) error_msg.setIcon(QMessageBox.Critical)
error_msg.setText('flatpak seems not to be installed. Exiting...') error_msg.setWindowTitle(self.locale_keys['popup.flatpak_not_installed.title'])
error_msg.setWindowTitle('Error') error_msg.setText(self.locale_keys['popup.flatpak_not_installed.msg'] + '...')
error_msg.setWindowIcon(self.icon_flathub) error_msg.setWindowIcon(self.icon_flathub)
error_msg.exec_() error_msg.exec_()
exit(1) exit(1)
@@ -197,7 +205,7 @@ class ManageWindow(QWidget):
if self._acquire_lock(): if self._acquire_lock():
self._check_flatpak_installed() self._check_flatpak_installed()
self._begin_action('Refreshing...') self._begin_action(self.locale_keys['manage_window.status.refreshing'] + '...')
self.thread_refresh.start() self.thread_refresh.start()
def _finish_refresh(self): def _finish_refresh(self):
@@ -225,7 +233,7 @@ class ManageWindow(QWidget):
updates = len([app for app in self.apps if app['model']['update']]) updates = len([app for app in self.apps if app['model']['update']])
if updates > 0: if updates > 0:
self.label_updates.setText('Updates: {}'.format(updates)) self.label_updates.setText('{}: {}'.format(self.locale_keys['manage_window.label.updates'], updates))
else: else:
self.label_updates.setText('') self.label_updates.setText('')
@@ -318,7 +326,7 @@ class ManageWindow(QWidget):
self.resize_and_center() self.resize_and_center()
def resize_and_center(self): def resize_and_center(self):
new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(len(ManageWindow.__COLUMNS__))]) * 1.05 new_width = reduce(operator.add, [self.table_apps.columnWidth(i) for i in range(len(self.column_names))]) * 1.05
self.resize(new_width, self.height()) self.resize(new_width, self.height())
self.centralize() self.centralize()
@@ -329,7 +337,7 @@ class ManageWindow(QWidget):
to_update = [pak['model']['ref'] for pak in self.apps if pak['visible'] and pak['update_checked']] to_update = [pak['model']['ref'] for pak in self.apps if pak['visible'] and pak['update_checked']]
if to_update: if to_update:
self._begin_action('Updating...') self._begin_action(self.locale_keys['manage_window.status.updating'] + '...')
self.thread_update.refs_to_update = to_update self.thread_update.refs_to_update = to_update
self.thread_update.start() self.thread_update.start()