Add system language option

This commit is contained in:
Gobinath 2017-03-13 09:30:44 -04:00
parent 066ae70875
commit 0df462bb24
18 changed files with 320 additions and 246 deletions

View File

@ -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)

View File

@ -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

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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": "შემდეგ რესტარტამდე"
}
}

View File

@ -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": "अगले आरम्भ तक"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
}

View File

@ -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": "До перезагрузки"
}
}

View File

@ -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"
}
}

View File

@ -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": "மீள ஆரம்பிக்கும் வரைை"
}
}

View File

@ -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"
}
}

View File

@ -10,7 +10,7 @@
"idle_time": 5,
"strict_break": false,
"audible_alert": false,
"language": "en",
"language": "system",
"active_window_class": {
"skip_break": [],
"take_break": []

View File

@ -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)