Update translations for English and Icelandic languages, changed colors of some icons, added more icons.
This commit is contained in:
110
app.py
110
app.py
@ -15,11 +15,11 @@ class URLManager(QWidget):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.settings = self.load_settings()
|
||||
self.translations = {}
|
||||
self.load_translations('lang/translations_en.json')
|
||||
self.load_translations(f'lang/translations_{self.settings["language"].lower()[:2]}.json')
|
||||
self.setWindowTitle(self.translations['title'])
|
||||
self.setGeometry(100, 100, 600, 800)
|
||||
|
||||
self.setWindowIcon(QIcon('assets/logo.png'))
|
||||
|
||||
self.layout = QVBoxLayout()
|
||||
@ -58,7 +58,7 @@ class URLManager(QWidget):
|
||||
self.group_layout.addWidget(self.group_combobox)
|
||||
|
||||
self.category_input = QLineEdit()
|
||||
self.category_input.setPlaceholderText("Category name")
|
||||
self.category_input.setPlaceholderText(self.translations['category_name'])
|
||||
self.category_input.setFixedWidth(3 * 100) # Fixed width for the text input box, assuming "Save" button width is 100
|
||||
self.group_layout.addWidget(self.category_input)
|
||||
|
||||
@ -86,7 +86,7 @@ class URLManager(QWidget):
|
||||
|
||||
self.url_list = QTableWidget()
|
||||
self.url_list.setColumnCount(3)
|
||||
self.url_list.setHorizontalHeaderLabels(['URL', 'Date', 'Actions'])
|
||||
self.url_list.setHorizontalHeaderLabels(['URL', self.translations['column_date'], self.translations['column_actions']])
|
||||
self.url_list.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
|
||||
self.url_list.setColumnWidth(1, 150)
|
||||
self.url_list.setColumnWidth(2, 100)
|
||||
@ -97,8 +97,6 @@ class URLManager(QWidget):
|
||||
self.urls = []
|
||||
self.groups = set()
|
||||
|
||||
self.load_settings()
|
||||
|
||||
self.load_categories()
|
||||
self.load_urls()
|
||||
|
||||
@ -156,7 +154,7 @@ class URLManager(QWidget):
|
||||
def save_url(self, url_data):
|
||||
category = url_data['group']
|
||||
category_filename = self.get_category_filename(category)
|
||||
category_path = os.path.join(self.data_directory, category_filename)
|
||||
category_path = os.path.join(self.settings['data_directory'], category_filename)
|
||||
if os.path.exists(category_path):
|
||||
with open(category_path, 'r') as file:
|
||||
category_urls = json.load(file)
|
||||
@ -210,7 +208,8 @@ class URLManager(QWidget):
|
||||
for row, url in enumerate(urls_to_display):
|
||||
self.url_list.insertRow(row)
|
||||
self.url_list.setItem(row, 0, QTableWidgetItem(url['url']))
|
||||
self.url_list.setItem(row, 1, QTableWidgetItem(url['date']))
|
||||
formatted_date = self.format_date(url['date'])
|
||||
self.url_list.setItem(row, 1, QTableWidgetItem(formatted_date))
|
||||
|
||||
actions_layout = QHBoxLayout()
|
||||
|
||||
@ -236,6 +235,17 @@ class URLManager(QWidget):
|
||||
vertical_header = self.url_list.verticalHeader()
|
||||
vertical_header.setVisible(False)
|
||||
|
||||
def format_date(self, date_str):
|
||||
date = QDateTime.fromString(date_str, Qt.ISODate)
|
||||
if self.settings['date_format'] == 'Nerdy':
|
||||
return date.toString("yyyy-MM-ddTHH:mm:ss")
|
||||
elif self.settings['date_format'] == 'Normal':
|
||||
return date.toString("dd/MM/yy @ HH:mm")
|
||||
elif self.settings['date_format'] == 'Murica!':
|
||||
return date.toString("MM/dd/yyyy hh:mm AP")
|
||||
else:
|
||||
return date_str
|
||||
|
||||
def edit_url(self, row):
|
||||
url = self.urls[row]['url']
|
||||
description = self.urls[row]['description']
|
||||
@ -251,29 +261,33 @@ class URLManager(QWidget):
|
||||
self.search_engine = settings['search_engine']
|
||||
self.date_format = settings.get('date_format', 'Nerdy')
|
||||
self.language = settings.get('language', 'English')
|
||||
self.load_translations(f'translations_{self.language.lower()[:2]}.json')
|
||||
return settings
|
||||
else:
|
||||
self.data_directory = 'data/'
|
||||
self.search_engine = 'Google'
|
||||
self.date_format = 'Nerdy'
|
||||
self.language = 'English'
|
||||
self.save_settings()
|
||||
default_settings = {
|
||||
'data_directory': 'data/',
|
||||
'search_engine': 'Google',
|
||||
'date_format': 'Nerdy',
|
||||
'language': 'English'
|
||||
}
|
||||
self.save_settings(default_settings)
|
||||
return default_settings
|
||||
|
||||
def save_settings(self):
|
||||
def save_settings(self, settings=None):
|
||||
settings_path = 'data/settings.json'
|
||||
os.makedirs(os.path.dirname(settings_path), exist_ok=True)
|
||||
with open(settings_path, 'w') as file:
|
||||
if settings is None:
|
||||
settings = {
|
||||
'data_directory': self.data_directory,
|
||||
'search_engine': self.search_engine,
|
||||
'date_format': self.date_format,
|
||||
'language': self.language
|
||||
}
|
||||
with open(settings_path, 'w') as file:
|
||||
json.dump(settings, file)
|
||||
|
||||
def load_categories(self):
|
||||
self.groups = set()
|
||||
categories_path = os.path.join(self.data_directory, 'categories.json')
|
||||
categories_path = os.path.join(self.settings['data_directory'], 'categories.json')
|
||||
if os.path.exists(categories_path):
|
||||
with open(categories_path, 'r') as file:
|
||||
self.groups = set(json.load(file))
|
||||
@ -281,7 +295,7 @@ class URLManager(QWidget):
|
||||
self.group_combobox.setCurrentText(self.translations['default_category'])
|
||||
|
||||
def save_categories(self):
|
||||
categories_path = os.path.join(self.data_directory, 'categories.json')
|
||||
categories_path = os.path.join(self.settings['data_directory'], 'categories.json')
|
||||
os.makedirs(os.path.dirname(categories_path), exist_ok=True)
|
||||
with open(categories_path, 'w') as file:
|
||||
json.dump(list(self.groups), file)
|
||||
@ -305,7 +319,7 @@ class URLManager(QWidget):
|
||||
self.urls = []
|
||||
for group in self.groups:
|
||||
category_filename = self.get_category_filename(group)
|
||||
category_path = os.path.join(self.data_directory, category_filename)
|
||||
category_path = os.path.join(self.settings['data_directory'], category_filename)
|
||||
if os.path.exists(category_path):
|
||||
with open(category_path, 'r') as file:
|
||||
self.urls.extend(json.load(file))
|
||||
@ -315,7 +329,7 @@ class URLManager(QWidget):
|
||||
for group in self.groups:
|
||||
group_urls = [url for url in self.urls if url['group'] == group]
|
||||
category_filename = self.get_category_filename(group)
|
||||
category_path = os.path.join(self.data_directory, category_filename)
|
||||
category_path = os.path.join(self.settings['data_directory'], category_filename)
|
||||
with open(category_path, 'w') as file:
|
||||
json.dump(group_urls, file)
|
||||
|
||||
@ -339,7 +353,7 @@ class URLManager(QWidget):
|
||||
layout.addWidget(written_by_label, alignment=Qt.AlignCenter)
|
||||
|
||||
link_label = QLabel()
|
||||
link_label.setText(f'<a href="{self.translations["repository_link"]}">{self.translations["repository_link"]}</a>')
|
||||
link_label.setText(f'<a href="{self.translations["repository_link"]}">{self.translations["repository_link_name"]}</a>')
|
||||
link_label.setOpenExternalLinks(True)
|
||||
layout.addWidget(link_label, alignment=Qt.AlignCenter)
|
||||
|
||||
@ -366,7 +380,7 @@ class SettingsDialog(QDialog):
|
||||
layout.addWidget(directory_label)
|
||||
|
||||
directory_layout = QHBoxLayout()
|
||||
self.directory_input = QLineEdit(self.parent.data_directory)
|
||||
self.directory_input = QLineEdit(self.parent.settings['data_directory'])
|
||||
self.browse_button = QPushButton(self.parent.translations['browse_button'])
|
||||
self.browse_button.clicked.connect(self.browse_directory)
|
||||
directory_layout.addWidget(self.directory_input)
|
||||
@ -376,20 +390,25 @@ class SettingsDialog(QDialog):
|
||||
layout.addSpacerItem(QSpacerItem(0, 4, QSizePolicy.Minimum, QSizePolicy.Fixed))
|
||||
|
||||
form_layout = QFormLayout()
|
||||
|
||||
# Populate Search Engine Combobox
|
||||
self.search_engine_combobox = QComboBox()
|
||||
search_engines = sorted(self.parent.search_engines.keys())
|
||||
self.search_engine_combobox.addItems(search_engines)
|
||||
self.search_engine_combobox.setCurrentText(self.parent.search_engine)
|
||||
self.search_engine_combobox.setCurrentText(self.parent.settings['search_engine'])
|
||||
form_layout.addRow(self.parent.translations['search_engine_label'], self.search_engine_combobox)
|
||||
|
||||
# Populate Date Format Combobox
|
||||
self.date_format_combobox = QComboBox()
|
||||
self.date_format_combobox.addItems(["Nerdy", "Normal", "Murica!"])
|
||||
self.date_format_combobox.setCurrentText(self.parent.date_format)
|
||||
self.date_format_combobox.setCurrentText(self.parent.settings['date_format'])
|
||||
form_layout.addRow(self.parent.translations['date_format_label'], self.date_format_combobox)
|
||||
|
||||
# Populate Language Combobox
|
||||
self.language_combobox = QComboBox()
|
||||
self.language_combobox.addItems(["English"]) # Add other languages as needed
|
||||
self.language_combobox.setCurrentText(self.parent.language)
|
||||
self.populate_language_combobox()
|
||||
current_language_code = self.parent.settings['language']
|
||||
self.set_current_language(current_language_code)
|
||||
form_layout.addRow(self.parent.translations['language_label'], self.language_combobox)
|
||||
|
||||
layout.addLayout(form_layout)
|
||||
@ -405,12 +424,41 @@ class SettingsDialog(QDialog):
|
||||
if directory:
|
||||
self.directory_input.setText(directory)
|
||||
|
||||
def populate_language_combobox(self):
|
||||
lang_dir = 'lang/'
|
||||
language_files = [f for f in os.listdir(lang_dir) if f.startswith('translations_') and f.endswith('.json')]
|
||||
self.language_map = {}
|
||||
|
||||
for file_name in language_files:
|
||||
file_path = os.path.join(lang_dir, file_name)
|
||||
with open(file_path, 'r') as file:
|
||||
data = json.load(file)
|
||||
language_name = data.get('language', 'Unknown')
|
||||
language_code = file_name[len('translations_'):-len('.json')]
|
||||
display_text = f"{language_name} ({language_code})"
|
||||
self.language_combobox.addItem(display_text)
|
||||
self.language_map[language_code] = display_text
|
||||
|
||||
def set_current_language(self, language_code):
|
||||
if language_code in self.language_map:
|
||||
display_text = self.language_map[language_code]
|
||||
index = self.language_combobox.findText(display_text)
|
||||
if index != -1:
|
||||
self.language_combobox.setCurrentIndex(index)
|
||||
|
||||
def save_settings(self):
|
||||
self.parent.data_directory = self.directory_input.text()
|
||||
self.parent.search_engine = self.search_engine_combobox.currentText()
|
||||
self.parent.date_format = self.date_format_combobox.currentText()
|
||||
self.parent.language = self.language_combobox.currentText()
|
||||
self.parent.save_settings()
|
||||
selected_language = self.language_combobox.currentText()
|
||||
language_code = selected_language.split('(')[-1].strip(' )') # Extract language code from "(en)" format
|
||||
old_language = self.parent.settings['language']
|
||||
self.parent.settings['data_directory'] = self.directory_input.text()
|
||||
self.parent.settings['search_engine'] = self.search_engine_combobox.currentText()
|
||||
self.parent.settings['date_format'] = self.date_format_combobox.currentText()
|
||||
self.parent.settings['language'] = language_code
|
||||
self.parent.save_settings(self.parent.settings)
|
||||
|
||||
if old_language != language_code:
|
||||
QMessageBox.information(self, self.parent.translations['restart_required_title'], self.parent.translations['restart_required_message'])
|
||||
|
||||
self.accept()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user