Add translation support

This commit is contained in:
Gobinath 2016-11-04 14:17:21 +05:30
parent e494aec4c4
commit 195bfabbbb
8 changed files with 83 additions and 43 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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