Add system language option
This commit is contained in:
parent
066ae70875
commit
0df462bb24
|
@ -19,6 +19,7 @@
|
|||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk, Gdk, GdkX11, GObject
|
||||
import Utility
|
||||
|
||||
class SettingsDialog:
|
||||
"""
|
||||
|
@ -67,15 +68,26 @@ class SettingsDialog:
|
|||
|
||||
# Initialize the language combobox
|
||||
language_list_store = Gtk.ListStore(GObject.TYPE_STRING)
|
||||
language_index = 0
|
||||
language_index = 2
|
||||
lang_code = config['language']
|
||||
|
||||
# Add System Language as the first option
|
||||
language_list_store.append([language['ui_controls']['system_language']])
|
||||
language_list_store.append(['-'])
|
||||
self.languages.append('system')
|
||||
self.languages.append('system') # Dummy record for row separator
|
||||
if 'system' == lang_code:
|
||||
self.cmb_language.set_active(0)
|
||||
|
||||
for key in sorted(languages.keys()):
|
||||
language_list_store.append([languages[key]])
|
||||
self.languages.append(key)
|
||||
if key == config['language']:
|
||||
if key == lang_code:
|
||||
self.cmb_language.set_active(language_index)
|
||||
language_index += 1
|
||||
|
||||
self.cmb_language.set_model(language_list_store)
|
||||
self.cmb_language.set_row_separator_func(lambda m,i: m.get_value(i, 0) == '-')
|
||||
cell = Gtk.CellRendererText()
|
||||
self.cmb_language.pack_start(cell, True)
|
||||
self.cmb_language.add_attribute(cell, 'text', 0)
|
||||
|
|
|
@ -19,11 +19,12 @@
|
|||
import gi
|
||||
gi.require_version('Gdk', '3.0')
|
||||
from gi.repository import Gdk, GLib
|
||||
import babel.dates, os, errno, re, subprocess, threading, logging, locale
|
||||
import babel.dates, os, errno, re, subprocess, threading, logging, locale, json
|
||||
import pyaudio, wave
|
||||
|
||||
bin_directory = os.path.dirname(os.path.realpath(__file__))
|
||||
home_directory = os.path.expanduser('~')
|
||||
system_language_directory = os.path.join(bin_directory, "config/lang")
|
||||
|
||||
"""
|
||||
Play the alert.mp3
|
||||
|
@ -97,7 +98,7 @@ def is_active_window_skipped(skip_break_window_classes, take_break_window_classe
|
|||
screen = Gdk.Screen.get_default()
|
||||
active_xid = str(screen.get_active_window().get_xid())
|
||||
cmdlist = ['xprop', '-root', '-notype','-id',active_xid, 'WM_CLASS', '_NET_WM_STATE']
|
||||
|
||||
|
||||
try:
|
||||
stdout = subprocess.check_output(cmdlist)
|
||||
except subprocess.CalledProcessError:
|
||||
|
@ -125,13 +126,21 @@ def is_active_window_skipped(skip_break_window_classes, take_break_window_classe
|
|||
|
||||
|
||||
"""
|
||||
Format time based on the system time.
|
||||
Return the system locale. If not available, return en_US.UTF-8.
|
||||
"""
|
||||
def format_time(time):
|
||||
def __system_locale():
|
||||
locale.setlocale(locale.LC_ALL, '')
|
||||
system_locale = locale.getlocale(locale.LC_TIME)[0]
|
||||
if not system_locale:
|
||||
system_locale = 'en_US.UTF-8'
|
||||
return system_locale
|
||||
|
||||
|
||||
"""
|
||||
Format time based on the system time.
|
||||
"""
|
||||
def format_time(time):
|
||||
system_locale = __system_locale()
|
||||
return babel.dates.format_time(time, format='short', locale=system_locale)
|
||||
|
||||
|
||||
|
@ -147,3 +156,61 @@ def mkdir(path):
|
|||
else:
|
||||
logging.error('Error while creating ' + str(path))
|
||||
raise
|
||||
|
||||
"""
|
||||
Convert the user defined language code to a valid one.
|
||||
This includes converting to lower case and finding system locale language,
|
||||
if the given lang_code code is 'system'.
|
||||
"""
|
||||
def parse_language_code(lang_code):
|
||||
# Convert to lower case
|
||||
lang_code = str(lang_code).lower()
|
||||
|
||||
# If it is system, use the system language
|
||||
if lang_code == 'system':
|
||||
logging.info('Use system language for Safe Eyes')
|
||||
system_locale = __system_locale()
|
||||
lang_code = system_locale[0:2].lower()
|
||||
|
||||
# Check whether translation is available for this language.
|
||||
# If not available, use English by default.
|
||||
language_file_path = os.path.join(system_language_directory, lang_code + '.json')
|
||||
if not os.path.exists(language_file_path):
|
||||
logging.warn('The language {} does not exist. Use English instead'.format(lang_code))
|
||||
lang_code = 'en'
|
||||
|
||||
return lang_code
|
||||
|
||||
|
||||
"""
|
||||
Load the desired language from the available list based on the preference.
|
||||
"""
|
||||
def load_language(lang_code):
|
||||
# Convert the user defined language code to a valid one
|
||||
lang_code = parse_language_code(lang_code)
|
||||
|
||||
# Construct the translation file path
|
||||
language_file_path = os.path.join(system_language_directory, lang_code + '.json')
|
||||
|
||||
language = None
|
||||
# Read the language file and construct the json object
|
||||
with open(language_file_path) as language_file:
|
||||
language = json.load(language_file)
|
||||
|
||||
return language
|
||||
|
||||
|
||||
"""
|
||||
Read all the language translations and build a key-value mapping of language names
|
||||
in English and ISO 639-1 (Filename without extension).
|
||||
"""
|
||||
def read_lang_files():
|
||||
languages = {}
|
||||
for lang_file_name in os.listdir(system_language_directory):
|
||||
lang_file_path = os.path.join(system_language_directory, lang_file_name)
|
||||
if os.path.isfile(lang_file_path):
|
||||
with open(lang_file_path) as lang_file:
|
||||
lang = json.load(lang_file)
|
||||
languages[lang_file_name.lower().replace('.json', '')] = lang['meta_info']['language_name']
|
||||
|
||||
return languages
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Příští přestávka v {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Přeskočit",
|
||||
"short_break_duration": "Trvání krátké přestávky (v sekundách)",
|
||||
"long_break_duration": "Trvání dlouhé přestávky (v sekundách)",
|
||||
"interval_between_two_breaks": "Interval mezi dvěma přestávkami",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Počet krátkých přestávek mezi dvěma dlouhými přestávkami",
|
||||
"time_to_prepare_for_break": "Čas k přípravě na přestávku (v sekundách)",
|
||||
"idle_time": "Pozastavit při nečinnosti delší než (v minutách)",
|
||||
"strict_break": "Povinná přestávka (Skrýt tlačítko pro přeskočení)",
|
||||
"about": "O programu",
|
||||
"audible_alert": "Zvukové upozornění na konec přestávky",
|
||||
"language": "Jazyk",
|
||||
"enable": "Povolit Safe Eyes",
|
||||
"cancel": "Zrušit",
|
||||
"disable": "Pozastavit Safe Eyes",
|
||||
"for_x_minutes": "Na {} minut",
|
||||
"enable": "Povolit Safe Eyes",
|
||||
"for_x_hour": "Na {} hodinu",
|
||||
"for_x_hours": "Na {} hodiny",
|
||||
"until_restart": "Do restartu",
|
||||
"settings": "Nastavení",
|
||||
"about": "O programu",
|
||||
"for_x_minutes": "Na {} minut",
|
||||
"idle_time": "Pozastavit při nečinnosti delší než (v minutách)",
|
||||
"interval_between_two_breaks": "Interval mezi dvěma přestávkami",
|
||||
"language": "Jazyk",
|
||||
"long_break_duration": "Trvání dlouhé přestávky (v sekundách)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Počet krátkých přestávek mezi dvěma dlouhými přestávkami",
|
||||
"quit": "Ukončit",
|
||||
"save": "Uložit",
|
||||
"cancel": "Zrušit"
|
||||
"settings": "Nastavení",
|
||||
"short_break_duration": "Trvání krátké přestávky (v sekundách)",
|
||||
"skip": "Přeskočit",
|
||||
"strict_break": "Povinná přestávka (Skrýt tlačítko pro přeskočení)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Čas k přípravě na přestávku (v sekundách)",
|
||||
"until_restart": "Do restartu"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Nächste Pause um {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Überspringen",
|
||||
"short_break_duration": "Kleine Pause Intervall (in Sekunden)",
|
||||
"long_break_duration": "Lange Pause Intervall (in Sekunden)",
|
||||
"interval_between_two_breaks": "Intervall zwischen zwei Pausen",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Anzahl von kleinen Pausen zwischen zwei langen Pausen",
|
||||
"time_to_prepare_for_break": "Zeit zur Vorbereitung für die Pause (in Sekunden)",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"strict_break": "Strikte Pause (Überspringen nicht möglich)",
|
||||
"about": "About",
|
||||
"audible_alert": "Akustisches Signal am Ende der Pause",
|
||||
"language": "Sprache",
|
||||
"enable": "Safe Eyes aktivieren",
|
||||
"cancel": "Abbrechen",
|
||||
"disable": "Safe Eyes deaktivieren",
|
||||
"for_x_minutes": "Für {} Minuten",
|
||||
"enable": "Safe Eyes aktivieren",
|
||||
"for_x_hour": "Für {} Stunde",
|
||||
"for_x_hours": "Für {} Stunden",
|
||||
"until_restart": "Bis zum Neustart",
|
||||
"settings": "Einstellungen",
|
||||
"about": "About",
|
||||
"for_x_minutes": "Für {} Minuten",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"interval_between_two_breaks": "Intervall zwischen zwei Pausen",
|
||||
"language": "Sprache",
|
||||
"long_break_duration": "Lange Pause Intervall (in Sekunden)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Anzahl von kleinen Pausen zwischen zwei langen Pausen",
|
||||
"quit": "Schließen",
|
||||
"save": "Speichern",
|
||||
"cancel": "Abbrechen"
|
||||
"settings": "Einstellungen",
|
||||
"short_break_duration": "Kleine Pause Intervall (in Sekunden)",
|
||||
"skip": "Überspringen",
|
||||
"strict_break": "Strikte Pause (Überspringen nicht möglich)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Zeit zur Vorbereitung für die Pause (in Sekunden)",
|
||||
"until_restart": "Bis zum Neustart"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Next break at {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Skip",
|
||||
"short_break_duration": "Short break duration (in seconds)",
|
||||
"long_break_duration": "Long break duration (in seconds)",
|
||||
"interval_between_two_breaks": "Interval between two breaks (in minutes)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Number of short breaks between two long breaks",
|
||||
"time_to_prepare_for_break": "Time to prepare for break (in seconds)",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"strict_break": "Strict break (Hide skip button)",
|
||||
"about": "About",
|
||||
"audible_alert": "Audible alert at the end of break",
|
||||
"language": "Language",
|
||||
"enable": "Enable Safe Eyes",
|
||||
"cancel": "Cancel",
|
||||
"disable": "Disable Safe Eyes",
|
||||
"for_x_minutes": "For {} Minutes",
|
||||
"enable": "Enable Safe Eyes",
|
||||
"for_x_hour": "For {} Hour",
|
||||
"for_x_hours": "For {} Hours",
|
||||
"until_restart": "Until restart",
|
||||
"settings": "Settings",
|
||||
"about": "About",
|
||||
"for_x_minutes": "For {} Minutes",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"interval_between_two_breaks": "Interval between two breaks (in minutes)",
|
||||
"language": "Language",
|
||||
"long_break_duration": "Long break duration (in seconds)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Number of short breaks between two long breaks",
|
||||
"quit": "Quit",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel"
|
||||
"settings": "Settings",
|
||||
"short_break_duration": "Short break duration (in seconds)",
|
||||
"skip": "Skip",
|
||||
"strict_break": "Strict break (Hide skip button)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Time to prepare for break (in seconds)",
|
||||
"until_restart": "Until restart"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Próxima pausa a las {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Cancelar",
|
||||
"short_break_duration": "Duración de una pausa corta (en segundos)",
|
||||
"long_break_duration": "Duración de una pausa larga (en segundos)",
|
||||
"interval_between_two_breaks": "Tiempo entre dos pausas",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Número de pausas cortas entre dos pausas largas",
|
||||
"time_to_prepare_for_break": "Tiempo para prepararse para una pausa (en segundos)",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"strict_break": "Pausa estricta (Sin botón Cancelar)",
|
||||
"about": "Acerca de",
|
||||
"audible_alert": "Audible alert at the end of break",
|
||||
"language": "Idioma",
|
||||
"enable": "Activar Safe Eyes",
|
||||
"cancel": "Cancelar",
|
||||
"disable": "Disable Safe Eyes",
|
||||
"for_x_minutes": "For {} Minutes",
|
||||
"enable": "Activar Safe Eyes",
|
||||
"for_x_hour": "For {} Hour",
|
||||
"for_x_hours": "For {} Hours",
|
||||
"until_restart": "Until restart",
|
||||
"settings": "Preferencias",
|
||||
"about": "Acerca de",
|
||||
"for_x_minutes": "For {} Minutes",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"interval_between_two_breaks": "Tiempo entre dos pausas",
|
||||
"language": "Idioma",
|
||||
"long_break_duration": "Duración de una pausa larga (en segundos)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Número de pausas cortas entre dos pausas largas",
|
||||
"quit": "Salir",
|
||||
"save": "Guardar",
|
||||
"cancel": "Cancelar"
|
||||
"settings": "Preferencias",
|
||||
"short_break_duration": "Duración de una pausa corta (en segundos)",
|
||||
"skip": "Cancelar",
|
||||
"strict_break": "Pausa estricta (Sin botón Cancelar)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Tiempo para prepararse para una pausa (en segundos)",
|
||||
"until_restart": "Until restart"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Prochaine pause à {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Ignorer",
|
||||
"short_break_duration": "Durée d'une pause courte (en secondes)",
|
||||
"long_break_duration": "Durée d'une pause longue (en secondes)",
|
||||
"interval_between_two_breaks": "Intervalle entre deux pauses (en minutes)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Nombre de pauses courtes entre deux pauses longues",
|
||||
"time_to_prepare_for_break": "Temps de préparation à une pause (en secondes)",
|
||||
"idle_time": "Durée minimale d'une pause (en minutes)",
|
||||
"strict_break": "Pause stricte (cacher le bouton Ignorer)",
|
||||
"about": "À propos",
|
||||
"audible_alert": "Alerte sonore à la fin d'une pause",
|
||||
"language": "Langue",
|
||||
"enable": "Activer Safe Eyes",
|
||||
"cancel": "Annuler",
|
||||
"disable": "Désactiver Safe Eyes",
|
||||
"for_x_minutes": "Pendant {} minutes",
|
||||
"enable": "Activer Safe Eyes",
|
||||
"for_x_hour": "Pendant {} heure",
|
||||
"for_x_hours": "Pendant {} heures",
|
||||
"until_restart": "Jusqu'au redémarrage",
|
||||
"settings": "Paramètres",
|
||||
"about": "À propos",
|
||||
"for_x_minutes": "Pendant {} minutes",
|
||||
"idle_time": "Durée minimale d'une pause (en minutes)",
|
||||
"interval_between_two_breaks": "Intervalle entre deux pauses (en minutes)",
|
||||
"language": "Langue",
|
||||
"long_break_duration": "Durée d'une pause longue (en secondes)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Nombre de pauses courtes entre deux pauses longues",
|
||||
"quit": "Quitter",
|
||||
"save": "Enregistrer",
|
||||
"cancel": "Annuler"
|
||||
"settings": "Paramètres",
|
||||
"short_break_duration": "Durée d'une pause courte (en secondes)",
|
||||
"skip": "Ignorer",
|
||||
"strict_break": "Pause stricte (cacher le bouton Ignorer)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Temps de préparation à une pause (en secondes)",
|
||||
"until_restart": "Jusqu'au redémarrage"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "შემდეგი შესვენება {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "გამოტოვება",
|
||||
"short_break_duration": "მცირე შესვენების ხანგრძლივობა (წამებში)",
|
||||
"long_break_duration": "დიდი შესვენების ხანგრძლივობა (წამებში)",
|
||||
"interval_between_two_breaks": "ინტერვალი შესვენებებს შორის",
|
||||
"no_of_short_breaks_between_two_long_breaks": "მცირე შესვენებების რაოდენობა ორ დიდ შესვენებას შორის",
|
||||
"time_to_prepare_for_break": "შესვენებისთვის მოსამზადებელი დრო (წამებში)",
|
||||
"idle_time": "მინიმუმ idle დრო პაუზის ასაღებად (წუთებში)",
|
||||
"strict_break": "აუცილებელი შესვენება (დავმალოთ ღილაკი 'გამოტოვება')",
|
||||
"about": "პროგრამის შესახებ",
|
||||
"audible_alert": "ხმოვანი შეტყობინება შესვენების დამთავრებისას",
|
||||
"language": "ენა",
|
||||
"enable": "Safe Eyes ჩართვა",
|
||||
"cancel": "უარყოფა",
|
||||
"disable": "Safe Eyes გამორთვა",
|
||||
"for_x_minutes": "{} საათით",
|
||||
"enable": "Safe Eyes ჩართვა",
|
||||
"for_x_hour": "{} საათით",
|
||||
"for_x_hours": "{} საათით",
|
||||
"until_restart": "შემდეგ რესტარტამდე",
|
||||
"settings": "პარამეტრები",
|
||||
"about": "პროგრამის შესახებ",
|
||||
"for_x_minutes": "{} საათით",
|
||||
"idle_time": "მინიმუმ idle დრო პაუზის ასაღებად (წუთებში)",
|
||||
"interval_between_two_breaks": "ინტერვალი შესვენებებს შორის",
|
||||
"language": "ენა",
|
||||
"long_break_duration": "დიდი შესვენების ხანგრძლივობა (წამებში)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "მცირე შესვენებების რაოდენობა ორ დიდ შესვენებას შორის",
|
||||
"quit": "გასვლა",
|
||||
"save": "დამახსოვრება",
|
||||
"cancel": "უარყოფა"
|
||||
"settings": "პარამეტრები",
|
||||
"short_break_duration": "მცირე შესვენების ხანგრძლივობა (წამებში)",
|
||||
"skip": "გამოტოვება",
|
||||
"strict_break": "აუცილებელი შესვენება (დავმალოთ ღილაკი 'გამოტოვება')",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "შესვენებისთვის მოსამზადებელი დრო (წამებში)",
|
||||
"until_restart": "შემდეგ რესტარტამდე"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "अगला आराम {} में"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "अभी नहीं",
|
||||
"short_break_duration": "छोटे आराम की अवधि (पलों में)",
|
||||
"long_break_duration": "लंबे आराम की अवधि (पलों में)",
|
||||
"interval_between_two_breaks": "दो आराम अवधियों में अंतर (मिन्टों में)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "दो बड़े आराम के बीच कितने छोटे आराम",
|
||||
"time_to_prepare_for_break": "कितने पलों पहले बताएं",
|
||||
"idle_time": "बीच रोकने पर कितने मिन्टों का अंतर",
|
||||
"strict_break": "जरूरी आराम (रोक नहीं सकते)",
|
||||
"about": "हमारे बारे में",
|
||||
"audible_alert": "आराम के ख़तम के ख़तम होने पर आवाज़",
|
||||
"language": "भाषा",
|
||||
"enable": "सेफ आईज शुरू",
|
||||
"cancel": "रखना नहीं",
|
||||
"disable": "सेफ आईज बंद",
|
||||
"for_x_minutes": "{} मिन्टों के लिए",
|
||||
"enable": "सेफ आईज शुरू",
|
||||
"for_x_hour": "{} घंटे के लिए",
|
||||
"for_x_hours": "{} घंटों के लिए",
|
||||
"until_restart": "अगले आरम्भ तक",
|
||||
"settings": "सेटिंग्स",
|
||||
"about": "हमारे बारे में",
|
||||
"for_x_minutes": "{} मिन्टों के लिए",
|
||||
"idle_time": "बीच रोकने पर कितने मिन्टों का अंतर",
|
||||
"interval_between_two_breaks": "दो आराम अवधियों में अंतर (मिन्टों में)",
|
||||
"language": "भाषा",
|
||||
"long_break_duration": "लंबे आराम की अवधि (पलों में)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "दो बड़े आराम के बीच कितने छोटे आराम",
|
||||
"quit": "बंद",
|
||||
"save": "रखें",
|
||||
"cancel": "रखना नहीं"
|
||||
"settings": "सेटिंग्स",
|
||||
"short_break_duration": "छोटे आराम की अवधि (पलों में)",
|
||||
"skip": "अभी नहीं",
|
||||
"strict_break": "जरूरी आराम (रोक नहीं सकते)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "कितने पलों पहले बताएं",
|
||||
"until_restart": "अगले आरम्भ तक"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "A következő szünet {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Átugrás",
|
||||
"short_break_duration": "Rövid szünet hossza (másodpercekben)",
|
||||
"long_break_duration": "Hosszú szünet hossza (másodpercekben)",
|
||||
"interval_between_two_breaks": "Két szünet közötti idő",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Hány rövid szünet legyen a hosszabbak között?",
|
||||
"time_to_prepare_for_break": "Szünet előtti figyelmeztetés (másodperc)",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"strict_break": "Kötelezők a szünetek? (nincs átugrás gomb)",
|
||||
"about": "Ról ről",
|
||||
"audible_alert": "Audible alert at the end of break",
|
||||
"language": "Nyelv",
|
||||
"enable": "Safe Eyes Bekapcsolása",
|
||||
"cancel": "Mégse",
|
||||
"disable": "Disable Safe Eyes",
|
||||
"for_x_minutes": "For {} Minutes",
|
||||
"enable": "Safe Eyes Bekapcsolása",
|
||||
"for_x_hour": "For {} Hour",
|
||||
"for_x_hours": "For {} Hours",
|
||||
"until_restart": "Until restart",
|
||||
"settings": "Beállítások",
|
||||
"about": "Ról ről",
|
||||
"for_x_minutes": "For {} Minutes",
|
||||
"idle_time": "Minimum idle time to pause (in minutes)",
|
||||
"interval_between_two_breaks": "Két szünet közötti idő",
|
||||
"language": "Nyelv",
|
||||
"long_break_duration": "Hosszú szünet hossza (másodpercekben)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Hány rövid szünet legyen a hosszabbak között?",
|
||||
"quit": "Kilépés",
|
||||
"save": "Mentés",
|
||||
"cancel": "Mégse"
|
||||
"settings": "Beállítások",
|
||||
"short_break_duration": "Rövid szünet hossza (másodpercekben)",
|
||||
"skip": "Átugrás",
|
||||
"strict_break": "Kötelezők a szünetek? (nincs átugrás gomb)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Szünet előtti figyelmeztetés (másodperc)",
|
||||
"until_restart": "Until restart"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Istirahat selanjutnya pada {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Lewati",
|
||||
"short_break_duration": "Durasi istirahat singkat (dalam detik)",
|
||||
"long_break_duration": "Durasi istirahat panjang (dalam detik)",
|
||||
"interval_between_two_breaks": "Jarak antara dua istirahat (dalam menit)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Jumlah istirahat singkat di antara dua istirahat panjang",
|
||||
"time_to_prepare_for_break": "Waktu persiapan istirahat (dalam detik)",
|
||||
"idle_time": "Waktu diam jeda minimal (dalam menit)",
|
||||
"strict_break": "Paksa istirahat (sembunyikan tombol Lewati)",
|
||||
"audible_alert": "Peringatan bersuara saat istirahat berakhir",
|
||||
"language": "Bahasa",
|
||||
"enable": "Hidupkan Safe Eyes",
|
||||
"disable": "Matikan Safe Eyes",
|
||||
"for_x_minutes": "Selama {} Menit",
|
||||
"for_x_hour": "Selama {} Jam",
|
||||
"for_x_hours": "Selama {} Jam",
|
||||
"until_restart": "Hingga dijalankan ulang",
|
||||
"settings": "Pengaturan",
|
||||
"about": "Tentang",
|
||||
"quit": "Keluar",
|
||||
"save": "Simpan",
|
||||
"cancel": "Batal"
|
||||
"about": "Tentang",
|
||||
"audible_alert": "Peringatan bersuara saat istirahat berakhir",
|
||||
"cancel": "Batal",
|
||||
"disable": "Matikan Safe Eyes",
|
||||
"enable": "Hidupkan Safe Eyes",
|
||||
"for_x_hour": "Selama {} Jam",
|
||||
"for_x_hours": "Selama {} Jam",
|
||||
"for_x_minutes": "Selama {} Menit",
|
||||
"idle_time": "Waktu diam jeda minimal (dalam menit)",
|
||||
"interval_between_two_breaks": "Jarak antara dua istirahat (dalam menit)",
|
||||
"language": "Bahasa",
|
||||
"long_break_duration": "Durasi istirahat panjang (dalam detik)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Jumlah istirahat singkat di antara dua istirahat panjang",
|
||||
"quit": "Keluar",
|
||||
"save": "Simpan",
|
||||
"settings": "Pengaturan",
|
||||
"short_break_duration": "Durasi istirahat singkat (dalam detik)",
|
||||
"skip": "Lewati",
|
||||
"strict_break": "Paksa istirahat (sembunyikan tombol Lewati)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Waktu persiapan istirahat (dalam detik)",
|
||||
"until_restart": "Hingga dijalankan ulang"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Próxima pausa em {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Pular",
|
||||
"short_break_duration": "Duração de uma pausa curta (em segundos)",
|
||||
"long_break_duration": "Duração de uma pausa longa (em segundos)",
|
||||
"interval_between_two_breaks": "Intervalo entre duas pausas",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Número de pausas curtas entre duas pausas longas",
|
||||
"time_to_prepare_for_break": "Tempo para se preparar para a pausa (em segundos)",
|
||||
"idle_time": "Tempo mínimo de inatividade para pausar (em minutos)",
|
||||
"strict_break": "Pausa rigorosa (Esconder botão pular)",
|
||||
"about": "Sobre",
|
||||
"audible_alert": "Alerta sonoro no fim da pausa",
|
||||
"language": "Idioma",
|
||||
"enable": "Habilitar Safe Eyes",
|
||||
"cancel": "Cancelar",
|
||||
"disable": "Desativar Safe Eyes",
|
||||
"for_x_minutes": "Por {} Minutos",
|
||||
"enable": "Habilitar Safe Eyes",
|
||||
"for_x_hour": "Por {} Hora",
|
||||
"for_x_hours": "Por {} Horas",
|
||||
"until_restart": "Até reiniciar",
|
||||
"settings": "Configuração",
|
||||
"about": "Sobre",
|
||||
"for_x_minutes": "Por {} Minutos",
|
||||
"idle_time": "Tempo mínimo de inatividade para pausar (em minutos)",
|
||||
"interval_between_two_breaks": "Intervalo entre duas pausas",
|
||||
"language": "Idioma",
|
||||
"long_break_duration": "Duração de uma pausa longa (em segundos)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Número de pausas curtas entre duas pausas longas",
|
||||
"quit": "Sair",
|
||||
"save": "Salvar",
|
||||
"cancel": "Cancelar"
|
||||
"settings": "Configuração",
|
||||
"short_break_duration": "Duração de uma pausa curta (em segundos)",
|
||||
"skip": "Pular",
|
||||
"strict_break": "Pausa rigorosa (Esconder botão pular)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Tempo para se preparar para a pausa (em segundos)",
|
||||
"until_restart": "Até reiniciar"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Следующий перерыв в {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Пропустить",
|
||||
"short_break_duration": "Продолжительность короткого перерыва (в секундах)",
|
||||
"long_break_duration": "Продолжительность длинного перерыва (в секундах)",
|
||||
"interval_between_two_breaks": "Интервал между двумя перерывами",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Количество коротких перерывов между двумя длинными",
|
||||
"time_to_prepare_for_break": "Время подготовки в перерыву (в секундах)",
|
||||
"idle_time": "Минимальное время простоя для паузы (в минутах)",
|
||||
"strict_break": "Обязательный перерыв (Скрыть кнопку 'Пропустить')",
|
||||
"about": "О программе",
|
||||
"audible_alert": "Звуковой сигнал в конце перерыва",
|
||||
"language": "Язык",
|
||||
"enable": "Активировать Safe Eyes",
|
||||
"cancel": "Отменить",
|
||||
"disable": "Отключить Safe Eyes",
|
||||
"for_x_minutes": "На {} минут",
|
||||
"enable": "Активировать Safe Eyes",
|
||||
"for_x_hour": "На {} час",
|
||||
"for_x_hours": "На {} часов",
|
||||
"until_restart": "До перезагрузки",
|
||||
"settings": "Настройки",
|
||||
"about": "О программе",
|
||||
"for_x_minutes": "На {} минут",
|
||||
"idle_time": "Минимальное время простоя для паузы (в минутах)",
|
||||
"interval_between_two_breaks": "Интервал между двумя перерывами",
|
||||
"language": "Язык",
|
||||
"long_break_duration": "Продолжительность длинного перерыва (в секундах)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Количество коротких перерывов между двумя длинными",
|
||||
"quit": "Выйти",
|
||||
"save": "Сохранить",
|
||||
"cancel": "Отменить"
|
||||
"settings": "Настройки",
|
||||
"short_break_duration": "Продолжительность короткого перерыва (в секундах)",
|
||||
"skip": "Пропустить",
|
||||
"strict_break": "Обязательный перерыв (Скрыть кнопку 'Пропустить')",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Время подготовки в перерыву (в секундах)",
|
||||
"until_restart": "До перезагрузки"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Ďalšia prestávka o {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Preskočiť",
|
||||
"short_break_duration": "Trvanie krátkej prestávky (v sekundách)",
|
||||
"long_break_duration": "Trvanie dlhej prestávky (v sekundách)",
|
||||
"interval_between_two_breaks": "Interval medzi dvomi prestávkami",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Počet krátkych prestávok medzi dvomi dlhými prestávkami",
|
||||
"time_to_prepare_for_break": "Čas na prípravu na prestávku (v sekundách)",
|
||||
"idle_time": "Pozastaviť pri nečinnosti dlhšej ako (v minútach)",
|
||||
"strict_break": "Povinná prestávka (Skryje tlačitko Preskočiť)",
|
||||
"about": "Ohľadom",
|
||||
"audible_alert": "Zvukový signál na konci prestávky",
|
||||
"language": "Jazyk",
|
||||
"enable": "Povoliť Safe Eyes",
|
||||
"cancel": "Zrušiť",
|
||||
"disable": "Zakázať Safe Eyes",
|
||||
"for_x_minutes": "Počas {} minút",
|
||||
"enable": "Povoliť Safe Eyes",
|
||||
"for_x_hour": "Počas {} hodiny",
|
||||
"for_x_hours": "Počas {} hodín",
|
||||
"until_restart": "Do reštartu",
|
||||
"settings": "Nastavenia",
|
||||
"about": "Ohľadom",
|
||||
"for_x_minutes": "Počas {} minút",
|
||||
"idle_time": "Pozastaviť pri nečinnosti dlhšej ako (v minútach)",
|
||||
"interval_between_two_breaks": "Interval medzi dvomi prestávkami",
|
||||
"language": "Jazyk",
|
||||
"long_break_duration": "Trvanie dlhej prestávky (v sekundách)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "Počet krátkych prestávok medzi dvomi dlhými prestávkami",
|
||||
"quit": "Koniec",
|
||||
"save": "Uložiť",
|
||||
"cancel": "Zrušiť"
|
||||
"settings": "Nastavenia",
|
||||
"short_break_duration": "Trvanie krátkej prestávky (v sekundách)",
|
||||
"skip": "Preskočiť",
|
||||
"strict_break": "Povinná prestávka (Skryje tlačitko Preskočiť)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Čas na prípravu na prestávku (v sekundách)",
|
||||
"until_restart": "Do reštartu"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "அடுத்த இடைவேளை {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"about": "Safe Eyes குறித்த தகவல்கள்",
|
||||
"audible_alert": "இடைவேளையின் இறுதியில் ஒலி சமிக்கை",
|
||||
"cancel": "ரத்து",
|
||||
"enable": "Safe Eyes ஐ செயல்படுத்துக",
|
||||
"disable": "Safe Eyes ஐ நிறுத்துக",
|
||||
"for_x_minutes": "{} நிமிடங்களுக்கு",
|
||||
"enable": "Safe Eyes ஐ செயல்படுத்துக",
|
||||
"for_x_hour": "{} மணித்தியாலத்திற்கு",
|
||||
"for_x_hours": "{} மணித்தியாலங்களுக்கு",
|
||||
"until_restart": "மீள ஆரம்பிக்கும் வரைை",
|
||||
"interval_between_two_breaks": "இரண்டு இடைவேளைகளுக்கிடையிலான இடைவெளி (நிமிடங்களில்)",
|
||||
"long_break_duration": "நீண்ட கால இடைவேளை (விநாடிகளில்)",
|
||||
"for_x_minutes": "{} நிமிடங்களுக்கு",
|
||||
"idle_time": "இடைநிறுத்துவதற்கான குறைந்தபட்ச செயலற்ற நேரம் (நிமிடங்களில்)",
|
||||
"interval_between_two_breaks": "இரண்டு இடைவேளைகளுக்கிடையிலான இடைவெளி (நிமிடங்களில்)",
|
||||
"language": "மொழி",
|
||||
"long_break_duration": "நீண்ட கால இடைவேளை (விநாடிகளில்)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "இரண்டு நீண்ட இடைவேளைகளுக்கிடையிலான குறுகிய இடைவேளைகள்",
|
||||
"quit": "நிறுத்து",
|
||||
"about": "Safe Eyes குறித்த தகவல்கள்",
|
||||
"save": "சேமி",
|
||||
"settings": "அமைப்பு",
|
||||
"short_break_duration": "குறுகிய கால இடைவேளை (விநாடிகளில்)",
|
||||
"skip": "தவிர்",
|
||||
"strict_break": "கட்டாய இடைவேளை (தவிர்க்கும் பொத்தான் காண்பிக்கப்பட மாட்டாது)",
|
||||
"audible_alert": "இடைவேளையின் இறுதியில் ஒலி சமிக்கை",
|
||||
"language": "மொழி",
|
||||
"time_to_prepare_for_break": "இடைவேளைக்கு தயாராக தேவைப்படும் நேரம் (விநாடிகளில்)"
|
||||
"system_language": "இயங்குதள மொழி",
|
||||
"time_to_prepare_for_break": "இடைவேளைக்கு தயாராக தேவைப்படும் நேரம் (விநாடிகளில்)",
|
||||
"until_restart": "மீள ஆரம்பிக்கும் வரைை"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
"language_name": "Türkçe",
|
||||
"language_name_en": "Turkish"
|
||||
},
|
||||
"exercises": {
|
||||
"exercises": {
|
||||
"short_break_close_eyes": "Gözlerinizi sıkıca kapatın",
|
||||
"short_break_roll_eyes": "Gözlerinizi çevirin",
|
||||
"short_break_rotate_clockwise": "Gözlerinizi saat yönünde döndürün",
|
||||
"short_break_rotate_counter_clockwise": "Gözlerinizi saat yönünün tersine döndürün",
|
||||
"short_break_blink": "Göz kapaklarınızı kapatıp açın",
|
||||
"short_break_focus_far_distance": "Uzak mesafede bir noktaya odaklanın",
|
||||
"short_break_drink_water": "Gidip biraz su için",
|
||||
"short_break_drink_water": "Gidip biraz su için",
|
||||
"long_break_walk": "Biraz yürüyün",
|
||||
"long_break_lean_back": "Arkanıza yaslanın ve biraz gevşeyin"
|
||||
},
|
||||
|
@ -21,26 +21,27 @@
|
|||
"next_break_at": "Bir sonraki mola zamanı: {}"
|
||||
},
|
||||
"ui_controls": {
|
||||
"skip": "Geç",
|
||||
"short_break_duration": "Kısa mola süresi (saniye)",
|
||||
"long_break_duration": "Uzun mola süresi (saniye)",
|
||||
"interval_between_two_breaks": "İki mola arasındaki süre",
|
||||
"no_of_short_breaks_between_two_long_breaks": "İki uzun mola arasındaki kısa mola sayısı",
|
||||
"time_to_prepare_for_break": "Mola için hazırlanma zamanı (saniye)",
|
||||
"idle_time": "Minimum boş zaman (dakika)",
|
||||
"strict_break": "Kesin mola (Geç düğmesini gizler)",
|
||||
"audible_alert": "Mola sonunda sesli uyarı",
|
||||
"language": "Dil",
|
||||
"enable": "Safe Eyes'ı etkinleştir",
|
||||
"disable": "Safe Eyes'ı devre dışı bırak",
|
||||
"for_x_minutes": "{} Dakika",
|
||||
"for_x_hour": "{} Saat",
|
||||
"for_x_hours": "{} Saat",
|
||||
"until_restart": "Tekrar başlatılana kadar",
|
||||
"settings": "Ayarlar",
|
||||
"about": "Hakkında",
|
||||
"audible_alert": "Mola sonunda sesli uyarı",
|
||||
"cancel": "İptal",
|
||||
"disable": "Safe Eyes'ı devre dışı bırak",
|
||||
"enable": "Safe Eyes'ı etkinleştir",
|
||||
"for_x_hour": "{} Saat",
|
||||
"for_x_hours": "{} Saat",
|
||||
"for_x_minutes": "{} Dakika",
|
||||
"idle_time": "Minimum boş zaman (dakika)",
|
||||
"interval_between_two_breaks": "İki mola arasındaki süre",
|
||||
"language": "Dil",
|
||||
"long_break_duration": "Uzun mola süresi (saniye)",
|
||||
"no_of_short_breaks_between_two_long_breaks": "İki uzun mola arasındaki kısa mola sayısı",
|
||||
"quit": "Çıkış",
|
||||
"save": "Kaydet",
|
||||
"cancel": "İptal"
|
||||
"settings": "Ayarlar",
|
||||
"short_break_duration": "Kısa mola süresi (saniye)",
|
||||
"skip": "Geç",
|
||||
"strict_break": "Kesin mola (Geç düğmesini gizler)",
|
||||
"system_language": "System Language",
|
||||
"time_to_prepare_for_break": "Mola için hazırlanma zamanı (saniye)",
|
||||
"until_restart": "Tekrar başlatılana kadar"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
"idle_time": 5,
|
||||
"strict_break": false,
|
||||
"audible_alert": false,
|
||||
"language": "en",
|
||||
"language": "system",
|
||||
"active_window_class": {
|
||||
"skip_break": [],
|
||||
"take_break": []
|
||||
|
|
|
@ -40,7 +40,6 @@ settings_dialog_glade = os.path.join(Utility.bin_directory, "glade/settings_dial
|
|||
about_dialog_glade = os.path.join(Utility.bin_directory, "glade/about_dialog.glade")
|
||||
system_config_file_path = os.path.join(Utility.bin_directory, "config/safeeyes.json")
|
||||
system_style_sheet_path = os.path.join(Utility.bin_directory, "config/style/safeeyes_style.css")
|
||||
system_language_directory = os.path.join(Utility.bin_directory, "config/lang")
|
||||
|
||||
is_active = True
|
||||
CONFIGURATION_VERSION = 4
|
||||
|
@ -51,7 +50,7 @@ SAFE_EYES_VERSION = "1.1.8"
|
|||
"""
|
||||
def show_settings():
|
||||
logging.info("Show Settings dialog")
|
||||
settings_dialog = SettingsDialog(config, language, read_lang_files(), save_settings, settings_dialog_glade)
|
||||
settings_dialog = SettingsDialog(config, language, Utility.read_lang_files(), save_settings, settings_dialog_glade)
|
||||
settings_dialog.show()
|
||||
|
||||
"""
|
||||
|
@ -148,9 +147,7 @@ def save_settings(config):
|
|||
json.dump(config, config_file, indent=4, sort_keys=True)
|
||||
|
||||
# Reload the language translation
|
||||
language_file_path = os.path.join(system_language_directory, str(config['language']) + '.json')
|
||||
with open(language_file_path) as language_file:
|
||||
language = json.load(language_file)
|
||||
language = Utility.load_language(config['language'])
|
||||
|
||||
tray_icon.set_labels(language)
|
||||
|
||||
|
@ -210,9 +207,9 @@ def initialize_config():
|
|||
"""
|
||||
Configuration file has a version config_version.
|
||||
It is used to overwrite the exsiting config file if there is an update.
|
||||
Earlier versions did not have this attribute so the following method
|
||||
Earlier versions did not have this attribute so the following method
|
||||
checks the version and if it mismatches, it will overwrite the exsiting
|
||||
config files. If the version property is not available, the file is
|
||||
config files. If the version property is not available, the file is
|
||||
considered as an older one and replaced by the new configuration file.
|
||||
"""
|
||||
def validate_config():
|
||||
|
@ -240,20 +237,6 @@ def validate_config():
|
|||
# Create config files again
|
||||
initialize_config()
|
||||
|
||||
"""
|
||||
Read all the language translations and build a key-value mapping of language names
|
||||
in English and ISO 639-1 (Filename without extension).
|
||||
"""
|
||||
def read_lang_files():
|
||||
languages = {}
|
||||
for lang_file_name in os.listdir(system_language_directory):
|
||||
lang_file_path = os.path.join(system_language_directory, lang_file_name)
|
||||
if os.path.isfile(lang_file_path):
|
||||
with open(lang_file_path) as lang_file:
|
||||
lang = json.load(lang_file)
|
||||
languages[lang_file_name.lower().replace(".json", "")] = lang['meta_info']['language_name']
|
||||
|
||||
return languages
|
||||
|
||||
def running():
|
||||
'''
|
||||
|
@ -292,9 +275,7 @@ def main():
|
|||
global tray_icon
|
||||
global language
|
||||
|
||||
language_file_path = os.path.join(system_language_directory, str(config['language']) + '.json')
|
||||
with open(language_file_path) as language_file:
|
||||
language = json.load(language_file)
|
||||
language = Utility.load_language(config['language'])
|
||||
|
||||
tray_icon = TrayIcon(config, language, show_settings, show_about, enable_safeeyes, disable_safeeyes, on_quit)
|
||||
break_screen = BreakScreen(on_skipped, break_screen_glade, style_sheet_path)
|
||||
|
|
Loading…
Reference in New Issue