Add translation support
This commit is contained in:
parent
e494aec4c4
commit
195bfabbbb
|
@ -50,8 +50,8 @@ class BreakScreen:
|
|||
"""
|
||||
Initialize the internal properties from configuration
|
||||
"""
|
||||
def initialize(self, config):
|
||||
self.skip_button_text = config['skip_button_text']
|
||||
def initialize(self, config, language):
|
||||
self.skip_button_text = language['ui_controls']['skip']
|
||||
self.strict_break = config['strict_break']
|
||||
self.btn_skip.set_label(self.skip_button_text)
|
||||
self.btn_skip.set_visible(not self.strict_break)
|
||||
|
|
|
@ -26,14 +26,15 @@ from gi.repository import Notify
|
|||
APPINDICATOR_ID = 'safeeyes'
|
||||
|
||||
class Notification:
|
||||
def __init__(self):
|
||||
def __init__(self, language):
|
||||
Notify.init(APPINDICATOR_ID)
|
||||
self.language = language
|
||||
# self.notification.set_timeout(500)
|
||||
|
||||
def show(self, warning_time):
|
||||
# self.notification.show()
|
||||
# self.notification.close()
|
||||
self.notification = Notify.Notification.new("Safe Eyes", "\nReady for a break in " + str(warning_time) + " seconds.", icon="safeeyes_enabled")
|
||||
self.notification = Notify.Notification.new("Safe Eyes", "\n" + self.language['messages']['ready_for_a_break'].format(warning_time), icon="safeeyes_enabled")
|
||||
# GLib.idle_add(lambda: self.notification.show())
|
||||
self.notification.show()
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@ class SafeEyesCore:
|
|||
def __init__(self, show_notification, start_break, end_break, on_countdown):
|
||||
# Initialize the variables
|
||||
self.break_count = 0
|
||||
self.long_break_message_index = 0
|
||||
self.short_break_message_index = 0
|
||||
self.long_break_message_index = -1
|
||||
self.short_break_message_index = -1
|
||||
self.skipped = False
|
||||
self.show_notification = show_notification
|
||||
self.start_break = start_break
|
||||
|
@ -39,9 +39,9 @@ class SafeEyesCore:
|
|||
"""
|
||||
Initialize the internal properties from configuration
|
||||
"""
|
||||
def initialize(self, config):
|
||||
self.short_break_messages = config['short_break_messages']
|
||||
self.long_break_messages = config['long_break_messages']
|
||||
def initialize(self, config, language):
|
||||
self.short_break_exercises = language['exercises']['short_break_exercises']
|
||||
self.long_break_exercises = language['exercises']['long_break_exercises']
|
||||
self.no_of_short_breaks_per_long_break = config['no_of_short_breaks_per_long_break']
|
||||
self.pre_break_warning_time = config['pre_break_warning_time']
|
||||
self.long_break_duration = config['long_break_duration']
|
||||
|
@ -96,11 +96,11 @@ class SafeEyesCore:
|
|||
if self.active:
|
||||
message = ""
|
||||
if self.is_long_break():
|
||||
self.long_break_message_index = (self.long_break_message_index + 1) % len(self.long_break_messages)
|
||||
message = self.long_break_messages[self.long_break_message_index]
|
||||
self.long_break_message_index = (self.long_break_message_index + 1) % len(self.long_break_exercises)
|
||||
message = self.long_break_exercises[self.long_break_message_index]
|
||||
else:
|
||||
self.short_break_message_index = (self.short_break_message_index + 1) % len(self.short_break_messages)
|
||||
message = self.short_break_messages[self.short_break_message_index]
|
||||
self.short_break_message_index = (self.short_break_message_index + 1) % len(self.short_break_exercises)
|
||||
message = self.short_break_exercises[self.short_break_message_index]
|
||||
|
||||
# Show the break screen
|
||||
self.start_break(message)
|
||||
|
|
|
@ -22,7 +22,7 @@ from gi.repository import Gtk, Gdk, GdkX11
|
|||
|
||||
class SettingsDialog:
|
||||
"""docstring for SettingsDialog"""
|
||||
def __init__(self, config, on_save_settings, glade_file):
|
||||
def __init__(self, language, config, on_save_settings, glade_file):
|
||||
self.config = config
|
||||
self.on_save_settings = on_save_settings
|
||||
|
||||
|
@ -38,6 +38,15 @@ class SettingsDialog:
|
|||
self.spin_time_to_prepare = builder.get_object("spin_time_to_prepare")
|
||||
self.switch_strict_break = builder.get_object("switch_strict_break")
|
||||
|
||||
builder.get_object("lbl_short_break").set_label(language['ui_controls']['short_break_duration'])
|
||||
builder.get_object("lbl_long_break").set_label(language['ui_controls']['long_break_duration'])
|
||||
builder.get_object("lbl_interval_bettween_breaks").set_label(language['ui_controls']['interval_between_two_breaks'])
|
||||
builder.get_object("lbl_short_per_long").set_label(language['ui_controls']['no_of_short_breaks_between_two_long_breaks'])
|
||||
builder.get_object("lbl_time_to_prepare").set_label(language['ui_controls']['time_to_prepare_for_break'])
|
||||
builder.get_object("lbl_strict_break").set_label(language['ui_controls']['strict_break'])
|
||||
builder.get_object("btn_cancel").set_label(language['ui_controls']['cancel'])
|
||||
builder.get_object("btn_save").set_label(language['ui_controls']['save'])
|
||||
|
||||
self.spin_short_break_duration.set_value(config['short_break_duration'])
|
||||
self.spin_long_break_duration.set_value(config['long_break_duration'])
|
||||
self.spin_interval_between_two_breaks.set_value(config['break_interval'])
|
||||
|
|
|
@ -27,7 +27,7 @@ active = True
|
|||
APPINDICATOR_ID = 'safeeyes'
|
||||
|
||||
class TrayIcon:
|
||||
def __init__(self, on_show_settings, on_enable, on_disable, on_quite):
|
||||
def __init__(self, language, on_show_settings, on_enable, on_disable, on_quite):
|
||||
self.on_show_settings = on_show_settings;
|
||||
self.on_quite = on_quite
|
||||
self.on_enable = on_enable
|
||||
|
@ -40,14 +40,14 @@ class TrayIcon:
|
|||
# Construct the context menu
|
||||
self.menu = Gtk.Menu()
|
||||
|
||||
self.item_enable = Gtk.CheckMenuItem('Enable SafeEyes')
|
||||
self.item_enable = Gtk.CheckMenuItem(language['ui_controls']['enable'])
|
||||
self.item_enable.set_active(True)
|
||||
self.item_enable.connect('activate', self.on_toogle_enable)
|
||||
|
||||
item_settings = Gtk.MenuItem('Settings')
|
||||
item_settings = Gtk.MenuItem(language['ui_controls']['settings'])
|
||||
item_settings.connect('activate', self.show_settings)
|
||||
|
||||
item_quit = Gtk.MenuItem('Quit')
|
||||
item_quit = Gtk.MenuItem(language['ui_controls']['quit'])
|
||||
item_quit.connect('activate', self.quit_safe_eyes)
|
||||
|
||||
self.menu.append(self.item_enable)
|
||||
|
@ -72,10 +72,8 @@ class TrayIcon:
|
|||
def on_toogle_enable(self, *args):
|
||||
active = self.item_enable.get_active()
|
||||
if active:
|
||||
# resume_eyesafe()
|
||||
self.indicator.set_icon("safeeyes_enabled")
|
||||
self.on_enable()
|
||||
else:
|
||||
# pause_eyesafe()
|
||||
self.indicator.set_icon("safeeyes_disabled")
|
||||
self.on_disable()
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"meta_info": {
|
||||
"language_name": "English",
|
||||
"language_name_en": "English"
|
||||
},
|
||||
"exercises": {
|
||||
"long_break_exercises": [
|
||||
"Walk for a while",
|
||||
"Lean back at your seat and relax"
|
||||
],
|
||||
"short_break_exercises": [
|
||||
"Tightly close your eyes",
|
||||
"Roll your eyes",
|
||||
"Rotate your eyes in clockwise direction",
|
||||
"Rotate your eyes in anti-clockwise direction",
|
||||
"Blink your eyes",
|
||||
"Have some water"
|
||||
]
|
||||
},
|
||||
"messages": {
|
||||
"ready_for_a_break": "Ready for a break in {} seconds"
|
||||
},
|
||||
"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",
|
||||
"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)",
|
||||
"strict_break": "Strict break (Hide {skip} button)",
|
||||
"enable": "Enable Safe Eyes",
|
||||
"settings": "Settings",
|
||||
"quit": "Quit",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel"
|
||||
}
|
||||
}
|
|
@ -1,20 +1,9 @@
|
|||
{
|
||||
"break_interval": 15,
|
||||
"long_break_duration": 60,
|
||||
"long_break_messages": [
|
||||
"Walk for a while",
|
||||
"Lean back at your seat and relax"
|
||||
],
|
||||
"long_break_duration": 60,
|
||||
"no_of_short_breaks_per_long_break": 5,
|
||||
"pre_break_warning_time": 10,
|
||||
"short_break_duration": 15,
|
||||
"short_break_messages": [
|
||||
"Tightly close your eyes",
|
||||
"Roll your eyes",
|
||||
"Rotate your eyes",
|
||||
"Blink your eyes",
|
||||
"Have some water"
|
||||
],
|
||||
"skip_button_text": "Skip",
|
||||
"strict_break": false
|
||||
"strict_break": false,
|
||||
"language": "en"
|
||||
}
|
|
@ -43,11 +43,12 @@ break_screen_glade = os.path.join(bin_directory, "glade/break_screen.glade")
|
|||
settings_dialog_glade = os.path.join(bin_directory, "glade/settings_dialog.glade")
|
||||
system_config_file_path = os.path.join(bin_directory, "config/safeeyes.json")
|
||||
system_style_sheet_path = os.path.join(bin_directory, "config/style/safeeyes_style.css")
|
||||
system_language_directory = os.path.join(bin_directory, "config/lang")
|
||||
|
||||
is_active = True
|
||||
|
||||
def show_settings():
|
||||
settings_dialog = SettingsDialog(config, save_settings, settings_dialog_glade)
|
||||
settings_dialog = SettingsDialog(language, config, save_settings, settings_dialog_glade)
|
||||
settings_dialog.show()
|
||||
|
||||
def show_notification():
|
||||
|
@ -157,20 +158,25 @@ def main():
|
|||
global notification
|
||||
global config
|
||||
global tray_icon
|
||||
global language
|
||||
|
||||
# Read the configuration
|
||||
with open(config_file_path) as config_file:
|
||||
config = json.load(config_file)
|
||||
|
||||
tray_icon = TrayIcon(show_settings, enable_safeeyes, disable_safeeyes, on_quite)
|
||||
break_screen = BreakScreen(on_skipped, break_screen_glade, style_sheet_path)
|
||||
break_screen.initialize(config)
|
||||
core = SafeEyesCore(show_notification, show_alert, close_alert, on_countdown)
|
||||
core.initialize(config)
|
||||
core.start()
|
||||
notification = Notification()
|
||||
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)
|
||||
|
||||
handle_system_suspend()
|
||||
tray_icon = TrayIcon(language, show_settings, enable_safeeyes, disable_safeeyes, on_quite)
|
||||
break_screen = BreakScreen(on_skipped, break_screen_glade, style_sheet_path)
|
||||
break_screen.initialize(config, language)
|
||||
core = SafeEyesCore(show_notification, show_alert, close_alert, on_countdown)
|
||||
core.initialize(config, language)
|
||||
core.start()
|
||||
notification = Notification(language)
|
||||
|
||||
# handle_system_suspend()
|
||||
|
||||
Gtk.main()
|
||||
|
||||
|
|
Loading…
Reference in New Issue