timekpr-next/000775 001750 001750 00000000000 15122253261 015174 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/000775 001750 001750 00000000000 14575617135 016471 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/gui/000775 001750 001750 00000000000 15122253261 017236 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/gui/admingui.py000644 001750 001750 00000472120 15122253261 021411 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ import gi import os import webbrowser gi.require_version("Gtk", "3.0") from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GLib from datetime import timedelta, datetime import re # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.client.interface.dbus.administration import timekprAdminConnector from timekpr.common.constants import messages as msg # constant _NO_TIME_LABEL_SHORT = "--:--" _NO_TIME_LABEL = "--:--:--" _NO_TIME_LIMIT_LABEL = "--:--:--:--" _HOUR_REGEXP = re.compile(r"^([0-9]{1,2}).*$") _HOUR_MIN_REGEXP = re.compile(r"^([0-9]{1,2}):([0-9]{1,2}).*$") _DAY_HOUR_MIN_REGEXP = re.compile(r"^([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}).*$") _DAY_HOUR_MIN_SEC_REGEXP = re.compile(r"^([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}).*$") class timekprAdminGUI(object): """Main class for supporting timekpr forms""" def __init__(self, pTimekprVersion, pResourcePath, pUsername): """Initialize gui""" # set up base variables self._userName = pUsername self._timekprVersion = pTimekprVersion self._resourcePath = pResourcePath self._timekprAdminConnector = None self._isConnected = False self._ROWCOL_OK = "#FFFFFF" self._ROWSTYLE_OK = False self._ROWCOL_NOK = "Yellow" self._ROWSTYLE_NOK = True # ## forms builders ## # init config builder self._timekprAdminFormBuilder = Gtk.Builder() # get our dialog self._timekprAdminFormBuilder.add_from_file(os.path.join(self._resourcePath, "admin.glade")) # connect signals, so they get executed self._timekprAdminFormBuilder.connect_signals(self) # get window self._timekprAdminForm = self._timekprAdminFormBuilder.get_object("TimekprApplicationWindow") # set up GUI elements self.initGUIElements() # initialize internal stuff self.initInternalConfiguration() # disable all user config buttons firstly self.toggleUserConfigControls(False) # disable all timekpr config buttons firstly self.toggleTimekprConfigControls(False) # status self.setTimekprStatus(True, msg.getTranslation("TK_MSG_STATUS_STARTED")) # initialize internal stuff GLib.timeout_add_seconds(0.1, self.initTimekprAdmin) # periodic log flusher GLib.timeout_add_seconds(cons.TK_POLLTIME, self.autoFlushLogFile) # loop self._mainLoop = GLib.MainLoop() # --------------- initialization / helper methods --------------- # def startAdminGUI(self): """Start up main loop""" # show up all self._timekprAdminForm.show() # this seems to be needed self.dummyPageChanger() # start main loop self._mainLoop.run() def finishTimekpr(self, signal=None, frame=None): """Exit timekpr gracefully""" log.log(cons.TK_LOG_LEVEL_INFO, "Finishing up") # exit main loop self._mainLoop.quit() log.log(cons.TK_LOG_LEVEL_INFO, "Finished") log.autoFlushLogFile(True) def autoFlushLogFile(self): """Periodically save file""" log.autoFlushLogFile() return True def dummyPageChanger(self): """Switch tabs back and forth""" # change pages (so objects get initialized, w/o this, spin butons don't get values when set :O) for rIdx in (1, 0): self._timekprAdminFormBuilder.get_object("TimekprMainTabBar").set_current_page(rIdx) for rIdx in (1, 2, 0): self._timekprAdminFormBuilder.get_object("TimekprConfigurationTabBar").set_current_page(rIdx) # init timekpr admin client def initTimekprAdmin(self): """Initialize admin client""" # get our connector self._timekprAdminConnector = timekprAdminConnector() # connect GLib.timeout_add_seconds(0, self._timekprAdminConnector.initTimekprConnection, False) # check connection GLib.timeout_add_seconds(0.1, self.checkConnection) # user calculated info retriever GLib.timeout_add_seconds(cons.TK_SAVE_INTERVAL, self.retrieveUserInfoAndConfig, None, cons.TK_CL_INF_SAVED) # user "realtime" info retriever GLib.timeout_add_seconds(cons.TK_POLLTIME, self.retrieveUserInfoAndConfig, None, cons.TK_CL_INF_RT) def checkConnection(self): """Check connection on the fly""" # connection statuses interfacesOk, connecting = self._timekprAdminConnector.isConnected() # if not connected, give up and get out if interfacesOk and connecting: # status self.setTimekprStatus(True, msg.getTranslation("TK_MSG_STATUS_CONNECTED")) # in case we are connected, do not retrieve config again if not self._isConnected: # connected self._isConnected = True # get users GLib.timeout_add_seconds(0, self.getAdminUserList) GLib.timeout_add_seconds(0.1, self.retrieveTimekprConfig) elif not interfacesOk and connecting: # status self.setTimekprStatus(True, msg.getTranslation("TK_MSG_STATUS_CONNECTING")) # invoke again GLib.timeout_add_seconds(1, self.checkConnection) # not connected self._isConnected = False else: # status self.setTimekprStatus(True, msg.getTranslation("TK_MSG_STATUS_CONNECTION_FAILED")) self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_CONNECTION_ACCESS_DENIED")) # not connected self._isConnected = False def initGUIElements(self): """Initialize all GUI elements for stores""" # ## tracked session types ## rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_TRACKED_SESSIONS_PHLD_LABEL")) rend.connect("edited", self.timekprTrackedSessionsEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_TRACKED_SESSIONS_LABEL"), rend, text=0) col.set_min_width(125) self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsTreeView").append_column(col) # clear self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsLS").clear() # ## excluded session types ## rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_UNTRACKED_SESSIONS_PHLD_LABEL")) rend.connect("edited", self.timekprExcludedSessionsEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_UNTRACKED_SESSIONS_LABEL"), rend, text=0) col.set_min_width(125) self._timekprAdminFormBuilder.get_object("TimekprExcludedSessionsTreeView").append_column(col) # clear self._timekprAdminFormBuilder.get_object("TimekprExcludedSessionsLS").clear() # ## excluded users ## rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_EXCLUDED_USERS_PHLD_LABEL")) rend.connect("edited", self.timekprExcludedUsersEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_EXCLUDED_USERS_LABEL"), rend, text=0) col.set_min_width(125) self._timekprAdminFormBuilder.get_object("TimekprExcludedUsersTreeView").append_column(col) # clear self._timekprAdminFormBuilder.get_object("TimekprExcludedUsersLS").clear() # ## days ## # day name rend = Gtk.CellRendererText() col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_LIST_DAY_LABEL"), rend, text=1) col.set_min_width(115) self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").append_column(col) # limit rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.connect("edited", self.userLimitsDailyLimitsEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_LIST_LIMIT_LABEL"), rend, text=4) col.set_min_width(60) self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").append_column(col) # day enabled rend = Gtk.CellRendererToggle() rend.connect("toggled", self.dayAvailabilityChanged) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_LIST_ENABLED_LABEL"), rend, active=2) rend.set_property("activatable", True) col.set_min_width(35) self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").append_column(col) # final col col = Gtk.TreeViewColumn("", Gtk.CellRendererText()) col.set_min_width(20) self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").append_column(col) # ## intervals ## # from hour rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_DAY_INTERVALS_FROM_PHLD_LABEL")) rend.connect("edited", self.userLimitsHourFromEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_INTERVALS_FROM_LABEL"), rend, text=1, background=6, underline=7) col.set_min_width(62) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").append_column(col) # to hour rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_DAY_INTERVALS_TO_PHLD_LABEL")) rend.connect("edited", self.userLimitsHourToEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_INTERVALS_TO_LABEL"), rend, text=2, background=6, underline=7) col.set_min_width(62) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").append_column(col) # unaccountable interval column rend = Gtk.CellRendererToggle() rend.connect("toggled", self.userLimitsHourUnaccountableToggled) col = Gtk.TreeViewColumn("∞", rend, active=8) col.set_property("alignment", 0.5) col.set_min_width(20) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").append_column(col) # final col col = Gtk.TreeViewColumn("", Gtk.CellRendererText()) col.set_min_width(20) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").append_column(col) # clear out existing intervals self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS").clear() # lets prepare week days for rDay in range(1, 7+1): # fill in the intervals self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS").append([str(rDay), (cons.TK_DATETIME_START + timedelta(days=rDay-1)).strftime("%A"), False, 0, _NO_TIME_LABEL]) # ## weekly / monthly limits ## # type rend = Gtk.CellRendererText() col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_WK_MON_LABEL"), rend, text=1) col.set_min_width(90) self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsTreeView").append_column(col) # weekly/monthly limit rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.connect("edited", self.userLimitsWeeklyLimitsEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_WK_MON_LIMIT_LABEL"), rend, text=3) col.set_min_width(95) self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsTreeView").append_column(col) # final col col = Gtk.TreeViewColumn("", Gtk.CellRendererText()) col.set_min_width(20) self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsTreeView").append_column(col) # clear out existing intervals self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsLS").clear() # lets prepare week days for rType in (("WK", msg.getTranslation("TK_MSG_WEEKLY_LABEL")), ("MON", msg.getTranslation("TK_MSG_MONTHLY_LABEL"))): # fill in the intervals self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsLS").append([rType[0], rType[1], 0, _NO_TIME_LIMIT_LABEL]) # ## PlayTime elements ## # day name col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_LIST_DAY_LABEL"), Gtk.CellRendererText(), text=1) col.set_min_width(115) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsTreeView").append_column(col) # day enabled rend = Gtk.CellRendererToggle() rend.connect("toggled", self.dayPlayTimeAvailabilityChanged) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_LIST_ENABLED_LABEL"), rend, active=2) col.set_min_width(35) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsTreeView").append_column(col) # limit rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.connect("edited", self.userLimitsDailyPlayTimeLimitsEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_DAY_LIST_LIMIT_LABEL"), rend, text=4) col.set_min_width(60) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsTreeView").append_column(col) # final col col = Gtk.TreeViewColumn("", Gtk.CellRendererText()) col.set_min_width(20) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsTreeView").append_column(col) # PT activity mask rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_PLAYTIME_ACTIVITY_MASK_PHLD_LABEL")) rend.connect("edited", self.playTimeActivityMaskEntryEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_PLAYTIME_ACTIVITY_MASK_LABEL"), rend, text=1) col.set_min_width(90) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesTreeView").append_column(col) # PT activity name rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_PLAYTIME_ACTIVITY_DESCRIPTION_PHLD_LABEL")) rend.connect("edited", self.playTimeActivityDescriptionEntryEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_PLAYTIME_ACTIVITY_DESCRIPTION_LABEL"), rend, text=2) col.set_min_width(120) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesTreeView").append_column(col) # lets prepare week days for PlayTime for rDay in range(1, 7+1): # fill in the intervals self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS").append([str(rDay), (cons.TK_DATETIME_START + timedelta(days=rDay-1)).strftime("%A"), False, 0, _NO_TIME_LABEL]) # --------------- GUI control methods --------------- # def initInternalConfiguration(self): """Initialize the internal configuration for admin form""" self._timekprUserConfigControlElements = [ # combo "TimekprUserSelectionCB", # combom refresh "TimekprUserSelectionRefreshBT", # control buttons "TimekprUserConfDaySettingsApplyBT", "TimekprUserConfTodaySettingsSetAddBT", "TimekprUserConfTodaySettingsSetSubractBT", "TimekprUserConfTodaySettingsSetSetBT", "TimekprUserPlayTimeProcessesAdjustmentAddBT", "TimekprUserPlayTimeProcessesAdjustmentRemoveBT", "TimekprUserPlayTimeProcessesApplyBT", "TimekprUserConfDaySettingsSetDaysIntervalsVerifyBT", "TimekprUserConfAddOptsApplyBT", # check box "TimekprUserConfTodaySettingsTrackInactiveCB", "TimekprUserConfTodaySettingsHideTrayIconCB", "TimekprUserPlayTimeEnableCB", "TimekprUserPlayTimeOverrideEnableCB", "TimekprUserPlayTimeUnaccountedIntervalsEnabledCB", # spin buttons for adjustments "TimekprUserConfTodaySettingsSetMinSB", "TimekprUserConfTodaySettingsSetHrSB", "TimekprUserConfAddOptsLockoutTypeSuspendWakeFromSB", "TimekprUserConfAddOptsLockoutTypeSuspendWakeToSB", # lists "TimekprWeekDaysTreeView", "TimekprHourIntervalsTreeView", "TimekprUserConfWkMonLimitsTreeView", "TimekprUserPlayTimeLimitsTreeView", "TimekprUserPlayTimeProcessesTreeView", # radio / control groups "TimekprUserConfDaySettingsSetDaysHeaderControlBX", "TimekprUserConfDaySettingsSetDaysIntervalsControlBX", "TimekprUserConfWkMonLimitsAdjustmentsBX", "TimekprUserConfWkMonLimitsAdjustmentControlButtonsBX", "TimekprUserPlayTimeLimitsHeaderControlBX", "TimekprUserConfAddOptsLockoutTypeChoiceBoxBX", "TimekprUserConfTodaySettingsChoiceBX" ] self._timekprConfigControlElements = [ # control buttons "TimekprConfigurationApplyBT", # check boxes "TimekprPlayTimeEnableGlobalCB", "TimekprPlayTimeEnhancedActivityMonitorCB", # spin buttons for adjustments "TimekprConfigurationLoglevelSB", "TimekprConfigurationWarningTimeSB", "TimekprConfigurationPollIntervalSB", "TimekprConfigurationSaveTimeSB", "TimekprConfigurationTerminationTimeSB", "TimekprConfigurationFinalNotificationSB", # lists "TimekprTrackingSessionsTreeView", "TimekprExcludedSessionsTreeView", "TimekprExcludedUsersTreeView", # radio / control groups "TimekprTrackingSessionsButtonControlBX", "TimekprExcludedSessionsButtonControlBX", "TimekprExcludedUsersButtonControlBX" ] # sets up limit variables for user configuration (internal config to compare to) self._tkSavedCfg = {} self._tkSavedCfg["timeTrackInactive"] = False self._tkSavedCfg["timeHideTrayIcon"] = False self._tkSavedCfg["timeLockoutType"] = cons.TK_CTRL_RES_T self._tkSavedCfg["timeWakeInterval"] = "0;23" self._tkSavedCfg["timeLimitWeek"] = 0 self._tkSavedCfg["timeLimitMonth"] = 0 self._tkSavedCfg["timeLimitDays"] = [] self._tkSavedCfg["timeLimitDaysLimits"] = [] self._tkSavedCfg["timeLimitDaysHoursActual"] = {} self._tkSavedCfg["timeLimitDaysHoursSaved"] = {} # initial config for rDay in range(1, 7+1): self._tkSavedCfg["timeLimitDaysHoursActual"][str(rDay)] = {} for rHour in range(0, 23+1): self._tkSavedCfg["timeLimitDaysHoursActual"][str(rDay)][str(rHour)] = {cons.TK_CTRL_SMIN: 0, cons.TK_CTRL_EMIN: cons.TK_LIMIT_PER_MINUTE, cons.TK_CTRL_UACC: True} # saved means from server, actual means modified in form self._tkSavedCfg["timeLimitDaysHoursSaved"] = self._tkSavedCfg["timeLimitDaysHoursActual"].copy() # ## set up PlayTime variables ## self._tkSavedCfg["playTimeEnabled"] = False self._tkSavedCfg["playTimeOverrideEnabled"] = False self._tkSavedCfg["playTimeUnaccountedIntervalsEnabled"] = False self._tkSavedCfg["playTimeLimitDays"] = [] self._tkSavedCfg["playTimeLimitDaysLimits"] = [] self._tkSavedCfg["playTimeActivities"] = [] # sets up limit variables for timekpr configuration self._tkSavedCfg["timekprWarningTime"] = 0 self._tkSavedCfg["timekprNotificationTime"] = 0 self._tkSavedCfg["timekprPollingInterval"] = 0 self._tkSavedCfg["timekprSaveTime"] = 0 self._tkSavedCfg["timekprTerminationTime"] = 0 self._tkSavedCfg["timekprLogLevel"] = 0 self._tkSavedCfg["timekprTrackingSessions"] = [] self._tkSavedCfg["timekprExcludedSessions"] = [] self._tkSavedCfg["timekprExcludedUsers"] = [] self._tkSavedCfg["timekprPlayTimeEnabled"] = False self._tkSavedCfg["timekprPlayTimeEnhancedActivityMonitorEnabled"] = False def clearAdminForm(self): """Clear and default everything to default values""" # ## clear form ## # time limits for rCtrl in ( "TimekprUserConfTodayInfoSpentTodayLB", "TimekprUserConfTodayInfoSpentWeekLB", "TimekprUserConfTodayInfoSpentMonthLB", "TimekprUserConfTodayInfoLeftTodayLB", "TimekprUserConfTodayInfoLeftContLB", "TimekprUserConfTodayInfoInactiveLB" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_text(_NO_TIME_LIMIT_LABEL) # check / radio boxes for rCtrl in ( "TimekprUserConfTodaySettingsTrackInactiveCB", "TimekprUserConfTodaySettingsHideTrayIconCB" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_active(False) # days / labels for rDay in self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS"): # clear list store rDay[2] = False rDay[3] = 0 rDay[4] = _NO_TIME_LABEL # clear day config for rHour in range(0, 23+1): self._tkSavedCfg["timeLimitDaysHoursActual"][rDay[0]][str(rHour)] = {cons.TK_CTRL_SMIN: 0, cons.TK_CTRL_EMIN: cons.TK_LIMIT_PER_MINUTE, cons.TK_CTRL_UACC: False} # clear up the intervals self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").clear() # week / month limits for rWkMon in self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsLS"): # clear list store rWkMon[2] = 0 rWkMon[3] = _NO_TIME_LIMIT_LABEL # clear day config self._tkSavedCfg["timeLimitWeek"] = 0 self._tkSavedCfg["timeLimitMonth"] = 0 # hide lockout intervals self.controlSelectedLockoutTypeHourIntervals(None) # reset lockout too self._tkSavedCfg["timeLockoutType"] = cons.TK_CTRL_RES_T self._tkSavedCfg["timeWakeInterval"] = "0;23" self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeFromSB").set_value(0) self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeToSB").set_value(23) # set default lockout type self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeTerminate").set_active(True) # ## PlayTIme reset ## # reset times left for rCtrl in ( "TimekprUserPlayTimeLeftActualLB", "TimekprUserPlayTimeLeftSavedLB", "TimekprUserPlayTimeSpentLB" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_text(_NO_TIME_LABEL) # reset activity count self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeTodaySettingsActivityCntLB").set_text("---") # reset day limits for rDay in range(1, 7+1): # clear list store self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS")[rDay-1][2] = False self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS")[rDay-1][3] = 0 self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS")[rDay-1][4] = _NO_TIME_LABEL_SHORT # clear activities and add one placeholder self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").clear() # CB not checked for rCtrl in ( "TimekprUserPlayTimeEnableCB", "TimekprUserPlayTimeOverrideEnableCB", "TimekprUserPlayTimeUnaccountedIntervalsEnabledCB" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_active(False) # color for rCtrl in ( "TimekprUserConfTodaySettingsSetAddBT", "TimekprUserConfTodaySettingsSetSubractBT", "TimekprUserConfTodaySettingsSetSetBT", "TimekprUserConfTodayLabel", "TimekprUserConfDaySettingsApplyBT", "TimekprUserConfDaySettingsSetDaysIntervalsVerifyBT", "TimekprUserConfDailyLabel", "TimekprUserPlayTimeProcessesApplyBT", "TimekprUserPlayTimeLabel", "TimekprUserConfAddOptsApplyBT", "TimekprUserConfAddOptsLabel" ): # reset self._timekprAdminFormBuilder.get_object(rCtrl).modify_fg(Gtk.StateFlags.NORMAL, None) # failure if self._timekprAdminConnector is not None: # disable all if not self._timekprAdminConnector.isConnected()[0]: # reset for rCtrl in ( "TimekprTrackingSessionsTreeView", "TimekprTrackingSessionsButtonControlBX", "TimekprExcludedSessionsTreeView", "TimekprExcludedSessionsButtonControlBX", "TimekprExcludedUsersTreeView", "TimekprExcludedUsersButtonControlBX", "TimekprPlayTimeEnableGlobalCB", "TimekprPlayTimeEnhancedActivityMonitorCB" ): # reset self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(False) # reset for rCtrl in ( "TimekprPlayTimeEnableGlobalCB", "TimekprPlayTimeEnhancedActivityMonitorCB" ): # reset self._timekprAdminFormBuilder.get_object(rCtrl).set_active(False) # reset for rCtrl in ( "TimekprConfigurationLoglevelSB", "TimekprConfigurationPollIntervalSB", "TimekprConfigurationSaveTimeSB", "TimekprConfigurationTerminationTimeSB", "TimekprConfigurationWarningTimeSB", "TimekprConfigurationFinalNotificationSB" ): # reset self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(False) self._timekprAdminFormBuilder.get_object(rCtrl).set_value(0) # reset for rCtrl in ( "TimekprTrackingSessionsLS", "TimekprExcludedSessionsLS", "TimekprExcludedUsersLS" ): # reset self._timekprAdminFormBuilder.get_object(rCtrl).clear() # --------------- DEV test methods --------------- # def initDEVDefaultConfig(self): """Initialize GUI elements for DEV mode""" # DEV if cons.TK_DEV_ACTIVE and 1 == 2: # if there is date, no need to add one if len(self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS")) == 0: # standard time intervals self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").append([0, "08:00", "13:00", "1", 0, 0, self._ROWCOL_NOK, self._ROWSTYLE_NOK]) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").append([0, "15:00", "18:00", "1", 0, 0, self._ROWCOL_OK, self._ROWSTYLE_OK]) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").append([0, "18:30", "22:00", "1", 0, 0, self._ROWCOL_OK, self._ROWSTYLE_OK]) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").append([0, "22:30", "23:00", "1", 0, 0, self._ROWCOL_NOK, self._ROWSTYLE_NOK]) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").set_sensitive(True) # if there is date, no need to add one if len(self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS")) == 0: # PlayTime activities self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").append(["1", "mask", "Doom Eternal"]) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").append(["2", "mask.*", "The Talos Principle"]) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").append(["3", "mask.*", "Mafia remastered"]) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").append(["4", "csgo_linux", "CS: GO"]) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").append(["5", "kca.*c", "Stupid calculator"]) # enable certain functionality if 1 == 1: # enable certain objects (fot testing) for rO in ( "TimekprUserPlayTimeProcessesAdjustmentAddBT", "TimekprUserPlayTimeProcessesAdjustmentRemoveBT", "TimekprUserPlayTimeLimitsTreeView", "TimekprUserPlayTimeProcessesTreeView" ): self._timekprAdminFormBuilder.get_object(rO).set_sensitive(True) # false return False # --------------- control / helper methods --------------- # def getSelectedUserName(self): """Get selected username""" # result userName = None # is admin app connected to server if self._isConnected: # get object userCombobox = self._timekprAdminFormBuilder.get_object("TimekprUserSelectionCB") # get chosen index, model and actual id of the item userIdx = userCombobox.get_active() userModel = userCombobox.get_model() # only if we have selection if userIdx is not None and userModel is not None: # only if selected if userIdx >= 0: # get username userName = userModel[userIdx][0] # result return userName def toggleUserConfigControls(self, pEnable=True, pLeaveUserList=False): """Enable or disable all user controls for the form""" # if disable if not pEnable: self.clearAdminForm() # apply settings to all buttons in user configuration for rObj in self._timekprUserConfigControlElements: # if we need to leave user selection intact if not (pLeaveUserList and rObj == "TimekprUserSelectionCB"): # get the button and set availability self._timekprAdminFormBuilder.get_object(rObj).set_sensitive(pEnable) # DEV / samples too self.initDEVDefaultConfig() def toggleTimekprConfigControls(self, pEnable=True): """Enable or disable all timekpr controls for the form""" # enable for timekpr main config can be done only in admin mode enable = pEnable and (os.geteuid() == 0 or cons.TK_DEV_ACTIVE) # apply settings to all buttons`in user configuration for rButton in self._timekprConfigControlElements: # get the button and set availability self._timekprAdminFormBuilder.get_object(rButton).set_sensitive(enable) def setTimekprStatus(self, pConnectionStatus, pStatus): """Change status of timekpr admin client""" if pStatus is not None: # connection if pConnectionStatus: # get main status statusBar = self._timekprAdminFormBuilder.get_object("TimekprConnectionStatusbar") else: # get message status statusBar = self._timekprAdminFormBuilder.get_object("TimekprMessagesStatusbar") # get context contextId = statusBar.get_context_id("status") # pop existing message and add new one statusBar.remove_all(contextId) statusBar.push(contextId, pStatus[:80]) def normalizeAllowedDaysAndLimits(self): """Method will normalize allowed days and limits, in case user sets them differently""" # get the least of size limitLen = min(len(self._tkSavedCfg["timeLimitDays"]), len(self._tkSavedCfg["timeLimitDaysLimits"])) # remove excess elements for rElem in ( "timeLimitDays", "timeLimitDaysLimits" ): for i in range(limitLen, len(self._tkSavedCfg[rElem])): self._tkSavedCfg[rElem].pop() # get the least of size limitLen = min(len(self._tkSavedCfg["playTimeLimitDays"]), len(self._tkSavedCfg["playTimeLimitDaysLimits"])) # remove excess elements for rElem in ( "playTimeLimitDays", "playTimeLimitDaysLimits" ): for i in range(limitLen, len(self._tkSavedCfg[rElem])): self._tkSavedCfg[rElem].pop() # --------------- format helper methods --------------- # def formatTimeStr(self, pTotalSeconds, pFormatSecs=False, pFormatDays=False): """Format the time intervals as string label""" # get time out of seconds time = cons.TK_DATETIME_START + timedelta(seconds=pTotalSeconds) # day format isDayFmt = (pTotalSeconds >= cons.TK_LIMIT_PER_DAY and not pFormatDays) # limit limitDay = "%s:" % (str((time - cons.TK_DATETIME_START).days).rjust(2, "0")) if pFormatDays else "" limitHr = "%s" % (str(24 if isDayFmt else time.hour).rjust(2, "0")) limitMin = ":%s" % (str(0 if isDayFmt else time.minute).rjust(2, "0")) limitSec = ":%s" % (str(0 if isDayFmt else time.second).rjust(2, "0")) if pFormatSecs else "" limit = "%s%s%s%s" % (limitDay, limitHr, limitMin, limitSec) # value return limit def getIntervalList(self, pDay): """Get intervals for use in GUI""" # init hours for intervals timeLimits = [] startTimeStr = None endTimeStr = None startSeconds = None endSeconds = None uaccValue = None uaccChanged = False # loop through all days for rHour in range(0, 23+1): # hour in str hourStr = str(rHour) # we process only hours that are available if hourStr in self._tkSavedCfg["timeLimitDaysHoursActual"][pDay]: # no value (interval was changed) uaccValue = self._tkSavedCfg["timeLimitDaysHoursActual"][pDay][hourStr][cons.TK_CTRL_UACC] if uaccValue is None else uaccValue # calc uacc changes uaccChanged = self._tkSavedCfg["timeLimitDaysHoursActual"][pDay][hourStr][cons.TK_CTRL_UACC] != uaccValue # if interval is complete and next hour is not available or there is not a continous interval (start != 0 or unaccounted changed, so it's different) if startTimeStr is not None and endTimeStr is not None: if (hourStr not in self._tkSavedCfg["timeLimitDaysHoursActual"][pDay] or (hourStr in self._tkSavedCfg["timeLimitDaysHoursActual"][pDay] and (self._tkSavedCfg["timeLimitDaysHoursActual"][pDay][hourStr][cons.TK_CTRL_SMIN] != 0 or uaccChanged is True)) ): # add new limit interval timeLimits.append([startTimeStr, endTimeStr, startSeconds, endSeconds, uaccValue]) # erase values startTimeStr = None endTimeStr = None uaccValue = None uaccChanged = False # we process only hours that are available if hourStr in self._tkSavedCfg["timeLimitDaysHoursActual"][pDay]: # uacc value uaccValue = self._tkSavedCfg["timeLimitDaysHoursActual"][pDay][hourStr][cons.TK_CTRL_UACC] # if start hour is not yet defined if startTimeStr is None: # first avaiable hour startSeconds = rHour * cons.TK_LIMIT_PER_HOUR + self._tkSavedCfg["timeLimitDaysHoursActual"][pDay][hourStr][cons.TK_CTRL_SMIN] * cons.TK_LIMIT_PER_MINUTE startTimeStr = self.formatTimeStr(startSeconds) # define end hour endDate = cons.TK_DATETIME_START + timedelta(hours=rHour, minutes=self._tkSavedCfg["timeLimitDaysHoursActual"][str(pDay)][hourStr][cons.TK_CTRL_EMIN]) endSeconds = int((endDate - cons.TK_DATETIME_START).total_seconds()) endTimeStr = self.formatTimeStr(endSeconds) # if current interval changes (process end of interval) or this is it, no more hours if self._tkSavedCfg["timeLimitDaysHoursActual"][pDay][hourStr][cons.TK_CTRL_EMIN] != cons.TK_LIMIT_PER_MINUTE or rHour == 23: # add new limit interval timeLimits.append([startTimeStr, endTimeStr, startSeconds, endSeconds, uaccValue]) # erase values startTimeStr = None endTimeStr = None uaccValue = None uaccChanged = False # return intervals return timeLimits # --------------- field value helper methods --------------- # def getSelectedDays(self): """Get selected day from day list""" # get selected rows for i in range(0, 2): # get selected rows (tm, paths) = self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").get_selection().get_selected_rows() # if nothing is selected, set first selected row (if there is nothing, no row is active) sel = paths is not None sel = len(paths) > 0 if sel else sel # nothing selected if not sel: # set self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").set_cursor(0) else: break # dict of id and nr of day days = [] # only if there is smth selected if paths is not None: # idx for path in paths: # get iter and values ti = tm.get_iter(path) days.append({"idx": tm.get_path(ti)[0], "nr": str(tm.get_value(ti, 0))}) # return return days def getSelectedHourInterval(self): """Get selected hour interval from hour interval list""" # refresh the child for i in range(0, 2): # get selection (tm, ti) = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").get_selection().get_selected() # if nothing is selected, get first selected row (if there is nothing, no row is active) if ti is None: # set self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").set_cursor(0) else: break # only if there is smth selected if ti is not None: # idx intervalIdx = tm.get_path(ti)[0] intervalDayNr = str(tm.get_value(ti, 3)) else: # nothing intervalIdx = None intervalDayNr = None # return return intervalIdx, intervalDayNr def getSelectedConfigElement(self, pElementName): """Get selected config element""" # refresh the child (tm, ti) = self._timekprAdminFormBuilder.get_object(pElementName).get_selection().get_selected() # return return tm.get_path(ti)[0] if ti is not None else None def sortHourIntervals(self): """Sort hour intervals for ease of use""" # sort vairables hours = {} rIdx = 0 # prepare sort for rIt in self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS"): hours[rIt[4]] = rIdx # count further rIdx += 1 # set sort order sortedHours = [] # set up proper order for rKey in sorted(hours): # append to order sortedHours.append(hours[rKey]) # reorder rows in liststore self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").reorder(sortedHours) # --------------- additional configuration methods --------------- # def getSelectedLockoutType(self): """Get selected restriction / lockout type""" # get lockout type lockoutType = None lockoutType = cons.TK_CTRL_RES_T if lockoutType is None and self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeTerminate").get_active() else lockoutType lockoutType = cons.TK_CTRL_RES_K if lockoutType is None and self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeKill").get_active() else lockoutType lockoutType = cons.TK_CTRL_RES_D if lockoutType is None and self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeShutdown").get_active() else lockoutType lockoutType = cons.TK_CTRL_RES_S if lockoutType is None and self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspend").get_active() else lockoutType lockoutType = cons.TK_CTRL_RES_W if lockoutType is None and self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWake").get_active() else lockoutType lockoutType = cons.TK_CTRL_RES_L if lockoutType is None and self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeLock").get_active() else lockoutType # result return lockoutType def setSelectedLockoutType(self, pLockoutType): """Get selected restriction / lockout type""" # set lockout type if pLockoutType == cons.TK_CTRL_RES_T: self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeTerminate").set_active(True) elif pLockoutType == cons.TK_CTRL_RES_K: self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeKill").set_active(True) elif pLockoutType == cons.TK_CTRL_RES_D: self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeShutdown").set_active(True) elif pLockoutType == cons.TK_CTRL_RES_S: self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspend").set_active(True) elif pLockoutType == cons.TK_CTRL_RES_W: self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWake").set_active(True) elif pLockoutType == cons.TK_CTRL_RES_L: self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeLock").set_active(True) def controlSelectedLockoutTypeHourIntervals(self, pInterval): """Set selected hour intervals""" # if no interval, just hide them if pInterval is not None: # get split interval hrInterval = pInterval.split(";") # set values self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeFromSB").set_value(int(hrInterval[0])) self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeToSB").set_value(int(hrInterval[1])) # set hours visible only when suspendwake self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeWakeupIntervalsLabel").set_visible(pInterval is not None) self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeFromSB").set_visible(pInterval is not None) self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeToSB").set_visible(pInterval is not None) self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeFromSB").set_sensitive(pInterval is not None) self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeToSB").set_sensitive(pInterval is not None) def enableTimeControlToday(self, pEnable=True): """Enable buttons to add time and PlayTime today""" for rCtrl in ( "TimekprUserConfTodaySettingsSetHrSB", "TimekprUserConfTodaySettingsSetMinSB", "TimekprUserConfTodaySettingsChoiceBX" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(pEnable) # --------------- info retrieval methods --------------- # def getAdminUserList(self): """Get user list via dbus""" # store userStore = self._timekprAdminFormBuilder.get_object("TimekprUserSelectionLS") # clear up userStore.clear() userStore.append(["", ""]) # def len widthInChars = 15 # get list result, message, userList = self._timekprAdminConnector.getUserList() # all ok if result == 0: # loop and print for rUser in userList: # name userName = "%s (%s)" % (rUser[0], rUser[1]) if (rUser[1] is not None and rUser[1] != "") else rUser[0] # determine maxlen widthInChars = max(widthInChars, len(userName) - 3) # add user userStore.append([rUser[0], userName]) # status self.setTimekprStatus(False, "User list retrieved") # enable self._timekprAdminFormBuilder.get_object("TimekprUserSelectionCB").set_sensitive(True) self._timekprAdminFormBuilder.get_object("TimekprUserSelectionRefreshBT").set_sensitive(self._timekprAdminFormBuilder.get_object("TimekprUserSelectionCB").get_sensitive()) # adjust widht self._timekprAdminFormBuilder.get_object("TimekprUserSelectionCBEntry").set_width_chars(widthInChars) # init first selection self._timekprAdminFormBuilder.get_object("TimekprUserSelectionCB").set_active(0) else: # status self.setTimekprStatus(False, message) # check the connection self.checkConnection() def retrieveTimekprConfig(self): """Retrieve timekpr configuration""" # init timekprConfig = {} result = 0 message = "" # get list result, message, timekprConfig = self._timekprAdminConnector.getTimekprConfiguration() # all ok if result == 0: # loop and print for rKey, rValue in timekprConfig.items(): # check all by keys if rKey == "TIMEKPR_LOGLEVEL": # log level self._tkSavedCfg["timekprLogLevel"] = int(rValue) elif rKey == "TIMEKPR_POLLTIME": # poll time self._tkSavedCfg["timekprPollingInterval"] = int(rValue) elif rKey == "TIMEKPR_SAVE_TIME": # save time self._tkSavedCfg["timekprSaveTime"] = int(rValue) elif rKey == "TIMEKPR_TERMINATION_TIME": # termination time self._tkSavedCfg["timekprTerminationTime"] = int(rValue) elif rKey == "TIMEKPR_FINAL_WARNING_TIME": # final warning time self._tkSavedCfg["timekprWarningTime"] = int(rValue) elif rKey == "TIMEKPR_FINAL_NOTIFICATION_TIME": # final notification time self._tkSavedCfg["timekprNotificationTime"] = int(rValue) elif rKey == "TIMEKPR_SESSION_TYPES_CTRL": # init self._tkSavedCfg["timekprTrackingSessions"] = [] # loop through available session types for rSessionType in rValue: # add config self._tkSavedCfg["timekprTrackingSessions"].append(str(rSessionType)) elif rKey == "TIMEKPR_SESSION_TYPES_EXCL": # init self._tkSavedCfg["timekprExcludedSessions"] = [] # loop through available session types for rSessionType in rValue: # add config self._tkSavedCfg["timekprExcludedSessions"].append(str(rSessionType)) elif rKey == "TIMEKPR_USERS_EXCL": # init self._tkSavedCfg["timekprExcludedUsers"] = [] # loop through available users for rUser in rValue: # add config self._tkSavedCfg["timekprExcludedUsers"].append(str(rUser)) elif rKey == "TIMEKPR_PLAYTIME_ENABLED": # PlayTime enabled self._tkSavedCfg["timekprPlayTimeEnabled"] = bool(rValue) elif rKey == "TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED": # PlayTime enhanced activity monitor enabled self._tkSavedCfg["timekprPlayTimeEnhancedActivityMonitorEnabled"] = bool(rValue) # apply config self.applyTimekprConfig() # determine control state self.calculateTimekprConfigControlAvailability() # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_CONFIG_RETRIEVED")) else: # disable all but choser self.toggleUserConfigControls(False, True) # status self.setTimekprStatus(False, message) # check the connection self.checkConnection() def retrieveUserInfoAndConfig(self, pUserName, pInfoLvl): """Retrieve user configuration""" # clear before user if pInfoLvl == cons.TK_CL_INF_FULL: # reset form self.clearAdminForm() # no username passed, we try to find one userName = self.getSelectedUserName() if pUserName is None else pUserName # if nothing is passed, nothing is done if userName is not None and userName != "": # init userConfig = {} # get list result, message, userConfig = self._timekprAdminConnector.getUserConfigurationAndInformation(userName, pInfoLvl) # all ok if result == 0: # reset if full info or realtime requested if pInfoLvl in (cons.TK_CL_INF_FULL, cons.TK_CL_INF_RT): # reset optional information labels for rCtrl in ( "TimekprUserConfTodayInfoLeftContLB", "TimekprUserConfTodayInfoInactiveLB" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_text(_NO_TIME_LIMIT_LABEL) # reset optional information labels for PlayTime self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLeftActualLB").set_text(_NO_TIME_LABEL) # reset activity count self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeTodaySettingsActivityCntLB").set_text("---") # loop and print for rKey, rValue in userConfig.items(): # these ar saved values, refresh of saved or full is asked if pInfoLvl in (cons.TK_CL_INF_FULL, cons.TK_CL_INF_SAVED): # this info is refreshed regularly (based on config keys) if rKey == "TIME_SPENT_DAY": # spent timeSpent = cons.TK_DATETIME_START + timedelta(seconds=abs(rValue)) timeSpentStr = "%s:%s:%s:%s" % (str((timeSpent - cons.TK_DATETIME_START).days).rjust(2, "0"), str(timeSpent.hour).rjust(2, "0") , str(timeSpent.minute).rjust(2, "0"), str(timeSpent.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodayInfoSpentTodayLB").set_text(timeSpentStr) elif rKey == "TIME_SPENT_WEEK": # spent week timeSpentWeek = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeSpentWeekStr = "%s:%s:%s:%s" % (str((timeSpentWeek - cons.TK_DATETIME_START).days).rjust(2, "0"), str(timeSpentWeek.hour).rjust(2, "0"), str(timeSpentWeek.minute).rjust(2, "0"), str(timeSpentWeek.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodayInfoSpentWeekLB").set_text(timeSpentWeekStr) elif rKey == "TIME_SPENT_MONTH": # spent month timeSpentMonth = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeSpentMonthStr = "%s:%s:%s:%s" % (str((timeSpentMonth - cons.TK_DATETIME_START).days).rjust(2, "0"), str(timeSpentMonth.hour).rjust(2, "0"), str(timeSpentMonth.minute).rjust(2, "0"), str(timeSpentMonth.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodayInfoSpentMonthLB").set_text(timeSpentMonthStr) # show balance elif rKey == "TIME_LEFT_DAY": # balance timeLeft = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeLeftStr = "%s:%s:%s:%s" % (str((timeLeft - cons.TK_DATETIME_START).days).rjust(2, "0"), str(timeLeft.hour).rjust(2, "0"), str(timeLeft.minute).rjust(2, "0"), str(timeLeft.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodayInfoLeftTodayLB").set_text(timeLeftStr) # show saved PlayTime left elif rKey == "PLAYTIME_LEFT_DAY": # PlayTime left timeLeft = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeLeftStr = "%s:%s:%s" % (str(timeLeft.hour).rjust(2, "0") , str(timeLeft.minute).rjust(2, "0"), str(timeLeft.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLeftSavedLB").set_text(timeLeftStr) # show actual PlayTime left elif rKey == "PLAYTIME_SPENT_DAY": # PlayTime left timeLeft = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeLeftStr = "%s:%s:%s" % (str(timeLeft.hour).rjust(2, "0") , str(timeLeft.minute).rjust(2, "0"), str(timeLeft.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeSpentLB").set_text(timeLeftStr) # refresh only if full or realtime asked if pInfoLvl in (cons.TK_CL_INF_FULL, cons.TK_CL_INF_RT): # show actual time left for continous use if rKey == "ACTUAL_TIME_LEFT_CONTINUOUS": # total left timeLeft = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeLeftStr = "%s:%s:%s:%s" % (str((timeLeft - cons.TK_DATETIME_START).days).rjust(2, "0"), str(timeLeft.hour).rjust(2, "0"), str(timeLeft.minute).rjust(2, "0"), str(timeLeft.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodayInfoLeftContLB").set_text(timeLeftStr) # show actual time inactive elif rKey == "ACTUAL_TIME_INACTIVE_SESSION": # total left timeLeft = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeLeftStr = "%s:%s:%s:%s" % (str((timeLeft - cons.TK_DATETIME_START).days).rjust(2, "0"), str(timeLeft.hour).rjust(2, "0"), str(timeLeft.minute).rjust(2, "0"), str(timeLeft.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodayInfoInactiveLB").set_text(timeLeftStr) # show actual PlayTime left elif rKey == "ACTUAL_PLAYTIME_LEFT_DAY": # PlayTime left timeLeft = cons.TK_DATETIME_START + timedelta(seconds=rValue) timeLeftStr = "%s:%s:%s" % (str(timeLeft.hour).rjust(2, "0") , str(timeLeft.minute).rjust(2, "0"), str(timeLeft.second).rjust(2, "0")) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLeftActualLB").set_text(timeLeftStr) # show actual PlayTime count elif rKey == "ACTUAL_ACTIVE_PLAYTIME_ACTIVITY_COUNT": # PlayTime count self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeTodaySettingsActivityCntLB").set_text(str(rValue)) # info is needed when full refresh requested if pInfoLvl == cons.TK_CL_INF_FULL: if rKey == "TRACK_INACTIVE": # track inactive self._tkSavedCfg["timeTrackInactive"] = bool(rValue) elif rKey == "HIDE_TRAY_ICON": # hide icon and notif self._tkSavedCfg["timeHideTrayIcon"] = bool(rValue) elif rKey == "LOCKOUT_TYPE": # set lockout type self._tkSavedCfg["timeLockoutType"] = rValue elif rKey == "WAKEUP_HOUR_INTERVAL": # set interval values self._tkSavedCfg["timeWakeInterval"] = rValue elif rKey == "ALLOWED_WEEKDAYS": # empty the values self._tkSavedCfg["timeLimitDays"] = [] # allowed weekdays for rDay in rValue: # set values self._tkSavedCfg["timeLimitDays"].append(str(rDay)) elif rKey == "LIMITS_PER_WEEKDAYS": # limits per allowed weekdays self._tkSavedCfg["timeLimitDaysLimits"] = [] # allowed weekdays for rDay in range(0, len(rValue)): # add the value self._tkSavedCfg["timeLimitDaysLimits"].append(int(rValue[rDay])) elif rKey == "LIMIT_PER_WEEK": # value self._tkSavedCfg["timeLimitWeek"] = int(rValue) elif rKey == "LIMIT_PER_MONTH": # value self._tkSavedCfg["timeLimitMonth"] = int(rValue) elif "ALLOWED_HOURS_" in rKey: # determine the day day = rKey[-1:] self._tkSavedCfg["timeLimitDaysHoursActual"][day] = {} # loop through available hours for rHour, rHourMinutes in rValue.items(): # add config self._tkSavedCfg["timeLimitDaysHoursActual"][day][str(rHour)] = {cons.TK_CTRL_SMIN: int(rHourMinutes[cons.TK_CTRL_SMIN]), cons.TK_CTRL_EMIN: int(rHourMinutes[cons.TK_CTRL_EMIN]), cons.TK_CTRL_UACC: bool(rHourMinutes[cons.TK_CTRL_UACC])} # set up saved config as well self._tkSavedCfg["timeLimitDaysHoursSaved"][day] = self._tkSavedCfg["timeLimitDaysHoursActual"][day].copy() # ## PlayTime config ## elif rKey == "PLAYTIME_ENABLED": # PlayTime enabled self._tkSavedCfg["playTimeEnabled"] = bool(rValue) elif rKey == "PLAYTIME_LIMIT_OVERRIDE_ENABLED": # PlayTime override enabled self._tkSavedCfg["playTimeOverrideEnabled"] = bool(rValue) elif rKey == "PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED": # PlayTime allowed during unaccounted intervals self._tkSavedCfg["playTimeUnaccountedIntervalsEnabled"] = bool(rValue) elif rKey == "PLAYTIME_ALLOWED_WEEKDAYS": # empty the values self._tkSavedCfg["playTimeLimitDays"] = [] # allowed weekdays for rDay in rValue: # set values self._tkSavedCfg["playTimeLimitDays"].append(str(rDay)) elif rKey == "PLAYTIME_LIMITS_PER_WEEKDAYS": # limits per allowed weekdays self._tkSavedCfg["playTimeLimitDaysLimits"] = [] # allowed weekdays for rDay in range(0, len(rValue)): # add the value self._tkSavedCfg["playTimeLimitDaysLimits"].append(int(rValue[rDay])) elif rKey == "PLAYTIME_ACTIVITIES": # PlayTime activity list self._tkSavedCfg["playTimeActivities"] = [] # allowed weekdays for rDay in range(0, len(rValue)): # add the value self._tkSavedCfg["playTimeActivities"].append([rValue[rDay][0], rValue[rDay][1]]) # clean up limits if full refresh requested if pInfoLvl == cons.TK_CL_INF_FULL: self.normalizeAllowedDaysAndLimits() # if PT override is enabled, we do not show time information for PT if self._tkSavedCfg["playTimeOverrideEnabled"]: # disable time show self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLeftSavedLB").set_text(_NO_TIME_LABEL) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLeftActualLB").set_text(_NO_TIME_LABEL) # config was updated only when full if pInfoLvl == cons.TK_CL_INF_FULL: # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_USER_CONFIG_RETRIEVED")) # apply config self.applyUserConfig() # determine control state self.calculateUserConfigControlAvailability() self.calculateUserPlayTimeConfigControlAvailability() self.calculateUserAdditionalConfigControlAvailability() # enable adding hours as well self.enableTimeControlToday() else: # disable all but choser self.toggleUserConfigControls(False, True) # status self.setTimekprStatus(False, message) # check the connection self.checkConnection() # return return True # --------------- retrieved configuration apply methods --------------- # def applyTimekprConfig(self): """Apply user configuration after getting it from server""" # ## log level ## self._timekprAdminFormBuilder.get_object("TimekprConfigurationLoglevelSB").set_value(self._tkSavedCfg["timekprLogLevel"]) self._timekprAdminFormBuilder.get_object("TimekprConfigurationLoglevelSB").set_sensitive(True) # ## poll time ## self._timekprAdminFormBuilder.get_object("TimekprConfigurationPollIntervalSB").set_value(self._tkSavedCfg["timekprPollingInterval"]) self._timekprAdminFormBuilder.get_object("TimekprConfigurationPollIntervalSB").set_sensitive(True) # ## save time ## self._timekprAdminFormBuilder.get_object("TimekprConfigurationSaveTimeSB").set_value(self._tkSavedCfg["timekprSaveTime"]) self._timekprAdminFormBuilder.get_object("TimekprConfigurationSaveTimeSB").set_sensitive(True) # ## termination time ## self._timekprAdminFormBuilder.get_object("TimekprConfigurationTerminationTimeSB").set_value(self._tkSavedCfg["timekprTerminationTime"]) self._timekprAdminFormBuilder.get_object("TimekprConfigurationTerminationTimeSB").set_sensitive(True) # ## final warning time ## self._timekprAdminFormBuilder.get_object("TimekprConfigurationWarningTimeSB").set_value(self._tkSavedCfg["timekprWarningTime"]) self._timekprAdminFormBuilder.get_object("TimekprConfigurationWarningTimeSB").set_sensitive(True) # ## final notification time ## self._timekprAdminFormBuilder.get_object("TimekprConfigurationFinalNotificationSB").set_value(self._tkSavedCfg["timekprNotificationTime"]) self._timekprAdminFormBuilder.get_object("TimekprConfigurationFinalNotificationSB").set_sensitive(True) # ## tracking session types ### self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsLS").clear() for rSessionType in self._tkSavedCfg["timekprTrackingSessions"]: # add config self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsLS").append([str(rSessionType)]) # enable editing for rObj in ( "TimekprTrackingSessionsTreeView", "TimekprTrackingSessionsButtonControlBX" ): self._timekprAdminFormBuilder.get_object(rObj).set_sensitive(True) # select first row if len(self._tkSavedCfg["timekprTrackingSessions"]) > 0: self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsTreeView").set_cursor(0) self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsTreeView").scroll_to_cell(0) # ## exclusion session types ## self._timekprAdminFormBuilder.get_object("TimekprExcludedSessionsLS").clear() for rSessionType in self._tkSavedCfg["timekprExcludedSessions"]: # add config self._timekprAdminFormBuilder.get_object("TimekprExcludedSessionsLS").append([str(rSessionType)]) # enable editing for rObj in ( "TimekprExcludedSessionsTreeView", "TimekprExcludedSessionsButtonControlBX" ): self._timekprAdminFormBuilder.get_object(rObj).set_sensitive(True) # select first row if len(self._tkSavedCfg["timekprExcludedSessions"]) > 0: self._timekprAdminFormBuilder.get_object("TimekprExcludedSessionsTreeView").set_cursor(0) self._timekprAdminFormBuilder.get_object("TimekprExcludedSessionsTreeView").scroll_to_cell(0) # ## excluded users ## self._timekprAdminFormBuilder.get_object("TimekprExcludedUsersLS").clear() for rUser in self._tkSavedCfg["timekprExcludedUsers"]: # add config self._timekprAdminFormBuilder.get_object("TimekprExcludedUsersLS").append([str(rUser)]) # enable editing for rObj in ( "TimekprExcludedUsersTreeView", "TimekprExcludedUsersButtonControlBX" ): self._timekprAdminFormBuilder.get_object(rObj).set_sensitive(True) # select first row if len(self._tkSavedCfg["timekprExcludedUsers"]) > 0: self._timekprAdminFormBuilder.get_object("TimekprExcludedUsersTreeView").set_cursor(0) self._timekprAdminFormBuilder.get_object("TimekprExcludedUsersTreeView").scroll_to_cell(0) # ## PlayTime ## # global enabled switch self._timekprAdminFormBuilder.get_object("TimekprPlayTimeEnableGlobalCB").set_active(self._tkSavedCfg["timekprPlayTimeEnabled"]) self._timekprAdminFormBuilder.get_object("TimekprPlayTimeEnableGlobalCB").set_sensitive(True) # global enhanced activity monitor self._timekprAdminFormBuilder.get_object("TimekprPlayTimeEnhancedActivityMonitorCB").set_active(self._tkSavedCfg["timekprPlayTimeEnhancedActivityMonitorEnabled"]) self._timekprAdminFormBuilder.get_object("TimekprPlayTimeEnhancedActivityMonitorCB").set_sensitive(True) # enable / disable controls self.toggleTimekprConfigControls(True) def applyUserConfig(self): """Apply user configuration after getting it from server""" # enable refresh self._timekprAdminFormBuilder.get_object("TimekprUserSelectionRefreshBT").set_sensitive(True) # ## allowed days ### for rDay in range(1, 7+1): # enable certain days self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS")[rDay-1][2] = (str(rDay) in self._tkSavedCfg["timeLimitDays"]) # enable editing for rCtrl in ( "TimekprWeekDaysTreeView", "TimekprHourIntervalsTreeView", "TimekprUserConfDaySettingsSetDaysHeaderControlBX" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(True) # ## limits per allowed days ### dayLimitIdx = -1 # loop through all days for rDay in cons.TK_ALLOWED_WEEKDAYS.split(";"): # day index dayIdx = int(rDay) - 1 # check whether this day is enabled if rDay in self._tkSavedCfg["timeLimitDays"]: # advance index dayLimitIdx += 1 else: continue # calculate time limit = self.formatTimeStr(self._tkSavedCfg["timeLimitDaysLimits"][dayLimitIdx], True) # enable certain days self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS")[dayIdx][3] = self._tkSavedCfg["timeLimitDaysLimits"][dayLimitIdx] # set appropriate label as well self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS")[dayIdx][4] = limit if rDay in self._tkSavedCfg["timeLimitDays"] else _NO_TIME_LABEL # ## hour intervals ## # intervals themselves will be adjusted depending on selected day, we just enable them here for rCtrl in ( "TimekprHourIntervalsTreeView", "TimekprUserConfDaySettingsSetDaysIntervalsControlBX" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(True) # select first row (if there are intervals) if dayLimitIdx > -1: self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsTreeView").set_cursor(0) self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsTreeView").scroll_to_cell(0) # ## limit per week / month ## for rWkDay in self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsLS"): # week if rWkDay[0] == "WK": limit = self._tkSavedCfg["timeLimitWeek"] elif rWkDay[0] == "MON": limit = self._tkSavedCfg["timeLimitMonth"] rWkDay[2] = limit rWkDay[3] = self.formatTimeStr(limit, True, True) # enable editing for rCtrl in ( "TimekprUserConfWkMonLimitsTreeView", "TimekprUserConfWkMonLimitsAdjustmentsBX", "TimekprUserConfWkMonLimitsAdjustmentControlButtonsBX" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(True) # current day currDay = datetime.now().isoweekday()-1 # determine curent day and point to it self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").set_cursor(currDay) self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").scroll_to_cell(currDay) self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").get_selection().emit("changed") # ## PlayTime config ## # PlayTime and PlayTime options enablement for rCtrl in ( ("TimekprUserPlayTimeEnableCB", "playTimeEnabled"), ("TimekprUserPlayTimeOverrideEnableCB", "playTimeOverrideEnabled"), ("TimekprUserPlayTimeUnaccountedIntervalsEnabledCB", "playTimeUnaccountedIntervalsEnabled") ): # set value self._timekprAdminFormBuilder.get_object(rCtrl[0]).set_active(self._tkSavedCfg[rCtrl[1]]) # enable field & set button self._timekprAdminFormBuilder.get_object(rCtrl[0]).set_sensitive(True) # ## PlayTime limits per allowed days ### # loop through all days for rDay in cons.TK_ALLOWED_WEEKDAYS.split(";"): # day index dayIdx = int(rDay) - 1 # check whether this day is enabled if rDay in self._tkSavedCfg["playTimeLimitDays"]: # advance index dayLimitIdx = self._tkSavedCfg["playTimeLimitDays"].index(rDay) else: # day not enabled dayLimitIdx = None # calculate time limit = self.formatTimeStr(self._tkSavedCfg["playTimeLimitDaysLimits"][dayLimitIdx], True) if dayLimitIdx is not None else _NO_TIME_LABEL # enable certain days self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS")[dayIdx][2] = dayLimitIdx is not None # enable time limit self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS")[dayIdx][3] = self._tkSavedCfg["playTimeLimitDaysLimits"][dayLimitIdx] if dayLimitIdx is not None else 0 # set appropriate label as well self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS")[dayIdx][4] = limit # determine curent day and point to it self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsTreeView").set_cursor(currDay) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsTreeView").scroll_to_cell(currDay) # enable PlayTime editing for rCtrl in ( "TimekprUserPlayTimeLimitsTreeView", "TimekprUserPlayTimeLimitsHeaderControlBX" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(True) # ## PlayTime activities ### activityIdx = -1 self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").clear() # check whether this day is enabled for rAct in self._tkSavedCfg["playTimeActivities"]: # advance index activityIdx += 1 # enable certain days self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS").append([str(activityIdx), rAct[0], rAct[1]]) # enable PlayTime editing self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesTreeView").set_sensitive(True) # if there are activities if activityIdx > -1: # select first row self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesTreeView").set_cursor(0) self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesTreeView").scroll_to_cell(0) # set enablement for PlayTime controls for rCtrl in ( "TimekprUserPlayTimeProcessesAdjustmentAddBT", "TimekprUserPlayTimeProcessesAdjustmentRemoveBT", "TimekprUserPlayTimeLimitsHeaderControlBX" ): # enable field & set button self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(True) # ## additional config ## # set values for track inactive and disable notifications for rCtrl in ( "TimekprUserConfTodaySettingsTrackInactiveCB", "TimekprUserConfTodaySettingsHideTrayIconCB" ): # set value self._timekprAdminFormBuilder.get_object(rCtrl).set_active(self._tkSavedCfg["timeTrackInactive"] if rCtrl == "TimekprUserConfTodaySettingsTrackInactiveCB" else self._tkSavedCfg["timeHideTrayIcon"]) # enable field & set button self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(True) # lockout type and intervals # set option self.setSelectedLockoutType(self._tkSavedCfg["timeLockoutType"]) # set option self.controlSelectedLockoutTypeHourIntervals(self._tkSavedCfg["timeWakeInterval"]) # enable editing self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeChoiceBoxBX").set_sensitive(True) # --------------- change detection and GUI action control methods --------------- # def calculateTimekprConfigControlAvailability(self, pApplyControls=True): """Calculate main control availability""" # this duplicates diff control as well changeControl = {} # perform? if not self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsTreeView").get_sensitive(): return changeControl # ## log level ## control = "TimekprConfigurationLoglevelSB" value = self._timekprAdminFormBuilder.get_object(control).get_value_as_int() changeControl[control] = {"st": value != self._tkSavedCfg["timekprLogLevel"], "val": value} # ## poll time ## control = "TimekprConfigurationPollIntervalSB" value = self._timekprAdminFormBuilder.get_object(control).get_value_as_int() changeControl[control] = {"st": value != self._tkSavedCfg["timekprPollingInterval"], "val": value} # ## save time ## control = "TimekprConfigurationSaveTimeSB" value = self._timekprAdminFormBuilder.get_object(control).get_value_as_int() changeControl[control] = {"st": value != self._tkSavedCfg["timekprSaveTime"], "val": value} # ## termination time ## control = "TimekprConfigurationTerminationTimeSB" value = self._timekprAdminFormBuilder.get_object(control).get_value_as_int() changeControl[control] = {"st": value != self._tkSavedCfg["timekprTerminationTime"], "val": value} # ## final warning time ## control = "TimekprConfigurationWarningTimeSB" value = self._timekprAdminFormBuilder.get_object(control).get_value_as_int() changeControl[control] = {"st": value != self._tkSavedCfg["timekprWarningTime"], "val": value} # ## final notification ## control = "TimekprConfigurationFinalNotificationSB" value = self._timekprAdminFormBuilder.get_object(control).get_value_as_int() changeControl[control] = {"st": value != self._tkSavedCfg["timekprNotificationTime"], "val": value} # ## tracking session types ### tmpArray = [str(rIt[0]) for rIt in self._timekprAdminFormBuilder.get_object("TimekprTrackingSessionsLS") if rIt[0] != ""] control = "TimekprTrackingSessionsLS" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["timekprTrackingSessions"], "val": tmpArray.copy()} # ## exclusion session types ## tmpArray = [str(rIt[0]) for rIt in self._timekprAdminFormBuilder.get_object("TimekprExcludedSessionsLS") if rIt[0] != ""] control = "TimekprExcludedSessionsLS" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["timekprExcludedSessions"], "val": tmpArray.copy()} # ## excluded users ## tmpArray = [str(rIt[0]) for rIt in self._timekprAdminFormBuilder.get_object("TimekprExcludedUsersLS") if rIt[0] != ""] control = "TimekprExcludedUsersLS" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["timekprExcludedUsers"], "val": tmpArray.copy()} # ## global PlayTime switch ## control = "TimekprPlayTimeEnableGlobalCB" value = self._timekprAdminFormBuilder.get_object(control).get_active() changeControl[control] = {"st": value != self._tkSavedCfg["timekprPlayTimeEnabled"], "val": value} # ## global PlayTime switch ## control = "TimekprPlayTimeEnhancedActivityMonitorCB" value = self._timekprAdminFormBuilder.get_object(control).get_active() changeControl[control] = {"st": value != self._tkSavedCfg["timekprPlayTimeEnhancedActivityMonitorEnabled"], "val": value} # if at least one is changed enable = False if pApplyControls: for rKey, rVal in changeControl.items(): # one thing changed if rVal["st"]: # enable enable = rVal["st"] # no need to search further break # enabled or not self._timekprAdminFormBuilder.get_object("TimekprConfigurationApplyBT").set_sensitive(enable) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprConfigurationApplyBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enable else None) # tab color self._timekprAdminFormBuilder.get_object("TimekprConfigurationTabLabel").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enable else None) # return return changeControl def calculateUserTodayControlAvailability(self): """Calculate user today config control availability""" # ## add time today ## enabled = (self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetHrSB").get_value_as_int() != 0 or self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetMinSB").get_value_as_int() != 0) for rCtrl in ( "TimekprUserConfTodaySettingsSetAddBT", "TimekprUserConfTodaySettingsSetSubractBT", "TimekprUserConfTodaySettingsSetSetBT" ): self._timekprAdminFormBuilder.get_object(rCtrl).set_sensitive(enabled) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetAddBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enabled else None) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetSubractBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enabled else None) self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetSetBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enabled else None) # tab color self._timekprAdminFormBuilder.get_object("TimekprUserConfTodayLabel").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enabled else None) def calculateUserConfigControlAvailability(self, pApplyControls=True): """Calculate user config control availability""" # this duplicates diff control as well changeControl = {} # perform? if not self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").get_sensitive(): return changeControl # get stores (for use later) limitSt = self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS") wkMonSt = self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsLS") # ## time day config ## tmpArray = [str(rIt[0]) for rIt in limitSt if rIt[2]] control = "TimekprUserWeekDaysLSD" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["timeLimitDays"], "val": tmpArray.copy()} # ## time limits per allowed days ### tmpArray = [rIt[3] for rIt in limitSt if rIt[2]] control = "TimekprUserWeekDaysLSL" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["timeLimitDaysLimits"], "val": tmpArray.copy()} # ## intervals ### areIntervalsVerified = self.areHoursVerified() control = "TimekprHourIntervalsLS" changeControl[control] = {"st": self._tkSavedCfg["timeLimitDaysHoursActual"] != self._tkSavedCfg["timeLimitDaysHoursSaved"], "val": self._tkSavedCfg["timeLimitDaysHoursActual"]} # ## week / month limits ### for rIt in wkMonSt: # week or month? if rIt[0] == "WK": control = "TimekprUserConfWkMonLimitsLSWK" changeControl[control] = {"st": rIt[2] != self._tkSavedCfg["timeLimitWeek"], "val": rIt[2]} elif rIt[0] == "MON": control = "TimekprUserConfWkMonLimitsLSMON" changeControl[control] = {"st": rIt[2] != self._tkSavedCfg["timeLimitMonth"], "val": rIt[2]} # if at least one is changed configChanged = False if pApplyControls: for rKey, rVal in changeControl.items(): # one thing changed if rVal["st"]: # enable configChanged = rVal["st"] # no need to search further break # enabled or not self._timekprAdminFormBuilder.get_object("TimekprUserConfDaySettingsApplyBT").set_sensitive(configChanged and areIntervalsVerified) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprUserConfDaySettingsApplyBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if configChanged else None) # enable / disable verify self._timekprAdminFormBuilder.get_object("TimekprUserConfDaySettingsSetDaysIntervalsVerifyBT").set_sensitive(not areIntervalsVerified) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprUserConfDaySettingsSetDaysIntervalsVerifyBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if not areIntervalsVerified else None) # tab color self._timekprAdminFormBuilder.get_object("TimekprUserConfDailyLabel").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if (configChanged or not areIntervalsVerified) else None) # return return changeControl def calculateUserPlayTimeConfigControlAvailability(self, pApplyControls=True): """Calculate user PlayTime config control availability""" # this duplicates diff control as well changeControl = {} # perform? if not self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsTreeView").get_sensitive(): return changeControl # ## PlayTime enabled ## control = "TimekprUserPlayTimeEnableCB" value = self._timekprAdminFormBuilder.get_object(control).get_active() changeControl[control] = {"st": value != self._tkSavedCfg["playTimeEnabled"], "val": value} # ## PlayTime override enabled ## control = "TimekprUserPlayTimeOverrideEnableCB" value = self._timekprAdminFormBuilder.get_object(control).get_active() changeControl[control] = {"st": value != self._tkSavedCfg["playTimeOverrideEnabled"], "val": value} # ## PlayTime allowed during unaccounted intervals ## control = "TimekprUserPlayTimeUnaccountedIntervalsEnabledCB" value = self._timekprAdminFormBuilder.get_object(control).get_active() changeControl[control] = {"st": value != self._tkSavedCfg["playTimeUnaccountedIntervalsEnabled"], "val": value} # get stores (for use later) limitSt = self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS") actSt = self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS") actStLen = len(actSt) # ## PlayTime day config ## tmpArray = [str(rIt[0]) for rIt in limitSt if rIt[2]] control = "TimekprUserPlayTimeLimitsLSD" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["playTimeLimitDays"], "val": tmpArray.copy()} # ## PlayTime limits per allowed days ### tmpArray = [rIt[3] for rIt in limitSt if rIt[2]] control = "TimekprUserPlayTimeLimitsLSL" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["playTimeLimitDaysLimits"], "val": tmpArray.copy()} # ## PlayTime activities ### tmpArray = [] idx = 0 for rIt in actSt: # increase idx idx += 1 # do not add, if last line is not filed in properly if not (idx == actStLen and rIt[1] == ""): # add mask and description tmpArray.append([rIt[1], rIt[2]]) control = "TimekprUserPlayTimeProcessesLS" changeControl[control] = {"st": tmpArray != self._tkSavedCfg["playTimeActivities"], "val": tmpArray.copy()} # if at least one is changed enable = False if pApplyControls: for rKey, rVal in changeControl.items(): # one thing changed if rVal["st"]: # enable enable = rVal["st"] # no need to search further break # enabled or not self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesApplyBT").set_sensitive(enable) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesApplyBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enable else None) # tab color self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLabel").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enable else None) # return return changeControl def calculateUserAdditionalConfigControlAvailability(self, pApplyControls=True): """Calculate user config control availability""" # this duplicates diff control as well changeControl = {} # ## Track inactive enabled ## control = "TimekprUserConfTodaySettingsTrackInactiveCB" value = self._timekprAdminFormBuilder.get_object(control).get_active() changeControl[control] = {"st": value != self._tkSavedCfg["timeTrackInactive"], "val": value} # ## Hide try icon enabled ## control = "TimekprUserConfTodaySettingsHideTrayIconCB" value = self._timekprAdminFormBuilder.get_object(control).get_active() changeControl[control] = {"st": value != self._tkSavedCfg["timeHideTrayIcon"], "val": value} # ## Lockout type / interval ## control = "TimekprUserConfAddOptsLockoutType" # get lockout type lockoutType = self.getSelectedLockoutType() # intervals hrFrom = str(self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeFromSB").get_value_as_int()) if lockoutType == cons.TK_CTRL_RES_W else "0" hrTo = str(self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLockoutTypeSuspendWakeToSB").get_value_as_int()) if lockoutType == cons.TK_CTRL_RES_W else "23" interval = "%s;%s" % (hrFrom, hrTo) value = (lockoutType, hrFrom, hrTo) changeControl[control] = {"st": lockoutType != self._tkSavedCfg["timeLockoutType"] or interval != self._tkSavedCfg["timeWakeInterval"], "val": value} # interval control self.controlSelectedLockoutTypeHourIntervals(interval if self.getSelectedLockoutType() == cons.TK_CTRL_RES_W else None) # if at least one is changed enable = False if pApplyControls: for rKey, rVal in changeControl.items(): # one thing changed if rVal["st"]: # enable enable = rVal["st"] # no need to search further break # enabled or not self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsApplyBT").set_sensitive(enable) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsApplyBT").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enable else None) # tab color self._timekprAdminFormBuilder.get_object("TimekprUserConfAddOptsLabel").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if enable else None) # return return changeControl # --------------- changed information publish methods --------------- # def applyTimekprConfigurationChanges(self): """Apply configuration changes to server""" # get what's changed changeControl = self.calculateTimekprConfigControlAvailability(False) # initial values result = 0 message = "" # loop through all changes for rKey, rVal in changeControl.items(): # changed if rVal["st"]: # check what element we have, depending on that call different interface # ## poll time ## if rKey == "TimekprConfigurationLoglevelSB": # call server result, message = self._timekprAdminConnector.setTimekprLogLevel(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprLogLevel"] = rVal["val"] # ## poll time ## elif rKey == "TimekprConfigurationPollIntervalSB": # call server result, message = self._timekprAdminConnector.setTimekprPollTime(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprPollingInterval"] = rVal["val"] # ## save time ## elif rKey == "TimekprConfigurationSaveTimeSB": # call server result, message = self._timekprAdminConnector.setTimekprSaveTime(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprSaveTime"] = rVal["val"] # ## termination time ## elif rKey == "TimekprConfigurationTerminationTimeSB": # call server result, message = self._timekprAdminConnector.setTimekprTerminationTime(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprTerminationTime"] = rVal["val"] # ## final warning time ## elif rKey == "TimekprConfigurationWarningTimeSB": # call server result, message = self._timekprAdminConnector.setTimekprFinalWarningTime(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprWarningTime"] = rVal["val"] # ## final notification ## elif rKey == "TimekprConfigurationFinalNotificationSB": # call server result, message = self._timekprAdminConnector.setTimekprFinalNotificationTime(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprNotificationTime"] = rVal["val"] # ## tracking session types ### elif rKey == "TimekprTrackingSessionsLS": # call server result, message = self._timekprAdminConnector.setTimekprSessionsCtrl(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprTrackingSessions"] = rVal["val"].copy() # ## exclusion session types ## elif rKey == "TimekprExcludedSessionsLS": # call server result, message = self._timekprAdminConnector.setTimekprSessionsExcl(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprExcludedSessions"] = rVal["val"].copy() # ## excluded users ## elif rKey == "TimekprExcludedUsersLS": # call server result, message = self._timekprAdminConnector.setTimekprUsersExcl(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprExcludedUsers"] = rVal["val"].copy() # ## PlayTime enabled ## elif rKey == "TimekprPlayTimeEnableGlobalCB": # call server result, message = self._timekprAdminConnector.setTimekprPlayTimeEnabled(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprPlayTimeEnabled"] = rVal["val"] # ## PlayTime enhanced activity monitor ## elif rKey == "TimekprPlayTimeEnhancedActivityMonitorCB": # call server result, message = self._timekprAdminConnector.setTimekprPlayTimeEnhancedActivityMonitorEnabled(rVal["val"]) # successful call if result == 0: # set internal state self._tkSavedCfg["timekprPlayTimeEnhancedActivityMonitorEnabled"] = rVal["val"] # if all ok if result != 0: # status self.setTimekprStatus(False, message) # that's it break # fine if result != 0: # check the connection self.checkConnection() else: # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_CONFIGURATION_SAVED")) # recalc the control state self.calculateTimekprConfigControlAvailability() def applyUserTodayConfigurationChanges(self, pType, pOperation): """Process actual call to set time for user""" # get username userName = self.getSelectedUserName() # if we have username if userName is not None: # initial values result = 0 message = "" # regular time or PlayTime hrSb = "TimekprUserConfTodaySettingsSetHrSB" minSb = "TimekprUserConfTodaySettingsSetMinSB" # get time to add timeToAdjust = self._timekprAdminFormBuilder.get_object(hrSb).get_value_as_int() * cons.TK_LIMIT_PER_HOUR timeToAdjust += self._timekprAdminFormBuilder.get_object(minSb).get_value_as_int() * cons.TK_LIMIT_PER_MINUTE if pType == "Time": # call server result, message = self._timekprAdminConnector.setTimeLeft(userName, pOperation, timeToAdjust) elif pType == "PlayTime": # call server result, message = self._timekprAdminConnector.setPlayTimeLeft(userName, pOperation, timeToAdjust) # successful call if result == 0: if pType == "Time": # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_ADJUSTTIME_PROCESSED")) elif pType == "PlayTime": # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_PT_ADJUSTTIME_PROCESSED")) # reset values to form for rCtrl in (hrSb, minSb): # no value to add self._timekprAdminFormBuilder.get_object(rCtrl).set_value(0) else: # status self.setTimekprStatus(False, message) # check the connection self.checkConnection() # recalc the control state self.calculateUserTodayControlAvailability() def applyUserLimitConfigurationChanges(self): """Apply configuration changes to server""" # get what's changed changeControl = self.calculateUserConfigControlAvailability(False) # get username userName = self.getSelectedUserName() # initial values result = 0 message = "" changeCnt = 0 # loop through all changes for rKey, rVal in changeControl.items(): # changed if rVal["st"]: # check what element we have, depending on that call different interface # ## week limit ## if rKey == "TimekprUserConfWkMonLimitsLSWK": # call server result, message = self._timekprAdminConnector.setTimeLimitForWeek(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeLimitWeek"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_WKMONADJUSTTIME_PROCESSED")) # ## month limit ## elif rKey == "TimekprUserConfWkMonLimitsLSMON": # call server result, message = self._timekprAdminConnector.setTimeLimitForMonth(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeLimitMonth"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_WKMONADJUSTTIME_PROCESSED")) # ## day config ## elif rKey == "TimekprUserWeekDaysLSD": # call server result, message = self._timekprAdminConnector.setAllowedDays(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeLimitDays"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_ALLOWEDDAYS_PROCESSED")) # ## limits per allowed days ### elif rKey == "TimekprUserWeekDaysLSL": # call server result, message = self._timekprAdminConnector.setTimeLimitForDays(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeLimitDaysLimits"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_TIMELIMITS_PROCESSED")) # ## hour allowance activities ### elif rKey == "TimekprHourIntervalsLS": # loop through changed day hours for rDay in rVal["val"]: # day changed hrs = None if self._tkSavedCfg["timeLimitDaysHoursActual"][rDay] == self._tkSavedCfg["timeLimitDaysHoursSaved"][rDay] else self._tkSavedCfg["timeLimitDaysHoursActual"][rDay] # hours changed if hrs is not None: # call server result, message = self._timekprAdminConnector.setAllowedHours(userName, rDay, hrs) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeLimitDaysHoursSaved"][rDay] = self._tkSavedCfg["timeLimitDaysHoursActual"][rDay].copy() # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_ALLOWEDHOURS_PROCESSED")) else: # finish break # if all ok if result != 0: # status self.setTimekprStatus(False, message) # that's it break # fine if result != 0: # check the connection self.checkConnection() # override messages in case more then one option was processed elif changeCnt > 1: # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_USER_LIMIT_CONFIGURATION_SAVED")) # recalc the control state self.calculateUserConfigControlAvailability() def applyUserPlayTimeConfigurationChanges(self): """Apply configuration changes to server""" # get what's changed changeControl = self.calculateUserPlayTimeConfigControlAvailability(False) # get username userName = self.getSelectedUserName() # initial values result = 0 message = "" changeCnt = 0 # loop through all changes for rKey, rVal in changeControl.items(): # changed if rVal["st"]: # check what element we have, depending on that call different interface # ## PlayTime enabled ## if rKey == "TimekprUserPlayTimeEnableCB": # call server result, message = self._timekprAdminConnector.setPlayTimeEnabled(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["playTimeEnabled"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_PT_ENABLEMENT_PROCESSED")) # ## PlayTime override enabled ## elif rKey == "TimekprUserPlayTimeOverrideEnableCB": # call server result, message = self._timekprAdminConnector.setPlayTimeLimitOverride(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["playTimeOverrideEnabled"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_PT_OVERRIDE_PROCESSED")) # ## PlayTime allowed during unaccounted intervals ## elif rKey == "TimekprUserPlayTimeUnaccountedIntervalsEnabledCB": # call server result, message = self._timekprAdminConnector.setPlayTimeUnaccountedIntervalsEnabled(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["playTimeUnaccountedIntervalsEnabled"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_PT_ALLOWED_UNLIMITED_INTERVALS_PROCESSED")) # ## PlayTime day config ## elif rKey == "TimekprUserPlayTimeLimitsLSD": # call server result, message = self._timekprAdminConnector.setPlayTimeAllowedDays(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["playTimeLimitDays"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_PT_ALLOWEDDAYS_PROCESSED")) # ## PlayTime limits per allowed days ### elif rKey == "TimekprUserPlayTimeLimitsLSL": # call server result, message = self._timekprAdminConnector.setPlayTimeLimitsForDays(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["playTimeLimitDaysLimits"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_PT_TIMELIMITS_PROCESSED")) # ## PlayTime activities ### elif rKey == "TimekprUserPlayTimeProcessesLS": # call server result, message = self._timekprAdminConnector.setPlayTimeActivities(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["playTimeActivities"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_PT_ACTIVITIES_PROCESSED")) # if all ok if result != 0: # status self.setTimekprStatus(False, message) # that's it break # fine if result != 0: # check the connection self.checkConnection() # override messages in case more then one option was processed elif changeCnt > 1: # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_USER_PT_LIMIT_CONFIGURATION_SAVED")) # recalc the control state self.calculateUserPlayTimeConfigControlAvailability() def applyUserAdditionalConfigurationChanges(self): """Apply configuration changes to server""" # get what's changed changeControl = self.calculateUserAdditionalConfigControlAvailability(False) # get username userName = self.getSelectedUserName() # initial values result = 0 message = "" changeCnt = 0 # loop through all changes for rKey, rVal in changeControl.items(): # changed if rVal["st"]: # check what element we have, depending on that call different interface # ## Track inactive enabled ## if rKey == "TimekprUserConfTodaySettingsTrackInactiveCB": # call server result, message = self._timekprAdminConnector.setTrackInactive(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeTrackInactive"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_TRACKINACTIVE_PROCESSED")) # ## Hide try icon enabled ## elif rKey == "TimekprUserConfTodaySettingsHideTrayIconCB": # call server result, message = self._timekprAdminConnector.setHideTrayIcon(userName, rVal["val"]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeHideTrayIcon"] = rVal["val"] # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_HIDETRAYICON_PROCESSED")) # ## Lockout type / interval ## elif rKey == "TimekprUserConfAddOptsLockoutType": # call server result, message = self._timekprAdminConnector.setLockoutType(userName, rVal["val"][0], rVal["val"][1], rVal["val"][2]) # successful call if result == 0: # cnt changeCnt += 1 # set internal state self._tkSavedCfg["timeLockoutType"] = rVal["val"][0] self._tkSavedCfg["timeWakeInterval"] = "%s;%s" % ( rVal["val"][1], rVal["val"][2]) # print success message self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_LOCKOUTTYPE_PROCESSED")) # if all ok if result != 0: # status self.setTimekprStatus(False, message) # that's it break # fine if result != 0: # check the connection self.checkConnection() # override messages in case more then one option was processed elif changeCnt > 1: # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_USER_ADDOPTS_CONFIGURATION_SAVED")) # recalc the control state self.calculateUserAdditionalConfigControlAvailability() # --------------- GTK signal methods --------------- # # --------------- timekpr configuration GTK signal helper methods --------------- # def addElementToList(self, pName): """Add tracked session""" lstSt = self._timekprAdminFormBuilder.get_object("%sLS" % (pName)) lstTw = self._timekprAdminFormBuilder.get_object("%sTreeView" % (pName)) lstLen = len(lstSt) # check if the last one is not empty (no need to add more empty rows) if lstLen > 0 and lstSt[lstLen-1][0] != "": # add empty item lstSt.append([""]) # scroll to end lstTw.set_cursor(lstLen) lstTw.scroll_to_cell(lstLen) # verify control availability self.calculateTimekprConfigControlAvailability() def removeElementFromList(self, pName): """Remove tracked session""" # defaults elemIdx = self.getSelectedConfigElement("%sTreeView" % (pName)) rIdx = 0 # remove selected item for rIt in self._timekprAdminFormBuilder.get_object("%sLS" % (pName)): # check what to remove if elemIdx == rIdx: # remove self._timekprAdminFormBuilder.get_object("%sLS" % (pName)).remove(rIt.iter) # this is it break # count further rIdx += 1 # verify control availability self.calculateTimekprConfigControlAvailability() def setTimekprExcludedTrackedValue(self, pPath, pText, pWhat): """Set internal representation of in-place edited value""" # def lStN = None if pWhat == "TrackedSessions": # store lStN = "TimekprTrackingSessionsLS" elif pWhat == "ExcludedSessions": # store lStN = "TimekprExcludedSessionsLS" elif pWhat == "ExcludedUsers": # store lStN = "TimekprExcludedUsersLS" # handled type if lStN is not None: # get store object self._timekprAdminFormBuilder.get_object(lStN)[pPath][0] = pText # calculate control availability self.calculateTimekprConfigControlAvailability() # --------------- timekpr configuration GTK signal methods --------------- # def configControlSwitchesChanged(self, evt): """Change any control item (warning, poll, etc.)""" # verify control availability self.calculateTimekprConfigControlAvailability() def trackedSessionsAddClicked(self, evt): """Add tracked session""" self.addElementToList("TimekprTrackingSessions") def trackedSessionsRemoveClicked(self, evt): """Remove tracked session""" self.removeElementFromList("TimekprTrackingSessions") def excludedSessionsAddClicked(self, evt): """Add excluded session""" self.addElementToList("TimekprExcludedSessions") def excludedSessionsRemoveClicked(self, evt): """Remove excluded session""" self.removeElementFromList("TimekprExcludedSessions") def excludedUsersAddClicked(self, evt): """Add excluded session""" self.addElementToList("TimekprExcludedUsers") def excludedUsersRemoveClicked(self, evt): """Remove excluded user""" self.removeElementFromList("TimekprExcludedUsers") def timekprTrackedSessionsEdited(self, widget, path, text): """Tracked session values edited""" self.setTimekprExcludedTrackedValue(path, text, "TrackedSessions") def timekprExcludedSessionsEdited(self, widget, path, text): """Excluded session values edited""" self.setTimekprExcludedTrackedValue(path, text, "ExcludedSessions") def timekprExcludedUsersEdited(self, widget, path, text): """Excluded user values edited""" self.setTimekprExcludedTrackedValue(path, text, "ExcludedUsers") def applyTimekprConfigurationChangesClicked(self, evt): """Apply configuration changes""" # disable button so it cannot be triggered again self._timekprAdminFormBuilder.get_object("TimekprConfigurationApplyBT").set_sensitive(False) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprConfigurationApplyBT").modify_fg(Gtk.StateFlags.NORMAL, None) # tab color self._timekprAdminFormBuilder.get_object("TimekprConfigurationTabLabel").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if self._timekprAdminFormBuilder.get_object("TimekprConfigurationApplyBT").get_sensitive() else None) # process setting self.applyTimekprConfigurationChanges() # --------------- user selection GTK signal methods --------------- # def userSelectionChanged(self, evt, pInfoLvl=None): """User selected""" # get username userName = self.getSelectedUserName() # only if connected if userName is not None and userName != "": # get user config self.retrieveUserInfoAndConfig(userName, cons.TK_CL_INF_FULL if pInfoLvl is None else pInfoLvl) else: # disable all self.toggleUserConfigControls(False, True) def userConfigurationRefreshClicked(self, evt): """User requested config restore from server""" self._timekprAdminFormBuilder.get_object("TimekprUserSelectionCB").emit("changed") # --------------- today page GTK signal methods --------------- # def todayAddTimeChanged(self, evt): """Call control calculations when time has been added""" # recalc control availability self.calculateUserTodayControlAvailability() def todayAddPlayTimeChanged(self, evt): """Call control calculations when time has been added""" # recalc control availability self.calculateUserTodayControlAvailability() def todayAddTimeClicked(self, evt): """Add time to user""" # disable button so it cannot be triggered again self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetAddBT").set_sensitive(False) # get choice type = "Time" if self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsChoiceTimeRB").get_active() else "PlayTime" # process setting self.applyUserTodayConfigurationChanges(type, "+") def todaySubtractTimeClicked(self, evt): """Subtract time from user""" # disable button so it cannot be triggered again self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetSubractBT").set_sensitive(False) # get choice type = "Time" if self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsChoiceTimeRB").get_active() else "PlayTime" # process setting self.applyUserTodayConfigurationChanges(type, "-") def todaySetTimeClicked(self, evt): """Set exact time for user""" # disable button so it cannot be triggered again self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsSetSetBT").set_sensitive(False) # get choice type = "Time" if self._timekprAdminFormBuilder.get_object("TimekprUserConfTodaySettingsChoiceTimeRB").get_active() else "PlayTime" # process setting self.applyUserTodayConfigurationChanges(type, "=") # --------------- limit configuration GTK signal helper methods --------------- # def verifyAndSetHourInterval(self, path, text, pIsFrom): """Verify and set hour values""" # store intervalSt = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS") # value before secsBefore = intervalSt[path][4 if pIsFrom else 5] # def secs = self.verifyAndCalcLimit(text, "h") # if we could calculate seconds (i.e. entered text is correct) if secs is not None: # if values before and after does not change (or initial ""), we do nothing if secsBefore != secs or (intervalSt[path][0] == -1 and intervalSt[path][1 if pIsFrom else 2] == ""): # format secs text = self.formatTimeStr(secs) # set values intervalSt[path][1 if pIsFrom else 2] = text intervalSt[path][4 if pIsFrom else 5] = secs # reset id intervalSt[path][0] = -1 # calculate control availability self.calculateUserConfigControlAvailability() def verifyAndSetWeeklyLimits(self, path, text): """Verify and set weekly values""" # store limitsSt = self._timekprAdminFormBuilder.get_object("TimekprUserConfWkMonLimitsLS") # value before secsBefore = limitsSt[path][2] # def secs = self.verifyAndCalcLimit(text, "w" if limitsSt[path][0] == "WK" else "m") # if we could calculate seconds (i.e. entered text is correct) if secs is not None: # if values before and after does not change, we do nothing if secsBefore != secs: # format secs text = self.formatTimeStr(secs, pFormatSecs=True, pFormatDays=True) # set values limitsSt[path][3] = text limitsSt[path][2] = secs # calculate control availability self.calculateUserConfigControlAvailability() def verifyAndSetDayLimits(self, path, text, pIsPlayTime=False): """Verify and set daily values""" # store limitsSt = self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS" if pIsPlayTime else "TimekprWeekDaysLS") controlFnc = self.calculateUserPlayTimeConfigControlAvailability if pIsPlayTime else self.calculateUserConfigControlAvailability # value before secsBefore = limitsSt[path][3] # def secs = self.verifyAndCalcLimit(text, "d") # if we could calculate seconds (i.e. entered text is correct) if secs is not None: # if values before and after does not change, we do nothing if secsBefore != secs: # format secs text = self.formatTimeStr(secs, pFormatSecs=True) # set values limitsSt[path][4] = text limitsSt[path][3] = secs # calculate control availability controlFnc() def areHoursVerified(self): """Return whether all hours have been verified""" # def result = True # store intervalSt = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS") # loop through all for rInt in intervalSt: # check whether it has been verified (id = -1 means not verified) if rInt[0] < 0 and not (rInt[4] == 0 and rInt[4] == rInt[5]): # not verified result = False break # result return result def verifyAndCalcLimit(self, pLimitStr, pLimitType): """Parse user entered limit""" # add limits def _addLimit(pSecs, pAddSecs): # add limits return pAddSecs if pSecs is None else pSecs + pAddSecs # def secs = None # determine interval type and calculate seconds according to it try: # days to weeks/month if pLimitType in ("w", "m") and _DAY_HOUR_MIN_SEC_REGEXP.match(pLimitStr): # calculate seconds secs = min(_addLimit(secs, int(_DAY_HOUR_MIN_SEC_REGEXP.sub(r"\4", pLimitStr))), cons.TK_LIMIT_PER_MINUTE) # days to weeks/month if pLimitType in ("w", "m", "d") and _DAY_HOUR_MIN_REGEXP.match(pLimitStr): # calculate minutes secs = min(_addLimit(secs, int(_DAY_HOUR_MIN_REGEXP.sub(r"\3", pLimitStr)) * (cons.TK_LIMIT_PER_MINUTE if pLimitType != "d" else 1)), cons.TK_LIMIT_PER_HOUR if pLimitType != "d" else cons.TK_LIMIT_PER_MINUTE) # hours/minutes or days/hours if _HOUR_MIN_REGEXP.match(pLimitStr): # calculate seconds secs = min(_addLimit(secs, int(_HOUR_MIN_REGEXP.sub(r"\2", pLimitStr)) * (cons.TK_LIMIT_PER_MINUTE if pLimitType in ("h", "d") else cons.TK_LIMIT_PER_HOUR)), cons.TK_LIMIT_PER_HOUR if pLimitType in ("h", "d") else cons.TK_LIMIT_PER_DAY) # hours / days if _HOUR_REGEXP.match(pLimitStr): # calculate seconds secs = min(_addLimit(secs, int(_HOUR_REGEXP.sub(r"\1", pLimitStr)) * (cons.TK_LIMIT_PER_HOUR if pLimitType in ("h", "d") else cons.TK_LIMIT_PER_DAY)), cons.TK_LIMIT_PER_DAY if pLimitType in ("h", "d") else cons.TK_LIMIT_PER_MONTH) # no error if secs is not None: # normalize total seconds secs = min(secs, cons.TK_LIMIT_PER_MONTH if pLimitType == "m" else cons.TK_LIMIT_PER_WEEK if pLimitType == "w" else cons.TK_LIMIT_PER_DAY) except: # we do not care about any errors secs = None # return seconds return secs # --------------- limit configuration GTK signal methods --------------- # def dayLimitsIncreaseClicked(self, evt): """Increase time limits""" self.adjustTimeLimits(pType="DailyLimits", pAdd=True) def dayLimitsDecreaseClicked(self, evt): """Decrease time limits""" self.adjustTimeLimits(pType="DailyLimits", pAdd=False) def dailyLimitsDaySelectionChanged(self, evt): """Set up intervals on GUI day change""" # refresh the child days = self.getSelectedDays() # get current seconds dt = datetime.now().replace(microsecond=0) dtd = str(datetime.date(dt).isoweekday()) dts = int((dt - datetime.now().replace(microsecond=0, second=0, minute=0, hour=0)).total_seconds()) selIdx = 0 # only if there is smth selected if len(days) > 0: # go to last day (this cannot and should not be calculated for everything) dayIdx = days[len(days)-1]["idx"] dayNum = days[len(days)-1]["nr"] # whether day is enabled enabled = self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS")[dayIdx][2] limit = self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS")[dayIdx][3] # clear out existing intervals self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").clear() # fill intervals only if that day exists if dayNum in self._tkSavedCfg["timeLimitDaysHoursActual"] and enabled and limit > 0: # idx idx = 0 found = False # fill the intervals for rInterval in self.getIntervalList(dayNum): # exists found = True # determine which is the current hour selIdx = idx if rInterval[2] <= dts <= rInterval[3] and dtd == dayNum else selIdx # fill in the intervals self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").append([idx, rInterval[0], rInterval[1], dayNum, rInterval[2], rInterval[3], self._ROWCOL_OK, self._ROWSTYLE_OK, rInterval[4]]) idx += 1 # found if found: # set selection to found row self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").set_cursor(selIdx) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").scroll_to_cell(selIdx) def dayAvailabilityChanged(self, widget, path): """Change minutes depending on day availability""" # get list store limitSt = self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS") # flip the checkbox limitSt[path][2] = not limitSt[path][2] # if we have a day, restore limits if limitSt[path][2]: # if we have limits set in background store, restore them if limitSt[path][0] in self._tkSavedCfg["timeLimitDays"]: limitSt[path][3] = self._tkSavedCfg["timeLimitDaysLimits"][self._tkSavedCfg["timeLimitDays"].index(limitSt[path][0])] else: limitSt[path][3] = 0 # format string too limitSt[path][4] = self.formatTimeStr(limitSt[path][3], True) # restore intervals from saved state self._tkSavedCfg["timeLimitDaysHoursActual"][limitSt[path][0]] = self._tkSavedCfg["timeLimitDaysHoursSaved"][limitSt[path][0]].copy() # enable interval refresh self._timekprAdminFormBuilder.get_object("TimekprWeekDaysTreeView").get_selection().emit("changed") else: # reset hours & minutes limitSt[path][3] = 0 limitSt[path][4] = _NO_TIME_LABEL # intervals store intervalsSt = self._timekprAdminFormBuilder.get_object("TimekprWeekDaysLS") # change interval selection as well for rHour in range(0, 23+1): self._tkSavedCfg["timeLimitDaysHoursActual"][intervalsSt[path][0]][str(rHour)] = {cons.TK_CTRL_SMIN: 0, cons.TK_CTRL_EMIN: cons.TK_LIMIT_PER_MINUTE, cons.TK_CTRL_UACC: False} # clear stuff and disable intervals self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS").clear() # recalc control availability self.calculateUserConfigControlAvailability() def intervalsIncreaseClicked(self, evt): """Increase time limits""" self.adjustTimeLimits(pType="Intervals", pAdd=True) def intervalsDecreaseClicked(self, evt): """Decrease time limits""" self.adjustTimeLimits(pType="Intervals", pAdd=False) def userLimitsHourFromEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.verifyAndSetHourInterval(path, text, pIsFrom=True) def userLimitsHourToEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.verifyAndSetHourInterval(path, text, pIsFrom=False) def userLimitsWeeklyLimitsEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.verifyAndSetWeeklyLimits(path, text) def userLimitsDailyLimitsEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.verifyAndSetDayLimits(path, text) def userLimitsDailyPlayTimeLimitsEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.verifyAndSetDayLimits(path, text, pIsPlayTime=True) def userLimitsHourUnaccountableToggled(self, widget, path): """Set internal representation of in-place edited value""" # store intSt = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS") # flip the checkbox intSt[path][8] = not intSt[path][8] # we need to rebuild hours self.rebuildHoursFromIntervals() # calculate control availability self.calculateUserConfigControlAvailability() def addHourIntervalClicked(self, evt): """Add PlayTime activity placeholder to the list""" limitsSt = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS") limitsTw = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView") limitsLen = len(limitsSt) # add addRow = True # check if the last one is not empty (no need to add more empty rows) if (limitsLen > 0 and limitsSt[limitsLen-1][4] == 0 and limitsSt[limitsLen-1][5] == 0): addRow = False # we can add the row if addRow: # get day to which add the interval days = self.getSelectedDays() # if it's not selected if len(days) < 1: # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_NODAY_SELECTED")) else: # normalize day calcDay = days[len(days)-1]["nr"] # add limitsSt.append([-1, "", "", calcDay, 0, 0, self._ROWCOL_OK, self._ROWSTYLE_OK, False]) # scroll to end limitsTw.set_cursor(limitsLen) limitsTw.scroll_to_cell(limitsLen) # verify control availability self.calculateUserConfigControlAvailability() def removeHourIntervalClicked(self, evt): """Remove hour interval""" # defaults limitsSt = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS") elemIdx = self.getSelectedConfigElement("TimekprHourIntervalsTreeView") rIdx = 0 # only if something is selected if elemIdx is not None: # remove selected item for rIt in limitsSt: if elemIdx == rIdx: # remove limitsSt.remove(rIt.iter) break # count further rIdx += 1 # verify hours self.verifyHourIntervals(None) # verify control availability self.calculateUserConfigControlAvailability() # status change self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_INTERVAL_REMOVED")) def wkMonLimitsIncreaseClicked(self, evt): """Increase week / month time limits""" self.adjustTimeLimits(pType="WeekMonthLimits", pAdd=True) def wkMonLimitsDecreaseClicked(self, evt): """Decrease week / month time limits""" self.adjustTimeLimits(pType="WeekMonthLimits", pAdd=False) def applyUserLimitConfigurationChangesClicked(self, evt): """Call set methods for changes""" # disable button so it cannot be triggered again self._timekprAdminFormBuilder.get_object("TimekprUserConfDaySettingsApplyBT").set_sensitive(False) # process setting self.applyUserLimitConfigurationChanges() # --------------- PlayTime limit configuration GTK signal methods --------------- # def userPlayTimeEnabledChanged(self, evt): """PlayTime enablement changed""" self.calculateUserPlayTimeConfigControlAvailability() def userPlayTimeOverrideEnabledChanged(self, evt): """PlayTime override enablement changed""" self.calculateUserPlayTimeConfigControlAvailability() def userPlayTimeUnaccountedIntervalsEnabledChanged(self, evt): """PlayTime allowed during unaccounted intervals enablement changed""" self.calculateUserPlayTimeConfigControlAvailability() def playTimeLimitsIncreaseClicked(self, evt): """Increase PlayTime limits""" self.adjustTimeLimits(pType="PlayTimeLimits", pAdd=True) def playTimeLimitsDecreaseClicked(self, evt): """Decrease PlayTime limits""" self.adjustTimeLimits(pType="PlayTimeLimits", pAdd=False) def dayPlayTimeAvailabilityChanged(self, widget, path): """Change PlayTime minutes depending on day availability""" # get list store limitSt = self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLimitsLS") # flip the checkbox limitSt[path][2] = not limitSt[path][2] # if we have a day, restore limits if limitSt[path][2]: # if we have limits set in background store, restore them if limitSt[path][0] in self._tkSavedCfg["playTimeLimitDays"]: limitSt[path][3] = self._tkSavedCfg["playTimeLimitDaysLimits"][self._tkSavedCfg["playTimeLimitDays"].index(limitSt[path][0])] else: limitSt[path][3] = 0 # format string too limitSt[path][4] = self.formatTimeStr(limitSt[path][3], True) else: # reset hours & minutes limitSt[path][3] = 0 limitSt[path][4] = _NO_TIME_LABEL # recalc control availability self.calculateUserPlayTimeConfigControlAvailability() def addPlayTimeActivityClicked(self, evt): """Add PlayTime activity placeholder to the list""" limitsSt = self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS") limitsTw = self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesTreeView") PTActivityLen = len(limitsSt) # add addRow = True # check if the last one is not empty (no need to add more empty rows) if (PTActivityLen > 0 and limitsSt[PTActivityLen-1][1] == ""): addRow = False # we can add the row if addRow: # get last index PTActivityIdx = str(int(limitsSt[PTActivityLen-1][0]) + 1 if PTActivityLen > 0 else 1) # add limitsSt.append([PTActivityIdx, "", ""]) # scroll to end limitsTw.set_cursor(PTActivityLen) limitsTw.scroll_to_cell(PTActivityLen) limitsTw.get_selection().emit("changed") def removePlayTimeActivityClicked(self, evt): """Remove excluded user""" # defaults limitsSt = self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS") elemIdx = self.getSelectedConfigElement("TimekprUserPlayTimeProcessesTreeView") rIdx = 0 # only if something is selected if elemIdx is not None: # remove selected item for rIt in limitsSt: if elemIdx == rIdx: # remove limitsSt.remove(rIt.iter) elif elemIdx < rIdx: # adjust next element index limitsSt[rIdx-1][0] = str(rIdx) # count further rIdx += 1 # verify control availability self.calculateUserPlayTimeConfigControlAvailability() def playTimeActivityMaskEntryEdited(self, widget, path, text): """Set internal representation of in-place edited value""" # store value self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS")[path][1] = text # recalc control availability self.calculateUserPlayTimeConfigControlAvailability() def playTimeActivityDescriptionEntryEdited(self, widget, path, text): """Set internal representation of in-place edited value""" # store value self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesLS")[path][2] = text # recalc control availability self.calculateUserPlayTimeConfigControlAvailability() def applyUserPlayTimeConfigurationChangesClicked(self, evt): """Apply PlayTime configuration changes""" # disable button so it cannot be triggered again self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesApplyBT").set_sensitive(False) # color the buttons for ppl to see them better self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesApplyBT").modify_fg(Gtk.StateFlags.NORMAL, None) # tab color self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeLabel").modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("red") if self._timekprAdminFormBuilder.get_object("TimekprUserPlayTimeProcessesApplyBT").get_sensitive() else None) # process setting self.applyUserPlayTimeConfigurationChanges() # --------------- additional page configuration GTK signal methods --------------- # def trackInactiveChanged(self, evt): """Call control calculations when inactive flag has been changed""" # recalc control availability self.calculateUserAdditionalConfigControlAvailability() def hideTrayIconChanged(self, evt): """Call control calculations when hide icon has been changed""" # recalc control availability self.calculateUserAdditionalConfigControlAvailability() def lockoutTypeGroupChanged(self, evt): """Call control calculations when restriction / lockout type has been changed""" # recalc control availability self.calculateUserAdditionalConfigControlAvailability() def wakeUpIntervalChanged(self, evt): """Call control calculations when restriction / lockout wake up hours have been changed""" # recalc control availability self.calculateUserAdditionalConfigControlAvailability() def applyUserAdditionalConfigurationChangesClicked(self, evt): """Apply additional configuration changes""" # process setting self.applyUserAdditionalConfigurationChanges() def navigateTreeView(self, treeview, event): # get key name keyname = Gdk.keyval_name(event.keyval) path, col = treeview.get_cursor() # if there are no cols if path is None: return # only visible columns columns = [c for c in treeview.get_columns() if c.get_visible()] colnum = columns.index(col) next_column = None # check key if keyname == "Tab" or keyname == "Esc": # wrap if colnum + 1 < len(columns): # choose next col next_column = columns[colnum + 1] else: # get model tmodel = treeview.get_model() # model exists if tmodel is not None: titer = tmodel.iter_next(tmodel.get_iter(path)) # there are cols if titer is None: titer = tmodel.get_iter_first() # next path = tmodel.get_path(titer) next_column = columns[0] # key handling if next_column is not None: if keyname == 'Tab': GLib.timeout_add(1, treeview.set_cursor, path, next_column, True) elif keyname == 'Escape': pass # --------------- helper methods for signal methods --------------- # def adjustTimeLimits(self, pType, pAdd): """Recalc total seconds""" # get objects depending on type # rb format: # array of: checkbutton, seconds to add, check limit, seconds in liststore, string secs in liststore, control to execute, format seconds, format days if pType == "PlayTimeLimits": tw = "TimekprUserPlayTimeLimitsTreeView" ls = "TimekprUserPlayTimeLimitsLS" rb = [["TimekprUserPlayTimeLimitsHrRB", cons.TK_LIMIT_PER_HOUR, cons.TK_LIMIT_PER_DAY, 3, 4, self.calculateUserPlayTimeConfigControlAvailability, True, False], ["TimekprUserPlayTimeLimitsMinRB", cons.TK_LIMIT_PER_MINUTE, cons.TK_LIMIT_PER_DAY, 3, 4, self.calculateUserPlayTimeConfigControlAvailability, True, False]] elif pType == "DailyLimits": tw = "TimekprWeekDaysTreeView" ls = "TimekprWeekDaysLS" rb = [["TimekprUserTimeLimitsHrRB", cons.TK_LIMIT_PER_HOUR, cons.TK_LIMIT_PER_DAY, 3, 4, self.calculateUserConfigControlAvailability, True, False], ["TimekprUserTimeLimitsMinRB", cons.TK_LIMIT_PER_MINUTE, cons.TK_LIMIT_PER_DAY, 3, 4, self.calculateUserConfigControlAvailability, True, False]] elif pType == "WeekMonthLimits": tw = "TimekprUserConfWkMonLimitsTreeView" ls = "TimekprUserConfWkMonLimitsLS" rb = [["TimekprUserConfWkMonLimitsAdjustmentDayRB", cons.TK_LIMIT_PER_DAY, None, 2, 3, self.calculateUserConfigControlAvailability, True, True], ["TimekprUserConfWkMonLimitsAdjustmentHrRB", cons.TK_LIMIT_PER_HOUR, None, 2, 3, self.calculateUserConfigControlAvailability, True, True], ["TimekprUserConfWkMonLimitsAdjustmentMinRB", cons.TK_LIMIT_PER_MINUTE, None, 2, 3, self.calculateUserConfigControlAvailability, True, True]] elif pType == "Intervals": tw = "TimekprHourIntervalsTreeView" ls = "TimekprHourIntervalsLS" rb = [["TimekprUserConfDaySettingsSetDaysIntervalsHrRB", cons.TK_LIMIT_PER_HOUR, cons.TK_LIMIT_PER_DAY, None, None, self.calculateUserConfigControlAvailability, False, False], ["TimekprUserConfDaySettingsSetDaysIntervalsMinRB", cons.TK_LIMIT_PER_MINUTE, cons.TK_LIMIT_PER_DAY, None, None, self.calculateUserConfigControlAvailability, False, False]] # depending on selected items isFrom = self._timekprAdminFormBuilder.get_object("TimekprUserConfDaySettingsSetDaysIntervalsFromRB").get_active() # set seconds and display idx for rIdx in range(0, len(rb)): # depending whether start or end is selected we change that rb[rIdx][3] = 4 if isFrom else 5 # seconds rb[rIdx][4] = 1 if isFrom else 2 # time (seconds) to display # opposite indexes (special case) rb[rIdx].append(4 if not isFrom else 5) rb[rIdx].append(1 if not isFrom else 2) # get selected rows (tm, paths) = self._timekprAdminFormBuilder.get_object(tw).get_selection().get_selected_rows() # if rows were selected if paths is not None: # def adj = None # determine adjustment amount for rRb in (rRb for rRb in rb if self._timekprAdminFormBuilder.get_object(rRb[0]).get_active()): # if checked adj = rRb # check type found if adj is not None: # limits store limitsSt = self._timekprAdminFormBuilder.get_object(ls) # idx for path in paths: # get idx idx = tm.get_path(tm.get_iter(path))[0] # for DailyLimits and PlayTimeLimits we do not need to adjust inactive rows if pType in ("DailyLimits", "PlayTimeLimits"): # check if day is active if not limitsSt[idx][2]: # we do not process disabled days continue # for week / month a row that is selected makes limits different (two rows in LS) elif pType == "WeekMonthLimits": if limitsSt[idx][0] == "WK": adj[2] = cons.TK_LIMIT_PER_WEEK elif limitsSt[idx][0] == "MON": adj[2] = cons.TK_LIMIT_PER_MONTH # adjust value secs = int(limitsSt[idx][adj[3]]) + adj[1] * (1 if pAdd else -1) secs = min(adj[2], max(0, secs)) # set up new value limitsSt[idx][adj[3]] = secs limitsSt[idx][adj[4]] = self.formatTimeStr(secs, adj[6], adj[7]) # in case of intervals, we need to manage the end / start of it too if pType == "Intervals": # now check the other end whether start is later than end (from both sides) if (isFrom and limitsSt[idx][adj[3]] > limitsSt[idx][adj[8]]) or (not isFrom and limitsSt[idx][adj[3]] < limitsSt[idx][adj[8]]): # equalize limitsSt[idx][adj[8]] = limitsSt[idx][adj[3]] # format string limitsSt[idx][adj[9]] = self.formatTimeStr(limitsSt[idx][adj[8]], adj[6], adj[7]) # verify control availability by calling configured method (check setup) adj[5]() else: # status self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_NODAY_SELECTED")) def verifyHourIntervals(self, evt): """Verify hour intervals""" # limits store intervalsSt = self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS") intervalIdx = -1 result = False # loop through all entered intervals for rInt in intervalsSt: # get interval seconds intervalIdx += 1 secondsFrom = intervalsSt[intervalIdx][4] secondsTo = intervalsSt[intervalIdx][5] # do not check empty intervals if secondsFrom == 0 == secondsTo and intervalsSt[intervalIdx][0] < 0: continue # len intervalsLen = len(intervalsSt) # whether interval is valid intervalOverlaps = False intervalHourConflictStart = False intervalHourConflictEnd = False intervalDuplicate = False intervalSameStartEnd = False intervalStartEndMismatch = False # check intervals for rIdx in range(0, intervalsLen): # interval boundaries fromSecs = intervalsSt[rIdx][4] toSecs = intervalsSt[rIdx][5] result = False errIdx = None # do not check empty intervals if fromSecs == 0 == toSecs and intervalsSt[rIdx][0] < 0: continue # start is the same as end if secondsFrom == secondsTo: # this is it intervalSameStartEnd = True elif secondsFrom > secondsTo: # this is it intervalStartEndMismatch = True # these are for all hours if intervalIdx != rIdx and not (intervalSameStartEnd or intervalStartEndMismatch): # check whether user tries to insert duplicate iterval if fromSecs == secondsFrom or toSecs == secondsTo: # this is it intervalDuplicate = True # check whether start is betwen existing interval elif secondsFrom < fromSecs < secondsTo or secondsFrom < toSecs < secondsTo: # this is it intervalOverlaps = True # check whether start is betwen existing interval elif fromSecs < secondsFrom < toSecs or fromSecs < secondsTo < toSecs: # this is it intervalOverlaps = True # check whether user tries to insert iterval that doesn'y overlaps with start / end hours from other intervals, but are on the same day elif int(fromSecs/cons.TK_LIMIT_PER_HOUR) <= int(secondsFrom/cons.TK_LIMIT_PER_HOUR) <= int(toSecs/cons.TK_LIMIT_PER_HOUR) and int(secondsFrom/cons.TK_LIMIT_PER_HOUR) * cons.TK_LIMIT_PER_HOUR not in (secondsTo, toSecs): # this is it intervalHourConflictStart = True # check whether user tries to insert iterval that doesn'y overlaps with start / end hours from other intervals, but are on the same day elif int(fromSecs/cons.TK_LIMIT_PER_HOUR) <= int(secondsTo/cons.TK_LIMIT_PER_HOUR) <= int(toSecs/cons.TK_LIMIT_PER_HOUR) and int(secondsTo/cons.TK_LIMIT_PER_HOUR) * cons.TK_LIMIT_PER_HOUR not in (secondsTo, toSecs): # this is it intervalHourConflictEnd = True # get final result whether intervals are ok result = (intervalOverlaps or intervalHourConflictStart or intervalHourConflictEnd or intervalDuplicate or intervalSameStartEnd or intervalStartEndMismatch) # if we have errors if intervalsSt[rIdx][7] != result or result: # mark offending row intervalsSt[rIdx][6] = self._ROWCOL_NOK if result else self._ROWCOL_OK intervalsSt[rIdx][7] = self._ROWSTYLE_NOK if result else self._ROWSTYLE_OK # mark checked row too intervalsSt[intervalIdx][6] = self._ROWCOL_NOK if result else self._ROWCOL_OK intervalsSt[intervalIdx][7] = self._ROWSTYLE_NOK if result else self._ROWSTYLE_OK # we have a problem if result: # set ofending row and finish up errIdx = rIdx # interval is not ok, remove id intervalsSt[rIdx][0] = -1 # exit on first error break else: # assingn an id intervalsSt[intervalIdx][0] = intervalIdx # scroll to first error if result: # set status message if fail if intervalOverlaps: self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_INTERVAL_OVERLAP_DETECTED")) elif intervalHourConflictStart: self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_INTERVALSTART_CONFLICT_DETECTED")) elif intervalHourConflictEnd: self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_INTERVALEND_CONFLICT_DETECTED")) elif intervalDuplicate: self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_INTERVAL_DUPLICATE_DETECTED")) elif intervalSameStartEnd: self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_INTERVAL_STARTENDEQUAL_DETECTED")) elif intervalStartEndMismatch: self.setTimekprStatus(False, msg.getTranslation("TK_MSG_STATUS_INTERVAL_ENDLESSTHANSTART_DETECTED")) else: # sort self.sortHourIntervals() self.setTimekprStatus(False, "") # scroll self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").set_cursor(errIdx) self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsTreeView").scroll_to_cell(errIdx) # fin break if not result: # sort intervals self.sortHourIntervals() # rebuild hour intervals self.rebuildHoursFromIntervals() # calculate control availability self.calculateUserConfigControlAvailability() def rebuildHoursFromIntervals(self): """Rebuild hours from intervals in GUI, representation to user is different than actual config""" # get days days = self.getSelectedDays() # day is here if len(days) > 0: # first day day = days[0]["nr"] # clear internal hour representation self._tkSavedCfg["timeLimitDaysHoursActual"][day] = {} # remove selected item for rIt in self._timekprAdminFormBuilder.get_object("TimekprHourIntervalsLS"): # start time calcTime = cons.TK_DATETIME_START + timedelta(seconds=rIt[4]) # total seconds totalSeconds = rIt[5] - rIt[4] # failover maxIt = 30 # now loop through time in interval while totalSeconds > 0 and maxIt > 0: # failover maxIt -= 1 # hour calcHour = str(calcTime.hour) # build up hour self._tkSavedCfg["timeLimitDaysHoursActual"][day][calcHour] = {cons.TK_CTRL_SMIN: calcTime.minute, cons.TK_CTRL_EMIN: None, cons.TK_CTRL_UACC: rIt[8]} # calc end of the hour timeToSubtract = min(cons.TK_LIMIT_PER_HOUR - calcTime.minute * cons.TK_LIMIT_PER_MINUTE, totalSeconds) # adjust time calcTime += timedelta(seconds=timeToSubtract) # subtract hour totalSeconds -= timeToSubtract # add end hour self._tkSavedCfg["timeLimitDaysHoursActual"][day][calcHour][cons.TK_CTRL_EMIN] = cons.TK_LIMIT_PER_MINUTE if calcTime.minute == 0 else calcTime.minute # set this up to all selected rows for rDay in days: # set to all days (except the one we modified) if rDay["nr"] != day: # copy config self._tkSavedCfg["timeLimitDaysHoursActual"][rDay["nr"]] = self._tkSavedCfg["timeLimitDaysHoursActual"][day].copy() # --------------- additional and misc methods --------------- # def timekprLogoClicked(self, evt, smth): """Open link to development support page, disabled, and maybe never will be enabled :)""" if 1 == 1: pass elif os.geteuid() == 0: # copy to clipboard and show message Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD).set_text(cons.TK_DEV_SUPPORT_PAGE, -1) tkrMsg = Gtk.MessageDialog(parent=self._timekprAdminForm, flags=Gtk.DialogFlags.MODAL, type=Gtk.MessageType.INFO, buttons=Gtk.ButtonsType.OK, message_format="\nDonations link copied to clipbard!\nPlease paste the address in internet browser.\nThanks for your support!") tkrMsg.run() tkrMsg.destroy() else: # open link webbrowser.open(cons.TK_DEV_SUPPORT_PAGE, new=2, autoraise=True) def closePropertiesSignal(self, evt, smth): """Close the config form""" # close self._mainLoop.quit() # flush log log.autoFlushLogFile(True) timekpr-next/client/gui/__init__.py000664 001750 001750 00000000000 13476006650 021345 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/gui/clientgui.py000644 001750 001750 00000113476 15122253261 021605 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ import gi import os import re gi.require_version("Gtk", "3.0") from gi.repository import Gtk from datetime import datetime, timedelta # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.common.constants import messages as msg # constant _NO_TIME_LABEL = "--:--:--" _NO_TIME_LABEL_SHORT = "--:--" _NO_TIME_LIMIT_LABEL = "--:--:--:--" _HOUR_REGEXP = re.compile("^([0-9]{1,2})$") _HOUR_MIN_REGEXP = re.compile("^([0-9]{1,2}):([0-9]{1,2})$") class timekprGUI(object): """Main class for supporting timekpr forms""" def __init__(self, pTimekprVersion, pTimekprClientConfig, pUsername, pUserNameFull): """Initialize gui""" # set up base variables self._userName = pUsername self._timekprVersion = pTimekprVersion self._timekprClientConfig = pTimekprClientConfig self._timekprPTPageNr = 2 # sets up limit variables self._timeSpent = None self._timeSpentWeek = None self._timeSpentMonth = None self._timeInactive = None self._timeLeftToday = None self._timeLeftContinous = None self._timeTrackInactive = True self._timeTimeLimitOverridePT = False self._timeUnaccountedIntervalsFlagPT = False self._timeSpentPT = None self._timeLeftPT = None self._timePTActivityCntStr = "0" self._limitConfig = {} # change tracking self._configChanged = False # ## forms builders ## # init about builder self._timekprAboutDialogBuilder = Gtk.Builder() # get our dialog self._timekprAboutDialogBuilder.add_from_file(os.path.join(self._timekprClientConfig.getTimekprSharedDir(), "client/forms", "about.glade")) # get main form (to set various runtime things) self._timekprAboutDialog = self._timekprAboutDialogBuilder.get_object("timekprAboutDialog") # init config builder self._timekprConfigDialogBuilder = Gtk.Builder() # get our dialog self._timekprConfigDialogBuilder.add_from_file(os.path.join(self._timekprClientConfig.getTimekprSharedDir(), "client/forms", "client.glade")) # get main form (to set various runtime things) self._timekprConfigDialog = self._timekprConfigDialogBuilder.get_object("timekprConfigDialog") self._timekprAboutDialogBuilder.connect_signals(self) self._timekprConfigDialogBuilder.connect_signals(self) # set up username (this does not change) self._timekprConfigDialogBuilder.get_object("timekprUsernameLB").set_text("%s (%s)" % (self._userName, pUserNameFull) if pUserNameFull != "" else self._userName) # this sets up columns for days config col = Gtk.TreeViewColumn("Day", Gtk.CellRendererText(), text=1) col.set_min_width(100) self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysDaysTreeview").append_column(col) col = Gtk.TreeViewColumn("Limit", Gtk.CellRendererText(), text=2) col.set_min_width(60) self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysDaysTreeview").append_column(col) # this sets up columns for interval list # interval string col = Gtk.TreeViewColumn("Interval", Gtk.CellRendererText(), text=0) self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsTreeview").append_column(col) # unaccountable interval column col = Gtk.TreeViewColumn("Unaccounted", Gtk.CellRendererText(), text=1) col.set_min_width(10) self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsTreeview").append_column(col) # PlayTime # this sets up columns for limits list col = Gtk.TreeViewColumn("Day", Gtk.CellRendererText(), text=1) col.set_min_width(100) self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsDaysTreeview").append_column(col) col = Gtk.TreeViewColumn("Limit", Gtk.CellRendererText(), text=2) col.set_min_width(60) self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsDaysTreeview").append_column(col) # this sets up columns for process list col = Gtk.TreeViewColumn("Day", Gtk.CellRendererText(), text=0) col.set_min_width(140) self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsApplsTreeview").append_column(col) # hide PT page by default self._timekprConfigDialogBuilder.get_object("timekprConfigNotebook").get_nth_page(self._timekprPTPageNr).set_visible(False) # hide PT config as well self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigPlayTimeGrid").set_visible(False) # initial config (everything is to the max) for i in range(0, 7): # set up default limits self._limitConfig[str(i+1)] = {cons.TK_CTRL_LIMITD: None, cons.TK_CTRL_INT: [[None, None, False]]} # initialize week and month limits self._limitConfig[cons.TK_CTRL_LIMITW] = {cons.TK_CTRL_LIMITW: None} self._limitConfig[cons.TK_CTRL_LIMITM] = {cons.TK_CTRL_LIMITM: None} # ## notification configuration ## # Less than rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_NOTIF_CONFIG_TIME_PHLD_LABEL")) rend.connect("edited", self.userTimeEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_NOTIF_CONFIG_TIME_LABEL"), rend, text=1) col.set_min_width(90) self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigTreeView").append_column(col) # importance rend = Gtk.CellRendererCombo() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_NOTIF_CONFIG_IMPORTANCE_PHLD_LABEL")) rend.set_property("model", self._timekprConfigDialogBuilder.get_object("TimekprNotificationPrioritiesLS")) rend.set_property("text-column", 1) rend.set_property("has-entry", False) rend.connect("edited", self.userPriorityEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_NOTIF_CONFIG_IMPORTANCE_LABEL"), rend, text=3) col.set_min_width(120) self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigTreeView").append_column(col) # clear self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigLS").clear() # ## PlayTime notification configuration ## # Less than rend = Gtk.CellRendererText() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_NOTIF_CONFIG_TIME_PHLD_LABEL")) rend.connect("edited", self.userPlayTimeEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_NOTIF_CONFIG_TIME_LABEL"), rend, text=1) col.set_min_width(90) self._timekprConfigDialogBuilder.get_object("TimekprUserPlayTimeNotificationConfigTreeView").append_column(col) # importance rend = Gtk.CellRendererCombo() rend.set_property("editable", True) rend.set_property("placeholder-text", msg.getTranslation("TK_MSG_NOTIF_CONFIG_IMPORTANCE_PHLD_LABEL")) rend.set_property("model", self._timekprConfigDialogBuilder.get_object("TimekprNotificationPrioritiesLS")) rend.set_property("text-column", 1) rend.set_property("has-entry", False) rend.connect("edited", self.userPlayTimePriorityEdited) col = Gtk.TreeViewColumn(msg.getTranslation("TK_MSG_NOTIF_CONFIG_IMPORTANCE_LABEL"), rend, text=3) col.set_min_width(120) self._timekprConfigDialogBuilder.get_object("TimekprUserPlayTimeNotificationConfigTreeView").append_column(col) # clear self._timekprConfigDialogBuilder.get_object("TimekprUserPlayTimeNotificationConfigLS").clear() # status self.setStatus(msg.getTranslation("TK_MSG_STATUS_STARTED")) # --------------- TMP (move to proper places later) --------------- # def userTimeEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.setTimeValue(path, text, pConfType="Time") def userPlayTimeEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.setTimeValue(path, text, pConfType="PlayTime") def userPriorityEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.setPriorityValue(path, text, "Time") def userPlayTimePriorityEdited(self, widget, path, text): """Set internal representation of in-place edited value""" self.setPriorityValue(path, text, "PlayTime") def setTimeValue(self, path, text, pConfType): """Verify and set time string values""" # element prioLs = "TimekprUserNotificationConfigLS" if pConfType == "Time" else "TimekprUserPlayTimeNotificationConfigLS" # store timelSt = self._timekprConfigDialogBuilder.get_object(prioLs) # value before secsBefore = timelSt[path][0] secs = None # verify values if _HOUR_REGEXP.match(text): # calculate seconds secs = min(int(_HOUR_REGEXP.sub(r"\1", text)) * cons.TK_LIMIT_PER_HOUR, cons.TK_LIMIT_PER_DAY) elif _HOUR_MIN_REGEXP.match(text): # calculate seconds secs = min(int(_HOUR_MIN_REGEXP.sub(r"\1", text)) * cons.TK_LIMIT_PER_HOUR + int(_HOUR_MIN_REGEXP.sub(r"\2", text)) * cons.TK_LIMIT_PER_MINUTE, cons.TK_LIMIT_PER_DAY) # if we could calculate seconds (i.e. entered text is correct) if secs is not None: # only if changed if secsBefore != secs: # check if we have this interval already dupl = [rPrio for rPrio in timelSt if rPrio[0] == secs] # we can not allow duplicates if not len(dupl) > 0: # format secs textStr = self.formatTimeStr(cons.TK_DATETIME_START + timedelta(seconds=secs), "s") # set values timelSt[path][0] = secs timelSt[path][1] = textStr # sort self.sortNotificationConfig(pConfType) # verify controls too self.processConfigChanged() def setPriorityValue(self, path, text, pConfType): """Verify and set time string values""" # element prioLs = "TimekprUserNotificationConfigLS" if pConfType == "Time" else "TimekprUserPlayTimeNotificationConfigLS" # store priolSt = self._timekprConfigDialogBuilder.get_object(prioLs) # value before prioBefore = priolSt[path][3] # only if priority actuall changed if prioBefore != text: # find selected value val = [(rVal[0], rVal[1]) for rVal in self._timekprConfigDialogBuilder.get_object("TimekprNotificationPrioritiesLS") if rVal[1] == text] # set values priolSt[path][2] = val[0][0] priolSt[path][3] = val[0][1] # verify controls too self.processConfigChanged() def addNotificationConfigClicked(self, evt): """Add notification interval to the list""" self.addNotificationConf("Time") def addPlayTimeNotificationConfigClicked(self, evt): """Add notification interval to the list""" self.addNotificationConf("PlayTime") def removeNotificationConfigClicked(self, evt): """Remove notification interval""" self.removeNotificationConf("Time") def removePlayTimeNotificationConfigClicked(self, evt): """Remove notification interval""" self.removeNotificationConf("PlayTime") def addNotificationConf(self, pConfType): """Add notification interval to the list""" prioSt = self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigLS" if pConfType == "Time" else "TimekprUserPlayTimeNotificationConfigLS") prioTw = self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigTreeView" if pConfType == "Time" else "TimekprUserPlayTimeNotificationConfigTreeView") prioLen = len(prioSt) # add addRow = True # check if the last one is not empty (no need to add more empty rows) if (prioLen > 0 and prioSt[prioLen-1][0] < 0): addRow = False # we can add the row if addRow: # add prioSt.append([-1, "", "", ""]) # scroll to end prioTw.set_cursor(prioLen) prioTw.scroll_to_cell(prioLen) def removeNotificationConf(self, pConfType): """Remove notification interval""" # defaults prioSt = self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigLS" if pConfType == "Time" else "TimekprUserPlayTimeNotificationConfigLS") # refresh the child (tm, ti) = self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigTreeView" if pConfType == "Time" else "TimekprUserPlayTimeNotificationConfigTreeView").get_selection().get_selected() # only if there is smth selected elemIdx = tm.get_path(ti)[0] if ti is not None else None # only if something is selected if elemIdx is not None: rIdx = 0 # remove selected item for rIt in prioSt: if elemIdx == rIdx: # remove prioSt.remove(rIt.iter) # count further rIdx += 1 # verify controls too self.processConfigChanged() def sortNotificationConfig(self, pConfType): """Sort notification config for ease of use""" # element prioSt = self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigLS" if pConfType == "Time" else "TimekprUserPlayTimeNotificationConfigLS") # sort vairables prio = {} rIdx = 0 # prepare sort for rIt in prioSt: prio[rIt[0]] = rIdx # count further rIdx += 1 # set sort order sortedPrio = [] # set up proper order for rKey in sorted(prio, reverse=True): # append to order sortedPrio.append(prio[rKey]) # reorder rows in liststore prioSt.reorder(sortedPrio) # --------------- helper methods --------------- # def formatTimeStr(self, pTime, pFormatType="f"): """Format time for output on form""" # f - full, s - short, t - time # final result timeStr = None if pTime is None: timeStr = _NO_TIME_LABEL_SHORT if pFormatType == "s" else _NO_TIME_LABEL if pFormatType == "t" else _NO_TIME_LIMIT_LABEL else: # calculate days days = (pTime - cons.TK_DATETIME_START).days # calculate hours and mins hrMin = "%s:%s" % (("24" if pFormatType != "f" and days >= 1 else str(pTime.hour)).rjust(2, "0"), str(pTime.minute).rjust(2, "0")) # calculate secs secs = str(pTime.second).rjust(2, "0") # final composition # for limit time (h:m:s) if pFormatType == "t": timeStr = "%s:%s" % (hrMin, secs) # for full time (d:h:m:s) else: timeStr = "%s:%s:%s" % (str(days).rjust(2, "0"), hrMin, secs) if pFormatType != "s" else hrMin # return return timeStr def renewUserConfiguration(self): """Update configuration options""" # if speech is not supported, we disable and uncheck the box self._timekprConfigDialogBuilder.get_object("timekprUseSpeechNotifCB").set_sensitive(self._timekprClientConfig.getIsNotificationSpeechSupported()) # if sound is not supported by libnotify implementation, we disable and uncheck the box self._timekprConfigDialogBuilder.get_object("timekprUseNotificationSoundCB").set_sensitive(self._timekprClientConfig.getIsNotificationSoundSupported()) # user config self._timekprConfigDialogBuilder.get_object("timekprLimitChangeNotifCB").set_active(self._timekprClientConfig.getClientShowLimitNotifications()) self._timekprConfigDialogBuilder.get_object("timekprShowAllNotifCB").set_active(self._timekprClientConfig.getClientShowAllNotifications()) self._timekprConfigDialogBuilder.get_object("timekprUseSpeechNotifCB").set_active(self._timekprClientConfig.getClientUseSpeechNotifications()) self._timekprConfigDialogBuilder.get_object("timekprShowSecondsCB").set_active(self._timekprClientConfig.getClientShowSeconds()) self._timekprConfigDialogBuilder.get_object("timekprUseNotificationSoundCB").set_active(self._timekprClientConfig.getClientUseNotificationSound()) self._timekprConfigDialogBuilder.get_object("timekprNotificationTimeoutSB").set_value(self._timekprClientConfig.getClientNotificationTimeout()) self._timekprConfigDialogBuilder.get_object("timekprNotificationTimeoutCriticalSB").set_value(self._timekprClientConfig.getClientNotificationTimeoutCritical()) self._timekprConfigDialogBuilder.get_object("timekprLogLevelSB").set_value(self._timekprClientConfig.getClientLogLevel()) # priority config prioConfSt = self._timekprConfigDialogBuilder.get_object("TimekprNotificationPrioritiesLS") # load notification priorities prioSt = self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigLS") prioSt.clear() for rPrio in self._timekprClientConfig.getClientNotificationLevels(): # append intervals val = [(rVal[0], rVal[1]) for rVal in prioConfSt if rVal[0] == cons.TK_PRIO_LVL_MAP[rPrio[1]]] prioSt.append([rPrio[0], self.formatTimeStr(cons.TK_DATETIME_START + timedelta(seconds=rPrio[0]), "s"), val[0][0], val[0][1]]) # sort configd self.sortNotificationConfig("Time") # load PlayTime notification priorities prioSt = self._timekprConfigDialogBuilder.get_object("TimekprUserPlayTimeNotificationConfigLS") prioSt.clear() for rPrio in self._timekprClientConfig.getClientPlayTimeNotificationLevels(): # append intervals val = [(rVal[0], rVal[1]) for rVal in prioConfSt if rVal[0] == cons.TK_PRIO_LVL_MAP[rPrio[1]]] prioSt.append([rPrio[0], self.formatTimeStr(cons.TK_DATETIME_START + timedelta(seconds=rPrio[0]), "s"), val[0][0], val[0][1]]) # sort config self.sortNotificationConfig("PlayTime") # verify controls too self.processConfigChanged() def renewLimits(self, pTimeInformation=None): """Renew information to be show for user in GUI""" # sets time left if pTimeInformation is not None: # limits self._timeSpent = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_SPENT]) self._timeSpentWeek = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_SPENTW]) self._timeSpentMonth = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_SPENTM]) self._timeInactive = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_SLEEP]) self._timeLeftToday = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_LEFTD]) self._timeLeftContinous = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_LEFT]) self._timeTrackInactive = True if pTimeInformation[cons.TK_CTRL_TRACK] else False self._timeTimeLimitOverridePT = bool(pTimeInformation[cons.TK_CTRL_PTTLO]) if cons.TK_CTRL_PTTLO in pTimeInformation else False self._timeUnaccountedIntervalsFlagPT = bool(pTimeInformation[cons.TK_CTRL_PTAUH]) if cons.TK_CTRL_PTAUH in pTimeInformation else False self._timeSpentPT = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_PTSPD]) if cons.TK_CTRL_PTSPD in pTimeInformation else None self._timeLeftPT = cons.TK_DATETIME_START + timedelta(seconds=pTimeInformation[cons.TK_CTRL_PTLPD]) if cons.TK_CTRL_PTLPD in pTimeInformation else None self._timePTActivityCntStr = str(pTimeInformation[cons.TK_CTRL_PTLSTC] if cons.TK_CTRL_PTLSTC in pTimeInformation else 0) # calculate strings to show (and show only those, which have data) timeSpentStr = self.formatTimeStr(self._timeSpent) timeSpentWeekStr = self.formatTimeStr(self._timeSpentWeek) timeSpentMonthStr = self.formatTimeStr(self._timeSpentMonth) timeSleepStr = self.formatTimeStr(self._timeInactive) timeLeftTodayStr = self.formatTimeStr(self._timeLeftToday) timeLeftTotalStr = self.formatTimeStr(self._timeLeftContinous) timeSpentPTStr = self.formatTimeStr(self._timeSpentPT) timeLeftPTStr = self.formatTimeStr(self._timeLeftPT if self._timeLeftPT is None else min(self._timeLeftPT, self._timeLeftToday)) if not self._timeTimeLimitOverridePT else _NO_TIME_LABEL # sets up stuff self._timekprConfigDialogBuilder.get_object("timekprLimitInfoTimeSpeneLB").set_text(timeSpentStr) self._timekprConfigDialogBuilder.get_object("timekprLimitInfoTimeSpentWeeeLB").set_text(timeSpentWeekStr) self._timekprConfigDialogBuilder.get_object("timekprLimitInfoTimeSpentMonteLB").set_text(timeSpentMonthStr) self._timekprConfigDialogBuilder.get_object("timekprLimitInfoTimeInactiveLB").set_text(timeSleepStr) self._timekprConfigDialogBuilder.get_object("timekprLimitInfoTimeLeftTodaeLB").set_text(timeLeftTodayStr) self._timekprConfigDialogBuilder.get_object("timekprLimitInfoContTimeLefeLB").set_text(timeLeftTotalStr) self._timekprConfigDialogBuilder.get_object("timekprLimitInfoTrackInactiveCB").set_active(self._timeTrackInactive) self._timekprConfigDialogBuilder.get_object("timekprPTLimitInfoTimeLimitOverrideLB").set_active(self._timeTimeLimitOverridePT) self._timekprConfigDialogBuilder.get_object("timekprPTLimitInfoUnaccountedIntervalsFlagLB").set_active(self._timeUnaccountedIntervalsFlagPT) self._timekprConfigDialogBuilder.get_object("timekprPTLimitInfoTimeSpentTodayLB").set_text(timeSpentPTStr) self._timekprConfigDialogBuilder.get_object("timekprPTLimitInfoTimeLeftTodayLB").set_text(timeLeftPTStr) self._timekprConfigDialogBuilder.get_object("timekprPTLimitInfoActivityCountLB").set_text(self._timePTActivityCntStr) def setStatus(self, pStatus): """Change status of timekpr""" if pStatus is not None: # get main status statusBar = self._timekprConfigDialogBuilder.get_object("timekprStatusBar") contextId = statusBar.get_context_id("status") # pop existing message and add new one statusBar.remove_all(contextId) statusBar.push(contextId, pStatus) def renewLimitConfiguration(self, pLimits=None): """Renew information to be show for user""" # if there is smth if pLimits is not None: # new limits appeared self._limitConfig = pLimits # hide PT page by default enablePT = False # clear out days / limits / processes self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysDaysLS").clear() self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsDaysLS").clear() self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsActsLS").clear() # go in sorted order for rKey in sorted(self._limitConfig): # some of configuration needs different approach if rKey in (cons.TK_CTRL_LIMITW, cons.TK_CTRL_LIMITM): # set locally if self._limitConfig[rKey][rKey] is not None: # limit timeLimitWKMON = cons.TK_DATETIME_START + timedelta(seconds=self._limitConfig[rKey][rKey]) # limit timeLimitWKMONStr = self.formatTimeStr(timeLimitWKMON) else: timeLimitWKMONStr = _NO_TIME_LIMIT_LABEL # set week limit if rKey == cons.TK_CTRL_LIMITW: # set up limits self._timekprConfigDialogBuilder.get_object("timekprLimitForWeeeLB").set_text(timeLimitWKMONStr) elif rKey == cons.TK_CTRL_LIMITM: # set up limits self._timekprConfigDialogBuilder.get_object("timekprLimitForMonteLB").set_text(timeLimitWKMONStr) # check for override elif rKey == cons.TK_CTRL_PTTLO: # if enabled self._timeTimeLimitOverridePT = True if bool(self._limitConfig[rKey][rKey]) else False # check for allowed during unaccounted intervals elif rKey == cons.TK_CTRL_PTAUH: # if enabled self._timeUnaccountedIntervalsFlagPT = True if bool(self._limitConfig[rKey][rKey]) else False # for the days limits elif rKey in ("1", "2", "3", "4", "5", "6", "7"): # get time limit string timeLimitStr = self.formatTimeStr(cons.TK_DATETIME_START + timedelta(seconds=self._limitConfig[rKey][cons.TK_CTRL_LIMITD]) if self._limitConfig[rKey][cons.TK_CTRL_LIMITD] is not None else None, "t") # add limit to the list self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysDaysLS").append([rKey, (cons.TK_DATETIME_START + timedelta(days=int(rKey)-1)).strftime("%A"), "%s" % (timeLimitStr)]) # current day currDay = datetime.now().isoweekday()-1 # calculate day index for scrolling dayIdx = 0 finalDayIdx = None # PT limits are processed separately due to override detection if cons.TK_CTRL_PTLMT in self._limitConfig and cons.TK_CTRL_PTLST in self._limitConfig and cons.TK_CTRL_PTTLE in self._limitConfig: # PlayTime for rKey in (cons.TK_CTRL_PTLMT, cons.TK_CTRL_PTLST, cons.TK_CTRL_PTTLE): # PT enable if rKey == cons.TK_CTRL_PTTLE: # enable PT enablePT = bool(self._limitConfig[rKey][cons.TK_CTRL_PTTLE]) # PT limits elif rKey == cons.TK_CTRL_PTLMT: # for all days for rDay in self._limitConfig[rKey][cons.TK_CTRL_PTLMT]: # count dayIdx += 1 # if override enabled, we do not show limits because that's not meaningful timeLimitStr = self.formatTimeStr(cons.TK_DATETIME_START + timedelta(seconds=int(rDay[1])) if not self._timeTimeLimitOverridePT else None, "t") # add to the list self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsDaysLS").append([str(rDay[0]), (cons.TK_DATETIME_START + timedelta(days=int(rDay[0])-1)).strftime("%A"), "%s" % (timeLimitStr)]) # if alllowed list has current day if currDay == int(rDay[0]) + 1: # index finalDayIdx = dayIdx # PT process list elif rKey == cons.TK_CTRL_PTLST: # all activities (source array format: 0 - friendly name, 1 - process name) for rAppl in self._limitConfig[rKey][cons.TK_CTRL_PTLST]: # add process to the list self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsActsLS").append(["%s" % (rAppl[1] if rAppl[1] != "" else rAppl[0])]) # determine curent day and point to it self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysDaysTreeview").set_cursor(currDay) self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysDaysTreeview").scroll_to_cell(currDay) # do the same for PT if finalDayIdx is not None: # scroll to current day self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsDaysTreeview").set_cursor(currDay) self._timekprConfigDialogBuilder.get_object("timekprPTAllowedDaysLimitsDaysTreeview").scroll_to_cell(currDay) def processConfigChanged(self): """Determine whether config has been changed and enable / disable apply""" # initial configChanged = False # determine what's changed configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprLimitChangeNotifCB").get_active() != self._timekprClientConfig.getClientShowLimitNotifications() configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprShowAllNotifCB").get_active() != self._timekprClientConfig.getClientShowAllNotifications() configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprUseSpeechNotifCB").get_active() != self._timekprClientConfig.getClientUseSpeechNotifications() configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprShowSecondsCB").get_active() != self._timekprClientConfig.getClientShowSeconds() configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprUseNotificationSoundCB").get_active() != self._timekprClientConfig.getClientUseNotificationSound() configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprNotificationTimeoutSB").get_value_as_int() != self._timekprClientConfig.getClientNotificationTimeout() configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprNotificationTimeoutCriticalSB").get_value_as_int() != self._timekprClientConfig.getClientNotificationTimeoutCritical() configChanged = configChanged or self._timekprConfigDialogBuilder.get_object("timekprLogLevelSB").get_value_as_int() != self._timekprClientConfig.getClientLogLevel() # interval changes tmpVal = [[rVal[0], cons.TK_PRIO_LVL_MAP[rVal[2]]] for rVal in self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigLS") if rVal[2] in cons.TK_PRIO_LVL_MAP and rVal[0] > 0] configChanged = configChanged or self._timekprClientConfig.getClientNotificationLevels() != tmpVal # interval changes tmpVal = [[rVal[0], cons.TK_PRIO_LVL_MAP[rVal[2]]] for rVal in self._timekprConfigDialogBuilder.get_object("TimekprUserPlayTimeNotificationConfigLS") if rVal[2] in cons.TK_PRIO_LVL_MAP and rVal[0] > 0] configChanged = configChanged or self._timekprClientConfig.getClientPlayTimeNotificationLevels() != tmpVal # this is it self._timekprConfigDialogBuilder.get_object("timekprSaveBT").set_sensitive(configChanged) # --------------- init methods --------------- # def initAboutForm(self): """Initialize about form""" # version self._timekprAboutDialog.set_version(self._timekprVersion) # comment self._timekprAboutDialog.set_comments(msg.getTranslation("TK_MSG_LOGO_LABEL")) # show up all self._timekprAboutDialog.show() self._timekprAboutDialog.run() # hide for later use self._timekprAboutDialog.hide() def initConfigForm(self): """Initialize config form""" # refresh info self.renewUserConfiguration() self.renewLimits() self.renewLimitConfiguration() self.configPageSwitchSignal() # show up all self._timekprConfigDialog.show() self._timekprConfigDialog.run() # hide for later use self._timekprConfigDialog.hide() # --------------- user clicked methods --------------- # def clientConfigChangedSignal(self, evt): """Process config changed signal""" self.processConfigChanged() def daysChangedSignal(self, evt): """Refresh intervals when days change""" # refresh the child (tm, ti) = self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysDaysTreeview").get_selection().get_selected() # only if there is smth selected if ti is not None: # get current seconds dt = datetime.now().replace(microsecond=0) dtd = str(datetime.date(dt).isoweekday()) dts = int((dt - datetime.now().replace(microsecond=0, second=0, minute=0, hour=0)).total_seconds()) idx = 0 selIdx = 0 # clear out existing intervals self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsLS").clear() # fill intervals only if that day exists if tm.get_value(ti, 0) in self._limitConfig: # if no intervals if not self._limitConfig[tm.get_value(ti, 0)][cons.TK_CTRL_INT]: # fill in the intervals with empty values self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsLS").append([("%s - %s") % (_NO_TIME_LABEL_SHORT, _NO_TIME_LABEL_SHORT), ""]) else: # fill the intervals for r in self._limitConfig[tm.get_value(ti, 0)][cons.TK_CTRL_INT]: # determine which is the current hour selIdx = idx if r[0] is not None and r[0] <= dts <= r[1] and dtd == tm.get_value(ti, 0) else selIdx # if we have no data, we fill this up with nothing if r[0] is None or (r[0] == 0 and r[1] == 0): # fill in the intervals with empty values self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsLS").append([("%s - %s") % (_NO_TIME_LABEL_SHORT, _NO_TIME_LABEL_SHORT), ""]) else: start = (cons.TK_DATETIME_START + timedelta(seconds=r[0])) end = (cons.TK_DATETIME_START + timedelta(seconds=r[1])) uacc = "∞" if r[2] else "" # fill in the intervals self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsLS").append([("%s:%s - %s:%s") % (str(start.hour).rjust(2, "0"), str(start.minute).rjust(2, "0"), str(end.hour).rjust(2, "0") if r[1] < cons.TK_LIMIT_PER_DAY else "24", str(end.minute).rjust(2, "0")), uacc]) # count idx += 1 # set selection to found row self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsTreeview").set_cursor(selIdx) self._timekprConfigDialogBuilder.get_object("timekprAllowedDaysIntervalsTreeview").scroll_to_cell(selIdx) def configPageSwitchSignal(self, nb=None, pg=None, pgn=None): """Enable or disable apply on page change""" # nothing here pass def saveUserConfigSignal(self, evt): """Save the configuration using config file manager""" # get config, set config to manager and save it self._timekprClientConfig.setClientShowLimitNotifications(self._timekprConfigDialogBuilder.get_object("timekprLimitChangeNotifCB").get_active()) self._timekprClientConfig.setClientShowAllNotifications(self._timekprConfigDialogBuilder.get_object("timekprShowAllNotifCB").get_active()) self._timekprClientConfig.setClientUseSpeechNotifications(self._timekprConfigDialogBuilder.get_object("timekprUseSpeechNotifCB").get_active()) self._timekprClientConfig.setClientShowSeconds(self._timekprConfigDialogBuilder.get_object("timekprShowSecondsCB").get_active()) self._timekprClientConfig.setClientUseNotificationSound(self._timekprConfigDialogBuilder.get_object("timekprUseNotificationSoundCB").get_active()) self._timekprClientConfig.setClientNotificationTimeout(self._timekprConfigDialogBuilder.get_object("timekprNotificationTimeoutSB").get_value_as_int()) self._timekprClientConfig.setClientNotificationTimeoutCritical(self._timekprConfigDialogBuilder.get_object("timekprNotificationTimeoutCriticalSB").get_value_as_int()) self._timekprClientConfig.setClientLogLevel(self._timekprConfigDialogBuilder.get_object("timekprLogLevelSB").get_value_as_int()) # save notification priorities tmpVal = [[rVal[0], cons.TK_PRIO_LVL_MAP[rVal[2]]] for rVal in self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigLS") if rVal[2] in cons.TK_PRIO_LVL_MAP and rVal[0] > 0] self._timekprClientConfig.setClientNotificationLevels(tmpVal) # save PlayTime notification priorities tmpVal = [[rVal[0], cons.TK_PRIO_LVL_MAP[rVal[2]]] for rVal in self._timekprConfigDialogBuilder.get_object("TimekprUserPlayTimeNotificationConfigLS") if rVal[2] in cons.TK_PRIO_LVL_MAP and rVal[0] > 0] self._timekprClientConfig.setClientPlayTimeNotificationLevels(tmpVal) # save config self._timekprClientConfig.saveClientConfig() # disable apply for now self._timekprConfigDialogBuilder.get_object("timekprSaveBT").set_sensitive(False) # enable as well log.setLogLevel(self._timekprClientConfig.getClientLogLevel()) def closePropertiesSignal(self, evt): """Close the config form""" # close self._timekprConfigDialog.hide() def preventDestroyingDialogSignal(self, evt, bs): """Prevent destroying the dialog""" return False # --------------- helper methods --------------- # def isPlayTimeAccountingInfoEnabled(self): """Whether PlayTime controls are enabled""" return self._timekprConfigDialogBuilder.get_object("timekprConfigNotebook").get_nth_page(self._timekprPTPageNr).get_visible() def setPlayTimeAccountingInfoEnabled(self, pState): """Whether PlayTime controls are enabled""" # enable page self._timekprConfigDialogBuilder.get_object("timekprConfigNotebook").get_nth_page(self._timekprPTPageNr).set_visible(pState) # enable config self._timekprConfigDialogBuilder.get_object("TimekprUserNotificationConfigPlayTimeGrid").set_visible(pState) timekpr-next/client/timekprc.py000600 001750 001750 00000001570 14575617135 020652 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # imports import os import getpass import sys import signal # set up our python path if "/usr/lib/python3/dist-packages" not in sys.path: sys.path.append("/usr/lib/python3/dist-packages") # timekpr imports from timekpr.client.interface.dbus.daemon import timekprClient from timekpr.common.utils import misc # main start if __name__ == "__main__": # simple self-running check if misc.checkAndSetRunning(os.path.splitext(os.path.basename(__file__))[0], getpass.getuser()): # get out sys.exit(0) # get our client _timekprClient = timekprClient() # this is needed for appindicator to react to ctrl+c signal.signal(signal.SIGINT, _timekprClient.finishTimekpr) signal.signal(signal.SIGTERM, _timekprClient.finishTimekpr) # start up timekpr client _timekprClient.startTimekprClient() timekpr-next/client/__init__.py000664 001750 001750 00000000000 13476006650 020561 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/timekpra.py000600 001750 001750 00000001676 14575617135 020657 0ustar00bezvfedubezvfedu000000 000000 """ Created on Jan 4, 2019 @author: mjasnik """ # imports import os import getpass import sys import signal # set up our python path if "/usr/lib/python3/dist-packages" not in sys.path: sys.path.append("/usr/lib/python3/dist-packages") # timekpr imports from timekpr.client.admin.adminprocessor import timekprAdminClient from timekpr.common.utils import misc # main start if __name__ == "__main__": # simple self-running check if misc.checkAndSetRunning(os.path.splitext(os.path.basename(__file__))[0], getpass.getuser()): # get out sys.exit(0) # get our admin client _timekprAdminClient = timekprAdminClient() # this is needed for admin application to react to ctrl+c gracefully signal.signal(signal.SIGINT, _timekprAdminClient.finishTimekpr) signal.signal(signal.SIGTERM, _timekprAdminClient.finishTimekpr) # start up timekpr admin client _timekprAdminClient.startTimekprAdminClient(*sys.argv) timekpr-next/client/admin/000775 001750 001750 00000000000 15122253261 017542 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/admin/adminprocessor.py000644 001750 001750 00000077230 15122253261 023153 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # imports import os import getpass from os import geteuid # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.client.interface.dbus.administration import timekprAdminConnector from timekpr.common.utils.config import timekprConfig from timekpr.common.constants import messages as msg from timekpr.common.utils.misc import findHourStartEndMinutes as findHourStartEndMinutes from timekpr.common.utils.misc import splitConfigValueNameParam as splitConfigValueNameParam from timekpr.common.utils.misc import getSecondsFromTimeStr from timekpr.common.utils.misc import getTimeStrFromSeconds class timekprAdminClient(object): """Main class for holding all client logic (including dbus)""" # --------------- initialization / control methods --------------- # def __init__(self): """Initialize admin client""" # get our connector self._timekprAdminConnector = timekprAdminConnector() # main object for GUI self._adminGUI = None def startTimekprAdminClient(self, *args): """Start up timekpr admin (choose gui or cli and start this up)""" # check whether we need CLI or GUI lastParam = args[len(args)-1] timekprForceCLI = False # configuration init _timekprConfig = timekprConfig() # load config _timekprConfig.loadMainConfiguration() # init logging log.setLogging(_timekprConfig.getTimekprLogLevel(), cons.TK_LOG_TEMP_DIR, (cons.TK_LOG_OWNER_ADMIN_SU if geteuid() == 0 else cons.TK_LOG_OWNER_ADMIN), getpass.getuser()) # check for script if ("/timekpra" in lastParam or "timekpra.py" in lastParam): # whether we have X running or wayland? timekprX11Available = os.getenv("DISPLAY") is not None timekprWaylandAvailable = os.getenv("WAYLAND_DISPLAY") is not None timekprMirAvailable = os.getenv("MIR_SOCKET") is not None # if we are required to run graphical thing if (timekprX11Available or timekprWaylandAvailable or timekprMirAvailable): # resource dir _resourcePathGUI = os.path.join(_timekprConfig.getTimekprSharedDir(), "client/forms") # use GUI from timekpr.client.gui.admingui import timekprAdminGUI # load GUI and process from there self._adminGUI = timekprAdminGUI(cons.TK_VERSION, _resourcePathGUI, getpass.getuser()) # start GUI self._adminGUI.startAdminGUI() # nor X nor wayland are available else: # print to console log.consoleOut("%s\n" % (msg.getTranslation("TK_MSG_CONSOLE_GUI_NOT_AVAILABLE"))) # forced CLI" timekprForceCLI = True else: # CLI timekprForceCLI = True # for CLI connections if timekprForceCLI: # connect self._timekprAdminConnector.initTimekprConnection(True, False, timekprForceCLI) # connected? if self._timekprAdminConnector.isConnected()[1]: # use CLI # validate possible parameters and their values, when fine - execute them as well self.checkAndExecuteAdminCommands(*args) log.autoFlushLogFile(True) # --------------- initialization / helper methods --------------- # def finishTimekpr(self, signal=None, frame=None): """Exit timekpr admin GUI gracefully""" if self._adminGUI is not None: # finish main thread on GUI` self._adminGUI.finishTimekpr(signal, frame) # --------------- parameter validation methods --------------- # def checkAndExecuteAdminCommands(self, *args): """Init connection to timekpr dbus server""" # initial param len paramIdx = 0 paramLen = len(args) adminCmdIncorrect = False tmpIdx = 0 # determine parameter offset for rArg in args: # count offset tmpIdx += 1 # check for script if "/timekpra" in rArg or "timekpra.py" in rArg: paramIdx = tmpIdx # this gets the command itself (args[0] is the script name) adminCmd = args[paramIdx] if paramLen > paramIdx else "timekpra" # now based on params check them out # this gets saved user list from the server if adminCmd == "--help": # fine pass # this gets saved user list from the server elif adminCmd in ("--getuserlist", "--userlist"): # check param len if paramLen != paramIdx + 1: # fail adminCmdIncorrect = True else: # get list result, message, userList = self._timekprAdminConnector.getUserList() # process if result == 0: # process self.printUserList(userList) else: # log error log.consoleOut(message) # this gets user configuration from the server elif adminCmd in ("--getuserinfo", "--userinfo"): # check param len if not (paramLen >= paramIdx + 2 and paramLen <= paramIdx + 3): # fail adminCmdIncorrect = True else: # get user config result, message, userConfig = self._timekprAdminConnector.getUserConfigurationAndInformation(args[paramIdx + 1], cons.TK_CL_INF_FULL) # process if result == 0: # process self.printUserConfig(args[paramIdx + 1], userConfig, True if paramLen > paramIdx + 2 and args[paramIdx + 2] == "-h" else False) else: # log error log.consoleOut(message) # this gets user configuration from the server elif adminCmd in ("--getuserinfort", "--userinfort"): # check param len if not (paramLen >= paramIdx + 2 and paramLen <= paramIdx + 3): # fail adminCmdIncorrect = True else: # get user config result, message, userConfig = self._timekprAdminConnector.getUserConfigurationAndInformation(args[paramIdx + 1], cons.TK_CL_INF_RT) # process if result == 0: # process self.printUserConfig(args[paramIdx + 1], userConfig, True if paramLen > paramIdx + 2 and args[paramIdx + 2] == "-h" else False) else: # log error log.consoleOut(message) # this sets allowed days for the user elif adminCmd == "--setalloweddays": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetAllowedDays(args[paramIdx + 1], args[paramIdx + 2]) # this sets allowed hours per specified day or ALL for every day elif adminCmd == "--setallowedhours": # check param len if paramLen != paramIdx + 4: # fail adminCmdIncorrect = True else: # set days self.processSetAllowedHours(args[paramIdx + 1], args[paramIdx + 2], args[paramIdx + 3]) # this sets time limits per allowed days elif adminCmd == "--settimelimits": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetTimeLimits(args[paramIdx + 1], args[paramIdx + 2]) # this sets time limits per week elif adminCmd == "--settimelimitweek": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetTimeLimitWeek(args[paramIdx + 1], args[paramIdx + 2]) # this sets time limits per month elif adminCmd == "--settimelimitmonth": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetTimeLimitMonth(args[paramIdx + 1], args[paramIdx + 2]) # this sets whether to track inactive user sessions elif adminCmd == "--settrackinactive": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetTrackInactive(args[paramIdx + 1], args[paramIdx + 2]) # this sets whether to show tray icon elif adminCmd == "--sethidetrayicon": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetHideTrayIcon(args[paramIdx + 1], args[paramIdx + 2]) # this sets lockout type for the user elif adminCmd == "--setlockouttype": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetLockoutType(args[paramIdx + 1], args[paramIdx + 2]) # this sets whether PlayTime is enabled for user elif adminCmd == "--setplaytimeenabled": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetPlayTimeEnabled(args[paramIdx + 1], args[paramIdx + 2]) # this sets playtime override for user elif adminCmd == "--setplaytimelimitoverride": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetPlayTimeLimitOverride(args[paramIdx + 1], args[paramIdx + 2]) # this sets playtime allowed during unaccounted intervals for user elif adminCmd == "--setplaytimeunaccountedintervalsflag": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetPlayTimeUnaccountedIntervalsEnabled(args[paramIdx + 1], args[paramIdx + 2]) # this sets allowed days for PlayTime for the user elif adminCmd == "--setplaytimealloweddays": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetPlayTimeAllowedDays(args[paramIdx + 1], args[paramIdx + 2]) # this sets PlayTime limits for allowed days for the user elif adminCmd == "--setplaytimelimits": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetPlayTimeLimits(args[paramIdx + 1], args[paramIdx + 2]) # this sets PlayTime activities for the user elif adminCmd == "--setplaytimeactivities": # check param len if paramLen != paramIdx + 3: # fail adminCmdIncorrect = True else: # set days self.processSetPlayTimeActivities(args[paramIdx + 1], args[paramIdx + 2]) # this sets time left for the user at current moment elif adminCmd == "--settimeleft": # check param len if paramLen != paramIdx + 4: # fail adminCmdIncorrect = True else: # set days self.processSetTimeLeft(args[paramIdx + 1], args[paramIdx + 2], args[paramIdx + 3]) # this sets time left for the user at current moment elif adminCmd == "--setplaytimeleft": # check param len if paramLen != paramIdx + 4: # fail adminCmdIncorrect = True else: # set days self.processSetPlayTimeLeft(args[paramIdx + 1], args[paramIdx + 2], args[paramIdx + 3]) else: # out adminCmdIncorrect = True # initial order as well as sibling cmds cmds = ["--help", "--getuserlist", "--userlist", "--getuserinfo", "--userinfo", "--getuserinfort", "--userinfort"] # check whether command is supported if ((adminCmd not in cons.TK_USER_ADMIN_COMMANDS and adminCmd not in cons.TK_ADMIN_COMMANDS and adminCmd not in cmds) or adminCmd == "--help" or adminCmdIncorrect ): # fail if adminCmdIncorrect: # fail msg log.consoleOut(msg.getTranslation("TK_MSG_CONSOLE_COMMAND_INCORRECT"), *args, "\n") # log notice log.consoleOut("%s\n*) %s\n*) %s\n*) %s\n" % ( msg.getTranslation("TK_MSG_CONSOLE_USAGE_NOTICE_HEAD"), msg.getTranslation("TK_MSG_CONSOLE_USAGE_NOTICE_TIME"), msg.getTranslation("TK_MSG_CONSOLE_USAGE_NOTICE_HOURS"), msg.getTranslation("TK_MSG_CONSOLE_USAGE_NOTICE_DAYS")) ) # log usage notes text log.consoleOut("%s\n" % (msg.getTranslation("TK_MSG_CONSOLE_USAGE_NOTES"))) # print initial commands as first for rCmd in cmds: # if exists (this needs to be enabled if there are multiple cmds to do the same thing) if rCmd in cons.TK_USER_ADMIN_COMMANDS: # log on screen log.consoleOut(" ", rCmd, cons.TK_USER_ADMIN_COMMANDS[rCmd], "\n") # print help for rCmd, rCmdDesc in cons.TK_USER_ADMIN_COMMANDS.items(): # do not print already known commands if rCmd not in cmds: # log on screen log.consoleOut(" ", rCmd, rCmdDesc, "\n") # --------------- parameter execution methods --------------- # def printUserList(self, pUserList): """Format and print userlist""" # print to console log.consoleOut(msg.getTranslation("TK_MSG_CONSOLE_USERS_TOTAL", len(pUserList))) # loop and print for rUser in pUserList: log.consoleOut(rUser[0]) def printUserConfig(self, pUserName, pPrintUserConfig, pEasyTime=False): """Format and print user config""" # print to console log.consoleOut("# %s" % (msg.getTranslation("TK_MSG_CONSOLE_CONFIG_FOR") % (pUserName))) # loop and print the same format as ppl will use to set that for rUserKey, rUserConfig in pPrintUserConfig.items(): # final value result = "" # join the lists for days if rUserKey in ("ALLOWED_WEEKDAYS", "PLAYTIME_ALLOWED_WEEKDAYS"): # get final value result = ";".join(str(rVal) for rVal in rUserConfig) # join the lists for limits elif rUserKey in ("LIMITS_PER_WEEKDAYS", "PLAYTIME_LIMITS_PER_WEEKDAYS"): # get final value result = ";".join(getTimeStrFromSeconds(int(rVal)) if pEasyTime else str(rVal) for rVal in rUserConfig) # join the lists for days / hours elif "ALLOWED_HOURS_" in rUserKey: # print join if len(rUserConfig) > 0: # process hours for rUserHour in sorted(list(map(int, rUserConfig))): # unaccounted hour uacc = "!" if rUserConfig[str(rUserHour)][cons.TK_CTRL_UACC] else "" # get config per hr hr = "%s" % (rUserHour) if rUserConfig[str(rUserHour)][cons.TK_CTRL_SMIN] <= 0 and rUserConfig[str(rUserHour)][cons.TK_CTRL_EMIN] >= 60 else "%s[%s-%s]" % (rUserHour, rUserConfig[str(rUserHour)][cons.TK_CTRL_SMIN], rUserConfig[str(rUserHour)][cons.TK_CTRL_EMIN]) # empty result = "%s%s" % (uacc, hr) if result == "" else "%s;%s%s" % (result, uacc, hr) # bools elif rUserKey in ("TRACK_INACTIVE", "HIDE_TRAY_ICON", "PLAYTIME_ENABLED", "PLAYTIME_LIMIT_OVERRIDE_ENABLED", "PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED"): # bools result = True if str(rUserConfig).lower() == "true" else False # strings elif rUserKey in ("PLAYTIME_ACTIVITIES"): # loop thorhough activities for rActArr in rUserConfig: # activity act = "%s[%s]" % (rActArr[0], rActArr[1]) if rActArr[1] != "" else "%s" % (rActArr[0]) # gather activities result = "%s" % (act) if result == "" else "%s;%s" % (result, act) # limits elif rUserKey in ("LIMIT_PER_WEEK" ,"LIMIT_PER_MONTH" ,"TIME_SPENT_BALANCE" ,"TIME_SPENT_DAY" ,"TIME_SPENT_WEEK" ,"TIME_SPENT_MONTH" ,"TIME_LEFT_DAY" ,"PLAYTIME_LEFT_DAY" ,"PLAYTIME_SPENT_DAY" ,"ACTUAL_TIME_SPENT_SESSION" ,"ACTUAL_TIME_INACTIVE_SESSION" ,"ACTUAL_TIME_SPENT_BALANCE " ,"ACTUAL_TIME_SPENT_DAY" ,"ACTUAL_TIME_LEFT_DAY" ,"ACTUAL_TIME_LEFT_CONTINUOUS" ,"ACTUAL_PLAYTIME_LEFT_DAY"): # final result = getTimeStrFromSeconds(int(rUserConfig)) if pEasyTime else str(rUserConfig) # the rest else: # final val result = str(rUserConfig) # print final log.consoleOut("%s: %s" % (rUserKey, result)) def processSetAllowedDays(self, pUserName, pDayList): """Process allowed days""" # defaults dayMap = [] result = 0 # day map try: # try to parse parameters dayMap = str(pDayList).split(";") except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setAllowedDays(pUserName, dayMap) # process if result != 0: # log error log.consoleOut(message) def processSetAllowedHours(self, pUserName, pDayNumber, pHourList): """Process allowed hours""" # this is the dict for hour config allowedHours = {} result = 0 # allowed hours try: # check hours for rHour in str(pHourList).split(";"): # get hours and minutes hour, sMin, eMin, uacc = findHourStartEndMinutes(rHour) # raise any error in case we can not get parsing right if hour is None: # raise raise ValueError("this does not compute") # set hours allowedHours[str(hour)] = {cons.TK_CTRL_SMIN: sMin, cons.TK_CTRL_EMIN: eMin, cons.TK_CTRL_UACC: uacc} except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setAllowedHours(pUserName, pDayNumber, allowedHours) # process if result != 0: # log error log.consoleOut(message) def processSetTimeLimits(self, pUserName, pDayLimits): """Process time limits for days""" # defaults dayLimits = [] result = 0 # day limits try: # allow empty limits too if str(pDayLimits) != "": # convert limits for rDl in pDayLimits.split(";"): # add limit dayLimits += [getSecondsFromTimeStr(rDl)] except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setTimeLimitForDays(pUserName, dayLimits) # process if result != 0: # log error log.consoleOut(message) def processSetTimeLimitWeek(self, pUserName, pTimeLimitWeek): """Process time limits for week""" # defaults weekLimit = 0 result = 0 # week limit try: # try to parse parameters weekLimit = int(getSecondsFromTimeStr(pTimeLimitWeek)) except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setTimeLimitForWeek(pUserName, weekLimit) # process if result != 0: # log error log.consoleOut(message) def processSetTimeLimitMonth(self, pUserName, pTimeLimitMonth): """Process time limits for month""" # defaults monthLimit = 0 result = 0 # week limit try: # try to parse parameters monthLimit = int(getSecondsFromTimeStr(pTimeLimitMonth)) except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setTimeLimitForMonth(pUserName, monthLimit) # process if result != 0: # log error log.consoleOut(message) def processSetTrackInactive(self, pUserName, pTrackInactive): """Process track inactive""" # defaults trackInactive = None result = 0 # check if str(pTrackInactive).lower() not in ("true", "false"): # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % ("please specify true or false") else: trackInactive = True if str(pTrackInactive).lower() == "true" else False # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setTrackInactive(pUserName, trackInactive) # process if result != 0: # log error log.consoleOut(message) def processSetHideTrayIcon(self, pUserName, pHideTrayIcon): """Process hide tray icon""" # defaults hideTrayIcon = None result = 0 # check if str(pHideTrayIcon).lower() not in ("true", "false"): # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % ("please specify true or false") else: hideTrayIcon = True if str(pHideTrayIcon).lower() == "true" else False # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setHideTrayIcon(pUserName, hideTrayIcon) # process if result != 0: # log error log.consoleOut(message) def processSetLockoutType(self, pUserName, pLockoutType): """Process lockout type""" # defaults result = 0 # parse lockout lockout = str(pLockoutType).split(";") lockoutType = lockout[0] lockoutWakeFrom = lockout[1] if len(lockout) == 3 else '0' lockoutWakeTo = lockout[2] if len(lockout) == 3 else '23' # check if lockoutType not in (cons.TK_CTRL_RES_L, cons.TK_CTRL_RES_S, cons.TK_CTRL_RES_W, cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K, cons.TK_CTRL_RES_D): # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % ("please specify one of these: %s, %s, %s, %s, %s, %s" % (cons.TK_CTRL_RES_L, cons.TK_CTRL_RES_S, cons.TK_CTRL_RES_W, cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K, cons.TK_CTRL_RES_D)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setLockoutType(pUserName, lockoutType, lockoutWakeFrom, lockoutWakeTo) # process if result != 0: # log error log.consoleOut(message) def processSetTimeLeft(self, pUserName, pOperation, pLimit): """Process time left""" # defaults limit = 0 result = 0 # limit try: # try to parse parameters limit = int(getSecondsFromTimeStr(pLimit)) except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setTimeLeft(pUserName, pOperation, limit) # process if result != 0: # log error log.consoleOut(message) # --------------- parameter execution methods for PlayTime --------------- # def processSetPlayTimeEnabled(self, pUserName, pPlayTimeEnabled): """Process PlayTime enabled flag""" # defaults isPlayTimeEnabled = None result = 0 # check if str(pPlayTimeEnabled).lower() not in ("true", "false"): # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % ("please specify true or false") else: isPlayTimeEnabled = True if str(pPlayTimeEnabled).lower() == "true" else False # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setPlayTimeEnabled(pUserName, isPlayTimeEnabled) # process if result != 0: # log error log.consoleOut(message) def processSetPlayTimeLimitOverride(self, pUserName, pPlayTimeLimitOverride): """Process PlayTime override flag""" # defaults isPlayTimeLimitOverride = None result = 0 # check if str(pPlayTimeLimitOverride).lower() not in ("true", "false"): # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % ("please specify true or false") else: isPlayTimeLimitOverride = True if str(pPlayTimeLimitOverride).lower() == "true" else False # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setPlayTimeLimitOverride(pUserName, isPlayTimeLimitOverride) # process if result != 0: # log error log.consoleOut(message) def processSetPlayTimeUnaccountedIntervalsEnabled(self, pUserName, pPlayTimeUnaccountedIntervalsEnabled): """Process PlayTime allowed during unaccounted intervals flag""" # defaults isPlayTimeUnaccountedIntervalsEnabled = None result = 0 # check if str(pPlayTimeUnaccountedIntervalsEnabled).lower() not in ("true", "false"): # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % ("please specify true or false") else: isPlayTimeUnaccountedIntervalsEnabled = True if str(pPlayTimeUnaccountedIntervalsEnabled).lower() == "true" else False # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setPlayTimeUnaccountedIntervalsEnabled(pUserName, isPlayTimeUnaccountedIntervalsEnabled) # process if result != 0: # log error log.consoleOut(message) def processSetPlayTimeAllowedDays(self, pUserName, pPlayTimeDayList): """Process allowed days for PlayTime""" # defaults dayMap = [] result = 0 # day map try: # try to parse parameters dayMap = str(pPlayTimeDayList).split(";") except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setPlayTimeAllowedDays(pUserName, dayMap) # process if result != 0: # log error log.consoleOut(message) def processSetPlayTimeLimits(self, pUserName, pPlayTimeDayLimits): """Process time limits for allowed days for PlayTime""" # defaults dayLimits = [] result = 0 # day limists try: # allow empty limits too if str(pPlayTimeDayLimits) != "": # convert limits for rDl in str(pPlayTimeDayLimits).split(";"): # add limit dayLimits += [getSecondsFromTimeStr(rDl)] except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setPlayTimeLimitsForDays(pUserName, dayLimits) # process if result != 0: # log error log.consoleOut(message) def processSetPlayTimeActivities(self, pUserName, pPlayTimeActivities): """Process PlayTime activities""" # defaults playTimeActivities = [] result = 0 # day limists try: # ## try to parse parameters ## if str(pPlayTimeActivities) != "": # split activities for rAct in str(pPlayTimeActivities).split(";"): # try parsing the names mask, description = splitConfigValueNameParam(rAct) # raise any error in case we can not get parsing right if mask is None: # raise raise ValueError("this does not compute") # set up activity list playTimeActivities.append([mask, description]) except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setPlayTimeActivities(pUserName, playTimeActivities) # process if result != 0: # log error log.consoleOut(message) def processSetPlayTimeLeft(self, pUserName, pOperation, pLimit): """Process time left""" # defaults limit = 0 result = 0 # limit try: # try to parse parameters limit = int(getSecondsFromTimeStr(pLimit)) except Exception as ex: # fail result = -1 message = msg.getTranslation("TK_MSG_PARSE_ERROR") % (str(ex)) # preprocess successful if result == 0: # invoke result, message = self._timekprAdminConnector.setPlayTimeLeft(pUserName, pOperation, limit) # process if result != 0: # log error log.consoleOut(message) timekpr-next/client/interface/000775 001750 001750 00000000000 13476006650 020422 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/speech/000775 001750 001750 00000000000 15122253204 021656 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/speech/espeak.py000644 001750 001750 00000004235 15122253204 023502 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ import locale import time # init speech try: from espeak import espeak as espeak _USE_SPEECH = True except (ImportError, ValueError): _USE_SPEECH = False # init speech-ng if not _USE_SPEECH: try: from espeakng import ESpeakNG as espeakng _USE_SPEECH_NG = True except (ImportError, ValueError): _USE_SPEECH_NG = False pass pass def isSupported(): """Return whether speech can be used""" # result return (_USE_SPEECH or _USE_SPEECH_NG) class timekprSpeech(object): """Class will provide speech synth functionality""" def __init__(self): """Initialize config""" def initSpeech(self): """Initialize speech""" # set up speech synth if _USE_SPEECH: # espeak espeak.set_voice(self.getDefaultSpeechLanguage()) espeak.set_parameter(espeak.Parameter.Pitch, 1) espeak.set_parameter(espeak.Parameter.Rate, 135) espeak.set_parameter(espeak.Parameter.Range, 600) elif _USE_SPEECH_NG: # ng espeak self.espeak = espeakng() self.espeak.voice = self.getDefaultSpeechLanguage(); self.espeak.pitch = 1 self.espeak.speed = 135 self.espeak.range = 600 def getDefaultSpeechLanguage(self): """Get default language""" # no lang lang = "en" try: if _USE_SPEECH: lang = locale.getlocale()[0].split("_")[0] elif _USE_SPEECH_NG: lang = locale.getlocale()[0].replace("_", "-").lower() except Exception: pass # result return lang def saySmth(self, pMsg): """Say something""" # if supported if self.isSpeechSupported(): if _USE_SPEECH: # synth the speech espeak.synth(pMsg) elif _USE_SPEECH_NG: # say self.espeak.say(pMsg) def isSpeechSupported(self): """Return whether speech can be used""" # result return isSupported() timekpr-next/client/interface/speech/__init__.py000664 001750 001750 00000000000 13476006650 023770 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/__init__.py000664 001750 001750 00000000000 13476006650 022521 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/ui/000775 001750 001750 00000000000 14575617250 021044 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/ui/appindicator.py000600 001750 001750 00000011221 14575617134 024057 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import import gi import os gi.require_version("Gtk", "3.0") from gi.repository import Gtk # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.client.interface.ui.notificationarea import timekprNotificationArea from timekpr.common.constants import messages as msg # indicator stuff try: # try to load ayatanaappindicator (fully compatible with appindicator, I hope it stays that way) gi.require_version("AyatanaAppIndicator3", "0.1") from gi.repository import AyatanaAppIndicator3 as AppIndicator # if successful, mark it so _USE_INDICATOR = True except (ImportError, ValueError): try: # try to load appindicator gi.require_version("AppIndicator3", "0.1") from gi.repository import AppIndicator3 as AppIndicator # if successful, mark it so _USE_INDICATOR = True except (ImportError, ValueError): # no indictor _USE_INDICATOR = False pass class timekprIndicator(timekprNotificationArea): """Support appindicator""" def __init__(self, pUserName, pUserNameFull, pTimekprClientConfig): """Init all required stuff for indicator""" log.log(cons.TK_LOG_LEVEL_INFO, "start initTimekprIndicator") # only if this is supported if self.isSupported(): # init parent as well super().__init__(pUserName, pUserNameFull, pTimekprClientConfig) # this is our icon self._indicator = None log.log(cons.TK_LOG_LEVEL_INFO, "finish initTimekprIndicator") def isSupported(self): """Get whether appindicator is supported""" global _USE_INDICATOR # returns whether we can use appindicator return _USE_INDICATOR def initTimekprIcon(self): """Initialize timekpr indicator""" log.log(cons.TK_LOG_LEVEL_INFO, "start initTimekprIndicatorIcon") # init indicator itself (icon will be set later) self._indicator = AppIndicator.Indicator.new("indicator-timekpr", os.path.join(self._timekprClientConfig.getTimekprSharedDir(), "icons", cons.TK_PRIO_CONF["client-logo"][cons.TK_ICON_STAT]), AppIndicator.IndicatorCategory.APPLICATION_STATUS) self._indicator.set_status(AppIndicator.IndicatorStatus.ACTIVE) # define empty menu self._timekprMenu = Gtk.Menu() # add menu items self._timekprMenuItemTimeLeft = Gtk.MenuItem(msg.getTranslation("TK_MSG_MENU_TIME_LEFT")) self._timekprMenu.append(self._timekprMenuItemTimeLeft) self._timekprMenu.append(Gtk.SeparatorMenuItem()) self._timekprMenuItemProperties = Gtk.MenuItem(msg.getTranslation("TK_MSG_MENU_CONFIGURATION")) self._timekprMenu.append(self._timekprMenuItemProperties) self._timekprMenu.append(Gtk.SeparatorMenuItem()) self._timekprMenuItemAbout = Gtk.MenuItem(msg.getTranslation("TK_MSG_MENU_ABOUT")) self._timekprMenu.append(self._timekprMenuItemAbout) # enable all self._timekprMenu.show_all() # connect signal to code self._timekprMenuItemTimeLeft.connect("activate", super().invokeTimekprTimeLeft) self._timekprMenuItemProperties.connect("activate", super().invokeTimekprUserProperties) self._timekprMenuItemAbout.connect("activate", super().invokeTimekprAbout) # set menu to indicator self._indicator.set_menu(self._timekprMenu) # initial config self.setTimeLeft("", None, 0) log.log(cons.TK_LOG_LEVEL_INFO, "finish initTimekprIndicatorIcon") def setTimeLeft(self, pPriority, pTimeLeft, pTimeNotLimited, pPlayTimeLeft=None): """Set time left in the indicator""" # make strings to set timeLeftStr, icon = super().formatTimeLeft(pPriority, pTimeLeft, pTimeNotLimited, pPlayTimeLeft) # if we have smth to set if timeLeftStr is not None: # set time left (this works with indicator in unity and gnome) self._indicator.set_label(timeLeftStr, "") # set time left (this works with indicator in kde5) self._indicator.set_title(timeLeftStr) # if we have smth to set if icon is not None: # set up the icon self._indicator.set_icon(icon) def getTrayIconEnabled(self): """Get whether tray icon is enabled""" return self._indicator.get_status() == AppIndicator.IndicatorStatus.ACTIVE def setTrayIconEnabled(self, pEnabled): """Set whether tray icon is enabled""" self._indicator.set_status(AppIndicator.IndicatorStatus.ACTIVE if pEnabled else AppIndicator.IndicatorStatus.PASSIVE) timekpr-next/client/interface/ui/__init__.py000664 001750 001750 00000000000 13476006650 023136 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/ui/statusicon.py000600 001750 001750 00000010133 14575617135 023600 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import import os import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.client.interface.ui.notificationarea import timekprNotificationArea from timekpr.common.constants import messages as msg # status icon stuff _USE_STATUSICON = True class timekprIndicator(timekprNotificationArea): """Support appindicator""" def __init__(self, pUserName, pUserNameFull, pTimekprClientConfig): """Init all required stuff for indicator""" log.log(cons.TK_LOG_LEVEL_INFO, "start initTimekprSystrayIcon") # only if this is supported if self.isSupported(): # init parent as well super().__init__(pUserName, pUserNameFull, pTimekprClientConfig) # this is our icon self._tray = None log.log(cons.TK_LOG_LEVEL_INFO, "finish initTimekprSystrayIcon") def isSupported(self): """Get whether appindicator is supported""" global _USE_STATUSICON # returns whether we can use appindicator return _USE_STATUSICON def initTimekprIcon(self): """Initialize timekpr indicator""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start initTimekprStatusIcon") # define our popupmenu timekprMenu = """ """ # # # set up tray self._tray = Gtk.StatusIcon() self._tray.set_visible(True) # connect to methods self._tray.connect("activate", super().invokeTimekprTimeLeft) self._tray.connect("popup-menu", self.onTimekprMenu) # build up menu actiongroups timekprActionGroup = Gtk.ActionGroup("timekprActions") timekprActionGroup.add_actions([ ("TimeLeft", Gtk.STOCK_INFO, msg.getTranslation("TK_MSG_MENU_TIME_LEFT"), None, None, super().invokeTimekprTimeLeft), ("Limits & configuration", Gtk.STOCK_PROPERTIES, msg.getTranslation("TK_MSG_MENU_CONFIGURATION"), None, None, super().invokeTimekprUserProperties), ("About", Gtk.STOCK_ABOUT, msg.getTranslation("TK_MSG_MENU_ABOUT"), None, None, super().invokeTimekprAbout) ]) # build up menu timekprUIManager = Gtk.UIManager() timekprUIManager.add_ui_from_string(timekprMenu) timekprUIManager.insert_action_group(timekprActionGroup) self._popup = timekprUIManager.get_widget("/timekprPopupMenu") # initial config self._tray.set_from_file(os.path.join(self._timekprClientConfig.getTimekprSharedDir(), "icons", cons.TK_PRIO_CONF["client-logo"][cons.TK_ICON_STAT])) self.setTimeLeft("", None, 0) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish initTimekprStatusIcon") def setTimeLeft(self, pPriority, pTimeLeft, pTimeNotLimited, pPlayTimeLeft=None): """Set time left in the indicator""" # make strings to set timeLeftStr, icon = super().formatTimeLeft(pPriority, pTimeLeft, pTimeNotLimited, pPlayTimeLeft) # if we have smth to set if timeLeftStr is not None: # set time left self._tray.set_tooltip_text(timeLeftStr) self._tray.set_title(timeLeftStr) # if we have smth to set if icon is not None: # set up the icon self._tray.set_from_file(icon) def onTimekprMenu(self, status, button, time): """Show popup menu for tray""" self._popup.popup(None, None, None, None, 0, time) def getTrayIconEnabled(self): """Get whether tray icon is enabled""" return self._tray.get_visible() def setTrayIconEnabled(self, pEnabled): """Set whether tray icon is enabled""" self._tray.set_visible(pEnabled) timekpr-next/client/interface/ui/notificationarea.py000600 001750 001750 00000030224 14575617250 024724 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import from datetime import timedelta import os # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.client.interface.dbus.notifications import timekprNotifications from timekpr.client.gui.clientgui import timekprGUI class timekprNotificationArea(object): """Support appindicator or other means of showing icon on the screen (this class is a parent for classes like indicator or staticon)""" def __init__(self, pUserName, pUserNameFull, pTimekprClientConfig): """Init all required stuff for indicator""" log.log(cons.TK_LOG_LEVEL_INFO, "start init timekpr indicator") # configuration self._timekprClientConfig = pTimekprClientConfig # set version self._timekprVersion = "-.-.-" # set username self._userName = pUserName # initialize priority self._lastUsedPriority = self._lastUsedServerPriority = "" # priority level self._lastUsedPriorityLvl = -99 # PlayTime priority level self._lastUsedPTPriorityLvl = -99 # initialize time left self._timeLeftTotal = None # initialize PlayTime left self._playTimeLeftTotal = None # initialize time limit self._timeNotLimited = 0 # init notificaction stuff self._timekprNotifications = timekprNotifications(self._userName, self._timekprClientConfig) # dbus self._timekprBus = None self._notifyObject = None self._notifyInterface = None # gui forms self._timekprGUI = timekprGUI(cons.TK_VERSION, self._timekprClientConfig, self._userName, pUserNameFull) log.log(cons.TK_LOG_LEVEL_INFO, "finish init timekpr indicator") def initClientConnections(self): """Proxy method for initialization""" # initalize DBUS connections to every additional module self._timekprNotifications.initClientConnections() def isTimekprConnected(self): """Proxy method for initialization status""" # check if main connection to timekpr is up return self._timekprNotifications.isTimekprConnected() def verifySessionAttributes(self, pWhat, pKey): """Proxy method for receive the signal and process the data""" self._timekprNotifications.verifySessionAttributes(pWhat, pKey) def requestTimeLimits(self): """Proxy method for request time limits from server""" self._timekprNotifications.requestTimeLimits() def requestTimeLeft(self): """Proxy method for request time left from server""" self._timekprNotifications.requestTimeLeft() def _determinePriority(self, pType, pPriority, pTimeLeft): """Determine priority based on client config""" # def finalPrio = pPriority finalLimitSecs = -1 # keep in mind that this applies to timeLeft only and critical notifications can STILL be pushed from server if pTimeLeft is not None: # calculate for rPrio in self._timekprClientConfig.getClientNotificationLevels() if pType == "Time" else self._timekprClientConfig.getClientPlayTimeNotificationLevels(): # determine which is the earliest priority level we need to use # it is determined as time left is less then this interval if rPrio[0] >= pTimeLeft and (finalLimitSecs > rPrio[0] or finalLimitSecs < 0): # determine if this is the gratest level that is lower than limit finalLimitSecs = rPrio[0] finalPrio = cons.TK_PRIO_LVL_MAP[rPrio[1]] # final priority return finalPrio, finalLimitSecs def formatTimeLeft(self, pPriority, pTimeLeft, pTimeNotLimited, pPlayTimeLeft=None): """Set time left in the indicator""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start formatTimeLeft") # prio prio = pPriority timekprIcon = None timeLeftStr = None isTimeChanged = self._timeLeftTotal != pTimeLeft isPlayTimeChanged = self._playTimeLeftTotal != pPlayTimeLeft # determine hours and minutes for PlayTime (if there is such time) if (isTimeChanged or isPlayTimeChanged) and pPlayTimeLeft is not None and pTimeLeft is not None: # get the smallest one timeLeftPT = min(pPlayTimeLeft, pTimeLeft) # determine hours and minutes timeLeftStrPT = str((timeLeftPT - cons.TK_DATETIME_START).days * 24 + timeLeftPT.hour).rjust(2, "0") timeLeftStrPT += ":" + str(timeLeftPT.minute).rjust(2, "0") timeLeftStrPT += ((":" + str(timeLeftPT.second).rjust(2, "0")) if self._timekprClientConfig.getClientShowSeconds() else "") # execute time and icon changes + notifications only when there are changes if isTimeChanged or isPlayTimeChanged or pTimeLeft is None or self._lastUsedServerPriority != pPriority: # if there is no time left set yet, show -- if pTimeLeft is None: # determine hours and minutes timeLeftStr = "--:--" + (":--" if self._timekprClientConfig.getClientShowSeconds() else "") else: # update time self._timeLeftTotal = pTimeLeft self._playTimeLeftTotal = pPlayTimeLeft self._timeNotLimited = pTimeNotLimited # unlimited has special icon and text (if it's not anymore, these will change) if self._timeNotLimited > 0: # unlimited! timeLeftStr = "∞" prio = "unlimited" else: # determine hours and minutes timeLeftStr = str((self._timeLeftTotal - cons.TK_DATETIME_START).days * 24 + self._timeLeftTotal.hour).rjust(2, "0") timeLeftStr += ":" + str(self._timeLeftTotal.minute).rjust(2, "0") timeLeftStr += ((":" + str(self._timeLeftTotal.second).rjust(2, "0")) if self._timekprClientConfig.getClientShowSeconds() else "") # notifications and icons only when time has changed if isTimeChanged: # get user configured level and priority prio, finLvl = (pPriority, -1) if pPriority == cons.TK_PRIO_UACC else self._determinePriority("Time", pPriority, (pTimeLeft - cons.TK_DATETIME_START).total_seconds()) # if level actually changed if self._lastUsedPriorityLvl != finLvl: # do not notify if this is the first invocation, because initial limits are already asked from server # do not notify user in case icon is hidden and no notifications should be shown if self._lastUsedPriorityLvl > 0 and self.getTrayIconEnabled(): # emit notification self.notifyUser(cons.TK_MSG_CODE_TIMELEFT, None, prio, pTimeLeft, None) # level this up self._lastUsedPriorityLvl = finLvl # determine hours and minutes for PlayTime (if there is such time) if pPlayTimeLeft is not None: # format final time string timeLeftStr = "%s / %s" % (timeLeftStr, timeLeftStrPT) # now, if priority changes, set up icon as well if isTimeChanged and self._lastUsedPriority != prio: # log log.log(cons.TK_LOG_LEVEL_DEBUG, "changing icon for level, old: %s, new: %s" % (self._lastUsedPriority, prio)) # set up last used prio self._lastUsedPriority = prio # get status icon timekprIcon = os.path.join(self._timekprClientConfig.getTimekprSharedDir(), "icons", cons.TK_PRIO_CONF[cons.getNotificationPrioriy(self._lastUsedPriority)][cons.TK_ICON_STAT]) # adjust server priority: server sends all time left messages with low priority, except when there is no time left, then priority is critical self._lastUsedServerPriority = pPriority log.log(cons.TK_LOG_LEVEL_DEBUG, "finish formatTimeLeft") # return time left and icon (if changed), so implementations can use it return timeLeftStr, timekprIcon def processPlayTimeNotifications(self, pTimeLimits): """Process PlayTime notifications (if there is PT info in limits)""" isPTInfoEnabled = self._timekprGUI.isPlayTimeAccountingInfoEnabled() # determine whether we actually need to process PlayTime if cons.TK_CTRL_PTLSTC in pTimeLimits and cons.TK_CTRL_PTLPD in pTimeLimits and cons.TK_CTRL_PTTLO in pTimeLimits: # only of not enabled if not isPTInfoEnabled: self._timekprGUI.setPlayTimeAccountingInfoEnabled(True) # get user configured level and priority prio, finLvl = self._determinePriority("PlayTime", cons.TK_PRIO_LOW, pTimeLimits[cons.TK_CTRL_PTLPD]) # log log.log(cons.TK_LOG_LEVEL_DEBUG, "process PT notif, prio: %s, prevLVL: %i, lvl: %i, icoena: %s" % (prio, self._lastUsedPTPriorityLvl, finLvl, self.getTrayIconEnabled())) # if any priority is effective, determine whether we need to inform user if (finLvl > 0 or self._lastUsedPTPriorityLvl < -1) and self._lastUsedPTPriorityLvl != finLvl and self.isTimekprConnected(): # adjust level too self._lastUsedPTPriorityLvl = finLvl # if icon is hidden, do not show any notifications if self.getTrayIconEnabled(): # notify user self._timekprNotifications.notifyUser(cons.TK_MSG_CODE_TIMELEFT, "PlayTime", prio, cons.TK_DATETIME_START + timedelta(seconds=min(pTimeLimits[cons.TK_CTRL_PTLPD], pTimeLimits[cons.TK_CTRL_LEFTD])), None) elif isPTInfoEnabled: # disable info (if it was enabled) log.log(cons.TK_LOG_LEVEL_DEBUG, "disable PT info tab") self._timekprGUI.setPlayTimeAccountingInfoEnabled(False) def notifyUser(self, pMsgCode, pMsgType, pPriority, pTimeLeft=None, pAdditionalMessage=None): """Notify user (a wrapper call)""" # prio prio = pPriority timeLeft = cons.TK_DATETIME_START if pTimeLeft is None else pTimeLeft # for time left, we need to determine final priority accoriding to user defined priority (if not defined, that will come from server) if pMsgCode == cons.TK_MSG_CODE_TIMELEFT: # get user configured level and priority prio, finLvl = self._determinePriority("Time", pPriority, (timeLeft - cons.TK_DATETIME_START).total_seconds()) # notify user self._timekprNotifications.notifyUser(pMsgCode, pMsgType, prio, timeLeft, pAdditionalMessage) def setStatus(self, pStatus): """Change status of timekpr""" return self._timekprGUI.setStatus(pStatus) # --------------- user clicked methods --------------- # def invokeTimekprTimeLeft(self, pEvent): """Inform user about (almost) exact time left""" # inform user about precise time self.notifyUser((cons.TK_MSG_CODE_TIMEUNLIMITED if self._timeNotLimited > 0 else cons.TK_MSG_CODE_TIMELEFT), None, self._lastUsedPriority, self._timeLeftTotal) def invokeTimekprUserProperties(self, pEvent): """Bring up a window for property editing""" # show limits and config self._timekprGUI.initConfigForm() def invokeTimekprAbout(self, pEvent): """Bring up a window for timekpr configration (this needs elevated privileges to do anything)""" # show about self._timekprGUI.initAboutForm() # --------------- configuration update methods --------------- # def renewUserLimits(self, pTimeInformation): """Call an update to renew time left""" # pass this to actual gui storage self._timekprGUI.renewLimits(pTimeInformation) def renewLimitConfiguration(self, pLimits): """Call an update on actual limits""" # pass this to actual gui storage self._timekprGUI.renewLimitConfiguration(pLimits) timekpr-next/client/interface/dbus/000775 001750 001750 00000000000 15122253261 021347 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/dbus/daemon.py000644 001750 001750 00000035104 15122253261 023165 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # imports from dbus.mainloop.glib import DBusGMainLoop DBusGMainLoop(set_as_default=True) from datetime import timedelta import os import dbus from gi.repository import GLib # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.common.utils import misc from timekpr.common.utils.config import timekprClientConfig from timekpr.client.interface.ui.appindicator import timekprIndicator as appind_timekprIndicator from timekpr.client.interface.ui.statusicon import timekprIndicator as statico_timekprIndicator from timekpr.common.constants import messages as msg class timekprClient(object): """Main class for holding all client logic (including dbus)""" # --------------- initialization / control methods --------------- # def __init__(self): """Initialize client""" # set username , etc. self._userName, self._userNameFull = misc.getNormalizedUserNames(pUID=os.getuid()) self._userNameDBUS = self._userName.replace(".", "").replace("-", "") # get our bus self._timekprBus = (dbus.SessionBus() if (cons.TK_DEV_ACTIVE and cons.TK_DEV_BUS == "ses") else dbus.SystemBus()) # loop self._mainLoop = GLib.MainLoop() # init logging (load config which has all the necessarry bits) self._timekprClientConfig = timekprClientConfig() self._timekprClientConfig.loadClientConfiguration() # init logging log.setLogging(self._timekprClientConfig.getClientLogLevel(), cons.TK_LOG_TEMP_DIR, cons.TK_LOG_OWNER_CLIENT, self._userName) def startTimekprClient(self): """Start up timekpr (choose appropriate gui and start this up)""" log.log(cons.TK_LOG_LEVEL_INFO, "starting up timekpr client") # check if appind is supported self._timekprClientIndicator = appind_timekprIndicator(self._userName, self._userNameFull, self._timekprClientConfig) # if not supported fall back to statico if not self._timekprClientIndicator.isSupported(): # check if appind is supported self._timekprClientIndicator = statico_timekprIndicator(self._userName, self._userNameFull, self._timekprClientConfig) # this will check whether we have an icon, if not, the rest goes through timekprClient anyway if self._timekprClientIndicator.isSupported(): # init timekpr self._timekprClientIndicator.initTimekprIcon() else: # process time left notification (notifications should be available in any of the icons, even of not supported) self._timekprClientIndicator.notifyUser(cons.TK_MSG_CODE_ICON_INIT_ERROR, None, cons.TK_PRIO_CRITICAL, None, "cannot initialize the icon in any way") # connect to timekpr etc. self.connectTimekprSignalsDBUS() # init startup notification at default interval GLib.timeout_add_seconds(cons.TK_POLLTIME, self.requestInitialTimeValues) # periodic log flusher GLib.timeout_add_seconds(cons.TK_POLLTIME, self.autoFlushLogFile) # start main loop self._mainLoop.run() def autoFlushLogFile(self): """Periodically save file""" log.autoFlushLogFile() return True def finishTimekpr(self, signal=None, frame=None): """Exit timekpr gracefully""" log.log(cons.TK_LOG_LEVEL_INFO, "Finishing up") # exit main loop self._mainLoop.quit() log.log(cons.TK_LOG_LEVEL_INFO, "Finished") log.autoFlushLogFile(True) def requestInitialTimeValues(self): """Request initial config from server""" # whether to process again result = False # check if connected if self._notificationFromDBUS is not None: # connect to DBUS for the rest of modules self._timekprClientIndicator.initClientConnections() # request values if connections are made successfully result = self._timekprClientIndicator.isTimekprConnected() # connected? if result: # get limits self._timekprClientIndicator.requestTimeLimits() # get left self._timekprClientIndicator.requestTimeLeft() # continue execution while not connected (this is called from glib exec) return not result # --------------- DBUS / communication methods --------------- # def connectTimekprSignalsDBUS(self): """Init connections to dbus provided by server""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start connectTimekprSignalsDBUS") # trying to connect self._timekprClientIndicator.setStatus(msg.getTranslation("TK_MSG_STATUS_CONNECTING")) try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus object self._notificationFromDBUS = self._timekprBus.get_object(cons.TK_DBUS_BUS_NAME, cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS) # connect to signal self._sessionAttributeVerificationSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveSessionAttributeVerificationRequest, dbus_interface = cons.TK_DBUS_USER_SESSION_ATTRIBUTE_INTERFACE, signal_name = "sessionAttributeVerification") # connect to signal self._timeLeftSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveTimeLeft, dbus_interface = cons.TK_DBUS_USER_LIMITS_INTERFACE, signal_name = "timeLeft") # connect to signal self._timeLimitsSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveTimeLimits, dbus_interface = cons.TK_DBUS_USER_LIMITS_INTERFACE, signal_name = "timeLimits") # connect to signal self._timeLeftNotificatonSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveTimeLeftNotification, dbus_interface = cons.TK_DBUS_USER_NOTIF_INTERFACE, signal_name = "timeLeftNotification") # connect to signal self._timeCriticalNotificatonSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveTimeCriticalNotification, dbus_interface = cons.TK_DBUS_USER_NOTIF_INTERFACE, signal_name = "timeCriticalNotification") # connect to signal self._timeNoLimitNotificationSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveTimeNoLimitNotification, dbus_interface = cons.TK_DBUS_USER_NOTIF_INTERFACE, signal_name = "timeNoLimitNotification") # connect to signal self._timeLeftChangedNotificationSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveTimeLeftChangedNotification, dbus_interface = cons.TK_DBUS_USER_NOTIF_INTERFACE, signal_name = "timeLeftChangedNotification") # connect to signal self._timeConfigurationChangedNotificationSignal = self._timekprBus.add_signal_receiver( path = cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS, handler_function = self.receiveTimeConfigurationChangedNotification, dbus_interface = cons.TK_DBUS_USER_NOTIF_INTERFACE, signal_name = "timeConfigurationChangedNotification") # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_BUS_NAME) # set status self._timekprClientIndicator.setStatus(msg.getTranslation("TK_MSG_STATUS_CONNECTED")) log.log(cons.TK_LOG_LEVEL_DEBUG, "main DBUS signals connected") except Exception as dbusEx: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR (DBUS): \"%s\" in \"%s.%s\"" % (str(dbusEx), __name__, self.connectTimekprSignalsDBUS.__name__)) log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: failed to connect to timekpr dbus, trying again...") # did not connect (set connection to None) and schedule for reconnect at default interval self._notificationFromDBUS = None # connect until successful GLib.timeout_add_seconds(cons.TK_POLLTIME, self.connectTimekprSignalsDBUS) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish connectTimekprSignalsDBUS") # finish return False # --------------- admininstration / verification methods (from dbus) --------------- # def receiveSessionAttributeVerificationRequest(self, pWhat, pKey): """Receive the signal and process the data""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive verification request: %s, %s" % (pWhat, "key")) # resend stuff to server self._timekprClientIndicator.verifySessionAttributes(pWhat, pKey) def processShowClientIcon(self, pTimeInformation): """Check wheter to show or hide tray icon""" # do we have information about show or hide icon if cons.TK_CTRL_HIDEI in pTimeInformation: # enable? iconStatus = (not bool(pTimeInformation[cons.TK_CTRL_HIDEI])) # check if those differ if self._timekprClientIndicator.getTrayIconEnabled() != iconStatus: # set it self._timekprClientIndicator.setTrayIconEnabled(iconStatus) # --------------- worker methods (from dbus) --------------- # def receiveTimeLeft(self, pPriority, pTimeInformation): """Receive the signal and process the data to user""" # check which options are available timeLeft = (pTimeInformation[cons.TK_CTRL_LEFT] if cons.TK_CTRL_LEFT in pTimeInformation else 0) playTimeLeft = (pTimeInformation[cons.TK_CTRL_PTLPD] if cons.TK_CTRL_PTLSTC in pTimeInformation and cons.TK_CTRL_PTLPD in pTimeInformation and cons.TK_CTRL_PTTLO in pTimeInformation else None) isTimeNotLimited = (pTimeInformation[cons.TK_CTRL_TNL] if cons.TK_CTRL_TNL in pTimeInformation else 0) log.log(cons.TK_LOG_LEVEL_DEBUG, "receive timeleft, prio: %s, tl: %i, ptl: %s, nolim: %i" % (pPriority, timeLeft, str(playTimeLeft), isTimeNotLimited)) # process show / hide icon self.processShowClientIcon(pTimeInformation) # process time left self._timekprClientIndicator.setTimeLeft(pPriority, cons.TK_DATETIME_START + timedelta(seconds=timeLeft), isTimeNotLimited, cons.TK_DATETIME_START + timedelta(seconds=playTimeLeft) if playTimeLeft is not None else playTimeLeft) # renew limits in GUI self._timekprClientIndicator.renewUserLimits(pTimeInformation) # process PlayTime notifications as well self._timekprClientIndicator.processPlayTimeNotifications(pTimeInformation) def receiveTimeLimits(self, pPriority, pTimeLimits): """Receive the signal and process the data to user""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive timelimits: %s" % (pPriority)) # renew limits in GUI self._timekprClientIndicator.renewLimitConfiguration(pTimeLimits) # --------------- notification methods (from dbus) --------------- # def receiveTimeLeftNotification(self, pPriority, pTimeLeftTotal, pTimeLeftToday, pTimeLimitToday): """Receive time left and update GUI""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive tl notif: %s, %i" % (pPriority, pTimeLeftTotal)) # if notifications are turned on if (self._timekprClientConfig.getClientShowAllNotifications() and self._timekprClientIndicator.getTrayIconEnabled()) or pPriority == cons.TK_PRIO_CRITICAL: # process time left notification self._timekprClientIndicator.notifyUser(cons.TK_MSG_CODE_TIMELEFT, None, pPriority, cons.TK_DATETIME_START + timedelta(seconds=pTimeLeftTotal)) def receiveTimeCriticalNotification(self, pFinalNotificationType, pPriority, pSecondsLeft): """Receive critical time left and show that to user""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive crit notif: %s, %i" % (pFinalNotificationType, pSecondsLeft)) # process time left (this shows in any case) self._timekprClientIndicator.notifyUser(cons.TK_MSG_CODE_TIMECRITICAL, pFinalNotificationType, pPriority, cons.TK_DATETIME_START + timedelta(seconds=pSecondsLeft)) def receiveTimeNoLimitNotification(self, pPriority): """Receive no limit notificaton and show that to user""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive nl notif") # if notifications are turned on if self._timekprClientConfig.getClientShowAllNotifications() and self._timekprClientIndicator.getTrayIconEnabled(): # process time left self._timekprClientIndicator.notifyUser(cons.TK_MSG_CODE_TIMEUNLIMITED, None, pPriority) def receiveTimeLeftChangedNotification(self, pPriority): """Receive time left notification and show it to user""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive time left changed notif") # if notifications are turned on if self._timekprClientConfig.getClientShowLimitNotifications() and self._timekprClientIndicator.getTrayIconEnabled(): # limits have changed and applied self._timekprClientIndicator.notifyUser(cons.TK_MSG_CODE_TIMELEFTCHANGED, None, pPriority) def receiveTimeConfigurationChangedNotification(self, pPriority): """Receive notification about config change and show it to user""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive config changed notif") # if notifications are turned on if self._timekprClientConfig.getClientShowLimitNotifications() and self._timekprClientIndicator.getTrayIconEnabled(): # configuration has changed, new limits may have been applied self._timekprClientIndicator.notifyUser(cons.TK_MSG_CODE_TIMECONFIGCHANGED, None, pPriority) timekpr-next/client/interface/dbus/notifications.py000644 001750 001750 00000076200 15122253261 024575 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import import dbus import os from gi.repository import GLib from dbus.mainloop.glib import DBusGMainLoop from datetime import datetime # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.common.utils import misc from timekpr.client.interface.speech.espeak import timekprSpeech from timekpr.common.constants import messages as msg # default loop DBusGMainLoop(set_as_default=True) class timekprNotifications(object): """Main class for supporting indicator notifications, connect to request methods for timekpr and connections to other DBUS modules""" def __init__(self, pUserName, pTimekprClientConfig): """Initialize notifications""" log.log(cons.TK_LOG_LEVEL_INFO, "start init timekpr notifications") # uname self._userName = pUserName self._timekprClientConfig = pTimekprClientConfig # notification (to replace itself in case they are incoming fast) self._lastNotifId = 0 self._lastNotifDT = datetime.now() self._lastPTNotifId = 0 self._lastPTNotifDT = datetime.now() # session bus self._userSessionBus = dbus.SessionBus() # timekpr bus self._timekprBus = (dbus.SessionBus() if (cons.TK_DEV_ACTIVE and cons.TK_DEV_BUS == "ses") else dbus.SystemBus()) # DBUS client connections # connection types self.CL_CONN_TK = "timekpr" self.CL_CONN_NOTIF = "notifications" self.CL_CONN_SCR = "screensaver" # constants self.CL_IF = "primary interface" self.CL_IFA = "attributes interface" self.CL_SI = "signal" self.CL_CNT = "retry_count" self.CL_DEL = "delay_times" # object collection for DBUS connections self._dbusConnections = { self.CL_CONN_TK: {self.CL_IF: None, self.CL_IFA: None, self.CL_SI: None, self.CL_CNT: 999, self.CL_DEL: 0}, self.CL_CONN_NOTIF: {self.CL_IF: None, self.CL_IFA: None, self.CL_SI: None, self.CL_CNT: 99, self.CL_DEL: 0}, self.CL_CONN_SCR: {self.CL_IF: None, self.CL_IFA: None, self.CL_SI: None, self.CL_CNT: 5, self.CL_DEL: 2} } # WORKAROUNDS section start # adjust even bigger delay with unity + 18.04 + HDD if "UNITY" in os.getenv("XDG_CURRENT_DESKTOP", "N/A").upper(): # more delay, race condition with screensaver? self._dbusConnections[self.CL_CONN_SCR][self.CL_DEL] += cons.TK_POLLTIME - 1 # WORKAROUNDS section end # speech init self._timekprSpeechManager = None log.log(cons.TK_LOG_LEVEL_INFO, "finish init timekpr notifications") def initClientConnections(self): """Init dbus (connect to session bus for notification)""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start initClientConnections") # speech if self._timekprSpeechManager is None: # initialize self._timekprSpeechManager = timekprSpeech() # check if supported, if it is, initialize if self._timekprSpeechManager.isSpeechSupported(): # initialize if supported self._timekprSpeechManager.initSpeech() # only if notifications are not ok if self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF] is None and self._dbusConnections[self.CL_CONN_NOTIF][self.CL_CNT] > 0 and not self._dbusConnections[self.CL_CONN_NOTIF][self.CL_DEL] > 0: # define inames (I hope "revolutionary company" won't sue me for using i in front of variable names) iNames = ["org.freedesktop.Notifications"] iPaths = ["/org/freedesktop/Notifications"] # go through inames for idx in range(0, len(iNames)): # go through all possible interfaces try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # getting interface self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF] = dbus.Interface(self._userSessionBus.get_object(iNames[idx], iPaths[idx]), iNames[idx]) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=iNames[idx]) # first sucess is enough log.log(cons.TK_LOG_LEVEL_DEBUG, "CONNECTED to DBUS %s interface" % (self.CL_CONN_NOTIF)) # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: connected to notification service through \"%s\"" % (iNames[idx])) # check capabilities if "sound" not in self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF].GetCapabilities(): # notifications w/ sound are not available self._timekprClientConfig.setIsNotificationSoundSupported(False) # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: notification sound is not supported") # add a connection to signal self._dbusConnections[self.CL_CONN_NOTIF][self.CL_SI] = self._userSessionBus.add_signal_receiver( path = iPaths[idx], handler_function = self.receiveNotificationClosed, dbus_interface = iNames[idx], signal_name = "NotificationClosed") # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: connected to notification closing callback service through \"%s\"" % (iNames[idx])) # finish break except Exception as dbusEx: self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF] = None # logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: initiating dbus connection (\"%s.%s\", %s, %s), error: %s" % (__name__, self.initClientConnections.__name__, self.CL_CONN_NOTIF, iNames[idx], str(dbusEx))) # only if screensaver is not ok if self._dbusConnections[self.CL_CONN_SCR][self.CL_IF] is None and self._dbusConnections[self.CL_CONN_SCR][self.CL_CNT] > 0 and not self._dbusConnections[self.CL_CONN_SCR][self.CL_DEL] > 0: # define inames (I hope "revolutionary company" won't sue me for using i in front of variable names :) ) iNames = [] iPaths = [] chosenIdx = None currentDE = None isGnomeScrUsed = False isFDScrUsed = False # THIS WHOLE SECTION IS WORKAROUNDS FOR MULTIPLE VARIETIES OF SCREENSAVER IMPLEMENTATIONS - START # they must be compatible to freedekstop standard, e.g. have corect naming and at least GetActive method as well as ActiveChanged signal # get current DE currentDE = os.getenv("XDG_CURRENT_DESKTOP", "N/A") # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: current desktop environment \"%s\"" % (currentDE)) # transform currentDE = currentDE.lower().replace("x-", "") # workarounds per desktop for rIdx in range(0, len(cons.TK_SCR_XDGCD_OVERRIDE)): # check desktops if cons.TK_SCR_XDGCD_OVERRIDE[rIdx][0] in currentDE: log.log(cons.TK_LOG_LEVEL_INFO, "INFO: using \"%s\" screensaver dbus interface as a workaround" % (cons.TK_SCR_XDGCD_OVERRIDE[rIdx][1])) # use gnome stuff iNames.extend(["org.%s.ScreenSaver" % (cons.TK_SCR_XDGCD_OVERRIDE[rIdx][1])]) iPaths.extend(["/org/%s/ScreenSaver" % (cons.TK_SCR_XDGCD_OVERRIDE[rIdx][1])]) # check if gnome screensaver is used (can it be used as failover?) isGnomeScrUsed = ((cons.TK_SCR_XDGCD_OVERRIDE[rIdx][1] == "gnome") if not isGnomeScrUsed else isGnomeScrUsed) # check if freedesktop screensaver is used (can it be used as failover?) isFDScrUsed = ((cons.TK_SCR_XDGCD_OVERRIDE[rIdx][1] == "freedesktop") if not isFDScrUsed else isFDScrUsed) # first match is enough break # in case overrides were found, do not try anything else if len(iNames) < 1: # try parsing DE to get the most accurate DE name (there are desktop names, like, KDE, X-Cinnamon, XFCE and ubuntu:GNOME, ...) if ":" in currentDE: # get desktop so we check for second option after ":" currentDE = currentDE.split(":")[1] # add to the list if currentDE is not None and currentDE != "": log.log(cons.TK_LOG_LEVEL_INFO, "INFO: trying to use \"%s\" as screensaver dbus object" % (currentDE)) # add iNames.extend(["org.%s.ScreenSaver" % (currentDE)]) iPaths.extend(["/org/%s/ScreenSaver" % (currentDE)]) # check if gnome screensaver is used (can it be used as failover?) isGnomeScrUsed = ((currentDE == "gnome") if not isGnomeScrUsed else isGnomeScrUsed) # add gnome (most popular) if not isGnomeScrUsed: # add default section iNames.extend(["org.gnome.ScreenSaver"]) iPaths.extend(["/org/gnome/ScreenSaver"]) # add freedesktop (almost no one uses this, except KDE and maybe some other, the rest return "method not implemented" error) if not isFDScrUsed: # add default section with the actual standard iNames.extend(["org.freedesktop.ScreenSaver"]) iPaths.extend(["/org/freedesktop/ScreenSaver"]) # THIS WHOLE SECTION IS WORKAROUNDS FOR MULTIPLE VARIETIES OF SCREENSAVER IMPLEMENTATIONS - END # go through inames for idx in range(0, len(iNames)): # go through all possible interfaces try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # getting interface self._dbusConnections[self.CL_CONN_SCR][self.CL_IF] = dbus.Interface(self._userSessionBus.get_object(iNames[idx], iPaths[idx]), iNames[idx]) # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: connected to screensaver service through \"%s\"" % (iNames[idx])) # verification (Gnome has not implemented freedesktop methods, we need to verify this actually works) self._dbusConnections[self.CL_CONN_SCR][self.CL_IF].GetActive() # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=iNames[idx]) # first sucess is enough chosenIdx = idx # finish break except Exception as dbusEx: del self._dbusConnections[self.CL_CONN_SCR][self.CL_IF] self._dbusConnections[self.CL_CONN_SCR][self.CL_IF] = None # logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: initiating dbus connection (\"%s.%s\", %s, %s), error: %s" % (__name__, self.initClientConnections.__name__, self.CL_CONN_SCR, iNames[idx], str(dbusEx))) # connection successful if self._dbusConnections[self.CL_CONN_SCR][self.CL_IF] is not None: # log log.log(cons.TK_LOG_LEVEL_DEBUG, "CONNECTED to DBUS %s (%s) interface" % (self.CL_CONN_SCR, iNames[chosenIdx])) # add a connection to signal self._dbusConnections[self.CL_CONN_SCR][self.CL_SI] = self._userSessionBus.add_signal_receiver( path = iPaths[chosenIdx], handler_function = self.receiveScreenSaverActivityChange, dbus_interface = iNames[chosenIdx], signal_name = "ActiveChanged") # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: connected to screensaver active callback signal through \"%s\"" % (iNames[chosenIdx])) # only if screensaver is not ok if self._dbusConnections[self.CL_CONN_TK][self.CL_IF] is None and self._dbusConnections[self.CL_CONN_TK][self.CL_CNT] > 0 and not self._dbusConnections[self.CL_CONN_TK][self.CL_DEL] > 0: try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # getting interface self._dbusConnections[self.CL_CONN_TK][self.CL_IF] = dbus.Interface(self._timekprBus.get_object(cons.TK_DBUS_BUS_NAME, cons.TK_DBUS_SERVER_PATH), cons.TK_DBUS_USER_LIMITS_INTERFACE) # log log.log(cons.TK_LOG_LEVEL_DEBUG, "CONNECTED to %s DBUS %s interface" % (self.CL_CONN_TK, self.CL_IF)) # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: connected to timekpr limits service through \"%s\"" % (cons.TK_DBUS_USER_LIMITS_INTERFACE)) # getting interface self._dbusConnections[self.CL_CONN_TK][self.CL_IFA] = dbus.Interface(self._timekprBus.get_object(cons.TK_DBUS_BUS_NAME, cons.TK_DBUS_SERVER_PATH), cons.TK_DBUS_USER_SESSION_ATTRIBUTE_INTERFACE) # log log.log(cons.TK_LOG_LEVEL_DEBUG, "CONNECTED to %s DBUS %s interface" % (self.CL_CONN_TK, self.CL_IFA)) # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: connected to timekpr session attributes service through \"%s\"" % (cons.TK_DBUS_USER_SESSION_ATTRIBUTE_INTERFACE)) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_USER_LIMITS_INTERFACE) except Exception as dbusEx: # reset self._dbusConnections[self.CL_CONN_TK][self.CL_IF] = None self._dbusConnections[self.CL_CONN_TK][self.CL_IFA] = None # logging log.log(cons.TK_LOG_LEVEL_INFO, "WARNING: initiating dbus connection (\"%s.%s\", %s, %s), error: %s" % (__name__, self.initClientConnections.__name__, self.CL_CONN_TK, cons.TK_DBUS_BUS_NAME, str(dbusEx))) # retry? doRetry = False # all variants for rConn in (self.CL_CONN_TK, self.CL_CONN_NOTIF, self.CL_CONN_SCR): # if either of this fails, we keep trying to connect if self._dbusConnections[rConn][self.CL_IF] is None: # max retries if self._dbusConnections[rConn][self.CL_CNT] > 0: # only if delay is ended if not self._dbusConnections[rConn][self.CL_DEL] > 0: # decrease retries self._dbusConnections[rConn][self.CL_CNT] -= 1 # continue if more retries available if self._dbusConnections[rConn][self.CL_CNT] > 0: # retry doRetry = True # do not take into account delay if self._dbusConnections[rConn][self.CL_DEL] > 0: # connection delayed log.log(cons.TK_LOG_LEVEL_INFO, "INFO: dbus connection to %s delayed for %d more times" % (rConn, self._dbusConnections[rConn][self.CL_DEL])) # decrease delay self._dbusConnections[rConn][self.CL_DEL] -= 1 else: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: failed to connect to %s dbus, trying again..." % (rConn)) else: # connection aborted log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: dbus connection to %s failed, some functionality will not be available" % (rConn)) # retry if doRetry: # if either of this fails, we keep trying to connect GLib.timeout_add_seconds(cons.TK_POLLTIME, self.initClientConnections) # prepare notifications in case smth is not ok else: # let's inform user in case screensaver is not connected if self._dbusConnections[self.CL_CONN_SCR][self.CL_IF] is None and self._timekprClientConfig.getClientShowAllNotifications(): # prepare notification self.notifyUser(cons.TK_MSG_CODE_FEATURE_SCR_NOT_AVAILABLE_ERROR, None, cons.TK_PRIO_WARNING, pAdditionalMessage=self.CL_CONN_SCR) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish initClientConnections") # finish return False def isTimekprConnected(self): """Return status of timekpr connection (nothing else, just timekpr itself)""" return self._dbusConnections[self.CL_CONN_TK][self.CL_IF] is not None def _prepareNotification(self, pMsgCode, pMsgType, pPriority, pTimeLeft=None, pAdditionalMessage=None): """Prepare the message to be sent to dbus notifications""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start prepareNotification") # determine icon to use timekprIcon = cons.TK_PRIO_CONF[cons.getNotificationPrioriy(pPriority)][cons.TK_ICON_NOTIF] timekprPrio = cons.TK_PRIO_CONF[cons.getNotificationPrioriy(pPriority)][cons.TK_DBUS_PRIO] # calculate hours in advance if pTimeLeft is not None: timeLeftHours = (pTimeLeft - cons.TK_DATETIME_START).days * 24 + pTimeLeft.hour # determine the message to pass if pMsgCode == cons.TK_MSG_CODE_TIMEUNLIMITED: # no limit msgStr = msg.getTranslation("TK_MSG_NOTIFICATION_NOT_LIMITED") elif pMsgCode == cons.TK_MSG_CODE_TIMELEFT: # msg msgStr = " ".join((msg.getTranslation("TK_MSG_NOTIFICATION_TIME_LEFT_1", timeLeftHours), msg.getTranslation("TK_MSG_NOTIFICATION_TIME_LEFT_2", pTimeLeft.minute), msg.getTranslation("TK_MSG_NOTIFICATION_PLAYTIME_LEFT_3" if pMsgType == "PlayTime" else "TK_MSG_NOTIFICATION_TIME_LEFT_3", pTimeLeft.second))) elif pMsgCode == cons.TK_MSG_CODE_TIMECRITICAL: # depending on type if pMsgType == cons.TK_CTRL_RES_L: msgCode = "TK_MSG_NOTIFICATION_TIME_IS_UP_1L" elif pMsgType in (cons.TK_CTRL_RES_S, cons.TK_CTRL_RES_W): msgCode = "TK_MSG_NOTIFICATION_TIME_IS_UP_1S" elif pMsgType == cons.TK_CTRL_RES_D: msgCode = "TK_MSG_NOTIFICATION_TIME_IS_UP_1D" else: msgCode = "TK_MSG_NOTIFICATION_TIME_IS_UP_1T" # msg msgStr = " ".join((msg.getTranslation(msgCode), msg.getTranslation("TK_MSG_NOTIFICATION_TIME_IS_UP_2", pTimeLeft.second))) elif pMsgCode == cons.TK_MSG_CODE_TIMELEFTCHANGED: # msg msgStr = msg.getTranslation("TK_MSG_NOTIFICATION_ALLOWANCE_CHANGED") elif pMsgCode == cons.TK_MSG_CODE_TIMECONFIGCHANGED: # msg msgStr = msg.getTranslation("TK_MSG_NOTIFICATION_CONFIGURATION_CHANGED") elif pMsgCode == cons.TK_MSG_CODE_REMOTE_COMMUNICATION_ERROR: # msg msgStr = msg.getTranslation("TK_MSG_NOTIFICATION_CANNOT_CONNECT") % (pAdditionalMessage) elif pMsgCode == cons.TK_MSG_CODE_REMOTE_INVOCATION_ERROR: # msg msgStr = msg.getTranslation("TK_MSG_NOTIFICATION_CANNOT_COMMUNICATE") % (pAdditionalMessage) elif pMsgCode == cons.TK_MSG_CODE_ICON_INIT_ERROR: # msg msgStr = msg.getTranslation("TK_MSG_NOTIFICATION_CANNOT_INIT_ICON") % (pAdditionalMessage) elif pMsgCode == cons.TK_MSG_CODE_FEATURE_SCR_NOT_AVAILABLE_ERROR: # msg msgStr = msg.getTranslation("TK_MSG_NOTIFICATION_SCR_FEATURE_NOT_AVAILABLE") % (pAdditionalMessage) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish prepareNotification") # pass this back return timekprIcon, msgStr, timekprPrio def notifyUser(self, pMsgCode, pMsgType, pPriority, pTimeLeft=None, pAdditionalMessage=None): """Notify the user.""" # if we have dbus connection, let"s do so if self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF] is None: # init self.initClientConnections() # if not then return if not self.isTimekprConnected(): return # can we notify user if self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF] is not None: # prepare notification timekprIcon, msgStr, timekprPrio = self._prepareNotification(pMsgCode, pMsgType, pPriority, pTimeLeft, pAdditionalMessage) # defaults hints = {"urgency": timekprPrio} # notification params based on criticality if pPriority in (cons.TK_PRIO_CRITICAL, cons.TK_PRIO_IMPORTANT): # timeout notificationTimeout = self._timekprClientConfig.getClientNotificationTimeoutCritical() # sound if self._timekprClientConfig.getIsNotificationSoundSupported() and self._timekprClientConfig.getClientUseNotificationSound(): # add sound hint if cons.TK_CL_NOTIF_SND_TYPE == "sound-name": hints["sound-name"] = cons.TK_CL_NOTIF_SND_NAME_IMPORTANT else: hints["sound-file"] = cons.TK_CL_NOTIF_SND_FILE_CRITICAL else: # timeout notificationTimeout = self._timekprClientConfig.getClientNotificationTimeout() # sound if self._timekprClientConfig.getIsNotificationSoundSupported() and self._timekprClientConfig.getClientUseNotificationSound(): # add sound hint if cons.TK_CL_NOTIF_SND_TYPE == "sound-name": hints["sound-name"] = cons.TK_CL_NOTIF_SND_NAME_WARNING else: hints["sound-file"] = cons.TK_CL_NOTIF_SND_FILE_WARN # calculate last time notification is shown (if this is too recent - replace, otherwise add new notification) if pMsgType == "PlayTime" and self._lastPTNotifId != 0 and abs((datetime.now() - self._lastPTNotifDT).total_seconds()) >= (notificationTimeout if notificationTimeout > 0 else abs((datetime.now() - self._lastPTNotifDT).total_seconds()) + 1): self._lastPTNotifId = 0 elif pMsgType != "PlayTime" and self._lastNotifId != 0 and abs((datetime.now() - self._lastNotifDT).total_seconds()) >= (notificationTimeout if notificationTimeout > 0 else abs((datetime.now() - self._lastNotifDT).total_seconds()) + 1): self._lastNotifId = 0 # calculate notification values notificationTimeout = min(cons.TK_CL_NOTIF_MAX, max(0, notificationTimeout)) * 1000 # notification value of 0 means "forever" actions = ["OK", "OK"] if notificationTimeout == 0 else [] log.log(cons.TK_LOG_LEVEL_DEBUG, "preshow: %s, %s, %i" % (msg.getTranslation("TK_MSG_NOTIFICATION_PLAYTIME_TITLE" if pMsgType == "PlayTime" else "TK_MSG_NOTIFICATION_TITLE"), msgStr, notificationTimeout)) # notify through dbus try: # before notifId = 0 # call dbus method notifId = self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF].Notify( "Timekpr" ,self._lastPTNotifId if pMsgType == "PlayTime" else self._lastNotifId ,timekprIcon ,msg.getTranslation("TK_MSG_NOTIFICATION_PLAYTIME_TITLE" if pMsgType == "PlayTime" else "TK_MSG_NOTIFICATION_TITLE") ,msgStr ,actions ,hints ,notificationTimeout ) except Exception as dbusEx: # do not need to reconnect when too many notifs if "ExcessNotificationGeneration" not in str(dbusEx): # we cannot send notif through dbus self._dbusConnections[self.CL_CONN_NOTIF][self.CL_IF] = None # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR (DBUS): \"%s\" in \"%s.%s\"" % (str(dbusEx), __name__, self.notifyUser.__name__)) else: # logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING (DBUS): \"%s\" in \"%s.%s\"" % (str(dbusEx), __name__, self.notifyUser.__name__)) # save notification ID (only if message is not about PlayTime, otherwise it may dismiss standard time or vice versa) if pMsgType == "PlayTime": self._lastPTNotifId = notifId self._lastPTNotifDT = datetime.now() else: self._lastNotifId = notifId self._lastNotifDT = datetime.now() # user wants to hear things if self._timekprClientConfig.getIsNotificationSpeechSupported() and self._timekprClientConfig.getClientUseSpeechNotifications(): # say that out loud self._timekprSpeechManager.saySmth(msgStr) # --------------- admininstration / verification methods --------------- # def verifySessionAttributes(self, pWhat, pKey): """Receive the signal and process the data""" log.log(cons.TK_LOG_LEVEL_DEBUG, "prepare verification of attributes for server: %s, %s" % (pWhat, "key")) # def value = None # for screensaver status if pWhat == cons.TK_CTRL_SCR_N: # value value = str(bool(self._dbusConnections[self.CL_CONN_SCR][self.CL_IF].GetActive())) # resend stuff to server self.processUserSessionAttributes(pWhat, pKey, value) # --------------- admininstration / verification signals --------------- # def receiveScreenSaverActivityChange(self, pIsActive): """Receive the signal and process the data""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive screensaver activity changes: %s" % (str(bool(pIsActive)))) # request to server for verification self.processUserSessionAttributes(cons.TK_CTRL_SCR_N) def receiveNotificationClosed(self, pNotifId, pReason): """Receive the signal and process the data""" log.log(cons.TK_LOG_LEVEL_DEBUG, "receive notification closed: %i, %i" % (pNotifId, pReason)) # check and reset which notification has changed if self._lastNotifId == pNotifId: self._lastNotifId = 0 elif self._lastPTNotifId == pNotifId: self._lastPTNotifId = 0 # --------------- request methods to timekpr --------------- # def requestTimeLeft(self): """Request time left from server""" # if we have dbus connection, let"s do so if self._dbusConnections[self.CL_CONN_TK][self.CL_IF] is None: # init self.initClientConnections() # if we have end-point if self._dbusConnections[self.CL_CONN_TK][self.CL_IF] is not None: log.log(cons.TK_LOG_LEVEL_INFO, "requesting timeleft") # notify through dbus try: # call dbus method result, message = self._dbusConnections[self.CL_CONN_TK][self.CL_IF].requestTimeLeft(self._userName) # check call result if result != 0: # show message to user as well self.notifyUser(cons.TK_MSG_CODE_REMOTE_INVOCATION_ERROR, None, cons.TK_PRIO_CRITICAL, pAdditionalMessage=message) except Exception as dbusEx: # we cannot send notif through dbus self._dbusConnections[self.CL_CONN_TK][self.CL_IF] = None # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR (DBUS): \"%s\" in \"%s.%s\"" % (str(dbusEx), __name__, self.requestTimeLeft.__name__)) # show message to user as well self.notifyUser(cons.TK_MSG_CODE_REMOTE_COMMUNICATION_ERROR, None, cons.TK_PRIO_CRITICAL, pAdditionalMessage=msg.getTranslation("TK_MSG_NOTIFICATION_CONNECTION_ERROR")) def requestTimeLimits(self): """Request time limits from server""" # if we have dbus connection, let"s do so if self._dbusConnections[self.CL_CONN_TK][self.CL_IF] is None: # init self.initClientConnections() # if we have end-point if self._dbusConnections[self.CL_CONN_TK][self.CL_IF] is not None: log.log(cons.TK_LOG_LEVEL_INFO, "requesting timelimits") # notify through dbus try: # call dbus method result, message = self._dbusConnections[self.CL_CONN_TK][self.CL_IF].requestTimeLimits(self._userName) # check call result if result != 0: # show message to user as well self.notifyUser(cons.TK_MSG_CODE_REMOTE_INVOCATION_ERROR, None, cons.TK_PRIO_CRITICAL, pAdditionalMessage=message) except Exception as dbusEx: # we cannot send notif through dbus self._dbusConnections[self.CL_CONN_TK][self.CL_IF] = None # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR (DBUS): \"%s\" in \"%s.%s\"" % (str(dbusEx), __name__, self.requestTimeLimits.__name__)) # show message to user as well self.notifyUser(cons.TK_MSG_CODE_REMOTE_COMMUNICATION_ERROR, None, cons.TK_PRIO_CRITICAL, pAdditionalMessage=msg.getTranslation("TK_MSG_NOTIFICATION_CONNECTION_ERROR")) def processUserSessionAttributes(self, pWhat, pKey=None, pValue=None): """Process user session attributes from server""" # if we have dbus connection, let"s do so if self._dbusConnections[self.CL_CONN_TK][self.CL_IFA] is None: # init self.initClientConnections() # if we have end-point if self._dbusConnections[self.CL_CONN_TK][self.CL_IFA] is not None: log.log(cons.TK_LOG_LEVEL_INFO, "%s session attributes" % ("requesting" if pKey is None else "verifying")) # notify through dbus try: # call dbus method result, message = self._dbusConnections[self.CL_CONN_TK][self.CL_IFA].processUserSessionAttributes( self._userName, dbus.String(pWhat if pWhat is not None else ""), dbus.String(pKey if pKey is not None else ""), dbus.String(pValue if pValue is not None else "")) # check call result if result != 0: # show message to user as well self.notifyUser(cons.TK_MSG_CODE_REMOTE_INVOCATION_ERROR, None, cons.TK_PRIO_CRITICAL, None, pAdditionalMessage=message) except Exception as dbusEx: # we cannot send notif through dbus self._dbusConnections[self.CL_CONN_TK][self.CL_IF] = None self._dbusConnections[self.CL_CONN_TK][self.CL_IFA] = None # logging log.log(cons.TK_LOG_LEVEL_INFO, "ERROR (DBUS): \"%s\" in \"%s.%s\"" % (str(dbusEx), __name__, self.processUserSessionAttributes.__name__)) # show message to user as well self.notifyUser(cons.TK_MSG_CODE_REMOTE_COMMUNICATION_ERROR, None, cons.TK_PRIO_CRITICAL, pAdditionalMessage=msg.getTranslation("TK_MSG_NOTIFICATION_CONNECTION_ERROR")) timekpr-next/client/interface/dbus/__init__.py000664 001750 001750 00000000000 13476006650 023456 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/client/interface/dbus/administration.py000644 001750 001750 00000110362 15122253261 024747 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import import dbus from gi.repository import GLib from dbus.mainloop.glib import DBusGMainLoop # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.common.utils import misc from timekpr.common.constants import messages as msg # default loop DBusGMainLoop(set_as_default=True) class timekprAdminConnector(object): """Main class for supporting indicator notifications""" def __init__(self): """Initialize stuff for connecting to timekpr server""" # times self._retryCountLeft = 10 self._initFailed = False self._isCLI = False # dbus (timekpr) self._timekprBus = (dbus.SessionBus() if (cons.TK_DEV_ACTIVE and cons.TK_DEV_BUS == "ses") else dbus.SystemBus()) self._timekprObject = None self._timekprUserAdminDbusInterface = None self._timekprAdminDbusInterface = None def initTimekprConnection(self, pTryOnce, pRescheduleConnection=False, pCLI=None): """Init dbus (connect to timekpr for info)""" # def if pCLI is not None: self._isCLI = pCLI # reschedule if pRescheduleConnection: # rescheduling means dropping existing state and try again self._timekprObject = None self._timekprUserAdminDbusInterface = None self._timekprAdminDbusInterface = None self._retryCountLeft = 10 self._initFailed = False # only if notifications are ok if self._timekprObject is None: try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # timekpr connection stuff self._timekprObject = self._timekprBus.get_object(cons.TK_DBUS_BUS_NAME, cons.TK_DBUS_SERVER_PATH) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pPrintToConsole=True, pDbusIFName=cons.TK_DBUS_BUS_NAME) except Exception: self._timekprObject = None # logging lMsg = "FAILED to obtain connection to timekpr. Please check that timekpr daemon is working and you have sufficient permissions to access it (either superuser or timekpr group)" log.log(cons.TK_LOG_LEVEL_ERR, lMsg) # console too, if CLI if self._isCLI: log.consoleOut(lMsg) # only if notifications are ok if self._timekprObject is not None and self._timekprUserAdminDbusInterface is None: try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # getting interface self._timekprUserAdminDbusInterface = dbus.Interface(self._timekprObject, cons.TK_DBUS_USER_ADMIN_INTERFACE) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pPrintToConsole=True, pDbusIFName=cons.TK_DBUS_USER_ADMIN_INTERFACE) except Exception: self._timekprUserAdminDbusInterface = None # logging lMsg = "FAILED to connect to timekpr user admin interface. Please check that timekpr daemon is working and you have sufficient permissions to access it (either superuser or timekpr group)" log.log(cons.TK_LOG_LEVEL_ERR, lMsg) # console too, if CLI if self._isCLI: log.consoleOut(lMsg) # only if notifications are ok if self._timekprObject is not None and self._timekprAdminDbusInterface is None: try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # getting interface self._timekprAdminDbusInterface = dbus.Interface(self._timekprObject, cons.TK_DBUS_ADMIN_INTERFACE) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pPrintToConsole=True, pDbusIFName=cons.TK_DBUS_ADMIN_INTERFACE) except Exception: self._timekprAdminDbusInterface = None # logging lMsg = "FAILED to connect to timekpr user admin interface. Please check that timekpr daemon is working and you have sufficient permissions to access it (either superuser or timekpr group)" log.log(cons.TK_LOG_LEVEL_ERR, lMsg) # console too, if CLI if self._isCLI: log.consoleOut(lMsg) # if either of this fails, we keep trying to connect if self._timekprUserAdminDbusInterface is None or self._timekprAdminDbusInterface is None: if self._retryCountLeft > 0 and not pTryOnce: self._retryCountLeft -= 1 lMsg = "connection failed, %i attempts left, will retry in %i seconds" % (self._retryCountLeft, cons.TK_POLLTIME) log.log(cons.TK_LOG_LEVEL_ERR, lMsg) # console too, if CLI if self._isCLI: log.consoleOut(lMsg) # if either of this fails, we keep trying to connect GLib.timeout_add_seconds(cons.TK_POLLTIME, self.initTimekprConnection, pTryOnce) else: # failed self._initFailed = True # --------------- helper methods --------------- # def isConnected(self): """Return status of connection to DBUS""" # if either of this fails, we keep trying to connect return not (self._timekprUserAdminDbusInterface is None or self._timekprAdminDbusInterface is None), not self._initFailed def formatException(self, pExceptionStr, pFPath, pFName): """Format exception and pass it back""" # check for permission error if "org.freedesktop.DBus.Error.AccessDenied" in pExceptionStr: result = -1 message = msg.getTranslation("TK_MSG_DBUS_COMMUNICATION_COMMAND_FAILED") else: result = -1 message = msg.getTranslation("TK_MSG_UNEXPECTED_ERROR") % (("\"%s\" in \"%s.%s\"") % (pExceptionStr, pFPath, pFName)) # log error log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: \"%s\" in \"%s.%s\"" % (pExceptionStr, pFPath, pFName)) # result return result, message def initReturnCodes(self, pInit, pCall): """Initialize the return codes for calls""" return -2 if pInit else -1 if pCall else 0, msg.getTranslation("TK_MSG_STATUS_INTERFACE_NOTREADY") if pInit else msg.getTranslation("TK_MSG_DBUS_COMMUNICATION_COMMAND_NOT_ACCEPTED") if pCall else "" # --------------- user configuration info population methods --------------- # def getUserList(self): """Get user list from server""" # defaults result, message = self.initReturnCodes(pInit=True, pCall=False) userList = [] # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message, userList = self._timekprUserAdminDbusInterface.getUserList() except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.getUserList.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message, userList def getUserConfigurationAndInformation(self, pUserName, pInfoLvl): """Get user configuration from server""" # defaults result, message = self.initReturnCodes(pInit=True, pCall=False) userConfig = {} # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message, userConfig = self._timekprUserAdminDbusInterface.getUserInformation(pUserName, pInfoLvl) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.getUserConfigurationAndInformation.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message, userConfig # --------------- user configuration set methods --------------- # def setAllowedDays(self, pUserName, pDayList): """Set user allowed days""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setAllowedDays(pUserName, pDayList) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setAllowedDays.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setAllowedHours(self, pUserName, pDayNumber, pHourList): """Set user allowed days""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setAllowedHours(pUserName, pDayNumber, pHourList) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setAllowedHours.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimeLimitForDays(self, pUserName, pDayLimits): """Set user allowed limit for days""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setTimeLimitForDays(pUserName, pDayLimits) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimeLimitForDays.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimeLimitForWeek(self, pUserName, pTimeLimitWeek): """Set user allowed limit for week""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setTimeLimitForWeek(pUserName, pTimeLimitWeek) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimeLimitForWeek.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimeLimitForMonth(self, pUserName, pTimeLimitMonth): """Set user allowed limit for month""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setTimeLimitForMonth(pUserName, pTimeLimitMonth) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimeLimitForMonth.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTrackInactive(self, pUserName, pTrackInactive): """Set user allowed days""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setTrackInactive(pUserName, pTrackInactive) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.getUserList.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setHideTrayIcon(self, pUserName, pHideTrayIcon): """Set user allowed days""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setHideTrayIcon(pUserName, pHideTrayIcon) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setHideTrayIcon.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setLockoutType(self, pUserName, pLockoutType, pWakeFrom, pWakeTo): """Set user restriction / lockout type""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setLockoutType(pUserName, pLockoutType, pWakeFrom, pWakeTo) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setLockoutType.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimeLeft(self, pUserName, pOperation, pTimeLeft): """Set user time left""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setTimeLeft(pUserName, pOperation, pTimeLeft) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimeLeft.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message # --------------- PlayTime user configuration info set methods --------------- # def setPlayTimeEnabled(self, pUserName, pPlayTimeEnabled): """Set PlayTime enabled flag for user""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setPlayTimeEnabled(pUserName, pPlayTimeEnabled) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setPlayTimeEnabled.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setPlayTimeLimitOverride(self, pUserName, pPlayTimeLimitOverride): """Set PlayTime override flag for user""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setPlayTimeLimitOverride(pUserName, pPlayTimeLimitOverride) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setPlayTimeLimitOverride.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setPlayTimeUnaccountedIntervalsEnabled(self, pUserName, pPlayTimeUnaccountedIntervalsEnabled): """Set PlayTime allowed during unaccounted intervals flag for user""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setPlayTimeUnaccountedIntervalsEnabled(pUserName, pPlayTimeUnaccountedIntervalsEnabled) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setPlayTimeUnaccountedIntervalsEnabled.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setPlayTimeAllowedDays(self, pUserName, pPlayTimeAllowedDays): """Set allowed days for PlayTime for user""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setPlayTimeAllowedDays(pUserName, pPlayTimeAllowedDays) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setPlayTimeAllowedDays.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setPlayTimeLimitsForDays(self, pUserName, pPlayTimeLimits): """Set PlayTime limits for the allowed days for the user""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setPlayTimeLimitsForDays(pUserName, pPlayTimeLimits) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setPlayTimeLimitsForDays.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setPlayTimeActivities(self, pUserName, pPlayTimeActivities): """Set PlayTime limits for the allowed days for the user""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setPlayTimeActivities(pUserName, pPlayTimeActivities) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setPlayTimeActivities.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setPlayTimeLeft(self, pUserName, pOperation, pTimeLeft): """Set user time left""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprUserAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprUserAdminDbusInterface.setPlayTimeLeft(pUserName, pOperation, pTimeLeft) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setPlayTimeLeft.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message # --------------- timekpr configuration info population / set methods --------------- # def getTimekprConfiguration(self): """Get configuration from server""" # defaults result, message = self.initReturnCodes(pInit=True, pCall=False) timekprConfig = {} # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message, timekprConfig = self._timekprAdminDbusInterface.getTimekprConfiguration() except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.getTimekprConfiguration.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message, timekprConfig def setTimekprLogLevel(self, pLogLevel): """Set the logging level for server""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprLogLevel(pLogLevel) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprLogLevel.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprPollTime(self, pPollTimeSecs): """Set polltime for timekpr""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprPollTime(pPollTimeSecs) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprPollTime.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprSaveTime(self, pSaveTimeSecs): """Set save time for timekpr""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprSaveTime(pSaveTimeSecs) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprSaveTime.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprTrackInactive(self, pTrackInactive): """Set default value for tracking inactive sessions""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprTrackInactive(pTrackInactive) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprTrackInactive.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprTerminationTime(self, pTerminationTimeSecs): """Set up user termination time""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprTerminationTime(pTerminationTimeSecs) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprTerminationTime.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprFinalWarningTime(self, pFinalWarningTimeSecs): """Set up final warning time for users""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprFinalWarningTime(pFinalWarningTimeSecs) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprFinalWarningTime.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprFinalNotificationTime(self, pFinalNotificationTimeSecs): """Set up final notification time for users""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprFinalNotificationTime(pFinalNotificationTimeSecs) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprFinalNotificationTime.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprSessionsCtrl(self, pSessionsCtrl): """Set accountable session types for users""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprSessionsCtrl(pSessionsCtrl) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprSessionsCtrl.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprSessionsExcl(self, pSessionsExcl): """Set NON-accountable session types for users""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprSessionsExcl(pSessionsExcl) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprSessionsExcl.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprUsersExcl(self, pUsersExcl): """Set excluded usernames for timekpr""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprUsersExcl(pUsersExcl) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprUsersExcl.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprPlayTimeEnabled(self, pPlayTimeEnabled): """Set up global PlayTime enable switch""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprPlayTimeEnabled(pPlayTimeEnabled) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprPlayTimeEnabled.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message def setTimekprPlayTimeEnhancedActivityMonitorEnabled(self, pPlayTimeEnabled): """Set up global PlayTime enhanced activity monitor enable switch""" # initial values result, message = self.initReturnCodes(pInit=True, pCall=False) # if we have end-point if self._timekprAdminDbusInterface is not None: # defaults result, message = self.initReturnCodes(pInit=False, pCall=True) # notify through dbus try: # call dbus method result, message = self._timekprAdminDbusInterface.setTimekprPlayTimeEnhancedActivityMonitorEnabled(pPlayTimeEnabled) except Exception as ex: # exception result, message = self.formatException(str(ex), __name__, self.setTimekprPlayTimeEnhancedActivityMonitorEnabled.__name__) # we cannot send notif through dbus, we need to reschedule connecton self.initTimekprConnection(False, True) # result return result, message timekpr-next/debian/000775 001750 001750 00000000000 15122253261 016416 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/debian/timekpr-next.lintian-overrides000600 001750 001750 00000000155 14575617250 024431 0ustar00bezvfedubezvfedu000000 000000 timekpr-next binary: desktop-command-not-in-package pkexec [usr/share/applications/timekpr-admin-su.desktop] timekpr-next/debian/postinst000700 001750 001750 00000004657 14575617135 020246 0ustar00bezvfedubezvfedu000000 000000 #!/bin/sh # timekpr directories and units TK_DIR="/usr/lib/python3/dist-packages/timekpr" # unit name TK_UNIT_NAME="timekpr.service" # unit directory (starting with debian) TK_UNIT_DIR="/lib/systemd/system" # prefixes for other distros then debian based TK_UNIT_DIR_PREFIXES="/usr" # we need to take into account the various directory configs for R_PREF in ${TK_UNIT_DIR_PREFIXES}; do # alternatives exist if [ -d "${R_PREF}${TK_UNIT_DIR}" ]; then # assign additional prefix TK_UNIT_DIR="${R_PREF}${TK_UNIT_DIR}" # this is it break fi done # final unit TK_UNIT="${TK_UNIT_DIR}/${TK_UNIT_NAME}" # add timekpr group (for accessing administration functionality without sudo) echo "Checking and/or adding timekpr group to access functionality without superuser privileges" groupadd -g 2000 timekpr 2>/dev/null || true # remove compiled python units (may interfere with python versions) for R_DIR in ${TK_DIR}; do # if compiled units exist, remove them if [ -d "${R_DIR}" ]; then # remove compiled echo "Cleaning up Timekpr-nExT compiled units" find "${R_DIR}" -type d -name '__pycache__' -exec rm -rf {} \; -prune find "${R_DIR}" -type f -iname '*.pyc' -exec rm {} \; fi done # previously we installed unit into /etc, we need to take care of it TK_OBSOLETE_UNIT="/etc/systemd/system/${TK_UNIT_NAME}" if [ -f "${TK_OBSOLETE_UNIT}" ]; then echo "Removing obsolete Timekpr-nExT systemd unit" rm "${TK_OBSOLETE_UNIT}" fi # enable service by default and start it echo "Enabling Timekpr-nExT systemd unit" systemctl enable "${TK_UNIT}" # reload d-bus for access controls and systemd for service removals echo "Reloading dbus daemon to refresh access policies for Timekpr-nExT daemon" systemctl reload dbus echo "Reloading systemd to refresh unit for Timekpr-nExT" systemctl daemon-reload # restart or start (if that was not started before) echo "Starting Timekpr-nExT" systemctl restart timekpr # update gtk icon cache (if utility exists) which gtk-update-icon-cache > /dev/null 2>&1 # utility exists, update cache if [ $? -eq 0 ]; then # determine whether cache exists and choose particular args for that if [ -f /usr/share/icons/hicolor/icon-theme.cache ]; then ICOARGS="-fv" else ICOARGS="-f" fi echo "Update icon cache" touch --no-create /usr/share/icons/hicolor && gtk-update-icon-cache ${ICOARGS} /usr/share/icons/hicolor fi timekpr-next/debian/source/000775 001750 001750 00000000000 13476006650 017726 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/debian/source/format000664 001750 001750 00000000016 13476006650 021136 0ustar00bezvfedubezvfedu000000 000000 3.0 (native) timekpr-next/debian/compat000664 001750 001750 00000000002 13476006650 017624 0ustar00bezvfedubezvfedu000000 000000 9 timekpr-next/debian/copyright000644 001750 001750 00000000574 15122253204 020352 0ustar00bezvfedubezvfedu000000 000000 This package was debianized by Eduards Bezverhijs (mjasnik) on Sun, 23 Sep 2018 01:10:17 +0200. Upstream Authors: Eduards Bezverhijs Copyright: 2018-2024 Eduards Bezverhijs All code is released under the GPLv3, see /usr/share/common-licenses/GPL-3 With the exception of the artwork SVG source files, which are released to the Public Domain. timekpr-next/debian/changelog000644 001750 001750 00000105722 15122254113 020272 0ustar00bezvfedubezvfedu000000 000000 timekpr-next (0.5.9-1ubuntu1~ppa1) unstable; urgency=medium * fixed a bug in notifications when time is not limited was shown even the time was limited this bug manifested itself only when there were only weekly or monthly time limits enforced on users * fixed a bug with dbus notification signals for unknown python version (MR !492908 from alexandre-nunes / Houston4444) * fixed a bug with config parser (#2130832) in python 3.14 it became totally not fit for my purpose, rewrote config handling completely * added more verbose error logging * added synonyms for information retrieval options in CLI: --getuserlist is the same as --userlist --getuserinfo is the same as --userinfo --getuserinfort is the same as --userinfort * added possibility for CLI version to specify time as time string for those who cannot or don't want to convert time to seconds: time can be specified as 1h10m10s as opposed to 4210 seconds previously this affects the following options: --settimelimits --settimelimitweek --settimelimitmonth --settimeleft --setplaytimelimits --setplaytimeleft time can be returned either in seconds (as currently) and in time string if "-h" is passed to information retrieval options: --getuserinfo --getuserinfort * fixed a hint / description for "Hide icon and notifications" checkbox * added fr_CA and en_GB translations from LP * fix the shebangs, feng-shui style * added support for dynamic users which are not specified in passwd (for example, gdm-greeter) * added support for journald logging timekpr logs are pushed to systemd logging facilities, if available fallback to standard logging * lock sessions are now performed from login1 manager interface rather than from user session one -- Eduards Bezverhijs Mon, 22 Dec 2025 16:39:21 +0200 timekpr-next (0.5.8-1ubuntu1~ppa1) unstable; urgency=medium * added translations for Russian, Dutch, Portugese languages * improved sound notificatons: added support for espeak-ng system "bell" notifications are no longer relient on freedesktop sound files * packaging warning fixes (#2089143) * enable standard window close button (workaround for #2091011) * fixes for .rpm packaging from Alexey (#2091080) * improve pidfile handling (#2097253) * added an option to kill sessions instead of terminate at least Kubuntu 24.04 will not terminate sessions with TerminateSession, it works fine with KillSession + SIGTERM * implement a workaround for weird CMOS date reset bug which results time being reported 55 years in the future which results in a lot of free time for the subordinate (this is exceptionally rare condition) -- Eduards Bezverhijs Sat, 10 May 2025 17:29:42 +0300 timekpr-next (0.5.7-1ubuntu1~ppa1) UNRELEASED; urgency=medium * improve username and user shell filter (fixes #2061003) usernames which do not conform to standard username patterns are filtered out users with no login shell are filtered out -- Eduards Bezverhijs Thu, 30 May 2024 21:09:45 +0300 timekpr-next (0.5.6-1ubuntu1~ppa1) UNRELEASED; urgency=medium * remove UUID upper boundary check (fixes #2046222) any user whose ID is greater than UUID_MIN is considered controllable by timekpr this helps with systemd-homed, remote LDAP logins etc, where UID is arbitrary high * fix a long standding bug when weekly limits are reset together with monthly limits this occurs only when new month starts in the middle of the week * improve session time accounting for display / reporting purposes actually account and display all active and sleep time in case user is logged in for more than 2 days or even more than a week * color "apply" buttons and tab pages in red to warn users that there are pending changes to apply * added keyboard navigation focus order to list type of elements (where there are ediable columns) swapped day limit and enabled columns due to weird GTK behaviour when toggle can not be activated using keyboard as first editable item in list * disable search boxes on list elements as they pop up using keyboard navigation they are not needed and just confuse users * fix "verify" button enablement it was enabled even when user clicks in and out of "from" field and it contained 0 hour * made lists a little wider for adwaita theme not to show horizontal scrollbar * fix row positioning "Gtk-CRITICAL" when there is no rows in the list * minor dbus performance measurement optimization * prevent saving / processing of duplicate timekpr configuration which can happen very rarely * when user sets / saves configuration or timekpr loads it from file, log it to the log file this way the log file will contain configuration too and that will be enough to ask for debugging if smth goes south * added new "realtime" information get method to CLI + translations * trying to cover as much DE as we can for idle time accounting (still have to be compatible with freedesktop / gnome standard) add more delay to connect to screensaver (hopefully that helps computers with slower DE start) rewrote screensaver dbus name detection based on DE name - this should help with some DEs which are less known but still have a compatible screensaver interface fall back to gnome and then to freedesktop interfaces (gnome is more popular, freedesktop - very few actually implement it) if nothing else is detected and works -- Eduards Bezverhijs Sun, 17 Mar 2024 18:02:25 +0200 timekpr-next (0.5.5-1ubuntu1~ppa1) UNRELEASED; urgency=medium * add initial support for systemd-homed users and systemd-homed dynamic users * Spanish translations, thanks to Ivan L. * add couple of Debian specific packaging fixes * check for login.defs in multiple possible directories (for example, openSUSE moved the file to /usr) -- Eduards Bezverhijs Fri, 1 Sep 2023 13:22:13 +0300 timekpr-next (0.5.4-1ubuntu1~ppa1) UNRELEASED; urgency=medium * translations Belorussian translations, thanks to Aliaxandr enabled German translations * misc logging changes (more refined and enough verbose) regular and PT notifications now are separate and follow the same logic (+logging) added logging callback to know when the notification is closed -- Eduards Bezverhijs Fri, 7 Oct 2022 07:39:11 +0300 timekpr-next (0.5.3-1ubuntu1~ppa1) UNRELEASED; urgency=medium * bug fixes fix DBUS time notification signal and intermittent user session restriction enforcement issues due to this error: "TypeError: 'float' object cannot be interpreted as an integer" this seems to happen on very recent python versions * translations German translations, thanks to Robert E. * misc add logging for linux distribution identification and core components (python version, dbus-python version) -- Eduards Bezverhijs Mon, 21 Feb 2022 22:50:53 +0200 timekpr-next (0.5.2-1ubuntu1~ppa1) UNRELEASED; urgency=medium * features PlayTime left is now shown besides the icon / on label * bug fixes fix #1927771 (the issue was improper configuration when limit count was less then allowed day count) additionally allow setting empty day / limit lists for regular time and PlayTime fix error handling with empty lists properly check allowed day numbers according to allowed values (1-7) a small fix for time leak (couple of seconds) on day change * technical improvements address the situation when session type can change during the session in logind (https://github.com/systemd/systemd/pull/14925) improved session accounting for situations when session type is in tracked list at the same time as in excluded, exclusion takes precedence improved session logging to determine why the time for session is or is not accounted improved session remaining process killer to include processes that use pseudo-terminals as well as recording a summary of killing results prevent an installation error when blindly recreating GTK icon cache even if it is not present, in these cases just create it properly check whether an instance of timekpr applications is actually running on day change, reset not only this day spent and sleep times, but for next day too tiny improvement on sleep time precision make admin application to exit gracefully when it was opened from terminal and ctrl+c was pressed (SIGINT) less logging in standard debug mode / remove duplicate logging for PT -- Eduards Bezverhijs Wed, 23 Jun 2021 12:34:38 +0300 timekpr-next (0.5.1-2ubuntu1~ppa1) UNRELEASED; urgency=medium * quick fix for PlayTime notifications revert the cap in daemon for sending PlayTime left to clients admin app will always show actual PlayTime left client app will receive actual PlayTime left, but it will show minimum of PlayTime or standard time left for that particular day to user (child, subordinate) * possibly fix a bug #1917916 when process changed the owner from regular user to system user but was still left in user process list -- Eduards Bezverhijs Fri, 5 Mar 2021 11:48:25 +0200 timekpr-next (0.5.1-1ubuntu1~ppa1) UNRELEASED; urgency=medium * adjust README to fix MD parsing nuances on gitlab * add gnome-shell-extension-appindicator to suggestions list * fix project description to match the README * technical improvements added ":" as allowed separator for minute intervals (undocumented feature) improve a workaround in config loader routines for cases when user makes a mistake while manually editing the config files added explanatory comment for values in control files print out uname when timekpr starts to better understand the environment the timekpr is running in log more information about timekpr performance and computer load average log information about day / week / month change added elapsed time information output on lowest log level rewritten logging routines and implemented buffered log save time spent is accounted and saved even when file has been modified externally (this should help with proper time accounting (2x+) if user is logged in from multiple machines when commonly shared directory is used) * registered bug fixes adjust Debian installation suggestions in README (fixes #1910457) start using ayatana appindicators because regular ones seem to be deprecated (fixes #1910461) adjust for openSUSE too (Fedora does not seem to be using ayatana appindicators yet) * unregistered bug fixes fixes to client application when is pressed instead of close window which leads to empty timekpr windows fixes to PlayTime daily limit reset when the day has changed fix for PlayTime disabled -> enabled did not work right away when user is already logged in fix for user time accounting which added couple of seconds to time spent when using unaccountable intervals fix time accounting for PlayTime in override mode and unaccounted time intervals fix process handling when process does not have a normal user id that process monitor is interested in and it changed executable or process changed user id from one we were interested in to one we are not fix timekpr behaviour when user was able to use computer prior the starting minutes of unaccounted hour interval now user will be dealt according to defined rules instead of using the computer when he is not allowed to lift the terminate / shutdown restriction when termination sequence has been initialized, but admin gives more time prior to terminate or shutdown * new features introduce an option to prevent PlayTime activities to be started during unaccountable ("∞") intervals introduce an option to monitor PlayTime activities (processes) using first 512 characters of command line by default only process name is used for activity detection logging level changes are applied immediately gray icon for unaccounted hours, which help to distinguish the interval, especially when there is no time left (was: red icon) add possibility to edit single daily, daily PlayTime and weekly/monthly limits by editing value directly -- Eduards Bezverhijs Mon, 1 Mar 2021 21:49:33 +0200 timekpr-next (0.5.0-1ubuntu1~ppa1) UNRELEASED; urgency=medium * fix a bug when administration application tries to get user information from server even when no user has been selected * added clarifications to the template on some keywords not to be translated fixed LV and IT translations with keywords * enable Italian translations * added Italian translations * added clarifications on some keywords not to be translated * translation template update, spelling fixes and Latvian translations * replaced re.escape with simple replace due to it's different behavior in different versions this fixes user list retrieval in Ubuntu 18.04 (python 3.6.9) * fixed a bug when user names will not show up in administration application if username contains a . (dot) * introduced PlayTime and PlayTime override modes this basically allows a supervisor to account and control specific processes in the system for their subordinates supervisor has to configure which processes are accounted by entering a process executable names / masks * introducing "freeride" time periods * some GUI improvements in client app * total rewrite of administration app to improve usability * introducing user configurable notifications -- Eduards Bezverhijs Tue, 29 Dec 2020 17:51:19 +0200 timekpr-next (0.4.4-1ubuntu1~ppa1) UNRELEASED; urgency=medium * adjust previously built workaround for switching to login manager screen -- Eduards Bezverhijs Sun, 25 Oct 2020 19:25:59 +0300 timekpr-next (0.4.3-2ubuntu1~ppa1) UNRELEASED; urgency=medium * added lock, suspend and shutdown options as a restriction / lockout types * added option for computer to be woken up automatically if it was put to sleep by timekpr additionally it's possible to specify hour interval when it is allowed to be woken up * changed termination sequence a little if user has no time and locked the screen, user is removed from termination list, which effectively means that user sessions won't be terminated unless user unlocks the screen or other user logs in via user switching (we should not leave sessions without time left floating around forever) * proper english label / message corrections from Phil Hudson (thanks!) -- Eduards Bezverhijs Sat, 10 Oct 2020 19:59:35 +0300 timekpr-next (0.4.2-1ubuntu1~ppa1) UNRELEASED; urgency=medium * added verbose output to timekpr installation * fix license names in AppStream file * better explain usage notes for CLI usage * improvements added average performance metrics for timekpr execution introduce server ability to survive login manager DBUS interface crash and restore functional timekpr state after recovery * refactoring improve various functionality in timekpr codebase tiny optimizations for variables improvements for config reader / writer improvements for in-memory config creation * fixed #1891921, critical notifications did not show up until final countdown (if show all notifications was checked) now critical notification will be shown approx one minute before time will end * improved notification frequency and urgency (now only critical notifications are actually critical) new frequency values: if more than 2 hours are left, notifications are shown every 2 hours if more than 1 hour is left, notifications are shown every 1 hour, i.e. one notification if more than 30 minutes are left, notifications are shown every 30 minutes, i.e. one notification if more than 5 minutes are left, notifications are shown every 10 minutes as warnings if more than a minute is left, notifications are shown every 2 minutes as important warnings if about a minute is left, notifications are shown every 1 minute (i.e. one notification) as CRITICAL notification * improved handling of icons use non GTK icons that should work in every DE * improved allowed days and respective limits processing in case these are not set up properly mismatch possible only by manually and incorrectly editing the config file * fix continous time calculation on day change this issue did not affect functionality -- Eduards Bezverhijs Fir, 4 Sep 2020 11:45:09 +0300 timekpr-next (0.4.1-2ubuntu1~ppa1) UNRELEASED; urgency=medium * fixed a packaging bug with systemd units -- Eduards Bezverhijs Thu, 30 Jul 2020 20:13:39 +0300 timekpr-next (0.4.1-1ubuntu1~ppa1) UNRELEASED; urgency=medium * added quality of life configuration options for client application (as suggested by one of Timekpr-nExT users) ** added configuration option to set how long regular notifications should be visible ** added configuration option to set how long Critical notifications should be visible ** if time in seconds is set to 0 for either of options, notification will stay on until dismissed ** added option to play a short (standard) notification bell sound when showing notifications (if supported by current DE) ** added username verification for configuration files ** translations for new options in client application ** added full name display for username * added quality of life improvements to administration app ** added refresh to actual ("realtime") values for users that are logged in ** a little optimization for time refresh in administration application ** added full name display for usernames (if username is the same as full name, show only username) * fixed and changed warnings / suggestions from user foka based on his observations when importing package into Debian: ** adjust code install paths (with support for non-Debian distros as well) ** create metainfo file ** adjust service / desktop / control / install / changelog files ** fixed some lintian warnings (will not be fixing all) ** project README file * changed version numbering scheme * bug fixes in administration application ** time spent / left was shown from previous time (day / week / month) user was logged in -- Eduards Bezverhijs Mon, 27 Jul 2020 13:40:01 +0300 timekpr-next (0.4.0~ppa1~ubuntu2) UNRELEASED; urgency=medium * minor change for debian/install * added Fedora/openSUSE build instructions * improved user detection -- Eduards Bezverhijs Sun, 12 Jul 2020 13:48:36 +0300 timekpr-next (0.4.0~ppa1~ubuntu1) UNRELEASED; urgency=medium * Registered bug fixes: ** killing user sessions that do not have "seats" will not switch to login manager TTY (#1861479) ** properly show time spent for the day in administration app (#1882909) ** properly set any number values (spinbuttons) in admin app (#1826672) ** restore configuration from saved state in admin app when case uncheck / check is pressed (#1826673) ** it's now possible to set daily limits as well as intervals for multiple days at once (#1826671) * Discovered bug fixes: ** fix config / control file recreation in case it's missing a configuration option entirely ** fix icon and time representation in system notification area when user has unlimited time left * Changes / improvements: ** control files (.time) will now contain balance as well as time spent for day (existing TIME_SPENT will be removed, TIME_SPENT_BALANCE and TIME_SPENT_DAY are added) ** console application (timekpra) changes *** rename TIME_SPENT (previously used as saved time spent value) to TIME_SPENT_BALANCE *** added an option which represents hide tray icon option (HIDE_TRAY_ICON) *** rename option "userconfig" to "userinfo" which better represents returned values *** add method to hide tray icon for user (--sethidetrayicon) *** added time left for today (TIME_LEFT_DAY) which is calculated from saved state ** console application (timekpra) improvements - added "live" (i.e. calculated every 3 secs) values for options below *** ACTUAL_TIME_SPENT_SESSION - time spent in this session (since timekpr daemon startup) *** ACTUAL_TIME_INACTIVE_SESSION - time user was inactive in this session (since timekpr daemon startup) *** ACTUAL_TIME_SPENT_BALANCE - time spent balance (including added/removed bonus time) *** ACTUAL_TIME_SPENT_DAY - time user spent this day (actual spent time, example: user has 1 hour, if there was a bonus 1 hr, this will show 2 hrs) *** ACTUAL_TIME_LEFT_DAY - how much time is left today *** ACTUAL_TIME_LEFT_CONTINUOUS - how much time is left continuously (but no more than this and next day) ** timekpr will not switch to login manager TTY after killing a user / session that is not active (i.e. in foreground) ** timekpr will reload user list when opening admin application (newly added users will be available in timekpr right away) ** add time inactive (actual) and time left (actual), i.e. when user is logged in, for admin app ** add translations to new features ** minor GUI changes ** message which informs user that timekpr can not connect to screensaver is now shown only when all notifications are enabled ** client application icon will not show if hide icon is checked in admin app -- Eduards Bezverhijs Wed, 17 Jun 2020 00:33:21 +0300 timekpr-next (0.3.7~ppa1~ubuntu1) UNRELEASED; urgency=medium * Added Czech language (thanks for translations to NOVAK Ludek) * Fixed Hungarian language inclusion (thanks for spotting the typo to NOVAK Ludek) -- Eduards Bezverhijs Tue, 21 Apr 2020 23:19:42 +0300 timekpr-next (0.3.6~ppa1~ubuntu1) UNRELEASED; urgency=medium * Added support for LockedHint to determine whether session is locked ** requires systemd >= 230, e.g. Ubuntu 18.04 at least ** this is in addition to client screensaver detection, but less used (e.g. KDE does not use this) * Exclude closing and lingering sessions from being considered as active when tracking inactive sessions is enabled -- Eduards Bezverhijs Tue, 21 Apr 2020 23:19:42 +0300 timekpr-next (0.3.5~ppa1~ubuntu1) UNRELEASED; urgency=medium * Improved login manager detection for non-standard names * Added a previously forgotten Hungarian language to installation -- Eduards Bezverhijs Sun, 17 Apr 2020 09:56:07 +0300 timekpr-next (0.3.4~ppa1~ubuntu1) UNRELEASED; urgency=medium * Added more screensaver workarounds for implementations for major DEs -- Eduards Bezverhijs Sun, 14 Apr 2020 10:31:32 +0300 timekpr-next (0.3.3~ppa1~ubuntu1) UNRELEASED; urgency=medium * Warn user if screensaver feature is not available for screen idle time detection ** adjust translations as well -- Eduards Bezverhijs Sun, 14 Apr 2020 11:02:31 +0300 timekpr-next (0.3.2~ppa1~ubuntu1) UNRELEASED; urgency=medium * Introduced functionality to limit retries to screensaver for DEs that are not compatible with freedesktop or gnome screensaver interface -- Eduards Bezverhijs Sun, 14 Apr 2020 16:04:02 +0300 timekpr-next (0.3.1~ppa1~ubuntu1) UNRELEASED; urgency=medium * Introduced workarounds section for screensaver dbus interface to use gnome version instead of freedesktop for Unity and Gnome itself -- Eduards Bezverhijs Sun, 13 Apr 2020 16:46:35 +0300 timekpr-next (0.3.0~ppa1~ubuntu1) UNRELEASED; urgency=medium * Added possibility to determine screen lock status reliably for every DE that exposes screensaver status to DBUS (see below) ** It's implemented in client <-> server fashion using org.freedesktop.ScreenSaver ** but as Gnome3 is "special", I had to implement org.gnome.ScreenSaver as well -- Eduards Bezverhijs Sun, 12 Apr 2020 17:10:06 +0300 timekpr-next (0.2.13~ppa1~ubuntu1) UNRELEASED; urgency=medium * Fix time reporting -- Eduards Bezverhijs Mon, 24 Feb 2020 17:39:44 +0300 timekpr-next (0.2.12~ppa1~ubuntu1) UNRELEASED; urgency=medium * Fix time accounting when check interval is exactly at 0 secs in new hour (fixes a bug #1863482) -- Eduards Bezverhijs Mon, 17 Feb 2020 00:08:29 +0300 timekpr-next (0.2.11~ppa1~ubuntu1) UNRELEASED; urgency=medium * Rework time accouting routines (fixes a bug #1861758) * Fix for week and month accounting when showing continous time (#1856744) * Rework session caching routines (for preparation to locking detection) * Fixed dependencies for package * Improvements for old StatusIcon (at start there will be a default icon and labels as with indicator) * Tiny python import cleanup -- Eduards Bezverhijs Fri, 7 Feb 2020 11:29:49 +0300 timekpr-next (0.2.10~ppa1~ubuntu1) UNRELEASED; urgency=medium * Fixed bug in configuration load when only couple of days are allowed per week * Added hungarian translation (thanks) -- Eduards Bezverhijs Sun, 12 Jan 2020 15:46:08 +0300 timekpr-next (0.2.9~ppa1~ubuntu1) UNRELEASED; urgency=medium * Improve user detection when username is the same as one of the login managers * Small improvements with login manager detection * Fix user time accounting due to issues with Python 3.8 and DBUS typecasts -- Eduards Bezverhijs Mon, 25 Nov 2019 19:50:05 +0300 timekpr-next (0.2.8~ppa1~ubuntu1) UNRELEASED; urgency=medium * Fixed an issue for huuuuuuuge icons in in Budgie DE (however other DEs did not show such issue) * A little logging improvement in VTNr search for login managers * User list is now sorted * Fixed an issue with object paths (timekpr uses usernames as part of pathnames) on DBUS which contain dots (.) and/or hyphens (-) -- Eduards Bezverhijs Tue, 24 Sep 2019 01:28:12 +0300 timekpr-next (0.2.7~ppa1~ubuntu1) UNRELEASED; urgency=medium * Fixed an issue when Timekpr-nExT confiuration may get corrupted or empty after sudden power outage ** all config files as well as time accounting files have previous backups (.prev files) ** invalid config / time files will have .invalid files to inspect later ** improved configuration handling by retrieving as much as possible from non-qualified config file (if user messes up config manually) * Improved CLI tools (error checking and help) * Fixed icon handling in race conditions between client and server as well improved icon handling during limit changes -- Eduards Bezverhijs Thu, 22 Aug 2019 19:23:42 +0300 timekpr-next (0.2.6~ppa1~ubuntu1) UNRELEASED; urgency=medium * Fixed an issue with Timekpr-nExT client not starting in non-major DE's (for example Deepin) -- Eduards Bezverhijs Wed, 5 Jun 2019 20:12:12 +0300 timekpr-next (0.2.5~ppa1~ubuntu1) UNRELEASED; urgency=medium * first official release -- Eduards Bezverhijs We, 5 Jun 2019 20:12:12 +0300 timekpr-next (0.2.5~ppa1~ubuntu1) UNRELEASED; urgency=medium * fixed application launcher names for unfortunate Gnome3 users -- Eduards Bezverhijs Wed, 5 Jun 2019 20:12:12 +0300 timekpr-next (0.2.4~ppa1~ubuntu2) UNRELEASED; urgency=medium * localization updates (fixes to translations all over the place, thanks to JP Lord) ** updated all other languages with capitalizations * added French translations -- Eduards Bezverhijs Mon, 29 Apr 2019 12:47:46 +0300 timekpr-next (0.2.4~ppa1~ubuntu1) UNRELEASED; urgency=medium * implemented TTY switching functionality for those cases, when login manager sits on different TTY than session itself (this should fix #1823717) ** the implementation is as follows: Timekpr-nExT tries to determine on which TTY login manager sits and saves it's TTY number, login managers have their ** own users in standard installations, therefore we detect them using specific usernames (maybe not the best solution, but it's a solution) * fixed control file initialization when timekpr starts (fixes #1802583) * fixed icon in notification area when there is no time limit per day, but time intervals are limited * improved termination list handling -- Eduards Bezverhijs Sat, 27 Apr 2019 23:26:05 +0300 timekpr-next (0.2.3~ppa1~ubuntu3) UNRELEASED; urgency=medium * fixed a bug in logging when multiple users use machine at the same time (permission problem) -- Eduards Bezverhijs Sat, 27 Apr 2019 17:50:24 +0300 timekpr-next (0.2.3~ppa1~ubuntu2) UNRELEASED; urgency=medium * kill leftover processes for the user which do not originate from session processes -- Eduards Bezverhijs Sun, 14 Apr 2019 11:51:41 +0300 timekpr-next (0.2.3~ppa1~ubuntu1) UNRELEASED; urgency=medium * kill inactive sessions as well (up until this point inactive sessions were saved from killing) -- Eduards Bezverhijs Sun, 14 Apr 2019 11:51:41 +0300 timekpr-next (0.2.2~ppa1~ubuntu1) UNRELEASED; urgency=medium * logging improvements (all client side logs are written to /tmp instead of HOME) * tweak to translation credits (if none are supplied) -- Eduards Bezverhijs Fri, 12 Apr 2019 15:58:56 +0200 timekpr-next (0.2.1~ppa1~ubuntu2) UNRELEASED; urgency=medium * packaging fix - we do not need to reference login managers any more -- Eduards Bezverhijs Mon, 08 Apr 2019 18:34:31 +0300 timekpr-next (0.2.1~ppa1~ubuntu1) UNRELEASED; urgency=medium * added Italian and German translations -- Eduards Bezverhijs Mon, 8 Apr 2019 8:25:17 +0300 timekpr-next (0.2.0~ppa1~ubuntu1) UNRELEASED; urgency=medium * first beta release -- Eduards Bezverhijs Fri, 29 Mar 2019 8:22:17 +0300 timekpr-next (0.2.0~ppa1~ubuntu1) UNRELEASED; urgency=medium * implemented localization * added Latvian translation -- Eduards Bezverhijs Fri, 29 Mar 2019 8:22:17 +0300 timekpr-next (0.1.15~ppa1~ubuntu1) UNRELEASED; urgency=medium * implemented localization (translations pending) -- Eduards Bezverhijs Thu, 28 Mar 2019 18:27:42 +0300 timekpr-next (0.1.14~ppa1~ubuntu1) UNRELEASED; urgency=medium * timekpr client code optimization and small bug fixes * added speech output TODO: localization -- Eduards Bezverhijs Thu, 21 Mar 2019 21:06:43 +0300 timekpr-next (0.1.13~ppa1~ubuntu1) UNRELEASED; urgency=medium * finalized admin GUI * bug fixes here and there TODO: localization and speech -- Eduards Bezverhijs Mon, 18 Mar 2019 10:33:59 +0300 timekpr-next (0.1.12~ppa1~ubuntu1) UNRELEASED; urgency=medium * finalized user admin GUI * bug fixes here and there TODO: timekpr administration via GUI TODO: localization and speech -- Eduards Bezverhijs Fri, 15 Mar 2019 07:11:23 +0300 timekpr-next (0.1.11~ppa1~ubuntu1) UNRELEASED; urgency=medium * implemented user admin GUI TODO: timekpr administration via GUI TODO: localization and speech -- Eduards Bezverhijs Sun, 03 Mar 2019 00:42:11 +0300 timekpr-next (0.1.10~ppa1~ubuntu1) UNRELEASED; urgency=medium * fixed a bug for time accounting when there is a limit set up, but hours are not limited at all * changed CLI option style from "-" to "--" TODO: timekpr administration via GUI TODO: user administration via GUI TODO: localization and speech -- Eduards Bezverhijs Tue, 26 Feb 2019 23:08:17 +0300 timekpr-next (0.1.9~ppa1~ubuntu1) UNRELEASED; urgency=medium * added weekly and monthly quota administration and processing * minor time accounting fixes TODO: timekpr administration via GUI TODO: user administration via GUI TODO: week and month quotas reporting to user TODO: localization and speech -- Eduards Bezverhijs Fri, 22 Feb 2019 18:11:35 +0300 timekpr-next (0.1.8~ppa1~ubuntu1) UNRELEASED; urgency=medium * fixes for user administration via DBUS and CLI * major time accounting fixes * clean up for user data processor TODO: timekpr administration via GUI TODO: user administration via GUI TODO: week and month quotas TODO: localization and speech -- Eduards Bezverhijs Fri, 15 Feb 2019 6:53:03 +0300 timekpr-next (0.1.7~ppa1~ubuntu1) UNRELEASED; urgency=medium * implemented user administration via DBUS * fixed some bugs with client configuration * fixed logrotate configuration TODO: administration via DBUS and CLI/GUI around it TODO: localization and speech -- Eduards Bezverhijs Thu, 17 Jan 2019 07:35:19 +0300 timekpr-next (0.1.6~ppa1~ubuntu1) UNRELEASED; urgency=medium * fixed issue with time being improperly calculated when user is set from "unlimited" mode to limited * fixed issue about time initialization when day changes and previously user was in "unlimited" mode (mode was changed to limited + he never logged off) TODO: administration via DBUS and CLI/GUI around it TODO: localization and speech -- Eduards Bezverhijs Sun, 18 Dec 2018 20:03:22 +0300 timekpr-next (0.1.5~ppa1~ubuntu1) UNRELEASED; urgency=medium * fixed lazy dbus connection initialization on client side * fixes for client side GUI * minor fixes for time accounting and logging TODO: administration via DBUS and CLI/GUI around it TODO: localization and speech -- Eduards Bezverhijs Sun, 11 Nov 2018 07:55:46 +0300 timekpr-next (0.1.4~ppa1~ubuntu1) UNRELEASED; urgency=medium * first alpha version of timekpr (a lot has changed since old timekpr 0.3x version) ** new impementation of timekpr-revived (there is almost nothing left of timekpr-revived) ** released to very limited testers ** python3 and gtk3 are the must ** all based on DBUS (server and client) ** session management relies on systemd's login1 ** notifications through DBUS (exclusively) ** server is managing everything, except notifications which is the responsibility of client ** major features include the following *** support DE's which implement appindicaor3 (Unity/Gnome3¹/KDE5/...) and legacy statusIcon *** support Ubuntu 12.04+ (on launchpad timekpr can support the versions which are on supported distro list) *** it's possible to configure which session types are accountable *** inactive session time is NOT accounted (if configured so) *** time is configurable by days, hours and minutes (yes, limits within hour are possible) *** there is no "hard" account lock, user will be logged out in 15 seconds if time is over *** synchronous operation between server and client *** improved notifications about system behaviour **** notification about actual limit change **** notification about general configuration change **** notification logic improved **** client acts merely as notificator **** client can view limits applied by admin ¹ one has to install extension to show timekpr icon, otherwise icon is not shown (gnome architects do not want status icons in their design anymore, timekpr can not do anything about it) TODO: administration via DBUS and CLI/GUI around it -- Eduards Bezverhijs Mon, 17 Sep 2018 08:02:17 +0300 timekpr-next/debian/postrm000775 001750 001750 00000002461 13745331025 017677 0ustar00bezvfedubezvfedu000000 000000 #!/bin/sh # timekpr directories and units TK_DIR="/usr/lib/python3/dist-packages/timekpr" # unit name TK_UNIT_NAME="timekpr.service" # unit directory (starting with debian) TK_UNIT_DIR="/lib/systemd/system" # prefixes for other distros then debian based TK_UNIT_DIR_PREFIXES="/usr" # we need to take into account the various directory configs for R_PREF in ${TK_UNIT_DIR_PREFIXES}; do # alternatives exist if [ -d "${R_PREF}${TK_UNIT_DIR}" ]; then # assign additional prefix TK_UNIT_DIR="${R_PREF}${TK_UNIT_DIR}" # this is it break fi done # if there are units, let's handle them if [ -f "${TK_UNIT_DIR}/${TK_UNIT_NAME}" ]; then # systemctl echo "Stopping and disabling Timekpr-nExT units" systemctl stop timekpr systemctl disable timekpr fi # remove compiled python units (may interfere with python versions) if [ -d "${TK_DIR}" ]; then # remove compiled echo "Cleaning up Timekpr-nExT compiled units" find "${TK_DIR}" -type d -name '__pycache__' -exec rm -rf {} \; -prune find "${TK_DIR}" -type f -iname '*.pyc' -exec rm {} \; fi # reload d-bus for access controls and systemd for service removals echo "Reloading dbus daemon to refresh access policies" systemctl reload dbus echo "Reloading systemd to refresh units" systemctl daemon-reload timekpr-next/debian/conffiles000600 001750 001750 00000000032 14575617135 020311 0ustar00bezvfedubezvfedu000000 000000 /etc/timekpr/timekpr.conf timekpr-next/debian/rules000775 001750 001750 00000000235 13476006650 017506 0ustar00bezvfedubezvfedu000000 000000 #!/usr/bin/make -f clean: find . -name "*.pyc" -delete find . -name "__pycache__" -delete #doc/update.sh dh $@ --with python3 %: dh $@ --with python3 timekpr-next/debian/install000644 001750 001750 00000015364 15122253261 020016 0ustar00bezvfedubezvfedu000000 000000 # binaries bin/timekpra usr/bin/ bin/timekprc usr/bin/ bin/timekprd usr/bin/ # config files resource/server/dbus/timekpr.conf etc/dbus-1/system.d/ resource/server/logrotate.d/timekpr etc/logrotate.d/ resource/server/polkit/com.ubuntu.timekpr.pkexec.policy usr/share/polkit-1/actions/ resource/server/systemd/timekpr.service lib/systemd/system/ resource/server/timekpr.conf etc/timekpr/ # sample runtime files resource/server/timekpr.USER.conf var/lib/timekpr/config/ resource/server/USER.time var/lib/timekpr/work/ # icons resource/icons/timekpr-128.png usr/share/icons/hicolor/128x128/apps/ resource/icons/timekpr-48.png usr/share/icons/hicolor/48x48/apps/ resource/icons/timekpr-64.png usr/share/icons/hicolor/64x64/apps/ resource/icons/timekpr-client-128.png usr/share/icons/hicolor/128x128/apps/ resource/icons/timekpr-client-48.png usr/share/icons/hicolor/48x48/apps/ resource/icons/timekpr-client-64.png usr/share/icons/hicolor/64x64/apps/ resource/icons/timekpr-client-logo.svg usr/share/timekpr/icons/ resource/icons/timekpr-client.svg usr/share/icons/hicolor/scalable/apps/ resource/icons/timekpr-logo.svg usr/share/timekpr/icons/ resource/icons/timekpr-padlock-limited-green.svg usr/share/timekpr/icons/ resource/icons/timekpr-padlock-limited-red.svg usr/share/timekpr/icons/ resource/icons/timekpr-padlock-limited-yellow.svg usr/share/timekpr/icons/ resource/icons/timekpr-padlock-limited-uacc.svg usr/share/timekpr/icons/ resource/icons/timekpr-padlock-unlimited-green.svg usr/share/timekpr/icons/ resource/icons/timekpr.svg usr/share/icons/hicolor/scalable/apps/ # launchers resource/launchers/timekpr-admin.desktop usr/share/applications/ resource/launchers/timekpr-admin-su.desktop usr/share/applications/ resource/launchers/timekpr-client.desktop etc/xdg/autostart/ # metainfo resource/appstream/org.timekpr.timekpr-next.metainfo.xml usr/share/metainfo/ # forms resource/client/forms/about.glade usr/share/timekpr/client/forms/ resource/client/forms/admin.glade usr/share/timekpr/client/forms/ resource/client/forms/client.glade usr/share/timekpr/client/forms/ # python common common/constants/constants.py usr/lib/python3/dist-packages/timekpr/common/constants/ common/constants/__init__.py usr/lib/python3/dist-packages/timekpr/common/constants/ common/constants/messages.py usr/lib/python3/dist-packages/timekpr/common/constants/ common/log/__init__.py usr/lib/python3/dist-packages/timekpr/common/log/ common/log/log.py usr/lib/python3/dist-packages/timekpr/common/log/ common/utils/config.py usr/lib/python3/dist-packages/timekpr/common/utils/ common/utils/__init__.py usr/lib/python3/dist-packages/timekpr/common/utils/ common/utils/misc.py usr/lib/python3/dist-packages/timekpr/common/utils/ common/utils/notifications.py usr/lib/python3/dist-packages/timekpr/common/utils/ # python client client/admin/adminprocessor.py usr/lib/python3/dist-packages/timekpr/client/admin/ client/gui/admingui.py usr/lib/python3/dist-packages/timekpr/client/gui/ client/gui/clientgui.py usr/lib/python3/dist-packages/timekpr/client/gui/ client/gui/__init__.py usr/lib/python3/dist-packages/timekpr/client/gui/ client/__init__.py usr/lib/python3/dist-packages/timekpr/client/ client/interface/dbus/administration.py usr/lib/python3/dist-packages/timekpr/client/interface/dbus/ client/interface/dbus/daemon.py usr/lib/python3/dist-packages/timekpr/client/interface/dbus/ client/interface/dbus/__init__.py usr/lib/python3/dist-packages/timekpr/client/interface/dbus/ client/interface/dbus/notifications.py usr/lib/python3/dist-packages/timekpr/client/interface/dbus/ client/interface/__init__.py usr/lib/python3/dist-packages/timekpr/client/interface/ client/interface/speech/espeak.py usr/lib/python3/dist-packages/timekpr/client/interface/speech/ client/interface/speech/__init__.py usr/lib/python3/dist-packages/timekpr/client/interface/speech/ client/interface/ui/appindicator.py usr/lib/python3/dist-packages/timekpr/client/interface/ui/ client/interface/ui/__init__.py usr/lib/python3/dist-packages/timekpr/client/interface/ui/ client/interface/ui/notificationarea.py usr/lib/python3/dist-packages/timekpr/client/interface/ui/ client/interface/ui/statusicon.py usr/lib/python3/dist-packages/timekpr/client/interface/ui/ client/timekpra.py usr/lib/python3/dist-packages/timekpr/client/ client/timekprc.py usr/lib/python3/dist-packages/timekpr/client/ # python server server/config/configprocessor.py usr/lib/python3/dist-packages/timekpr/server/config/ server/config/userhelper.py usr/lib/python3/dist-packages/timekpr/server/config/ server/__init__.py usr/lib/python3/dist-packages/timekpr/server/ server/interface/dbus/consolekit/__init__.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/consolekit/ server/interface/dbus/consolekit/manager.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/consolekit/ server/interface/dbus/consolekit/user.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/consolekit/ server/interface/dbus/daemon.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/ server/interface/dbus/__init__.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/ server/interface/dbus/logind/__init__.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/logind/ server/interface/dbus/logind/manager.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/logind/ server/interface/dbus/logind/user.py usr/lib/python3/dist-packages/timekpr/server/interface/dbus/logind/ server/interface/__init__.py usr/lib/python3/dist-packages/timekpr/server/interface/ server/timekprd.py usr/lib/python3/dist-packages/timekpr/server/ server/user/playtime.py usr/lib/python3/dist-packages/timekpr/server/user/ server/user/__init__.py usr/lib/python3/dist-packages/timekpr/server/user/ server/user/userdata.py usr/lib/python3/dist-packages/timekpr/server/user/ # translations (only the ones that are ready will be included) resource/locale/be/LC_MESSAGES/timekpr.mo usr/share/locale/be/LC_MESSAGES/ #resource/locale/cs/LC_MESSAGES/timekpr.mo usr/share/locale/cs/LC_MESSAGES/ resource/locale/de/LC_MESSAGES/timekpr.mo usr/share/locale/de/LC_MESSAGES/ resource/locale/en_GB/LC_MESSAGES/timekpr.mo usr/share/locale/en_GB/LC_MESSAGES/ resource/locale/es/LC_MESSAGES/timekpr.mo usr/share/locale/es/LC_MESSAGES/ resource/locale/fr/LC_MESSAGES/timekpr.mo usr/share/locale/fr/LC_MESSAGES/ resource/locale/fr_CA/LC_MESSAGES/timekpr.mo usr/share/locale/fr_CA/LC_MESSAGES/ #resource/locale/hu/LC_MESSAGES/timekpr.mo usr/share/locale/hu/LC_MESSAGES/ resource/locale/it/LC_MESSAGES/timekpr.mo usr/share/locale/it/LC_MESSAGES/ resource/locale/lv/LC_MESSAGES/timekpr.mo usr/share/locale/lv/LC_MESSAGES/ resource/locale/nl/LC_MESSAGES/timekpr.mo usr/share/locale/nl/LC_MESSAGES/ resource/locale/pt/LC_MESSAGES/timekpr.mo usr/share/locale/pt/LC_MESSAGES/ resource/locale/ru/LC_MESSAGES/timekpr.mo usr/share/locale/ru/LC_MESSAGES/ timekpr-next/debian/control000644 001750 001750 00000003152 15122253705 020023 0ustar00bezvfedubezvfedu000000 000000 Source: timekpr-next Maintainer: Eduards Bezverhijs Uploaders: Eduards Bezverhijs Section: admin Priority: optional Build-Depends: debhelper (>= 7) | debhelper-compat (= 12), dh-python | python-support, gir1.2-gtk-3.0, po-debconf, python3 (>= 3.2), python3-dbus, python3-gi Standards-Version: 3.9.5 Homepage: https://launchpad.net/timekpr-next Rules-Requires-Root: no Package: timekpr-next Architecture: any Depends: gir1.2-ayatanaappindicator3-0.1 | gir1.2-appindicator3-0.1, gir1.2-gtk-3.0, lxpolkit | lxqt-policykit | mate-polkit | policykit-1-gnome | polkit-kde-agent-1 | polkit-1-auth-agent, pkexec | policykit-1, python3 (>= 3.2), python3-dbus, python3-gi, python3-psutil (>= 3.4), systemd | systemd-shim, ${misc:Depends}, ${python3:Depends} Suggests: espeak, gnome-shell-extension-appindicator, python3-espeak, python3-systemd Conflicts: timekpr-next Provides: timekpr Replaces: timekpr, timekpr-beta, timekpr-next-beta Description: Keep control of computer usage Timekpr-nExT is a fresh, simple and easy-to-use time managing software that helps optimizing time spent at computer for Your subordinates, children or even for Yourself. . The software is targeted at parents or supervisors to optimize / limit time spent at computer as they see fit. . Please report any bugs to Timekpr-nExT’s bug tracker on Launchpad at: https://bugs.launchpad.net/timekpr-next timekpr-next/spec/000775 001750 001750 00000000000 15122253261 016126 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/spec/timekpr-next.spec000644 001750 001750 00000022635 15122253417 021442 0ustar00bezvfedubezvfedu000000 000000 %global debug_package %{nil} %define _sitelib %( echo %{python3_sitelib} | cut -c 10- ) Name: timekpr-next Version: 0.5.9 Release: 1.0%{?dist} Summary: Keep control of computer usage Group: System Environment/Daemons License: GPLv3 URL: https://launchpad.net/timekpr-next Source0: https://launchpad.net/%{name}/stable/%{version}/+download/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: ( python3 ) BuildRequires: ( desktop-file-utils ) BuildRequires: ( libappstream-glib or appstream-glib ) BuildRequires: ( systemd ) BuildRequires: ( sed ) BuildRequires: ( grep ) BuildRequires: ( python3-devel) Requires: ( gtk3 >= 3.4 ) Requires: ( polkit or pkexec ) Requires: ( python3 ) Requires: ( python3-dbus or python3-dbus-python ) Requires: ( python3-gobject ) Requires: ( python3-psutil ) Requires: ( ( libindicator-gtk3 and libappindicator-gtk3 ) or ( typelib-1_0-Gtk-3_0 and ( ( libayatana-indicator3-7 and typelib-1_0-AyatanaAppIndicator3-0_1 ) or ( libindicator3-7 and typelib-1_0-AppIndicator3-0_1 ) ) ) ) Requires: ( gettext ) Suggests: ( python3-systemd ) Requires(post): ( systemd ) Requires(preun): ( systemd ) Requires(postun): ( systemd ) %description Timekpr-nExT is a program that tracks and controls the computer usage of your user accounts. You can limit their daily usage based on a timed access duration and configure periods of day when they can or cannot log in. . This may be used for parental control to limit the amount of screen time a child spends in front of the computer. . Please report any bugs to Timekpr-nExT’s bug tracker on Launchpad at: https://bugs.launchpad.net/timekpr-next %prep %setup -q -n %{name} sed -i 's|python3/dist-packages|%{_sitelib}|g' bin/* client/*.py debian/install resource/server/systemd/timekpr.service server/timekprd.py %build %install # remove all root before build rm -rf $RPM_BUILD_ROOT # install files grep -v -e '^#' -e '^$' debian/install | sed -e 's|/$||' -e 's| lib/systemd/| usr/lib/systemd/|g' -e 's|^\(.\+/\)\(.*\) \(.*\)/\?$|mkdir -p %{buildroot}/\3 ; cp \1\2 %{buildroot}/\3|g' | sh - # install pre/post files mkdir mkdir -p %{buildroot}/%{_sharedstatedir}/timekpr %__cp debian/postinst %{buildroot}/%{_sharedstatedir}/timekpr/%{name}.postinst %__cp debian/postrm %{buildroot}/%{_sharedstatedir}/timekpr/%{name}.postrm # appdata file install -Dpm 644 resource/appstream/org.timekpr.%{name}.metainfo.xml %{buildroot}%{_datadir}/metainfo/org.timekpr.%{name}.metainfo.xml appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/org.timekpr.%{name}.metainfo.xml %post # reload units systemctl daemon-reload # post installation %{_sharedstatedir}/timekpr/%{name}.postinst # update mime / desktop update-mime-database %{_datadir}/mime &> /dev/null || : update-desktop-database &> /dev/null || : %preun # before removal if [ $1 == 0 ]; then %{_sharedstatedir}/timekpr/%{name}.postrm fi %postun # update mime / desktop update-mime-database %{_datadir}/mime &> /dev/null || : update-desktop-database &> /dev/null || : %files # specific purpose files %defattr(-,root,root,-) %doc debian/changelog debian/copyright %config(noreplace) /etc/timekpr/timekpr.conf # package files %{_bindir}/* %{_datadir}/applications/* %{_datadir}/icons/hicolor/128x128/apps/* %{_datadir}/icons/hicolor/48x48/apps/* %{_datadir}/icons/hicolor/64x64/apps/* %{_datadir}/icons/hicolor/scalable/apps/* %{_datadir}/locale/be/LC_MESSAGES/* #%%{_datadir}/locale/cs/LC_MESSAGES/* %{_datadir}/locale/de/LC_MESSAGES/* %{_datadir}/locale/en_GB/LC_MESSAGES/* %{_datadir}/locale/es/LC_MESSAGES/* %{_datadir}/locale/fr/LC_MESSAGES/* %{_datadir}/locale/fr_CA/LC_MESSAGES/* #%%{_datadir}/locale/hu/LC_MESSAGES/* %{_datadir}/locale/it/LC_MESSAGES/* %{_datadir}/locale/lv/LC_MESSAGES/* %{_datadir}/locale/nl/LC_MESSAGES/* %{_datadir}/locale/pt/LC_MESSAGES/* %{_datadir}/locale/ru/LC_MESSAGES/* %{_datadir}/metainfo/* %{_datadir}/polkit-1/actions/* %{_datadir}/timekpr %{_prefix}/lib/%{_sitelib}/timekpr %{_prefix}/lib/systemd/system/* %{_sharedstatedir}/timekpr %{_sysconfdir}/dbus-1/system.d/* %{_sysconfdir}/logrotate.d/* %{_sysconfdir}/timekpr %{_sysconfdir}/xdg/autostart/* %changelog * Mon Dec 22 2025 Eduards Bezverhijs - 0.5.9-1.0 - Updated spec file for version 0.5.9, release 1.0 (STABLE) * Mon Nov 24 2025 Eduards Bezverhijs - 0.5.9-0.2 - Updated spec file for version 0.5.9, release 0.2 (BETA) * Mon Nov 10 2025 Eduards Bezverhijs - 0.5.9-0.1 - Updated spec file for version 0.5.9, release 0.1 (BETA) * Sat May 10 2025 Eduards Bezverhijs - 0.5.8-1.0 - Updated spec file for version 0.5.8, release 1.0 (STABLE) * Tue Apr 29 2025 Eduards Bezverhijs - 0.5.8-0.3 - Updated spec file for version 0.5.8, release 0.3 (BETA) * Mon Apr 28 2025 Eduards Bezverhijs - 0.5.8-0.2 - Updated spec file for version 0.5.8, release 0.2 (BETA) * Mon Nov 25 2024 Eduards Bezverhijs - 0.5.8-0.1 - Updated spec file for version 0.5.8, release 0.1 (BETA) * Thu May 30 2024 Eduards Bezverhijs - 0.5.7-1.0 - Updated spec file for version 0.5.7, release 1.0 (STABLE) * Thu Apr 25 2024 Eduards Bezverhijs - 0.5.7-0.1 - Updated spec file for version 0.5.7, release 0.1 (BETA) * Sun Mar 17 2024 Eduards Bezverhijs - 0.5.6-1.0 - Updated spec file for version 0.5.6, release 1.0 (STABLE) * Fri Mar 8 2024 Eduards Bezverhijs - 0.5.6-0.6 - Updated spec file for version 0.5.6, release 0.6 (BETA) * Thu Feb 29 2024 Eduards Bezverhijs - 0.5.6-0.5 - Updated spec file for version 0.5.6, release 0.5 (BETA) * Tue Feb 20 2024 Eduards Bezverhijs - 0.5.6-0.4 - Updated spec file for version 0.5.6, release 0.4 (BETA) * Sat Feb 10 2024 Eduards Bezverhijs - 0.5.6-0.3 - Updated spec file for version 0.5.6, release 0.3 (BETA) * Thu Feb 8 2024 Eduards Bezverhijs - 0.5.6-0.2 - Updated spec file for version 0.5.6, release 0.2 (BETA) * Wed Aug 30 2023 Eduards Bezverhijs - 0.5.6-0.1 - Updated spec file for version 0.5.6, release 0.1 (BETA) * Wed Aug 30 2023 Eduards Bezverhijs - 0.5.5-0.4 - Updated spec file for version 0.5.5, release 0.4 (BETA) * Sun Aug 27 2023 Eduards Bezverhijs - 0.5.5-0.3 - Updated spec file for version 0.5.5, release 0.3 (BETA) * Thu Jun 22 2023 Eduards Bezverhijs - 0.5.5-0.2 - Updated spec file for version 0.5.5, release 0.2 (BETA) * Sat Dec 31 2022 Eduards Bezverhijs - 0.5.5-0.1 - Updated spec file for version 0.5.5, release 0.1 (BETA) * Wed Sep 14 2022 Eduards Bezverhijs - 0.5.4-0.4 - Updated spec file for version 0.5.4, release 0.4 (BETA) * Thu Sep 8 2022 Eduards Bezverhijs - 0.5.4-0.3 - Updated spec file for version 0.5.4, release 0.3 (BETA) * Mon Sep 5 2022 Eduards Bezverhijs - 0.5.4-0.2 - Updated spec file for version 0.5.4, release 0.2 (BETA) * Wed Jun 15 2022 Eduards Bezverhijs - 0.5.4-0.1 - Updated spec file for version 0.5.4, release 0.1 (BETA) * Wed Feb 16 2022 Eduards Bezverhijs - 0.5.3-0.2 - Updated spec file for version 0.5.3, release 0.2 (BETA) * Tue Feb 15 2022 Eduards Bezverhijs - 0.5.3-0.1 - Updated spec file for version 0.5.3, release 0.1 (BETA) * Tue Jun 22 2021 Eduards Bezverhijs - 0.5.2-0.5 - Updated spec file for version 0.5.2, release 0.5 (BETA) * Wed Jun 16 2021 Eduards Bezverhijs - 0.5.2-0.4 - Updated spec file for version 0.5.2, release 0.4 (BETA) * Wed Jun 9 2021 Eduards Bezverhijs - 0.5.2-0.3 - Updated spec file for version 0.5.2, release 0.3 (BETA) * Mon Jun 7 2021 Eduards Bezverhijs - 0.5.2-0.2 - Updated spec file for version 0.5.2, release 0.2 (BETA) * Fri May 7 2021 Eduards Bezverhijs - 0.5.2-0.1 - Updated spec file for version 0.5.2, release 0.1 (BETA) * Fri Mar 5 2021 Eduards Bezverhijs - 0.5.1-0.10 - Updated spec file for version 0.5.1, release 0.10 (BETA) * Thu Jan 7 2021 Eduards Bezverhijs - 0.5.0-8.0 - Updated spec file for version 0.5.0, release 8 (STABLE) * Tue Dec 29 2020 Eduards Bezverhijs - 0.5.0-7.0 - Updated spec file for version 0.5.0, release 7 (STABLE) * Thu Dec 17 2020 Eduards Bezverhijs - 0.5.0-4.0 - Updated spec file for version 0.5.0, release 4 (BETA) * Tue Dec 1 2020 Eduards Bezverhijs - 0.5.0-3.0 - Updated spec file for version 0.5.0, release 3 (BETA) * Wed Nov 18 2020 Eduards Bezverhijs - 0.5.0-2.0 - Updated spec file for version 0.5.0, release 2 (BETA) * Sun Nov 1 2020 Eduards Bezverhijs - 0.5.0-1.0 - Updated spec file for version 0.5.0 (BETA) * Sat Oct 31 2020 Eduards Bezverhijs - 0.4.4-1.0 - Updated spec file for version 0.4.4 (STABLE) * Tue Sep 8 2020 Eduards Bezverhijs - 0.4.3-1.0 - Updated spec file for version 0.4.3 (STABLE) * Tue Aug 18 2020 Eduards Bezverhijs - 0.4.2-1.0 - Updated spec file for version 0.4.2 (STABLE) * Wed Jul 15 2020 Eduards Bezverhijs - 0.4.1-1.0 - Updated spec file for version 0.4.1 (STABLE) * Fri Jul 10 2020 Eduards Bezverhijs - 0.4.0-1.0 - Initial version of the spec file (STABLE) timekpr-next/spec/README000644 001750 001750 00000006173 15122253261 017013 0ustar00bezvfedubezvfedu000000 000000 INSTALLATION INSTRUCTIONS ------------------------- Fedora / openSUSE: Use whichever GUI your distribution has or: sudo rpm -Uhv VERSIONING ---------- Release less than 1.0 is BETA, 1.0+ is STABLE, example: BETA (release 0.6): timekpr-next-0.5.1-0.6.fc32.x86_64 STABLE (release 7.0): timekpr-next-0.5.0-7.0.fc32.x86_64 NOTES ----- If You are using Gnome3 with Gnome Shell, please DO NOT forget to install this (otherwise icon will be hidden)! Fedora: sudo dnf install gnome-shell-extension-appindicator openSUSE: install "KStatusNotifierItem/AppIndicator Support" extension manually from https://extensions.gnome.org/ Enable extensions if needed (for Fedora install Gnome Tweaks application and enable said extension) Let the user log out and in to see the timekpr-nExT in action. ------------------------- REMOVAL instructions -------------------- Fedora: sudo dnf remove timekpr-next openSUSE: sudo zypper remove timekpr-next ------------------------- BUILD instructions (please open terminal and install this in one go not leaving the terminal (unless You know what to do))! --------------------------------------------------------------------------------------------------------------------------- # set version Fedora / openSUSE: export TNVER="0.5.9" export TNREL="0.2" # install build tools Fedora: sudo dnf install rpmdevtools openSUSE: sudo zypper install rpmdevtools rpm-build # this sets up build tree (rpmbuild dir in home directory) Fedora / openSUSE: rpmdev-setuptree # get the timekpr sources Fedora / openSUSE: wget https://launchpad.net/timekpr-next/stable/${TNVER}/+download/timekpr-next-${TNVER}.tar.gz -P $HOME/rpmbuild/SOURCES/ # got to source directory and get the spec file Fedora / openSUSE: cd $HOME/rpmbuild/SPECS/ tar xzf $HOME/rpmbuild/SOURCES/timekpr-next-${TNVER}.tar.gz --strip-components=2 timekpr-next/spec/timekpr-next.spec # install build dependencies Fedora: sudo dnf builddep timekpr-next.spec sudo dnf install libindicator-gtk3 libappindicator-gtk3 python3-psutil gettext openSUSE: sudo zypper install python3 desktop-file-utils appstream-glib systemd sed grep gtk3 python3-dbus-python python3-gobject python3-psutil libayatana-indicator3-7 gettext typelib-1_0-Gtk-3_0 typelib-1_0-AyatanaAppIndicator3-0_1 # build binary package Fedora / openSUSE: rpmbuild -bb timekpr-next.spec # install needs to be adjusted to correct version of distro (example given for FC32) # if installation complains about conflicts with existing package, please remove the old version of package # and then install new one or use --force at the end of the command Fedora / openSUSE: sudo rpm -Uhv --force $HOME/rpmbuild/RPMS/$(arch)/timekpr-next-${TNVER}-${TNREL}*.x86_64.rpm --------------------------------------------------------------------------------------------------------------------------- timekpr-next/spec/debian.install.2.spec.install.sh000775 001750 001750 00000000734 13716566163 024135 0ustar00bezvfedubezvfedu000000 000000 #!/bin/bash # convert debian install file to RPM install file list grep -v -e '^#' -e '^$' ../debian/install | sort | sed \ -e 's|/\+$||' \ -e 's|^\(.\+/\)\(.\+\) \(.\+\)$|/\3|g' \ -e 's|\(.\+\)\(/timekpr\)/.\+$|\1\2|g' \ -e '/\/timekpr$/! s|$|/*|' \ -e 's|/usr/share/|%{_datadir}/|' \ -e 's|/usr/bin/|%{_bindir}/|' \ -e 's|/usr/|%{_prefix}/|' \ -e 's|/etc/|%{_sysconfdir}/|' \ -e 's|/var/lib/|%{_sharedstatedir}/|' \ -e 's|/lib/systemd/|%{_prefix}/lib/systemd/|' \ | sort -u timekpr-next/README.md000644 001750 001750 00000132321 15122253261 016453 0ustar00bezvfedubezvfedu000000 000000 # Timekpr-nExT ## Keep control of computer usage Timekpr-nExT is a fresh, simple and easy-to-use screen-time management application. It helps you optimize the time spent on the computer by your children, subordinates, or even yourself. The application is intended for parents or supervisors who want to limit or shape computer usage in a way that suits their household or environment.
## Overview Timekpr-nExT is designed to give you reliable control over computer usage. This includes the ability to forcibly end user sessions and apply other restrictions or limitations. Please be responsible and inform your users that their activity is being timed and that their session may end abruptly. Notifications can be configured to warn them ahead of time, but ultimately it is up to the user to pay attention to these warnings.
When setting up restrictions, supervisors should read the descriptions of all options and take some time to explore the application before enforcing any settings. Different combinations of options can create a very tailored experience, but remember that Timekpr-nExT is a restrictive tool by design.
_**Note**: This README is updated along with the `beta` releases. If you do not see a specific option in the `stable` series, please wait for its release or use the `beta` version._
## Navigation guide **This README** contains all the details you need, but it is quite large. Below is a simple guide to help you find what you are looking for. * About functionality: - A short description of the [applications](#applications) with a [typical use case](#typicalusecase). *(This is likely the section most parents or supervisors will want to read.)* - For a deeper understanding, see the [detailed description of functionality](#detaileddescription): - Information about the user's side of the software: [client application](#clientapplication) - Information about the supervisor's tools: [administration application](#administrationapplication) - Recently added important features: - Alternative restriction types: [suspend / lock / shutdown](#restrictionlockouttypes) - The ability to limit specific applications or games: [PlayTime functionality](#playtimeconfiguration) - User-controlled notifications: [user configurable notifications](#userconfigurablenotifications) - Time periods where usage does not count toward limits: ["freeride" time periods](#freerideintervals) - Logging to system journal: [systemd journal](#logtojournald) - CLI (console) options and file-based configuration: [additional configuration possibilities](#additionalconfigpossibilities) * **Installation guide**: - Installation and removal [instructions](#installation) for most popular Linux systems * **Support the project**: - You can support development by **[donating](#support)** * Translations: - Help translate Timekpr-nExT into your [language](#translate) * Disclaimer, questions, suggestions, and reporting bugs: - The disclaimer is located [here](#disclaimer), and information about questions, suggestions, and bug reports is found [here](#bugs)
## Applications overview Timekpr-nExT provides two user-facing applications that control how the system manages computer time and restrictions.
#### Timekpr-nExT Client indicator icon This small application places an indicator icon in the system notification area. It shows remaining time, limits, and notifications to the user. ![Timekpr-nExT icon](https://git.launchpad.net/timekpr-next/plain/resource/screenshots/timekpr-next-screenshot-icon-system-notification-area.png) _An informational "padlock" icon appears in the system’s notification area. This is what users automatically see when they log in._
#### Timekpr-nExT Client application The client application opens when the user clicks the indicator icon and selects **"Limits & configuration"**. It provides more detailed information as well as useful configuration options. ![Timekpr-nExT Client application](https://git.launchpad.net/timekpr-next/plain/resource/screenshots/timekpr-next-screenshot-client.png) _This application displays detailed time limits and allows users to adjust some aspects of the functionality. It is intended for the end user._
#### Timekpr-nExT Administration application This application is designed for supervisors or parents. It lets you configure time limits for any user on the system and adjust technical settings for how Timekpr-nExT behaves. ![Timekpr-nExT Administration application](https://git.launchpad.net/timekpr-next/plain/resource/screenshots/timekpr-next-screenshot-admin.png) _The administration tool provides multiple configuration tabs so supervisors can customize restrictions and user experience as needed._
#### Core of Timekpr-nExT Behind the scenes, Timekpr-nExT includes a background service (often called a "daemon"—not a demon!) that monitors the system and enforces all restrictions. There is no screenshot for it, but rest assured: it is always running quietly in the background, doing its job for you. ;)
## Description of functionality This section explains how Timekpr-nExT works behind the scenes, rather than listing every configuration option in detail. **Please note:** Timekpr-nExT relies heavily on tool-tips for explaining individual options. Hover your mouse over any setting to see its description. These hints are very helpful for understanding what each option does.
### Overall features Timekpr-nExT aims to be as precise and user-friendly as possible, while still providing reliable restrictions. A key part of this is predictable and accurate time tracking. By default, Timekpr-nExT checks and updates the user’s time usage every 3 seconds. This ensures precise accounting and provides clear information about remaining time. If users want more or fewer notifications, they can adjust this themselves. Time is not counted when it should not be. For example, Timekpr-nExT avoids counting time when the session is inactive. A session is considered inactive when: - another user is using the computer via user switching, or - the current user’s session is locked and/or the screensaver is active. Time is also not counted when the computer is sleeping or shut down. The rest depends on how the supervisor configures the system. Keep reading for a complete overview of everything Timekpr-nExT can do.
### Administration application The administration application is where supervisors or parents configure time limits, restrictions, and various technical settings for Timekpr-nExT. To open the administration tool, you must either run it as a superuser or add yourself to the `timekpr` system group for password-less access. Most people use superuser mode because it works immediately without additional setup. Running it as superuser is simple: open your application menu, dock, or launcher and choose **"(SU) Timekpr-nExT Control Panel (superuser mode)"**. If you have added yourself to the `timekpr` system group, you can instead launch **"Timekpr-nExT Control Panel"** without entering a password. _**Be aware**: this will NOT work unless you are actually in the `timekpr` group, which may require you to log out and back in to work or a simple restart will take care of that._ _**Note**: The "(SU)" prefix exists because older Gnome3 versions would truncate long application names, making the two modes look identical._
To add yourself to the `timekpr` group, you can use your desktop environment’s user management tool, or run `sudo gpasswd -a $USER timekpr` Replace `$USER` with the correct administrator account if needed. Do not add your child’s or subordinate’s username. After adding yourself, you must log out and back in for the change to take effect.
_**Please note**: Some configuration options are unavailable in password-less mode. These advanced options are rarely needed and should only be used in special situations. Running in superuser mode provides full access to all settings._
### User configuration To configure each user’s limits and restrictions, you must first select them from the user list. The list is taken directly from your operating system, and the initial configuration is created automatically. After that, the list is stored in the configuration directory, and **the configuration remains even if the OS user is deleted**. This means you can re-create a system user without losing their Timekpr-nExT settings. _**Please note:** When you open the administration application, **no user is pre-selected**. This is intentional to ensure the supervisor chooses the correct user and avoids accidental misconfiguration._
#### Tab "Info & today" As the name suggests, this tab shows how much time the user has already spent today and how much time they still have available. Some information is shown only when the user is currently logged in. Live data is more accurate and lets you monitor activity in real time. When the user is not logged in, Timekpr-nExT shows the saved state instead. This saved information is always available but is refreshed less frequently. Time adjustment controls allow supervisors to reward a user with extra time or, if needed, reduce their available time for the day. Remember that adding time does **not** override allowed time periods or the maximum daily allowance. These rules remain in place regardless of adjustments. _**Pro tip**: Move your mouse over any item to read its tool-tip for additional details._
A special value called **"Continuous time available"** shows how much time the user can stay logged in **without interruption**, based on their current daily allowance and allowed time periods. However, it never counts more than “today + tomorrow� combined. Continuous time can stretch past midnight if you configure the allowed periods correctly. For example, if today’s time period ends at 24:00 and tomorrow’s period starts at 00:00, usage can continue smoothly across midnight.
#### Tab "Limit configuration" This tab lets you configure a user’s time restrictions. You can mix and match options to create the daily routine you want. Before diving into the full explanation, here are the two most common setup patterns: * Allow the full day (24:00:00), but restrict access to specific intervals, e.g. 09:00–12:00, 13:00–16:00, and 19:00–21:00. * Give a fixed amount of time per day (e.g. 08:00:00), and define the time range during which they can use those hours, e.g. 09:00–21:00. _**Please note:** Time values follow the ISO 8601 standard: Monday is the first day of the week and the system uses 24-hour time._ --- ##### Week day limits This section configures each day of the week. You can enable or disable computer usage for any day and set different time limits for each one. Days must be enabled or disabled individually, but time limits can be edited for multiple days at once. Select several days (use Ctrl+A for all), choose whether you’re editing hours or minutes, and press the “+� or “–� buttons. You may also edit a single day’s limit by clicking the value in the table and typing it manually. This allows entering seconds too (e.g. 7 → 07:00:00, 7:1:15 → 07:01:15). By default, every day is enabled and users have unlimited time available. --- ##### Hour intervals Hour intervals define when the user is allowed to use the computer. These can be configured per day, or for several days at once by selecting multiple entries. To create an interval, click the **Create** button and then define the start and end times by clicking the interval in the table. You can modify the interval later if needed. Shortcuts also work here: entering `7` becomes 07:00, and `7:15` becomes 07:15.
A special type of interval marked with **“∞�** (unaccounted time interval) means that any time used in that period **does not count** toward the daily allowance. This effectively becomes **free time**, even if the user has no regular time left. This is especially useful for scheduled activities like online classes or homework sessions, where usage should not reduce personal computer time.
Intervals must **not** overlap in any way. However, intervals may touch continuously (e.g. 07:00–13:00 and 13:00–14:30). Adjacent intervals might merge automatically. Keep in mind: if there is even a one-minute gap between intervals, the user will face their configured restriction during the gap—for example, session termination. A design choice in Timekpr-nExT also ensures that a single hour cannot contain more than one interval. A period may start or end inside an hour, but two separate intervals cannot exist within the same hour (e.g. 07:15–09:15 and 09:45–14:30 are **not** allowed, but 07:15–09:00 and 09:45–14:30 **are**). After setting intervals, click **Verify** so the application can check for mistakes. If all is correct, you can apply the configuration. If not, conflicting intervals will be highlighted. By default, the entire day is available. --- ##### Weekly and monthly limits This section lets you adjust weekly and monthly time allowances. Select a period, choose a time unit (day, hour, or minute), and press the “+� or “–� buttons to change the limits. You may also edit a limit directly by clicking the value and typing it manually. This allows editing seconds too (though it’s rarely necessary). Shortcuts work as well: entering `7` creates `07:00:00:00` (days:hours:minutes:seconds), and entering `6:10:5:11` results in `06:10:05:11`. These limits work together with daily limits and hour intervals. The time the user actually gets is **the smallest** of all limits combined. This means that even if the daily limit has not been reached, the user may be restricted if they have already used up their weekly or monthly allowance. By default, the whole week and month are unrestricted. For most families, there’s no need to adjust these values unless weekly or monthly control is desired. ---
#### PlayTime configuration PlayTime is a screen time limiting feature for specific applications or processes. In PlayTime terminology, these are called **activities**. PlayTime expands the usual time tracking by adding control over how long certain applications can run. Effectively, it works like a focused process monitor. Users may run configured activities for the allowed amount of PlayTime. Once the allowance is used up, those applications are terminated. Running them again ends them immediately. Keep in mind that PlayTime is generally treated as a **special time limit inside the regular time limit**, so all normal rules apply—except when **override mode** is enabled (explained later). PlayTime was originally designed for games, but supervisors may monitor any software, such as web browsers, chat apps, or even calculators. _**Please note:** PlayTime time is still counted even during “∞� (unaccounted) intervals—**unless override mode is enabled**._ --- ##### PlayTime options This section contains PlayTime controls, including the main on/off switch and the PlayTime override mode. PlayTime must be enabled **per user**. If it is not enabled for a user, it will not work for them. You must also enable the [PlayTime master switch](#playtimemasterswitch); without it, PlayTime will not function system-wide. By default, PlayTime is disabled.
Below is an overview of PlayTime behavior and modes. The **standard mode** is restrictive. Certain activities can be used for a set amount of time. Once the limit is reached, the application is closed. For example, if Steam is configured and the PlayTime limit is one hour, Steam will close after one hour and cannot be used again until the next day. The **override mode** changes the concept entirely. In override mode, the usual PlayTime limits are ignored. Time spent at the computer is counted **only when PlayTime activities are running**. In other words, the rest of the time becomes “free time.� Using the Steam example: The user can freely use the computer until they start Steam. Then the PlayTime clock starts. If they close Steam before the time is fully used, the remaining time is preserved, and general usage becomes unrestricted according to normal rules.
The option **“Allowed during ‘∞’ intervals�** controls whether PlayTime activities can run during unaccounted ("∞") intervals. - If the option is **disabled**, activities cannot run during unaccounted time intervals at all, even in override mode. Using Steam as an example, the user will be unable to launch it during “∞� time. - If the option is **enabled**, activities may run during unaccounted intervals. In that case, PlayTime still counts usage normally. - If override mode is enabled during an unaccounted interval, **everything is free**: the user can use the activity with no limits, and no time will be counted toward any allowance. This option is useful when unaccounted intervals are used for activities like online school. Supervisors may prevent certain apps from running during these periods by disabling “Allowed during ‘∞’ intervals.� Override mode is not immediately intuitive, but once understood, it can be very useful for precise time accounting. By default, the option is enabled. --- ##### PlayTime limits PlayTime limits work similarly to standard time allowances. The interface is the same, but these limits apply **only to PlayTime activities**. If a day is disabled for PlayTime, the user cannot run any monitored activities; they will close instantly. _**Please note:** PlayTime limits do not apply when override mode is enabled._ --- ##### PlayTime activities This is the most important PlayTime section. Here you configure the activities (processes) that should be monitored. This list is not a simple allowlist or denylist—each activity requires a **process mask**. Determining the correct mask may require using a system monitor tool. Any KDE or GNOME “System Monitor� works well. You can also use a console or SSH. Linux applications can be installed almost anywhere and often by the user themselves—Steam, Lutris, Heroic, and many others install games in user-owned directories. Applications also do not identify themselves as “games� or “restricted programs,� so automatic detection is essentially impossible. That is why the supervisor must choose which programs to monitor.
So here is a general guide on how to determine which processes or masks can be used when configuring PlayTime activities. If you are not familiar with the terminal, this may look intimidating at first. However, you can use graphical system monitoring tools instead. KDE and GNOME both provide “System Monitor� applications that work well for this purpose. Look for columns such as **Process Name**, **Command**, or **Command Line**—these are your best helpers. You can always search online or ask your community how to identify an executable name. The process mask for a PlayTime activity is usually just the executable name, or the full command line if the ["Enhanced activity monitor"](#playtimeenhancedactivitymonitor) is enabled (case-sensitive!). A simple terminal command such as `top -c -d 1` is often enough to find the process you need. Games typically use the most resources while running, so they appear near the top of the list. Look at the COMMAND column. If something looks like the activity you want to limit, take the executable name only—without its full path or any arguments. Example: If you see `/opt/discord-canary/DiscordCanary --type=renderer ...` then the correct mask is just `DiscordCanary`. This is the part after the last slash and before the arguments. Some games behave poorly when switching windows (Alt-Tab). In that case, you can connect via SSH from another device and check the process list there. You may also enter a description for each activity. This description is shown to the user instead of the mask. If no description is provided, the mask itself is shown.
_**Please note**: Process masks can use RegExp (regular expressions), not glob patterns. This is an expert feature and must be used carefully._ Always verify your RegExp. Incorrect expressions may terminate the wrong processes or fail to match anything at all. If a RegExp is invalid, Timekpr-nExT will treat it as a literal string. For example, `*wine*` is not really a valid and useful RegExp, `.*wine.*` is correct. If written incorrectly, the system will literally search for a process named `*wine*`, which almost certainly does not exist. RegExp support does not allow the symbols [], and you should avoid using ^ and $. Internally, Timekpr-nExT automatically anchors patterns, so a mask like `.*wine.*` becomes similar to `^.*wine.*$` (or `/.*wine.*$` when matching full command lines in enhanced mode). PlayTime also uses smart caching and retrieves process lists efficiently. Only processes belonging to the monitored user are checked, counted, or terminated. PlayTime logic is active only when at least one user has PlayTime enabled and at least one activity is configured. ---
#### Tab "Additional options" This section provides extra per-user configuration options. - **Track inactive sessions**: When enabled, every user session is accounted for, even if it is locked or another user is using the computer. Use with caution. - **Hide icon and notifications**: Hides the Timekpr-nExT client icon and almost all notifications. Only critical notifications are shown. If enabled for an unrestricted user, they may not even notice Timekpr-nExT is present. - **Restriction & lockout type**: Determines what action is taken when a user’s time runs out. Be careful when changing from the default. --- ##### Restriction / lockout types **Terminate sessions** Default and restrictive. User session is forcibly logged out immediately. **Kill sessions** Similar to terminate sessions. Attempts a soft kill, but effect is largely the same. **Shutdown computer** Restrictive option. Shuts down the computer when user time expires. Use with caution in multi-user environments. **Suspend computer** Lockout option. Suspends the computer without terminating sessions. More suited for self-control rather than restricting usage. If the computer is woken with no time left, it remains suspended until unlocked. **Suspend / wakeup computer** Lockout option. Similar to suspend, but computer wakes up automatically at the next available time period for the day. Requires specifying allowed wakeup hour interval. Dependent on BIOS/UEFI RTC wakeup support. **Lock screen** Lockout option. Locks the screen when time expires. If unlocked without available time, it locks again shortly. Suited for self-control rather than full restriction. --- ### Timekpr-nExT configuration This tab allows supervisors to configure technical behaviors. Usually, default values are optimal. #### Control options **Final notification** Forces one last notification when user time is almost up, even if the user has disabled notifications. **Termination time** Specifies seconds left before applying the selected restriction/lockout. Allows users to request more time before enforcement. **Countdown time** Specifies seconds left before starting a continuous countdown notification for the final seconds. **Poll interval** Defines the frequency (in seconds) at which Timekpr-nExT updates user sessions and time values. This effectively sets the resolution of time accounting. **Save time** Specifies how often (in seconds) Timekpr-nExT saves calculated time values to disk. Minimizes potential loss during crashes. **Log level** Controls verbosity of logs: - Level 1: minimal (saves space, minimal info) - Level 2: standard (sufficient info for troubleshooting) - Level 3: verbose, memory-intensive, mostly useful for developers Log files are handled by `logrotate` and compressed, so space is not usually an issue. --- #### Tracked sessions Timekpr-nExT tracks the following session types by default: - `x11` (Xorg) - `wayland` - `mir` (less common) Do not modify these unless you understand Linux session types. #### Excluded sessions By default, the following session types are **not tracked**: - `tty` (console sessions via Ctrl+Alt+F[1-7]) - `unspecified` (other unknown types) Modify only if necessary and with understanding of the system. #### Excluded users Allows supervisors to exclude **system users** from time accounting, such as login managers. Do **not** enter regular users here, as it may cause errors. #### Additional options (PlayTime) Several options in this section are related to **PlayTime** functionality. --- ##### PlayTime enabled Controls the **master switch for PlayTime**. - Must be enabled for PlayTime to work globally. - If disabled, no user activities will be tracked, regardless of individual PlayTime settings. --- ##### Enhanced activity monitor Controls whether PlayTime checks the **first 512 characters of the full process command line**, including arguments, against registered activity/process masks. - Without this option, only the executable path and name are checked. - Enables advanced RegExp matching for complex scenarios, e.g., interpreted languages like Python or Java. - Example: For Minecraft (a Java application), a process mask could be `.*java.*minecraft.*`. - **Note:** Changes only apply to newly started processes. --- ### Client application The Timekpr-nExT client shows time metrics and limited configuration options for the user. - Users can view tooltips for detailed explanations of every value. - Appearance may vary depending on the desktop environment ([differences](#desktopenvironmentdifferences)). --- #### Daily limits Displays: - Daily time allowance - Time period restrictions - Time spent / time left Key points: - Icon color reflects remaining time (configurable by the user). - Periods marked with "∞" do not count towards the daily limit. - Unaccounted time intervals turn the icon gray while active. --- #### Additional limits Displays weekly and monthly time limits and usage so far. --- #### PlayTime limits Displays: - Time allowance and activity list for PlayTime - Type of PlayTime mode enabled - Active activity count and descriptions **Note:** Tab is visible only if supervisor enabled PlayTime for the user. --- #### Notifications Users can adjust notifications for time left: - Set thresholds for standard and PlayTime notifications - Assign priority levels **Note:** PlayTime notifications appear only if enabled by supervisor. Tooltips provide detailed guidance. --- #### Configuration Allows users to tailor Timekpr-nExT behavior: - Show seconds in icon - Enable or disable limit change notifications - Configure sound notifications (requires `python3-espeak` or similar) - Adjust notification types and log level **Note:** There may be a [sound notification bug](#quirkssound). ---
## Typical use case Imagine Liane wants to limit computer time for Cartman because he spends too much time online talking to Kyle and Stan _(Kenny doesn’t count—he doesn’t have a computer)_. She also wants to reserve 2 hours on Monday (15:00–17:00) for mandatory anger management classes. Liane wants a flexible schedule within strict time windows for weekdays and holidays. Using Timekpr-nExT, she can configure it as follows: --- **Configuration steps in Timekpr-nExT Administration:** 1. Select username **"cartman"** and open the **Limit configuration** tab. 2. **Monday:** - Set daily time limit: **6 hours** - Add interval **7:30–15:00** - Add interval **15:00–17:00**, check the "**∞**" box (time not counted against limit) - Add interval **17:00–21:00** 3. **Tuesday–Friday:** - Set daily time limit: **6 hours** - Add interval **7:30–21:00** 4. **Holidays (Saturday & Sunday):** - Set daily time limit: **8 hours** - Add interval **9:00–22:30** 5. Click **Apply daily limits** to save restrictions. --- **Resulting behavior:** - Cartman has **6 hours of computer time** Monday–Friday (7:30–21:00). - **15:00–17:00** is free for mandatory classes (doesn’t consume daily limit). - Cartman has **8 hours of computer time** during holidays (9:00–22:30). - Cartman **cannot use the computer** outside the defined intervals or exceed his daily allowance. --- > Typical setups are straightforward, but Timekpr-nExT supports more advanced configurations. > For further details, see [Detailed information](#detaileddescription). ---
## Installation / removal To start using Timekpr-nExT, you need to install it. There are two versions: **beta** (early access) and **stable** (production-ready). > Tip: Logging out and back in after installation is highly recommended. **Availability:** - Ubuntu and derivatives: via **PPA** - ArchLinux / Manjaro: via **AUR** - Debian: native packages (may be outdated) - Fedora: via **johanh's COPR repository** - openSUSE: native packages (from 2025) - Manual installation: Fedora 32+ and openSUSE Leap 15.2+ - NixOS: via **nixos-unstable** (and future nixos-25.11) Installation via terminal is generally faster than GUI, but both methods are supported. **NOTE**: I am not creating packages for manual installation anymore! The ones which were created are for historical purposes or older installations only!!!
#### Stable | Distribution | Stable install | Stable remove | | :--- | :--- | :--- | | Ubuntu & co (via PPA) | ```sudo add-apt-repository ppa:mjasnik/ppa```
```sudo apt-get update```
```sudo apt-get install timekpr-next``` | ```sudo apt-get remove --purge timekpr-next``` | | ArchLinux & Manjaro (via AUR) | ```yay -S timekpr-next``` | ```sudo pacman -Rdd timekpr-next``` | | Fedora | [copr repo](https://copr.fedorainfracloud.org/coprs/johanh/timekpr-next/) _(preferred)_
**or**
[manual installation](https://drive.google.com/drive/folders/1iN1wcPctGhd_OISqzWZ5DigFMVvgSGq9) _(README and packages)_| [copr repo](https://copr.fedorainfracloud.org/coprs/johanh/timekpr-next/) _(preferred)_
**or**
[manual uninstallation](https://drive.google.com/drive/folders/1iN1wcPctGhd_OISqzWZ5DigFMVvgSGq9) _(README)_ | | openSUSE | [manual installation](https://drive.google.com/drive/folders/1iN1wcPctGhd_OISqzWZ5DigFMVvgSGq9)
_(README and packages)_| [manual uninstallation](https://drive.google.com/drive/folders/1iN1wcPctGhd_OISqzWZ5DigFMVvgSGq9)
_(README)_ | | NixOS | set [services.timekpr.enable](https://search.nixos.org/options?channel=unstable&show=services.timekpr.enable) to `true` | set [services.timekpr.enable](https://search.nixos.org/options?channel=unstable&show=services.timekpr.enable) to `false` | --- #### Beta | Distribution | Beta install | Beta remove | | :-- | :--: | --: | | Ubuntu & co (via PPA) | ```sudo add-apt-repository ppa:mjasnik/ppa```
```sudo apt-get update```
```sudo apt-get install timekpr-next-beta``` | ```sudo apt-get remove --purge timekpr-next-beta``` | | ArchLinux & Manjaro (via AUR) | ```yay -S timekpr-next-git``` | ```sudo pacman -Rdd timekpr-next-git``` | | Fedora and openSUSE | [manual installation](https://drive.google.com/drive/folders/1iN1wcPctGhd_OISqzWZ5DigFMVvgSGq9)
_(README and packages)_ | [manual uninstallation](https://drive.google.com/drive/folders/1iN1wcPctGhd_OISqzWZ5DigFMVvgSGq9)
_(README)_ | > **Note:** For ArchLinux and Manjaro, choose your preferred AUR helper if different from the examples above. > Special thanks to **SanskritFritz** (ArchLinux community) for beta testing and maintaining packages. > Thanks to **johanh** (Fedora community) for providing the COPR repo. --- #### Debian Timekpr-nExT is now available as a native Debian package thanks to **Sim (smntov)** and **Anthony Fok (foka)**. Preferred method is same as Ubuntu: | Stable install | Stable remove | Beta | | :--- | :--- | :--- | | ```sudo apt-get update```
```sudo apt-get install timekpr-next``` | ```sudo apt-get remove --purge timekpr-next``` | Not available | > **Note:** Packages built for Debian "sid" (unstable) may work on other versions like "buster" if dependencies are satisfied. > Graphical installers like **KDE Discover** or **GNOME Software** can also be used. > Always use a package created specifically for Debian for best compatibility.
## Compatibility Timekpr-nExT **was** developed to be compatible with most Desktop Environments. During development, around 20 VMs **were** used to test major changes, but not all possible setups are tested in the wild. Currently, testing is mostly on demand, based on bug reports or developer discretion. In other words, nothing gets proactively tested until there is a reason. Tested Desktop Environments include: **KDE, GNOME, Cinnamon, MATE, XFCE** Tested distributions include: **Ubuntu, Manjaro/ArchLinux, Debian, Fedora, openSUSE** > Please check the [nuances](#quirks) section for more detailed information. > If you encounter an issue, see [this](#bugs) and file a bug report. ---
## Information Representation Differences Desktop Environments handle visual representation differently. Below are some key differences: ### Icon Differences - The system tray icon can appear differently across environments: - **GNOME3 / Unity / XFCE**: show the icon with a detailed label beside it. - **KDE / Deepin**: show only the icon; hovering reveals the time left. ### Extensions May Be Needed - Some GNOME3-based distributions require an extension to display the icon. - Recommended extension: [AppIndicator Support](https://extensions.gnome.org/extension/615/appindicator-support/) ### Notification Timeouts / Severity - Certain desktop environments may override Timekpr-nExT’s notification timeout and severity settings. - KDE Plasma respects custom settings the best. Other environments may enforce preconfigured values. ### Future of the Icon - GNOME3 may eventually remove the status icon functionality. If this happens, a workaround will be investigated. ---
## Short and Very Technical Overview > **Warning:** This section is highly technical and not necessary for regular users. Timekpr-nExT relies heavily on **DBUS** for system interaction: - Uses DBUS interfaces provided by the system. - Exposes its own DBUS interfaces. - Can integrate with any client application or control panel that supports DBUS. This architecture allows Timekpr-nExT to be highly extensible for technical users or administrators seeking deeper integration. ### Interfaces Used Timekpr-nExT relies on several system interfaces for its functionality: 1. **systemd login1 interface** - Used for session management. - Mandatory for Timekpr-nExT; without it, the software will not function. - Documentation: [systemd-logind](https://www.freedesktop.org/wiki/Software/systemd/logind/) 2. **FreeDesktop screensaver interfaces** - Used to detect idle time and inhibit screensavers. - Documentation: [Idle Inhibition Spec](https://people.freedesktop.org/~hadess/idle-inhibition-spec/ch05.html) 3. **FreeDesktop notifications interface** - Used to display notifications about time left. - Documentation: [Notification Spec](https://specifications.freedesktop.org/notification-spec/latest/ar01s09.html) 4. **GNOME screensaver interface (fallback)** - Used if FreeDesktop screensaver interfaces are unavailable. - Documentation: [GNOME Screensaver](https://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html) > Timekpr-nExT connects to these DBUS objects once, caches them, and mainly calls them during execution for efficiency. --- ### Additional Configuration Possibilities Timekpr-nExT can be configured through: 1. **Graphical interface (GUI)** 2. **Command-line interface (CLI)** 3. **Direct configuration file editing** --- #### CLI (Command Line Interface) Mode - The **Administration application** can be run in a terminal to manage users and configure limits, with functionality equivalent to the GUI. - CLI usage is restricted to **user-level configuration only**. - To explore CLI options, run `sudo timekpra --help` **Security Note for CLI Usage** CLI usage of Timekpr-nExT follows the same security rules as the graphical interface: - You must be in the `timekpr` group, - or execute the CLI as `root`, - or use `sudo` to gain access. Changes made in CLI or GUI are applied **immediately**, in real-time. > **Note**: before version 0.5.9 CLI returned and accepted time in seconds only, since version 0.5.9 it accepts and can return (optionally) time as time string. --- ### Configuration by Files Timekpr-nExT can also read configuration from files directly, which are applied at **save intervals** (default every 30 seconds). **Important Notes:** - Direct file editing is **not recommended**; prefer GUI or CLI. - Configuration files have a **specific internal structure**. Improper edits can break functionality. - If files are corrupted or unrecognizable, Timekpr-nExT will attempt to **salvage valid options** and **recreate defaults** for damaged entries. ### Configuration Files (Handle with Care) | Purpose | File Location | | --: | :-- | | Main configuration file | `/etc/timekpr/timekpr.conf` | | User configuration files (per user) | `/var/lib/timekpr/config/timekpr.*.conf` | | User control files (per user) | `/var/lib/timekpr/work/timekpr.*.conf` | | Client configuration file | `$HOME/.config/timekpr/timekpr.conf` | --- ### Log Files Timekpr-nExT writes logs to track execution and performance. These files are generally **not meant for regular inspection** by users. They mainly serve as a record in case something goes wrong and can be helpful for debugging. - Log files contain mostly **technical details**; nothing sensitive except usernames (which can be obfuscated if necessary). - From version `0.5.1`, log level changes take effect immediately—no restart required. - Log size can be reduced by lowering log level in the administration app, though level 2 (default) is preferred for troubleshooting.
**Log File Locations** | Logging Area | File Location | | -- | :-- | | Daemon log | `/var/log/timekpr.log` | | Administration application logs | `/tmp/timekpra.*.log` | | Client application logs | `/tmp/timekprc.*.log` | --- **Note:** Since version 0.5.9, log entries may also be written to standard OS logging facilities if the right conditions are met. Specifically, if the `python3-systemd` package is installed, logs are sent to `journald`; otherwise, they remain in the usual log file locations.
**Accessing Logs via System Journal** To gather logs from `journalctl`, use the following commands: | Logging Area | Description | Command (current boot) | Command (all time) | | -- | -- | -- | :-- | | Daemon log | main log file, needed for bug reports | `sudo journalctl -b -t timekprd > timekpr.log` | `sudo journalctl -t timekprd > timekpr.log` | | Administration application logs | for issues involving admin app | `sudo journalctl -b -t timekpra > timekpra.log` | `sudo journalctl -t timekpra > timekpra.log` | | Client application logs | for issues with user client app | `sudo journalctl -b -t timekprc > timekprc.log` | `sudo journalctl -t timekprc > timekprc.log` | After gathering the log files, **compress them** (e.g., using `tar.gz` or `zip`) and attach them to bug reports for faster troubleshooting. Without logs, I **cannot investigate issues** — there’s no way to magically see into your system without this information! In other words - **my crystal ball is broken**! --- ### Quirks Linux distributions vary widely in how they implement standards, so certain **quirks** may appear in Timekpr-nExT: - Desktop Environments (DEs) may implement specifications partially or differently. - Features might behave differently depending on the DE or distribution version. - Quirks can affect **appearance, functionality, or notifications**. > **Note:** These quirks may change as distributions and DEs evolve. Timekpr-nExT aims to support as many versions as possible, so some issues may persist on older versions. #### Sound "bell" notifications - If a user has enabled **Use sound "bell" for notifications**, critical notifications might not appear on the desktop. - They are still registered in the notification system and can be reviewed there. --- #### Blinking cursor / black screen after session termination - Timekpr-nExT relies heavily on `login1` DBUS interfaces to terminate user sessions. - On some systems, this can result in a **black screen or blinking cursor**, giving the impression that the system has frozen. - This is often due to older installations or when the session does not switch to the login manager automatically. - Workaround: Timekpr-nExT tries to detect and switch to the login manager after session termination. - Using the **"kill sessions"** option in lockout/restriction types usually resolves the issue. --- #### Idle time accounting while screen is locked - Different Desktop Environments handle screen locking differently: - **Gnome3-based DEs:** Screen must be locked and turned off for session to be considered inactive. - **KDE, XFCE:** Locking the screen is sufficient. - **Deepin:** Screen locking is incompatible due to deviations from FreeDesktop / Gnome standards. --- #### Technical nuances - These discrepancies can affect **time accounting** and session handling. - Often, these issues cannot be fixed by Timekpr-nExT alone and depend on the DE or distribution version. ##### Time not accounted while user is active - Rapid lid open/close can make `org.freedesktop.login1` report the session as inactive. - Mitigation: Enable **inactive session tracking**, but results may vary. ##### Time not accounted when computer is locked - Some DEs expose `org.freedesktop.ScreenSaver` incorrectly (`GetActive` always false or method not implemented). - Some DEs implement `IdleHint` or `LockedHint` differently or not at all. - If these interfaces are unreliable, idle time tracking may fail. Workarounds are limited. ##### Empty screen after logout - Occasionally, logging out users via `org.freedesktop.login1.Manager` may result in a black screen if the DE does not handle session termination properly. - Using **"kill sessions"** generally resolves this. --- > **Summary:** Timekpr-nExT implements numerous workarounds to support popular DEs, but inconsistencies in Linux distributions can affect functionality. Many quirks are DE-specific and may require configuration adjustments or distribution updates.
## How You Can Help A lot of effort went into developing Timekpr-nExT. If you appreciate the work and would like to contribute, you can do so via **PayPal** or **Bitcoin**: - **PayPal (no account required):** [https://tinyurl.com/yc9x85v2](https://tinyurl.com/yc9x85v2) - **Bitcoin address:** `bc1q57wapz6lxfyxex725x3gs7nntm3tazw2n96nk3` You can also help by **translating Timekpr-nExT** into your language: [https://translations.launchpad.net/timekpr-next](https://translations.launchpad.net/timekpr-next) ---
## Disclaimer Timekpr-nExT originated from the need to improve **timekpr-revived**, focusing on precise time accounting and proper session termination. Initially, it was developed for personal use (to monitor my kid’s computer usage), but that need no longer exists. Key points: - **Proactive feature development is limited:** Expect feature additions mainly from user suggestions or requests. - **Testing on new distributions is limited:** Timekpr-nExT may not be actively tested on the latest OS versions unless bugs are reported. - **Configurability:** Timekpr-nExT is flexible; simple needs can be met without complexity, but advanced configurations are possible. If the application meets your needs, consider showing support [here](#support). Otherwise, suggest features or improvements—you may see them implemented in future updates. ---
## Suggestions and Bug Reporting - **Register suggestions and bugs:** [https://bugs.launchpad.net/timekpr-next](https://bugs.launchpad.net/timekpr-next) - **Ask questions:** [https://answers.launchpad.net/timekpr-next](https://answers.launchpad.net/timekpr-next) - **Prefix beta bugs:** Include `BETA` in the bug title if the issue was found in a beta version. You can also email suggestions/bugs to `edzis"replace this with at symbol"inbox"place a dot here"lv` **REMEMBER: bug reporting without [log files](#logfiles) is useless! Always provide log files to bug reports and questions section, if the issue you are having is related to unexpected behaviour!**
**Bug report tips:** 1. Describe the issue precisely and include steps to reproduce it. 2. Mention your OS distribution, version, and Desktop Environment. 3. Be ready to provide configuration and log files (no sensitive data except usernames). Submitting bugs through Launchpad is preferred, but email reports are also accepted, all this may be addressed as time permits. --- Thanks for choosing Timekpr-nExT! timekpr-next/resource/000775 001750 001750 00000000000 13716566163 017042 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/client/000775 001750 001750 00000000000 13476006650 020311 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/client/forms/000775 001750 001750 00000000000 15122253261 021427 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/client/forms/admin.glade000644 001750 001750 00001004644 15122253261 023524 0ustar00bezvfedubezvfedu000000 000000 True False 3 gtk-new True False 3 gtk-new True False 3 gtk-new True False 5 gtk-add True False 5 gtk-apply True False 5 gtk-apply True False 5 gtk-justify-fill True False 5 gtk-remove 30 600 60 10 30 24 1 4 24 1 4 24 1 4 60 1 15 60 1 15 60 1 15 1 3 1 1 1 31 1 7 23 1 4 60 1 15 3 30 1 3 True False Remove excluded session type 3 gtk-delete True False 3 gtk-delete True False 3 gtk-delete 10 60 30 1 10 5 30 15 1 5 23 1 5 60 1 5 23 1 5 60 1 5 True False gtk-new True False gtk-delete True False gtk-refresh True False gtk-remove True False gtk-add True False gtk-add 24 1 4 24 1 4 True False gtk-remove True False gtk-new True False gtk-delete True False gtk-apply True False gtk-apply True False 5 gtk-revert-to-saved True False gtk-add True False gtk-remove 7 1 5 23 1 5 60 1 5 23 1 3 23 23 1 3 5 30 10 1 5 False Timekpr-nExT administration False timekpr-client True False vertical True False 5 True False Icon, isn't it? True False Icon, isn't it? start 30 30 20 20 128 timekpr-client 6 False True 0 True False Notes, read carefully ;) 10 10 This is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out! True 75 False True 1 False True 10 0 True True True False Users related configuration vertical True False True False 10 Username: False True 10 0 False True 0 True False True False False List of usernames registered on the system 5 10 TimekprUserSelectionLS False True 1 0 False List of usernames registered on the system 15 False True 10 0 Restore True False True True Restore configuration from saved state 5 5 10 TimekprUserSelectionRefreshBTImage False True 1 False True 1 True True True False center center 5 5 5 5 True False start start 5 5 5 vertical 5 True False 5 5 Information about time left / spent True 35 False True 0 True False 5 5 True False Continuous time left. May span more than the current day (realtime, available when user is logged in) end Time left (actual): 0 0 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 end 1 0 True False How long the user was inactive since last login (realtime, available when user is logged in) end Time inactive (actual): 0 1 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 end 1 1 True False Time available today (saved stated, not real-time) end Time left (today): 0 2 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 end 1 2 True False 5 5 5 0 3 True False Time spent today (saved stated, not real-time) end Time spent (today): 0 4 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 end 1 4 True False Time spent this week (saved stated, not real-time) end Time spent (week): 0 5 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 1 5 True False Time spent this month (saved stated, not real-time) end Time spent (month): end 0 6 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 1 6 True False 5 5 5 1 3 False True 1 False True 0 True False 20 20 15 15 vertical False True 1 True False start 5 5 5 vertical 5 True False Allowance adjustments False True 0 True False vertical True False center 10 today's time True True False Choose this to adjust user's time allowance for today True True False True 0 PlayTime True True False Choose this to adjust user's PlayTime allowance for today True True TimekprUserConfTodaySettingsChoiceTimeRB False True 1 False True 0 True False 3 True True False hr 0 0 True True The number of minutes to be adjusted for today's limit 2 TimekprTodayMinAdjustment True if-valid 1 1 True True The number of hours to be adjusted for today's limit 2 TimekprTodayHrAdjustment True if-valid 0 1 True False min 1 0 False True 2 True False 3 3 True True False True True Add specified time (reward) TimekprApplyImageAddTime False True 0 True False True True Subtract specified time (penalty) TimekprApplyImageSubtractTimeImage False True 1 True False True True Set this specific time limit TimekprApplyImageSetTimeImage False True 2 False True 3 False True end 1 False True 2 True False 20 20 15 15 vertical False True 3 True False start start 5 5 5 vertical 5 True False 5 5 Information about PlayTime True 30 False True 0 True False 5 5 5 True False center 5 5 True False Actual PlayTime available today (realtime, available when user is logged in) end PlayTime left (actual): 0 0 True False Format: <hours : minutes : seconds> start 5 00:00:00 end 1 0 True False PlayTime available today (saved stated, not real-time) end PlayTime left (today): 0 2 True False Format: <hours : minutes : seconds> start 5 00:00:00 end 1 2 True False Active PlayTime activity count (realtime, available when user is logged in) end Running activities (actual): 0 1 True False Active PlayTime activity count (realtime, available when user is logged in) start 5 0 end 1 1 True False 5 5 5 0 3 True False 5 5 5 1 3 True False PlayTime spent today (saved stated, not real-time) end PlayTime spent (today): 0 4 True False Format: <hours : minutes : seconds> start 5 00:00:00 end 1 4 0 0 False True 1 False True 4 True False Brief information about time spent and everything related to time management for this day Info & Today False True False center 5 5 5 vertical True False 5 5 True False 5 True False 5 vertical True False 10 True False This lets you configure time limits. 5 Week day limits True 35 False True 0 True False end h True True False Choose hours to be adjusted for selected days. True True False True 0 m True True False Choose minutes to be adjusted for selected days. True TimekprUserTimeLimitsHrRB False True 1 True False True True True True Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment! TimekprUserTimeLimitsAddButtonImage False True 0 True True True Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment! TimekprUserTimeLimitsRemoveButtonImage False True 1 False True 2 False True end 1 False True 0 True True True True in 285 105 True True Lists day of the week and additional information about the day's limit. Please enable / disable days for the user. TimekprWeekDaysLS False multiple False True 1 False True 0 False True 0 True False 15 15 15 15 False True 1 True False True False 5 True False 3 True True True True in 185 105 True True Hour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. TimekprHourIntervalsLS False 0 0 1 True False 10 True False Hour intervals True 20 False True 0 True False True True True Create a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list. TimekprUserConfDaySettingsSetDaysIntervalsAddButtonImage False True 0 True True True Delete the selected time interval from the available list of intervals. TimekprUserConfDaySettingsSetDaysIntervalsRemoveButtonImage False True 1 False True end 1 0 0 False True 0 True False end 10 vertical 5 True False center vertical 3 True False True False gtk-go-back 3 False True 0 True False center enter hour intervals center True word-char 10 10 False True 1 False True 0 True False 15 15 10 10 False True 2 False True 0 True False center vertical 5 verify True True True Verify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted. TimekprUserConfDaySettingsSetDaysIntervalsVerifyButtonImage False True 2 False True 1 False True 1 False True 0 False True 2 True False 15 15 15 15 vertical False True 3 True False 5 5 5 vertical True False 5 vertical True False start Weekly and monthly limits True False True 0 True False end 5 10 True False d True True False Choose days to be adjusted for selected period. True True False True 0 h True True False Choose hours to be adjusted for selected period. True TimekprUserConfWkMonLimitsAdjustmentDayRB False True 1 m True True False Choose minutes to be adjusted for selected period. True TimekprUserConfWkMonLimitsAdjustmentDayRB False True 2 False True 1 True False True True True True Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period. TimekprUserConfWkMonLimitsAdjustmentsIncreaseButtonImage 0 0 True True True Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period. TimekprUserConfWkMonLimitsAdjustmentsDecreaseButtonImage 1 0 False True end 2 False True 1 False True 0 True False 5 vertical True True True in 220 75 True True Weekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration. TimekprUserConfWkMonLimitsLS False 0 False True 0 False True 1 False True 4 False True 0 Apply daily limits True False True True Apply limit all changes made in this page 5 5 TimekprApplyImageDailyImage False True 1 1 True False Daily limit configuration for all week days Limit configuration 1 False True False center 5 5 5 5 vertical True False Settings for PlayTime activities 5 5 10 True False 5 5 10 5 vertical 5 True False start center PlayTime options False True 0 True False 5 True 5 5 True False Enable PlayTime for selected user end Enable PlayTime: right True 30 0 0 True False Enable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user! end Enable PlayTime override: right True 30 0 1 True True False Enable PlayTime for selected user True 1 0 True True False Enable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user! True 1 1 True False Allow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals. end Allowed during "∞" intervals: right True 30 0 2 True True False Allow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals. True 1 2 False True 1 False True 0 True False 5 5 5 vertical True False 10 True False This lets you configure PlayTime limits. start PlayTime limits False True 0 True False end h True True False Choose hours to be adjusted for selected days. True True False True 0 m True True False Choose minutes to be adjusted for selected days. True TimekprUserPlayTimeLimitsHrRB False True 1 True False True True True True Increase daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment! TimekprUserPlayTimeLimitsAddButtonImage False True 0 True True True Decrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment! TimekprUserPlayTimeLimitsRemoveButtonImage False True 1 False True 2 False True end 1 False True 0 True False True True True True in 285 115 True True Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities. TimekprUserPlayTimeLimitsLS False multiple 0 0 False True 1 False True 1 True False 5 5 5 vertical True False 10 True False start PlayTime activities False True 0 True False center True True True True Add new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly. TimekprUserPlayTimeProcessesAdjustmentAddButtonImage False False 0 True True True Remove selected entry from PlayTime activities. TimekprUserPlayTimeProcessesAdjustmentRemoveButtonImage False True 1 False False end 1 False True 0 True False True True True True True in 310 90 True True Please specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting! TimekprUserPlayTimeProcessesLS False 0 0 False True 1 False True 2 False True 0 Apply PlayTime configuration True True True Apply PlayTime limits and configuration changes on this page TimekprUserPlayTimeProcessesApplyImage False True 1 2 True False PlayTime configuration 2 False True False center center 10 10 5 5 vertical True False start 5 5 Additional configuration options False True 0 True False 5 5 10 True False start start 5 5 20 5 5 5 True False Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments. end Track inactive sessions: right True end 35 0 0 True True False Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments. start 0 True 1 0 True False Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user! end Hide icon and notifications: right True end 35 0 1 True True False Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user! start 0 True 1 1 False True 0 True False 15 15 15 15 vertical False True 1 True False start center 5 5 5 5 5 True False Select a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value! end Restriction / lockout type: right True end 35 0 0 True False False vertical terminate sessions True True False When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need! start True True False True 0 kill sessions True True False When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction! start True TimekprUserConfAddOptsLockoutTypeTerminate False True 1 shutdown computer True True False When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction! start True True TimekprUserConfAddOptsLockoutTypeTerminate False True 2 suspend computer True True False When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time. start True TimekprUserConfAddOptsLockoutTypeTerminate False True 3 suspend / wakeup computer True True False When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time. start True TimekprUserConfAddOptsLockoutTypeTerminate False True 4 lock screen True True False When time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes. start True TimekprUserConfAddOptsLockoutTypeTerminate False True 5 1 0 True False end 5 5 vertical False Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI! end Wakeup hour interval: end False True 0 True Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI! 2 2 TimekprWakeUpHourFromAdjustment True if-valid False True 1 True Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI! 2 2 TimekprWakeUpHourToAdjustment True if-valid False True 2 2 0 False True 2 False True 1 Apply configuration True True True Apply additional configuration changes on this page TimekprUserPlayTimeProcessesApplyImage1 False True 2 3 True False Additional configuration Additional options 3 False False True 2 True False Users related configuration User Configuration False True False Timekpr-nExT related configuration center center 10 10 5 5 vertical 5 True False True False 5 5 vertical 5 True False 5 5 Control Timekpr-nExT Settings True 30 False True 0 True False 5 5 5 5 True False True Timekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debug 1 TimekprLoglevelAdjustment True if-valid 1 5 True False Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure. end Poll interval 0 3 True False True Specify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions. 2 TimekprWarningAdjustment True if-valid 1 2 True False This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage. end Save time 0 4 True False True Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure. 2 TimekprPollingAdjustment True if-valid 1 3 True False Number of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it. end Termination time 0 1 True False True This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage. 2 TimekprSaveAdjustment True if-valid 1 4 True False True Number of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it. 2 TimekprTerminationAdjustment True if-valid 1 1 True False Specify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions. end Countdown time 0 2 True False Timekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debug end Log level 0 5 True False Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application! end Final notification 0 0 True False True Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application! 3 TimekprConfigurationFinalNotificationAdjustment True if-valid 60 1 0 False True 1 False True 0 True False 5 5 vertical True False 5 5 Control Timekpr-nExT tracking items end 60 False True 0 True False 5 5 5 5 True True False vertical 5 True False start Tracked Sessions True 17 False True 0 True False end True True True Add tracked session type to the list TimekprAddTrackedSessionsImage False True 0 True True True Remove tracked session type from the list TimekprRemoveTrackedSessionsImage False True 1 False True 1 True True in 130 100 True False True List of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing. True TimekprTrackingSessionsLS False False True 2 False True 0 True False vertical 5 True False Excluded Sessions True 17 False True 0 True False end True True True Add an excluded session type to the list TimekprAddExcludedSessionsImage False True 0 True True True Remove an excluded session type from the list TimekprRemoveExcludedSessionsImage False True 1 False True 1 True True in 130 100 True False True List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing. True TimekprExcludedSessionsLS False False True 2 False True 1 True False vertical 5 True False Excluded Users True 17 False True 0 True False end True True True Add a user to the exclusion list TimekprAddExcludedUsersImage False True 0 True True True Remove a user from the exclusion list TimekprRemoveExcludedUsersImage False True 1 False True 1 True True in 130 100 True False True List of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith". True TimekprExcludedUsersLS False False True 2 False True 2 False True 1 False True 1 True False 5 vertical True False start 5 5 Additional options 25 False True 0 True False 5 5 10 5 5 5 True False This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings! end PlayTime enabled: right True 20 0 0 True True False This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings! True 1 0 True False This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks! end Enhanced activity monitor: right True 20 0 1 True True False This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings! True 1 1 False True 1 False True 2 False True 0 Apply Timekpr-nExT settings True False True True Apply all Timekpr-nExT settings at once 5 TimekprApplyImageAdminSettingsImage False True 1 1 True False Timekpr-nExT Administration Configuration Timekpr-nExT Configuration 1 False False True 1 True False 150 True False Status of Timekpr-nExT admin client 10 10 5 5 vertical False True 0 True False Status of Timekpr-nExT admin client 10 10 5 5 vertical False True 1 False True 2 timekpr-next/resource/client/forms/client.glade000644 001750 001750 00000365704 15122253204 023715 0ustar00bezvfedubezvfedu000000 000000 True False 3 gtk-new True False 3 gtk-new low Information warning Warning important Severe critical Critical True False 3 gtk-delete True False 3 gtk-delete 1 3 1 1 1 30 1 10 30 1 10 False True Timekpr-nExT client False center True timekpr-client normal False True 5 5 5 5 vertical False True expand True False start True False False Status of Timekpr-nExT client start 10 10 vertical True True 0 True True 0 True False end True gtk-apply True False True True Save all changes True True True 1 gtk-close 100 True True True Close the window True True True 2 True True 1 True True 1 True False True False vertical True False True False start 0 True False Icon, isn't it? start 30 20 64 timekpr-client 6 True True 0 True False 5 5 5 5 True False center end 15 5 True False Current effective username Username: start True True 0 True False Current effective username end True True 1 True True 1 False True 0 True False True True True False center 5 5 5 5 True False start 10 vertical 5 True False start Current statistics False True 0 True False start 5 5 7 5 True False Time spent this session or after Timekpr-nExT has been restarted end Time spent (session): True 30 0 0 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 start 1 0 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 1 3 True False Time inactive this session or after Timekpr-nExT has been restarted end Time inactive: True 30 0 1 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 1 1 True False Continuous time left to you. May span more than the current day. end Continuous time left: True 30 0 3 True False Total time available left today in a row, up to the end of the day end Time left today: True 30 0 2 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 1 2 False True 1 0 0 True False True True False True 5 True False True True in 170 True True These are the days and limits that are available to you timekprAllowedDaysDaysLS False False 0 False horizontal 0 1 True False start Days & Limits 0 0 False True 0 True False True 5 True False True True in 115 True True This shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. timekprAllowedDaysIntervalsLS False False 0 False horizontal 0 1 True False start Intervals 0 0 False True 1 1 0 True False Daily limits False True False center 5 5 5 5 15 True False vertical 5 True False start Additional statistics False True 0 True False 5 5 7 5 True False Time spent this week end Time spent (week): 0 0 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 start 1 0 True False Time spent this month end Time spent (month): 0 1 True False Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments. end Track inactive: 0 2 True False True False Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments. 0 True 1 2 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 start 1 1 False True 1 0 0 True False vertical 5 True False start Additional limits False True 0 True False 5 5 7 5 True False Time limit for this week available to you end Time limit (week): 0 0 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 start 1 0 True False Time limit for this month available to you end Time limit (month): 0 1 True False Format: <days : hours : minutes : seconds> start 5 00:00:00:00 start 1 1 False True 1 1 0 1 True False Additional limits 1 False True False center 5 5 5 5 True False start 15 vertical 5 True False start Current PlayTime statistics False True 0 True False 5 5 7 5 True False Total PlayTime available left today end Time left today: 0 3 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 1 3 True False Total PlayTime spent today end Time spent today: 0 2 True False Format: <days : hours : minutes : seconds> start 00:00:00:00 start 1 2 True False True False This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle. 0 True 1 0 True False This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle. end Time limit override: fill True 20 0 0 True False Number of currently active PlayTime activities end Running activities: 0 4 True False Number of currently active PlayTime activities start 0 1 4 True False Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run! end Allowed during "∞": fill True 25 0 1 True False True False Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run! 0 True 1 1 False True 1 0 0 True False 5 True False True True in 170 True True These are days and limits that available to you as part of PlayTime activity restrictions timekprPTAllowedDaysLimitsDaysLS False False 0 False horizontal 0 1 True False start Days & Limits 0 0 1 0 True False 5 True False True True in 215 True True This shows activities / applications which are part of PlayTime restrictions timekprPTAllowedDaysLimitsActsLS False False 0 False horizontal 0 1 True False start Activity / application list 0 0 2 0 2 True False PlayTime limits 2 False True False center 10 10 5 5 5 5 True True False 10 True True True True in 250 90 True True Configuration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in use TimekprUserNotificationConfigLS False 0 0 1 True False 5 True False Notification configuration True 25 False True 0 True False True True True Add new notification threshold to the list TimekprAddTrackedSessionsImage False True 0 True True True Remove notification threshold from the list TimekprRemoveTrackedSessionsImage False True 1 False True end 1 0 0 0 0 True False 10 True True True True in 250 90 True True Configuration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in use TimekprUserPlayTimeNotificationConfigLS False 0 0 1 True False 5 True False PlayTime notification configuration True 30 False True 0 True False True True True Add new PlayTime notification threshold to the list TimekprAddTrackedSessionsImage1 False True 0 True True True Remove PlayTime notification threshold from the list TimekprRemoveTrackedSessionsImage1 False True 1 False True end 1 0 0 1 0 True False 0 1 True False 1 1 3 True False Notifications 3 False True False center center 5 5 5 5 20 True True False Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng". 0 True True False Use speech notifications True 35 0 3 True False True True This sets the logging level. Please do not change this unless you know what you're doing. 2 2 timekprLogLevelLimitsADJ 1 True True 1 False True 0 True False This sets the logging level. Please do not change this unless you know what you're doing. 5 Logging level fill True 30 False True 1 1 3 True True False Specify whether to show a notification when limit configurations or allowance changes 0 True True False Show limit changes True 35 0 2 True True False Specify whether to show all notifications. If unchecked, then only important ones are shown. 0 True True False Show all notifications True 35 0 1 True True False Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons. 0 True True False Show seconds in notification area True 35 0 0 True False True True This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification. 2 2 timekprNotificationTimeoutADJ 1 True True False True 0 True False This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification. 5 Notification timeout (sec) fill True 30 False True 1 1 1 True False True True This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification. 2 2 timekprNotificationTimeoutCriticalADJ 1 True True 1 False True 0 True False This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification. 5 Critical notification timeout (sec) fill True 30 False True 1 1 2 True True False Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support. 0 True True False Use sound "bell" for notifications True 45 1 0 4 True False Configuration 4 False True True 1 0 0 False True 1 timekpr-next/resource/client/forms/about.glade000644 001750 001750 00000007305 15122253204 023537 0ustar00bezvfedubezvfedu000000 000000 False About Timekpr-nExT False center-always True timekpr dialog Timekpr-nExT 0.0.1 Copyright (c) 2018-2024 Eduards Bezverhijs Keep control of computer usage https://launchpad.net/timekpr-next Timekpr-nExT This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. In Debian, see file /usr/share/common-licenses/GPL-3 Eduards Bezverhijs <edzis@inbox.lv> Eduards Bezverhijs <edzis@inbox.lv> (Translations fine-tuning by JP Lord <jplord@gmail.com>) (English fine-tuning by Phil Hudson <phil.hudson@iname.com>) True custom False vertical 2 False start False False 0 True True 1 timekpr-next/resource/launchers/000775 001750 001750 00000000000 14575617135 021026 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/launchers/timekpr-admin.desktop000600 001750 001750 00000001227 14575617135 025152 0ustar00bezvfedubezvfedu000000 000000 [Desktop Entry] Version=1.0 Name=Timekpr-nExT Control Panel Name[de]=Timekpr-nExT-Systemsteuerung Name[fr]=Panneau de configuration Timekpr-nExT Name[it]=Pannello di controllo Timekpr-nExT Name[lv]=Timekpr-nExT vadÄ«bas panelis Comment=Keep control of computer usage Comment[de]=Kontrolle der Computernutzung Comment[fr]=Gardez le contrôle de l'utilisation de l'ordinateur Comment[it]=Mantieni il controllo sull'utilizzo del computer Comment[lv]=UzturÄ“t kontroli pÄ�r datora lietoÅ¡anu Exec=/usr/bin/timekpra Icon=timekpr Terminal=false Type=Application Categories=System;Settings;GTK; StartupNotify=true X-AppStream-Ignore=true X-Ubuntu-Gettext-Domain=timekpr timekpr-next/resource/launchers/timekpr-admin-su.desktop000600 001750 001750 00000001444 14575617135 025600 0ustar00bezvfedubezvfedu000000 000000 [Desktop Entry] Version=1.0 Name=(SU) Timekpr-nExT Control Panel (superuser mode) Name[de]=(SU) Timekpr-nExT-Systemsteuerung (Superuser-Modus) Name[fr]=(SU) Panneau de configuration Timekpr-nExT (mode superutilisateur) Name[it]=(SU) Pannello di controllo Timekpr-nExT (modalità superutente) Name[lv]=(SU) Timekpr-nExT vadÄ«bas panelis (administratora režīms) Comment=Keep control of computer usage Comment[de]=Kontrolle der Computernutzung Comment[fr]=Gardez le contrôle de l'utilisation de l'ordinateur Comment[it]=Mantieni il controllo sull'utilizzo del computer Comment[lv]=UzturÄ“t kontroli pÄ�r datora lietoÅ¡anu Exec=pkexec /usr/bin/timekpra Icon=timekpr Terminal=false Type=Application Categories=System;Settings;GTK; StartupNotify=true X-AppStream-Ignore=true X-Ubuntu-Gettext-Domain=timekpr timekpr-next/resource/launchers/timekpr-client.desktop000600 001750 001750 00000001104 14575617135 025332 0ustar00bezvfedubezvfedu000000 000000 [Desktop Entry] Version=1.0 Name=Timekpr-nExT Client Name[de]=Timekpr-nExT-Client Name[fr]=Client Timekpr-nExT Name[it]=Client Timekpr-nExT Name[lv]=Timekpr-nExT klients Comment=Keep control of computer usage Comment[de]=Kontrolle der Computernutzung Comment[fr]=Gardez le contrôle de l'utilisation de l'ordinateur Comment[it]=Mantieni il controllo sull'utilizzo del computer Comment[lv]=UzturÄ“t kontroli pÄ�r datora lietoÅ¡anu Exec=/usr/bin/timekprc Icon=timekpr-client Terminal=false Type=Application Categories= X-GNOME-Autostart-enabled=true X-Ubuntu-Gettext-Domain=timekpr timekpr-next/resource/locale/000775 001750 001750 00000000000 15122253261 020262 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/timekpr.pot000644 001750 001750 00000174021 15122253261 022464 0ustar00bezvfedubezvfedu000000 000000 #, fuzzy msgid "" msgstr "" "Project-Id-Version: Timekpr nExT\n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2019-03-28 09:50+0200\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Eduards Bezverhijs \n" "Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.6\n" "X-Poedit-Basepath: ../..\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __:1,2\n" "X-Poedit-SearchPath-0: common/constants/messages.py\n" "X-Poedit-SearchPath-1: resource/client/forms\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "" #: common/constants/messages.py:33 msgid "" "==> get user configuration and time information from the server, example" msgstr "" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not " "exceed the allowed days for the user, example" msgstr "" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, " "example" msgstr "" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be " "set" msgstr "" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "" #: common/constants/messages.py:116 #, python-format msgid "" "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "passed" msgstr "" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct" msgstr "" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "" "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT " "log files" msgstr "" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "" "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log " "files" msgstr "" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "" "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "" #: common/constants/messages.py:160 msgid "Connected" msgstr "" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "" #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is " "running" msgstr "" #: common/constants/messages.py:165 msgid "Started" msgstr "" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, " "but no displays are available, thus running in CLI..." msgstr "" #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "" msgstr[1] "" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "" #: common/constants/messages.py:211 msgid "Time left..." msgstr "" #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "" #: common/constants/messages.py:213 msgid "About" msgstr "" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "" #: common/constants/messages.py:217 msgid "Day" msgstr "" #: common/constants/messages.py:218 msgid "Enabled" msgstr "" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "" #: common/constants/messages.py:220 msgid "From" msgstr "" #: common/constants/messages.py:221 msgid "from..." msgstr "" #: common/constants/messages.py:222 msgid "To" msgstr "" #: common/constants/messages.py:223 msgid "to..." msgstr "" #: common/constants/messages.py:224 msgid "Period" msgstr "" #: common/constants/messages.py:226 msgid "Weekly" msgstr "" #: common/constants/messages.py:227 msgid "Monthly" msgstr "" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "" #: common/constants/messages.py:232 msgid "Username" msgstr "" #: common/constants/messages.py:233 msgid "username..." msgstr "" #: common/constants/messages.py:234 msgid "Process mask" msgstr "" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "" #: common/constants/messages.py:236 msgid "Process description" msgstr "" #: common/constants/messages.py:237 msgid "process description..." msgstr "" #: common/constants/messages.py:238 msgid "Time" msgstr "" #: common/constants/messages.py:239 msgid "time..." msgstr "" #: common/constants/messages.py:240 msgid "Importance" msgstr "" #: common/constants/messages.py:241 msgid "importance..." msgstr "" #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "" msgstr[1] "" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "" msgstr[1] "" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "" msgstr[1] "" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "" msgstr[1] "" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "" #: common/constants/messages.py:278 msgid "n/a" msgstr "" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see " "file /usr/share/common-licenses/GPL-3" msgstr "" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have " "to be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in " "superuser (administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, " "available when user is logged in)" msgstr "" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 #: resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 #: resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 #: resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 #: resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 #: resource/client/forms/client.glade:1011 msgid "Format: " msgstr "" #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when " "user is logged in)" msgstr "" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "" #: resource/client/forms/admin.glade:1150 #: resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "" #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "" #: resource/client/forms/admin.glade:1196 #: resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "" #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 #: resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "" #: resource/client/forms/admin.glade:1374 #: resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "" #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 #: resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "" #: resource/client/forms/admin.glade:1390 #: resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "" #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same " "hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "" #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "" #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "" #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "" #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or " "hours or minutes) for the selected period." msgstr "" #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or " "hours or minutes) for the selected period." msgstr "" #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit " "configuration." msgstr "" #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "" #: resource/client/forms/admin.glade:2114 #: resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "" #: resource/client/forms/admin.glade:2130 #: resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "" #: resource/client/forms/admin.glade:2186 #: resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted " "(\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted " "towards PlayTime limits, otherwise applications in PlayTime activity list " "will be terminated as soon as they are started during unaccounted (\"∞\") " "time intervals." msgstr "" #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "" #: resource/client/forms/admin.glade:2253 #: resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) " "for selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) " "for selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for " "PlayTime activities." msgstr "" #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity " "list directly." msgstr "" #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "" #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as " "case sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "" #: resource/client/forms/admin.glade:2639 #: resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This " "varies among desktop environments." msgstr "" #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "" #: resource/client/forms/admin.glade:2679 #: resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control " "purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be " "locked and put to sleep again after some time." msgstr "" #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken " "up at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control " "purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be " "locked and put to sleep again after some time." msgstr "" #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control " "purposes." msgstr "" #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "" #: resource/client/forms/admin.glade:3021 #: resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "" #: resource/client/forms/admin.glade:3112 #: resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" #: resource/client/forms/admin.glade:3132 #: resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "" #: resource/client/forms/admin.glade:3148 #: resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" #: resource/client/forms/admin.glade:3164 #: resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a " "frequency at which user state is saved to disk for permanent storage." msgstr "" #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "" #: resource/client/forms/admin.glade:3198 #: resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can " "be done to prevent it." msgstr "" #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "" #: resource/client/forms/admin.glade:3281 #: resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user " "in client application!" msgstr "" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, " "\"jsmith\", not \"John Smith\"." msgstr "" #: resource/client/forms/admin.glade:3722 #: resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "" #: resource/client/forms/admin.glade:3866 #: resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "" #: resource/client/forms/client.glade:297 #: resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "" #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "" #: resource/client/forms/client.glade:489 #: resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "" #: resource/client/forms/client.glade:573 #: resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen " "is locked is NOT taken into account. This varies among desktop environments." msgstr "" #: resource/client/forms/client.glade:820 #: resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "" #: resource/client/forms/client.glade:1027 #: resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "" #: resource/client/forms/client.glade:1060 #: resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "" #: resource/client/forms/client.glade:1086 #: resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open " "until dismissed, however this behaviour highly depends on Desktop " "Environment in use" msgstr "" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open " "until dismissed, however this behaviour highly depends on Desktop " "Environment in use" msgstr "" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "" #: resource/client/forms/client.glade:1593 #: resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or " "allowance changes" msgstr "" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides " "notification icons." msgstr "" #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "" #: resource/client/forms/client.glade:1720 #: resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about " "time left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, " "in which case this setting will not have any effect on notification." msgstr "" #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "" #: resource/client/forms/client.glade:1776 #: resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications " "about time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, " "in which case this setting will not have any effect on notification." msgstr "" #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce " "a new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "" timekpr-next/resource/locale/es/000700 001750 001750 00000000000 14575617250 020672 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/es/LC_MESSAGES/000700 001750 001750 00000000000 15122253261 022442 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/es/LC_MESSAGES/timekpr.po000644 001750 001750 00000307040 15122253261 024473 0ustar00bezvfedubezvfedu000000 000000 # Spanish translation for timekpr-next # Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:18+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "ejemplo, escribe ayuda" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "ejemplo, elige un usuario guardado de la lista desde el servidor" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "por ejemplo, consigue la configuración de usuario y la información horaria " "desde el servidor" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "por ejemplo, obtenga información del usuario en tiempo real del servidor" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "ejemplo, fija los días permitidos para el usuario" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "ejemplo, señala las horas permitidas para el día especificado, o \"ALL\" para " "cada día. Opcionalmente especifica los minutos de comienzo y finalización en " "corchetes así [x-y], además especifica ! delante de la hora si no tiene que ser " "tenida en cuenta (horario libre para el usuario)" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "ejemplo, ajusta los límites para todos los días permitidos, el número de " "valores no debe exceder los días permitidos para el usuario" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "ejemplo, ajusta el límite de tiempo a la semana" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "ejemplo, ajusta el límite al mes" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "ejemplo, fija si seguir las sesiones sin actividad del usuario" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "ejemplo, ajusta si ocultar el icono bandeja y evitar notificaciones" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> establecer restricción / tipo de bloqueo (\"lock\" - bloquear sesión, " "\"suspend\" - suspender el ordenador, \"suspendwake\" - suspender y despertar, " "\"terminate\" - terminar sesiones, \"kill\" - finalizar sesiones, \"shutdown\" " "- apagar el ordenador), ejemplos" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> establecer el tiempo restante para el usuario en el momento actual de " "tiempo: \"+\" (añadir tiempo), \"-\" (restar tiempo), \"=\" (establecer el " "tiempo exacto disponible), ejemplo (añadir una hora)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> establecer si PlayTime está activado para el usuario, ejemplo" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> establecer si PlayTime debe contabilizarse en lugar de la actividad normal, " "ejemplo" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> establecer si se permiten las actividades de PlayTime durante los " "intervalos no contabilizados (\"∞\"), ejemplo" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "" "==> establecer los días permitidos para las actividades de PlayTime, ejemplo" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> establecer límites de PlayTime para todos los días permitidos, el número de " "valores no debe exceder los días permitidos de PlayTime para el usuario, ejemplo" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> establecer máscaras de proceso de actividad PlayTime, para el que se " "contabiliza el tiempo, ejemplo" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> establecer PlayTime restante para el usuario en el momento actual de " "tiempo: \"+\" (añadir tiempo), \"-\" (restar tiempo), \"=\" (establecer el " "tiempo exacto disponible), ejemplo (añadir una hora)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Los tipos de sesiones de control no pasan" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "La lista de tipos de sesiones de control es incorrecta" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "La lista de tipos de sesiones de control no es correcta y no se puede configurar" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "Los tipos de sesión excluida no puede ser validada" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "La lista de sesiones excluidas no es correcta" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "" "La lista de tipos de sesión excluidos no es correcta y no puede establecerse" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "La lista de usuarios excluidos no paso" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "La lista de usuarios excluidos no es correcta" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "La lista de usuarios excluidos no es correcta y no se puede establecer" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "No se ha superado el tiempo de preaviso final" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "El tiempo final de aviso \"%%s\" no es correcto" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "El tiempo de advertencia final \"%%s\" no es correcto y no puede establecerse" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "No se ha superado el plazo de notificación final" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "La hora de notificación final \"%%s\" no es correcta" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "La hora de notificación final \"%%s\" no es correcta y no puede establecerse" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "El tiempo de finalizacion no paso" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "La hora de finalización \"%%s\" no es correcta" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "La hora de finalización \"%%s\" no es correcta y no puede establecerse" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Pista inactiva no se pasa" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Pista inactiva no se pasa" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "La pista inactiva \"%%s\" no es correcta y no se puede establecer" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "No se pasa el nivel de registro" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "El nivel de registro \"%%s\" no es correcto" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "El nivel de registro \"%%s\" no es correcto y no se puede establecer" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "No ha transcurrido el tiempo de sondeo" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "El tiempo de sondeo \"%%s\" no es correcto" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "La hora de sondeo \"%%s\" no es correcta y no se puede establecer" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "No se ha superado la hora de guardado" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "Guardar tiempo \"%%s\" no es correcto" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "El tiempo de guardado \"%%s\" no es correcto y no se puede establecer" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "No se pasa la bandera PlayTime" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "El indicador PlayTime \"%%s\" no es correcto" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "El indicador PlayTime \"%%s\" no es correcto y no se puede establecer" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "No se pasa la bandera del monitor de actividad mejorada de PlayTime" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "Bandera mejorada del monitor de actividad PlayTime \"%%s\" no es correcto" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "El indicador \"%%s\" del monitor de actividad mejorado de PlayTime no es " "correcto y no puede establecerse." #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "El número de día \"%%s\" del usuario debe estar presente" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "El número de día \"%%s\" del usuario debe estar comprendido entre 1 y 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "Las horas permitidas del usuario \"%%s\" no son correctas y no se pueden " "establecer" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "No se pasa la lista de días \"%%s\" del usuario" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "La lista de días \"%%s\" del usuario no es correcta" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" "La lista de días \"%%s\" del usuario no es correcta y no se puede establecer" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "No se ha pasado la lista de límites diarios \"%%s\" del usuario" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "La lista de límites diarios \"%%s\" del usuario no es correcta" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "La lista de límites diarios \"%%s\" del usuario no es correcta y no puede " "establecerse" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "La operación de tiempo \"%%s\" del usuario puede ser una de estas: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "El límite de tiempo \"%%s\" del usuario no es correcto" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "El límite de tiempo \"%%s\" del usuario no es correcto y no puede establecerse" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "No se ha superado la asignación mensual del usuario \"%%s" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "La asignación mensual \"%%s\" del usuario no es correcta" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "La asignación mensual \"%%s\" del usuario no es correcta y no se puede " "establecer" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "No se ha pasado el indicador de vía inactiva \"%%s\" del usuario" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "El indicador de vía inactiva \"%%s\" del usuario no es correcto" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "El indicador de vía inactiva \"%%s\" del usuario no es correcto y no se puede " "establecer" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" "No se ha pasado el indicador \"%%s\" de ocultar icono de bandeja del usuario" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "" "El indicador de icono de bandeja oculta \"%%s\" del usuario no es correcto" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "El indicador de icono de bandeja oculta \"%%s\" del usuario no es correcto y no " "se puede establecer" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "La restricción/tipo de bloqueo \"%%s\" del usuario no se ha superado" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "El tipo de restricción/bloqueo \"%%s\" del usuario no es correcto" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "El tipo de restricción/bloqueo \"%%s\" del usuario no es correcto y no puede " "establecerse" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "La asignación semanal \"%%s\" del usuario no se ha superado" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "La asignación semanal \"%%s\" del usuario no es correcta" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "La asignación semanal \"%%s\" del usuario no es correcta y no se puede " "establecer" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "" "No se ha pasado el indicador de activación de PlayTime \"%%s\" del usuario." #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "El indicador de activación de PlayTime \"%%s\" del usuario no es correcto" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "El indicador de activación de PlayTime \"%%s\" del usuario no es correcto y no " "puede activarse." #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "No se ha pasado el indicador \"%%s\" de anulación de PlayTime del usuario." #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "El indicador \"%%s\" de anulación de PlayTime del usuario no es correcto." #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "El indicador de anulación de PlayTime \"%%s\" del usuario no es correcto y no " "puede establecerse." #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "El indicador \"%%s\" PlayTime allowed during unaccounted intervals no se ha " "pasado" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "El indicador \"%%s\" PlayTime permitido durante intervalos no contabilizados no " "es correcto" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "El indicador \"%%s\" PlayTime allowed during unaccounted intervals del usuario " "no es correcto y no se puede establecer" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "La lista de días de PlayTime \"%%s\" del usuario no se pasa" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "La lista de días de PlayTime \"%%s\" del usuario no es correcta" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "La lista de días de PlayTime \"%%s\" del usuario no es correcta y no se puede " "establecer" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "La lista de días de PlayTime \"%%s\" del usuario no es correcta y no se puede " "establecer" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "La lista de límites de días de PlayTime \"%%s\" del usuario no es correcta" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "La lista de límites de días de PlayTime \"%%s\" del usuario no es correcta y no " "se puede establecer" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "La operación \"%%s\" PlayTime del usuario puede ser una de estas: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "" "El límite de tiempo de reproducción establecido por el usuario \"%%s\" no es " "correcto." #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "El límite de tiempo de PlayTime \"%%s\" del usuario no es correcto y no puede " "establecerse" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERROR inesperado al cargar la configuración. Por favor, inspeccione los " "archivos de registro Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERROR inesperado al obtener la configuración. Por favor, inspeccione los " "archivos de registro Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERROR inesperado al obtener la configuración de usuario. Por favor, inspeccione " "los archivos de registro Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "ERROR inesperado al obtener la lista de usuarios. Por favor, inspeccione los " "archivos de registro Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERROR inesperado al actualizar la configuración. Por favor, inspeccione los " "archivos de registro Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "ERROR inesperado al actualizar el control. Por favor, inspeccione los archivos " "de registro Timekpr-nExT" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "No se encuentra la configuración del usuario \"%%s" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "No se encuentra el archivo de control de usuario \"%%s" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "El usuario \"%%s\" no se encuentra" #: common/constants/messages.py:160 msgid "Connected" msgstr "Conectado" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "Conectándose..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "No se ha podido conectar" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Vuelva a abrir la aplicación si es superusuario y Timekpr-nExT se está " "ejecutando" #: common/constants/messages.py:165 msgid "Started" msgstr "Iniciada" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "Configuración de usuario recuperada" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Configuración recuperada" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "Se ha procesado la pista inactiva para el usuario" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Ocultar icono de bandeja para el usuario ha sido procesado" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Se ha procesado el tipo de restricción / bloqueo para el usuario" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Se ha procesado el tiempo adicional para el usuario" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Se ha procesado el PlayTime adicional para el usuario" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "Se han procesado los límites semanales y mensuales de los usuarios" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Se han procesado los días permitidos para el usuario" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Se han procesado los límites de tiempo por día para el usuario" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Se han procesado las horas permitidas para el usuario" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "Se ha guardado la configuración de Timekpr-nExT" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Se han guardado los límites de tiempo de los usuarios" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "Se han guardado los límites de PlayTime del usuario" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Se han guardado las opciones adicionales del usuario" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "Habilitar PlayTime para el usuario ha sido procesado" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "Se ha procesado el indicador de anulación de PlayTime para el usuario" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "Se ha procesado el indicador PlayTime permitido durante intervalos no " "contabilizados para el usuario" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "Se han procesado los días permitidos de PlayTime para el usuario" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "Se han procesado los límites de días de PlayTime para el usuario" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "Se han procesado las actividades PlayTime del usuario" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Seleccione un día para fijar los límites" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "Ese intervalo se solapa con otro ya existente" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "El inicio de ese intervalo entra en conflicto con otro ya existente." #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "El final de ese intervalo entra en conflicto con otro ya existente." #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "El inicio o final de ese intervalo duplica uno existente" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "El inicio del intervalo no puede coincidir con el final" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "El inicio del intervalo no puede ser posterior al final" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Seleccione un intervalo de horas para eliminar" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Intervalo eliminado" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "La interfaz Timekpr-nExT aún no está lista" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "ADVERTENCIA: Se ha solicitado que la utilidad de administración Timekpr-nExT se " "ejecute en modo GUI, pero no hay pantallas disponibles, por lo que se ejecuta " "en CLI..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "El comando no es correcto." #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "El uso de Timekpr-nExT admin client es el siguiente:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== AVISO ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "los valores numéricos del tiempo se expresan en segundos" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "los días de la semana se numeran según la norma ISO 8601 (es decir, el lunes es " "el primer día, formato: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "los días de la semana se numeran según la norma ISO 8601 (es decir, el lunes es " "el primer día, formato: 1-7)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s usuario en total:" msgstr[1] "%(n)s usuarios en total:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Configuración para el usuario %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Tiempo restante..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Límites y configuración" #: common/constants/messages.py:213 msgid "About" msgstr "Acerca de" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Mantener control del uso del equipo" #: common/constants/messages.py:217 msgid "Day" msgstr "Día" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Activado" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Límite" #: common/constants/messages.py:220 msgid "From" msgstr "De" #: common/constants/messages.py:221 msgid "from..." msgstr "de..." #: common/constants/messages.py:222 msgid "To" msgstr "A" #: common/constants/messages.py:223 msgid "to..." msgstr "a..." #: common/constants/messages.py:224 msgid "Period" msgstr "Periodo" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Semanal" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Mensual" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Tipo de sesión" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "tipo de sesión..." #: common/constants/messages.py:232 msgid "Username" msgstr "Usuario" #: common/constants/messages.py:233 msgid "username..." msgstr "nombre de usuario..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Máscara de proceso" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "máscara ejecutable..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Descripcción de proceso" #: common/constants/messages.py:237 msgid "process description..." msgstr "descripción del proceso..." #: common/constants/messages.py:238 msgid "Time" msgstr "Tiempo" #: common/constants/messages.py:239 msgid "time..." msgstr "tiempo..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Importancia" #: common/constants/messages.py:241 msgid "importance..." msgstr "importancia..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Notificación Timekpr-nExT" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Notificación Timekpr-nExT PlayTime" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Su tiempo no está limitado hoy" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "" "El tiempo disponible ha cambiado, ¡tenga en cuenta el nuevo tiempo restante!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "La configuración del límite de tiempo ha cambiado, ¡tenga en cuenta la nueva " "configuración!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "¡Hay un problema de conexión con el demonio Timekpr-nExT (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "¡Hay un problema de comunicación con Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "¡Error de inicialización del icono (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Su tiempo se ha acabado, será desconectado a la fuerza en" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Su tiempo se ha acabado, su ordenador se apagará forzosamente en" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Su tiempo se ha acabado, su sesión será bloqueada a la fuerza" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Su tiempo se ha acabado, su sesión será bloqueada a la fuerza en" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s segundo" msgstr[1] "%(n)s segundos" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Error interno de conexión, compruebe los archivos de registro" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Tienes %(n)s hora" msgstr[1] "Tienes %(n)s horas" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minuto" msgstr[1] "%(n)s minutos" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s segundo restante" msgstr[1] "%(n)s segundos restantes" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s segundo de PlayTime restante" msgstr[1] "%(n)s segundos de tiempo de juego restantes" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "La función \"%%s\", que se utiliza para detectar el tiempo de inactividad, no " "puede activarse.\n" "El tiempo de inactividad puede no contabilizarse cuando la pantalla está " "bloqueada." #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "ERROR INESPERADO: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "Error de analisis de parametros (por favor, compruebe la validez del " "parámetro): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Comando FALLIDO: acceso denegado" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Comando FALLIDO: no se ha aceptado la comunicación" #: common/constants/messages.py:278 msgid "n/a" msgstr "No aplica" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Acerca de Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los " "términos de la Licencia General Pública GNU (GPL) publicados por la Free " "Software Foundation en su versión 3 o en cualquier versión posterior.\n" "\n" "Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA " "GARANTÃ�A; sin tan siquiera la garantía implícita de MERCADIBILIDAD o CALIDAD " "PARA UN OBJETIVO CONCRETO. Mire la Licencia Pública General GNU para más " "detalles.\n" "\n" "Debería haber recibido una copia de Licencia Pública General GNU con este " "programa. Si no es así, entre en . En Debian " "puede ver el archivo en /usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(Traducción revisada por Ivan Ledesma )\n" "(Ajuste en Español por Ivan Ledesma )" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Eliminar el tipo de sesión excluida" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Administración Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Icono, ¿verdad?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Notas, lea atentamente ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Esta es la aplicación de configuración de Timekpr-nExT. Le permite establecer " "límites de tiempo para sus usuarios individuales, así como opciones generales " "de Timekpr-nExT.\n" "Para utilizar esta aplicación, debe ejecutarla como superusuario o formar parte " "del grupo timekpr.\n" "Tenga en cuenta que la \"Configuración de Timekpr-nExT\" sólo está disponible " "en modo superusuario (administrador).\n" "\n" "Por favor, realice la configuración con cuidado: ¡no se bloquee!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Configuración relacionada con los usuarios" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Nombre de Usuario:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Lista de nombres de usuario registrados en el sistema" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Restaurar" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Restaurar la configuración desde el estado guardado" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Información sobre el tiempo transcurrido" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Tiempo continuo restante. Puede abarcar más del día actual (en tiempo real, " "disponible cuando el usuario está conectado)." #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Tiempo restante (real):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Formato: " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Cuánto tiempo ha estado inactivo el usuario desde su último inicio de sesión " "(en tiempo real, disponible cuando el usuario ha iniciado sesión)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Tiempo inactivo (real):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Tiempo disponible hoy (guardado indicado, no en tiempo real)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Tiempo restante (hoy):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Tiempo empleado hoy (guardado indicado, no en tiempo real)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Tiempo empleado (hoy):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "Tiempo empleado esta semana (guardado indicado, no en tiempo real)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Tiempo empleado (semana):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Tiempo empleado este mes (guardado indicado, no en tiempo real)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Tiempo empleado (mes):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Ajustes de las indemnizaciones" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "la hora de hoy" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" "Seleccione esta opción para ajustar la asignación de tiempo del usuario para hoy" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "PlayTime" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "Seleccione esta opción para ajustar la asignación de PlayTime del usuario para " "hoy" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "hr" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "El número de minutos a ajustar para el límite de hoy" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "El número de horas que hay que ajustar para el límite de hoy" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Añadir tiempo especificado (recompensa)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Restar el tiempo especificado (penalización)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Establecer este límite de tiempo específico" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Información sobre PlayTime" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Tiempo de juego real disponible hoy (tiempo real, disponible cuando el usuario " "está conectado)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "Tiempo de juego restante (real):" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Formato: " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "PlayTime disponible hoy (guardado indicado, no en tiempo real)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "Tiempo de juego restante (hoy):" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Recuento de la actividad PlayTime activa (en tiempo real, disponible cuando el " "usuario está conectado)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Actividades de carrera (reales):" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "PlayTime gastado hoy (guardado declarado, no en tiempo real)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "Tiempo de juego dedicado (hoy):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "Breve información sobre el tiempo dedicado y todo lo relacionado con la gestión " "del tiempo para este día" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Información y actualidad" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Permite configurar límites de tiempo." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Límites de días de la semana" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Elija las horas a ajustar para los días seleccionados." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Elija los minutos a ajustar para los días seleccionados." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Aumentar el tiempo diario permitido en la unidad de tiempo seleccionada (horas " "o minutos) para los días seleccionados.\n" "\n" "Please note, that you may select more than one day for the adjustment!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Disminuir el tiempo diario permitido en la unidad de tiempo seleccionada (horas " "o minutos) para los días seleccionados.\n" "\n" "Tenga en cuenta que puede elegir más de un día para el ajuste." #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Muestra el día de la semana e información adicional sobre el límite del día.\n" "\n" "Por favor, active / desactive los días para el usuario." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Intervalos de horas del día seleccionado disponibles para el usuario.\n" "La opción \"∞\" indica que el tiempo empleado durante este intervalo no se " "tendrá en cuenta para el límite diario, sino que se contabilizará como " "inactivo.\n" "\n" "Tenga en cuenta que si el límite del día termina a las 24:00 y el límite del " "día siguiente comienza a las 00:00, entonces el usuario puede trabajar " "continuamente pasada la medianoche.\n" "\n" "Tenga en cuenta que no se pueden configurar varios intervalos dentro de la " "misma hora.\n" "Un intervalo puede empezar o terminar o contener una hora específica, pero no " "más de una vez. Esto es por diseño, no un error.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Intervalos de horas" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Crea un nuevo intervalo de tiempo que estará disponible para el usuario.\n" "\n" "Después de crear el intervalo, edite sus horas de inicio y fin directamente en " "la lista de intervalos." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "" "Borra el intervalo de tiempo seleccionado de la lista de intervalos disponibles." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "introducir intervalos de horas" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "verificar" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Verifique los intervalos de tiempo configurados. Este es un paso obligatorio " "para garantizar que los intervalos son correctos.\n" "\n" "Los intervalos que presenten problemas aparecerán resaltados." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Límites semanales y mensuales" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "día" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Elija los días a ajustar para el periodo seleccionado." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Elija las horas a ajustar para el periodo seleccionado." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Elija los minutos a ajustar para el periodo seleccionado." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Aumentar la asignación de tiempo semanal o mensual en la unidad de tiempo " "seleccionada (días u horas o minutos) para el periodo seleccionado." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Disminuir la asignación de tiempo semanal o mensual en la unidad de tiempo " "seleccionada (días u horas o minutos) para el periodo seleccionado." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Límites semanales y mensuales para el usuario.\n" "\n" "Estos límites se aplican al usuario junto con el resto de la configuración de " "límites." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Aplicar límites diarios" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Aplicar limitar todos los cambios realizados en esta página" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Configuración del límite diario para todos los días de la semana" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Configuración de límites" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Configuración de las actividades de PlayTime" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "Opciones de PlayTime" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Activar PlayTime para el usuario seleccionado" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Activar PlayTime:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Activar la anulación de PlayTime para el usuario seleccionado.\n" "\n" "Esta opción anula la contabilización del tiempo de forma que sólo se " "contabiliza el tiempo cuando al menos una de las aplicaciones de la lista de " "actividades de PlayTime está en ejecución.\n" "\n" "Esto sólo afecta a la contabilización del tiempo, los intervalos se siguen " "aplicando en su totalidad.\n" "\n" "Si no hay procesos en ejecución, el tiempo se contabiliza como inactivo, por lo " "que es tiempo libre para el usuario." #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Activar la anulación de PlayTime:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Permitir actividades de PlayTime durante intervalos de tiempo no contabilizados " "(\"∞\") para el usuario seleccionado.\n" "\n" "Esta opción permite al usuario utilizar aplicaciones configuradas en su lista " "de actividades de PlayTime durante intervalos de tiempo marcados como no " "contabilizados (\"∞\").\n" "\n" "Si esta opción está activada, el uso de las actividades no se tendrá en cuenta " "para los límites de PlayTime; de lo contrario, las aplicaciones de la lista de " "actividades de PlayTime se cerrarán en cuanto se inicien durante los intervalos " "de tiempo no contabilizados (\"∞\")." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Permitido durante intervalos \"∞\":" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Permite configurar los límites de PlayTime." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "Límites de PlayTime" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Aumentar la asignación diaria de Tiempo de Juego en la unidad de tiempo " "seleccionada (horas o minutos) para los días seleccionados.\n" "\n" "Tenga en cuenta que puede seleccionar más de un día para el ajuste." #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Disminuir la asignación diaria de Tiempo de Juego en la unidad de tiempo " "seleccionada (horas o minutos) para los días seleccionados.\n" "\n" "Tenga en cuenta que puede seleccionar más de un día para el ajuste." #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Muestra el día de la semana e información adicional sobre el límite de Tiempo " "de Juego del día.\n" "\n" "Habilite/deshabilite los días para el usuario y establezca el tiempo permitido " "para las actividades de PlayTime." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "Actividades PlayTime" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Añada una nueva actividad PlayTime.\n" "\n" "Especifique la máscara de la actividad y una descripción fácil de usar en la " "lista de actividades directamente." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Eliminar la entrada seleccionada de las actividades de PlayTime." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Por favor, especifique una lista de nombres completos de procesos (ejecutables) " "sin ruta como cadenas sensibles a mayúsculas y minúsculas para ser " "monitorizados en el sistema.\n" "\n" "También es posible especificar máscaras RegExp para los procesos, pero tenga " "mucho cuidado con ellas, ya que el uso incorrecto de esta configuración puede " "provocar que el usuario elimine procesos no deseados.\n" "\n" "NOTA: ¡RegExp es una configuración para expertos!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Aplicar la configuración de PlayTime" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" "Aplicar los límites de PlayTime y los cambios de configuración en esta página" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "PlayTime configuracion" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Opciones de configuración adicionales" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Seleccione si se cuenta el tiempo de sesión inactiva.\n" "\n" "Si esta opción no está seleccionada, NO se tiene en cuenta el tiempo que se " "pasa en sesiones de inicio de sesión de consola (no emulador de terminal) y " "mientras la pantalla está bloqueada. Esto varía según el entorno de escritorio." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Seguimiento de las sesiones inactivas:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Seleccione si desea mostrar el ícono de candado de Timekpr-next y las " "notificaciones al usuario.\n" "\n" "Tenga en cuenta que marcar esta opción desactivará la visualización de toda la " "información y notificaciones para el usuario." #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Ocultar icono y notificaciones:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Seleccione un tipo de restricción / bloqueo para el usuario.\n" "\n" "NOTA: ¡tenga mucho cuidado, piense con antelación y lea la descripción de cada " "opción cuando cambie esta configuración del valor predeterminado!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Tipo de restricción / bloqueo:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "terminar sesiones" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Cuando termine el tiempo, las sesiones de usuario se terminarán.\n" "\n" "¡Esta opción es una restricción!\n" "\n" "¡Esta es la opción por defecto y muy probablemente es la que usted necesita!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "finalizar sesiones" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Cuando se acabe el tiempo, las sesiones del usuario serán finalizadas.\n" "\n" "¡Esta opción es una restricción!\n" "\n" "Por favor, evalúe si necesita este tipo de restricción." #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "apagar ordenador" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Cuando termine el tiempo, el ordenador se apagará.\n" "\n" "¡Esta opción es una restricción!\n" "\n" "Por favor, evalúe si necesita este tipo de restricción." #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "suspender ordenador" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Cuando termine el tiempo, el ordenador se suspenderá (se pondrá en reposo).\n" "\n" "Esta opción no es una restricción y es más adecuada para fines de autocontrol.\n" "\n" "Si se despierta cuando todavía no queda tiempo, la pantalla del ordenador se " "bloqueará y se volverá a poner en reposo al cabo de un rato." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "suspender / despertar el ordenador" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Cuando termine el tiempo, el ordenador se suspenderá (se pondrá en reposo) y se " "despertará al inicio del siguiente intervalo de tiempo disponible para el " "usuario.\n" "\n" "Esta opción no es una restricción y es más adecuada para fines de autocontrol.\n" "\n" "Si se despierta cuando todavía no queda tiempo, la pantalla del ordenador se " "bloqueará y se volverá a poner en reposo al cabo de un rato." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "bloquear;pantalla" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Cuando termine el tiempo, la pantalla del ordenador se bloqueará.\n" "\n" "Esta opción no es una restricción y es más adecuada para fines de autocontrol." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Seleccione un intervalo de tiempo en el que el ordenador puede ser despertado " "automáticamente.\n" "\n" "Tenga en cuenta que esta opción sólo es efectiva si el despertador por Reloj " "RealTime está soportado y habilitado en BIOS / UEFI." #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Intervalo de horas de despertador:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Introduzca la hora de inicio para la función de despertador automático.\n" "\n" "Tenga en cuenta que esta opción sólo es efectiva si el despertador por RealTime " "Clock está soportado y habilitado en BIOS / UEFI." #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Introduzca la hora final para la función de despertador automático.\n" "\n" "Tenga en cuenta que esta opción sólo es efectiva si el despertador por RealTime " "Clock está soportado y habilitado en BIOS / UEFI." #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Aplicar Configuración" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Aplicar cambios de configuración adicionales en esta página" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Configuración adicional" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Opciones adicionales" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Configuración de usuario" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Configuración relacionada con Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Control Ajustes Timekpr-nExT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Nivel de registro Timekpr-nExT.\n" "\n" "Por favor, no cambie esto a menos que sea necesario. Es probable que no " "encuentre nada bonito en los archivos de registro.\n" "\n" "Los valores son: 1 - estándar, 2 - depuración, 3 - depuración extra" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Granularidad de tiempo de sondeo de sesión que especifica con qué frecuencia se " "comprueban y contabilizan las sesiones y la actividad de los usuarios.\n" "\n" "3 - 5 segundos son óptimos, no cambie esto si no está seguro." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Intervalo de sondeo" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Especifique el tiempo en segundos en el que Timekpr-nExT inicia la cuenta atrás " "continua en tiempo real antes de aplicar una restricción / bloqueo a las " "sesiones del usuario." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Especifica la frecuencia en segundos con la que el estado real del usuario se " "guarda en el disco.\n" "\n" "Para mejorar el rendimiento y seguir teniendo una gran precisión, Timekpr-nExT " "contabiliza el tiempo en memoria a la frecuencia de \"Intervalo de sondeo\", " "este ajuste define una frecuencia a la que el estado de usuario se guarda en el " "disco para su almacenamiento permanente." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Ahorrar tiempo" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Número de segundos que le quedan al usuario antes de aplicar una restricción / " "bloqueo configurado a sus sesiones.\n" "\n" "Una vez alcanzado este tiempo y si el usuario sigue activo, las sesiones del " "usuario se gestionarán de acuerdo con la restricción / bloqueo especificado, y " "no se podrá hacer prácticamente nada para evitarlo." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Hora de finalización" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Tiempo de cuenta atrás" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Nivel de registro" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Número de segundos que le quedan al usuario de tiempo disponible antes de " "enviar una última notificación crítica de que el tiempo está a punto de " "agotarse.\n" "\n" "NOTA: el resto de los tiempos de notificación son configurables por usuario en " "la aplicación cliente." #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Notificación final" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Controlar los elementos de seguimiento Timekpr-nExT" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Controlar los elementos de seguimiento Timekpr-nExT" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Añadir a la lista el tipo de sesión rastreada" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Eliminar de la lista el tipo de sesión rastreada" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Lista de tipos de sesión que se rastrearán.\n" "\n" "Por favor, no cambies o experimentes con esto a menos que realmente (no por " "deseo) sepas lo que estás haciendo." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Sesiones excluidas" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Añadir un tipo de sesión excluido a la lista" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Eliminar de la lista un tipo de sesión excluido" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Lista de sesiones que deben excluirse del seguimiento.\n" "\n" "Por favor, no cambies o experimentes con esto a menos que realmente (no por " "deseo) sepas lo que estás haciendo." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Usuarios excluidos" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Añadir un usuario a la lista de exclusión" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Eliminar un usuario de la lista de exclusión" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "Lista de usuarios excluidos del seguimiento.\n" "\n" "Especifique aquí los nombres de usuario reales, no los verdaderos. Por ejemplo, " "\"jsmith\", no \"John Smith\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Este ajuste controla si la funcionalidad PlayTime está activada.\n" "\n" "Se trata de un interruptor maestro de PlayTime, si está desactivado, se " "desactiva para todos, independientemente de la configuración individual." #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "PlayTime activado:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Esta opción controla si el monitor de actividad de PlayTime utilizará la línea " "de comandos del proceso, incluidos los argumentos, para monitorizar los " "procesos (por defecto sólo utiliza el nombre del proceso).\n" "\n" "Cuando esta opción está activada, Timekpr-nExT realizará una comparación con la " "línea de comandos completa de hasta 512 caracteres, lo que permite mejorar las " "capacidades de supervisión de procesos.\n" "\n" "Tenga cuidado y compruebe los patrones RegExp en las máscaras de actividad " "PlayTime de cada usuario." #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Monitor de actividad mejorado:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Aplicar la configuración de Timekpr-nExT" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Aplicar todos los ajustes de Timekpr-nExT a la vez" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Configuración de la administración de Timekpr-nExT" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Configuración de Timekpr-nExT" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "" "Configuración de Timekpr-nExTaEstado del cliente administrador de Timekpr-nExT" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Información" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Aviso" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Severo" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Crítico" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Cliente Timekpr-nExT" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Estado del cliente Timekpr-nExT" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Guardar todos los cambios" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Cerrar la ventana" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Nombre de usuario efectivo actual" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Estadísticas actuales" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "Tiempo transcurrido en esta sesión o tras reiniciar Timekpr-nExT" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Tiempo empleado (sesión):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "Tiempo inactivo en esta sesión o después de reiniciar Timekpr-nExT" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Tiempo inactivo:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "Tiempo continuo que le queda. Puede abarcar más que el día actual." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Tiempo continuo restante:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Tiempo total disponible que queda hoy en una fila, hasta el final del día" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Hoy queda tiempo:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Estos son los días y los límites de que dispone" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Días y límites" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Esto muestra el tiempo de los intervalos disponibles para su uso\n" "\n" "La opción \"∞\" indica que el tiempo empleado durante este intervalo no se " "tendrá en cuenta para el límite diario, sino que se contabilizará como inactivo." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervalos" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Límites diarios" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Estadísticas adicionales" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Tiempo dedicado esta semana" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Tiempo dedicado este mes" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Seleccione si se cuenta el tiempo de sesión inactiva.\n" "\n" "Si esta opción no está seleccionada, NO se tiene en cuenta el tiempo que se " "pasa en sesiones de inicio de sesión de consola (no emulador de terminal) y " "mientras la pantalla está bloqueada.\n" "Esto varía según el entorno de escritorio." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Pista inactiva:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Seleccione si se cuenta el tiempo de sesión inactiva. Si esta opción no está " "seleccionada, NO se tiene en cuenta el tiempo que se pasa en sesiones de inicio " "de sesión de consola (no emulador de terminal) y mientras la pantalla está " "bloqueada. Esto varía según el entorno de escritorio." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Límites adicionales" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Plazo disponible para esta semana" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Plazo disponible para esta semana" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Plazo disponible para este mes" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Plazo limite para este mes" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "Estadísticas actuales de PlayTime" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Tiempo total de juego disponible que queda hoy" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Tiempo total de juego invertido hoy" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Tiempo empleado hoy:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Esta opción anula la contabilización del tiempo por defecto.\n" "\n" "Si está marcada, el tiempo se contabiliza sólo cuando se están ejecutando las " "actividades de la \"Lista de actividades/aplicaciones\", el resto del tiempo se " "considera inactivo." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Anulación del límite de tiempo:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Número de actividades PlayTime actualmente activas" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Actividades en marcha:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Permitir actividades durante intervalos de tiempo no contabilizados (\"∞\").\n" "\n" "Este ajuste permite utilizar las aplicaciones listadas en \"Actividad / lista " "de aplicaciones\" durante los intervalos de tiempo marcados como no " "contabilizados (\"∞\"), si el ajuste no está habilitado, ¡no se permitirá la " "ejecución de ninguna actividad!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Permitido durante \"∞\":" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "Estos son los días y los límites que están a su disposición como parte de las " "restricciones de la actividad PlayTime" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "Muestra las actividades / aplicaciones que forman parte de las restricciones de " "PlayTime." #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Lista de actividades / solicitudes" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuración para notificaciones personalizadas sobre el tiempo disponible.\n" "\n" "Configure las notificaciones como mejor le parezca. Sin embargo, tenga en " "cuenta que habrá dos tipos de notificaciones que no se podrán personalizar: un " "aviso final un tiempo antes de que termine el tiempo y una notificación de " "cuenta atrás cuando el tiempo esté a punto de terminar.\n" "\n" "El valor \"Tiempo\" de la configuración indica un valor de tiempo restante " "cuando se mostrará la notificación, la opción \"Importancia\" rige un color de " "icono y las propiedades de la notificación de la siguiente manera.\n" "\n" "Información: se mostrará un icono verde y una notificación informativa.\n" "Advertencia: se mostrará un icono amarillo y una notificación informativa.\n" "Grave - se mostrará un icono rojo y una notificación importante\n" "Crítico: se mostrará un icono rojo y una notificación crítica. Esta " "notificación suele mostrarse sobre todas las aplicaciones abiertas y permanece " "abierta hasta que se cierra, aunque este comportamiento depende en gran medida " "del entorno de escritorio utilizado." #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Configuración de las notificaciones" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Añadir un nuevo umbral de notificación a la lista" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Eliminar umbral de notificación de la lista" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuración para notificaciones personalizadas sobre el Tiempo de Juego " "disponible.\n" "\n" "Configure las notificaciones como mejor le parezca.\n" "\n" "El valor de configuración \"Tiempo\" indica un valor de Tiempo de Juego " "restante cuando se mostrará la notificación, la opción \"Importancia\" gobierna " "un color de icono y propiedades de notificación como sigue.\n" "\n" "Información: se mostrará un icono verde y una notificación informativa.\n" "Advertencia - se mostrará un icono amarillo y una notificación informativa\n" "Grave - se mostrará un icono rojo y una notificación importante\n" "Crítico: se mostrará un icono rojo y una notificación crítica. Esta " "notificación suele mostrarse sobre todas las aplicaciones abiertas y permanece " "abierta hasta que se cierra, aunque este comportamiento depende en gran medida " "del entorno de escritorio utilizado." #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Configuración de notificaciones PlayTime" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Configuración de notificaciones PlayTime" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Eliminar el umbral de notificación de PlayTime de la lista" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Notificaciones" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Seleccione si desea utilizar las notificaciones de voz, si están disponibles.\n" "\n" "Puede hacer que las notificaciones de voz estén disponibles instalando el " "paquete \"python3-espeak\" o \"python3-espeak-ng\"." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Utilizar notificaciones de voz" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Establece el nivel de registro.\n" "\n" "Por favor, no cambies esto a menos que sepas lo que estás haciendo." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Nivel de registro" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Especifique si desea mostrar una notificación cuando se modifiquen las " "configuraciones de límites o las autorizaciones" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Mostrar cambios de límites" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Mostrar todas las notificaciones" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Especifique si desea mostrar los segundos en el área de notificación.\n" "\n" "Algunos entornos de escritorio, como KDE5, no admiten texto además de los " "iconos de notificación." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Mostrar segundos en el área de notificación" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Establece durante cuánto tiempo se muestra una notificación para las " "notificaciones regulares sobre el tiempo restante y los cambios de " "configuración.\n" "\n" "El valor se especifica en segundos.\n" "Un valor de 0 significa que se muestra hasta que se descarta (no recomendado " "para notificaciones regulares).\n" "\n" "Tenga en cuenta que el entorno de escritorio que utilice puede anular este " "tiempo de espera, en cuyo caso esta configuración no tendrá ningún efecto sobre " "la notificación." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Tiempo de espera de notificación (seg)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Establece durante cuánto tiempo se muestra una notificación para las " "notificaciones \"Críticas\" sobre el tiempo restante (cuando el icono se vuelve " "rojo).\n" "\n" "El valor se especifica en segundos.\n" "Un valor de 0 significa que se muestra hasta que se descarta.\n" "\n" "Tenga en cuenta que el entorno de escritorio que utilice puede anular este " "tiempo de espera, en cuyo caso este ajuste no tendrá ningún efecto sobre la " "notificación." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Tiempo de espera de notificación crítica (seg)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Seleccione si desea utilizar el sonido \"campana\" (sonido de notificación " "corto) para anunciar una nueva notificación de Timekpr-nExT.\n" "\n" "Esto sólo funciona para las notificaciones habilitadas.\n" "\n" "Si esta configuración no se puede editar, su entorno no anuncia la " "compatibilidad con notificaciones sonoras." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Utilizar \"timbre\" sonoro para las notificaciones" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "ConfiguracioÌ�n" #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> establecer restricción / tipo de bloqueo (\"lock\" - bloquear sesión, " #~ "\"suspend\" - suspender el ordenador, \"suspendwake\" - suspender y " #~ "despertar, \"terminate\" - terminar sesiones, \"shutdown\" - apagar el " #~ "ordenador), ejemplos" #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Seleccione si desea mostrar el icono del candado de Timekpr-next y las " #~ "notificaciones al usuario.\n" #~ "\n" #~ "Tenga en cuenta que si desmarca esta opción, no se mostrará toda la " #~ "información ni las notificaciones al usuario." #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Seleccione si desea utilizar las notificaciones de voz, si están " #~ "disponibles.\n" #~ "\n" #~ "Puede hacer que las notificaciones de voz estén disponibles instalando el " #~ "paquete \"python3-espeak\"." timekpr-next/resource/locale/es/LC_MESSAGES/timekpr.mo000644 001750 001750 00000221640 15122253261 024471 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–¨®–W˜r˜/�˜N¿˜0™?™IS™@�™^Þ™=šhTšÄ½š¤‚›M'œ2uœ¨œþÈ�ÅÇž!�Ÿ0¯ŸˆàŸsi BÝ W ¡Cx¡>¼¡ û¡¢g¢"„¢_§¢+£.3£˜b£)û£3%¤(Y¤/‚¤5²¤è¤&¥(¥=¥R¥3l¥? ¥Nà§/©5N©#„©¨©5Á©%÷©Pª)nª=˜ª2Öª « «<9«kv«7â«7¬7R¬9Ь9ĬTþ¬RS­¦­ ¸­3Ù­ ®H®5f±"œµ¿µ ÙµãµDôµ|9¶¶¶ж3í¶)!·6K·P‚·Ó·²ë·ž¸0§¸"ظ!û¸¹C4¹x¹‰¹@޹ϹÍ๺®º�i»Pú»«K¼-÷¼4%½âZ½"=¿`¿r¿{¿Ëš¿ÏfÀ6ÁIÁ3\Á-�ÁM¾Á- ÂF:Â&�¨²ÁÂtÃ3ˆÃK¼Ã1Ä-:ÄKhÄ-´Ä-âÄ%Å6Å9Å:YŔŨŒ(È+»ÈçÈ øÈÌÉ¿ÑÉ�‘Ê!Ë ;ËHË)dË>ŽËÍË7áË7Ì QÌ#\̣̟̀̈½Ì¨]Í5Ι<ÎÖÖΊ­Ï8Ð)JÐBtзÐ×ÐéÐñÐ$ Ñ'0ÑXÑ3gÑI›Ñ åÒUïÓEÔMÔVÔ5kÔA¡ÔdãÔ>HÕ‡ÕBžÕáÕGôÕh<ÖC¥Ö*éÖC×X× wט׸×)Í×÷×F ØSØ<sØS°Ø*Ù./Ù»^ÙÛ(.Û?WÛ&—Û¾Û×Û;ëÛ-'Ü0UÜ$†Ü,«Ü@ØÜ1Ý KÝ4UÝAŠÝÌÝ ìÝ Þ$Þ>Þ#MÞCqÞ%µÞÔÛÞå°ß%–à%¼á$ââãä1ëäÊæÙèæÂç-Òç-è.è 5èVè-rè° èxQé]Êé¬(êÕêOÞê.ë-Në|ë-’ëEÀë!ì-(ìCVìDšì8ßìí>3í6rí4©í:ÞíAîx[î1ÔîÍï,Ôð&ñò(ñ¨òÜÄóe¡õ öÕøYèøáBùv$ú›ûM¢û<ðû-üDEüŠü›ü³üÊüÜüïü! ý_,ýŒý!«ý!Íýïýþ!þ8þRþ?kþA«þíþB ÿ:Lÿ‡ÿ œÿ4©ÿÞÿ#ýÿ!>0S,„㱕+°Ü.Þ# J1|?–1Ö&"I3Y�k£vn†nõgdjÌ07h2‡5º ð4+4`$•6ºYñtKPÀJ c\ WÀ > WW :¯ Hê ^3 J’ FÝ H$ `m IÎ Y Qr =Ä U>X2—KÊ.GE8�HÆaJq7¼Pô9E@XÀCV]5´MêG8>€W¿?7WP�:à#+6¾b¨!"ÊíóŠ9CÄ•“ž†2.¹§è¶�$Gl:ŒAÇB ?LŒ‘°ÇÍoÏ?BQdvx |9†ÀÜï" # 7  I ©S ý"## &#o0#c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:18+0300 Last-Translator: Eduards Bezverhijs Language-Team: Spanish Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s minuto%(n)s minutos%(n)s segundo%(n)s segundos%(n)s segundo restante%(n)s segundos restantes%(n)s segundo de PlayTime restante%(n)s segundos de tiempo de juego restantes%(n)s usuario en total:%(n)s usuarios en total:---=== AVISO ===---por ejemplo, obtenga información del usuario en tiempo real del servidorejemplo, elige un usuario guardado de la lista desde el servidorpor ejemplo, consigue la configuración de usuario y la información horaria desde el servidorejemplo, escribe ayuda==> establecer máscaras de proceso de actividad PlayTime, para el que se contabiliza el tiempo, ejemplo==> establecer PlayTime restante para el usuario en el momento actual de tiempo: "+" (añadir tiempo), "-" (restar tiempo), "=" (establecer el tiempo exacto disponible), ejemplo (añadir una hora)==> establecer límites de PlayTime para todos los días permitidos, el número de valores no debe exceder los días permitidos de PlayTime para el usuario, ejemplo==> establecer los días permitidos para las actividades de PlayTime, ejemploejemplo, fija los días permitidos para el usuarioejemplo, señala las horas permitidas para el día especificado, o "ALL" para cada día. Opcionalmente especifica los minutos de comienzo y finalización en corchetes así [x-y], además especifica ! delante de la hora si no tiene que ser tenida en cuenta (horario libre para el usuario)==> establecer restricción / tipo de bloqueo ("lock" - bloquear sesión, "suspend" - suspender el ordenador, "suspendwake" - suspender y despertar, "terminate" - terminar sesiones, "kill" - finalizar sesiones, "shutdown" - apagar el ordenador), ejemplos==> establecer el tiempo restante para el usuario en el momento actual de tiempo: "+" (añadir tiempo), "-" (restar tiempo), "=" (establecer el tiempo exacto disponible), ejemplo (añadir una hora)ejemplo, ajusta el límite al mesejemplo, ajusta el límite de tiempo a la semanaejemplo, ajusta los límites para todos los días permitidos, el número de valores no debe exceder los días permitidos para el usuario==> establecer si se permiten las actividades de PlayTime durante los intervalos no contabilizados ("∞"), ejemplo==> establecer si PlayTime está activado para el usuario, ejemplo==> establecer si PlayTime debe contabilizarse en lugar de la actividad normal, ejemploejemplo, ajusta si ocultar el icono bandeja y evitar notificacionesejemplo, fija si seguir las sesiones sin actividad del usuarioAcerca deAcerca de Timekpr-nExTRecuento de la actividad PlayTime activa (en tiempo real, disponible cuando el usuario está conectado)Lista de actividades / solicitudesTiempo de juego real disponible hoy (tiempo real, disponible cuando el usuario está conectado)Añadir un usuario a la lista de exclusiónAñadir un tipo de sesión excluido a la listaAñada una nueva actividad PlayTime. Especifique la máscara de la actividad y una descripción fácil de usar en la lista de actividades directamente.Configuración de notificaciones PlayTimeAñadir un nuevo umbral de notificación a la listaAñadir tiempo especificado (recompensa)Añadir a la lista el tipo de sesión rastreadaSe ha procesado el PlayTime adicional para el usuarioConfiguración adicionalOpciones de configuración adicionalesLímites adicionalesOpciones adicionalesEstadísticas adicionalesSe ha procesado el tiempo adicional para el usuarioPermitir actividades de PlayTime durante intervalos de tiempo no contabilizados ("∞") para el usuario seleccionado. Esta opción permite al usuario utilizar aplicaciones configuradas en su lista de actividades de PlayTime durante intervalos de tiempo marcados como no contabilizados ("∞"). Si esta opción está activada, el uso de las actividades no se tendrá en cuenta para los límites de PlayTime; de lo contrario, las aplicaciones de la lista de actividades de PlayTime se cerrarán en cuanto se inicien durante los intervalos de tiempo no contabilizados ("∞").Permitir actividades durante intervalos de tiempo no contabilizados ("∞"). Este ajuste permite utilizar las aplicaciones listadas en "Actividad / lista de aplicaciones" durante los intervalos de tiempo marcados como no contabilizados ("∞"), si el ajuste no está habilitado, ¡no se permitirá la ejecución de ninguna actividad!Ajustes de las indemnizacionesSe han procesado los días permitidos para el usuarioPermitido durante intervalos "∞":Permitido durante "∞":Se han procesado las horas permitidas para el usuarioAplicar la configuración de PlayTimeAplicar los límites de PlayTime y los cambios de configuración en esta páginaAplicar la configuración de Timekpr-nExTAplicar cambios de configuración adicionales en esta páginaAplicar todos los ajustes de Timekpr-nExT a la vezAplicar ConfiguraciónAplicar límites diariosAplicar limitar todos los cambios realizados en esta páginaBreve información sobre el tiempo dedicado y todo lo relacionado con la gestión del tiempo para este díaElija los días a ajustar para el periodo seleccionado.Elija las horas a ajustar para los días seleccionados.Elija las horas a ajustar para el periodo seleccionado.Elija los minutos a ajustar para los días seleccionados.Elija los minutos a ajustar para el periodo seleccionado.Seleccione esta opción para ajustar la asignación de PlayTime del usuario para hoySeleccione esta opción para ajustar la asignación de tiempo del usuario para hoyCerrar la ventanaComando FALLIDO: acceso denegadoComando FALLIDO: no se ha aceptado la comunicaciónConfiguracioÌ�nConfiguración para notificaciones personalizadas sobre el Tiempo de Juego disponible. Configure las notificaciones como mejor le parezca. El valor de configuración "Tiempo" indica un valor de Tiempo de Juego restante cuando se mostrará la notificación, la opción "Importancia" gobierna un color de icono y propiedades de notificación como sigue. Información: se mostrará un icono verde y una notificación informativa. Advertencia - se mostrará un icono amarillo y una notificación informativa Grave - se mostrará un icono rojo y una notificación importante Crítico: se mostrará un icono rojo y una notificación crítica. Esta notificación suele mostrarse sobre todas las aplicaciones abiertas y permanece abierta hasta que se cierra, aunque este comportamiento depende en gran medida del entorno de escritorio utilizado.Configuración para notificaciones personalizadas sobre el tiempo disponible. Configure las notificaciones como mejor le parezca. Sin embargo, tenga en cuenta que habrá dos tipos de notificaciones que no se podrán personalizar: un aviso final un tiempo antes de que termine el tiempo y una notificación de cuenta atrás cuando el tiempo esté a punto de terminar. El valor "Tiempo" de la configuración indica un valor de tiempo restante cuando se mostrará la notificación, la opción "Importancia" rige un color de icono y las propiedades de la notificación de la siguiente manera. Información: se mostrará un icono verde y una notificación informativa. Advertencia: se mostrará un icono amarillo y una notificación informativa. Grave - se mostrará un icono rojo y una notificación importante Crítico: se mostrará un icono rojo y una notificación crítica. Esta notificación suele mostrarse sobre todas las aplicaciones abiertas y permanece abierta hasta que se cierra, aunque este comportamiento depende en gran medida del entorno de escritorio utilizado.Configuración para el usuario %s:Configuración recuperadaConectadoConectándose...Tiempo continuo que le queda. Puede abarcar más que el día actual.Tiempo continuo restante. Puede abarcar más del día actual (en tiempo real, disponible cuando el usuario está conectado).Tiempo continuo restante:Control Ajustes Timekpr-nExTControlar los elementos de seguimiento Timekpr-nExTLos tipos de sesiones de control no pasanLa lista de tipos de sesiones de control es incorrectaLa lista de tipos de sesiones de control no es correcta y no se puede configurarTiempo de cuenta atrásCrea un nuevo intervalo de tiempo que estará disponible para el usuario. Después de crear el intervalo, edite sus horas de inicio y fin directamente en la lista de intervalos.CríticoTiempo de espera de notificación crítica (seg)Estadísticas actuales de PlayTimeNombre de usuario efectivo actualEstadísticas actualesConfiguración del límite diario para todos los días de la semanaLímites diariosDíaSe han procesado los límites de tiempo por día para el usuarioDías y límitesDisminuir la asignación diaria de Tiempo de Juego en la unidad de tiempo seleccionada (horas o minutos) para los días seleccionados. Tenga en cuenta que puede seleccionar más de un día para el ajuste.Disminuir el tiempo diario permitido en la unidad de tiempo seleccionada (horas o minutos) para los días seleccionados. Tenga en cuenta que puede elegir más de un día para el ajuste.Disminuir la asignación de tiempo semanal o mensual en la unidad de tiempo seleccionada (días u horas o minutos) para el periodo seleccionado.Borra el intervalo de tiempo seleccionado de la lista de intervalos disponibles.Eduards Bezverhijs (Traducción revisada por Ivan Ledesma ) (Ajuste en Español por Ivan Ledesma )Activar PlayTime para el usuario seleccionadoHabilitar PlayTime para el usuario ha sido procesadoActivar la anulación de PlayTime para el usuario seleccionado. Esta opción anula la contabilización del tiempo de forma que sólo se contabiliza el tiempo cuando al menos una de las aplicaciones de la lista de actividades de PlayTime está en ejecución. Esto sólo afecta a la contabilización del tiempo, los intervalos se siguen aplicando en su totalidad. Si no hay procesos en ejecución, el tiempo se contabiliza como inactivo, por lo que es tiempo libre para el usuario.Activar la anulación de PlayTime:Activar PlayTime:ActivadoMonitor de actividad mejorado:Introduzca la hora final para la función de despertador automático. Tenga en cuenta que esta opción sólo es efectiva si el despertador por RealTime Clock está soportado y habilitado en BIOS / UEFI.Introduzca la hora de inicio para la función de despertador automático. Tenga en cuenta que esta opción sólo es efectiva si el despertador por RealTime Clock está soportado y habilitado en BIOS / UEFI.Sesiones excluidasUsuarios excluidosLos tipos de sesión excluida no puede ser validadaLa lista de sesiones excluidas no es correctaLa lista de tipos de sesión excluidos no es correcta y no puede establecerseLa lista de usuarios excluidos no es correctaLa lista de usuarios excluidos no es correcta y no se puede establecerLa lista de usuarios excluidos no pasoNo se ha podido conectarLa función "%%s", que se utiliza para detectar el tiempo de inactividad, no puede activarse. El tiempo de inactividad puede no contabilizarse cuando la pantalla está bloqueada.Notificación finalLa hora de notificación final "%%s" no es correctaLa hora de notificación final "%%s" no es correcta y no puede establecerseNo se ha superado el plazo de notificación finalEl tiempo final de aviso "%%s" no es correctoEl tiempo de advertencia final "%%s" no es correcto y no puede establecerseNo se ha superado el tiempo de preaviso finalFormato: Formato: DeOcultar icono y notificaciones:Ocultar icono de bandeja para el usuario ha sido procesadoIntervalos de horasIntervalos de horas del día seleccionado disponibles para el usuario. La opción "∞" indica que el tiempo empleado durante este intervalo no se tendrá en cuenta para el límite diario, sino que se contabilizará como inactivo. Tenga en cuenta que si el límite del día termina a las 24:00 y el límite del día siguiente comienza a las 00:00, entonces el usuario puede trabajar continuamente pasada la medianoche. Tenga en cuenta que no se pueden configurar varios intervalos dentro de la misma hora. Un intervalo puede empezar o terminar o contener una hora específica, pero no más de una vez. Esto es por diseño, no un error. Cuánto tiempo ha estado inactivo el usuario desde su último inicio de sesión (en tiempo real, disponible cuando el usuario ha iniciado sesión)¡Error de inicialización del icono (%%s)!Icono, ¿verdad?ImportanciaAumentar la asignación diaria de Tiempo de Juego en la unidad de tiempo seleccionada (horas o minutos) para los días seleccionados. Tenga en cuenta que puede seleccionar más de un día para el ajuste.Aumentar el tiempo diario permitido en la unidad de tiempo seleccionada (horas o minutos) para los días seleccionados. Please note, that you may select more than one day for the adjustment!Aumentar la asignación de tiempo semanal o mensual en la unidad de tiempo seleccionada (días u horas o minutos) para el periodo seleccionado.Información y actualidadInformaciónInformación sobre PlayTimeInformación sobre el tiempo transcurridoError interno de conexión, compruebe los archivos de registroIntervalo eliminadoEl inicio del intervalo no puede coincidir con el finalEl inicio del intervalo no puede ser posterior al finalIntervalosMantener control del uso del equipoLímiteConfiguración de límitesLímites y configuraciónLista de tipos de sesión que se rastrearán. Por favor, no cambies o experimentes con esto a menos que realmente (no por deseo) sepas lo que estás haciendo.Lista de sesiones que deben excluirse del seguimiento. Por favor, no cambies o experimentes con esto a menos que realmente (no por deseo) sepas lo que estás haciendo.Lista de nombres de usuario registrados en el sistemaLista de usuarios excluidos del seguimiento. Especifique aquí los nombres de usuario reales, no los verdaderos. Por ejemplo, "jsmith", no "John Smith".Muestra el día de la semana e información adicional sobre el límite de Tiempo de Juego del día. Habilite/deshabilite los días para el usuario y establezca el tiempo permitido para las actividades de PlayTime.Muestra el día de la semana e información adicional sobre el límite del día. Por favor, active / desactive los días para el usuario.Nivel de registroEl nivel de registro "%%s" no es correctoEl nivel de registro "%%s" no es correcto y no se puede establecerNo se pasa el nivel de registroNivel de registroMensualNotas, lea atentamente ;)Configuración de las notificacionesTiempo de espera de notificación (seg)NotificacionesNúmero de actividades PlayTime actualmente activasNúmero de segundos que le quedan al usuario antes de aplicar una restricción / bloqueo configurado a sus sesiones. Una vez alcanzado este tiempo y si el usuario sigue activo, las sesiones del usuario se gestionarán de acuerdo con la restricción / bloqueo especificado, y no se podrá hacer prácticamente nada para evitarlo.Número de segundos que le quedan al usuario de tiempo disponible antes de enviar una última notificación crítica de que el tiempo está a punto de agotarse. NOTA: el resto de los tiempos de notificación son configurables por usuario en la aplicación cliente.Error de analisis de parametros (por favor, compruebe la validez del parámetro): %%sPeriodoPlayTimeActividades PlayTimeSe han procesado las actividades PlayTime del usuarioSe han procesado los días permitidos de PlayTime para el usuarioSe ha procesado el indicador PlayTime permitido durante intervalos no contabilizados para el usuarioPlayTime disponible hoy (guardado indicado, no en tiempo real)PlayTime configuracionSe han procesado los límites de días de PlayTime para el usuarioPlayTime activado:Bandera mejorada del monitor de actividad PlayTime "%%s" no es correctoEl indicador "%%s" del monitor de actividad mejorado de PlayTime no es correcto y no puede establecerse.No se pasa la bandera del monitor de actividad mejorada de PlayTimeEl indicador PlayTime "%%s" no es correctoEl indicador PlayTime "%%s" no es correcto y no se puede establecerNo se pasa la bandera PlayTimeTiempo de juego restante (real):Tiempo de juego restante (hoy):Límites de PlayTimeConfiguración de notificaciones PlayTimeOpciones de PlayTimeSe ha procesado el indicador de anulación de PlayTime para el usuarioTiempo de juego dedicado (hoy):PlayTime gastado hoy (guardado declarado, no en tiempo real)Vuelva a abrir la aplicación si es superusuario y Timekpr-nExT se está ejecutandoSeleccione un día para fijar los límitesSeleccione un intervalo de horas para eliminarPor favor, especifique una lista de nombres completos de procesos (ejecutables) sin ruta como cadenas sensibles a mayúsculas y minúsculas para ser monitorizados en el sistema. También es posible especificar máscaras RegExp para los procesos, pero tenga mucho cuidado con ellas, ya que el uso incorrecto de esta configuración puede provocar que el usuario elimine procesos no deseados. NOTA: ¡RegExp es una configuración para expertos!Intervalo de sondeoEl tiempo de sondeo "%%s" no es correctoLa hora de sondeo "%%s" no es correcta y no se puede establecerNo ha transcurrido el tiempo de sondeoDescripcción de procesoMáscara de procesoEliminar el umbral de notificación de PlayTime de la listaEliminar un usuario de la lista de exclusiónEliminar de la lista un tipo de sesión excluidoEliminar el tipo de sesión excluidaEliminar umbral de notificación de la listaEliminar la entrada seleccionada de las actividades de PlayTime.Eliminar de la lista el tipo de sesión rastreadaRestaurarRestaurar la configuración desde el estado guardadoSe ha procesado el tipo de restricción / bloqueo para el usuarioTipo de restricción / bloqueo:Actividades de carrera (reales):Actividades en marcha:Guardar todos los cambiosAhorrar tiempoGuardar tiempo "%%s" no es correctoEl tiempo de guardado "%%s" no es correcto y no se puede establecerNo se ha superado la hora de guardadoSeleccione un tipo de restricción / bloqueo para el usuario. NOTA: ¡tenga mucho cuidado, piense con antelación y lea la descripción de cada opción cuando cambie esta configuración del valor predeterminado!Seleccione un intervalo de tiempo en el que el ordenador puede ser despertado automáticamente. Tenga en cuenta que esta opción sólo es efectiva si el despertador por Reloj RealTime está soportado y habilitado en BIOS / UEFI.Seleccione si se cuenta el tiempo de sesión inactiva. Si esta opción no está seleccionada, NO se tiene en cuenta el tiempo que se pasa en sesiones de inicio de sesión de consola (no emulador de terminal) y mientras la pantalla está bloqueada. Esto varía según el entorno de escritorio.Seleccione si se cuenta el tiempo de sesión inactiva. Si esta opción no está seleccionada, NO se tiene en cuenta el tiempo que se pasa en sesiones de inicio de sesión de consola (no emulador de terminal) y mientras la pantalla está bloqueada. Esto varía según el entorno de escritorio.Seleccione si se cuenta el tiempo de sesión inactiva. Si esta opción no está seleccionada, NO se tiene en cuenta el tiempo que se pasa en sesiones de inicio de sesión de consola (no emulador de terminal) y mientras la pantalla está bloqueada. Esto varía según el entorno de escritorio.Seleccione si desea mostrar el ícono de candado de Timekpr-next y las notificaciones al usuario. Tenga en cuenta que marcar esta opción desactivará la visualización de toda la información y notificaciones para el usuario.Seleccione si desea utilizar el sonido "campana" (sonido de notificación corto) para anunciar una nueva notificación de Timekpr-nExT. Esto sólo funciona para las notificaciones habilitadas. Si esta configuración no se puede editar, su entorno no anuncia la compatibilidad con notificaciones sonoras.Seleccione si desea utilizar las notificaciones de voz, si están disponibles. Puede hacer que las notificaciones de voz estén disponibles instalando el paquete "python3-espeak" o "python3-espeak-ng".Granularidad de tiempo de sondeo de sesión que especifica con qué frecuencia se comprueban y contabilizan las sesiones y la actividad de los usuarios. 3 - 5 segundos son óptimos, no cambie esto si no está seguro.Tipo de sesiónEstablecer este límite de tiempo específicoConfiguración de las actividades de PlayTimeSeveroMostrar todas las notificacionesMostrar cambios de límitesMostrar segundos en el área de notificaciónEspecifique el tiempo en segundos en el que Timekpr-nExT inicia la cuenta atrás continua en tiempo real antes de aplicar una restricción / bloqueo a las sesiones del usuario.Especifique si desea mostrar una notificación cuando se modifiquen las configuraciones de límites o las autorizacionesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Especifique si desea mostrar los segundos en el área de notificación. Algunos entornos de escritorio, como KDE5, no admiten texto además de los iconos de notificación.IniciadaConfiguración de Timekpr-nExTaEstado del cliente administrador de Timekpr-nExTEstado del cliente Timekpr-nExTRestar el tiempo especificado (penalización)Hora de finalizaciónLa hora de finalización "%%s" no es correctaLa hora de finalización "%%s" no es correcta y no puede establecerseEl tiempo de finalizacion no pasoEse intervalo se solapa con otro ya existenteEl final de ese intervalo entra en conflicto con otro ya existente.El inicio de ese intervalo entra en conflicto con otro ya existente.El inicio o final de ese intervalo duplica uno existenteEl comando no es correcto.El número de horas que hay que ajustar para el límite de hoyEl número de minutos a ajustar para el límite de hoyEl uso de Timekpr-nExT admin client es el siguiente:¡Hay un problema de comunicación con Timekpr-nExT (%%s)!¡Hay un problema de conexión con el demonio Timekpr-nExT (%%s)!Estos son los días y los límites que están a su disposición como parte de las restricciones de la actividad PlayTimeEstos son los días y los límites de que disponeEsta es la aplicación de configuración de Timekpr-nExT. Le permite establecer límites de tiempo para sus usuarios individuales, así como opciones generales de Timekpr-nExT. Para utilizar esta aplicación, debe ejecutarla como superusuario o formar parte del grupo timekpr. Tenga en cuenta que la "Configuración de Timekpr-nExT" sólo está disponible en modo superusuario (administrador). Por favor, realice la configuración con cuidado: ¡no se bloquee!Permite configurar los límites de PlayTime.Permite configurar límites de tiempo.Esta opción anula la contabilización del tiempo por defecto. Si está marcada, el tiempo se contabiliza sólo cuando se están ejecutando las actividades de la "Lista de actividades/aplicaciones", el resto del tiempo se considera inactivo.Establece durante cuánto tiempo se muestra una notificación para las notificaciones "Críticas" sobre el tiempo restante (cuando el icono se vuelve rojo). El valor se especifica en segundos. Un valor de 0 significa que se muestra hasta que se descarta. Tenga en cuenta que el entorno de escritorio que utilice puede anular este tiempo de espera, en cuyo caso este ajuste no tendrá ningún efecto sobre la notificación.Establece durante cuánto tiempo se muestra una notificación para las notificaciones regulares sobre el tiempo restante y los cambios de configuración. El valor se especifica en segundos. Un valor de 0 significa que se muestra hasta que se descarta (no recomendado para notificaciones regulares). Tenga en cuenta que el entorno de escritorio que utilice puede anular este tiempo de espera, en cuyo caso esta configuración no tendrá ningún efecto sobre la notificación.Establece el nivel de registro. Por favor, no cambies esto a menos que sepas lo que estás haciendo.Esta opción controla si el monitor de actividad de PlayTime utilizará la línea de comandos del proceso, incluidos los argumentos, para monitorizar los procesos (por defecto sólo utiliza el nombre del proceso). Cuando esta opción está activada, Timekpr-nExT realizará una comparación con la línea de comandos completa de hasta 512 caracteres, lo que permite mejorar las capacidades de supervisión de procesos. Tenga cuidado y compruebe los patrones RegExp en las máscaras de actividad PlayTime de cada usuario.Este ajuste controla si la funcionalidad PlayTime está activada. Se trata de un interruptor maestro de PlayTime, si está desactivado, se desactiva para todos, independientemente de la configuración individual.Muestra las actividades / aplicaciones que forman parte de las restricciones de PlayTime.Esto muestra el tiempo de los intervalos disponibles para su uso La opción "∞" indica que el tiempo empleado durante este intervalo no se tendrá en cuenta para el límite diario, sino que se contabilizará como inactivo.Especifica la frecuencia en segundos con la que el estado real del usuario se guarda en el disco. Para mejorar el rendimiento y seguir teniendo una gran precisión, Timekpr-nExT contabiliza el tiempo en memoria a la frecuencia de "Intervalo de sondeo", este ajuste define una frecuencia a la que el estado de usuario se guarda en el disco para su almacenamiento permanente.TiempoEl tiempo disponible ha cambiado, ¡tenga en cuenta el nuevo tiempo restante!Tiempo disponible hoy (guardado indicado, no en tiempo real)Tiempo inactivo (real):Tiempo inactivo en esta sesión o después de reiniciar Timekpr-nExTTiempo inactivo:Tiempo restante (real):Tiempo restante (hoy):Hoy queda tiempo:Tiempo restante...Plazo limite para este mesPlazo disponible para esta semanaLa configuración del límite de tiempo ha cambiado, ¡tenga en cuenta la nueva configuración!Plazo disponible para este mesPlazo disponible para esta semanaAnulación del límite de tiempo:Tiempo empleado (mes):Tiempo empleado (sesión):Tiempo empleado (hoy):Tiempo empleado (semana):Tiempo dedicado este mesTiempo empleado este mes (guardado indicado, no en tiempo real)Tiempo transcurrido en esta sesión o tras reiniciar Timekpr-nExTTiempo dedicado esta semanaTiempo empleado esta semana (guardado indicado, no en tiempo real)Tiempo empleado hoy (guardado indicado, no en tiempo real)Tiempo empleado hoy:Timekpr-nExTConfiguración de la administración de Timekpr-nExTConfiguración de Timekpr-nExTNotificación Timekpr-nExT PlayTimeAdministración Timekpr-nExTCliente Timekpr-nExTSe ha guardado la configuración de Timekpr-nExTLa interfaz Timekpr-nExT aún no está listaNivel de registro Timekpr-nExT. Por favor, no cambie esto a menos que sea necesario. Es probable que no encuentre nada bonito en los archivos de registro. Los valores son: 1 - estándar, 2 - depuración, 3 - depuración extraNotificación Timekpr-nExTConfiguración relacionada con Timekpr-nExTATiempo total de juego disponible que queda hoyTiempo total de juego invertido hoyTiempo total disponible que queda hoy en una fila, hasta el final del díaPista inactiva no se pasaLa pista inactiva "%%s" no es correcta y no se puede establecerSe ha procesado la pista inactiva para el usuarioPista inactiva no se pasaSeguimiento de las sesiones inactivas:Pista inactiva:Controlar los elementos de seguimiento Timekpr-nExTERROR INESPERADO: %%sERROR inesperado al obtener la configuración. Por favor, inspeccione los archivos de registro Timekpr-nExTERROR inesperado al obtener la configuración de usuario. Por favor, inspeccione los archivos de registro Timekpr-nExTERROR inesperado al obtener la lista de usuarios. Por favor, inspeccione los archivos de registro Timekpr-nExTERROR inesperado al actualizar la configuración. Por favor, inspeccione los archivos de registro Timekpr-nExTERROR inesperado al actualizar el control. Por favor, inspeccione los archivos de registro Timekpr-nExTERROR inesperado al cargar la configuración. Por favor, inspeccione los archivos de registro Timekpr-nExTUtilizar "timbre" sonoro para las notificacionesUtilizar notificaciones de vozNo se encuentra la configuración del usuario "%%sNo se encuentra el archivo de control de usuario "%%sEl usuario "%%s" no se encuentraConfiguración de usuarioSe han guardado los límites de PlayTime del usuarioSe han guardado las opciones adicionales del usuarioConfiguración de usuario recuperadaSe han guardado los límites de tiempo de los usuariosEl indicador "%%s" PlayTime permitido durante intervalos no contabilizados no es correctoEl indicador "%%s" PlayTime allowed during unaccounted intervals del usuario no es correcto y no se puede establecerEl indicador "%%s" PlayTime allowed during unaccounted intervals no se ha pasadoLa lista de límites de días de PlayTime "%%s" del usuario no es correctaLa lista de límites de días de PlayTime "%%s" del usuario no es correcta y no se puede establecerLa lista de días de PlayTime "%%s" del usuario no es correcta y no se puede establecerLa lista de días de PlayTime "%%s" del usuario no es correctaLa lista de días de PlayTime "%%s" del usuario no es correcta y no se puede establecerLa lista de días de PlayTime "%%s" del usuario no se pasaEl indicador de activación de PlayTime "%%s" del usuario no es correctoEl indicador de activación de PlayTime "%%s" del usuario no es correcto y no puede activarse.No se ha pasado el indicador de activación de PlayTime "%%s" del usuario.La operación "%%s" PlayTime del usuario puede ser una de estas: - + =El indicador "%%s" de anulación de PlayTime del usuario no es correcto.El indicador de anulación de PlayTime "%%s" del usuario no es correcto y no puede establecerse.No se ha pasado el indicador "%%s" de anulación de PlayTime del usuario.El límite de tiempo de PlayTime "%%s" del usuario no es correcto y no puede establecerseLas horas permitidas del usuario "%%s" no son correctas y no se pueden establecerLa lista de límites diarios "%%s" del usuario no es correctaLa lista de límites diarios "%%s" del usuario no es correcta y no puede establecerseNo se ha pasado la lista de límites diarios "%%s" del usuarioLa lista de días "%%s" del usuario no es correctaLa lista de días "%%s" del usuario no es correcta y no se puede establecerNo se pasa la lista de días "%%s" del usuarioEl número de día "%%s" del usuario debe estar comprendido entre 1 y 7El número de día "%%s" del usuario debe estar presenteEl indicador de icono de bandeja oculta "%%s" del usuario no es correctoEl indicador de icono de bandeja oculta "%%s" del usuario no es correcto y no se puede establecerNo se ha pasado el indicador "%%s" de ocultar icono de bandeja del usuarioLa asignación mensual "%%s" del usuario no es correctaLa asignación mensual "%%s" del usuario no es correcta y no se puede establecerNo se ha superado la asignación mensual del usuario "%%sEl tipo de restricción/bloqueo "%%s" del usuario no es correctoEl tipo de restricción/bloqueo "%%s" del usuario no es correcto y no puede establecerseLa restricción/tipo de bloqueo "%%s" del usuario no se ha superadoEl límite de tiempo de reproducción establecido por el usuario "%%s" no es correcto.El límite de tiempo "%%s" del usuario no es correctoEl límite de tiempo "%%s" del usuario no es correcto y no puede establecerseLa operación de tiempo "%%s" del usuario puede ser una de estas: - + =El indicador de vía inactiva "%%s" del usuario no es correctoEl indicador de vía inactiva "%%s" del usuario no es correcto y no se puede establecerNo se ha pasado el indicador de vía inactiva "%%s" del usuarioLa asignación semanal "%%s" del usuario no es correctaLa asignación semanal "%%s" del usuario no es correcta y no se puede establecerLa asignación semanal "%%s" del usuario no se ha superadoUsuarioNombre de Usuario:Configuración relacionada con los usuariosVerifique los intervalos de tiempo configurados. Este es un paso obligatorio para garantizar que los intervalos son correctos. Los intervalos que presenten problemas aparecerán resaltados.ADVERTENCIA: Se ha solicitado que la utilidad de administración Timekpr-nExT se ejecute en modo GUI, pero no hay pantallas disponibles, por lo que se ejecuta en CLI...Intervalo de horas de despertador:AvisoLímites de días de la semanaSemanalLímites semanales y mensualesLímites semanales y mensuales para el usuario. Estos límites se aplican al usuario junto con el resto de la configuración de límites.Se han procesado los límites semanales y mensuales de los usuariosCuando termine el tiempo, la pantalla del ordenador se bloqueará. Esta opción no es una restricción y es más adecuada para fines de autocontrol.Cuando termine el tiempo, el ordenador se apagará. ¡Esta opción es una restricción! Por favor, evalúe si necesita este tipo de restricción.Cuando termine el tiempo, el ordenador se suspenderá (se pondrá en reposo) y se despertará al inicio del siguiente intervalo de tiempo disponible para el usuario. Esta opción no es una restricción y es más adecuada para fines de autocontrol. Si se despierta cuando todavía no queda tiempo, la pantalla del ordenador se bloqueará y se volverá a poner en reposo al cabo de un rato.Cuando termine el tiempo, el ordenador se suspenderá (se pondrá en reposo). Esta opción no es una restricción y es más adecuada para fines de autocontrol. Si se despierta cuando todavía no queda tiempo, la pantalla del ordenador se bloqueará y se volverá a poner en reposo al cabo de un rato.Cuando se acabe el tiempo, las sesiones del usuario serán finalizadas. ¡Esta opción es una restricción! Por favor, evalúe si necesita este tipo de restricción.Cuando termine el tiempo, las sesiones de usuario se terminarán. ¡Esta opción es una restricción! ¡Esta es la opción por defecto y muy probablemente es la que usted necesita!Tienes %(n)s horaTienes %(n)s horasSu tiempo no está limitado hoySu tiempo se ha acabado, será desconectado a la fuerza enSu tiempo se ha acabado, su ordenador se apagará forzosamente enSu tiempo se ha acabado, su sesión será bloqueada a la fuerza enSu tiempo se ha acabado, su sesión será bloqueada a la fuerzadíaintroducir intervalos de horasmáscara ejecutable...de...hlos días de la semana se numeran según la norma ISO 8601 (es decir, el lunes es el primer día, formato: 1-7)hrimportancia...finalizar sesionesbloquear;pantallamminNo aplicalos valores numéricos del tiempo se expresan en segundosdescripción del proceso...tipo de sesión...apagar ordenadorsuspender / despertar el ordenadorsuspender ordenadorterminar sesionestiempo...Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia General Pública GNU (GPL) publicados por la Free Software Foundation en su versión 3 o en cualquier versión posterior. Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÃ�A; sin tan siquiera la garantía implícita de MERCADIBILIDAD o CALIDAD PARA UN OBJETIVO CONCRETO. Mire la Licencia Pública General GNU para más detalles. Debería haber recibido una copia de Licencia Pública General GNU con este programa. Si no es así, entre en . En Debian puede ver el archivo en /usr/share/common-licenses/GPL-3a...la hora de hoynombre de usuario...verificarlos días de la semana se numeran según la norma ISO 8601 (es decir, el lunes es el primer día, formato: 1-7)timekpr-next/resource/locale/nl/000755 001750 001750 00000000000 15122253204 020666 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/nl/LC_MESSAGES/000755 001750 001750 00000000000 15122253261 022456 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/nl/LC_MESSAGES/timekpr.po000644 001750 001750 00000270733 15122253261 024505 0ustar00bezvfedubezvfedu000000 000000 # Dutch translation for timekpr-next # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:18+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> print help, voorbeeld:" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> haal gebruikerslijst op van de server, voorbeeld:" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "==> haal instellingen voor gebruikers en tijd op van de server, voorbeeld:" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "==> haal gebruikersinstellingen op van de server, voorbeeld:" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> stel toegestane dagen in voor de gebruiker, bijvoorbeeld" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> stel toegestane uren in voor de specifieke dag, of \" ALL\" voor elke dag. " "Optioneel: stel begin en eind-minuten in met haakjes [x-y], of zet ! voor het " "uur als het vrij is, bijvoorbeeld:" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> stel tijdslimiet in voor alle toegestane dagen (de waarden moeten het " "aantal toegestane dagen niet overschrijden). Bijvoorbeeld" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> set tijdslimiet per week, ter voorbeeld" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> tijdslimiet per maand, bijvoorbeeld" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "" "==> stel in of inactieve sessies ook bijgehouden moeten worden, bijvoorbeeld" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" "==> stel in of taakbalkicoon en notificaties verborgen moeten worden, " "bijvoorbeeld" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> type slot of beperking (\"lock\" - vergrendelen, \"suspend\" - computer in " "slaapstand, \"suspendwake\" - slaapstand en waken, \"terminate\" - alle sessies " "afsluiten, \"kill\" - sessies beëindigen, \"shutdown\" - computer " "uitschakelen), voorbeelden" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> beschikbare tijd van de huidige user veranderen: \"+\" (tijd toevoegen), \"-" "\" (tijd aftrekken), \"=\" (precies deze hoeveelheid), voorbeeld (1 uur " "toevoegen)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> instellen of SpeelTijd aanstaat voor de gebruiker, voorbeeld" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> instellen of SpeelTijd voorrang krijgt boven het bijhouden van andere " "activiteiten, voorbeeld" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> stel in of SpeelTijd-processen zijn toegestaan tijdens periodes die niet " "meetellen (\"∞\"), voorbeeld:" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "==> dagen instellen voor SpeelTijd, voorbeeld" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> SpeelTijd-beperkingen voor de ingestelde dagen (aantal waarden moet het " "aantal ingestelde dagen niet overschrijden), voorbeeld" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "==> processes waarvoor SpeelTijd geldt opgeven, voorbeeld" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> aanpassen hoeveel SpeelTijd de huidige gebruiker nog heeft: \"+\" " "(toevoegen) \"-\" (aftrekken), \"=\" (precieze hoeveelheid opgeven), voorbeeld " "(1 uur toevoegen)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Er is een probleem met controllesessies" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "Lijst van controlesessie-typen niet correct" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "Lijst van controlesessietypes is niet correct en kan niet ingesteld worden" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "Er is een probleem met uitgezonderde sessietypes=" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "Lijst van uitgezonderde sessietypes is niet correct" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "" "Lijst van uitgezonderde sessietypes is niet correct en kan niet ingesteld worden" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "Er is een probleem met de lijst van uitgezonderde gebruikers" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "De lijst van uitgezonderde gebruikers is niet correct" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "" "De lijst van uitgezonderde gebruikers is niet correct en kan niet ingesteld " "worden" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "Er is een probleem met de tijd voor de laatste waarschuwing" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "Tijd voor de laatste waarschuwing \"%%s\" is niet correct" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "Tijd voor de laatste waarschuwing \"%%s\" is niet correct en kan niet " "opgeslagen worden" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "Er is een probleem met de laatste melding" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "Tijd voor de laatste melding \"%%s\" is niet correct" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "Tijd voor de laatste melding \"%%s\" is niet correct en kon niet opgeslagen " "worden" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "Er is een probleem met de afsluit-tijd" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "Tijd voor afsluiten \"%%s\" is niet correct" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "Tijd voor afsluiten \"%%s\" is niet correct en kon niet opgeslagen worden" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Er is een probleem met het bijhouden van inactieve sessies" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "" "De instellen voor het bijhouden van inactieve sessies \"%%s\" is niet correct" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "" "De instellen voor het bijhouden van inactieve sessies \"%%s\" is niet correct " "en kan niet opgeslagen worden" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Er is een probleem met het logniveau" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Logniveau \"%%s\" is niet correct" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Logniveau \"%%s\" is niet correct en kon niet worden opgeslagen" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "Er is een probleem het met poll-interval" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "Poll-interval \"%%s\" is niet correct" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "Poll-interval \"%%s\" is niet correct en kon niet opgeslagen worden" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "Er is een probleem met de opslagtijd" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "Opslagtijd \"%%s\" is niet correct" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "Opslagtijd \"%%s\" is niet correct en kan niet opgeslagen worden" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "Er is een probleem met de SpeelTijd-instelling" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "Speeltijdinstelling \"%%s\" is niet correct" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "Speeltijdinstelling \"%%s\" is niet correct en kan niet opgeslagen worden" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "Er is een probleem met de geavanceerde monitor voor SpeelTijd" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "Geavanceerd bijhouden van SpeelTijd \"%%s\" is niet correct" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "Geavanceerd bijhouden van SpeelTijd \"%%s\" is niet correct en kan niet " "opgeslagen worden" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "Dagnummer \"%%s\" van de gebruiker moet present zijn" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "Dagnummer \"%%s\" moet in het interval 1-7 vallen" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "Toegestane uren \"%%s\" van de gebruiker zijn niet correct en kunnen niet " "opgeslagen worden" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "Er is een probleem met de dagenlijst \"%%s\" van de gebruiker" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "De dagenlijst \"%%s\" van de gebruiker is niet correct" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" "De dagenlijst \"%%s\" van de gebruiker is niet correct en kan niet opgeslagen " "worden" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "Er is een probleem met de dagenlijst van gebruiker \"%%s\"" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "De daglimieten van gebruiker \"%%s\" zijn niet correct" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "De daglimieten van gebruiker \"%%s\" zijn niet correct en kunnen niet " "opgeslagen worden" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "Tijdsoperator van \"%%s\" kan -, + of = zijn" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "Tijdslimiet van gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "Tijdslimiet van gebruiker \"%%s\" is niet correct en kan niet opgeslagen worden" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "" "Er is een probleem met de maandelijks beschikbare tijd van de gebruiker \"%%s\"" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "Maandlimiet van gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "Maandlimiet van gebruiker \"%%s\" is niet correct en kan niet opgeslagen worden" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "" "Er is een probleem met de instelling 'inactiviteit bijhouden' van de gebruiker " "\"%%s\"" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "De instelling 'inactiviteit bijhouden' \"%%s\" is niet correct" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "De instelling 'inactiviteit bijhouden' \"%%s\" is niet correct en kan niet " "ingesteld worden" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" "Er is een probleem met de instelling voor het verbergen van het systeemvakicoon " "van de gebruiker \"%%s\"" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "De instelling systeemvakicoon verbergen is niet correct" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "De instelling systeemvakicoon van gebruiker \"%%s\" is niet correct en kan niet " "opgeslagen worden" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "" "Er is een probleem met het instellen van het type beperking voor de gebruiker " "\"%%s\"" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "Type beperking is niet correct ingesteld voor gebruiker \"%%s\"" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Type beperking is niet correct ingesteld voor gebruiker \"%%s\" en kan niet " "opgeslagen worden" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "Er is een probleem met het weekquotum van gebruiker \"%%s\"" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "Het weekquotum van gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "Het weekquotum van gebruiker \"%%s\" is niet correct en daarom niet ingesteld" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "Er is een probleem met de instelling 'SpeelTijd' van gebruiker \"%%s\"" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "" "De SpeelTijd van gebruiker \"%%s\" is niet correct en daarom niet ingesteld" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "De SpeelTijd van gebruiker \"%%s\" is niet correct en daarom niet ingesteld" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "Er is een probleem met de instelling 'SpeelTijd voorrang' van gebruiker \"%%s\"" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "De SpeelTijd-voorrang van gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "De SpeelTijd-voorrang van gebruiker \"%%s\" is niet correct en daarom niet " "ingesteld" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "Er is een probleem met de instelling voor SpeelTijd tijdens intervals voor " "gebruiker \"%%s\"" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "Het SpeelTijd-quotum tijdens intervals van gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "Het SpeelTijd-quotum tijdens intervals van gebruiker \"%%s\" is niet correct en " "daarom niet ingesteld" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "Er is een probleem met de SpeelTijd-dagen voor gebruiker \"%%s\"" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "De SpeelTijd-dagenlijst van gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "De SpeelTijd-dagenlijst van gebruiker \"%%s\" is niet correct en daarom niet " "ingesteld" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "Er is een probleem met de dagenlijst voor Speeltijd-beperkingen voor gebruiker " "\"%%s\"" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "De dagenlijst voor Speeltijd-beperkingen van gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "De dagenlijst voor Speeltijd-beperkingen van gebruiker \"%%s\" is niet correct " "en daarom niet ingesteld" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "Aanpassing voor SpeelTijd kan met een van deze: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "SpeelTijd-aanpassing voor gebruiker \"%%s\" is niet correct" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "SpeelTijd-aanpassing voor gebruiker \"%%s\" is niet correct en daarom niet " "ingesteld" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Onverwachte fout bij het laden van de configuratie. Zie de Timekpr-nExT logs" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "Onverwachte fout bij het ophalen van de configuratie. Zie de Timekpr-nExT logs" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Onverwachte fout bij het ophalen van de configuratie voor gebruiker. Zie de " "Timekpr-nExT logs" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "Onverwachte fout bij het ophalen van de lijst van gebruikers. Zie de Timekpr-" "nExT logs" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "Onverwachte fout bij het bijwerken van de configuratie. Zie de Timekpr-nExT logs" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "Onverwachte fout bij het bijwerken van de instellingen. Zie de Timekpr-nExT logs" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "Geen instellingen gevonden voor gebruiker \"%%s\"" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "Geen controlebestand gevonden voor gebruiker \"%%s\"" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "Gebruiker \"%%s\" niet gevonden" #: common/constants/messages.py:160 msgid "Connected" msgstr "Verbonden" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "Verbinden..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Verbinden mislukt" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Open de applicatie opnieuw als je superuser bent en Timekpr-nExt is gestart" #: common/constants/messages.py:165 msgid "Started" msgstr "Gestart" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "Gebruikersconfiguratie opgehaald" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Configuratie opgehaald" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "Instelling inactiviteit bijhouden verwerkt" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Instelling 'systeemvakicoon' verwerkt" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Instelling 'type beperking' verwerkt" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Extra tijd verwerkt" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Extra SpeelTijd verwerkt" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "Wekelijkse en maandelijkse quota verwerkt" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Toegestane dagen verwerkt" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Dagelijkse tijdlimieten voor gebruiker verwerkt" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Toegestane uren voor gebruiker verwerkt" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "Timkpr-nExT configuratie opgeslagen" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Tijdslimieten voor gebruiker opgeslagen" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "SpeelTijd-limieten voor gebruiker opgeslagen" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Extra instellingen voor gebruiker opgeslagen" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "Instelling 'SpeelTijd aan' verwerkt" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "Instelling 'SpeelTijd-voorrang' verwerkt" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "Instelling 'SpeelTijd tijdens intervals' verwerkt" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "Instelling 'SpeelTijd-dagen' verwerkt" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "Dagelijkse limieten SpeelTijd verwerkt" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "SpeelTijd-activiteiten voor gebruiker verwerkt" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Selecteer een dag om beperkingen in te stellen" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "Dat interval overlapt met een bestaand interval" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "Begin van dit interval overlapt met een bestaand interval" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "Eind van dit interval overlapt met een bestaand interval" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "Begin of eind van dit interval overlapt met een ander" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Interval begin kan niet hetzelfde zijn als einde" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "Begin van interval kan niet na het einde vallen" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Selecteer een uur-interval om te verwijderen" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Interval verwijderd" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "Timekpr-nExT interface is nog niet beschikbaar" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "WAARSCHUWING: Timekpr-nExt instellingen werd gevraagd om in GUI-modus te " "starten, maar er zijn geen beeldschermen beschikbaar, dus het wordt de " "commandline." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "Het commando is incorrect:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "Gebruik de Timekpr-nExT admin client als volgt:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "-=== LET OP ===-" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "Numerieke tijden in seconden" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "Weekdagen genummer volgens ISO 8601 ( maandag is de eerste dag, format is 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "uren genummerd volgens ISO 8601 (24h klok, format is 0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s gebruiker" msgstr[1] "%(n)s gebruikers" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Instelling voor gebruiker %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Tijd over..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Beperkingen & Instellingen" #: common/constants/messages.py:213 msgid "About" msgstr "Over" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Houd computergebruik in de hand" #: common/constants/messages.py:217 msgid "Day" msgstr "Dag" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Ingeschakeld" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Limiet" #: common/constants/messages.py:220 msgid "From" msgstr "Van" #: common/constants/messages.py:221 msgid "from..." msgstr "van..." #: common/constants/messages.py:222 msgid "To" msgstr "Tot" #: common/constants/messages.py:223 msgid "to..." msgstr "tot..." #: common/constants/messages.py:224 msgid "Period" msgstr "Periode" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Wekelijks" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Maandelijks" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Sessietype" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "sessietype..." #: common/constants/messages.py:232 msgid "Username" msgstr "Gebruikersnaam" #: common/constants/messages.py:233 msgid "username..." msgstr "gebruikersnaam..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Procesnaam" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "Naam van uitvoerbaar bestand" #: common/constants/messages.py:236 msgid "Process description" msgstr "Beschrijving" #: common/constants/messages.py:237 msgid "process description..." msgstr "beschrijving van het proces..." #: common/constants/messages.py:238 msgid "Time" msgstr "Tijd" #: common/constants/messages.py:239 msgid "time..." msgstr "tijd..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Belangrijkheid" #: common/constants/messages.py:241 msgid "importance..." msgstr "belangrijkheid..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Timekpr-nExT bericht" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Timekpr-nExT SpeelTijd-bericht" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Je tijd is niet gelimiteerd vandaag" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "Quotum is veranderd, zie de update!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "Tijdslimieten zijn veranderd, let op de nieuwe instelling!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Het lukte niet om te verbinden met de Timekpr-ExT daemon" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Er is een communicatieprobleem met Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Icoon-initialisatiefout (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Je tijd is op, je gaat uitgelogd worden in" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Je tijd is op, de computer wordt afgesloten in" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Je tijd is op, de sessie wordt vergrendeld in" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Je tijd is op, de computer gaat over op de slaapstand in" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s seconde" msgstr[1] "%(n)s seconden" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Verbindingsfout, zie de logbestanden" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Je hebt nog %(n)s uur" msgstr[1] "Je hebt nog %(n)s uur" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minuut" msgstr[1] "%(n)s minuten" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "en %(n)s seconde over" msgstr[1] "en %(n)s seconden over" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "en %(n)s seconde SpeelTijd over" msgstr[1] "en %(n)s seconden SpeelTijd over" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "\"%%s\" staat niet aan. Inactieve tijd kan nu misschien niet correct worden " "bijgehouden!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "ONVERWACHTE FOUT: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "PROBLEEM MET PARAMETER (check de waarden): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Opdracht NIET UITGEVOERD: geen toegang" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Opdracht NIET UITGEVOERD: communicatie niet mogelijk" #: common/constants/messages.py:278 msgid "n/a" msgstr "n.v.t." #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Over Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Dit programma is vrije software: je mag het herdistribueren en/of wijzigen " "onder de voorwaarden van de GNU Algemene Publieke Licentie zoals gepubliceerd " "door de Free Software Foundation, onder versie 3 van de Licentie of (naar jouw " "keuze) elke latere versie.\n" "\n" "Dit programma is gedistribueerd in de hoop dat het nuttig zal zijn maar ZONDER " "ENIGE GARANTIE; zelfs zonder de impliciete garanties die GEBRUIKELIJK ZIJN IN " "DE HANDEL of voor BRUIKBAARHEID VOOR EEN SPECIFIEK DOEL. Zie de GNU Algemene " "Publieke Licentie voor meer details. \n" "\n" "Je hoort een kopie van de GNU Algemene Publieke Licentie te hebben ontvangen " "samen met dit programma. Als dat niet het geval is, zie ." #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(Hulp bij vertalingen: JP Lord )" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Verwijder uitzondering voor sessietype" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Timekpr-nExT instellingen" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Icoon, toch?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Notities, goed lezen ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Dit is de app voor het instellen van Timekpr-nExT. Je kunt er tijdsquota en " "beperkingen mee instellen voor individuele gebruikers, en de algemene " "instellingen wijzigen. \n" "Om deze app te gebruiken moet je superuser zijn of onderdeel van de timekpr " "groep.\n" "De Timekpr-nExT Configuratie is alleen beschikbaar in superuser (administrator) " "modus!\n" "\n" "Wees voorzichtig bij het instellen: sluit jezelf niet per ongeluk buiten!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Gebruikersinstellingen" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Gebruikersnaam:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Lijst van gebruikersnamen" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Terugzetten" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Eerder opgeslagen instelling terugzetten" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Informatie over tijd die nog rest" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Hoeveel tijd er nog over is. Kan langer zijn dan de huidige dag (beschikbaar " "wanneer de gebruiker ingelogd is)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Tijd over:" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Format: " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Hoe lang de gebruiker inactief is geweest sinds de laatste login (beschikbaar " "wanneer de gebruiker ingelogd is)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Inactieve tijd:" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Tijd die vandaag nog beschikbaar is" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Tijd over (vandaag):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Tijd besteed vandaag" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Tijd besteed:" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "Tijd besteed deze week" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Tijd besteed (week)" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Tijd besteed deze maand" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Tijd besteed (maand):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Quotum-aanpassingen" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "tijd vandaag" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" "Gebruik dit om de vandaag beschikbare tijd voor deze gebruiker te veranderen" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "SpeelTijd" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "Gebruik dit om de vandaag beschikbare SpeelTijd voor deze gebruiker te " "veranderen" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "u" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "Aantal minuten" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "Aantal uren" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Deze tijd toevoegen" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Deze tijd er af halen" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Deze specifieke tijdsbeperking instellen" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Informatie over SpeelTijd" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "SpeelTijd beschikbaar vandaag (beschikbaar als de gebruiker ingelogd is)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "SpeelTijd over:" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Format: " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "SpeelTijd die nog beschikbaar is vandaag" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "SpeelTijd over (vandaag)" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "SpeelTijd-activiteiten op dit moment (beschikbaar wanneer gebruiker is ingelogd)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Lopende activiteiten" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "SpeelTijd besteed vandaag" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "SpeelTijd besteed (vandaag)" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "Bondige informatie over de tijdsbesteding van vandaag" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Info & vandaag" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Hier kun je tijdsbeperkingen instellen." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Weekdagbeperkingen" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "u" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Kies uren om te wijzigen voor de geselecteerde dagen" #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Kies minuten om te wijzigen voor de geselecteerde dagen" #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Verruim de dagelijkse tijdslimiet met deze hoeveelheid tijd op deze agen.\n" "\n" "N.B. je mag meer dan één dag kiezen voor deze aanpassing!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Verminder de dagelijkse tijdslimiet met deze hoeveelheid tijd op deze agen.\n" "\n" "N.B. je mag meer dan één dag kiezen voor deze aanpassing!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Lijst van weekdagen en verdere informatie over dagelijkse beperkingen.\n" "\n" "Zet dagen aan of uit voor de gebruiker" #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Beschikbare uren op deze dag.\n" "De optie \"∞\" betekent dat tijd gedurende deze periode telt niet mee voor de " "dagelijkse limiet.\n" "\n" "N.B. als de dagelijkse limiet eindigt om 24:00 en die van de volgende dag " "begint om 00:00 dan kan er rond middernacht doorgewerkt worden.\n" "\n" "N.B. je kunt niet meerdere periodes instellen met hetzelfde uur. Een periode " "kan beginnen of eindigen op een specifiek uur, maar niet meer dan één keer. Dat " "is hoe Timekpr-next ontworpen is.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Periodes (uur)" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Maak een nieuw interval beschikbaar voor de gebruiker.\n" "\n" "Na het aanmaken van het interval kun je begin- en eindtijden direct in de lijst " "bewerken." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "Verwijder deze periode uit de lijst" #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "Voeg uren toe voor periode" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "verifiëren" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Ingestelde periodes verifiëren. Dit is een verplichte stap om ervoor te zorgen " "dat alle periodes correct zijn.\n" "\n" "Intervals met problemen worden uitgelicht." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Wekelijkse en maandelijkse limieten" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "d" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Dagen om aan te passen in deze periode" #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Uren om aan te passen in deze periode" #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Minuten om aan te passen in deze periode" #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Verruim de wekelijkse of maandelijkse tijdslimiet met deze hoeveelheid tijd " "(dagen, uren, minuten) voor de geselecteerde periode." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Verminder de wekelijkse of maandelijkse tijdslimiet met deze hoeveelheid tijd " "(dagen, uren, minuten) voor de geselecteerde periode." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Wekelijkse en maandelijkse limieten voor de gebruiker.\n" "\n" "Deze limieten worden toegepast samen met de rest van de instellingen." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Veranderingen toepassen" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Pas alle wijzigingen toe" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Dagelijkse limiet voor alle dagen van de week" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Instellingen voor limieten" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Instellingen voor SpeelTijd" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "SpeelTijd-opties" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "SpeelTijd inschakelen voor deze gebruiker" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "SpeelTijd inschakelen:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Schakel SpeelTijd-voorrang in voor deze gebruiker.\n" "\n" "Deze instellingen geef SpeelTijd voorrang in het berekenen van limieten: tijd " "wordt alleen meegeteld als tenminste 1 SpeelTijd-proces actief is!\n" "\n" "Dit slaat alleen op het bijhouden van de tijdslimiet en staat los van periodes, " "die blijven gelden.\n" "\n" "Als er geen SpeelTijd-processen actief zijn wordt de sessie als 'inactief' " "geteld. Dan krijgt de gebruiker effectief 'gratis' tijd!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Schakel SpeelTijd-voorrang in:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Sta SpeelTijd-processen toe tijdens periodes die niet meetellen (\"∞\") voor " "deze gebruiker.\n" "\n" "Deze instelling stelt de gebruiker in staat om SpeelTijd-applicaties te " "gebruiken tijdens periodes die buiten de beperkingen vallen (\"∞\"). \n" "\n" "Met deze optie aangevinkt tellen deze processen niet mee voor de limiet. Als " "dit niet aangevinkt is kan geen van de toepassingen in ∞ periodes gebruikt " "worden." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Toegestaan tijdens \"∞\" periodes" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Hier stel je SpeelTijd-limieten in" #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "SpeelTijd-limieten" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Verruim de SpeelTijd met deze tijd (uren, minuten) voor de geselecteerde " "dagen.\n" "\n" "N.B. je mag meer dan één dag kiezen voor deze aanpassing!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Verminder de SpeelTijd met deze tijd (uren, minuten) voor de geselecteerde " "dagen.\n" "\n" "N.B. je mag meer dan één dag kiezen voor deze aanpassing!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Lijst van weekdagen en verdere informatie over de SpeelTijd-limiet van " "vandaag.\n" "\n" "Stel dagen en tijdslimieten in voor SpeelTijd-processen." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "SpeelTijd-processen" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Voeg nieuw SpeelTijd-proces toe.\n" "\n" "Geef een procesnaam en een gebruiksvriendelijke beschrijving voor in de " "processenlijst." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Verwijder dit proces uit de Speeltijd-lijst" #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Geef een lijst van volledige procesnamen (uitvoerbare bestanden) zonder pad als " "hoofdlettergevoelige strings.\n" "\n" "Het is ook mogelijk om een RegEx voor processen op te geven, maar wees hier erg " "voorzichtig mee omdat verkeerd gebruik van deze instelling kan leiden tot het " "onverwacht beeindigen van processen!\n" "\n" "OPMERKING: RegEx is voor gevorderden" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "SpeelTijd-instellingen toepassen" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "Past de veranderde SpeelTijd-limieten en instellingen doe" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "SpeelTijd-instellingen" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Verdere instellingen" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Hiermee kies je of tijd in inactieve sessies ook bijgehouden moet worden.\n" "\n" "Als dit niet aangevinkt is telt tijd in de console (niet een emulator) en " "terwijl het scherm vergrendeld is NIET mee. Hoe dit werkt kan per " "desktopomgeving variëren." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Houd inactieve sessies bij:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Kies of het sloticoontje van Timekpr-next en meldingen aan de gebruiker getoond " "moeten worden.\n" "\n" "Let op: als je dit aanvinkt, worden alle informatie en meldingen voor de " "gebruiker uitgeschakeld!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Verberg icoon en meldingen" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Kies een type beperking of vergrendeling voor de gebruiker\n" "\n" "N.B.: wees voorzichtig, denk vooruit, en lees alle opties zorgvuldig door " "voordat je deze instelling verandert!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Type beperking:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "sessies beeindigen" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Als de tijd op is worden alle sessies van de gebruiker beeindigd.\n" "\n" "Deze optie is een beperking!\n" "\n" "Dit is de standaardoptie en in de meeste gevallen degene die je nodig hebt." #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "sessie beëindigen" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Wanneer de tijd om is, worden gebruikerssessies beëindigd.\n" "\n" "Deze optie is een beperking!\n" "\n" "Denk goed na of je deze optie nodig hebt." #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "computer afsluiten" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Als de tijd op is wordt de computer afgesloten.\n" "\n" "Deze optie is een beperking!\n" "\n" "Denk goed na of je deze optie nodig hebt." #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "computer in slaapstand" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Als de tijd op is gaat de computer in slaapstand (suspend).\n" "\n" "Deze optie is niet echt een beperking en is meer geschikt voor het oefenen van " "zelfbeheersing.\n" "\n" "Als de computer weer aangaat en er is nog steeds geen tijd, dan wordt het " "scherm vergrendeld en gaat de computer weer in de slaapstand." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "computer in slaapstand met automatisch ontwaken" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Als de tijd op is gaat de computer in slaapstand; als er weer een nieuwe " "periode aanbreekt met beschikbare tijd gaat de computer vanzelf weer aan.\n" "\n" "Dit is niet echt een beperking en meer geschikt voor het oefenen van " "zelfbeheersing.\n" "\n" "Als de computer weer aangezet wordt en er is nog steeds geen tijd, dan wordt " "het scherm vergrendeld en gaat de computer weer in de slaapstand." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "vergrendel scherm" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Het scherm wordt vergrendeld als de limiet bereikt wordt.\n" "\n" "Dit is geen sterke restrictie, maar is nuttig voor zelfbeheersing." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Selecteer een periode waarin de computer automatisch kan ontwaken.\n" "\n" "N.B.: deze optie werkt alleen als er RealTime Clock-ondersteuning is en deze " "ingeschakeld is in BIOS/ UEFI!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Uur van ontwaken:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Voor het beginuur in van de automatische wekfunctie\n" "\n" "Houd er rekening mee dat deze optie alleen werkt als de functie RealTime Clock " "wordt ondersteund en ingeschakeld is in BIOS / UEFI!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Voor het einduur in van de automatische wekfunctie\n" "\n" "Houd er rekening mee dat deze optie alleen werkt als de functie RealTime Clock " "wordt ondersteund en ingeschakeld is in BIOS / UEFI!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Instellingen toepassen" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Pas de gewijzigde instellingen toe" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Extra instellingen" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Extra opties" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Configuratie op gebruikersniveau" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Timekpr-nExT configuratie" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Beheer instellingen van Timekpr-nExT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Timekpr-nExT log-niveau.\n" "\n" "Verander dit alleen als het echt nodig is. Je vindt waarschijnlijk niet al te " "veel in de logbestanden.\n" "\n" "Mogelijke waarden: 1 - standaard, 2 - debuggen, 3 - extra debuggen" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Frequentie waarop sessies en activiteiten gecheckt moeten worden.\n" "\n" "3-5 second is optimaal, verander hier niets als je niet weet wat je doet." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Frequentie" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Geef de tijd (in seconden) waarop de countdown tevoorschijn moet komen die " "aangeeft dat een limiet bereikt is." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Dit is om de hoeveel seconden de status van de gebruiker wordt opgeslagen.\n" "\n" "Timekpor-nExT houdt sowieso alles bij in het geheugen; dit gaat om hoe vaak de " "gegevens tussendoor opgeslagen worden." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Opslaan (s)" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Hoeveel seconden er over zijn voor de gebruiker tot de sessie beeindigt wordt.\n" "\n" "Als deze tijd ook op is en de gebruiker is nog steeds actief voert Timekpr-nExT " "de instellingen uit (uitloggen, sessie beeindigen, scherm vergrendelen) en kan " "de gebruiker er haast niets tegen doen." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Eindtijd" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Countdown tijd" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Log-niveau" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Hoeveel seconden er nog over moeten zijn wanneer de laatste kritieke melding " "verschijnt.\n" "\n" "N.B.: alle andere meldingen zijn in te stellen voor elke gebruiker door de " "gebruiker zelf." #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Laatste waarschuwing" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Beheer wat Timekpr-nExT moet bijhouden" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Bij te houden sessies" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Voeg sessietype toe" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Verwijder sessietype" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Sessietypes die mee moeten tellen.\n" "\n" "Wees voorzichtig met het maken van veranderingen hier tenzij je echt weet wat " "je doet." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Te negeren sessies" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Voeg nieuw te negeren sessietype toe" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Verwijder te negeren sessietype" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "Lijst van sessietypes die genegeerd moeten worden" #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Uitgesloten gebruikers" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Voeg een gebruiker toe" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Verwijder deze gebruiker" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "Lijst van gebruikers die genegeerd worden.\n" "\n" "Gebruikersnamen, geen echte namen. Bijvoorbeeld \"jvrieze\", niet \"Jip " "Vrieze\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Hiermee stel je in of SpeelTijd aanstaat.\n" "\n" "Dit is de SpeelTijd-hoofdknop. Als deze uitstaat, is SpeelTijd uit voor " "iedereen, wat de individuele instellingen ook zeggen!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "SpeelTijd aan:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Dit bepaalt of SpeelTijd ook commandline-processen, inclusief argumenten, " "meeneemt in het zoeken naar activiteiten die onder SpeelTijd vallen (standaard " "wordt alleen naar procesnaam gekeken).\n" "\n" "Als dit aanstaat zal Timekpr-nExT zoeken naar de volledige command line tot 512 " "karakters, wat gedetailleerde monitoring mogelijk maakt.\n" "\n" "Wees hier voorzichtig mee en controleer je regular expressions in de SpeelTijd-" "instellingen voor elke individuele gebruiker!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Gedetailleerde monitor" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Timekpr-nExt instellingen toepassen" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Pas alle Timekpr-nExT instellingen tegelijk toe" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Timekpr-nExT admin instellingen" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Timekpr-nExT configuratie" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "Status van Timekpr-nExT admin client" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Informatie" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Waarschuwing" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Ernstig" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Kritiek" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Timekpr-nExT client" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Status van Timekpr-nExT client" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Wijzigingen opslaan" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Venster sluiten" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Huidige gebruikersnaam" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Huidige statistieken" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "Tijd besteed in deze sessie (of sinds de herstart van Timekpr-nExT)" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Tijd besteed (sessie):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "Tijd inactief in deze sessie (of sinds de herstart van Timekpr-nExT)" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Tijd inactief:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "Aaneengesloten tijd die over is. Kan zich ook tot morgen uitstrekken." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Aaneengesloten tijd over:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Totale tijd die vandaag nog over is, tot aan het einde van de dag." #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Tijd over vandaag:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Deze dagen en limieten gelden voor jou" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Dagen & limieten" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Hier vind je de beschikbare perioden.\n" "\n" "De optie \"∞\" geeft aan dat tijd in deze periode niet meetelt voor de " "dagelijkse limiet, maar geldt als inactief." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Periodes" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Dagelijkse limieten" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Meer statistieken" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Tijd besteed deze week" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Tijd besteed deze maand" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Kies of inactieve tijd ook meetelt.\n" "\n" "Als dit niet aangevinkt is wordt tijd tijdens login en terwijl het scherm " "vergrendeld is NIET meegenomen.\n" "Hoe dit uitwerkt kan per desktopomgeving verschillen." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Tel inactiviteit mee:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Kies of inactieve tijd ook meetelt. Als dit niet aangevinkt is wordt tijd " "tijdens login en terwijl het scherm vergrendeld is NIET meegenomen. Hoe dit " "uitwerkt kan per desktopomgeving verschillen." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Bijkomende limieten" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Hoeveelheid tijd die deze week beschikbaar is voor jou" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Tijdslimieten (week)" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Hoeveelheid tijd die deze maand beschikbaar is voor jou" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Tijdslimieten (maand)" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "SpeelTijd-statistieken" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "SpeelTijd over vandaag" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "SpeelTijd besteed vandaag" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Tijd besteed vandaag" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Met deze optie geef je SpeelTijd voorrang\n" "\n" "Als dit aangevinkt is telt tijd alleen mee als activiteiten in de lijst bezig " "zijn; andere tijd geldt als inactief." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Tijdslimiet voorrang:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Aantal lopende SpeelTijd-activiteiten" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Lopende activiteiten:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Sta activiteiten toe tijdens periodes die niet meetellen (\"∞\").\n" "\n" "Deze instelling maakt het mogelijk om toepassingen in de activiteitenlijst te " "gebruiken tijdens periodes die buiten de beperkingen vallen (\"∞\"). Als dit " "niet aangevinkt is kan geen van de toepassingen in zulke periodes gebruikt " "worden!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Toegestaan tijdens \"∞\"" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "Dit zijn de dagen en beperkingen die gelden onder SpeelTijd" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "Hier zie je de activitetien / programmas waarvoor SpeelTijd geldt" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Activiteiten / applicaties" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Instellingen voor gepersonaliseerde meldingen.\n" "\n" "Je kunt meldingen instellen zoals je wilt. Er zijn twee soorten meldingen die " "niet gepersonaliseerd kunnen worden: de laatste waarschuwing even voordat de " "tijd op is, en het aftellen wanneer het einde aanbreekt.\n" "\n" "\"Tijd\" gaat over de hoeveelheid tijd die nog over is op het moment dat de " "melding moet verschijnen. \"Aard\" gaat over de kleur en soort melding die je " "krijgt, als volgt:\n" "\n" "Informatie - groen icoon en een informatiemelding\n" "Waarschuwing - geel icon en een informatiemelding\n" "Ernstig - rood icoon en een 'gewichtige' melding\n" "Kritiek - rood icoon en een 'kritieke' melding. Deze krijgt meestal voorrang " "over andere applicaties en blijft open tot hij weggeklikt wordt. Hoe het er " "precies uitziet hangt af de gebruikte desktop-omgeving." #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Meldingen instellen" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Voeg een nieuwe melding toe" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Verwijder een melding" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Instellingen voor gepersonaliseerde meldingen over SpeelTijd.\n" "\n" "Je kunt meldingen instellen zoals je wilt. \n" "\n" "\"Tijd\" gaat over de hoeveelheid tijd die nog over is op het moment dat de " "melding moet verschijnen. \"Aard\" gaat over de kleur en soort melding die je " "krijgt, als volgt:\n" "\n" "Informatie - groen icoon en een informatiemelding\n" "Waarschuwing - geel icon en een informatiemelding\n" "Ernstig - rood icoon en een 'gewichtige' melding\n" "Kritiek - rood icoon en een 'kritieke' melding. Deze krijgt meestal voorrang " "over andere applicaties en blijft open tot hij weggeklikt wordt. Hoe het er " "precies uitziet hangt af de gebruikte desktop-omgeving." #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Stel Speeltijd-meldingen in" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Voeg een nieuwe SpeelTijd-melding toe" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Verwijder de geselecteerde Speeltijd-melding" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Meldingen" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Stel in of gesproken meldingen gebruikt moeten worden (indien beschikbaar).\n" "\n" "Je kunt spraakmeldingen wellicht mogelijk maken met \"python3-espeak\" of " "\"python3-espeak-ng\"." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Gebruik gesproken meldingen" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Dit stelt het detailniveau van logs in.\n" "\n" "Verander dit niet tenzij je weet wat je doet." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Logniveau" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Stel in of er een melding weergegeven moet worden als de beschikbare tijd " "verandert." #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Laat veranderingen in beschikbare tijd zien" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Stel in of alle meldingen getoond moeten worden.\n" "\n" "Als dit niet aangevinkt is worden alleen belangrijke meldingen getoond." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Toon alle meldingen" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Stel in of seconden weergegeven moeten worden in het systeemvak.\n" "\n" "Sommige desktopomgevingen, zoals KDE5, ondersteunen geen tekstweergave naast " "notificatie-iconen." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Laat seconden zien in het systeemvak" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Hiermee stel je in hoe lang een melding zichtbaar blijft.\n" "\n" "De waarde is in seconden.\n" "Een waarde van 0 betekent dat de melding blijft staan totdat deze weggeklikt " "wordt (niet aanbevolen voor reguliere meldingen)" #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Melding timeout (sec)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Dit stelt in hoe lang een melding zichtbaar blijft voor \"Kritieke\" meldingen " "over resterende tijd (als het icoon rood is).\n" "\n" "De waarde is in seconden.\n" "Een waarde van 0 betekent dat de melding zichtbaar blijft tot deze weggeklikt " "wordt.\n" "\n" "N.B.: het kan zijn dat je desktopomgeving zich niets van deze instelling " "aantrekt." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Time out voor kritieke melding" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Geef aan of er een geluid van een belletje moet klinken voor nieuwe meldingen " "van Timekpr-nExT.\n" "\n" "Dit werkt alleen als meldingen aan staan.\n" "\n" "Als deze instelling niet beschikbaar is ondersteunt je Linuxomgeving misschien " "geen geluidsmeldingen." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Laat een belletje horen bij meldingen" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Instellingen" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Stel in of gesproken meldingen gebruikt moeten worden (indien beschikbaar).\n" #~ "\n" #~ "Je kunt spraakmeldingen wellicht mogelijk maken met \"python3-espeak\" ." #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Hiermee kies je of meldingen en het slot-icoontje van Timekpr-next getoond " #~ "moeten worden" #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> type slot of beperking (\"lock\" - vergrendelen, \"suspend\" - computer " #~ "in slaapstand, \"suspendwake\" - slaapstand en waken, \"terminate\" - alle " #~ "sessies afsluiten, \"shutdown\" - computer uitschakelen), voorbeelden" timekpr-next/resource/locale/nl/LC_MESSAGES/timekpr.mo000644 001750 001750 00000204550 15122253261 024474 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–¦®–U˜p˜,�˜@º˜ û˜™<-™5j™J ™ë™9š @š‚áš-d›<’›½Ï›ð�œœ~�'ž+Cžƒožjóž@^ŸaŸŸR LT ¡ ¦ P¸  ¡H$¡m¡$„¡y©¡%#¢I¢e¢y¢�¢¦¢¹¢΢ â¢ï¢£Ž£0¤¤Õ¥é¥!¦%¦'>¦ f¦9‡¦#Á¦"å¦/§8§O§g§5€§&¶§4ݧ%¨78¨(p¨Q™¨Lë¨8©&H©4o© ¤©{±©-¬C¯a¯ x¯ ‚¯E�¯nÕ¯D°$^°&ƒ°'ª°+Ò°Jþ°I±‘X±ê±ò±²(²?²-T²‚²–²/š²ʲŽÛ²ˆj³ƒó³#w´}›´)µ#Cµ®gµ·5· L·Y··p·¸(¸á¸ô¸1 ¹3=¹Pq¹5¹Rø¹<KºˆºVšºñº2»P9»)Š»7´»Uì»;B¼+~¼#ª¼μÒ¼%í¼½Í"½oð¾`¿ ¿Œ¿Œ›¿†(À�¯À1Á @ÁKÁ!eÁ$‡Á¬Á0ÀÁ/ñÁ!Â*ÂJÂQÂlÂz‡Â1Ã4ÃyNÉÈÃnRÄ ÁÄÌÄ=ìÄ$*Å OÅ YÅeÅ}őЧÅ%±Å×Å´îÆ.£ÇÒÇ ÚÇäÇ.øÇ&'È1NÈ(€È©È&ÀÈçÈ:öÈX1É=ŠÉ)ÈÉGòÉ.:ÊiÊyÊ’Ê¥ÊÁÊ(ÒÊûÊËK1Ë.}Ë,¬ËWÙË 1Í#<ÍA`Í(¢Í ËÍ ØÍ,ãÍÎ)Î&IÎpÎ+†Î²Î ÇÎ(ÓÎ$üÎ!Ï1ÏFÏ\Ï pÏ |Ï>�Ï$ÜÏ«Я­ÐÄ]Ññ"ÒÃÓÁØÓñšÔ©ŒÕŒ6Ö ÃÖ(ÎÖ÷Ö××+/×$[×n€×Tï×yDØ¢¾ØaÙ$iÙŽÙ­ÙÃÙ)ÌÙGöÙ&>Ú/eÚ8•Ú9ÎÚ5Û>Û YÛeÛ/tÛ6¤Û8ÛÛ;Ü&PÜžwÜ"Þ'9ÞžaÞ>ßÒ?àVáÇiá¨1ãAÚã™äÁ¶äxå#}å#¡åÅåDÕåæ )æ4æIæ \æiææ:”æ7Ïæ6ç>çTçjç �ç�ç£ç»çCÓçè.èEèZè oè|èœè¶èÕèïè#é.'éÄVéê0êJêNêeêBêKÂêië*xë:£ëÞëúëì&ìN<ì]‹ìVéìP@íP‘íLâí%/îUî/qî2¡îÔî òî,ï,@ï mï'ŽïJ¶ïcðZeðLÀðe ñTsñ;ÈñTò>YòI˜òIâòD,ó5qó9§óRáóM4ôR‚ôYÕô4/õUdõ8ºõ4óõR(ö;{ö/·ö2çö7÷_R÷f²÷/øMIøM—ø=åø[#ùSù9Óù/ úM=ú*‹ú<¶úYóúTMû2¢ûKÕû9!ü[üjüzü›‘üœ-ýÊý Üýéý üý#þ}*þ)¨þ}ÒþxPÿxÉÿ$B„g¬ì+™#Å*é.8C-|ª¬Çäë:í(*<Oacgn‹ ª¸/Ëû%¹-ç îû N c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:18+0300 Last-Translator: Eduards Bezverhijs Language-Team: Dutch Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s minuut%(n)s minuten%(n)s seconde%(n)s secondenen %(n)s seconde overen %(n)s seconden overen %(n)s seconde SpeelTijd overen %(n)s seconden SpeelTijd over%(n)s gebruiker%(n)s gebruikers-=== LET OP ===-==> haal gebruikersinstellingen op van de server, voorbeeld:==> haal gebruikerslijst op van de server, voorbeeld:==> haal instellingen voor gebruikers en tijd op van de server, voorbeeld:==> print help, voorbeeld:==> processes waarvoor SpeelTijd geldt opgeven, voorbeeld==> aanpassen hoeveel SpeelTijd de huidige gebruiker nog heeft: "+" (toevoegen) "-" (aftrekken), "=" (precieze hoeveelheid opgeven), voorbeeld (1 uur toevoegen)==> SpeelTijd-beperkingen voor de ingestelde dagen (aantal waarden moet het aantal ingestelde dagen niet overschrijden), voorbeeld==> dagen instellen voor SpeelTijd, voorbeeld==> stel toegestane dagen in voor de gebruiker, bijvoorbeeld==> stel toegestane uren in voor de specifieke dag, of " ALL" voor elke dag. Optioneel: stel begin en eind-minuten in met haakjes [x-y], of zet ! voor het uur als het vrij is, bijvoorbeeld:==> type slot of beperking ("lock" - vergrendelen, "suspend" - computer in slaapstand, "suspendwake" - slaapstand en waken, "terminate" - alle sessies afsluiten, "kill" - sessies beëindigen, "shutdown" - computer uitschakelen), voorbeelden==> beschikbare tijd van de huidige user veranderen: "+" (tijd toevoegen), "-" (tijd aftrekken), "=" (precies deze hoeveelheid), voorbeeld (1 uur toevoegen)==> tijdslimiet per maand, bijvoorbeeld==> set tijdslimiet per week, ter voorbeeld==> stel tijdslimiet in voor alle toegestane dagen (de waarden moeten het aantal toegestane dagen niet overschrijden). Bijvoorbeeld==> stel in of SpeelTijd-processen zijn toegestaan tijdens periodes die niet meetellen ("∞"), voorbeeld:==> instellen of SpeelTijd aanstaat voor de gebruiker, voorbeeld==> instellen of SpeelTijd voorrang krijgt boven het bijhouden van andere activiteiten, voorbeeld==> stel in of taakbalkicoon en notificaties verborgen moeten worden, bijvoorbeeld==> stel in of inactieve sessies ook bijgehouden moeten worden, bijvoorbeeldOverOver Timekpr-nExTSpeelTijd-activiteiten op dit moment (beschikbaar wanneer gebruiker is ingelogd)Activiteiten / applicatiesSpeelTijd beschikbaar vandaag (beschikbaar als de gebruiker ingelogd is)Voeg een gebruiker toeVoeg nieuw te negeren sessietype toeVoeg nieuw SpeelTijd-proces toe. Geef een procesnaam en een gebruiksvriendelijke beschrijving voor in de processenlijst.Voeg een nieuwe SpeelTijd-melding toeVoeg een nieuwe melding toeDeze tijd toevoegenVoeg sessietype toeExtra SpeelTijd verwerktExtra instellingenVerdere instellingenBijkomende limietenExtra optiesMeer statistiekenExtra tijd verwerktSta SpeelTijd-processen toe tijdens periodes die niet meetellen ("∞") voor deze gebruiker. Deze instelling stelt de gebruiker in staat om SpeelTijd-applicaties te gebruiken tijdens periodes die buiten de beperkingen vallen ("∞"). Met deze optie aangevinkt tellen deze processen niet mee voor de limiet. Als dit niet aangevinkt is kan geen van de toepassingen in ∞ periodes gebruikt worden.Sta activiteiten toe tijdens periodes die niet meetellen ("∞"). Deze instelling maakt het mogelijk om toepassingen in de activiteitenlijst te gebruiken tijdens periodes die buiten de beperkingen vallen ("∞"). Als dit niet aangevinkt is kan geen van de toepassingen in zulke periodes gebruikt worden!Quotum-aanpassingenToegestane dagen verwerktToegestaan tijdens "∞" periodesToegestaan tijdens "∞"Toegestane uren voor gebruiker verwerktSpeelTijd-instellingen toepassenPast de veranderde SpeelTijd-limieten en instellingen doeTimekpr-nExt instellingen toepassenPas de gewijzigde instellingen toePas alle Timekpr-nExT instellingen tegelijk toeInstellingen toepassenVeranderingen toepassenPas alle wijzigingen toeBondige informatie over de tijdsbesteding van vandaagDagen om aan te passen in deze periodeKies uren om te wijzigen voor de geselecteerde dagenUren om aan te passen in deze periodeKies minuten om te wijzigen voor de geselecteerde dagenMinuten om aan te passen in deze periodeGebruik dit om de vandaag beschikbare SpeelTijd voor deze gebruiker te veranderenGebruik dit om de vandaag beschikbare tijd voor deze gebruiker te veranderenVenster sluitenOpdracht NIET UITGEVOERD: geen toegangOpdracht NIET UITGEVOERD: communicatie niet mogelijkInstellingenInstellingen voor gepersonaliseerde meldingen over SpeelTijd. Je kunt meldingen instellen zoals je wilt. "Tijd" gaat over de hoeveelheid tijd die nog over is op het moment dat de melding moet verschijnen. "Aard" gaat over de kleur en soort melding die je krijgt, als volgt: Informatie - groen icoon en een informatiemelding Waarschuwing - geel icon en een informatiemelding Ernstig - rood icoon en een 'gewichtige' melding Kritiek - rood icoon en een 'kritieke' melding. Deze krijgt meestal voorrang over andere applicaties en blijft open tot hij weggeklikt wordt. Hoe het er precies uitziet hangt af de gebruikte desktop-omgeving.Instellingen voor gepersonaliseerde meldingen. Je kunt meldingen instellen zoals je wilt. Er zijn twee soorten meldingen die niet gepersonaliseerd kunnen worden: de laatste waarschuwing even voordat de tijd op is, en het aftellen wanneer het einde aanbreekt. "Tijd" gaat over de hoeveelheid tijd die nog over is op het moment dat de melding moet verschijnen. "Aard" gaat over de kleur en soort melding die je krijgt, als volgt: Informatie - groen icoon en een informatiemelding Waarschuwing - geel icon en een informatiemelding Ernstig - rood icoon en een 'gewichtige' melding Kritiek - rood icoon en een 'kritieke' melding. Deze krijgt meestal voorrang over andere applicaties en blijft open tot hij weggeklikt wordt. Hoe het er precies uitziet hangt af de gebruikte desktop-omgeving.Instelling voor gebruiker %s:Configuratie opgehaaldVerbondenVerbinden...Aaneengesloten tijd die over is. Kan zich ook tot morgen uitstrekken.Hoeveel tijd er nog over is. Kan langer zijn dan de huidige dag (beschikbaar wanneer de gebruiker ingelogd is)Aaneengesloten tijd over:Beheer instellingen van Timekpr-nExTBeheer wat Timekpr-nExT moet bijhoudenEr is een probleem met controllesessiesLijst van controlesessie-typen niet correctLijst van controlesessietypes is niet correct en kan niet ingesteld wordenCountdown tijdMaak een nieuw interval beschikbaar voor de gebruiker. Na het aanmaken van het interval kun je begin- en eindtijden direct in de lijst bewerken.KritiekTime out voor kritieke meldingSpeelTijd-statistiekenHuidige gebruikersnaamHuidige statistiekenDagelijkse limiet voor alle dagen van de weekDagelijkse limietenDagDagelijkse tijdlimieten voor gebruiker verwerktDagen & limietenVerminder de SpeelTijd met deze tijd (uren, minuten) voor de geselecteerde dagen. N.B. je mag meer dan één dag kiezen voor deze aanpassing!Verminder de dagelijkse tijdslimiet met deze hoeveelheid tijd op deze agen. N.B. je mag meer dan één dag kiezen voor deze aanpassing!Verminder de wekelijkse of maandelijkse tijdslimiet met deze hoeveelheid tijd (dagen, uren, minuten) voor de geselecteerde periode.Verwijder deze periode uit de lijstEduards Bezverhijs (Hulp bij vertalingen: JP Lord )SpeelTijd inschakelen voor deze gebruikerInstelling 'SpeelTijd aan' verwerktSchakel SpeelTijd-voorrang in voor deze gebruiker. Deze instellingen geef SpeelTijd voorrang in het berekenen van limieten: tijd wordt alleen meegeteld als tenminste 1 SpeelTijd-proces actief is! Dit slaat alleen op het bijhouden van de tijdslimiet en staat los van periodes, die blijven gelden. Als er geen SpeelTijd-processen actief zijn wordt de sessie als 'inactief' geteld. Dan krijgt de gebruiker effectief 'gratis' tijd!Schakel SpeelTijd-voorrang in:SpeelTijd inschakelen:IngeschakeldGedetailleerde monitorVoor het einduur in van de automatische wekfunctie Houd er rekening mee dat deze optie alleen werkt als de functie RealTime Clock wordt ondersteund en ingeschakeld is in BIOS / UEFI!Voor het beginuur in van de automatische wekfunctie Houd er rekening mee dat deze optie alleen werkt als de functie RealTime Clock wordt ondersteund en ingeschakeld is in BIOS / UEFI!Te negeren sessiesUitgesloten gebruikersEr is een probleem met uitgezonderde sessietypes=Lijst van uitgezonderde sessietypes is niet correctLijst van uitgezonderde sessietypes is niet correct en kan niet ingesteld wordenDe lijst van uitgezonderde gebruikers is niet correctDe lijst van uitgezonderde gebruikers is niet correct en kan niet ingesteld wordenEr is een probleem met de lijst van uitgezonderde gebruikersVerbinden mislukt"%%s" staat niet aan. Inactieve tijd kan nu misschien niet correct worden bijgehouden!Laatste waarschuwingTijd voor de laatste melding "%%s" is niet correctTijd voor de laatste melding "%%s" is niet correct en kon niet opgeslagen wordenEr is een probleem met de laatste meldingTijd voor de laatste waarschuwing "%%s" is niet correctTijd voor de laatste waarschuwing "%%s" is niet correct en kan niet opgeslagen wordenEr is een probleem met de tijd voor de laatste waarschuwingFormat: Format: VanVerberg icoon en meldingenInstelling 'systeemvakicoon' verwerktPeriodes (uur)Beschikbare uren op deze dag. De optie "∞" betekent dat tijd gedurende deze periode telt niet mee voor de dagelijkse limiet. N.B. als de dagelijkse limiet eindigt om 24:00 en die van de volgende dag begint om 00:00 dan kan er rond middernacht doorgewerkt worden. N.B. je kunt niet meerdere periodes instellen met hetzelfde uur. Een periode kan beginnen of eindigen op een specifiek uur, maar niet meer dan één keer. Dat is hoe Timekpr-next ontworpen is. Hoe lang de gebruiker inactief is geweest sinds de laatste login (beschikbaar wanneer de gebruiker ingelogd is)Icoon-initialisatiefout (%%s)!Icoon, toch?BelangrijkheidVerruim de SpeelTijd met deze tijd (uren, minuten) voor de geselecteerde dagen. N.B. je mag meer dan één dag kiezen voor deze aanpassing!Verruim de dagelijkse tijdslimiet met deze hoeveelheid tijd op deze agen. N.B. je mag meer dan één dag kiezen voor deze aanpassing!Verruim de wekelijkse of maandelijkse tijdslimiet met deze hoeveelheid tijd (dagen, uren, minuten) voor de geselecteerde periode.Info & vandaagInformatieInformatie over SpeelTijdInformatie over tijd die nog restVerbindingsfout, zie de logbestandenInterval verwijderdInterval begin kan niet hetzelfde zijn als eindeBegin van interval kan niet na het einde vallenPeriodesHoud computergebruik in de handLimietInstellingen voor limietenBeperkingen & InstellingenSessietypes die mee moeten tellen. Wees voorzichtig met het maken van veranderingen hier tenzij je echt weet wat je doet.Lijst van sessietypes die genegeerd moeten wordenLijst van gebruikersnamenLijst van gebruikers die genegeerd worden. Gebruikersnamen, geen echte namen. Bijvoorbeeld "jvrieze", niet "Jip Vrieze".Lijst van weekdagen en verdere informatie over de SpeelTijd-limiet van vandaag. Stel dagen en tijdslimieten in voor SpeelTijd-processen.Lijst van weekdagen en verdere informatie over dagelijkse beperkingen. Zet dagen aan of uit voor de gebruikerLog-niveauLogniveau "%%s" is niet correctLogniveau "%%s" is niet correct en kon niet worden opgeslagenEr is een probleem met het logniveauLogniveauMaandelijksNotities, goed lezen ;)Meldingen instellenMelding timeout (sec)MeldingenAantal lopende SpeelTijd-activiteitenHoeveel seconden er over zijn voor de gebruiker tot de sessie beeindigt wordt. Als deze tijd ook op is en de gebruiker is nog steeds actief voert Timekpr-nExT de instellingen uit (uitloggen, sessie beeindigen, scherm vergrendelen) en kan de gebruiker er haast niets tegen doen.Hoeveel seconden er nog over moeten zijn wanneer de laatste kritieke melding verschijnt. N.B.: alle andere meldingen zijn in te stellen voor elke gebruiker door de gebruiker zelf.PROBLEEM MET PARAMETER (check de waarden): %%sPeriodeSpeelTijdSpeelTijd-processenSpeelTijd-activiteiten voor gebruiker verwerktInstelling 'SpeelTijd-dagen' verwerktInstelling 'SpeelTijd tijdens intervals' verwerktSpeelTijd die nog beschikbaar is vandaagSpeelTijd-instellingenDagelijkse limieten SpeelTijd verwerktSpeelTijd aan:Geavanceerd bijhouden van SpeelTijd "%%s" is niet correctGeavanceerd bijhouden van SpeelTijd "%%s" is niet correct en kan niet opgeslagen wordenEr is een probleem met de geavanceerde monitor voor SpeelTijdSpeeltijdinstelling "%%s" is niet correctSpeeltijdinstelling "%%s" is niet correct en kan niet opgeslagen wordenEr is een probleem met de SpeelTijd-instellingSpeelTijd over:SpeelTijd over (vandaag)SpeelTijd-limietenStel Speeltijd-meldingen inSpeelTijd-optiesInstelling 'SpeelTijd-voorrang' verwerktSpeelTijd besteed (vandaag)SpeelTijd besteed vandaagOpen de applicatie opnieuw als je superuser bent en Timekpr-nExt is gestartSelecteer een dag om beperkingen in te stellenSelecteer een uur-interval om te verwijderenGeef een lijst van volledige procesnamen (uitvoerbare bestanden) zonder pad als hoofdlettergevoelige strings. Het is ook mogelijk om een RegEx voor processen op te geven, maar wees hier erg voorzichtig mee omdat verkeerd gebruik van deze instelling kan leiden tot het onverwacht beeindigen van processen! OPMERKING: RegEx is voor gevorderdenFrequentiePoll-interval "%%s" is niet correctPoll-interval "%%s" is niet correct en kon niet opgeslagen wordenEr is een probleem het met poll-intervalBeschrijvingProcesnaamVerwijder de geselecteerde Speeltijd-meldingVerwijder deze gebruikerVerwijder te negeren sessietypeVerwijder uitzondering voor sessietypeVerwijder een meldingVerwijder dit proces uit de Speeltijd-lijstVerwijder sessietypeTerugzettenEerder opgeslagen instelling terugzettenInstelling 'type beperking' verwerktType beperking:Lopende activiteitenLopende activiteiten:Wijzigingen opslaanOpslaan (s)Opslagtijd "%%s" is niet correctOpslagtijd "%%s" is niet correct en kan niet opgeslagen wordenEr is een probleem met de opslagtijdKies een type beperking of vergrendeling voor de gebruiker N.B.: wees voorzichtig, denk vooruit, en lees alle opties zorgvuldig door voordat je deze instelling verandert!Selecteer een periode waarin de computer automatisch kan ontwaken. N.B.: deze optie werkt alleen als er RealTime Clock-ondersteuning is en deze ingeschakeld is in BIOS/ UEFI!Kies of inactieve tijd ook meetelt. Als dit niet aangevinkt is wordt tijd tijdens login en terwijl het scherm vergrendeld is NIET meegenomen. Hoe dit uitwerkt kan per desktopomgeving verschillen.Hiermee kies je of tijd in inactieve sessies ook bijgehouden moet worden. Als dit niet aangevinkt is telt tijd in de console (niet een emulator) en terwijl het scherm vergrendeld is NIET mee. Hoe dit werkt kan per desktopomgeving variëren.Kies of inactieve tijd ook meetelt. Als dit niet aangevinkt is wordt tijd tijdens login en terwijl het scherm vergrendeld is NIET meegenomen. Hoe dit uitwerkt kan per desktopomgeving verschillen.Kies of het sloticoontje van Timekpr-next en meldingen aan de gebruiker getoond moeten worden. Let op: als je dit aanvinkt, worden alle informatie en meldingen voor de gebruiker uitgeschakeld!Geef aan of er een geluid van een belletje moet klinken voor nieuwe meldingen van Timekpr-nExT. Dit werkt alleen als meldingen aan staan. Als deze instelling niet beschikbaar is ondersteunt je Linuxomgeving misschien geen geluidsmeldingen.Stel in of gesproken meldingen gebruikt moeten worden (indien beschikbaar). Je kunt spraakmeldingen wellicht mogelijk maken met "python3-espeak" of "python3-espeak-ng".Frequentie waarop sessies en activiteiten gecheckt moeten worden. 3-5 second is optimaal, verander hier niets als je niet weet wat je doet.SessietypeDeze specifieke tijdsbeperking instellenInstellingen voor SpeelTijdErnstigToon alle meldingenLaat veranderingen in beschikbare tijd zienLaat seconden zien in het systeemvakGeef de tijd (in seconden) waarop de countdown tevoorschijn moet komen die aangeeft dat een limiet bereikt is.Stel in of er een melding weergegeven moet worden als de beschikbare tijd verandert.Stel in of alle meldingen getoond moeten worden. Als dit niet aangevinkt is worden alleen belangrijke meldingen getoond.Stel in of seconden weergegeven moeten worden in het systeemvak. Sommige desktopomgevingen, zoals KDE5, ondersteunen geen tekstweergave naast notificatie-iconen.GestartStatus van Timekpr-nExT admin clientStatus van Timekpr-nExT clientDeze tijd er af halenEindtijdTijd voor afsluiten "%%s" is niet correctTijd voor afsluiten "%%s" is niet correct en kon niet opgeslagen wordenEr is een probleem met de afsluit-tijdDat interval overlapt met een bestaand intervalEind van dit interval overlapt met een bestaand intervalBegin van dit interval overlapt met een bestaand intervalBegin of eind van dit interval overlapt met een anderHet commando is incorrect:Aantal urenAantal minutenGebruik de Timekpr-nExT admin client als volgt:Er is een communicatieprobleem met Timekpr-nExT (%%s)!Het lukte niet om te verbinden met de Timekpr-ExT daemonDit zijn de dagen en beperkingen die gelden onder SpeelTijdDeze dagen en limieten gelden voor jouDit is de app voor het instellen van Timekpr-nExT. Je kunt er tijdsquota en beperkingen mee instellen voor individuele gebruikers, en de algemene instellingen wijzigen. Om deze app te gebruiken moet je superuser zijn of onderdeel van de timekpr groep. De Timekpr-nExT Configuratie is alleen beschikbaar in superuser (administrator) modus! Wees voorzichtig bij het instellen: sluit jezelf niet per ongeluk buiten!Hier stel je SpeelTijd-limieten inHier kun je tijdsbeperkingen instellen.Met deze optie geef je SpeelTijd voorrang Als dit aangevinkt is telt tijd alleen mee als activiteiten in de lijst bezig zijn; andere tijd geldt als inactief.Dit stelt in hoe lang een melding zichtbaar blijft voor "Kritieke" meldingen over resterende tijd (als het icoon rood is). De waarde is in seconden. Een waarde van 0 betekent dat de melding zichtbaar blijft tot deze weggeklikt wordt. N.B.: het kan zijn dat je desktopomgeving zich niets van deze instelling aantrekt.Hiermee stel je in hoe lang een melding zichtbaar blijft. De waarde is in seconden. Een waarde van 0 betekent dat de melding blijft staan totdat deze weggeklikt wordt (niet aanbevolen voor reguliere meldingen)Dit stelt het detailniveau van logs in. Verander dit niet tenzij je weet wat je doet.Dit bepaalt of SpeelTijd ook commandline-processen, inclusief argumenten, meeneemt in het zoeken naar activiteiten die onder SpeelTijd vallen (standaard wordt alleen naar procesnaam gekeken). Als dit aanstaat zal Timekpr-nExT zoeken naar de volledige command line tot 512 karakters, wat gedetailleerde monitoring mogelijk maakt. Wees hier voorzichtig mee en controleer je regular expressions in de SpeelTijd-instellingen voor elke individuele gebruiker!Hiermee stel je in of SpeelTijd aanstaat. Dit is de SpeelTijd-hoofdknop. Als deze uitstaat, is SpeelTijd uit voor iedereen, wat de individuele instellingen ook zeggen!Hier zie je de activitetien / programmas waarvoor SpeelTijd geldtHier vind je de beschikbare perioden. De optie "∞" geeft aan dat tijd in deze periode niet meetelt voor de dagelijkse limiet, maar geldt als inactief.Dit is om de hoeveel seconden de status van de gebruiker wordt opgeslagen. Timekpor-nExT houdt sowieso alles bij in het geheugen; dit gaat om hoe vaak de gegevens tussendoor opgeslagen worden.TijdQuotum is veranderd, zie de update!Tijd die vandaag nog beschikbaar isInactieve tijd:Tijd inactief in deze sessie (of sinds de herstart van Timekpr-nExT)Tijd inactief:Tijd over:Tijd over (vandaag):Tijd over vandaag:Tijd over...Tijdslimieten (maand)Tijdslimieten (week)Tijdslimieten zijn veranderd, let op de nieuwe instelling!Hoeveelheid tijd die deze maand beschikbaar is voor jouHoeveelheid tijd die deze week beschikbaar is voor jouTijdslimiet voorrang:Tijd besteed (maand):Tijd besteed (sessie):Tijd besteed:Tijd besteed (week)Tijd besteed deze maandTijd besteed deze maandTijd besteed in deze sessie (of sinds de herstart van Timekpr-nExT)Tijd besteed deze weekTijd besteed deze weekTijd besteed vandaagTijd besteed vandaagTimekpr-nExTTimekpr-nExT admin instellingenTimekpr-nExT configuratieTimekpr-nExT SpeelTijd-berichtTimekpr-nExT instellingenTimekpr-nExT clientTimkpr-nExT configuratie opgeslagenTimekpr-nExT interface is nog niet beschikbaarTimekpr-nExT log-niveau. Verander dit alleen als het echt nodig is. Je vindt waarschijnlijk niet al te veel in de logbestanden. Mogelijke waarden: 1 - standaard, 2 - debuggen, 3 - extra debuggenTimekpr-nExT berichtTimekpr-nExT configuratieTotSpeelTijd over vandaagSpeelTijd besteed vandaagTotale tijd die vandaag nog over is, tot aan het einde van de dag.De instellen voor het bijhouden van inactieve sessies "%%s" is niet correctDe instellen voor het bijhouden van inactieve sessies "%%s" is niet correct en kan niet opgeslagen wordenInstelling inactiviteit bijhouden verwerktEr is een probleem met het bijhouden van inactieve sessiesHoud inactieve sessies bij:Tel inactiviteit mee:Bij te houden sessiesONVERWACHTE FOUT: %%sOnverwachte fout bij het ophalen van de configuratie. Zie de Timekpr-nExT logsOnverwachte fout bij het ophalen van de configuratie voor gebruiker. Zie de Timekpr-nExT logsOnverwachte fout bij het ophalen van de lijst van gebruikers. Zie de Timekpr-nExT logsOnverwachte fout bij het bijwerken van de configuratie. Zie de Timekpr-nExT logsOnverwachte fout bij het bijwerken van de instellingen. Zie de Timekpr-nExT logsOnverwachte fout bij het laden van de configuratie. Zie de Timekpr-nExT logsLaat een belletje horen bij meldingenGebruik gesproken meldingenGeen instellingen gevonden voor gebruiker "%%s"Geen controlebestand gevonden voor gebruiker "%%s"Gebruiker "%%s" niet gevondenConfiguratie op gebruikersniveauSpeelTijd-limieten voor gebruiker opgeslagenExtra instellingen voor gebruiker opgeslagenGebruikersconfiguratie opgehaaldTijdslimieten voor gebruiker opgeslagenHet SpeelTijd-quotum tijdens intervals van gebruiker "%%s" is niet correctHet SpeelTijd-quotum tijdens intervals van gebruiker "%%s" is niet correct en daarom niet ingesteldEr is een probleem met de instelling voor SpeelTijd tijdens intervals voor gebruiker "%%s"De dagenlijst voor Speeltijd-beperkingen van gebruiker "%%s" is niet correctDe dagenlijst voor Speeltijd-beperkingen van gebruiker "%%s" is niet correct en daarom niet ingesteldEr is een probleem met de dagenlijst voor Speeltijd-beperkingen voor gebruiker "%%s"De SpeelTijd-dagenlijst van gebruiker "%%s" is niet correctDe SpeelTijd-dagenlijst van gebruiker "%%s" is niet correct en daarom niet ingesteldEr is een probleem met de SpeelTijd-dagen voor gebruiker "%%s"De SpeelTijd van gebruiker "%%s" is niet correct en daarom niet ingesteldDe SpeelTijd van gebruiker "%%s" is niet correct en daarom niet ingesteldEr is een probleem met de instelling 'SpeelTijd' van gebruiker "%%s"Aanpassing voor SpeelTijd kan met een van deze: - + =De SpeelTijd-voorrang van gebruiker "%%s" is niet correctDe SpeelTijd-voorrang van gebruiker "%%s" is niet correct en daarom niet ingesteldEr is een probleem met de instelling 'SpeelTijd voorrang' van gebruiker "%%s"SpeelTijd-aanpassing voor gebruiker "%%s" is niet correct en daarom niet ingesteldToegestane uren "%%s" van de gebruiker zijn niet correct en kunnen niet opgeslagen wordenDe daglimieten van gebruiker "%%s" zijn niet correctDe daglimieten van gebruiker "%%s" zijn niet correct en kunnen niet opgeslagen wordenEr is een probleem met de dagenlijst van gebruiker "%%s"De dagenlijst "%%s" van de gebruiker is niet correctDe dagenlijst "%%s" van de gebruiker is niet correct en kan niet opgeslagen wordenEr is een probleem met de dagenlijst "%%s" van de gebruikerDagnummer "%%s" moet in het interval 1-7 vallenDagnummer "%%s" van de gebruiker moet present zijnDe instelling systeemvakicoon verbergen is niet correctDe instelling systeemvakicoon van gebruiker "%%s" is niet correct en kan niet opgeslagen wordenEr is een probleem met de instelling voor het verbergen van het systeemvakicoon van de gebruiker "%%s"Maandlimiet van gebruiker "%%s" is niet correctMaandlimiet van gebruiker "%%s" is niet correct en kan niet opgeslagen wordenEr is een probleem met de maandelijks beschikbare tijd van de gebruiker "%%s"Type beperking is niet correct ingesteld voor gebruiker "%%s"Type beperking is niet correct ingesteld voor gebruiker "%%s" en kan niet opgeslagen wordenEr is een probleem met het instellen van het type beperking voor de gebruiker "%%s"SpeelTijd-aanpassing voor gebruiker "%%s" is niet correctTijdslimiet van gebruiker "%%s" is niet correctTijdslimiet van gebruiker "%%s" is niet correct en kan niet opgeslagen wordenTijdsoperator van "%%s" kan -, + of = zijnDe instelling 'inactiviteit bijhouden' "%%s" is niet correctDe instelling 'inactiviteit bijhouden' "%%s" is niet correct en kan niet ingesteld wordenEr is een probleem met de instelling 'inactiviteit bijhouden' van de gebruiker "%%s"Het weekquotum van gebruiker "%%s" is niet correctHet weekquotum van gebruiker "%%s" is niet correct en daarom niet ingesteldEr is een probleem met het weekquotum van gebruiker "%%s"GebruikersnaamGebruikersnaam:GebruikersinstellingenIngestelde periodes verifiëren. Dit is een verplichte stap om ervoor te zorgen dat alle periodes correct zijn. Intervals met problemen worden uitgelicht.WAARSCHUWING: Timekpr-nExt instellingen werd gevraagd om in GUI-modus te starten, maar er zijn geen beeldschermen beschikbaar, dus het wordt de commandline.Uur van ontwaken:WaarschuwingWeekdagbeperkingenWekelijksWekelijkse en maandelijkse limietenWekelijkse en maandelijkse limieten voor de gebruiker. Deze limieten worden toegepast samen met de rest van de instellingen.Wekelijkse en maandelijkse quota verwerktHet scherm wordt vergrendeld als de limiet bereikt wordt. Dit is geen sterke restrictie, maar is nuttig voor zelfbeheersing.Als de tijd op is wordt de computer afgesloten. Deze optie is een beperking! Denk goed na of je deze optie nodig hebt.Als de tijd op is gaat de computer in slaapstand; als er weer een nieuwe periode aanbreekt met beschikbare tijd gaat de computer vanzelf weer aan. Dit is niet echt een beperking en meer geschikt voor het oefenen van zelfbeheersing. Als de computer weer aangezet wordt en er is nog steeds geen tijd, dan wordt het scherm vergrendeld en gaat de computer weer in de slaapstand.Als de tijd op is gaat de computer in slaapstand (suspend). Deze optie is niet echt een beperking en is meer geschikt voor het oefenen van zelfbeheersing. Als de computer weer aangaat en er is nog steeds geen tijd, dan wordt het scherm vergrendeld en gaat de computer weer in de slaapstand.Wanneer de tijd om is, worden gebruikerssessies beëindigd. Deze optie is een beperking! Denk goed na of je deze optie nodig hebt.Als de tijd op is worden alle sessies van de gebruiker beeindigd. Deze optie is een beperking! Dit is de standaardoptie en in de meeste gevallen degene die je nodig hebt.Je hebt nog %(n)s uurJe hebt nog %(n)s uurJe tijd is niet gelimiteerd vandaagJe tijd is op, je gaat uitgelogd worden inJe tijd is op, de computer wordt afgesloten inJe tijd is op, de computer gaat over op de slaapstand inJe tijd is op, de sessie wordt vergrendeld indVoeg uren toe voor periodeNaam van uitvoerbaar bestandvan...uuren genummerd volgens ISO 8601 (24h klok, format is 0-23)ubelangrijkheid...sessie beëindigenvergrendel schermmminn.v.t.Numerieke tijden in secondenbeschrijving van het proces...sessietype...computer afsluitencomputer in slaapstand met automatisch ontwakencomputer in slaapstandsessies beeindigentijd...Dit programma is vrije software: je mag het herdistribueren en/of wijzigen onder de voorwaarden van de GNU Algemene Publieke Licentie zoals gepubliceerd door de Free Software Foundation, onder versie 3 van de Licentie of (naar jouw keuze) elke latere versie. Dit programma is gedistribueerd in de hoop dat het nuttig zal zijn maar ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garanties die GEBRUIKELIJK ZIJN IN DE HANDEL of voor BRUIKBAARHEID VOOR EEN SPECIFIEK DOEL. Zie de GNU Algemene Publieke Licentie voor meer details. Je hoort een kopie van de GNU Algemene Publieke Licentie te hebben ontvangen samen met dit programma. Als dat niet het geval is, zie .tot...tijd vandaaggebruikersnaam...verifiërenWeekdagen genummer volgens ISO 8601 ( maandag is de eerste dag, format is 1-7)timekpr-next/resource/locale/ru/000755 001750 001750 00000000000 15122253204 020703 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/ru/LC_MESSAGES/000755 001750 001750 00000000000 15122253261 022473 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/ru/LC_MESSAGES/timekpr.po000644 001750 001750 00000373336 15122253261 024525 0ustar00bezvfedubezvfedu000000 000000 # Russian translation for timekpr-next # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:17+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 " "&& (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> показать Ñ�правку, например" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> получить Ñ�пиÑ�ок пользователей Ñ�охраненных на Ñ�ервере, например" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "==> получить Ñ� Ñ�ервера конфигурацию пользователÑ� и информацию о времени, " "например" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" "==> получить текущую информацию о времени пользователÑ� Ñ� Ñ�ервера, например" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> уÑ�тановить разрешенные дни длÑ� пользователÑ�, например" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> уÑ�тановить разрешённые чаÑ�Ñ‹ длÑ� выбранного днÑ� недели или \"ALL\" длÑ� вÑ�ех, " "дополнительно можете указать начало и конец в минутах в квадратных Ñ�кобках [x-" "y], дополнительно можете добавить ! (воÑ�клицательный знак) перед чаÑ�ами, еÑ�ли " "Ñ�то времÑ� не должно учитыватьÑ�Ñ� (Ñ�вободное времÑ� пользователÑ�), например" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> уÑ�тановить ограничениÑ� по времени длÑ� вÑ�ех разрешённых дней недели, " "количеÑ�тво значений не должно превышать количеÑ�тво разрешённых длÑ� пользователÑ� " "дней недели, например" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> уÑ�тановить лимит на неделю, например" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> уÑ�тановить лимит на меÑ�Ñ�ц, например" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "==> уÑ�тановить отÑ�леживать ли неактивные Ñ�еÑ�Ñ�ии пользователей, например" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "==> cпрÑ�тать иконку в трее и отключить уведомлениÑ�, например" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> уÑ�тановить ограничение / вид блокировки (\"lock\" - заблокировать Ñ�еÑ�Ñ�ию, " "\"suspend\" - перевеÑ�ти компьютер в Ñ�он, \"suspendwake\" - перевеÑ�ти компьютер " "в Ñ�он и вывеÑ�ти из Ñ�на, \"terminate\" - прервать Ñ�еÑ�Ñ�ию, \"kill\" - прекратить " "Ñ�еÑ�Ñ�ию, \"shutdown\" - выключить компьютер), примеры" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> уÑ�тановить оÑ�тавшееÑ�Ñ� времÑ� пользователÑ� на текущий момент: \"+\" (добавить " "времÑ�), \"-\" (уменьшить времÑ�), \"=\" (уÑ�тановить точное значение), например " "(добавить один чаÑ�)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> уÑ�тановить, доÑ�тупно ли длÑ� пользователÑ� игровое времÑ�, например" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> уÑ�тановить, должно ли времÑ� пользователÑ� учитыватьÑ�Ñ� как игровое вмеÑ�то " "обычного времени, например" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> уÑ�тановить, разрешены ли игровые активноÑ�ти во времÑ� неучитываемых (\"∞\") " "периодов, например" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "==> уÑ�тановить дни недели доÑ�тупные длÑ� игровых активноÑ�тей, например" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> уÑ�тановить ограничениÑ� длÑ� игрового времени длÑ� вÑ�ех доÑ�тупных дней недели, " "количеÑ�тво значений не должно превышать количеÑ�тво доÑ�тупных дней недели длÑ� " "игровых активноÑ�тей пользователÑ�, например" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "==> уÑ�тановить маÑ�ки процеÑ�Ñ�ов, которые будут учтены как игры, например" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> уÑ�тановить оÑ�тавшееÑ�Ñ� времÑ� длÑ� игр пользователÑ� на текущий момент: \"+\" " "(добавить времÑ�), \"-\" (уменьшить времÑ�), \"=\" (уÑ�тановить точное значение), " "например (добавить один чаÑ�)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Ð�е указаны виды управлениÑ� Ñ�еÑ�Ñ�иÑ�ми" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "СпиÑ�ок видов управлениÑ� Ñ�еÑ�Ñ�иÑ�ми неверен" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "СпиÑ�ок типов Ñ�еанÑ�ов неверен и не может быть задан" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "ИÑ�ключённые виды Ñ�еÑ�Ñ�ий не заданы" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "СпиÑ�ок иÑ�ключённых видов Ñ�еÑ�Ñ�ий неверен" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "СпиÑ�ок иÑ�ключённых видов Ñ�еÑ�Ñ�ий неверен и не может быть уÑ�тановлен" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "СпиÑ�ок иÑ�ключённых пользователей не задан" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "СпиÑ�ок иÑ�ключённых пользователей неверен" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "СпиÑ�ок иÑ�ключённых пользователей неверен и не может быть уÑ�тановлен" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "ВремÑ� поÑ�леднего предупреждениÑ� не задано" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "ВремÑ� поÑ�леднего предупреждениÑ� \"%%s\" неверно" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "ВремÑ� поÑ�леднего предупреждениÑ� \"%%s\" неверно и не может быть задано" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "ВремÑ� поÑ�леднего уведомлениÑ� не задано" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "ВремÑ� поÑ�леднего уведомлениÑ� \"%%s\" неверно" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "ВремÑ� поÑ�леднего уведомлениÑ� \"%%s\" неверно и не может быть задано" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "ВремÑ� окончаниÑ� Ñ�еÑ�Ñ�ии не задано" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "ВремÑ� окончаниÑ� Ñ�еÑ�Ñ�ии \"%%s\" неверно" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "ВремÑ� окончаниÑ� Ñ�еÑ�Ñ�ии \"%%s\" неверно и не может быть задано" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Параметр отÑ�леживаниÑ� неактивных Ñ�еÑ�Ñ�ий не задан" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Параметр отÑ�леживаниÑ� неактивных Ñ�еÑ�Ñ�ий \"%%s\" неверен" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "" "Параметр отÑ�леживаниÑ� неактивных Ñ�еÑ�Ñ�ий \"%%s\" неверен и не может быть задан" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Уровень логированиÑ� не задан" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Уровень логированиÑ� \"%%s\" неверен" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Уровень логированиÑ� \"%%s\" неверен и не может быть задан" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "Интервал обновлениÑ� не задан" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "Интервал обновлениÑ� \"%%s\" неверен" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "Интервал обновлениÑ� \"%%s\" неверен и не может быть задан" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "СохранениÑ� Ñ�охранениÑ� на диÑ�к не задан" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "СохранениÑ� Ñ�охранениÑ� на диÑ�к \"%%s\" неверен" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "СохранениÑ� Ñ�охранениÑ� на диÑ�к \"%%s\" неверен и не может быть задан" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "Флаг игрового времени не задан" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "Флаг игрового времени \"%%s\" неверен" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "Флаг игрового времени \"%%s\" неверен и не может быть задан" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "Флаг раÑ�ширенного монитора активноÑ�ти игрового времени не уÑ�тановлен" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "" "Флаг раÑ�ширенного монитора активноÑ�ти игрового времени \"%%s\" неправильный" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "Флаг раÑ�ширенного монитора активноÑ�ти игрового времени \"%%s\" неправильный и " "не может быть уÑ�тановлен" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "Ð�омер днÑ� длÑ� пользователÑ� \"%%s\" должен быть указан" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "" "Ð�омер днÑ� длÑ� пользователÑ� \"%%s\" должен находитьÑ�Ñ� в диапазоне от 1 до 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "Разрешенные чаÑ�Ñ‹ пользователÑ� \"%%s\" неверны и не могут быть уÑ�тановлены" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "СпиÑ�ок дней пользователÑ� \"%%s\" не задан" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "СпиÑ�ок дней пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "СпиÑ�ок дней пользователÑ� \"%%s\" неправильный и не может быть уÑ�тановлен" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "СпиÑ�ок дневных ограничений пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "СпиÑ�ок дневных лимитов пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "СпиÑ�ок дневных ограничений пользователÑ� \"%%s\" неправильный и не может быть " "уÑ�тановлен" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "ОперациÑ� Ñ�о временем пользователÑ� \"%%s\" может быть одной из Ñ�ледующих: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "Ограничение времени пользователÑ� \"%%s\" неправильное" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "Ограничение времени пользователÑ� \"%%s\" неправильное и не может быть " "уÑ�тановлено" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "ЕжемеÑ�Ñ�чный лимит пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "ЕжемеÑ�Ñ�чный лимит пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "ЕжемеÑ�Ñ�чный лимит пользователÑ� \"%%s\" неправильный и не может быть уÑ�тановлен" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "Флаг отÑ�леживаниÑ� проÑ�тоÑ� пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "Флаг отÑ�леживаниÑ� проÑ�тоÑ� пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "Флаг отÑ�леживаниÑ� проÑ�тоÑ� пользователÑ� \"%%s\" неправильный и не может быть " "уÑ�тановлен" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "Флаг пользователÑ� \"%% s\" Ñ�крывать значок в трее не уÑ�тановлен" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "Флаг пользователÑ� \"%% s\" Ñ�крывать значок в трее неправильный" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "Флаг пользователÑ� \"%% s\" Ñ�крывать значок в трее неправильный и не может быть " "уÑ�тановлен" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "Тип ограничениÑ�/блокировки пользователÑ� «%%s» не уÑ�тановлен" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "Тип ограничениÑ�/блокировки пользователÑ� «%%s» неправильный" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Тип ограничениÑ�/блокировки пользователÑ� «%%s» неправильный и не может быть " "уÑ�тановлен" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "Ð�едельный лимит пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "Ð�едельный лимит пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "Ð�едельный лимит пользователÑ� \"%%s\" неправильный и не может быть уÑ�тановлен" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "Флаг включениÑ� игрового времени пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "Флаг включениÑ� игрового времени пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "Флаг включениÑ� игрового времени пользователÑ� \"%%s\" неправильный и не может " "быть уÑ�тановлен" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "Флаг переопределениÑ� игрового времени пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "Флаг переопределениÑ� игрового времени пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "Флаг переопределениÑ� игрового времени пользователÑ� \"%%s\" неправильный и не " "может быть уÑ�тановлен" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "Флаг разрешениÑ� игровой активноÑ�ти во времÑ� неучтённых интервалов времени " "пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "Флаг разрешениÑ� игровой активноÑ�ти во времÑ� неучтённых интервалов времени " "пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "Флаг разрешениÑ� игровой активноÑ�ти во времÑ� неучтённых интервалов времени " "пользователÑ� \"%%s\" неправильный и не может быть уÑ�тановлен" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "СпиÑ�ок дней игровой активноÑ�ти пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "СпиÑ�ок дней игровой активноÑ�ти пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "СпиÑ�ок дней игровой активноÑ�ти пользователÑ� \"%%s\" неправильный и не может " "быть уÑ�тановлен" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "СпиÑ�ок дневных ограничений игровой активноÑ�ти пользователÑ� \"%%s\" не уÑ�тановлен" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "СпиÑ�ок дневных ограничений игрового времени пользователÑ� \"%%s\" неправильный" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "СпиÑ�ок дневных ограничений игрового времени пользователÑ� \"%%s\" неправильный и " "не может быть уÑ�тановлен" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "Операции Ñ� игрового времени пользователÑ� \"%%s\" могут быть Ñ�ледующими: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "Ограничение игрового времени пользователÑ� \"%%s\" неправильное" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "Лимит игрового времени пользователÑ� \"%%s\" неверный и не может быть уÑ�тановлен" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "Ð�еожиданнаÑ� ОШИБКÐ� загрузки конфигурации. Проверьте логи Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "Ð�еожиданнаÑ� ОШИБКÐ� при получении конфигурации. Проверьте логи Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Ð�еожиданнаÑ� ОШИБКÐ� получениÑ� наÑ�троек пользователÑ�. Проверьте логи Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "Ð�еожиданнаÑ� ОШИБКÐ� получениÑ� Ñ�пиÑ�ка пользователей. Проверьте логи Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "Ð�еожиданнаÑ� ОШИБКÐ� при обновлении конфигурации. Проверьте логи Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "Ð�еожиданнаÑ� ОШИБКÐ� управлениÑ� обновлением. Проверьте логи Timekpr-nExT" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "Ð�аÑ�тройки пользовтаелÑ� \"%%s\" не найдены" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "УправлÑ�ющий файл пользователÑ� \"%%s\" не найден" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "Пользователь %%s\" не найден" #: common/constants/messages.py:160 msgid "Connected" msgstr "Соединение уÑ�тановлено" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "СоединÑ�ÑŽÑ�ÑŒ..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Ð�е удалоÑ�ÑŒ подключитьÑ�Ñ�" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Проверьте что демон Timekpr-nExT запущен еÑ�ть у ваÑ� еÑ�ть привилегии " "Ñ�уперпользователÑ�. ПоÑ�ле Ñ�того перезапуÑ�тите приложение" #: common/constants/messages.py:165 msgid "Started" msgstr "Запущено" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "КонфигурациÑ� пользователÑ� получена" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "КонфигурациÑ� получена" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "ОтÑ�леживание проÑ�тоÑ� пользователÑ� начато" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Скрытие иконки в трее длÑ� пользователÑ� включено" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Тип ограничениÑ�/блокировки длÑ� пользователÑ� уÑ�тановлен" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Пользователю предоÑ�тавлено дополнительное времÑ�" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Пользователю предоÑ�тавлено дополнительное игровое времÑ�" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "Пользователю уÑ�тановлены недельный и меÑ�Ñ�чный лимиты" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Пользователю уÑ�тановлены разрешённые дни" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Пользователю уÑ�тановлены дневные ограничениÑ� по времени" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Пользователю уÑ�тановлены разрешенные чаÑ�Ñ‹" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "КонфигурациÑ� Timekpr-nExT Ñ�охранена" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Лимиты времени пользователÑ� Ñ�охранены" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "Лимиты игрового времени пользователÑ� Ñ�охранены" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Дополнителные наÑ�тройки пользователÑ� Ñ�охранены" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "Игровое времÑ� длÑ� пользователÑ� включено" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "Флаг переопределениÑ� игрового времени длÑ� пользователÑ� включен" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "Флаг разрешениÑ� игровых активноÑ�тей во времÑ� неучтённого времени длÑ� " "пользователÑ� включен" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "Ð�ктивированы разрешённые дни игровых активноÑ�тей длÑ� пользователÑ�" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "Ð�ктивированы дневные лимиты игрового времени длÑ� пользователÑ�" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "Ð�ктивированы виды деÑ�тельноÑ�ти игрового времени длÑ� пользователÑ�" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "ПожалуйÑ�та, выберите день длÑ� уÑ�тановки лимитов" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "Этот интервал перекрываетÑ�Ñ� Ñ� Ñ�ущеÑ�твующим" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "Ð�ачало Ñ�того интервала конфликтует Ñ� Ñ�ущеÑ�твующим" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "Конец Ñ�того интервала конфликтует Ñ� Ñ�ущеÑ�твующим интервалом" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "Ð�ачало или конец Ñ�того интервала дублирует Ñ�ущеÑ�твующий" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Ð�ачало интервала не может Ñ�овпадать Ñ� окончанием" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "Ð�ачало интервала не может быть позже окончаниÑ�" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "ПожалуйÑ�та, выберите чаÑ�овой интервал длÑ� удалениÑ�" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Интервал удален" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "Timekpr-nExT ещё не готов" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "ПРЕДУПРЕЖДЕÐ�ИЕ: Было предложено запуÑ�тить утилиту админиÑ�трированиÑ� Timekpr-" "nExT в режиме графичеÑ�кого интерфейÑ�а, но диÑ�плеи недоÑ�тупны, поÑ�тому она " "работает в командной Ñ�троке..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "Команда неверна:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "Клиент Timekpr-nExT admin иÑ�пользуетÑ�Ñ� Ñ�ледующим образом:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== УВЕДОМЛЕÐ�ИЕ ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "чиÑ�ловые значениÑ� времени указаны в Ñ�екундах" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "дни недели пронумерованы в Ñ�оответÑ�твии Ñ� ISO 8601 (Ñ‚.е. понедельник - первый " "день, формат: 1-7)." #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "чаÑ�Ñ‹ пронумерованы в Ñ�оответÑ�твии Ñ� ISO 8601 (Ñ‚.е. 24-чаÑ�овые, формат: 0-23)." #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s пользователей вÑ�его:" msgstr[1] "%(n)s пользователÑ� вÑ�его:" msgstr[2] "%(n)s пользователей вÑ�его:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "КонфигурациÑ� длÑ� пользователÑ� %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "ОÑ�талоÑ�ÑŒ времени..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "ОграничениÑ� и КонфигурациÑ�" #: common/constants/messages.py:213 msgid "About" msgstr "О программе" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Контроль времени пользованиÑ� компьютером" #: common/constants/messages.py:217 msgid "Day" msgstr "День" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Включено" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Ограничение" #: common/constants/messages.py:220 msgid "From" msgstr "Из" #: common/constants/messages.py:221 msgid "from..." msgstr "из.." #: common/constants/messages.py:222 msgid "To" msgstr "Ð’" #: common/constants/messages.py:223 msgid "to..." msgstr "в..." #: common/constants/messages.py:224 msgid "Period" msgstr "Период" #: common/constants/messages.py:226 msgid "Weekly" msgstr "По неделÑ�м" #: common/constants/messages.py:227 msgid "Monthly" msgstr "ПомеÑ�Ñ�чно" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Тип Ñ�еанÑ�а" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "тип Ñ�еанÑ�а..." #: common/constants/messages.py:232 msgid "Username" msgstr "ИмÑ� пользователÑ�" #: common/constants/messages.py:233 msgid "username..." msgstr "имÑ� пользователÑ�..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "МаÑ�ка процеÑ�Ñ�а" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "маÑ�ка иÑ�полнÑ�емого файла..." #: common/constants/messages.py:236 msgid "Process description" msgstr "ОпиÑ�ание процеÑ�Ñ�а" #: common/constants/messages.py:237 msgid "process description..." msgstr "опиÑ�ание процеÑ�Ñ�а..." #: common/constants/messages.py:238 msgid "Time" msgstr "ВремÑ�" #: common/constants/messages.py:239 msgid "time..." msgstr "времÑ�..." #: common/constants/messages.py:240 msgid "Importance" msgstr "ВажноÑ�ть" #: common/constants/messages.py:241 msgid "importance..." msgstr "важноÑ�ть..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Уведомление Timekpr-nExT" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Уведомление игрового времени Timekpr-nExT" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "СегоднÑ� ваше времÑ� не ограничено" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "ОграничениÑ� времени изменилиÑ�ÑŒ, обратите внимание, поÑ�вилоÑ�ÑŒ новое времÑ�!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "КонфигурациÑ� ограничениÑ� времени изменилаÑ�ÑŒ, обратите внимание на новую " "конфигурацию!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Возникла проблема Ñ� подключением к демону Timekpr-nExT (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Возникла проблема Ñ� подключением к Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Ошибка инициализации значка (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Ваше времÑ� иÑ�текло, вы будете принудительно выведены из Ñ�иÑ�темы" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Ваше времÑ� иÑ�текло, компьютер будет принудительно выключен через" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Ваше времÑ� иÑ�текло, Ñ�еанÑ� будет принудительно заблокирован через" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Ваше времÑ� иÑ�текло, компьютер будет принудительно приоÑ�тановлен через" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s Ñ�екунда" msgstr[1] "%(n)s Ñ�екунды" msgstr[2] "%(n)s Ñ�екунд" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "ВнутреннÑ�Ñ� ошибка подключениÑ�, пожалуйÑ�та, проверьте файлы журнала" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "У ваÑ� еÑ�ть %(n)s чаÑ�" msgstr[1] "У ваÑ� еÑ�ть %(n)s чаÑ�а" msgstr[2] "У ваÑ� еÑ�ть %(n)s чаÑ�ов" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s минута" msgstr[1] "%(n)s минуты" msgstr[2] "%(n)s минут" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s Ñ�екунда" msgstr[1] "%(n)s Ñ�екунды" msgstr[2] "%(n)s Ñ�екунд" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "оÑ�талоÑ�ÑŒ %(n)s Ñ�екунда игрового времени" msgstr[1] "оÑ�талоÑ�ÑŒ %(n)s Ñ�екунды игрового времени" msgstr[2] "оÑ�талоÑ�ÑŒ %(n)s Ñ�екунд игрового времени" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "ФункциÑ� \"%% s\", котораÑ� иÑ�пользуетÑ�Ñ� длÑ� определениÑ� времени проÑ�тоÑ�, не " "может быть включена!\n" "ВремÑ� проÑ�тоÑ�/неактивного Ñ�оÑ�тоÑ�ниÑ� может не учитыватьÑ�Ñ� при блокировке Ñ�крана!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "Ð�ЕПРЕДВИДЕÐ�Ð�Ð�Я ОШИБКÐ�: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "ОШИБКÐ� РÐ�ЗБОРÐ� ПÐ�РÐ�МЕТРÐ� (пожалуйÑ�та, проверьте правильноÑ�ть параметра): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Команда Ð�Е ВЫПОЛÐ�ЕÐ�Ð�: доÑ�туп запрещен" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Команда Ð�Е ВЫПОЛÐ�ЕÐ�Ð�: Ñ�ообщение не было принÑ�то" #: common/constants/messages.py:278 msgid "n/a" msgstr "н/д" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "О программе Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Эта программа Ñ�влÑ�етÑ�Ñ� Ñ�вободным программным обеÑ�печением: вы можете " "раÑ�проÑ�транÑ�ть и/или модифицировать Ñ�оглаÑ�но GNU GPLv3 или (на ваше уÑ�мотрение) " "более поздней верÑ�ии.\n" "Эта программа раÑ�проÑ�транÑ�етÑ�Ñ� в надежде, что она будет воÑ�требована, но БЕЗ " "КÐ�КИХ ЛИБО ГÐ�РÐ�Ð�ТИЙ; даже без гарантий ПРОДÐ�Ð’Ð�ЕМОСТИ или ПРÐ�КТИЧЕСКОЙ ПОЛЬЗЫ. " "Детали можно поÑ�мотреть в GNU GPL.\n" "Ð’Ñ‹ должны были получить копию GNU GPL Ñ� Ñ�той программой. ЕÑ�ли нет, Ñ�мотрите " ". Ð’ Debian, Ñ�мотрите файл /usr/share/common-" "licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(ТонкаÑ� наÑ�тройка переводв JP Lord )\n" "(ТонкаÑ� наÑ�тройка Ð�нглийÑ�кого Phil Hudson )" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Удалить иÑ�ключаемый тип Ñ�еанÑ�ов" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Ð�дминиÑ�трирование Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Значок, не так ли?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "ПримечаниÑ�, читайте внимательно ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Это приложение длÑ� наÑ�тройки Timekpr-nExT. Оно позволÑ�ет уÑ�танавливать " "временные ограничениÑ� длÑ� отдельных пользователей, а также общие параметры " "Timekpr-nExT.\n" "Чтобы иÑ�пользовать Ñ�то приложение, вы должны либо запуÑ�тить его как " "Ñ�уперпользователь, или быть членом группы timekpr.\n" "ПожалуйÑ�та, обратите внимание, что \"Ð�дминиÑ�трирование Timekpr-nExT\" доÑ�тупно " "только в режиме Ñ�уперпользователÑ� (админиÑ�тратора)!\n" "\n" "Будьте внимательны, не заблокируйте Ñ�ами Ñ�ебÑ�!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Ð�аÑ�тройки пользователей" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "ИмÑ� пользователÑ�:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "СпиÑ�ок имен пользователей, зарегиÑ�трированных в Ñ�иÑ�теме" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "ВоÑ�Ñ�тановить" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "ВоÑ�Ñ�тановить наÑ�тройки из Ñ�охраненного Ñ�оÑ�тоÑ�ниÑ�" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "ИнформациÑ� об оÑ�тавшемÑ�Ñ�/потраченном времени" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "ОÑ�тавшееÑ�Ñ� времÑ�. Может превышать текущий день (отображаетÑ�Ñ� в режиме реального " "времени, доÑ�тупно при входе пользователÑ� в Ñ�иÑ�тему)." #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "ОÑ�тавшееÑ�Ñ� времÑ� (фактичеÑ�кое):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Формат: <дни : чаÑ�Ñ‹ : минуты : Ñ�екунды>" #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Сколько пользователь был неактивен Ñ� момента поÑ�леднего входа в Ñ�иÑ�тему " "(отображаетÑ�Ñ� в режиме реального времени, доÑ�тупно при входе пользователÑ� в " "Ñ�иÑ�тему)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "ВремÑ� бездейÑ�твиÑ� (фактичеÑ�кое):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "" "ДоÑ�тупное Ñ�егоднÑ� времÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме реального " "времени)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "ОÑ�тавшееÑ�Ñ� времÑ� (Ñ�егоднÑ�):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "" "ВремÑ�, потраченное Ñ�егоднÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме реального " "времени)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Потраченное времÑ� (Ñ�егоднÑ�):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "" "ВремÑ�, потраченное на Ñ�той неделе (Ñ�охранено в заÑ�вленном виде, не в режиме " "реального времени)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Затраченное времÑ� (неделÑ�):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "" "ВремÑ�, затраченное в Ñ�том меÑ�Ñ�це (Ñ�охранено в заÑ�вленном виде, не в режиме " "реального времени)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Затраченное времÑ� (меÑ�Ñ�ц):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Корректировки надбавок" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "СегоднÑ�шнее времÑ�" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" "Выберите Ñ�тот параметр, чтобы Ñ�корректировать норму времени пользователÑ� на " "Ñ�егоднÑ�" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "Игровое времÑ�" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "Выберите Ñ�тот параметр, чтобы изменить норму игрового времени пользователÑ� на " "Ñ�егоднÑ�" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "чаÑ�" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "" "КоличеÑ�тво минут, которое будет Ñ�корректировано Ñ� учетом Ñ�егоднÑ�шнего лимита" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "" "КоличеÑ�тво чаÑ�ов, которое должно быть Ñ�корректировано Ñ� учетом Ñ�егоднÑ�шнего " "лимита" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "мин" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Добавить указанное времÑ� (вознаграждение)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "ВычеÑ�ть указанное времÑ� (штраф)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "УÑ�тановить конкретный временной лимит" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "ИнформациÑ� об игровом времени" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "ФактичеÑ�кое игровое времÑ�, доÑ�тупное Ñ�егоднÑ� (в режиме реального времени, " "доÑ�тупно при входе пользователÑ� в Ñ�иÑ�тему)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "ОÑ�талоÑ�ÑŒ игрового времени (фактичеÑ�ки):" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Формат: <чаÑ�Ñ‹ : минуты : Ñ�екунды>" #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "" "Игровое времÑ� доÑ�тупное Ñ�егоднÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме " "реального времени)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "ОÑ�талоÑ�ÑŒ игрового времени (Ñ�егоднÑ�):" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "КоличеÑ�тво активных игровых дейÑ�твий (в режиме реального времени, доÑ�тупно при " "входе пользователÑ� в Ñ�иÑ�тему)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Текущие дейÑ�твиÑ� (фактичеÑ�кие):" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "" "Потраченное Ñ�егоднÑ� игровое времÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме " "реального времени)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "Потраченное игровое времÑ� (Ñ�егоднÑ�):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "КраткаÑ� информациÑ� о потраченном времени и вÑ�ем, что Ñ�вÑ�зано Ñ� тайм-" "менеджментом на Ñ�тот день" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "ИнформациÑ� и данные на Ñ�егоднÑ�" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Это позволÑ�ет вам наÑ�троить временные ограничениÑ�." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "ОграничениÑ� по днÑ�м недели" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "ч" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Выберите чаÑ�Ñ‹, которые будут Ñ�корректированы длÑ� выбранных дней." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "м" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Выберите минуты, которые будут Ñ�корректированы длÑ� выбранных дней." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Увеличьте Ñ�уточную норму времени на выбранную единицу времени (чаÑ�Ñ‹ или минуты) " "длÑ� выбранных дней.\n" "\n" "ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� " "корректировки!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Уменьшите дневную норму времени на выбранную единицу времени (чаÑ�Ñ‹ или минуты) " "длÑ� выбранных дней.\n" "\n" "ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� " "корректировки!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Отображает день недели и дополнительную информацию об ограничении на день.\n" "\n" "ПожалуйÑ�та, включите/отключите дни длÑ� пользователÑ�." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "ДоÑ�тупные пользователю чаÑ�овые интервалы длÑ� выбранного днÑ�.\n" "ОпциÑ� \"∞\" указывает, что времÑ�, затраченное в течение Ñ�того интервала, не " "будет учитыватьÑ�Ñ� в дневном лимите, вмеÑ�то Ñ�того оно будет учитыватьÑ�Ñ� как " "времÑ� проÑ�тоÑ�.\n" "\n" "ПожалуйÑ�та, обратите внимание, что еÑ�ли дневной лимит заканчиваетÑ�Ñ� в 24:00, а " "лимит Ñ�ледующего днÑ� начинаетÑ�Ñ� в 00:00, то пользователь может работать " "непрерывно поÑ�ле полуночи.\n" "\n" "Обратите внимание, что в течение одного чаÑ�а нельзÑ� наÑ�троить неÑ�колько " "интервалов.\n" "Интервал может начинатьÑ�Ñ� или заканчиватьÑ�Ñ� или Ñ�одержать определенный чаÑ�, но " "не более одного раза. Это Ñ�делано Ñ�пециально, не ошибка.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "ЧаÑ�овые интервалы" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Создайте новый временной интервал, который будет доÑ�тупен пользователю.\n" "\n" "ПоÑ�ле Ñ�озданиÑ� интервала, пожалуйÑ�та, отредактируйте времÑ� его начала и " "окончаниÑ� непоÑ�редÑ�твенно в Ñ�пиÑ�ке интервалов." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "Удалите выбранный временной интервал из доÑ�тупного Ñ�пиÑ�ка интервалов." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "введите чаÑ�овые интервалы" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "проверить" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Проверьте наÑ�троенные временные интервалы. Это обÑ�зательный шаг длÑ� обеÑ�печениÑ� " "правильноÑ�ти интервалов.\n" "\n" "Будут выделены интервалы, в которых еÑ�ть проблемы." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Ð�едельные и меÑ�Ñ�чные лимиты" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "д" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Выберите дни, которые будут Ñ�корректированы длÑ� выбранного периода." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Выберите чаÑ�Ñ‹, которые будут Ñ�корректированы длÑ� выбранного периода." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Выберите минуты, которые будут Ñ�корректированы длÑ� выбранного периода." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Увеличьте недельную или меÑ�Ñ�чную норму на выбранную единицу времени (дни, чаÑ�Ñ‹ " "или минуты) за выбранный период." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Уменьшите недельную или меÑ�Ñ�чную норму на выбранную единицу времени (дни, чаÑ�Ñ‹ " "или минуты) за выбранный период." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Ð�едельные и меÑ�Ñ�чные лимиты длÑ� пользователÑ�.\n" "\n" "Эти лимиты применÑ�ÑŽÑ‚Ñ�Ñ� к пользователю вмеÑ�те Ñ� оÑ�тальной конфигурацией " "ограничений." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Применить дневные лимиты" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Применить ограничение ко вÑ�ем изменениÑ�м, внеÑ�енным на Ñ�той Ñ�транице" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Ð�аÑ�тройка дневного лимита длÑ� вÑ�ех дней недели" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Ð�аÑ�тройка ограничений" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "УÑ�тановки дейÑ�твий длÑ� игрового времени" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "Параметры игрового времени" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Включить игровое времÑ� длÑ� выбранного пользователÑ�" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Включить игровое времÑ�:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Включить переопределение игрового времени длÑ� выбранного пользователÑ�.\n" "\n" "Этот параметр переопределÑ�ет учет времени таким образом, что времÑ� учитываетÑ�Ñ� " "только тогда, когда запущено хотÑ� бы одно из приложений в Ñ�пиÑ�ке дейÑ�твий в " "игровое времÑ�!\n" "\n" "Это влиÑ�ет только на учет времени, интервалы по-прежнему Ñ�облюдаютÑ�Ñ� " "полноÑ�тью!\n" "\n" "ЕÑ�ли процеÑ�Ñ�Ñ‹ не запущены, времÑ� учитываетÑ�Ñ� как времÑ� проÑ�тоÑ�, таким образом, " "фактичеÑ�ки Ñ�то Ñ�вободное времÑ� длÑ� пользователÑ�!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Включить переопределение игрового времени:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Разрешить игровые ативноÑ�ти в течение неучтенных (\"∞\") интервалов времени длÑ� " "выбранного пользователÑ�.\n" "\n" "Этот параметр позволÑ�ет пользователю иÑ�пользовать приложениÑ�, наÑ�троенные в его " "Ñ�пиÑ�ке игровых дейÑ�твий, в течение интервалов времени, которые отмечены как " "неучтенные (\"∞\").\n" "\n" "ЕÑ�ли Ñ�тот параметр включен, игровые активноÑ�ти не будет учитыватьÑ�Ñ� в рамках " "ограничений игрового времени, в противном Ñ�лучае приложениÑ� из Ñ�пиÑ�ка игр во " "времÑ� игрового времени будут прекращены, как только они будут запущены в " "течение неучтенных (\"∞\") интервалов времени." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "ДопуÑ�каетÑ�Ñ� в течение интервалов \"∞\":" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Это позволÑ�ет вам наÑ�троить ограничениÑ� игрового времени." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "Лимиты игрового времени" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Увеличьте дневную норму игрового времени на выбранную единицу (чаÑ�Ñ‹ или минуты) " "длÑ� выбранных дней.\n" "\n" "ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� " "корректировки!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Уменьшите дневную норму игрового времени на выбранную единицу (чаÑ�Ñ‹ или минуты) " "длÑ� выбранных дней.\n" "\n" "ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� " "корректировки!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Отображает день недели и дополнительную информацию об ограничении игрового " "времени на день.\n" "\n" "ПожалуйÑ�та, включите/отключите дни длÑ� пользователÑ� и уÑ�тановите норму времени " "длÑ� игровых занÑ�тий." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "Игровые дейÑ�твиÑ�" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Добавьте новое игровое дейÑ�твие.\n" "\n" "ПожалуйÑ�та, укажите маÑ�ку дейÑ�твиÑ� и удобное длÑ� пользователÑ� опиÑ�ание " "непоÑ�редÑ�твенно в Ñ�пиÑ�ке дейÑ�твий." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Удалите выбранную запиÑ�ÑŒ из Ñ�пиÑ�ка игровых активноÑ�тей." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "ПожалуйÑ�та, укажите Ñ�пиÑ�ок полных имен процеÑ�Ñ�ов (иÑ�полнÑ�емых файлов) без " "указаниÑ� пути в качеÑ�тве Ñ�трок Ñ� учетом региÑ�тра, которые будут отÑ�леживатьÑ�Ñ� в " "Ñ�иÑ�теме.\n" "\n" "Можно также указать маÑ�ки регулÑ�рных выражений длÑ� процеÑ�Ñ�ов, но, пожалуйÑ�та, " "будьте очень оÑ�торожны Ñ� ними, поÑ�кольку неправильное иÑ�пользование Ñ�того " "параметра может привеÑ�ти к уничтожению нежелательных процеÑ�Ñ�ов длÑ� " "пользователÑ�!\n" "\n" "ПРИМЕЧÐ�Ð�ИЕ: регулÑ�рные выражениÑ� - Ñ�то Ñ�кÑ�пертнаÑ� наÑ�тройка!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Применить конфигурацию игрового времени" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" "Применить ограничениÑ� игрового времени и изменениÑ� конфигурации на Ñ�той Ñ�транице" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "Ð�аÑ�тройка игрового времени" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Дополнительные параметры конфигурации" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Выберите, заÑ�читываетÑ�Ñ� ли времÑ� неактивного Ñ�еанÑ�а.\n" "\n" "ЕÑ�ли Ñ�тот флажок Ñ�нÑ�Ñ‚, времÑ�, проведенное в Ñ�еанÑ�ах входа в конÑ�оль (не в " "Ñ�мулÑ�тор терминала) и при заблокированном Ñ�кране, Ð�Е учитываетÑ�Ñ�. Это завиÑ�ит " "от Ñ�реды рабочего Ñ�тола." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "ОтÑ�леживание неактивных Ñ�еанÑ�ов:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Выберите, отображать ли значок замка Timekpr-next и уведомлениÑ� длÑ� " "пользователÑ�.\n" "\n" "Обратите внимание: еÑ�ли уÑ�тановить Ñ�тот флажок, вÑ�Ñ� информациÑ� и уведомлениÑ� " "длÑ� пользователÑ� будут отключены!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Скрыть значок и уведомлениÑ�:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Выберите тип ограничениÑ�/блокировки длÑ� пользователÑ�.\n" "\n" "ПРИМЕЧÐ�Ð�ИЕ: пожалуйÑ�та, будьте очень оÑ�торожны, подумайте заранее и прочитайте " "опиÑ�ание вÑ�ех опций при изменении Ñ�того параметра Ñ�о значениÑ� по умолчанию!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Тип ограничениÑ�/блокировки:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "завершить Ñ�еанÑ�Ñ‹" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "По иÑ�течении времени Ñ�еанÑ�Ñ‹ пользователÑ� будут прекращены.\n" "\n" "Эта опциÑ� Ñ�влÑ�етÑ�Ñ� ограничением!\n" "\n" "Это опциÑ� по умолчанию, и, Ñ�корее вÑ�его, именно она вам нужна!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "прекратить Ñ�еанÑ�Ñ‹" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "По иÑ�течении времени Ñ�еанÑ�Ñ‹ пользователÑ� будут завершены.\n" "\n" "Эта опциÑ� Ñ�влÑ�етÑ�Ñ� ограничением!\n" "\n" "ПожалуйÑ�та, оцените, нужен ли вам Ñ�тот тип ограничениÑ�!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "выключить компьютер" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "По иÑ�течении времени компьютер будет выключен.\n" "\n" "Эта опциÑ� Ñ�влÑ�етÑ�Ñ� ограничением!\n" "\n" "ПожалуйÑ�та, оцените, нужен ли вам Ñ�тот тип ограничениÑ�!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "приоÑ�тановить работу компьютера" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "По иÑ�течении времени компьютер будет приоÑ�тановлен (переведен в Ñ�пÑ�щий режим).\n" "\n" "Этот параметр не Ñ�влÑ�етÑ�Ñ� ограничением и больше подходит длÑ� целей " "Ñ�амоконтролÑ�.\n" "\n" "При пробуждении, когда времени вÑ�е еще не оÑ�талоÑ�ÑŒ, Ñ�кран компьютера будет " "заблокирован и через некоторое времÑ� Ñ�нова переведен в Ñ�пÑ�щий режим." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "приоÑ�тановка/пробуждение компьютера" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "По иÑ�течении времени компьютер будет приоÑ�тановлен (переведен в Ñ�пÑ�щий режим) и " "будет разбужен в начале Ñ�ледующего доÑ�тупного длÑ� пользователÑ� интервала " "времени.\n" "\n" "Этот параметр не Ñ�влÑ�етÑ�Ñ� ограничением и больше подходит длÑ� целей " "Ñ�амоконтролÑ�.\n" "\n" "При пробуждении, когда времени вÑ�е еще не оÑ�талоÑ�ÑŒ, Ñ�кран компьютера будет " "заблокирован и через некоторое времÑ� Ñ�нова переведен в Ñ�пÑ�щий режим." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "заблокировать Ñ�кран" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "По иÑ�течении времени Ñ�кран компьютера будет заблокирован.\n" "\n" "Этот параметр не Ñ�влÑ�етÑ�Ñ� ограничением и больше подходит длÑ� целей Ñ�амоконтролÑ�." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Выберите интервал времени, в течение которого компьютер может быть " "автоматичеÑ�ки включен.\n" "\n" "ПожалуйÑ�та, обратите внимание, что Ñ�та опциÑ� Ñ�ффективна только в том Ñ�лучае, " "еÑ�ли функциÑ� \"Пробуждение по чаÑ�ам реального времени\" поддерживаетÑ�Ñ� и " "включена в BIOS/UEFI!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "ЧаÑ�овой интервал пробуждениÑ�:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Введите времÑ� начала автоматичеÑ�кого пробуждениÑ�.\n" "\n" "ПожалуйÑ�та, обратите внимание, что Ñ�та опциÑ� Ñ�ффективна только в том Ñ�лучае, " "еÑ�ли функциÑ� пробуждениÑ� по чаÑ�ам реального времени поддерживаетÑ�Ñ� и включена в " "BIOS/UEFI!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Введите времÑ� окончаниÑ� автоматичеÑ�кого пробуждениÑ�.\n" "\n" "ПожалуйÑ�та, обратите внимание, что Ñ�та опциÑ� Ñ�ффективна только в том Ñ�лучае, " "еÑ�ли функциÑ� пробуждениÑ� по чаÑ�ам реального времени поддерживаетÑ�Ñ� и включена в " "BIOS/UEFI!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Применить конфигурацию" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Примените дополнительные изменениÑ� конфигурации на Ñ�той Ñ�транице" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "ДополнительнаÑ� конфигурациÑ�" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Дополнительные функции" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "КонфигурациÑ� пользователÑ�" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Ð�аÑ�тройки Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Управление наÑ�тройками Timekpr-nExT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Уровень ведениÑ� журнала Timekpr-nExT.\n" "\n" "ПожалуйÑ�та, не изменÑ�йте Ñ�то без крайней необходимоÑ�ти. Скорее вÑ�его, вы не " "найдете ничего интереÑ�ного в файлах журнала.\n" "\n" "ЗначениÑ�: 1 - Ñ�тандартный, 2 - отладочный, 3 - дополнительный отладочный" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "ДетализациÑ� времени опроÑ�а Ñ�еанÑ�а, котораÑ� определÑ�ет, как чаÑ�то " "пользовательÑ�кие Ñ�еанÑ�Ñ‹ и дейÑ�твиÑ� проверÑ�ÑŽÑ‚Ñ�Ñ� и учитываютÑ�Ñ�.\n" "\n" "Оптимально 3-5 Ñ�екунд, не менÑ�йте Ñ�то значение, еÑ�ли не уверены." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Интервал опроÑ�а" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Укажите времÑ� в Ñ�екундах, когда Timekpr-nExT начнет непрерывный обратный отÑ�чет " "в реальном времени, прежде чем вводить ограничение/блокировку Ñ�еанÑ�ов " "пользователÑ�." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Это определÑ�ет Ñ�короÑ�ть в Ñ�екундах, Ñ� которой фактичеÑ�кое Ñ�оÑ�тоÑ�ние " "пользователÑ� Ñ�охранÑ�етÑ�Ñ� на диÑ�к.\n" "\n" "ДлÑ� повышениÑ� производительноÑ�ти и Ñ�охранениÑ� выÑ�окой точноÑ�ти Timekpr-nExT " "учитывает времÑ� в памÑ�ти Ñ� чаÑ�тотой \"Интервал опроÑ�а\", Ñ�тот параметр " "определÑ�ет чаÑ�тоту, Ñ� которой Ñ�оÑ�тоÑ�ние пользователÑ� Ñ�охранÑ�етÑ�Ñ� на диÑ�ке длÑ� " "поÑ�тоÑ�нного хранениÑ�." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Интревал Ñ�охранениÑ�" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "КоличеÑ�тво Ñ�екунд, оÑ�тавшихÑ�Ñ� у пользователÑ� до применениÑ� наÑ�троенного " "ограничениÑ� / блокировки к его Ñ�еанÑ�ам.\n" "\n" "ПоÑ�ле того, как Ñ�то будет доÑ�тигнуто и пользователь вÑ�е еще будет активен, " "Ñ�еанÑ�Ñ‹ пользователÑ� будут обрабатыватьÑ�Ñ� в Ñ�оответÑ�твии Ñ� указанным " "ограничением/блокировкой, и почти ничего нельзÑ� будет Ñ�делать, чтобы " "предотвратить Ñ�то." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "ВремÑ� завершениÑ�" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "ВремÑ� обратного отÑ�чета" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Уровень журналированиÑ�" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "КоличеÑ�тво Ñ�екунд, оÑ�тавшихÑ�Ñ� от доÑ�тупного времени пользователÑ� до отправки " "окончательного критичеÑ�кого уведомлениÑ� о том, что времÑ� подходит к концу.\n" "\n" "ПРИМЕЧÐ�Ð�ИЕ: оÑ�тальное времÑ� уведомлениÑ� наÑ�траиваетÑ�Ñ� длÑ� каждого пользователÑ� " "индивидуально в клиентÑ�ком приложении!" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Окончательное уведомление" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Управление Ñ�лементами отÑ�леживаниÑ� Timekpr-nExT" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "ОтÑ�леживаемые Ñ�еанÑ�Ñ‹" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Добавить отÑ�леживаемый тип Ñ�еанÑ�а в Ñ�пиÑ�ок" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Удалить отÑ�леживаемый тип Ñ�еанÑ�а из Ñ�пиÑ�ка" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "СпиÑ�ок типов Ñ�еанÑ�ов, которые необходимо отÑ�леживать.\n" "\n" "ПожалуйÑ�та, не менÑ�йте и не Ñ�кÑ�периментируйте Ñ� Ñ�тим, еÑ�ли вы на Ñ�амом деле (а " "не выдаете желаемое за дейÑ�твительное) не знаете, что делаете." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "ИÑ�ключенные Ñ�еанÑ�Ñ‹" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Добавьте в Ñ�пиÑ�ок иÑ�ключаемый тип Ñ�еанÑ�ов" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Удалить иÑ�ключаемый тип Ñ�еанÑ�а из Ñ�пиÑ�ка" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "СпиÑ�ок Ñ�еанÑ�ов, которые будут иÑ�ключены из отÑ�леживаниÑ�.\n" "\n" "ПожалуйÑ�та, не менÑ�йте и не Ñ�кÑ�периментируйте Ñ� Ñ�тим, еÑ�ли вы на Ñ�амом деле (а " "не выдаете желаемое за дейÑ�твительное) не знаете, что делаете." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "ИÑ�ключённые пользователи" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Добавить пользователÑ� в Ñ�пиÑ�ок иÑ�ключений" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Удалить пользователÑ� из Ñ�пиÑ�ка иÑ�ключений" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "СпиÑ�ок пользователей, иÑ�ключенных из отÑ�леживаниÑ�.\n" "\n" "ПожалуйÑ�та, укажите здеÑ�ÑŒ реальные имена пользователей, а не наÑ�тоÑ�щие имена. " "Ð�апример, \"ipetrov\", а не \"Иван Петров\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Этот параметр определÑ�ет, включен ли функционал контролÑ� игрового времени.\n" "\n" "Это главный переключатель контролÑ� игрового времени, еÑ�ли он выключен, он " "отключаетÑ�Ñ� длÑ� вÑ�ех, незавиÑ�имо от индивидуальных наÑ�троек!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "Контроль игрового времени включён:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Этот параметр определÑ�ет, будет ли монитор игровых активноÑ�тей иÑ�пользовать " "командную Ñ�троку процеÑ�Ñ�а, включаÑ� аргументы, длÑ� мониторинга процеÑ�Ñ�ов (по " "умолчанию иÑ�пользуетÑ�Ñ� только имÑ� процеÑ�Ñ�а).\n" "\n" "Когда Ñ�тот параметр включен, Timekpr-nExT выполнит Ñ�опоÑ�тавление Ñ� полной " "командной Ñ�трокой длиной до 512 Ñ�имволов, что позволит раÑ�ширить возможноÑ�ти " "мониторинга процеÑ�Ñ�а.\n" "\n" "ПожалуйÑ�та, будьте оÑ�торожны и дважды проверьте Ñ�вои шаблоны регулÑ�рных " "выражений в маÑ�ках игровых дейÑ�твий каждого отдельного пользователÑ�!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Улучшенный мониторинг активноÑ�ти:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Применить наÑ�тройки Timekpr-nExT" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Применить вÑ�е наÑ�тройки Timekpr-nExT Ñ�разу" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Ð�аÑ�тройки админиÑ�трированиÑ� Timekpr-nExT" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "КонфигурациÑ� Timekpr-nExT" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "СтатуÑ� клиента админиÑ�трированиÑ� Timekpr-nExT" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "ИнформациÑ�" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Предупреждение" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Серьезный" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "КритичеÑ�кий" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Клиент Timekpr-nExT" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "СтатуÑ� клиента Timekpr-nExT" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Сохранить вÑ�е изменениÑ�" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Закрыть окно" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Текущее Ñ�ффективное имÑ� пользователÑ�" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "ТекущаÑ� Ñ�татиÑ�тика" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "ВремÑ�, проведенное в Ñ�том Ñ�еанÑ�е или поÑ�ле перезапуÑ�ка Timekpr-nExT" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Затраченное времÑ� (Ñ�еанÑ�):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "ВремÑ� неактивноÑ�ти в Ñ�том Ñ�еанÑ�е или поÑ�ле перезапуÑ�ка Timekpr-nExT" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "ВремÑ� проÑ�тоÑ�:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "" "Ð�епрерывное времÑ� которое вам оÑ�талоÑ�ÑŒ. Может охватывать больше текущего днÑ�." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "ОÑ�талоÑ�ÑŒ непрерывного времени:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Общее времÑ�, оÑ�тавшееÑ�Ñ� Ñ�егоднÑ� подрÑ�д, до конца днÑ�" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "ОÑ�талоÑ�ÑŒ времени Ñ�егоднÑ�:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Это дни и лимиты, которые вам доÑ�тупны" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Дни и лимиты" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "ЗдеÑ�ÑŒ показаны временные интервалы, доÑ�тупные длÑ� иÑ�пользованиÑ�.\n" "\n" "ОпциÑ� «∞» указывает, что времÑ�, проведенное в течение Ñ�того интервала, не будет " "учитыватьÑ�Ñ� в дневном лимите, а вмеÑ�то Ñ�того будет учитыватьÑ�Ñ� как проÑ�тое." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Интервалы" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Дневные лимиты" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "ДополнительнаÑ� Ñ�татиÑ�тика" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "ВремÑ�, потраченное на Ñ�той неделе" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "ВремÑ�, потраченное в Ñ�том меÑ�Ñ�це" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Выберите, будет ли учитыватьÑ�Ñ� времÑ� неактивного Ñ�еанÑ�а.\n" "\n" "ЕÑ�ли Ñ�тот флажок Ñ�нÑ�Ñ‚, времÑ�, проведенное в Ñ�еанÑ�ах входа в конÑ�оль (не в " "Ñ�мулÑ�торе терминала) и в то времÑ�, когда Ñ�кран заблокирован, Ð�Е учитываетÑ�Ñ�.\n" "Это завиÑ�ит от Ñ�реды рабочего Ñ�тола." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Учитывать времÑ� неактивного Ñ�еанÑ�а:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Выберите, будет ли учитыватьÑ�Ñ� времÑ� неактивного Ñ�еанÑ�а. ЕÑ�ли Ñ�тот флажок Ñ�нÑ�Ñ‚, " "времÑ�, проведенное в Ñ�еанÑ�ах входа в конÑ�оль (не в Ñ�мулÑ�торе терминала) и в то " "времÑ�, когда Ñ�кран заблокирован, Ð�Е учитываетÑ�Ñ�. Это завиÑ�ит от Ñ�реды рабочего " "Ñ�тола." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Дополнительные лимиты" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "ДоÑ�тупный вам лимит времени на Ñ�ту неделю" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Лимит времени (неделÑ�):" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "ДоÑ�тупный вам лимит времени на Ñ�тот меÑ�Ñ�ц" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Лимит времени (меÑ�Ñ�ц):" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "ТекущаÑ� Ñ�татÑ�тика игрового времени" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Общее количеÑ�тво игрового времени, оÑ�тавшееÑ�Ñ� на Ñ�егоднÑ�" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Общее количеÑ�тво игрового времени, потраченное Ñ�егоднÑ�" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "ВремÑ� потраченное Ñ�егоднÑ�:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Эта опциÑ� переопределÑ�ет учет времени по умолчанию.\n" "\n" "ЕÑ�ли отмечено, времÑ� учитываетÑ�Ñ� только при выполнении дейÑ�твий в «СпиÑ�ке " "дейÑ�твий/приложений», оÑ�тальное времÑ� Ñ�читаетÑ�Ñ� проÑ�тоем." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Переопределение ограничениÑ� по времени:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "КоличеÑ�тво активных в данный момент игровых дейÑ�твий" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Запущенные игровые процеÑ�Ñ�Ñ‹:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Разрешить дейÑ�твиÑ� в течение неучтенных («∞») интервалов времени.\n" "\n" "Эта наÑ�тройка позволÑ�ет иÑ�пользовать приложениÑ�, перечиÑ�ленные в «Ð�ктивноÑ�ти/" "Ñ�пиÑ�ке приложений» в течение интервалов времени, отмеченных как неучтенные " "(«∞»), еÑ�ли наÑ�тройка не включена, ни одно из дейÑ�твий не будет запуÑ�катьÑ�Ñ�!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Разрешено во времÑ� «∞»:" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "Это дни и ограничениÑ�, доÑ�тупные вам в рамках ограничений игровой активноÑ�ти" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "ЗдеÑ�ÑŒ показаны дейÑ�твиÑ�/приложениÑ�, которые Ñ�влÑ�ÑŽÑ‚Ñ�Ñ� чаÑ�тью игровых ограничений" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "СпиÑ�ок дейÑ�твий/приложений" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "КонфигурациÑ� перÑ�онализированных уведомлений о доÑ�тупном времени.\n" "\n" "ПожалуйÑ�та, наÑ�тройте уведомлениÑ� по Ñ�воему уÑ�мотрению. Однако имейте в виду, " "что будет два типа уведомлений, которые нельзÑ� перÑ�онализировать: поÑ�леднее " "предупреждение незадолго до окончаниÑ� времени и уведомлениÑ� об обратном " "отÑ�чете, когда времÑ� подходит к концу.\n" "\n" "Значение конфигурации «ВремÑ�» указывает значение времени, оÑ�тавшееÑ�Ñ� до " "отображениÑ� уведомлениÑ�, опциÑ� «ВажноÑ�ть» управлÑ�ет цветом значка и Ñ�войÑ�твами " "уведомлениÑ� Ñ�ледующим образом.\n" "\n" "ИнформациÑ� – будет показана зеленаÑ� иконка и информационное уведомление.\n" "Предупреждение – будет показан желтый значок и информационное уведомление.\n" "Серьезное – будет показан краÑ�ный значок и важное уведомление.\n" "КритичеÑ�кое — будет отображатьÑ�Ñ� краÑ�ный значок и критичеÑ�кое уведомление. " "Обычно Ñ�то уведомление отображаетÑ�Ñ� поверх вÑ�ех открытых приложений и оÑ�таетÑ�Ñ� " "открытым до тех пор, пока оно не будет закрыто, однако такое поведение во " "многом завиÑ�ит от иÑ�пользуемой Ñ�реды рабочего Ñ�тола" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "КонфигурациÑ� уведомлений" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Добавить новый порог уведомлений в Ñ�пиÑ�ок" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Удалить порог уведомлений из Ñ�пиÑ�ка" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "КонфигурациÑ� перÑ�онализированных уведомлений о доÑ�тупном игровом времени.\n" "\n" "ПожалуйÑ�та, наÑ�тройте уведомлениÑ� по Ñ�воему уÑ�мотрению.\n" "\n" "Значение конфигурации «ВремÑ�» указывает количеÑ�тво игрового времени, оÑ�тавшееÑ�Ñ� " "до отображениÑ� уведомлениÑ�, опциÑ� «ВажноÑ�ть» управлÑ�ет цветом значка и " "Ñ�войÑ�твами уведомлениÑ� Ñ�ледующим образом.\n" "\n" "ИнформациÑ� – будет показана зеленаÑ� иконка и информационное уведомление.\n" "Предупреждение – будет показан желтый значок и информационное уведомление.\n" "Серьезное – будет показан краÑ�ный значок и важное уведомление.\n" "КритичеÑ�кое — будет отображатьÑ�Ñ� краÑ�ный значок и критичеÑ�кое уведомление. " "Обычно Ñ�то уведомление отображаетÑ�Ñ� поверх вÑ�ех открытых приложений и оÑ�таетÑ�Ñ� " "открытым до тех пор, пока оно не будет закрыто, однако такое поведение во " "многом завиÑ�ит от иÑ�пользуемой Ñ�реды рабочего Ñ�тола" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "КонфигурациÑ� уведомлений игрового времени" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Добавить в Ñ�пиÑ�ок новый порог уведомлений игрового времени" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Удалить порог уведомлений игрового времени из Ñ�пиÑ�ка" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "УведомлениÑ�" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Выберите, иÑ�пользовать ли речевые уведомлениÑ�, еÑ�ли они доÑ�тупны.\n" "\n" "Ð’Ñ‹ можете Ñ�делать речевые уведомлениÑ� доÑ�тупными, уÑ�тановив пакет «python3-" "espeak» или «python3-espeak-ng»." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "ИÑ�пользовать речевые уведомлениÑ�" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Это уÑ�танавливает уровень ведениÑ� журнала.\n" "\n" "ПожалуйÑ�та, ничего не менÑ�йте, еÑ�ли вы не знаете что делаете." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Уровень журналированиÑ�" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Укажите, Ñ�ледует ли отображать уведомление при изменении конфигурации " "ограничений или разрешений" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Показать изменениÑ� лимита" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Укажите, Ñ�ледует ли отображать вÑ�е уведомлениÑ�.\n" "\n" "ЕÑ�ли флажок Ñ�нÑ�Ñ‚, то отображаютÑ�Ñ� только важные." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Показать вÑ�е уведомлениÑ�" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Укажите, Ñ�ледует ли отображать Ñ�екунды в облаÑ�ти уведомлений.\n" "\n" "Ð�екоторые Ñ�реды рабочего Ñ�тола, например KDE5, не поддерживают текÑ�Ñ‚, кроме " "значков уведомлений." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Показывать Ñ�екунды в облаÑ�ти уведомлений" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Этот параметр определÑ�ет, как долго будет отображатьÑ�Ñ� уведомление длÑ� обычных " "уведомлений об оÑ�тавшемÑ�Ñ� времени и изменениÑ�Ñ… конфигурации.\n" "\n" "Значение указываетÑ�Ñ� в Ñ�екундах.\n" "Значение 0 означает отображение до закрытиÑ� (не рекомендуетÑ�Ñ� длÑ� обычных " "уведомлений).\n" "\n" "Обратите внимание, что иÑ�пользуемаÑ� вами Ñ�реда рабочего Ñ�тола может " "переопределÑ�ть Ñ�тот тайм-аут, и в Ñ�том Ñ�лучае Ñ�тот параметр не будет иметь " "никакого влиÑ�ниÑ� на уведомление." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Таймаут уведомлениÑ� (Ñ�ек)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Этот параметр определÑ�ет, как долго будет отображатьÑ�Ñ� уведомление длÑ� " "«КритичеÑ�ких» уведомлений об оÑ�тавшемÑ�Ñ� времени (когда значок Ñ�тановитÑ�Ñ� " "краÑ�ным).\n" "\n" "Значение указываетÑ�Ñ� в Ñ�екундах.\n" "Значение 0 означает отображение до закрытиÑ�.\n" "\n" "Обратите внимание, что иÑ�пользуемаÑ� вами Ñ�реда рабочего Ñ�тола может " "переопределÑ�ть Ñ�тот тайм-аут, и в Ñ�том Ñ�лучае Ñ�тот параметр не будет иметь " "никакого влиÑ�ниÑ� на уведомление." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Таймаут критичеÑ�кого уведомлениÑ� (Ñ�ек)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Выберите, иÑ�пользовать ли звук «колокольчик» (короткий звук уведомлениÑ�) длÑ� " "объÑ�влениÑ� о новом уведомлении от Timekpr-nExT.\n" "\n" "Это работает только длÑ� включенных уведомлений.\n" "\n" "ЕÑ�ли Ñ�тот параметр недоÑ�тупен длÑ� редактированиÑ�, ваша Ñ�реда не декларирует " "поддержку звуковых уведомлений." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "ИÑ�пользовать звук «колокольчик» длÑ� уведомлений" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Ð�аÑ�тройки" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Выберите, показывать ли пользователю значок замка Timekpr-nExT и " #~ "уведомлениÑ�.\n" #~ "\n" #~ "ПожалуйÑ�та, обратите внимание, что при Ñ�нÑ�тии Ñ�того флажка отображение вÑ�ей " #~ "информации и уведомлений пользователю будет отключено!" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Выберите, иÑ�пользовать ли речевые уведомлениÑ�, еÑ�ли они доÑ�тупны.\n" #~ "\n" #~ "Ð’Ñ‹ можете Ñ�делать речевые уведомлениÑ� доÑ�тупными, уÑ�тановив пакет «python3-" #~ "espeak»." #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> уÑ�тановить ограничение / вид блокировки (\"lock\" - заблокировать " #~ "Ñ�еÑ�Ñ�ию, \"suspend\" - перевеÑ�ти компьютер в Ñ�он, \"suspendwake\" - перевеÑ�ти " #~ "компьютер в Ñ�он и вывеÑ�ти из Ñ�на, \"terminate\" - прервать Ñ�еÑ�Ñ�ию, " #~ "\"shutdown\" - выключить компьютер), примеры" timekpr-next/resource/locale/ru/LC_MESSAGES/timekpr.mo000644 001750 001750 00000305435 15122253261 024515 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–ò®–6¡˜<ؘ<™ÏR™„"š$§š‡ÌšyT›”Λ5cœ€™œ7�qRž~ÄŸhC %¬ ¹Ò¢)Œ¤E¶¥Gü¥@D¦«…§{1¨»­¨ki©ƒÕ©Yª"oªÈ’ª2[«ÖŽ«Ne¬M´¬­m®Ms®MÁ®O¯j_¯5ʯH°)I°+s°1Ÿ°[Ѱò-±! µ+B·Mn·D¼·+¸O-¸K}¸—ɸ2a¹z”¹Dº+Tº.€º¯º«/»}Û»wY¼Ѽ{Q½ƒÍ½ŸQ¾œñ¾Ž¿E¦¿Wì¿DÀòWÀOJÆ<šÍ)×Í+Î-Î�EÎóÕÎ9ÉÏ8ÐO<ÐBŒÐLÏÐ\Ñ,yÑc¦Ñ ÓG!ÓAiÓE«Ó#ñÓVÔlÔˆÔi‘ÔûÔZÕXmÖËÆ×‚’ØÎÙ_äÙJDÚ>�ÚPÎÝ+ÞKÞ?\Þ�œÞŠ-à#¸á/Üá> âJKâ{–âMã~`ãNßã,.ä;[ä1—åKÉåtæHŠæQÓæz%çN çAïç81èjè4oèX¤è!ýèpé!�í;²îîîïZïZzðËÕñ8¡òÚò7ïòT'ó||óùóZôVrôÉôMÜô*õ)Aõ2kõcžõh÷hkø,Ôødúífû+Tü:€üa»ü5ý+Sýý>’ý/Ñý.þ0þbGþyªþø$Š ¨µÏzï|j¨ç©�2:tm@â†#·ª�b=äd" 8‡ HÀ B ,L Oy 2É vü Bs ­¶ Ûd X@ ^™ Mø F:daŸ5!7YbuNØK';sB¯gòOZª\Ãg 3ˆ9¼5ö,,%YLsÌG@ƒˆÕ »â¢žºAYüþV!%U#^{$Ú%Gî%J6&�&.”&0Ã&Lô&$A'µf(±) Î)ï*K+(L+9u+¯+?Ï+h,<x,Pµ,p-]w-hÕ->.š].�ø.[ˆ/Tä/a90�›0E)1 o1k�4^ü4U[5ñ±6'£9¿Ë<¨‹=„4A•¹B–OCxæD _GˆjGšóG;ŽHrÊH=I9XI1’I/ÄI"ôI'J)?J iJL KLWKJ¤K/ïK/L3OL1ƒL;µL©ñLq›M= N«KNŸ÷N1—O ÉOBÖO%PC?P/ƒP³P8ÍP#Q—*Q#ÂRæRSi SfsS_ÚS`:T‡›TM#U[qU=ÍUB V'NV.vV€¥VŠ&Wˆ±W‚:Xy½Xw7YZ¯Y> ZEIZP�Z/àZ1[XB[Y›[Bõ[G8\€\óC]Ã7^Šû^»†_�B`qÒ`¢DarçasZb¥Îbttc‚écld°ìd€�e‹f€ªfb+g›Žgk*hM–h~ähDci}¨iZ&jk�jœíjlŠkY÷kŠQlZÜll7m�¤mmBnn°n]o�}oƒph’p™ûpi•qUÿq†UrVÜr3s Ss-ts"¢sCÅt7 vAv1^v�v3¤vòØvcËw/xú2yË-z0ù|*:€eV�<¼�uù�xo‚‚è‚xkƒäƒ0çƒ1„J„Q„{T„Єׄ!ë„% …3…6…=…SC…$—…¼…%Ó…Dù…<>†{† ›†r©†Š!"Š"DŠgŠ¢zŠc\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:17+0300 Last-Translator: Eduards Bezverhijs Language-Team: Russian Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s минута%(n)s минуты%(n)s минут%(n)s Ñ�екунда%(n)s Ñ�екунды%(n)s Ñ�екунд%(n)s Ñ�екунда%(n)s Ñ�екунды%(n)s Ñ�екундоÑ�талоÑ�ÑŒ %(n)s Ñ�екунда игрового времениоÑ�талоÑ�ÑŒ %(n)s Ñ�екунды игрового времениоÑ�талоÑ�ÑŒ %(n)s Ñ�екунд игрового времени%(n)s пользователей вÑ�его:%(n)s пользователÑ� вÑ�его:%(n)s пользователей вÑ�его:---=== УВЕДОМЛЕÐ�ИЕ ===---==> получить текущую информацию о времени пользователÑ� Ñ� Ñ�ервера, например==> получить Ñ�пиÑ�ок пользователей Ñ�охраненных на Ñ�ервере, например==> получить Ñ� Ñ�ервера конфигурацию пользователÑ� и информацию о времени, например==> показать Ñ�правку, например==> уÑ�тановить маÑ�ки процеÑ�Ñ�ов, которые будут учтены как игры, например==> уÑ�тановить оÑ�тавшееÑ�Ñ� времÑ� длÑ� игр пользователÑ� на текущий момент: "+" (добавить времÑ�), "-" (уменьшить времÑ�), "=" (уÑ�тановить точное значение), например (добавить один чаÑ�)==> уÑ�тановить ограничениÑ� длÑ� игрового времени длÑ� вÑ�ех доÑ�тупных дней недели, количеÑ�тво значений не должно превышать количеÑ�тво доÑ�тупных дней недели длÑ� игровых активноÑ�тей пользователÑ�, например==> уÑ�тановить дни недели доÑ�тупные длÑ� игровых активноÑ�тей, например==> уÑ�тановить разрешенные дни длÑ� пользователÑ�, например==> уÑ�тановить разрешённые чаÑ�Ñ‹ длÑ� выбранного днÑ� недели или "ALL" длÑ� вÑ�ех, дополнительно можете указать начало и конец в минутах в квадратных Ñ�кобках [x-y], дополнительно можете добавить ! (воÑ�клицательный знак) перед чаÑ�ами, еÑ�ли Ñ�то времÑ� не должно учитыватьÑ�Ñ� (Ñ�вободное времÑ� пользователÑ�), например==> уÑ�тановить ограничение / вид блокировки ("lock" - заблокировать Ñ�еÑ�Ñ�ию, "suspend" - перевеÑ�ти компьютер в Ñ�он, "suspendwake" - перевеÑ�ти компьютер в Ñ�он и вывеÑ�ти из Ñ�на, "terminate" - прервать Ñ�еÑ�Ñ�ию, "kill" - прекратить Ñ�еÑ�Ñ�ию, "shutdown" - выключить компьютер), примеры==> уÑ�тановить оÑ�тавшееÑ�Ñ� времÑ� пользователÑ� на текущий момент: "+" (добавить времÑ�), "-" (уменьшить времÑ�), "=" (уÑ�тановить точное значение), например (добавить один чаÑ�)==> уÑ�тановить лимит на меÑ�Ñ�ц, например==> уÑ�тановить лимит на неделю, например==> уÑ�тановить ограничениÑ� по времени длÑ� вÑ�ех разрешённых дней недели, количеÑ�тво значений не должно превышать количеÑ�тво разрешённых длÑ� пользователÑ� дней недели, например==> уÑ�тановить, разрешены ли игровые активноÑ�ти во времÑ� неучитываемых ("∞") периодов, например==> уÑ�тановить, доÑ�тупно ли длÑ� пользователÑ� игровое времÑ�, например==> уÑ�тановить, должно ли времÑ� пользователÑ� учитыватьÑ�Ñ� как игровое вмеÑ�то обычного времени, например==> cпрÑ�тать иконку в трее и отключить уведомлениÑ�, например==> уÑ�тановить отÑ�леживать ли неактивные Ñ�еÑ�Ñ�ии пользователей, напримерО программеО программе Timekpr-nExTКоличеÑ�тво активных игровых дейÑ�твий (в режиме реального времени, доÑ�тупно при входе пользователÑ� в Ñ�иÑ�тему)СпиÑ�ок дейÑ�твий/приложенийФактичеÑ�кое игровое времÑ�, доÑ�тупное Ñ�егоднÑ� (в режиме реального времени, доÑ�тупно при входе пользователÑ� в Ñ�иÑ�тему)Добавить пользователÑ� в Ñ�пиÑ�ок иÑ�ключенийДобавьте в Ñ�пиÑ�ок иÑ�ключаемый тип Ñ�еанÑ�овДобавьте новое игровое дейÑ�твие. ПожалуйÑ�та, укажите маÑ�ку дейÑ�твиÑ� и удобное длÑ� пользователÑ� опиÑ�ание непоÑ�редÑ�твенно в Ñ�пиÑ�ке дейÑ�твий.Добавить в Ñ�пиÑ�ок новый порог уведомлений игрового времениДобавить новый порог уведомлений в Ñ�пиÑ�окДобавить указанное времÑ� (вознаграждение)Добавить отÑ�леживаемый тип Ñ�еанÑ�а в Ñ�пиÑ�окПользователю предоÑ�тавлено дополнительное игровое времÑ�ДополнительнаÑ� конфигурациÑ�Дополнительные параметры конфигурацииДополнительные лимитыДополнительные функцииДополнительнаÑ� Ñ�татиÑ�тикаПользователю предоÑ�тавлено дополнительное времÑ�Разрешить игровые ативноÑ�ти в течение неучтенных ("∞") интервалов времени длÑ� выбранного пользователÑ�. Этот параметр позволÑ�ет пользователю иÑ�пользовать приложениÑ�, наÑ�троенные в его Ñ�пиÑ�ке игровых дейÑ�твий, в течение интервалов времени, которые отмечены как неучтенные ("∞"). ЕÑ�ли Ñ�тот параметр включен, игровые активноÑ�ти не будет учитыватьÑ�Ñ� в рамках ограничений игрового времени, в противном Ñ�лучае приложениÑ� из Ñ�пиÑ�ка игр во времÑ� игрового времени будут прекращены, как только они будут запущены в течение неучтенных ("∞") интервалов времени.Разрешить дейÑ�твиÑ� в течение неучтенных («∞») интервалов времени. Эта наÑ�тройка позволÑ�ет иÑ�пользовать приложениÑ�, перечиÑ�ленные в «Ð�ктивноÑ�ти/Ñ�пиÑ�ке приложений» в течение интервалов времени, отмеченных как неучтенные («∞»), еÑ�ли наÑ�тройка не включена, ни одно из дейÑ�твий не будет запуÑ�катьÑ�Ñ�!Корректировки надбавокПользователю уÑ�тановлены разрешённые дниДопуÑ�каетÑ�Ñ� в течение интервалов "∞":Разрешено во времÑ� «∞»:Пользователю уÑ�тановлены разрешенные чаÑ�ыПрименить конфигурацию игрового времениПрименить ограничениÑ� игрового времени и изменениÑ� конфигурации на Ñ�той Ñ�траницеПрименить наÑ�тройки Timekpr-nExTПримените дополнительные изменениÑ� конфигурации на Ñ�той Ñ�траницеПрименить вÑ�е наÑ�тройки Timekpr-nExT Ñ�разуПрименить конфигурациюПрименить дневные лимитыПрименить ограничение ко вÑ�ем изменениÑ�м, внеÑ�енным на Ñ�той Ñ�траницеКраткаÑ� информациÑ� о потраченном времени и вÑ�ем, что Ñ�вÑ�зано Ñ� тайм-менеджментом на Ñ�тот деньВыберите дни, которые будут Ñ�корректированы длÑ� выбранного периода.Выберите чаÑ�Ñ‹, которые будут Ñ�корректированы длÑ� выбранных дней.Выберите чаÑ�Ñ‹, которые будут Ñ�корректированы длÑ� выбранного периода.Выберите минуты, которые будут Ñ�корректированы длÑ� выбранных дней.Выберите минуты, которые будут Ñ�корректированы длÑ� выбранного периода.Выберите Ñ�тот параметр, чтобы изменить норму игрового времени пользователÑ� на Ñ�егоднÑ�Выберите Ñ�тот параметр, чтобы Ñ�корректировать норму времени пользователÑ� на Ñ�егоднÑ�Закрыть окноКоманда Ð�Е ВЫПОЛÐ�ЕÐ�Ð�: доÑ�туп запрещенКоманда Ð�Е ВЫПОЛÐ�ЕÐ�Ð�: Ñ�ообщение не было принÑ�тоÐ�аÑ�тройкиКонфигурациÑ� перÑ�онализированных уведомлений о доÑ�тупном игровом времени. ПожалуйÑ�та, наÑ�тройте уведомлениÑ� по Ñ�воему уÑ�мотрению. Значение конфигурации «ВремÑ�» указывает количеÑ�тво игрового времени, оÑ�тавшееÑ�Ñ� до отображениÑ� уведомлениÑ�, опциÑ� «ВажноÑ�ть» управлÑ�ет цветом значка и Ñ�войÑ�твами уведомлениÑ� Ñ�ледующим образом. ИнформациÑ� – будет показана зеленаÑ� иконка и информационное уведомление. Предупреждение – будет показан желтый значок и информационное уведомление. Серьезное – будет показан краÑ�ный значок и важное уведомление. КритичеÑ�кое — будет отображатьÑ�Ñ� краÑ�ный значок и критичеÑ�кое уведомление. Обычно Ñ�то уведомление отображаетÑ�Ñ� поверх вÑ�ех открытых приложений и оÑ�таетÑ�Ñ� открытым до тех пор, пока оно не будет закрыто, однако такое поведение во многом завиÑ�ит от иÑ�пользуемой Ñ�реды рабочего Ñ�толаКонфигурациÑ� перÑ�онализированных уведомлений о доÑ�тупном времени. ПожалуйÑ�та, наÑ�тройте уведомлениÑ� по Ñ�воему уÑ�мотрению. Однако имейте в виду, что будет два типа уведомлений, которые нельзÑ� перÑ�онализировать: поÑ�леднее предупреждение незадолго до окончаниÑ� времени и уведомлениÑ� об обратном отÑ�чете, когда времÑ� подходит к концу. Значение конфигурации «ВремÑ�» указывает значение времени, оÑ�тавшееÑ�Ñ� до отображениÑ� уведомлениÑ�, опциÑ� «ВажноÑ�ть» управлÑ�ет цветом значка и Ñ�войÑ�твами уведомлениÑ� Ñ�ледующим образом. ИнформациÑ� – будет показана зеленаÑ� иконка и информационное уведомление. Предупреждение – будет показан желтый значок и информационное уведомление. Серьезное – будет показан краÑ�ный значок и важное уведомление. КритичеÑ�кое — будет отображатьÑ�Ñ� краÑ�ный значок и критичеÑ�кое уведомление. Обычно Ñ�то уведомление отображаетÑ�Ñ� поверх вÑ�ех открытых приложений и оÑ�таетÑ�Ñ� открытым до тех пор, пока оно не будет закрыто, однако такое поведение во многом завиÑ�ит от иÑ�пользуемой Ñ�реды рабочего Ñ�толаКонфигурациÑ� длÑ� пользователÑ� %s:КонфигурациÑ� полученаСоединение уÑ�тановленоСоединÑ�ÑŽÑ�ÑŒ...Ð�епрерывное времÑ� которое вам оÑ�талоÑ�ÑŒ. Может охватывать больше текущего днÑ�.ОÑ�тавшееÑ�Ñ� времÑ�. Может превышать текущий день (отображаетÑ�Ñ� в режиме реального времени, доÑ�тупно при входе пользователÑ� в Ñ�иÑ�тему).ОÑ�талоÑ�ÑŒ непрерывного времени:Управление наÑ�тройками Timekpr-nExTУправление Ñ�лементами отÑ�леживаниÑ� Timekpr-nExTÐ�е указаны виды управлениÑ� Ñ�еÑ�Ñ�иÑ�миСпиÑ�ок видов управлениÑ� Ñ�еÑ�Ñ�иÑ�ми неверенСпиÑ�ок типов Ñ�еанÑ�ов неверен и не может быть заданВремÑ� обратного отÑ�четаСоздайте новый временной интервал, который будет доÑ�тупен пользователю. ПоÑ�ле Ñ�озданиÑ� интервала, пожалуйÑ�та, отредактируйте времÑ� его начала и окончаниÑ� непоÑ�редÑ�твенно в Ñ�пиÑ�ке интервалов.КритичеÑ�кийТаймаут критичеÑ�кого уведомлениÑ� (Ñ�ек)ТекущаÑ� Ñ�татÑ�тика игрового времениТекущее Ñ�ффективное имÑ� пользователÑ�ТекущаÑ� Ñ�татиÑ�тикаÐ�аÑ�тройка дневного лимита длÑ� вÑ�ех дней неделиДневные лимитыДеньПользователю уÑ�тановлены дневные ограничениÑ� по времениДни и лимитыУменьшите дневную норму игрового времени на выбранную единицу (чаÑ�Ñ‹ или минуты) длÑ� выбранных дней. ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� корректировки!Уменьшите дневную норму времени на выбранную единицу времени (чаÑ�Ñ‹ или минуты) длÑ� выбранных дней. ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� корректировки!Уменьшите недельную или меÑ�Ñ�чную норму на выбранную единицу времени (дни, чаÑ�Ñ‹ или минуты) за выбранный период.Удалите выбранный временной интервал из доÑ�тупного Ñ�пиÑ�ка интервалов.Eduards Bezverhijs (ТонкаÑ� наÑ�тройка переводв JP Lord ) (ТонкаÑ� наÑ�тройка Ð�нглийÑ�кого Phil Hudson )Включить игровое времÑ� длÑ� выбранного пользователÑ�Игровое времÑ� длÑ� пользователÑ� включеноВключить переопределение игрового времени длÑ� выбранного пользователÑ�. Этот параметр переопределÑ�ет учет времени таким образом, что времÑ� учитываетÑ�Ñ� только тогда, когда запущено хотÑ� бы одно из приложений в Ñ�пиÑ�ке дейÑ�твий в игровое времÑ�! Это влиÑ�ет только на учет времени, интервалы по-прежнему Ñ�облюдаютÑ�Ñ� полноÑ�тью! ЕÑ�ли процеÑ�Ñ�Ñ‹ не запущены, времÑ� учитываетÑ�Ñ� как времÑ� проÑ�тоÑ�, таким образом, фактичеÑ�ки Ñ�то Ñ�вободное времÑ� длÑ� пользователÑ�!Включить переопределение игрового времени:Включить игровое времÑ�:ВключеноУлучшенный мониторинг активноÑ�ти:Введите времÑ� окончаниÑ� автоматичеÑ�кого пробуждениÑ�. ПожалуйÑ�та, обратите внимание, что Ñ�та опциÑ� Ñ�ффективна только в том Ñ�лучае, еÑ�ли функциÑ� пробуждениÑ� по чаÑ�ам реального времени поддерживаетÑ�Ñ� и включена в BIOS/UEFI!Введите времÑ� начала автоматичеÑ�кого пробуждениÑ�. ПожалуйÑ�та, обратите внимание, что Ñ�та опциÑ� Ñ�ффективна только в том Ñ�лучае, еÑ�ли функциÑ� пробуждениÑ� по чаÑ�ам реального времени поддерживаетÑ�Ñ� и включена в BIOS/UEFI!ИÑ�ключенные Ñ�еанÑ�ыИÑ�ключённые пользователиИÑ�ключённые виды Ñ�еÑ�Ñ�ий не заданыСпиÑ�ок иÑ�ключённых видов Ñ�еÑ�Ñ�ий неверенСпиÑ�ок иÑ�ключённых видов Ñ�еÑ�Ñ�ий неверен и не может быть уÑ�тановленСпиÑ�ок иÑ�ключённых пользователей неверенСпиÑ�ок иÑ�ключённых пользователей неверен и не может быть уÑ�тановленСпиÑ�ок иÑ�ключённых пользователей не заданÐ�е удалоÑ�ÑŒ подключитьÑ�Ñ�ФункциÑ� "%% s", котораÑ� иÑ�пользуетÑ�Ñ� длÑ� определениÑ� времени проÑ�тоÑ�, не может быть включена! ВремÑ� проÑ�тоÑ�/неактивного Ñ�оÑ�тоÑ�ниÑ� может не учитыватьÑ�Ñ� при блокировке Ñ�крана!Окончательное уведомлениеВремÑ� поÑ�леднего уведомлениÑ� "%%s" неверноВремÑ� поÑ�леднего уведомлениÑ� "%%s" неверно и не может быть заданоВремÑ� поÑ�леднего уведомлениÑ� не заданоВремÑ� поÑ�леднего предупреждениÑ� "%%s" неверноВремÑ� поÑ�леднего предупреждениÑ� "%%s" неверно и не может быть заданоВремÑ� поÑ�леднего предупреждениÑ� не заданоФормат: <дни : чаÑ�Ñ‹ : минуты : Ñ�екунды>Формат: <чаÑ�Ñ‹ : минуты : Ñ�екунды>ИзСкрыть значок и уведомлениÑ�:Скрытие иконки в трее длÑ� пользователÑ� включеноЧаÑ�овые интервалыДоÑ�тупные пользователю чаÑ�овые интервалы длÑ� выбранного днÑ�. ОпциÑ� "∞" указывает, что времÑ�, затраченное в течение Ñ�того интервала, не будет учитыватьÑ�Ñ� в дневном лимите, вмеÑ�то Ñ�того оно будет учитыватьÑ�Ñ� как времÑ� проÑ�тоÑ�. ПожалуйÑ�та, обратите внимание, что еÑ�ли дневной лимит заканчиваетÑ�Ñ� в 24:00, а лимит Ñ�ледующего днÑ� начинаетÑ�Ñ� в 00:00, то пользователь может работать непрерывно поÑ�ле полуночи. Обратите внимание, что в течение одного чаÑ�а нельзÑ� наÑ�троить неÑ�колько интервалов. Интервал может начинатьÑ�Ñ� или заканчиватьÑ�Ñ� или Ñ�одержать определенный чаÑ�, но не более одного раза. Это Ñ�делано Ñ�пециально, не ошибка. Сколько пользователь был неактивен Ñ� момента поÑ�леднего входа в Ñ�иÑ�тему (отображаетÑ�Ñ� в режиме реального времени, доÑ�тупно при входе пользователÑ� в Ñ�иÑ�тему)Ошибка инициализации значка (%%s)!Значок, не так ли?ВажноÑ�тьУвеличьте дневную норму игрового времени на выбранную единицу (чаÑ�Ñ‹ или минуты) длÑ� выбранных дней. ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� корректировки!Увеличьте Ñ�уточную норму времени на выбранную единицу времени (чаÑ�Ñ‹ или минуты) длÑ� выбранных дней. ПожалуйÑ�та, обратите внимание, что вы можете выбрать более одного днÑ� длÑ� корректировки!Увеличьте недельную или меÑ�Ñ�чную норму на выбранную единицу времени (дни, чаÑ�Ñ‹ или минуты) за выбранный период.ИнформациÑ� и данные на Ñ�егоднÑ�ИнформациÑ�ИнформациÑ� об игровом времениИнформациÑ� об оÑ�тавшемÑ�Ñ�/потраченном времениВнутреннÑ�Ñ� ошибка подключениÑ�, пожалуйÑ�та, проверьте файлы журналаИнтервал удаленÐ�ачало интервала не может Ñ�овпадать Ñ� окончаниемÐ�ачало интервала не может быть позже окончаниÑ�ИнтервалыКонтроль времени пользованиÑ� компьютеромОграничениеÐ�аÑ�тройка ограниченийОграничениÑ� и КонфигурациÑ�СпиÑ�ок типов Ñ�еанÑ�ов, которые необходимо отÑ�леживать. ПожалуйÑ�та, не менÑ�йте и не Ñ�кÑ�периментируйте Ñ� Ñ�тим, еÑ�ли вы на Ñ�амом деле (а не выдаете желаемое за дейÑ�твительное) не знаете, что делаете.СпиÑ�ок Ñ�еанÑ�ов, которые будут иÑ�ключены из отÑ�леживаниÑ�. ПожалуйÑ�та, не менÑ�йте и не Ñ�кÑ�периментируйте Ñ� Ñ�тим, еÑ�ли вы на Ñ�амом деле (а не выдаете желаемое за дейÑ�твительное) не знаете, что делаете.СпиÑ�ок имен пользователей, зарегиÑ�трированных в Ñ�иÑ�темеСпиÑ�ок пользователей, иÑ�ключенных из отÑ�леживаниÑ�. ПожалуйÑ�та, укажите здеÑ�ÑŒ реальные имена пользователей, а не наÑ�тоÑ�щие имена. Ð�апример, "ipetrov", а не "Иван Петров".Отображает день недели и дополнительную информацию об ограничении игрового времени на день. ПожалуйÑ�та, включите/отключите дни длÑ� пользователÑ� и уÑ�тановите норму времени длÑ� игровых занÑ�тий.Отображает день недели и дополнительную информацию об ограничении на день. ПожалуйÑ�та, включите/отключите дни длÑ� пользователÑ�.Уровень журналированиÑ�Уровень логированиÑ� "%%s" неверенУровень логированиÑ� "%%s" неверен и не может быть заданУровень логированиÑ� не заданУровень журналированиÑ�ПомеÑ�Ñ�чноПримечаниÑ�, читайте внимательно ;)КонфигурациÑ� уведомленийТаймаут уведомлениÑ� (Ñ�ек)УведомлениÑ�КоличеÑ�тво активных в данный момент игровых дейÑ�твийКоличеÑ�тво Ñ�екунд, оÑ�тавшихÑ�Ñ� у пользователÑ� до применениÑ� наÑ�троенного ограничениÑ� / блокировки к его Ñ�еанÑ�ам. ПоÑ�ле того, как Ñ�то будет доÑ�тигнуто и пользователь вÑ�е еще будет активен, Ñ�еанÑ�Ñ‹ пользователÑ� будут обрабатыватьÑ�Ñ� в Ñ�оответÑ�твии Ñ� указанным ограничением/блокировкой, и почти ничего нельзÑ� будет Ñ�делать, чтобы предотвратить Ñ�то.КоличеÑ�тво Ñ�екунд, оÑ�тавшихÑ�Ñ� от доÑ�тупного времени пользователÑ� до отправки окончательного критичеÑ�кого уведомлениÑ� о том, что времÑ� подходит к концу. ПРИМЕЧÐ�Ð�ИЕ: оÑ�тальное времÑ� уведомлениÑ� наÑ�траиваетÑ�Ñ� длÑ� каждого пользователÑ� индивидуально в клиентÑ�ком приложении!ОШИБКÐ� РÐ�ЗБОРÐ� ПÐ�РÐ�МЕТРÐ� (пожалуйÑ�та, проверьте правильноÑ�ть параметра): %%sПериодИгровое времÑ�Игровые дейÑ�твиÑ�Ð�ктивированы виды деÑ�тельноÑ�ти игрового времени длÑ� пользователÑ�Ð�ктивированы разрешённые дни игровых активноÑ�тей длÑ� пользователÑ�Флаг разрешениÑ� игровых активноÑ�тей во времÑ� неучтённого времени длÑ� пользователÑ� включенИгровое времÑ� доÑ�тупное Ñ�егоднÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме реального времени)Ð�аÑ�тройка игрового времениÐ�ктивированы дневные лимиты игрового времени длÑ� пользователÑ�Контроль игрового времени включён:Флаг раÑ�ширенного монитора активноÑ�ти игрового времени "%%s" неправильныйФлаг раÑ�ширенного монитора активноÑ�ти игрового времени "%%s" неправильный и не может быть уÑ�тановленФлаг раÑ�ширенного монитора активноÑ�ти игрового времени не уÑ�тановленФлаг игрового времени "%%s" неверенФлаг игрового времени "%%s" неверен и не может быть заданФлаг игрового времени не заданОÑ�талоÑ�ÑŒ игрового времени (фактичеÑ�ки):ОÑ�талоÑ�ÑŒ игрового времени (Ñ�егоднÑ�):Лимиты игрового времениКонфигурациÑ� уведомлений игрового времениПараметры игрового времениФлаг переопределениÑ� игрового времени длÑ� пользователÑ� включенПотраченное игровое времÑ� (Ñ�егоднÑ�):Потраченное Ñ�егоднÑ� игровое времÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме реального времени)Проверьте что демон Timekpr-nExT запущен еÑ�ть у ваÑ� еÑ�ть привилегии Ñ�уперпользователÑ�. ПоÑ�ле Ñ�того перезапуÑ�тите приложениеПожалуйÑ�та, выберите день длÑ� уÑ�тановки лимитовПожалуйÑ�та, выберите чаÑ�овой интервал длÑ� удалениÑ�ПожалуйÑ�та, укажите Ñ�пиÑ�ок полных имен процеÑ�Ñ�ов (иÑ�полнÑ�емых файлов) без указаниÑ� пути в качеÑ�тве Ñ�трок Ñ� учетом региÑ�тра, которые будут отÑ�леживатьÑ�Ñ� в Ñ�иÑ�теме. Можно также указать маÑ�ки регулÑ�рных выражений длÑ� процеÑ�Ñ�ов, но, пожалуйÑ�та, будьте очень оÑ�торожны Ñ� ними, поÑ�кольку неправильное иÑ�пользование Ñ�того параметра может привеÑ�ти к уничтожению нежелательных процеÑ�Ñ�ов длÑ� пользователÑ�! ПРИМЕЧÐ�Ð�ИЕ: регулÑ�рные выражениÑ� - Ñ�то Ñ�кÑ�пертнаÑ� наÑ�тройка!Интервал опроÑ�аИнтервал обновлениÑ� "%%s" неверенИнтервал обновлениÑ� "%%s" неверен и не может быть заданИнтервал обновлениÑ� не заданОпиÑ�ание процеÑ�Ñ�аМаÑ�ка процеÑ�Ñ�аУдалить порог уведомлений игрового времени из Ñ�пиÑ�каУдалить пользователÑ� из Ñ�пиÑ�ка иÑ�ключенийУдалить иÑ�ключаемый тип Ñ�еанÑ�а из Ñ�пиÑ�каУдалить иÑ�ключаемый тип Ñ�еанÑ�овУдалить порог уведомлений из Ñ�пиÑ�каУдалите выбранную запиÑ�ÑŒ из Ñ�пиÑ�ка игровых активноÑ�тей.Удалить отÑ�леживаемый тип Ñ�еанÑ�а из Ñ�пиÑ�каВоÑ�Ñ�тановитьВоÑ�Ñ�тановить наÑ�тройки из Ñ�охраненного Ñ�оÑ�тоÑ�ниÑ�Тип ограничениÑ�/блокировки длÑ� пользователÑ� уÑ�тановленТип ограничениÑ�/блокировки:Текущие дейÑ�твиÑ� (фактичеÑ�кие):Запущенные игровые процеÑ�Ñ�Ñ‹:Сохранить вÑ�е изменениÑ�Интревал Ñ�охранениÑ�СохранениÑ� Ñ�охранениÑ� на диÑ�к "%%s" неверенСохранениÑ� Ñ�охранениÑ� на диÑ�к "%%s" неверен и не может быть заданСохранениÑ� Ñ�охранениÑ� на диÑ�к не заданВыберите тип ограничениÑ�/блокировки длÑ� пользователÑ�. ПРИМЕЧÐ�Ð�ИЕ: пожалуйÑ�та, будьте очень оÑ�торожны, подумайте заранее и прочитайте опиÑ�ание вÑ�ех опций при изменении Ñ�того параметра Ñ�о значениÑ� по умолчанию!Выберите интервал времени, в течение которого компьютер может быть автоматичеÑ�ки включен. ПожалуйÑ�та, обратите внимание, что Ñ�та опциÑ� Ñ�ффективна только в том Ñ�лучае, еÑ�ли функциÑ� "Пробуждение по чаÑ�ам реального времени" поддерживаетÑ�Ñ� и включена в BIOS/UEFI!Выберите, будет ли учитыватьÑ�Ñ� времÑ� неактивного Ñ�еанÑ�а. ЕÑ�ли Ñ�тот флажок Ñ�нÑ�Ñ‚, времÑ�, проведенное в Ñ�еанÑ�ах входа в конÑ�оль (не в Ñ�мулÑ�торе терминала) и в то времÑ�, когда Ñ�кран заблокирован, Ð�Е учитываетÑ�Ñ�. Это завиÑ�ит от Ñ�реды рабочего Ñ�тола.Выберите, заÑ�читываетÑ�Ñ� ли времÑ� неактивного Ñ�еанÑ�а. ЕÑ�ли Ñ�тот флажок Ñ�нÑ�Ñ‚, времÑ�, проведенное в Ñ�еанÑ�ах входа в конÑ�оль (не в Ñ�мулÑ�тор терминала) и при заблокированном Ñ�кране, Ð�Е учитываетÑ�Ñ�. Это завиÑ�ит от Ñ�реды рабочего Ñ�тола.Выберите, будет ли учитыватьÑ�Ñ� времÑ� неактивного Ñ�еанÑ�а. ЕÑ�ли Ñ�тот флажок Ñ�нÑ�Ñ‚, времÑ�, проведенное в Ñ�еанÑ�ах входа в конÑ�оль (не в Ñ�мулÑ�торе терминала) и в то времÑ�, когда Ñ�кран заблокирован, Ð�Е учитываетÑ�Ñ�. Это завиÑ�ит от Ñ�реды рабочего Ñ�тола.Выберите, отображать ли значок замка Timekpr-next и уведомлениÑ� длÑ� пользователÑ�. Обратите внимание: еÑ�ли уÑ�тановить Ñ�тот флажок, вÑ�Ñ� информациÑ� и уведомлениÑ� длÑ� пользователÑ� будут отключены!Выберите, иÑ�пользовать ли звук «колокольчик» (короткий звук уведомлениÑ�) длÑ� объÑ�влениÑ� о новом уведомлении от Timekpr-nExT. Это работает только длÑ� включенных уведомлений. ЕÑ�ли Ñ�тот параметр недоÑ�тупен длÑ� редактированиÑ�, ваша Ñ�реда не декларирует поддержку звуковых уведомлений.Выберите, иÑ�пользовать ли речевые уведомлениÑ�, еÑ�ли они доÑ�тупны. Ð’Ñ‹ можете Ñ�делать речевые уведомлениÑ� доÑ�тупными, уÑ�тановив пакет «python3-espeak» или «python3-espeak-ng».ДетализациÑ� времени опроÑ�а Ñ�еанÑ�а, котораÑ� определÑ�ет, как чаÑ�то пользовательÑ�кие Ñ�еанÑ�Ñ‹ и дейÑ�твиÑ� проверÑ�ÑŽÑ‚Ñ�Ñ� и учитываютÑ�Ñ�. Оптимально 3-5 Ñ�екунд, не менÑ�йте Ñ�то значение, еÑ�ли не уверены.Тип Ñ�еанÑ�аУÑ�тановить конкретный временной лимитУÑ�тановки дейÑ�твий длÑ� игрового времениСерьезныйПоказать вÑ�е уведомлениÑ�Показать изменениÑ� лимитаПоказывать Ñ�екунды в облаÑ�ти уведомленийУкажите времÑ� в Ñ�екундах, когда Timekpr-nExT начнет непрерывный обратный отÑ�чет в реальном времени, прежде чем вводить ограничение/блокировку Ñ�еанÑ�ов пользователÑ�.Укажите, Ñ�ледует ли отображать уведомление при изменении конфигурации ограничений или разрешенийУкажите, Ñ�ледует ли отображать вÑ�е уведомлениÑ�. ЕÑ�ли флажок Ñ�нÑ�Ñ‚, то отображаютÑ�Ñ� только важные.Укажите, Ñ�ледует ли отображать Ñ�екунды в облаÑ�ти уведомлений. Ð�екоторые Ñ�реды рабочего Ñ�тола, например KDE5, не поддерживают текÑ�Ñ‚, кроме значков уведомлений.ЗапущеноСтатуÑ� клиента админиÑ�трированиÑ� Timekpr-nExTСтатуÑ� клиента Timekpr-nExTВычеÑ�ть указанное времÑ� (штраф)ВремÑ� завершениÑ�ВремÑ� окончаниÑ� Ñ�еÑ�Ñ�ии "%%s" неверноВремÑ� окончаниÑ� Ñ�еÑ�Ñ�ии "%%s" неверно и не может быть заданоВремÑ� окончаниÑ� Ñ�еÑ�Ñ�ии не заданоЭтот интервал перекрываетÑ�Ñ� Ñ� Ñ�ущеÑ�твующимКонец Ñ�того интервала конфликтует Ñ� Ñ�ущеÑ�твующим интерваломÐ�ачало Ñ�того интервала конфликтует Ñ� Ñ�ущеÑ�твующимÐ�ачало или конец Ñ�того интервала дублирует Ñ�ущеÑ�твующийКоманда неверна:КоличеÑ�тво чаÑ�ов, которое должно быть Ñ�корректировано Ñ� учетом Ñ�егоднÑ�шнего лимитаКоличеÑ�тво минут, которое будет Ñ�корректировано Ñ� учетом Ñ�егоднÑ�шнего лимитаКлиент Timekpr-nExT admin иÑ�пользуетÑ�Ñ� Ñ�ледующим образом:Возникла проблема Ñ� подключением к Timekpr-nExT (%%s)!Возникла проблема Ñ� подключением к демону Timekpr-nExT (%%s)!Это дни и ограничениÑ�, доÑ�тупные вам в рамках ограничений игровой активноÑ�тиЭто дни и лимиты, которые вам доÑ�тупныЭто приложение длÑ� наÑ�тройки Timekpr-nExT. Оно позволÑ�ет уÑ�танавливать временные ограничениÑ� длÑ� отдельных пользователей, а также общие параметры Timekpr-nExT. Чтобы иÑ�пользовать Ñ�то приложение, вы должны либо запуÑ�тить его как Ñ�уперпользователь, или быть членом группы timekpr. ПожалуйÑ�та, обратите внимание, что "Ð�дминиÑ�трирование Timekpr-nExT" доÑ�тупно только в режиме Ñ�уперпользователÑ� (админиÑ�тратора)! Будьте внимательны, не заблокируйте Ñ�ами Ñ�ебÑ�!Это позволÑ�ет вам наÑ�троить ограничениÑ� игрового времени.Это позволÑ�ет вам наÑ�троить временные ограничениÑ�.Эта опциÑ� переопределÑ�ет учет времени по умолчанию. ЕÑ�ли отмечено, времÑ� учитываетÑ�Ñ� только при выполнении дейÑ�твий в «СпиÑ�ке дейÑ�твий/приложений», оÑ�тальное времÑ� Ñ�читаетÑ�Ñ� проÑ�тоем.Этот параметр определÑ�ет, как долго будет отображатьÑ�Ñ� уведомление длÑ� «КритичеÑ�ких» уведомлений об оÑ�тавшемÑ�Ñ� времени (когда значок Ñ�тановитÑ�Ñ� краÑ�ным). Значение указываетÑ�Ñ� в Ñ�екундах. Значение 0 означает отображение до закрытиÑ�. Обратите внимание, что иÑ�пользуемаÑ� вами Ñ�реда рабочего Ñ�тола может переопределÑ�ть Ñ�тот тайм-аут, и в Ñ�том Ñ�лучае Ñ�тот параметр не будет иметь никакого влиÑ�ниÑ� на уведомление.Этот параметр определÑ�ет, как долго будет отображатьÑ�Ñ� уведомление длÑ� обычных уведомлений об оÑ�тавшемÑ�Ñ� времени и изменениÑ�Ñ… конфигурации. Значение указываетÑ�Ñ� в Ñ�екундах. Значение 0 означает отображение до закрытиÑ� (не рекомендуетÑ�Ñ� длÑ� обычных уведомлений). Обратите внимание, что иÑ�пользуемаÑ� вами Ñ�реда рабочего Ñ�тола может переопределÑ�ть Ñ�тот тайм-аут, и в Ñ�том Ñ�лучае Ñ�тот параметр не будет иметь никакого влиÑ�ниÑ� на уведомление.Это уÑ�танавливает уровень ведениÑ� журнала. ПожалуйÑ�та, ничего не менÑ�йте, еÑ�ли вы не знаете что делаете.Этот параметр определÑ�ет, будет ли монитор игровых активноÑ�тей иÑ�пользовать командную Ñ�троку процеÑ�Ñ�а, включаÑ� аргументы, длÑ� мониторинга процеÑ�Ñ�ов (по умолчанию иÑ�пользуетÑ�Ñ� только имÑ� процеÑ�Ñ�а). Когда Ñ�тот параметр включен, Timekpr-nExT выполнит Ñ�опоÑ�тавление Ñ� полной командной Ñ�трокой длиной до 512 Ñ�имволов, что позволит раÑ�ширить возможноÑ�ти мониторинга процеÑ�Ñ�а. ПожалуйÑ�та, будьте оÑ�торожны и дважды проверьте Ñ�вои шаблоны регулÑ�рных выражений в маÑ�ках игровых дейÑ�твий каждого отдельного пользователÑ�!Этот параметр определÑ�ет, включен ли функционал контролÑ� игрового времени. Это главный переключатель контролÑ� игрового времени, еÑ�ли он выключен, он отключаетÑ�Ñ� длÑ� вÑ�ех, незавиÑ�имо от индивидуальных наÑ�троек!ЗдеÑ�ÑŒ показаны дейÑ�твиÑ�/приложениÑ�, которые Ñ�влÑ�ÑŽÑ‚Ñ�Ñ� чаÑ�тью игровых ограниченийЗдеÑ�ÑŒ показаны временные интервалы, доÑ�тупные длÑ� иÑ�пользованиÑ�. ОпциÑ� «∞» указывает, что времÑ�, проведенное в течение Ñ�того интервала, не будет учитыватьÑ�Ñ� в дневном лимите, а вмеÑ�то Ñ�того будет учитыватьÑ�Ñ� как проÑ�тое.Это определÑ�ет Ñ�короÑ�ть в Ñ�екундах, Ñ� которой фактичеÑ�кое Ñ�оÑ�тоÑ�ние пользователÑ� Ñ�охранÑ�етÑ�Ñ� на диÑ�к. ДлÑ� повышениÑ� производительноÑ�ти и Ñ�охранениÑ� выÑ�окой точноÑ�ти Timekpr-nExT учитывает времÑ� в памÑ�ти Ñ� чаÑ�тотой "Интервал опроÑ�а", Ñ�тот параметр определÑ�ет чаÑ�тоту, Ñ� которой Ñ�оÑ�тоÑ�ние пользователÑ� Ñ�охранÑ�етÑ�Ñ� на диÑ�ке длÑ� поÑ�тоÑ�нного хранениÑ�.ВремÑ�ОграничениÑ� времени изменилиÑ�ÑŒ, обратите внимание, поÑ�вилоÑ�ÑŒ новое времÑ�!ДоÑ�тупное Ñ�егоднÑ� времÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме реального времени)ВремÑ� бездейÑ�твиÑ� (фактичеÑ�кое):ВремÑ� неактивноÑ�ти в Ñ�том Ñ�еанÑ�е или поÑ�ле перезапуÑ�ка Timekpr-nExTВремÑ� проÑ�тоÑ�:ОÑ�тавшееÑ�Ñ� времÑ� (фактичеÑ�кое):ОÑ�тавшееÑ�Ñ� времÑ� (Ñ�егоднÑ�):ОÑ�талоÑ�ÑŒ времени Ñ�егоднÑ�:ОÑ�талоÑ�ÑŒ времени...Лимит времени (меÑ�Ñ�ц):Лимит времени (неделÑ�):КонфигурациÑ� ограничениÑ� времени изменилаÑ�ÑŒ, обратите внимание на новую конфигурацию!ДоÑ�тупный вам лимит времени на Ñ�тот меÑ�Ñ�цДоÑ�тупный вам лимит времени на Ñ�ту неделюПереопределение ограничениÑ� по времени:Затраченное времÑ� (меÑ�Ñ�ц):Затраченное времÑ� (Ñ�еанÑ�):Потраченное времÑ� (Ñ�егоднÑ�):Затраченное времÑ� (неделÑ�):ВремÑ�, потраченное в Ñ�том меÑ�Ñ�цеВремÑ�, затраченное в Ñ�том меÑ�Ñ�це (Ñ�охранено в заÑ�вленном виде, не в режиме реального времени)ВремÑ�, проведенное в Ñ�том Ñ�еанÑ�е или поÑ�ле перезапуÑ�ка Timekpr-nExTВремÑ�, потраченное на Ñ�той неделеВремÑ�, потраченное на Ñ�той неделе (Ñ�охранено в заÑ�вленном виде, не в режиме реального времени)ВремÑ�, потраченное Ñ�егоднÑ� (Ñ�охранено в заÑ�вленном виде, не в режиме реального времени)ВремÑ� потраченное Ñ�егоднÑ�:Timekpr-nExTÐ�аÑ�тройки админиÑ�трированиÑ� Timekpr-nExTКонфигурациÑ� Timekpr-nExTУведомление игрового времени Timekpr-nExTÐ�дминиÑ�трирование Timekpr-nExTКлиент Timekpr-nExTКонфигурациÑ� Timekpr-nExT Ñ�охраненаTimekpr-nExT ещё не готовУровень ведениÑ� журнала Timekpr-nExT. ПожалуйÑ�та, не изменÑ�йте Ñ�то без крайней необходимоÑ�ти. Скорее вÑ�его, вы не найдете ничего интереÑ�ного в файлах журнала. ЗначениÑ�: 1 - Ñ�тандартный, 2 - отладочный, 3 - дополнительный отладочныйУведомление Timekpr-nExTÐ�аÑ�тройки Timekpr-nExTВОбщее количеÑ�тво игрового времени, оÑ�тавшееÑ�Ñ� на Ñ�егоднÑ�Общее количеÑ�тво игрового времени, потраченное Ñ�егоднÑ�Общее времÑ�, оÑ�тавшееÑ�Ñ� Ñ�егоднÑ� подрÑ�д, до конца днÑ�Параметр отÑ�леживаниÑ� неактивных Ñ�еÑ�Ñ�ий "%%s" неверенПараметр отÑ�леживаниÑ� неактивных Ñ�еÑ�Ñ�ий "%%s" неверен и не может быть заданОтÑ�леживание проÑ�тоÑ� пользователÑ� начатоПараметр отÑ�леживаниÑ� неактивных Ñ�еÑ�Ñ�ий не заданОтÑ�леживание неактивных Ñ�еанÑ�ов:Учитывать времÑ� неактивного Ñ�еанÑ�а:ОтÑ�леживаемые Ñ�еанÑ�Ñ‹Ð�ЕПРЕДВИДЕÐ�Ð�Ð�Я ОШИБКÐ�: %%sÐ�еожиданнаÑ� ОШИБКÐ� при получении конфигурации. Проверьте логи Timekpr-nExTÐ�еожиданнаÑ� ОШИБКÐ� получениÑ� наÑ�троек пользователÑ�. Проверьте логи Timekpr-nExTÐ�еожиданнаÑ� ОШИБКÐ� получениÑ� Ñ�пиÑ�ка пользователей. Проверьте логи Timekpr-nExTÐ�еожиданнаÑ� ОШИБКÐ� при обновлении конфигурации. Проверьте логи Timekpr-nExTÐ�еожиданнаÑ� ОШИБКÐ� управлениÑ� обновлением. Проверьте логи Timekpr-nExTÐ�еожиданнаÑ� ОШИБКÐ� загрузки конфигурации. Проверьте логи Timekpr-nExTИÑ�пользовать звук «колокольчик» длÑ� уведомленийИÑ�пользовать речевые уведомлениÑ�Ð�аÑ�тройки пользовтаелÑ� "%%s" не найденыУправлÑ�ющий файл пользователÑ� "%%s" не найденПользователь %%s" не найденКонфигурациÑ� пользователÑ�Лимиты игрового времени пользователÑ� Ñ�охраненыДополнителные наÑ�тройки пользователÑ� Ñ�охраненыКонфигурациÑ� пользователÑ� полученаЛимиты времени пользователÑ� Ñ�охраненыФлаг разрешениÑ� игровой активноÑ�ти во времÑ� неучтённых интервалов времени пользователÑ� "%%s" неправильныйФлаг разрешениÑ� игровой активноÑ�ти во времÑ� неучтённых интервалов времени пользователÑ� "%%s" неправильный и не может быть уÑ�тановленФлаг разрешениÑ� игровой активноÑ�ти во времÑ� неучтённых интервалов времени пользователÑ� "%%s" не уÑ�тановленСпиÑ�ок дневных ограничений игрового времени пользователÑ� "%%s" неправильныйСпиÑ�ок дневных ограничений игрового времени пользователÑ� "%%s" неправильный и не может быть уÑ�тановленСпиÑ�ок дневных ограничений игровой активноÑ�ти пользователÑ� "%%s" не уÑ�тановленСпиÑ�ок дней игровой активноÑ�ти пользователÑ� "%%s" неправильныйСпиÑ�ок дней игровой активноÑ�ти пользователÑ� "%%s" неправильный и не может быть уÑ�тановленСпиÑ�ок дней игровой активноÑ�ти пользователÑ� "%%s" не уÑ�тановленФлаг включениÑ� игрового времени пользователÑ� "%%s" неправильныйФлаг включениÑ� игрового времени пользователÑ� "%%s" неправильный и не может быть уÑ�тановленФлаг включениÑ� игрового времени пользователÑ� "%%s" не уÑ�тановленОперации Ñ� игрового времени пользователÑ� "%%s" могут быть Ñ�ледующими: - + =Флаг переопределениÑ� игрового времени пользователÑ� "%%s" неправильныйФлаг переопределениÑ� игрового времени пользователÑ� "%%s" неправильный и не может быть уÑ�тановленФлаг переопределениÑ� игрового времени пользователÑ� "%%s" не уÑ�тановленЛимит игрового времени пользователÑ� "%%s" неверный и не может быть уÑ�тановленРазрешенные чаÑ�Ñ‹ пользователÑ� "%%s" неверны и не могут быть уÑ�тановленыСпиÑ�ок дневных лимитов пользователÑ� "%%s" неправильныйСпиÑ�ок дневных ограничений пользователÑ� "%%s" неправильный и не может быть уÑ�тановленСпиÑ�ок дневных ограничений пользователÑ� "%%s" не уÑ�тановленСпиÑ�ок дней пользователÑ� "%%s" неправильныйСпиÑ�ок дней пользователÑ� "%%s" неправильный и не может быть уÑ�тановленСпиÑ�ок дней пользователÑ� "%%s" не заданÐ�омер днÑ� длÑ� пользователÑ� "%%s" должен находитьÑ�Ñ� в диапазоне от 1 до 7Ð�омер днÑ� длÑ� пользователÑ� "%%s" должен быть указанФлаг пользователÑ� "%% s" Ñ�крывать значок в трее неправильныйФлаг пользователÑ� "%% s" Ñ�крывать значок в трее неправильный и не может быть уÑ�тановленФлаг пользователÑ� "%% s" Ñ�крывать значок в трее не уÑ�тановленЕжемеÑ�Ñ�чный лимит пользователÑ� "%%s" неправильныйЕжемеÑ�Ñ�чный лимит пользователÑ� "%%s" неправильный и не может быть уÑ�тановленЕжемеÑ�Ñ�чный лимит пользователÑ� "%%s" не уÑ�тановленТип ограничениÑ�/блокировки пользователÑ� «%%s» неправильныйТип ограничениÑ�/блокировки пользователÑ� «%%s» неправильный и не может быть уÑ�тановленТип ограничениÑ�/блокировки пользователÑ� «%%s» не уÑ�тановленОграничение игрового времени пользователÑ� "%%s" неправильноеОграничение времени пользователÑ� "%%s" неправильноеОграничение времени пользователÑ� "%%s" неправильное и не может быть уÑ�тановленоОперациÑ� Ñ�о временем пользователÑ� "%%s" может быть одной из Ñ�ледующих: - + =Флаг отÑ�леживаниÑ� проÑ�тоÑ� пользователÑ� "%%s" неправильныйФлаг отÑ�леживаниÑ� проÑ�тоÑ� пользователÑ� "%%s" неправильный и не может быть уÑ�тановленФлаг отÑ�леживаниÑ� проÑ�тоÑ� пользователÑ� "%%s" не уÑ�тановленÐ�едельный лимит пользователÑ� "%%s" неправильныйÐ�едельный лимит пользователÑ� "%%s" неправильный и не может быть уÑ�тановленÐ�едельный лимит пользователÑ� "%%s" не уÑ�тановленИмÑ� пользователÑ�ИмÑ� пользователÑ�:Ð�аÑ�тройки пользователейПроверьте наÑ�троенные временные интервалы. Это обÑ�зательный шаг длÑ� обеÑ�печениÑ� правильноÑ�ти интервалов. Будут выделены интервалы, в которых еÑ�ть проблемы.ПРЕДУПРЕЖДЕÐ�ИЕ: Было предложено запуÑ�тить утилиту админиÑ�трированиÑ� Timekpr-nExT в режиме графичеÑ�кого интерфейÑ�а, но диÑ�плеи недоÑ�тупны, поÑ�тому она работает в командной Ñ�троке...ЧаÑ�овой интервал пробуждениÑ�:ПредупреждениеОграничениÑ� по днÑ�м неделиПо неделÑ�мÐ�едельные и меÑ�Ñ�чные лимитыÐ�едельные и меÑ�Ñ�чные лимиты длÑ� пользователÑ�. Эти лимиты применÑ�ÑŽÑ‚Ñ�Ñ� к пользователю вмеÑ�те Ñ� оÑ�тальной конфигурацией ограничений.Пользователю уÑ�тановлены недельный и меÑ�Ñ�чный лимитыПо иÑ�течении времени Ñ�кран компьютера будет заблокирован. Этот параметр не Ñ�влÑ�етÑ�Ñ� ограничением и больше подходит длÑ� целей Ñ�амоконтролÑ�.По иÑ�течении времени компьютер будет выключен. Эта опциÑ� Ñ�влÑ�етÑ�Ñ� ограничением! ПожалуйÑ�та, оцените, нужен ли вам Ñ�тот тип ограничениÑ�!По иÑ�течении времени компьютер будет приоÑ�тановлен (переведен в Ñ�пÑ�щий режим) и будет разбужен в начале Ñ�ледующего доÑ�тупного длÑ� пользователÑ� интервала времени. Этот параметр не Ñ�влÑ�етÑ�Ñ� ограничением и больше подходит длÑ� целей Ñ�амоконтролÑ�. При пробуждении, когда времени вÑ�е еще не оÑ�талоÑ�ÑŒ, Ñ�кран компьютера будет заблокирован и через некоторое времÑ� Ñ�нова переведен в Ñ�пÑ�щий режим.По иÑ�течении времени компьютер будет приоÑ�тановлен (переведен в Ñ�пÑ�щий режим). Этот параметр не Ñ�влÑ�етÑ�Ñ� ограничением и больше подходит длÑ� целей Ñ�амоконтролÑ�. При пробуждении, когда времени вÑ�е еще не оÑ�талоÑ�ÑŒ, Ñ�кран компьютера будет заблокирован и через некоторое времÑ� Ñ�нова переведен в Ñ�пÑ�щий режим.По иÑ�течении времени Ñ�еанÑ�Ñ‹ пользователÑ� будут завершены. Эта опциÑ� Ñ�влÑ�етÑ�Ñ� ограничением! ПожалуйÑ�та, оцените, нужен ли вам Ñ�тот тип ограничениÑ�!По иÑ�течении времени Ñ�еанÑ�Ñ‹ пользователÑ� будут прекращены. Эта опциÑ� Ñ�влÑ�етÑ�Ñ� ограничением! Это опциÑ� по умолчанию, и, Ñ�корее вÑ�его, именно она вам нужна!У ваÑ� еÑ�ть %(n)s чаÑ�У ваÑ� еÑ�ть %(n)s чаÑ�аУ ваÑ� еÑ�ть %(n)s чаÑ�овСегоднÑ� ваше времÑ� не ограниченоВаше времÑ� иÑ�текло, вы будете принудительно выведены из Ñ�иÑ�темыВаше времÑ� иÑ�текло, компьютер будет принудительно выключен черезВаше времÑ� иÑ�текло, компьютер будет принудительно приоÑ�тановлен черезВаше времÑ� иÑ�текло, Ñ�еанÑ� будет принудительно заблокирован черездвведите чаÑ�овые интервалымаÑ�ка иÑ�полнÑ�емого файла...из..ччаÑ�Ñ‹ пронумерованы в Ñ�оответÑ�твии Ñ� ISO 8601 (Ñ‚.е. 24-чаÑ�овые, формат: 0-23).чаÑ�важноÑ�ть...прекратить Ñ�еанÑ�ызаблокировать Ñ�кранмминн/дчиÑ�ловые значениÑ� времени указаны в Ñ�екундахопиÑ�ание процеÑ�Ñ�а...тип Ñ�еанÑ�а...выключить компьютерприоÑ�тановка/пробуждение компьютераприоÑ�тановить работу компьютеразавершить Ñ�еанÑ�ывремÑ�...Эта программа Ñ�влÑ�етÑ�Ñ� Ñ�вободным программным обеÑ�печением: вы можете раÑ�проÑ�транÑ�ть и/или модифицировать Ñ�оглаÑ�но GNU GPLv3 или (на ваше уÑ�мотрение) более поздней верÑ�ии. Эта программа раÑ�проÑ�транÑ�етÑ�Ñ� в надежде, что она будет воÑ�требована, но БЕЗ КÐ�КИХ ЛИБО ГÐ�РÐ�Ð�ТИЙ; даже без гарантий ПРОДÐ�Ð’Ð�ЕМОСТИ или ПРÐ�КТИЧЕСКОЙ ПОЛЬЗЫ. Детали можно поÑ�мотреть в GNU GPL. Ð’Ñ‹ должны были получить копию GNU GPL Ñ� Ñ�той программой. ЕÑ�ли нет, Ñ�мотрите . Ð’ Debian, Ñ�мотрите файл /usr/share/common-licenses/GPL-3в...СегоднÑ�шнее времÑ�имÑ� пользователÑ�...проверитьдни недели пронумерованы в Ñ�оответÑ�твии Ñ� ISO 8601 (Ñ‚.е. понедельник - первый день, формат: 1-7).timekpr-next/resource/locale/lv/000775 001750 001750 00000000000 13476006650 020713 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/lv/LC_MESSAGES/000775 001750 001750 00000000000 15122253261 022470 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/lv/LC_MESSAGES/timekpr.po000644 001750 001750 00000305760 15122253261 024514 0ustar00bezvfedubezvfedu000000 000000 # Eduards Bezverhijs (Tieto) , 2020. msgid "" msgstr "" "Project-Id-Version: Timekpr nExT\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:18+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Eduards Bezverhijs\n" "Language: lv_LV\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __:1,2\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> izdrukÄ� palÄ«dzÄ«bu, piemÄ“rs" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> iegÅ«st faktisko lietotÄ�ju sarakstu no servera, piemÄ“rs" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "==> iegÅ«st lietotÄ�ja konfigurÄ�ciju un informÄ�ciju no servera, piemÄ“rs" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "iegÅ«st lietotÄ�ja reÄ�lÄ� laika informÄ�ciju no servera, piemÄ“rs" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> komanda uzstÄ�da pieļaujamo dienu sarakstu lietotÄ�jam, piemÄ“rs" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> uzstÄ�da pieļaujamos stundu ierobežojumus konkrÄ“tajai dienai vai \"ALL\" " "visÄ�m dienÄ�m, norÄ�diet sÄ�kuma un beigu minÅ«ti iekavÄ�s Å¡Ä�di [X-Y], papildus " "iespÄ“jams norÄ�dÄ«t ! pirms stundas, kura netiks uzskaitÄ«ta (brÄ«vs laiks " "lietotÄ�jam), piemÄ“rs" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> uzstÄ�da laika ierobežojumus visÄ�m nedēļas dienÄ�m, vÄ“rtÄ«bu skaitam jÄ�sakrÄ«t " "ar atļauto dienu skaitu, piemÄ“rs" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> uzstÄ�da laika ierobežojumu nedēļai, piemÄ“rs" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> uzstÄ�da laika ierobežojumu mÄ“nesim, piemÄ“rs" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "==> uzstÄ�da neaktÄ«vo sesiju uzskaites pazÄ«mi, piemÄ“rs" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "==> uzstÄ�da slÄ“dzenes un paziņojumu slÄ“pÅ¡anas pazÄ«mi, piemÄ“rs" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> uzstÄ�dÄ«t ierobežojumu veidu (\"lock\" - aizslÄ“gt darbvirsmu, \"suspend\" - " "ievietot guļoÅ¡Ä� režīmÄ�, \"suspendwake\" - ievietot guļoÅ¡Ä� režīmÄ� un pamodinÄ�t, " "\"terminate\" - pÄ�rtraukt sesijas, \"kill\" - izbeigt sesijas, \"shutdown\" - " "izslÄ“gt datoru), piemÄ“ri" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> uzstÄ�da laika ierobežojumus Å¡odien: \"+\" (pieliek laiku), \"-\" (noņem " "laiku), \"=\" (uzstÄ�da konkrÄ“tu pieejamo laiku), piemÄ“rs (pievieno vienu stundu)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> iespÄ“jo PlayTime laika uzskaiti lietotÄ�jam, piemÄ“rs" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "==> iespÄ“jo PlayTime alternatÄ«vÄ� laika uzskaiti lietotÄ�jam, piemÄ“rs" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> iespÄ“jo PlayTime laika uzskaiti arÄ« laika intervÄ�los, kas netiek uzskaitÄ«ti " "(\"∞\"), piemÄ“rs" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "==> uzstÄ�da pieļaujamo PlayTime dienu sarakstu lietotÄ�jam, piemÄ“rs" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> uzstÄ�da PlayTime laika ierobežojumus nedēļas dienÄ�m (vÄ“rtÄ«bu skaitam " "jÄ�sakrÄ«t ar atļauto dienu skaitu), piemÄ“rs" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> uzstÄ�da PlayTime procesu filtrus, kas tiks izmantoti laika uzskaitÄ“, " "piemÄ“ram" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> uzstÄ�da PlayTime laika ierobežojumus Å¡odien: \"+\" (pieliek laiku), \"-\" " "(noņem laiku), \"=\" (uzstÄ�da konkrÄ“tu pieejamo laiku), piemÄ“rs (pievieno vienu " "stundu)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "UzskaitÄ�mo sesiju tipi netika padoti" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "UzskaitÄ�mo sesiju tipi nav korekti" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "UzskaitÄ�mo sesiju tipi nav korekti un uzstÄ�dÄ�mi" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "NeuzskaitÄ�mo sesiju tipi netika padoti" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "NeuzskaitÄ�mo sesiju tipi nav korekti" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "NeuzskaitÄ�mo sesiju tipi nav korekti un uzstÄ�dÄ�mi" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "NeuzskaitÄ�mo lietotÄ�ju saraksts netika padots" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "NeuzskaitÄ�mo lietotÄ�ju saraksts nav korekts" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "NeuzskaitÄ�mo lietotÄ�ju saraksts nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "PÄ“dÄ“jÄ� brÄ«dinÄ�juma laiks nav padots" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "PÄ“dÄ“jÄ� brÄ«dinÄ�juma laiks \"%%s\" nav korekts" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "PÄ“dÄ“jÄ� brÄ«dinÄ�juma laiks \"%%s\" nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "PÄ“dÄ“jÄ� paziņojuma laiks nav padots" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "PÄ“dÄ“jÄ� paziņojuma laiks \"%%s\" nav korekts" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "PÄ“dÄ“jÄ� paziņojuma laiks \"%%s\" nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "Sesiju izbeigÅ¡anas laiks netika padots" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "Sesiju izbeigÅ¡anas laiks \"%%s\" nav korekts" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "Sesiju izbeigÅ¡anas laiks \"%%s\" nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "UzskaitÄ«tÄ�s sesijas netika padotas" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "UzskaitÄ�mo sesiju pazÄ«me \"%%s\" nav korekta" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "NeaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba \"%%s\" nav korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "TehniskÄ� žurnÄ�la lÄ«menis netika padots" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "TehniskÄ� žurnÄ�la lÄ«menis \"%%s\" nav korekts" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "TehniskÄ� žurnÄ�la lÄ«menis \"%%s\" nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "AtjaunoÅ¡anas intervÄ�ls nav padots" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "AtjaunoÅ¡anas intervÄ�ls \"%%s\" nav korekts" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "AtjaunoÅ¡anas intervÄ�ls \"%%s\" nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "SaglabÄ�Å¡anas laiks nav norÄ�dÄ«ts" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "SaglabÄ�Å¡anas laiks \"%%s\" nav korekts" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "SaglabÄ�Å¡anas laiks \"%%s\" nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba nav padota" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba \"%%s\" nav korekta" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba \"%%s\" nav korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "PlayTime uzlabotÄ� aktivitÄ�Å¡u meklÄ“tÄ�ja vÄ“rtÄ«ba nav padota" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "PlayTime uzlabotÄ� aktivitÄ�Å¡u meklÄ“tÄ�ja vÄ“rtÄ«ba \"%%s\" nav korekta" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "PlayTime uzlabotÄ� aktivitÄ�Å¡u meklÄ“tÄ�ja vÄ“rtÄ«ba \"%%s\" nav korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "LietotÄ�ja \"%%s\" dienas numurs netika padots" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "LietotÄ�ja \"%%s\" dienas numuram jÄ�bÅ«t no 1 lÄ«dz 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" dienas numurs nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "LietotÄ�ja \"%%s\" pieļaujamo dienu saraksts netika padots" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "LietotÄ�ja \"%%s\" pieļaujamo dienu saraksts nav korekts" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" pieļaujamo dienu saraksts nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "LietotÄ�ja \"%%s\" dienu laika ierobežojumi netika padoti" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "LietotÄ�ja \"%%s\" dienu laika ierobežojumi nav korekti" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" dienu laika ierobežojumi nav korekti un uzstÄ�dÄ�mi" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "LietotÄ�ja \"%%s\" pieļaujamÄ� laika operÄ�cija varbÅ«t viena no sekojoÅ¡Ä�m: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "LietotÄ�ja \"%%s\" laika ierobežojums nav korekts" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" laika ierobežojums nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "LietotÄ�ja \"%%s\" pieļaujamais mÄ“neÅ¡a ierobežojums netika padots" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "LietotÄ�ja \"%%s\" pieļaujamais mÄ“neÅ¡a ierobežojums nav korekts" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "LietotÄ�ja \"%%s\" pieļaujamais mÄ“neÅ¡a ierobežojums nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "LietotÄ�ja \"%%s\" neaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba nav padota" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "LietotÄ�ja \"%%s\" neaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba nav korekta" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "LietotÄ�ja \"%%s\" neaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba nav korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "LietotÄ�ja \"%%s\" slÄ“dzenes slÄ“pÅ¡anas vÄ“rtÄ«ba nav padota" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "LietotÄ�ja \"%%s\" slÄ“dzenes slÄ“pÅ¡anas vÄ“rtÄ«ba nav korekta" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" slÄ“dzenes slÄ“pÅ¡anas vÄ“rtÄ«ba nav korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "LietotÄ�ja \"%%s\" ierobežojumu veida vÄ“rtÄ«ba nav padota" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "LietotÄ�ja \"%%s\" ierobežojumu veida vÄ“rtÄ«ba nav korekta" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" ierobežojumu veida vÄ“rtÄ«ba nav korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "LietotÄ�ja \"%%s\" mÄ“neÅ¡a laika ierobežojums nav padots" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "LietotÄ�ja \"%%s\" mÄ“neÅ¡a laika ierobežojums nav korekts" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" mÄ“neÅ¡a laika ierobežojums nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "LietotÄ�ja \"%%s\" PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba nav padota" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "LietotÄ�ja \"%%s\" PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba nav korekta" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "LietotÄ�ja \"%%s\" PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "LietotÄ�ja \"%%s\" PlayTime alternatÄ«vÄ� laika uzskaites vÄ“rtÄ«ba nav padota" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "" "LietotÄ�ja \"%%s\" PlayTime alternatÄ«vÄ� laika uzskaites vÄ“rtÄ«ba nav korekta" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "LietotÄ�ja \"%%s\" PlayTime alternatÄ«vÄ� laika uzskaites vÄ“rtÄ«ba nav korekta un " "uzstÄ�dÄ�ma" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "LietotÄ�ja \"%%s\" PlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s " "stundÄ�s, nav padota" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "LietotÄ�ja \"%%s\" PlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s " "stundÄ�s, nav korekta" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "LietotÄ�ja \"%%s\" PlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s " "stundÄ�s, nav korekta un uzstÄ�dÄ�ma" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "LietotÄ�ja \"%%s\" PlayTime pieļaujamo dienu saraksts netika padots" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "LietotÄ�ja \"%%s\" PlayTime pieļaujamo dienu saraksts nav korekts" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "LietotÄ�ja \"%%s\" PlayTime pieļaujamo dienu saraksts nav korekts un uzstÄ�dÄ�ms" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "LietotÄ�ja \"%%s\" PlayTime dienu laika ierobežojumi netika padoti" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "LietotÄ�ja \"%%s\" PlayTime dienu laika ierobežojumi nav korekti" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "LietotÄ�ja \"%%s\" PlayTime dienu laika ierobežojumi nav korekti un uzstÄ�dÄ�mi" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "LietotÄ�ja \"%%s\" pieļaujamÄ� laika operÄ�cija varbÅ«t viena no sekojoÅ¡Ä�m: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "LietotÄ�ja \"%%s\" pieļaujamÄ� PlayTime laika ierobežojums nav korekts" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "LietotÄ�ja \"%%s\" pieļaujamÄ� PlayTime laika ierobežojums nav korekts un " "uzstÄ�dÄ�ms" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "NeparedzÄ“ta KĻŪDA ielasot konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�lu" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "NeparedzÄ“ta KĻŪDA iegÅ«stot konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�lu" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "NeparedzÄ“ta KĻŪDA ielasot lietotÄ�ja konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT " "žurnÄ�lu" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "NeparedzÄ“ta KĻŪDA ielasot lietotÄ�ju sarakstu. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT " "žurnÄ�lu" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "NeparedzÄ“ta KĻŪDA mainot konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�lu" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "NeparedzÄ“ta KĻŪDA mainot laika kontroles failu. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT " "žurnÄ�lu" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "LietotÄ�ja \"%%s\" konfigurÄ�cijas fails nav atrasts" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "LietotÄ�ja \"%%s\" laika pÄ�rvaldÄ«bas fails nav atrasts" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "LietotÄ�js \"%%s\" nav atrasts" #: common/constants/messages.py:160 msgid "Connected" msgstr "PieslÄ“dzies" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "PieslÄ“dzas..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Nav iespÄ“jams pieslÄ“gties" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Atveriet aplikÄ�ciju atkÄ�rtoti, ja esat administrators un Timekpr-nExT darbojas" #: common/constants/messages.py:165 msgid "Started" msgstr "PiestartÄ“jies" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "LietotÄ�ja konfigurÄ�cija iegÅ«ta" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "KonfigurÄ�cija iegÅ«ta" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "UzskaitÄ«tÄ�s sesijas lietotÄ�jam apstrÄ�dÄ�tas" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "SlÄ“dzenes slÄ“pÅ¡anas pazÄ«me lietotÄ�jam apstrÄ�dÄ�ta" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Ierobežojumu veids lietotÄ�jam ir apstrÄ�dÄ�ts" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Papildus laika ierobežojums lietotÄ�jam ir apstrÄ�dÄ�ts" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Papildus PlayTime laika limits lietotÄ�jam tika apstrÄ�dÄ�ts" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "Nedēļas un mÄ“neÅ¡a laika ierobežojumi lietotÄ�jam apstrÄ�dÄ�ti" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Papildus dienu laika ierobežojumi lietotÄ�jam ir apstrÄ�dÄ�ti" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Dienas laika ierobežojumi lietotÄ�jam tika apstrÄ�dÄ�ti" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Papildus laika stundu ierobežojumi lietotÄ�jam ir apstrÄ�dÄ�ti" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "Timekpr-nExT konfigurÄ�cija saglabÄ�ta" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "LietotÄ�ja laika ierobežojumi tika saglabÄ�ti" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "LietotÄ�ja PlayTime ierobežojumi tika saglabÄ�ti" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Papildus konfigurÄ�cijas ierobežojumi lietotÄ�jam tika apstrÄ�dÄ�ti" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "Papildus PlayTime laika limits lietotÄ�jam tika apstrÄ�dÄ�ts" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "PlayTime alternatÄ«vÄ� laika uzskaite lietotÄ�jam tika apstrÄ�dÄ�ta" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "PlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s stundÄ�s, lietotÄ�jam " "tika apstrÄ�dÄ�ta" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "PlayTime dienu laika ierobežojumi lietotÄ�jam tika apstrÄ�dÄ�ti" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "PlayTime laika ierobežojumi dienai lietotÄ�jam tika apstrÄ�dÄ�ti" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "PlayTime aktivitÄ�Å¡u / aplikÄ�ciju saraksts lietotÄ�jam tika apstrÄ�dÄ�ts" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "LÅ«dzu iezÄ«mÄ“jiet dienu ierobežojumu uzstÄ�dīšanai" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "Stundu intervÄ�ls pÄ�rklÄ�jas ar esoÅ¡u intervÄ�lu" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "Stundu intervÄ�la sÄ�kums pÄ�rklÄ�jas ar esoÅ¡u intervÄ�lu" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "Stundu intervÄ�la beigas pÄ�rklÄ�jas ar esoÅ¡u intervÄ�lu" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "Stundu intervÄ�ls dublÄ“jas ar esoÅ¡u intervÄ�lu" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Stundu intervÄ�la sÄ�kums nedrÄ«kst bÅ«t vienÄ�ds ar beigÄ�m" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "Stundu intervÄ�la sÄ�kums nedrÄ«kst bÅ«t vienÄ�ds ar beigÄ�m" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "LÅ«dzu iezÄ«mÄ“jiet stundu intervÄ�lu dzēšanai" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "IntervÄ�ls noņemts" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "Timekpr-nExT savienojums vÄ“l nav pieejams" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "BRĪDINÄ€JUMS: Timekpr-nExT administrÄ�cijas aplikÄ�cijai bÅ«tu jÄ�startÄ“jas " "grafiski, bet grafiskÄ� vide nav pieejama, tÄ�pÄ“c aplikÄ�cija darbosies terminÄ�la " "režīmÄ�..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "Komanda nav izdevusies:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "Timekpr-nExT pÄ�rvaldÄ«bas aplikÄ�cijas lietojums ir sekojoÅ¡s:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== INFORMÄ€CIJA ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "skaitliskÄ�s laika vÄ“rtÄ«bas ir sekundÄ“s" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "nedēļas dienas ir numurÄ“tas pÄ“c ISO 8601 (t.i. pirmdiena ir pirmÄ� diena nedēļÄ�, " "formÄ�ts: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "stundas ir numurÄ“tas pÄ“c ISO 9601 (t.i. 24 stundas, formÄ�ts: 0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "kopÄ� %(n)s lietotÄ�ji:" msgstr[1] "kopÄ� %(n)s lietotÄ�js:" msgstr[2] "kopÄ� %(n)s lietotÄ�ji:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "KonfigurÄ�cija lietotÄ�jam %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Pieejamais laiks..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Ierobežojumi un pÄ�rvaldÄ«ba" #: common/constants/messages.py:213 msgid "About" msgstr "Par" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "KontrolÄ“t datora lietojamÄ«bu" #: common/constants/messages.py:217 msgid "Day" msgstr "Diena" #: common/constants/messages.py:218 msgid "Enabled" msgstr "IespÄ“jots" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Limits" #: common/constants/messages.py:220 msgid "From" msgstr "No" #: common/constants/messages.py:221 msgid "from..." msgstr "no..." #: common/constants/messages.py:222 msgid "To" msgstr "LÄ«dz" #: common/constants/messages.py:223 msgid "to..." msgstr "lÄ«dz..." #: common/constants/messages.py:224 msgid "Period" msgstr "Periods" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Nedēļa" #: common/constants/messages.py:227 msgid "Monthly" msgstr "MÄ“nesis" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Sesijas tips" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "sesijas tips..." #: common/constants/messages.py:232 msgid "Username" msgstr "LietotÄ�jvÄ�rds" #: common/constants/messages.py:233 msgid "username..." msgstr "lietotÄ�jvÄ�rds..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Procesa maska" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "procesa maska..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Procesa apraksts" #: common/constants/messages.py:237 msgid "process description..." msgstr "procesa apraksts..." #: common/constants/messages.py:238 msgid "Time" msgstr "Laiks" #: common/constants/messages.py:239 msgid "time..." msgstr "laiks..." #: common/constants/messages.py:240 msgid "Importance" msgstr "SvarÄ«gums" #: common/constants/messages.py:241 msgid "importance..." msgstr "svarÄ«gums..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Timekpr-nExT paziņojums" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Timekpr-nExT PlayTime paziņojums" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Tev atvÄ“lÄ“tais laiks Å¡odien nav ierobežots" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "Laika ierobežojumi tika mainÄ«ti, lÅ«dzu ņemt vÄ“rÄ� jaunos ierobežojumus!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "Laika ierobežojumi tika mainÄ«ti, lÅ«dzu pievÄ“rst uzmanÄ«bu jaunajiem " "ierobežojumiem!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Radusies problÄ“ma savienojumam ar Timekpr-nExT (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Radusies problÄ“ma komunikÄ�cijai ar Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Ikonas inicializÄ�cijas problÄ“ma (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Tev atvÄ“lÄ“tais laiks beidzies, Tava sesija tiks aizvÄ“rta pÄ“c" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Tev atvÄ“lÄ“tais laiks beidzies, Tavs dators tiks izslÄ“gts pÄ“c" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Tev atvÄ“lÄ“tais laiks beidzies, Tava sesija tiks bloÄ·Ä“ta pÄ“c" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "" "Tev atvÄ“lÄ“tais laiks beidzies, Tavs dators tiks novietots gulēšanas režīmÄ� pÄ“c" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s sekundÄ“m" msgstr[1] "%(n)s sekundes" msgstr[2] "%(n)s sekundÄ“m" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "IekšējÄ� pieslÄ“guma kļūda, lÅ«dzu pÄ�rbaudÄ«t žurnÄ�la failus" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Tev atlikuÅ¡as %(n)s stundas" msgstr[1] "Tev atlikusi %(n)s stunda" msgstr[2] "Tev atlikuÅ¡as %(n)s stundas" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minÅ«tes" msgstr[1] "%(n)s minÅ«te" msgstr[2] "%(n)s minÅ«tes" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s sekundes" msgstr[1] "%(n)s sekunde" msgstr[2] "%(n)s sekundes" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s sekundes no atvÄ“lÄ“tÄ� PLayTime laika" msgstr[1] "%(n)s sekunde no atvÄ“lÄ“tÄ� PLayTime laika" msgstr[2] "%(n)s sekundes no atvÄ“lÄ“tÄ� PLayTime laika" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "PaplaÅ¡inÄ�jumu \"%%s\", kas tiek izmantots, lai noteiktu vai dators tiek " "izmantots, nav iespÄ“jams ieslÄ“gt!\n" "DÄ«kstÄ�ves laiks var netikt uzskaitÄ«ts korekti, gadÄ«jumos, ja ekrÄ�ns tiek " "bloÄ·Ä“ts!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "NEPAREDZÄ’TA KĻŪDA: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "PARAMETRU PÄ€RBAUDES KĻŪDA (lÅ«dzu pÄ�rbaudÄ«t, vai parametrs norÄ�dÄ«ts korekti): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Komanda NEIZDEVÄ€S: pieeja liegta" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Komanda NEIZDEVÄ€S: komunikÄ�cija nav atļauta" #: common/constants/messages.py:278 msgid "n/a" msgstr "n/a" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Par Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "Eduards Bezverhijs " #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "DzÄ“st neuzskaitÄ«to sesiju tipu" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Timekpr-nExT administrÄ�cijas aplikÄ�cija" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Å Ä« ir ikona, pareizi?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "PiezÄ«mes, izlasi uzmanÄ«gi ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Å Ä« ir Timekpr-nExT pÄ�rvaldÄ«bas aplikÄ�cija, tÄ� atļauj veikt uzstÄ�dÄ«jumus Taviem " "lietotÄ�jiem kÄ� arÄ« paÅ¡am Timekpr-nExT.\n" "\n" "Lai lietotu Å¡o aplikÄ�ciju, Tev tÄ� jÄ�darbina ar administratora tiesÄ«bÄ�m vai " "jÄ�bÅ«t timekpr lietotÄ�ju grupÄ�.\n" "LÅ«dzu ņemt vÄ“rÄ�, ka \"Timekpr-nExT pÄ�rvaldÄ«ba\" pieejama tikai un vienÄ«gi, ja " "aplikÄ�cija darbinÄ�ta ar administratora tiesÄ«bÄ�m!\n" "\n" "LÅ«dzu pÄ�rvaldi lietotÄ�jus atbildÄ«gi un neatspÄ“jo tiesÄ«bas sev!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "PÄ�rvaldÄ«bas iespÄ“jas, kas saistÄ«tas ar lietotÄ�jiem" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "LietotÄ�jvÄ�rds:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "LietotÄ�ju saraksts, kuri reÄ£istrÄ“ti sistÄ“mÄ�" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Atjaunot" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Atjaunot konfigurÄ�ciju uz saglabÄ�to stÄ�vokli" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "InformÄ�ciju par laika patÄ“riņu" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "VÄ“rtÄ«ba nosaka, cik ilgi varat lietot datoru nepÄ�rtraukti, laika izlietojums " "var pÄ�rklÄ�t vairÄ�kas dienas (tiek aprēķinÄ�ta reÄ�lajÄ� laikÄ�, pieejama tikai, ja " "lietotÄ�js ir aktÄ«vs)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "AtlikuÅ¡ais laiks (kopÄ�):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "FormÄ�ts: " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "VÄ“rtÄ«ba nosaka, cik ilgi lietotÄ�js bijis neaktÄ«vs pÄ“c pÄ“dÄ“jÄ�s pierakstīšanÄ�s " "datorÄ� (tiek aprēķinÄ�ta reÄ�lajÄ� laikÄ�, pieejama tikai, ja lietotÄ�js ir aktÄ«vs)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "DÄ«kstÄ�ves laiks (kopÄ�):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "" "Pieejamais laiks Å¡odien (saglabÄ�tais laiks, netiek aprēķinÄ�ts reÄ�lajÄ� laikÄ�)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "AtlikuÅ¡ais laiks (Å¡odien):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "" "Izlietotais laiks Å¡odien (saglabÄ�tais laiks, nav faktiskais šībrīža laiks)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Izlietotais laiks (Å¡odiena):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "" "Izlietotais laiks Å¡ajÄ� nedēļÄ� (saglabÄ�tais laiks, nav faktiskais šībrīža laiks)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Izlietotais laiks (nedēļa):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "" "Izlietotais laiks Å¡ajÄ� mÄ“nesÄ« (saglabÄ�tais laiks, nav faktiskais šībrīža laiks)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Izlietotais laiks (mÄ“nesis):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Ierobežojumu izmaiņas" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "Å¡odienas laiks" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "IzvÄ“lieties Å¡o opciju, lai mainÄ«tu pieejamo laika limitu Å¡odienai" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "PlayTime" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "IzvÄ“lieties Å¡o opciju, lai mainÄ«tu pieejamo PlayTime laika limitu Å¡odienai" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "st" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "Minūšu daudzums, kas tiks pievienots Å¡odien atvÄ“lÄ“tajam laikam" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "Stundu daudzums, kas pievienots Å¡odienas atvÄ“lÄ“tajam laikam" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "PalielinÄ�t pieļaujamo laika daudzumu (bonuss)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Noņemt norÄ�dÄ«to laika apjomu (sods)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "UzstÄ�dÄ«t tieÅ¡i Å¡Ä�du laika ierobežojumu" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "InformÄ�cija par PlayTime" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "KopÄ“jais atlikuÅ¡ais PlayTime laiks Å¡odien (tiek aprēķinÄ�ts reÄ�lajÄ� laikÄ�, " "pieejams tikai, ja lietotÄ�js ir aktÄ«vs)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "AtlikuÅ¡ais PlayTime laiks (kopÄ�):" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "FormÄ�ts: " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "" "Pieejamais PlayTime laiks Å¡odien (saglabÄ�tais laiks, netiek aprēķinÄ�ts reÄ�lajÄ� " "laikÄ�)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "AtlikuÅ¡ais PlayTime laiks (Å¡odien):" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "DarbojoÅ¡os PlayTime aktivitÄ�Å¡u / aplikÄ�ciju skaits (tiek aprēķinÄ�ta reÄ�lajÄ� " "laikÄ�, pieejama tikai, ja lietotÄ�js ir aktÄ«vs)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "DarbojoÅ¡Ä�s aktivitÄ�tes (kopÄ�):" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "" "Izlietotais PlayTime laiks Å¡odien (saglabÄ�tais laiks, nav faktiskais šībrīža " "laiks)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "Izlietotais PlayTime laiks (Å¡odiena):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "VispÄ�rÄ«ga informÄ�cija par laika izlietojumu un laika ierobežojumiem par Å¡o dienu" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "InformÄ�cijai un Å¡odienai" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Å Ä« sadaļa atļauj pÄ�rvaldÄ«t laika ierobežojumus." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Nedēļas dienu ierobežojumi" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "s" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "IzvÄ“loties stundas, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajÄ�m dienÄ�m." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "IzvÄ“loties minÅ«tes, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajÄ�m dienÄ�m." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "PalielinÄ�t laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (stundas vai " "minÅ«tes) izvÄ“lÄ“tajam dienÄ�m.\n" "\n" "LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "SamazinÄ�t laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (stundas vai " "minÅ«tes) izvÄ“lÄ“tajam dienÄ�m.\n" "\n" "LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Nedēļas dienu saraksts un papildus informÄ�cija par dienas ierobežojumiem.\n" "\n" "LÅ«dzu iespÄ“jot / atspÄ“jot dienas konkrÄ“tajam lietotÄ�jam." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Laika intervÄ�li, kas pieejami lietotajam.\n" "Opcija \"∞\" norÄ�da, ka laiks, ka patÄ“rÄ“ts šī intervÄ�la ietvaros, netiks " "uzskaitÄ«ts kÄ� iztÄ“rÄ“ts, bet gan pieskaitÄ«ts dÄ«kstÄ�ves laikam.\n" "\n" "LÅ«dzu ņemiet vÄ“rÄ�, ka ja diena beidzas ar 24 stundu un nÄ�kamÄ�s dienas 0 stunda " "ir atļauta, lietotÄ�js bez pÄ�rtraukuma var strÄ�dÄ�t arÄ« pÄ“c pusnakts.\n" "\n" "LÅ«dzu ņemt vÄ“rÄ�, ka vienas stundas ietvaros NAV iespÄ“jams konfigurÄ“t vairÄ�k par " "vienu intervÄ�lu\n" "Tas var sÄ�kties Å¡ajÄ� stundÄ�, beigties Å¡ajÄ� stundÄ�, pilnÄ«bÄ� iekļauties stundÄ�, " "bet ne vairÄ�k par vienu vienÄ� stundÄ�.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Stundu intervÄ�li" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Pievienot jaunu laika intervÄ�lu, kas bÅ«s pieejams lietotÄ�jam.\n" "\n" "PÄ“c intervÄ�la izveides, samainiet to pÄ“c saviem ieskatiem pa tieÅ¡o tabulÄ� zemÄ�k." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "DzÄ“st izvÄ“lÄ“to laika intervÄ�lu no iespÄ“jamo intervÄ�lu saraksta." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "ievadiet stundu intervÄ�lus" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "pÄ�rbaudÄ«t" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "PÄ�rbaudÄ«t ievadÄ«to laika intervÄ�lu pareizÄ«bu. Å is ir obligÄ�ts solis, lai " "pÄ�rliecinÄ�tos, ka intervÄ�li ir korekti.\n" "\n" "ProblemÄ�tiskie intervÄ�li pÄ“c pÄ�rbaudes tiks izgaismoti." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Nedēļas un mÄ“neÅ¡a ierobežojumi" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "d" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "IzvÄ“loties dienas, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajam periodam." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "IzvÄ“loties stundas, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajam periodam." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "IzvÄ“loties minÅ«tes, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajam periodam." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "PalielinÄ�t nedēļas vai mÄ“neÅ¡a laika ierobežojumu balstoties uz izvÄ“lÄ“to laika " "vienÄ«bu (dienas vai stundas vai minÅ«tes) izvÄ“lÄ“tajam periodam." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "SamazinÄ�t nedēļas vai mÄ“neÅ¡a laika ierobežojumu balstoties uz izvÄ“lÄ“to laika " "vienÄ«bu (dienas vai stundas vai minÅ«tes) izvÄ“lÄ“tajam periodam." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Nedēļas un mÄ“neÅ¡a laika ierobežojumi lietotÄ�jam.\n" "\n" "Å ie ierobežojumi tiek ņemti vÄ“rÄ� kopÄ� ar pÄ�rÄ“jiem laika ierobežojumiem." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "IespÄ“jot dienas ierobežojumus" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "IespÄ“jot visas ierobežojumu izmaiņas, kas veiktas Å¡ajÄ� lapÄ�" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Dienas ierobežojums katrai nedēļas dienai" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Limitu pÄ�rvaldÄ«ba" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "PlayTime aktivitÄ�Å¡u konfigurÄ�cija" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "PlayTime konfigurÄ�cija" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "IespÄ“jot PlayTime izvÄ“lÄ“tajam lietotÄ�jam" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "IespÄ“jot PlayTime:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "IespÄ“jot PlayTime alternatÄ«vÄ� laika uzskaiti izvÄ“lÄ“tajam lietotÄ�jam.\n" "\n" "Å Ä« opcija ignorÄ“ spÄ“kÄ� esoÅ¡o laika uzskaiti tÄ�, ka tikai tad, ja darbojas kÄ�da " "no PlayTime aktivitÄ�Å¡u sarakstÄ� esoÅ¡Ä� aplikÄ�cija, laiks tiek uzskaitÄ«ts!\n" "\n" "Å is slÄ“dzis ietekmÄ“ tikai laika patÄ“riņa uzskaiti, laika intervÄ�lu kontrole " "paliek spÄ“kÄ�!\n" "\n" "Ja nedarbojas neviena no aktivitÄ�tÄ“m, laiks tiek uzskatÄ«ts kÄ� dÄ«kstÄ�ves laiks, " "kas nozÄ«mÄ“, ka Å¡is ir brÄ«vais laiks lietotÄ�jam!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "IespÄ“jot alternatÄ«vo PlayTime:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Å Ä« pazÄ«me atļauj lietot PlayTime aktivitÄ�tes neuzskaitÄ«tajos (\"∞\") intervÄ�los " "izvÄ“lÄ“tajam lietotÄ�jam.\n" "\n" "LietotÄ�jam bÅ«s iespÄ“ja darbinÄ�t aplikÄ�cijas, kas reÄ£istrÄ“tas tÄ� PlayTime " "aktivitÄ�Å¡u sarakstÄ� arÄ« intervÄ�los, kas apzÄ«mÄ“ti kÄ� neuzskaitÄ«tie (\"∞\").\n" "\n" "Ja šī pazÄ«me ir iespÄ“jota, lietotÄ�ja pavadÄ«tais laiks izmantojot PlayTime " "aktivitÄ�tes netiks uzskaitÄ«ts, savukÄ�rt ja pazÄ«me ir atspÄ“jota, aplikÄ�cijas, " "kas reÄ£istrÄ“tas un tiek startÄ“tas neuzskaitÄ«tajos (\"∞\") intervÄ�los, tiks tiks " "terminÄ“tas." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Atļauts neuzskaitÄ«tajos (\"∞\") intervÄ�los:" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Å Ä« sadaļa atļauj pÄ�rvaldÄ«t PlayTime ierobežojumus." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "PlayTime limiti" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "PalielinÄ�t PlayTime laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu " "(stundas vai minÅ«tes) izvÄ“lÄ“tajam dienÄ�m.\n" "\n" "LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "SamazinÄ�t PlayTime laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu " "(stundas vai minÅ«tes) izvÄ“lÄ“tajam dienÄ�m.\n" "\n" "LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Nedēļas dienu saraksts un papildus informÄ�cija par PlayTime ierobežojumiem.\n" "\n" "LÅ«dzu iespÄ“jot / atspÄ“jot dienas konkrÄ“tajam lietotÄ�jam PlayTime aktivitÄ�Å¡u " "ierobežoÅ¡anai." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "PlayTime aktivitÄ�tes" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Pievienot jaunu PlayTime aktivitÄ�ti.\n" "\n" "LÅ«dzu norÄ�diet aktivitÄ�tes masku / nosaukumu un lietotÄ�jam draudzÄ«gu aprakstu " "pa tieÅ¡o tabulÄ� zemÄ�k." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "NodzÄ“st izvÄ“lÄ“to PlayTime aktivitÄ�ti no saraksta." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "LÅ«dzu norÄ�dÄ«t pilnu procesa (palaidÄ“jprogrammas) nosaukumu bez pilna ceļa uz to " "kÄ� reÄ£istrjutÄ«gu simbolu virkni, kas tiks monitorÄ“ta sistÄ“mÄ�.\n" "\n" "Nosaukumam iespÄ“jams norÄ�dÄ«t arÄ« RegExp (regulÄ�ras izteiksmes), bet esiet ļoti " "uzmanÄ«gi tÄ�s ievadot, jo nepareizas izteiksmes ievades rezultÄ�tÄ�, var tikt " "izbeigti lietotÄ�ja procesi, kurus iespÄ“jams, nevÄ“lÄ“jÄ�ties izbeigt!\n" "\n" "PIEZĪME: RegExp ir eksperta opcija!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "IespÄ“jot PlayTime ierobežojumus" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "IespÄ“jot PlayTime konfigurÄ�cijas iespÄ“ju maiņu Å¡ajÄ� lapÄ�" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "PlayTime pÄ�rvaldÄ«ba" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Papildus konfigurÄ�cijas iespÄ“jas" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Å Ä« pazÄ«me nosaka vai laiks, kuru lietotÄ�js pavadÄ«jis dÄ«kstÄ�vÄ“ tiek uzskaitÄ«ts.\n" "\n" "Ja pazÄ«me nav iespÄ“jota, pavadÄ«tais laiks konsolÄ“ (ne terminÄ�lÄ«) un aizslÄ“gtajÄ� " "sesijÄ� NETIEK uzskaitÄ«ts (šīs pazÄ«mes darbspÄ“ja ļoti atkarÄ«ga no grafiskÄ�s " "vides kurÄ� strÄ�dÄ�jat)" #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "UzskaitÄ«t neaktÄ«vÄ�s sesijas:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "IzvÄ“lieties, vai rÄ�dÄ«t Timekpr-next slÄ“dzenes ikonu un paziņojumus lietotÄ�jam.\n" "\n" "LÅ«dzu, ņemiet vÄ“rÄ�, ka, atzÄ«mÄ“jot Å¡o opciju, tiks atspÄ“jota visa informÄ�cijas " "un paziņojumu rÄ�dīšana lietotÄ�jam!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "PaslÄ“pt slÄ“dzeni un paziņojumus:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "IzvÄ“lieties ierobežojumu veidu, kas tiks piemÄ“rots izvÄ“lÄ“tajam lietotÄ�jam.\n" "\n" "PIEZĪME: lÅ«dzu bÅ«t uzmanÄ«gam un laicÄ«gi izplÄ�not ierobežojumu veidu, kas " "piemÄ“rots JÅ«su situÄ�cijai, vÄ“lams izlasÄ«t katra ierobežojuma veida aprakstu!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Ierobežojuma veids:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "pÄ�rtraukt lietotÄ�ja sesijas" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, tÄ� sesijas tiks pÄ�rtrauktas.\n" "\n" "Å is ir faktiskais ierobežojums!\n" "\n" "Å Ä« ir noklusÄ“tÄ� vÄ“rtÄ«ba un potenciÄ�li vispiemÄ“rotÄ�kÄ�!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "izbeigt lietotÄ�ja sesijas" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, tÄ� sesijas tiks izbeigtas.\n" "\n" "Å is ir faktiskais ierobežojums!\n" "\n" "Å Ä« ir noklusÄ“tÄ� vÄ“rtÄ«ba un potenciÄ�li vispiemÄ“rotÄ�kÄ�!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "izslÄ“gt datoru" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks izslÄ“gts.\n" "\n" "Å is ir faktiskais ierobežojums!\n" "\n" "Pirms lietot Å¡o opciju, lÅ«dzu izsvÄ“rt vai tÄ� bÅ«s atbilstoÅ¡a JÅ«su situÄ�cijai!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "gulēšanas režīms" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks novietots gulēšanas " "režīmÄ�.\n" "\n" "Å is ierobežojumu veids faktiski nav ierobežojums, tas vairÄ�k domÄ�ts " "paÅ¡kontroles nodroÅ¡inÄ�Å¡anai.\n" "\n" "Ja dators tiks pamodinÄ�ts brÄ«dÄ«, kad lietotÄ�jam atvÄ“lÄ“tais laiks ir beidzies, " "datora ekrÄ�ns tiks bloÄ·Ä“ts un pÄ“c kÄ�da laika dators tiks novietots gulēšanas " "režīmÄ�." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "gulēšanas un pamoÅ¡anÄ�s režīms" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks novietots gulēšanas " "režīmÄ� un tiks pamodinÄ�ts automÄ�tiski, kad atvÄ“lÄ“tie ierobežojumi to atļaus.\n" "\n" "Å is ierobežojumu veids faktiski nav ierobežojums, tas vairÄ�k domÄ�ts " "paÅ¡kontroles nodroÅ¡inÄ�Å¡anai.\n" "\n" "Ja dators tiks pamodinÄ�ts brÄ«dÄ«, kad lietotÄ�jam atvÄ“lÄ“tais laiks ir beidzies, " "datora ekrÄ�ns tiks bloÄ·Ä“ts un pÄ“c kÄ�da laika dators tiks novietots gulēšanas " "režīmÄ�." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "bloÄ·Ä“t ekrÄ�nu" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks aizslÄ“gts (lock).\n" "\n" "Å is ierobežojumu veids faktiski nav ierobežojums, tas vairÄ�k domÄ�ts " "paÅ¡kontroles nodroÅ¡inÄ�Å¡anai." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Ievadiet laika intervÄ�lu, kad vÄ“lama automÄ�tiskÄ� pamoÅ¡anÄ�s.\n" "\n" "Å Ä« opcija darbosies tikai tad, ja sistÄ“mas BIOS / UEFI atbalsta pamoÅ¡anos pÄ“c " "RTC (reÄ�lÄ� laika pulkstenis) un šī opcija ir iespÄ“jota!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "PamoÅ¡anÄ�s stundas:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Ievadiet automÄ�tiskÄ�s pamoÅ¡anÄ�s sÄ�kuma stundu.\n" "\n" "Å Ä« opcija darbosies tikai tad, ja sistÄ“mas BIOS / UEFI atbalsta pamoÅ¡anos pÄ“c " "RTC (reÄ�lÄ� laika pulkstenis) un šī opcija ir iespÄ“jota!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Ievadiet automÄ�tiskÄ�s pamoÅ¡anÄ�s beigu stundu.\n" "\n" "Å Ä« opcija darbosies tikai tad, ja sistÄ“mas BIOS / UEFI atbalsta pamoÅ¡anos pÄ“c " "RTC (reÄ�lÄ� laika pulkstenis) un šī opcija ir iespÄ“jota!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "IespÄ“jot konfigurÄ�ciju" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "IespÄ“jot papildus konfigurÄ�cijas iespÄ“ju maiņu Å¡ajÄ� lapÄ�" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Papildus konfigurÄ�cija" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Papildus limiti" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "LietotÄ�ju pÄ�rvaldÄ«ba" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Ar Timekpr-nExT saistÄ«tÄ� konfigurÄ�cija" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "PÄ�rvaldÄ«t Timekpr-nExT konfigurÄ�ciju" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Timekpr-nExT tehniskÄ� žurnÄ�la lÄ«menis.\n" "\n" "LÅ«dzu nemainÄ«t Å¡o vÄ“rtÄ«bu. Ä»oti iespÄ“jams, ka neatradÄ«siet neko interesantu " "žurnÄ�la failos.\n" "\n" "VÄ“rtÄ«bu nozÄ«me: 1 - standarta lÄ«menis, 2 - atkļūdoÅ¡anas lÄ«menis, 3 - " "padziļinÄ�ts atkļūdoÅ¡anas lÄ«menis" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Sesiju laika uzskaites biežums, kas nosaka cik bieži tiek aptaujÄ�tas lietotÄ�ju " "sesijas un uzskaitÄ«ts to patÄ“rÄ“tais laiks.\n" "\n" "3 - 5 sekundes ir optimÄ�li, lÅ«dzu nemainÄ«t bez vajadzÄ«bas." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "AtjaunoÅ¡anas intervÄ�ls" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "NorÄ�diet atlikuÅ¡o laiku sekundÄ“s, pirms kura Timekpr-nExT sÄ�ks laika ik sekunžu " "atskaiti pirms piemÄ“rot izvÄ“lÄ“to ierobežojumu lietotÄ�ja sesijÄ�m." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Å Ä« vÄ“rtÄ«ba nosaka sekunžu intervÄ�lu ar kÄ�du lietotÄ�ju uzskaitÄ«tais laiks tiek " "saglabÄ�ts uz diska.\n" "\n" "Lai nodroÅ¡inÄ�tu augstu precizitÄ�ti nezaudÄ“jot Ä�trdarbÄ«bu, Timekpr-nExT uzskaita " "laiku atmiņÄ� ar biežumu \"AtjaunoÅ¡anas intervÄ�ls\", savukÄ�rt šī opcija " "nodroÅ¡ina uzskaitÄ«tÄ� laika saglabÄ�Å¡anu uz diska ilgtermiņa glabÄ�Å¡anai." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "SaglabÄ�Å¡anas laiks" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "LietotÄ�jam atlikuÅ¡o sekunžu skaits pirms pielietot izvÄ“lÄ“to ierobežojumu tÄ� " "sesijÄ�m.\n" "\n" "Kad Å¡is apjoms tiks sasniegts un lietotÄ�js joprojÄ�m bÅ«s aktÄ«vs, lietotÄ�ja " "sesijÄ�m tiks piemÄ“rots tam izvÄ“lÄ“tais ierobežojums. Sasniedzot Å¡o punktu, nav " "iespÄ“jams izdarÄ«t gandrÄ«z neko, lai to novÄ“rstu." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "IzbeigÅ¡anas laiks" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Atskaites laiks" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "ŽurnÄ�la lÄ«menis" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "AtlikuÅ¡ais sekunžu skaits lietotÄ�ja atvÄ“lÄ“tajam laikam pirms sÅ«tÄ«t kritisku " "paziņojumu par to, ka atvÄ“lÄ“tais laiks drÄ«z beigsies.\n" "\n" "PIEZĪME: detalizÄ“ta paziņojumu konfigurÄ�cija pieejama lietotÄ�jam klienta " "aplikÄ�cijÄ�!" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "PÄ“dÄ“jais brÄ«dinÄ�jums" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "PÄ�rvaldÄ«t Timekpr-nExT uzskaitÄ�mos lielumus" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "UzskaitÄ�mÄ�s sesijas" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Pievienot uzskaitÄ«to sesiju tipu sarakstam" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "DzÄ“st uzskaitÄ«to sesiju tipu no saraksta" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "UzskaitÄ�mo sesiju saraksts.\n" "\n" "LÅ«dzu nemainÄ«t vai neeksperimentÄ“t ar Å¡o sarakstu, ja Jums nav pietiekoÅ¡i " "zinÄ�Å¡anu, lai saprastu ko tas nozÄ«mÄ“." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "NeuzskaitÄ�mÄ�s sesijas" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Pievienot neuzskaitÄ�mo sesiju veidu sarakstam" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "DzÄ“st neuzskaitÄ�mo sesiju tipu no saraksta" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "NeuzskatÄ«to sesiju saraksts - sesiju tipi, kurÄ�s pavadÄ«tais laiks netiek " "uzskaitÄ«ts.\n" "\n" "LÅ«dzu nemainÄ«t vai neeksperimentÄ“t ar Å¡o sarakstu, ja Jums nav pietiekoÅ¡i " "zinÄ�Å¡anu, lai saprastu ko tas nozÄ«mÄ“." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "NeuzskaitÄ�mie lietotÄ�ji" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Pievienot lietotÄ�ju neuzskaitÄ�mo lietotÄ�ju sarakstam" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "DzÄ“st lietotÄ�ju no neuzskaitÄ�mo lietotÄ�ju saraksta" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "NeuzskaitÄ�mo lietotÄ�ju saraksts - lietotÄ�jvÄ�rdi, kuru datorÄ� pavadÄ«tais laiks " "netiek uzskaitÄ«ts.\n" "\n" "LÅ«dzu norÄ�dÄ«t faktiskos lietotÄ�jvÄ�rdus nevis vÄ�rdus (piem.: lÅ«dzu norÄ�dÄ«t " "gmerkelis, nevis \"GarlÄ«bs MerÄ·elis\")" #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Å Ä« opcija iespÄ“jo PlayTime funkcionalitÄ�ti.\n" "\n" "Å is ir globÄ�las slÄ“dzis, ja opcija tiek atspÄ“jota, tÄ� tiek atspÄ“jota visiem " "lietotÄ�jiem neskatoties uz katra individuÄ�lo iestatÄ«jumu!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "PlayTime iespÄ“jots:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Å Ä« pazÄ«me nosaka vai PlayTime aktivitÄ�Å¡u meklēšanai sistÄ“mÄ� tiks izmantota arÄ« " "procesa komandrinda ieskaitot procesa parametrus (pÄ“c noklusÄ“juma aktivitÄ�tes " "tiek filtrÄ“tas tikai pÄ“c procesa nosaukuma).\n" "\n" "Ja pazÄ«me iespÄ“jota, Timekpr-nExT meklÄ“s procesus, kas reÄ£istrÄ“ti lietotÄ�ja " "aktivitÄ�Å¡u sarakstÄ� izmantojot pirmos 512 komandrindas simbolus, tÄ�dÄ� veidÄ� " "palielinot procesu meklēšanas iespÄ“jas.\n" "\n" "LÅ«dzu bÅ«t uzmanÄ«giem un rÅ«pÄ«gi pÄ�rbaudÄ«t RegExp Å¡ablonus katram lietotÄ�ja " "aktivitÄ�Å¡u sarakstÄ� esoÅ¡ajam procesam!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Uzlabotais aktivitÄ�Å¡u meklÄ“tÄ�js:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "IespÄ“jot Timekpr-nExT uzstÄ�dÄ«jumus" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "IespÄ“jot visus Timekpr-nExT uzstÄ�dÄ«jumus vienlaicÄ«gi" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Timekpr-nExT pÄ�rvaldÄ«bas iestatÄ«jumi" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Timekpr-nExT pÄ�rvaldÄ«ba" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "Timekpr-nExT pÄ�rvaldÄ«bas aplikÄ�cijas statuss" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "InformatÄ«vs" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "BrÄ«dinÄ�jums" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "SvarÄ«gs" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Kritisks" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Timekpr-nExT lietotÄ�ja aplikÄ�cija" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Timekpr-nExT aplikÄ�cijas statuss" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "SaglabÄ�t visas izmaiņas" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "AizvÄ“rt logu" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "PatreizÄ“jais faktiskais lietotÄ�js" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "PatreizÄ“jÄ� statistika" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "" "Izlietotais laiks Å¡ajÄ� lietotÄ�ja sesijÄ� vai laiks, kas izlietots pÄ“c Timekpr-" "nExT pÄ�rstartēšanas" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Izlietotais laiks (sesija):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "" "DÄ«kstÄ�ves laiks Å¡ai sesijai vai dÄ«kstÄ�ves laiks no Timekpr-nExT pÄ�rstartēšanas" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "DÄ«kstÄ�ves laiks:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "" "VÄ“rtÄ«ba nosaka, cik ilgi varat lietot datoru nepÄ�rtraukti, laika izlietojums " "var pÄ�rklÄ�t vairÄ�kas dienas." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "NepÄ�rtrauktÄ� laika ierobežojums:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "NepÄ�rtraukti pieejamais laiks Å¡odien lÄ«dz paÅ¡Ä�m dienas beigÄ�m" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "AtlikuÅ¡ais laiks Å¡odien:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Å eit atrÄ�dÄ«tas dienas un ierobežojumi, kas attiecas uz Tevi" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Diena un ierobežojumi" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Å is saraksts atrÄ�da laika intervÄ�lus, kas pieejami lietoÅ¡anai.\n" "\n" "Opcija \"∞\" norÄ�da, ka laiks kas patÄ“rÄ“ts šī intervÄ�la ietvaros netiks " "uzskaitÄ«ts kÄ� iztÄ“rÄ“ts, bet gan pieskaitÄ«ts dÄ«kstÄ�ves laikam." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "IntervÄ�li" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Dienas limiti" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Papildus statistika" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Izlietotais laiks Å¡ajÄ� nedēļÄ�" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Izlietotais laiks Å¡ajÄ� mÄ“nesÄ«" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Å Ä« pazÄ«me nosaka vai laiks, kuru lietotÄ�js pavadÄ«jis dÄ«kstÄ�vÄ“ tiek uzskaitÄ«ts.\n" "\n" "Ja pazÄ«me nav iespÄ“jota, pavadÄ«tais laiks konsolÄ“ (ne terminÄ�lÄ«) un aizslÄ“gtajÄ� " "sesijÄ� NETIEK uzskaitÄ«ts.\n" "Å Ä«s pazÄ«mes darbspÄ“ja ļoti atkarÄ«ga no grafiskÄ�s vides kurÄ� strÄ�dÄ�jat." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "UzskaitÄ«t neaktÄ«vÄ�s:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Å Ä« pazÄ«me nosaka vai laiks, kuru lietotÄ�js pavadÄ«jis dÄ«kstÄ�vÄ“ tiek uzskaitÄ«ts, " "ja pazÄ«me nav iespÄ“jota, pavadÄ«tais laiks konsolÄ“ (ne terminÄ�lÄ«) un aizslÄ“gtajÄ� " "sesijÄ� NETIEK uzskaitÄ«ts (šīs pazÄ«mes darbspÄ“ja ļoti atkarÄ«ga no grafiskÄ�s " "vides kurÄ� strÄ�dÄ�jat)" #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Papildus limiti" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Laika ierobežojums uz nedēļu, kas pieejams Tavai lietoÅ¡anai" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Laika ierobežojums (nedēļa):" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Laika ierobežojums uz mÄ“nesi, kas pieejams Tavai lietoÅ¡anai" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Laika ierobežojums (mÄ“nesis):" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "PatreizÄ“jÄ� PlayTime statistika" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "KopÄ“jais atlikuÅ¡ais PlayTime laiks Å¡odienai" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "KopÄ“jais Å¡odien izlietotais PlayTime laiks" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Å odien izlietotais laiks:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Å Ä« opcija iespÄ“jo alternatÄ«vo laika uzskaiti PlayTime aktivitÄ�tÄ“m.\n" "\n" "Ja šī opcija ir iespÄ“jota, laiks tiek uzskaitÄ«ts tikai tad, ja darbojas kÄ�da no " "PlayTime sarakstÄ� esoÅ¡ajÄ�m aplikÄ�cijÄ�m, savukÄ�rt pÄ�rÄ“jais laiks tiek uzskatÄ«ts " "kÄ� dÄ«kstÄ�ves laiks." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "AlternatÄ«va laika uzskaite:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Å obrÄ«d darbojoÅ¡os PlayTime aktivitÄ�Å¡u skaits" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "DarbojoÅ¡Ä�s aktivitÄ�tes:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Atļaut lietot aktivitÄ�tes neuzskaitÄ«tajos (\"∞\") laika intervÄ�los.\n" "\n" "Å Ä« pazÄ«me atļauj lietotÄ�jam izmantot aplikÄ�cijas, kas reÄ£istrÄ“tas sadaļÄ� " "\"AplikÄ�ciju / aktivitÄ�Å¡u saraksts\" intervÄ�los, kas atzÄ«mÄ“ti kÄ� neuzskaitÄ«ti " "(\"∞\"), ja šī pazÄ«me nav iespÄ“jota, neviena no aktivitÄ�tÄ“m nav atļauta!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Atļauts \"∞\" intervÄ�los:" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "Å eit atrÄ�dÄ«tas dienas un ierobežojumi, kas attiecas uz PlayTime funkcionalitÄ�ti" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "Å is saraksts atrÄ�da PlayTime aktivitÄ�tes / aplikÄ�cijas, kas tika iespÄ“jotas kÄ� " "daļa no PlayTime ierobežojumiem" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "AktivitÄ�Å¡u / aplikÄ�ciju saraksts" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "PersonalizÄ“ta pieejamÄ� laika ziņojumu konfigurÄ�cija.\n" "\n" "LÅ«dzu konfigurÄ“ notifikÄ�cijas pÄ“c saviem ieskatiem. LÅ«dzu ņemt vÄ“rÄ�, ka ir divi " "paziņojumu veidi, kurus nav iespÄ“jams personalizÄ“t: pÄ“dÄ“jais brÄ«dinÄ�jums, kas " "tiek rÄ�dÄ«ts kÄ�du laiku pirms pieejamÄ� laika beigÄ�m un laika atskaites " "paziņojumi, kas tiek rÄ�dÄ«ti ļoti Ä«si pirms laika beigÄ�m.\n" "\n" "VÄ“rtÄ«ba \"Laiks\" nosaka atlikuÅ¡o laiku, kad paziņojums tiks rÄ�dÄ«ts, vÄ“rtÄ«ba " "\"SvarÄ«gums\" nosaka ikonas krÄ�su un paziņojuma veidu, paskaidrojumi zemÄ�k.\n" "\n" "InformÄ�cija - tiek rÄ�dÄ«ta zaļa ikona un informatÄ«vs paziņojums\n" "BrÄ«dinÄ�jums - tiek rÄ�dÄ«ta dzeltena ikona un informatÄ«vs paziņojums\n" "SvarÄ«gs - tiek rÄ�dÄ«ta sarkana ikona un svarÄ«gs paziņojums\n" "Kritisks - tiek rÄ�dÄ«ta sarkana ikona un kritisks paziņojums, kurÅ¡ tipiski tiek " "atrÄ�dÄ«ts pa virsu visÄ�m atvÄ“rtajÄ�m aplikÄ�cijÄ�m un paliek atvÄ“rts, kamÄ“r " "lietotÄ�js to nav noraidÄ«jis, bet tomÄ“r Å¡Ä�da paziņojumu uzvedÄ«ba ir ļoti " "atkarÄ«ga no grafiskÄ�s vides, ko lietojat" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Ziņojumu konfigurÄ�cija" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Pievienot jaunu ziņojumu sarakstam" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "DzÄ“st ziņojumu no saraksta" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "PersonalizÄ“ta pieejamÄ� PlayTime laika ziņojumu konfigurÄ�cija.\n" "\n" "LÅ«dzu konfigurÄ“ notifikÄ�cijas pÄ“c saviem ieskatiem.\n" "\n" "VÄ“rtÄ«ba \"Laiks\" nosaka atlikuÅ¡o PlayTime laiku, kad paziņojums tiks rÄ�dÄ«ts, " "vÄ“rtÄ«ba \"SvarÄ«gums\" nosaka ikonas krÄ�su un paziņojuma veidu, paskaidrojumi " "zemÄ�k.\n" "\n" "InformÄ�cija - tiek rÄ�dÄ«ta zaļa ikona un informatÄ«vs paziņojums\n" "BrÄ«dinÄ�jums - tiek rÄ�dÄ«ta dzeltena ikona un informatÄ«vs paziņojums\n" "SvarÄ«gs - tiek rÄ�dÄ«ta sarkana ikona un svarÄ«gs paziņojums\n" "Kritisks - tiek rÄ�dÄ«ta sarkana ikona un kritisks paziņojums, kurÅ¡ tipiski tiek " "atrÄ�dÄ«ts pa virsu visÄ�m atvÄ“rtajÄ�m aplikÄ�cijÄ�m un paliek atvÄ“rts, kamÄ“r " "lietotÄ�js to nav noraidÄ«jis, bet tomÄ“r Å¡Ä�da paziņojumu uzvedÄ«ba ir ļoti " "atkarÄ«ga no grafiskÄ�s vides, ko lietojat" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "PlayTime ziņojumu konfigurÄ�cija" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Pievienot jaunu PlayTime ziņojumu sarakstam" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "DzÄ“st PlayTime notifikÄ�ciju no saraksta" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Paziņojumi" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Nosaka vai lietot balss notifikÄ�cijas, ja opcija nav pieejama, tÄ� bÅ«s " "atspÄ“jota.\n" "\n" "Ja vÄ“laties izmantot balss notifikÄ�cijas, lÅ«dzu instalÄ“t \"python3-espeak\" vai " "\"python3-espeak-ng\" pakotni." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Pielietot balss paziņojumus" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "TehniskÄ� žurnÄ�la lÄ«menis.\n" "\n" "LÅ«dzu mainÄ«t tikai tad, ja esat pÄ�rliecinÄ�ts un zinoÅ¡s, ko tas nozÄ«mÄ“." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "TehniskÄ� žurnÄ�la lÄ«menis" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "Nosaka vai rÄ�dÄ«t paziņojumu gadÄ«jumÄ�, ja ierobežojumi tikuÅ¡i mainÄ«ti" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Paziņot par izmaiņÄ�m ierobežojumos" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Nosaka, vai atrÄ�dÄ«t visus paziņojumus.\n" "\n" "Ja opcija atspÄ“jota, rÄ�dÄ«ti tiek tikai Ä«paÅ¡i svarÄ«gi paziņojumi." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "RÄ�dÄ«t visus paziņojumus" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Nosaka vai atrÄ�dÄ«t sekundes blakus ikonai notifikÄ�ciju panelÄ«.\n" "\n" "Dažas no grafiskajÄ�m vidÄ“m, piemÄ“ram KDE5, neatbalsta Å¡Ä�du opciju." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "RÄ�dÄ«t sekundes" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Å Ä« pazÄ«me nosaka cik ilgi uz ekrÄ�na tiek rÄ�dÄ«ti standarta paziņojumi par laika " "patÄ“riņu un ierobežojumu izmaiņÄ�m.\n" "\n" "VÄ“rtÄ«ba norÄ�dÄ«ta sekundÄ“s.\n" "VÄ“rtÄ«ba 0 nozÄ«mÄ“, ka ziņojums tiks rÄ�dÄ«ts lÄ«dz lietotÄ�js to aizvÄ“rs paÅ¡rocÄ«gi " "(opcija netiek rekomendÄ“ta izmantoÅ¡anai parastajiem paziņojumiem).\n" "\n" "LÅ«dzu ņemt vÄ“rÄ�, ka jÅ«su lietotÄ� vide var pÄ�rtvert Å¡o opciju, kas nozÄ«mÄ“, ka " "Å¡ai opcija nebÅ«s nekÄ�da ietekme uz paziņojumiem." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "PÄ�rÄ“jo paziņojumu ilgums (sek)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Å Ä« pazÄ«me nosaka cik ilgi uz ekrÄ�na tiek rÄ�dÄ«ti kritiskie paziņojumi (kad ikona " "par laika patÄ“riņu ir sarkana).\n" "\n" "VÄ“rtÄ«ba norÄ�dÄ«ta sekundÄ“s.\n" "VÄ“rtÄ«ba 0 nozÄ«mÄ“, ka ziņojums tiks rÄ�dÄ«ts lÄ«dz lietotÄ�js to aizvÄ“rs paÅ¡rocÄ«gi.\n" "\n" "LÅ«dzu ņemt vÄ“rÄ�, ka jÅ«su lietotÄ� vide var pÄ�rtvert Å¡o opciju, kas nozÄ«mÄ“, ka " "Å¡ai opcija nebÅ«s nekÄ�da ietekme uz paziņojumiem." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Kritisko paziņojumu ilgums (sek)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Å Ä« pazÄ«me nosaka vai paziņojumam jÄ�pievieno Ä«ss skaņas signÄ�ls brÄ«di, kad tiek " "parÄ�dÄ«ts ziņojums no Timekpr-nExT.\n" "\n" "Darbojas tikai tad, ja iespÄ“joti brÄ«dinÄ�jumi.\n" "\n" "Ja šī opcija nav rediģējama, tas nozÄ«mÄ“, ka jÅ«su lietotÄ� vide nepiedÄ�vÄ� Å¡Ä�du " "iespÄ“ju." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Lieto Ä«su skaņas signÄ�lu paziņojumos" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "KonfigurÄ�cija" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Å Ä« pazÄ«me nosaka vai lietotÄ�jam tiks rÄ�dÄ«ta slÄ“dzenes ikona un paziņojumi " #~ "par laika patÄ“riņu.\n" #~ "\n" #~ "LÅ«dzu ņemt vÄ“rÄ�, ka uzstÄ�dot Å¡o pazÄ«mi, lietotÄ�jam nebÅ«s pieejama slÄ“dzenes " #~ "ikona un neviens paziņojums!" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Nosaka vai lietot balss notifikÄ�cijas, ja opcija nav pieejama, tÄ� bÅ«s " #~ "atspÄ“jota.\n" #~ "\n" #~ "Ja vÄ“laties izmantot balss notifikÄ�cijas, lÅ«dzu instalÄ“t \"python3-espeak\" " #~ "pakotni." #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> uzstÄ�dÄ«t ierobežojumu veidu (\"lock\" - aizslÄ“gt darbvirsmu, \"suspend\" " #~ "- ievietot guļoÅ¡Ä� režīmÄ�, \"suspendwake\" - ievietot guļoÅ¡Ä� režīmÄ� un " #~ "pamodinÄ�t, \"terminate\" - izbeigt sesijas, \"shutdown\" - izslÄ“gt datoru), " #~ "piemÄ“ri" #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Visas tiesÄ«bas aizsargÄ�tas (c) 2018-2021 Eduards Bezverhijs" timekpr-next/resource/locale/lv/LC_MESSAGES/timekpr.mo000644 001750 001750 00000221103 15122253261 024475 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–ð®–+Ÿ˜.˘+ú˜…&™G¬™ô™Bš=RšJ�š"ÛšTþš¦S›~ú›FyœEÀœ�  ž�Ÿ3µŸ4éŸ{ eš :¡H;¡D„¡9É¡¢¢†¢#Ÿ¢|â7@£.x£“§£,;¤#h¤/Œ¤+¼¤<è¤%¥"=¥`¥p¥€¥8”¥Í¥?ë§+©>C©.‚©±©?Í©! ª?/ª%oª?•ª8Õª«'«AG«U‰«?ß«@¬@`¬A¡¬Aã¬N%­Et­ º­!È­.ê­®(®ÿ;±;µZµ qµ~µo�µ¾ýµ#¼¶'à¶.·%7·#]·2�·´·˜Ä·]¸!f¸ ˆ¸#©¸͸,å¸ ¹ ¹8&¹_¹Ôv¹ËKº—»E¯»#õ»,¼<F¼àƒ¼ d¾…¾ ™¾$¤¾ÂɾČ¿QÀiÀ'ƒÀ%«À4ÑÀ-Á<4Á/qÁ¡ÁĽÁ‚Â-›Â<ÉÂ&Ã/-Ã>]Ã(œÃ2ÅÃ)øÃ"Ä#%Ä7IÄ�ÄL“įàÆ(�Ç¹Ç ÑÇÕÜÇ̲ȘÉÊ 3Ê@Ê!ZÊC|ÊÀÊ<ÔÊ<Ë NËYËxË˓˖±ËÒHÌ0ÍâLÍ´/ÎŒäÎqÏ.„Ï=³Ï*ñÏÐ9ÐBÐaÐ!zÐ œÐ1¨Ð6ÚÐéÒXûÒTÓ\ÓeÓJ{Ó@ÆÓgÔ]oÔÍÔAãÔ%ÕG:ÕV‚Õ@ÙÕ3ÖBNÖ,‘Ö#¾Ö%âÖ×!×:×CR×&–×Y½×PØ7hØ0 Ø«ÑØ}Ú*–Ú9ÁÚ#ûÚÛ 0Û)>Û6hÛ,ŸÛ ÌÛíÛ5 Ü*@ÜkÜ/tÜ/¤ÜÔÜ"éÜ Ý'ÝAÝ&VÝ5}Ý#³Ýô×ÝÒÌÞŸß½àÛáÔøâÍãÄáäÀ¦å gæ,tæ$¡æÆæÏæ&êæç›"çL¾çr èŒ~è é/é!Jé&lé“é+¦é:Òé' ê25ê9hê:¢ê0Ýêë>&ëCeë?©ë8éë6"ìTYì?®ìÅîì9´î6îî %ï�3ð˵ñl�ó'îó¿övÖöÖM÷^$øƒùM‰ùT×ù,úVGúžú±úÌúéúûû8ûXXû>±û?ðû0üMükü‡ü¥ü!ÃüXåüh>ý"§ýYÊýP$þuþ �þ'�þÅþ!ßþ)ÿ#+ÿ&Oÿ*vÿ¡ÿ¨)Áë.ñ, CM,‘E¾/$4Yy‘§XÁa[|UØ\.V‹(â 2(6[’¯1ÇDù!>.`f�uöel?ÒNAa@£OäB4 >w I¶ = R> M‘ \ß L< U‰ 9ß 6 EP 8– 7Ï F 9N 4ˆ ,½ =ê L(<uA²PôCE:‰IÄ9FH0�?ÀRASP•@æ9'Ha8ªãó7·<®ô£ ¸Æä#íˆBš¶Ý¼”ÃQx¬Ž¯;Së.?@n@¯Vð@GˆŠ¦·½E¿ 1BDH*Lw‹›#«Ïä˜ ¤!­!½! Ð!fÜ!c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: Timekpr nExT Report-Msgid-Bugs-To: PO-Revision-Date: 2025-10-14 19:18+0300 Last-Translator: Eduards Bezverhijs Language-Team: Eduards Bezverhijs Language: lv_LV MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __:1,2 %(n)s minÅ«tes%(n)s minÅ«te%(n)s minÅ«tes%(n)s sekundÄ“m%(n)s sekundes%(n)s sekundÄ“m%(n)s sekundes%(n)s sekunde%(n)s sekundes%(n)s sekundes no atvÄ“lÄ“tÄ� PLayTime laika%(n)s sekunde no atvÄ“lÄ“tÄ� PLayTime laika%(n)s sekundes no atvÄ“lÄ“tÄ� PLayTime laikakopÄ� %(n)s lietotÄ�ji:kopÄ� %(n)s lietotÄ�js:kopÄ� %(n)s lietotÄ�ji:---=== INFORMÄ€CIJA ===---iegÅ«st lietotÄ�ja reÄ�lÄ� laika informÄ�ciju no servera, piemÄ“rs==> iegÅ«st faktisko lietotÄ�ju sarakstu no servera, piemÄ“rs==> iegÅ«st lietotÄ�ja konfigurÄ�ciju un informÄ�ciju no servera, piemÄ“rs==> izdrukÄ� palÄ«dzÄ«bu, piemÄ“rs==> uzstÄ�da PlayTime procesu filtrus, kas tiks izmantoti laika uzskaitÄ“, piemÄ“ram==> uzstÄ�da PlayTime laika ierobežojumus Å¡odien: "+" (pieliek laiku), "-" (noņem laiku), "=" (uzstÄ�da konkrÄ“tu pieejamo laiku), piemÄ“rs (pievieno vienu stundu)==> uzstÄ�da PlayTime laika ierobežojumus nedēļas dienÄ�m (vÄ“rtÄ«bu skaitam jÄ�sakrÄ«t ar atļauto dienu skaitu), piemÄ“rs==> uzstÄ�da pieļaujamo PlayTime dienu sarakstu lietotÄ�jam, piemÄ“rs==> komanda uzstÄ�da pieļaujamo dienu sarakstu lietotÄ�jam, piemÄ“rs==> uzstÄ�da pieļaujamos stundu ierobežojumus konkrÄ“tajai dienai vai "ALL" visÄ�m dienÄ�m, norÄ�diet sÄ�kuma un beigu minÅ«ti iekavÄ�s Å¡Ä�di [X-Y], papildus iespÄ“jams norÄ�dÄ«t ! pirms stundas, kura netiks uzskaitÄ«ta (brÄ«vs laiks lietotÄ�jam), piemÄ“rs==> uzstÄ�dÄ«t ierobežojumu veidu ("lock" - aizslÄ“gt darbvirsmu, "suspend" - ievietot guļoÅ¡Ä� režīmÄ�, "suspendwake" - ievietot guļoÅ¡Ä� režīmÄ� un pamodinÄ�t, "terminate" - pÄ�rtraukt sesijas, "kill" - izbeigt sesijas, "shutdown" - izslÄ“gt datoru), piemÄ“ri==> uzstÄ�da laika ierobežojumus Å¡odien: "+" (pieliek laiku), "-" (noņem laiku), "=" (uzstÄ�da konkrÄ“tu pieejamo laiku), piemÄ“rs (pievieno vienu stundu)==> uzstÄ�da laika ierobežojumu mÄ“nesim, piemÄ“rs==> uzstÄ�da laika ierobežojumu nedēļai, piemÄ“rs==> uzstÄ�da laika ierobežojumus visÄ�m nedēļas dienÄ�m, vÄ“rtÄ«bu skaitam jÄ�sakrÄ«t ar atļauto dienu skaitu, piemÄ“rs==> iespÄ“jo PlayTime laika uzskaiti arÄ« laika intervÄ�los, kas netiek uzskaitÄ«ti ("∞"), piemÄ“rs==> iespÄ“jo PlayTime laika uzskaiti lietotÄ�jam, piemÄ“rs==> iespÄ“jo PlayTime alternatÄ«vÄ� laika uzskaiti lietotÄ�jam, piemÄ“rs==> uzstÄ�da slÄ“dzenes un paziņojumu slÄ“pÅ¡anas pazÄ«mi, piemÄ“rs==> uzstÄ�da neaktÄ«vo sesiju uzskaites pazÄ«mi, piemÄ“rsParPar Timekpr-nExTDarbojoÅ¡os PlayTime aktivitÄ�Å¡u / aplikÄ�ciju skaits (tiek aprēķinÄ�ta reÄ�lajÄ� laikÄ�, pieejama tikai, ja lietotÄ�js ir aktÄ«vs)AktivitÄ�Å¡u / aplikÄ�ciju sarakstsKopÄ“jais atlikuÅ¡ais PlayTime laiks Å¡odien (tiek aprēķinÄ�ts reÄ�lajÄ� laikÄ�, pieejams tikai, ja lietotÄ�js ir aktÄ«vs)Pievienot lietotÄ�ju neuzskaitÄ�mo lietotÄ�ju sarakstamPievienot neuzskaitÄ�mo sesiju veidu sarakstamPievienot jaunu PlayTime aktivitÄ�ti. LÅ«dzu norÄ�diet aktivitÄ�tes masku / nosaukumu un lietotÄ�jam draudzÄ«gu aprakstu pa tieÅ¡o tabulÄ� zemÄ�k.Pievienot jaunu PlayTime ziņojumu sarakstamPievienot jaunu ziņojumu sarakstamPalielinÄ�t pieļaujamo laika daudzumu (bonuss)Pievienot uzskaitÄ«to sesiju tipu sarakstamPapildus PlayTime laika limits lietotÄ�jam tika apstrÄ�dÄ�tsPapildus konfigurÄ�cijaPapildus konfigurÄ�cijas iespÄ“jasPapildus limitiPapildus limitiPapildus statistikaPapildus laika ierobežojums lietotÄ�jam ir apstrÄ�dÄ�tsÅ Ä« pazÄ«me atļauj lietot PlayTime aktivitÄ�tes neuzskaitÄ«tajos ("∞") intervÄ�los izvÄ“lÄ“tajam lietotÄ�jam. LietotÄ�jam bÅ«s iespÄ“ja darbinÄ�t aplikÄ�cijas, kas reÄ£istrÄ“tas tÄ� PlayTime aktivitÄ�Å¡u sarakstÄ� arÄ« intervÄ�los, kas apzÄ«mÄ“ti kÄ� neuzskaitÄ«tie ("∞"). Ja šī pazÄ«me ir iespÄ“jota, lietotÄ�ja pavadÄ«tais laiks izmantojot PlayTime aktivitÄ�tes netiks uzskaitÄ«ts, savukÄ�rt ja pazÄ«me ir atspÄ“jota, aplikÄ�cijas, kas reÄ£istrÄ“tas un tiek startÄ“tas neuzskaitÄ«tajos ("∞") intervÄ�los, tiks tiks terminÄ“tas.Atļaut lietot aktivitÄ�tes neuzskaitÄ«tajos ("∞") laika intervÄ�los. Å Ä« pazÄ«me atļauj lietotÄ�jam izmantot aplikÄ�cijas, kas reÄ£istrÄ“tas sadaļÄ� "AplikÄ�ciju / aktivitÄ�Å¡u saraksts" intervÄ�los, kas atzÄ«mÄ“ti kÄ� neuzskaitÄ«ti ("∞"), ja šī pazÄ«me nav iespÄ“jota, neviena no aktivitÄ�tÄ“m nav atļauta!Ierobežojumu izmaiņasPapildus dienu laika ierobežojumi lietotÄ�jam ir apstrÄ�dÄ�tiAtļauts neuzskaitÄ«tajos ("∞") intervÄ�los:Atļauts "∞" intervÄ�los:Papildus laika stundu ierobežojumi lietotÄ�jam ir apstrÄ�dÄ�tiIespÄ“jot PlayTime ierobežojumusIespÄ“jot PlayTime konfigurÄ�cijas iespÄ“ju maiņu Å¡ajÄ� lapÄ�IespÄ“jot Timekpr-nExT uzstÄ�dÄ«jumusIespÄ“jot papildus konfigurÄ�cijas iespÄ“ju maiņu Å¡ajÄ� lapÄ�IespÄ“jot visus Timekpr-nExT uzstÄ�dÄ«jumus vienlaicÄ«giIespÄ“jot konfigurÄ�cijuIespÄ“jot dienas ierobežojumusIespÄ“jot visas ierobežojumu izmaiņas, kas veiktas Å¡ajÄ� lapÄ�VispÄ�rÄ«ga informÄ�cija par laika izlietojumu un laika ierobežojumiem par Å¡o dienuIzvÄ“loties dienas, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajam periodam.IzvÄ“loties stundas, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajÄ�m dienÄ�m.IzvÄ“loties stundas, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajam periodam.IzvÄ“loties minÅ«tes, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajÄ�m dienÄ�m.IzvÄ“loties minÅ«tes, tÄ�s tiks mainÄ«tas izvÄ“lÄ“tajam periodam.IzvÄ“lieties Å¡o opciju, lai mainÄ«tu pieejamo PlayTime laika limitu Å¡odienaiIzvÄ“lieties Å¡o opciju, lai mainÄ«tu pieejamo laika limitu Å¡odienaiAizvÄ“rt loguKomanda NEIZDEVÄ€S: pieeja liegtaKomanda NEIZDEVÄ€S: komunikÄ�cija nav atļautaKonfigurÄ�cijaPersonalizÄ“ta pieejamÄ� PlayTime laika ziņojumu konfigurÄ�cija. LÅ«dzu konfigurÄ“ notifikÄ�cijas pÄ“c saviem ieskatiem. VÄ“rtÄ«ba "Laiks" nosaka atlikuÅ¡o PlayTime laiku, kad paziņojums tiks rÄ�dÄ«ts, vÄ“rtÄ«ba "SvarÄ«gums" nosaka ikonas krÄ�su un paziņojuma veidu, paskaidrojumi zemÄ�k. InformÄ�cija - tiek rÄ�dÄ«ta zaļa ikona un informatÄ«vs paziņojums BrÄ«dinÄ�jums - tiek rÄ�dÄ«ta dzeltena ikona un informatÄ«vs paziņojums SvarÄ«gs - tiek rÄ�dÄ«ta sarkana ikona un svarÄ«gs paziņojums Kritisks - tiek rÄ�dÄ«ta sarkana ikona un kritisks paziņojums, kurÅ¡ tipiski tiek atrÄ�dÄ«ts pa virsu visÄ�m atvÄ“rtajÄ�m aplikÄ�cijÄ�m un paliek atvÄ“rts, kamÄ“r lietotÄ�js to nav noraidÄ«jis, bet tomÄ“r Å¡Ä�da paziņojumu uzvedÄ«ba ir ļoti atkarÄ«ga no grafiskÄ�s vides, ko lietojatPersonalizÄ“ta pieejamÄ� laika ziņojumu konfigurÄ�cija. LÅ«dzu konfigurÄ“ notifikÄ�cijas pÄ“c saviem ieskatiem. LÅ«dzu ņemt vÄ“rÄ�, ka ir divi paziņojumu veidi, kurus nav iespÄ“jams personalizÄ“t: pÄ“dÄ“jais brÄ«dinÄ�jums, kas tiek rÄ�dÄ«ts kÄ�du laiku pirms pieejamÄ� laika beigÄ�m un laika atskaites paziņojumi, kas tiek rÄ�dÄ«ti ļoti Ä«si pirms laika beigÄ�m. VÄ“rtÄ«ba "Laiks" nosaka atlikuÅ¡o laiku, kad paziņojums tiks rÄ�dÄ«ts, vÄ“rtÄ«ba "SvarÄ«gums" nosaka ikonas krÄ�su un paziņojuma veidu, paskaidrojumi zemÄ�k. InformÄ�cija - tiek rÄ�dÄ«ta zaļa ikona un informatÄ«vs paziņojums BrÄ«dinÄ�jums - tiek rÄ�dÄ«ta dzeltena ikona un informatÄ«vs paziņojums SvarÄ«gs - tiek rÄ�dÄ«ta sarkana ikona un svarÄ«gs paziņojums Kritisks - tiek rÄ�dÄ«ta sarkana ikona un kritisks paziņojums, kurÅ¡ tipiski tiek atrÄ�dÄ«ts pa virsu visÄ�m atvÄ“rtajÄ�m aplikÄ�cijÄ�m un paliek atvÄ“rts, kamÄ“r lietotÄ�js to nav noraidÄ«jis, bet tomÄ“r Å¡Ä�da paziņojumu uzvedÄ«ba ir ļoti atkarÄ«ga no grafiskÄ�s vides, ko lietojatKonfigurÄ�cija lietotÄ�jam %s:KonfigurÄ�cija iegÅ«taPieslÄ“dziesPieslÄ“dzas...VÄ“rtÄ«ba nosaka, cik ilgi varat lietot datoru nepÄ�rtraukti, laika izlietojums var pÄ�rklÄ�t vairÄ�kas dienas.VÄ“rtÄ«ba nosaka, cik ilgi varat lietot datoru nepÄ�rtraukti, laika izlietojums var pÄ�rklÄ�t vairÄ�kas dienas (tiek aprēķinÄ�ta reÄ�lajÄ� laikÄ�, pieejama tikai, ja lietotÄ�js ir aktÄ«vs)NepÄ�rtrauktÄ� laika ierobežojums:PÄ�rvaldÄ«t Timekpr-nExT konfigurÄ�cijuPÄ�rvaldÄ«t Timekpr-nExT uzskaitÄ�mos lielumusUzskaitÄ�mo sesiju tipi netika padotiUzskaitÄ�mo sesiju tipi nav korektiUzskaitÄ�mo sesiju tipi nav korekti un uzstÄ�dÄ�miAtskaites laiksPievienot jaunu laika intervÄ�lu, kas bÅ«s pieejams lietotÄ�jam. PÄ“c intervÄ�la izveides, samainiet to pÄ“c saviem ieskatiem pa tieÅ¡o tabulÄ� zemÄ�k.KritisksKritisko paziņojumu ilgums (sek)PatreizÄ“jÄ� PlayTime statistikaPatreizÄ“jais faktiskais lietotÄ�jsPatreizÄ“jÄ� statistikaDienas ierobežojums katrai nedēļas dienaiDienas limitiDienaDienas laika ierobežojumi lietotÄ�jam tika apstrÄ�dÄ�tiDiena un ierobežojumiSamazinÄ�t PlayTime laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (stundas vai minÅ«tes) izvÄ“lÄ“tajam dienÄ�m. LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!SamazinÄ�t laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (stundas vai minÅ«tes) izvÄ“lÄ“tajam dienÄ�m. LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!SamazinÄ�t nedēļas vai mÄ“neÅ¡a laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (dienas vai stundas vai minÅ«tes) izvÄ“lÄ“tajam periodam.DzÄ“st izvÄ“lÄ“to laika intervÄ�lu no iespÄ“jamo intervÄ�lu saraksta.Eduards Bezverhijs IespÄ“jot PlayTime izvÄ“lÄ“tajam lietotÄ�jamPapildus PlayTime laika limits lietotÄ�jam tika apstrÄ�dÄ�tsIespÄ“jot PlayTime alternatÄ«vÄ� laika uzskaiti izvÄ“lÄ“tajam lietotÄ�jam. Å Ä« opcija ignorÄ“ spÄ“kÄ� esoÅ¡o laika uzskaiti tÄ�, ka tikai tad, ja darbojas kÄ�da no PlayTime aktivitÄ�Å¡u sarakstÄ� esoÅ¡Ä� aplikÄ�cija, laiks tiek uzskaitÄ«ts! Å is slÄ“dzis ietekmÄ“ tikai laika patÄ“riņa uzskaiti, laika intervÄ�lu kontrole paliek spÄ“kÄ�! Ja nedarbojas neviena no aktivitÄ�tÄ“m, laiks tiek uzskatÄ«ts kÄ� dÄ«kstÄ�ves laiks, kas nozÄ«mÄ“, ka Å¡is ir brÄ«vais laiks lietotÄ�jam!IespÄ“jot alternatÄ«vo PlayTime:IespÄ“jot PlayTime:IespÄ“jotsUzlabotais aktivitÄ�Å¡u meklÄ“tÄ�js:Ievadiet automÄ�tiskÄ�s pamoÅ¡anÄ�s beigu stundu. Å Ä« opcija darbosies tikai tad, ja sistÄ“mas BIOS / UEFI atbalsta pamoÅ¡anos pÄ“c RTC (reÄ�lÄ� laika pulkstenis) un šī opcija ir iespÄ“jota!Ievadiet automÄ�tiskÄ�s pamoÅ¡anÄ�s sÄ�kuma stundu. Å Ä« opcija darbosies tikai tad, ja sistÄ“mas BIOS / UEFI atbalsta pamoÅ¡anos pÄ“c RTC (reÄ�lÄ� laika pulkstenis) un šī opcija ir iespÄ“jota!NeuzskaitÄ�mÄ�s sesijasNeuzskaitÄ�mie lietotÄ�jiNeuzskaitÄ�mo sesiju tipi netika padotiNeuzskaitÄ�mo sesiju tipi nav korektiNeuzskaitÄ�mo sesiju tipi nav korekti un uzstÄ�dÄ�miNeuzskaitÄ�mo lietotÄ�ju saraksts nav korektsNeuzskaitÄ�mo lietotÄ�ju saraksts nav korekts un uzstÄ�dÄ�msNeuzskaitÄ�mo lietotÄ�ju saraksts netika padotsNav iespÄ“jams pieslÄ“gtiesPaplaÅ¡inÄ�jumu "%%s", kas tiek izmantots, lai noteiktu vai dators tiek izmantots, nav iespÄ“jams ieslÄ“gt! DÄ«kstÄ�ves laiks var netikt uzskaitÄ«ts korekti, gadÄ«jumos, ja ekrÄ�ns tiek bloÄ·Ä“ts!PÄ“dÄ“jais brÄ«dinÄ�jumsPÄ“dÄ“jÄ� paziņojuma laiks "%%s" nav korektsPÄ“dÄ“jÄ� paziņojuma laiks "%%s" nav korekts un uzstÄ�dÄ�msPÄ“dÄ“jÄ� paziņojuma laiks nav padotsPÄ“dÄ“jÄ� brÄ«dinÄ�juma laiks "%%s" nav korektsPÄ“dÄ“jÄ� brÄ«dinÄ�juma laiks "%%s" nav korekts un uzstÄ�dÄ�msPÄ“dÄ“jÄ� brÄ«dinÄ�juma laiks nav padotsFormÄ�ts: FormÄ�ts: NoPaslÄ“pt slÄ“dzeni un paziņojumus:SlÄ“dzenes slÄ“pÅ¡anas pazÄ«me lietotÄ�jam apstrÄ�dÄ�taStundu intervÄ�liLaika intervÄ�li, kas pieejami lietotajam. Opcija "∞" norÄ�da, ka laiks, ka patÄ“rÄ“ts šī intervÄ�la ietvaros, netiks uzskaitÄ«ts kÄ� iztÄ“rÄ“ts, bet gan pieskaitÄ«ts dÄ«kstÄ�ves laikam. LÅ«dzu ņemiet vÄ“rÄ�, ka ja diena beidzas ar 24 stundu un nÄ�kamÄ�s dienas 0 stunda ir atļauta, lietotÄ�js bez pÄ�rtraukuma var strÄ�dÄ�t arÄ« pÄ“c pusnakts. LÅ«dzu ņemt vÄ“rÄ�, ka vienas stundas ietvaros NAV iespÄ“jams konfigurÄ“t vairÄ�k par vienu intervÄ�lu Tas var sÄ�kties Å¡ajÄ� stundÄ�, beigties Å¡ajÄ� stundÄ�, pilnÄ«bÄ� iekļauties stundÄ�, bet ne vairÄ�k par vienu vienÄ� stundÄ�. VÄ“rtÄ«ba nosaka, cik ilgi lietotÄ�js bijis neaktÄ«vs pÄ“c pÄ“dÄ“jÄ�s pierakstīšanÄ�s datorÄ� (tiek aprēķinÄ�ta reÄ�lajÄ� laikÄ�, pieejama tikai, ja lietotÄ�js ir aktÄ«vs)Ikonas inicializÄ�cijas problÄ“ma (%%s)!Å Ä« ir ikona, pareizi?SvarÄ«gumsPalielinÄ�t PlayTime laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (stundas vai minÅ«tes) izvÄ“lÄ“tajam dienÄ�m. LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!PalielinÄ�t laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (stundas vai minÅ«tes) izvÄ“lÄ“tajam dienÄ�m. LÅ«dzu ņemt vÄ“rÄ�, ka iespÄ“jams izvÄ“lÄ“ties vairÄ�k par vienu dienu vienlaicÄ«gi!PalielinÄ�t nedēļas vai mÄ“neÅ¡a laika ierobežojumu balstoties uz izvÄ“lÄ“to laika vienÄ«bu (dienas vai stundas vai minÅ«tes) izvÄ“lÄ“tajam periodam.InformÄ�cijai un Å¡odienaiInformatÄ«vsInformÄ�cija par PlayTimeInformÄ�ciju par laika patÄ“riņuIekšējÄ� pieslÄ“guma kļūda, lÅ«dzu pÄ�rbaudÄ«t žurnÄ�la failusIntervÄ�ls noņemtsStundu intervÄ�la sÄ�kums nedrÄ«kst bÅ«t vienÄ�ds ar beigÄ�mStundu intervÄ�la sÄ�kums nedrÄ«kst bÅ«t vienÄ�ds ar beigÄ�mIntervÄ�liKontrolÄ“t datora lietojamÄ«buLimitsLimitu pÄ�rvaldÄ«baIerobežojumi un pÄ�rvaldÄ«baUzskaitÄ�mo sesiju saraksts. LÅ«dzu nemainÄ«t vai neeksperimentÄ“t ar Å¡o sarakstu, ja Jums nav pietiekoÅ¡i zinÄ�Å¡anu, lai saprastu ko tas nozÄ«mÄ“.NeuzskatÄ«to sesiju saraksts - sesiju tipi, kurÄ�s pavadÄ«tais laiks netiek uzskaitÄ«ts. LÅ«dzu nemainÄ«t vai neeksperimentÄ“t ar Å¡o sarakstu, ja Jums nav pietiekoÅ¡i zinÄ�Å¡anu, lai saprastu ko tas nozÄ«mÄ“.LietotÄ�ju saraksts, kuri reÄ£istrÄ“ti sistÄ“mÄ�NeuzskaitÄ�mo lietotÄ�ju saraksts - lietotÄ�jvÄ�rdi, kuru datorÄ� pavadÄ«tais laiks netiek uzskaitÄ«ts. LÅ«dzu norÄ�dÄ«t faktiskos lietotÄ�jvÄ�rdus nevis vÄ�rdus (piem.: lÅ«dzu norÄ�dÄ«t gmerkelis, nevis "GarlÄ«bs MerÄ·elis")Nedēļas dienu saraksts un papildus informÄ�cija par PlayTime ierobežojumiem. LÅ«dzu iespÄ“jot / atspÄ“jot dienas konkrÄ“tajam lietotÄ�jam PlayTime aktivitÄ�Å¡u ierobežoÅ¡anai.Nedēļas dienu saraksts un papildus informÄ�cija par dienas ierobežojumiem. LÅ«dzu iespÄ“jot / atspÄ“jot dienas konkrÄ“tajam lietotÄ�jam.ŽurnÄ�la lÄ«menisTehniskÄ� žurnÄ�la lÄ«menis "%%s" nav korektsTehniskÄ� žurnÄ�la lÄ«menis "%%s" nav korekts un uzstÄ�dÄ�msTehniskÄ� žurnÄ�la lÄ«menis netika padotsTehniskÄ� žurnÄ�la lÄ«menisMÄ“nesisPiezÄ«mes, izlasi uzmanÄ«gi ;)Ziņojumu konfigurÄ�cijaPÄ�rÄ“jo paziņojumu ilgums (sek)PaziņojumiÅ obrÄ«d darbojoÅ¡os PlayTime aktivitÄ�Å¡u skaitsLietotÄ�jam atlikuÅ¡o sekunžu skaits pirms pielietot izvÄ“lÄ“to ierobežojumu tÄ� sesijÄ�m. Kad Å¡is apjoms tiks sasniegts un lietotÄ�js joprojÄ�m bÅ«s aktÄ«vs, lietotÄ�ja sesijÄ�m tiks piemÄ“rots tam izvÄ“lÄ“tais ierobežojums. Sasniedzot Å¡o punktu, nav iespÄ“jams izdarÄ«t gandrÄ«z neko, lai to novÄ“rstu.AtlikuÅ¡ais sekunžu skaits lietotÄ�ja atvÄ“lÄ“tajam laikam pirms sÅ«tÄ«t kritisku paziņojumu par to, ka atvÄ“lÄ“tais laiks drÄ«z beigsies. PIEZĪME: detalizÄ“ta paziņojumu konfigurÄ�cija pieejama lietotÄ�jam klienta aplikÄ�cijÄ�!PARAMETRU PÄ€RBAUDES KĻŪDA (lÅ«dzu pÄ�rbaudÄ«t, vai parametrs norÄ�dÄ«ts korekti): %%sPeriodsPlayTimePlayTime aktivitÄ�tesPlayTime aktivitÄ�Å¡u / aplikÄ�ciju saraksts lietotÄ�jam tika apstrÄ�dÄ�tsPlayTime dienu laika ierobežojumi lietotÄ�jam tika apstrÄ�dÄ�tiPlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s stundÄ�s, lietotÄ�jam tika apstrÄ�dÄ�taPieejamais PlayTime laiks Å¡odien (saglabÄ�tais laiks, netiek aprēķinÄ�ts reÄ�lajÄ� laikÄ�)PlayTime pÄ�rvaldÄ«baPlayTime laika ierobežojumi dienai lietotÄ�jam tika apstrÄ�dÄ�tiPlayTime iespÄ“jots:PlayTime uzlabotÄ� aktivitÄ�Å¡u meklÄ“tÄ�ja vÄ“rtÄ«ba "%%s" nav korektaPlayTime uzlabotÄ� aktivitÄ�Å¡u meklÄ“tÄ�ja vÄ“rtÄ«ba "%%s" nav korekta un uzstÄ�dÄ�maPlayTime uzlabotÄ� aktivitÄ�Å¡u meklÄ“tÄ�ja vÄ“rtÄ«ba nav padotaPlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba "%%s" nav korektaPlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba "%%s" nav korekta un uzstÄ�dÄ�maPlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba nav padotaAtlikuÅ¡ais PlayTime laiks (kopÄ�):AtlikuÅ¡ais PlayTime laiks (Å¡odien):PlayTime limitiPlayTime ziņojumu konfigurÄ�cijaPlayTime konfigurÄ�cijaPlayTime alternatÄ«vÄ� laika uzskaite lietotÄ�jam tika apstrÄ�dÄ�taIzlietotais PlayTime laiks (Å¡odiena):Izlietotais PlayTime laiks Å¡odien (saglabÄ�tais laiks, nav faktiskais šībrīža laiks)Atveriet aplikÄ�ciju atkÄ�rtoti, ja esat administrators un Timekpr-nExT darbojasLÅ«dzu iezÄ«mÄ“jiet dienu ierobežojumu uzstÄ�dīšanaiLÅ«dzu iezÄ«mÄ“jiet stundu intervÄ�lu dzēšanaiLÅ«dzu norÄ�dÄ«t pilnu procesa (palaidÄ“jprogrammas) nosaukumu bez pilna ceļa uz to kÄ� reÄ£istrjutÄ«gu simbolu virkni, kas tiks monitorÄ“ta sistÄ“mÄ�. Nosaukumam iespÄ“jams norÄ�dÄ«t arÄ« RegExp (regulÄ�ras izteiksmes), bet esiet ļoti uzmanÄ«gi tÄ�s ievadot, jo nepareizas izteiksmes ievades rezultÄ�tÄ�, var tikt izbeigti lietotÄ�ja procesi, kurus iespÄ“jams, nevÄ“lÄ“jÄ�ties izbeigt! PIEZĪME: RegExp ir eksperta opcija!AtjaunoÅ¡anas intervÄ�lsAtjaunoÅ¡anas intervÄ�ls "%%s" nav korektsAtjaunoÅ¡anas intervÄ�ls "%%s" nav korekts un uzstÄ�dÄ�msAtjaunoÅ¡anas intervÄ�ls nav padotsProcesa aprakstsProcesa maskaDzÄ“st PlayTime notifikÄ�ciju no sarakstaDzÄ“st lietotÄ�ju no neuzskaitÄ�mo lietotÄ�ju sarakstaDzÄ“st neuzskaitÄ�mo sesiju tipu no sarakstaDzÄ“st neuzskaitÄ«to sesiju tipuDzÄ“st ziņojumu no sarakstaNodzÄ“st izvÄ“lÄ“to PlayTime aktivitÄ�ti no saraksta.DzÄ“st uzskaitÄ«to sesiju tipu no sarakstaAtjaunotAtjaunot konfigurÄ�ciju uz saglabÄ�to stÄ�vokliIerobežojumu veids lietotÄ�jam ir apstrÄ�dÄ�tsIerobežojuma veids:DarbojoÅ¡Ä�s aktivitÄ�tes (kopÄ�):DarbojoÅ¡Ä�s aktivitÄ�tes:SaglabÄ�t visas izmaiņasSaglabÄ�Å¡anas laiksSaglabÄ�Å¡anas laiks "%%s" nav korektsSaglabÄ�Å¡anas laiks "%%s" nav korekts un uzstÄ�dÄ�msSaglabÄ�Å¡anas laiks nav norÄ�dÄ«tsIzvÄ“lieties ierobežojumu veidu, kas tiks piemÄ“rots izvÄ“lÄ“tajam lietotÄ�jam. PIEZĪME: lÅ«dzu bÅ«t uzmanÄ«gam un laicÄ«gi izplÄ�not ierobežojumu veidu, kas piemÄ“rots JÅ«su situÄ�cijai, vÄ“lams izlasÄ«t katra ierobežojuma veida aprakstu!Ievadiet laika intervÄ�lu, kad vÄ“lama automÄ�tiskÄ� pamoÅ¡anÄ�s. Å Ä« opcija darbosies tikai tad, ja sistÄ“mas BIOS / UEFI atbalsta pamoÅ¡anos pÄ“c RTC (reÄ�lÄ� laika pulkstenis) un šī opcija ir iespÄ“jota!Å Ä« pazÄ«me nosaka vai laiks, kuru lietotÄ�js pavadÄ«jis dÄ«kstÄ�vÄ“ tiek uzskaitÄ«ts. Ja pazÄ«me nav iespÄ“jota, pavadÄ«tais laiks konsolÄ“ (ne terminÄ�lÄ«) un aizslÄ“gtajÄ� sesijÄ� NETIEK uzskaitÄ«ts. Å Ä«s pazÄ«mes darbspÄ“ja ļoti atkarÄ«ga no grafiskÄ�s vides kurÄ� strÄ�dÄ�jat.Å Ä« pazÄ«me nosaka vai laiks, kuru lietotÄ�js pavadÄ«jis dÄ«kstÄ�vÄ“ tiek uzskaitÄ«ts. Ja pazÄ«me nav iespÄ“jota, pavadÄ«tais laiks konsolÄ“ (ne terminÄ�lÄ«) un aizslÄ“gtajÄ� sesijÄ� NETIEK uzskaitÄ«ts (šīs pazÄ«mes darbspÄ“ja ļoti atkarÄ«ga no grafiskÄ�s vides kurÄ� strÄ�dÄ�jat)Å Ä« pazÄ«me nosaka vai laiks, kuru lietotÄ�js pavadÄ«jis dÄ«kstÄ�vÄ“ tiek uzskaitÄ«ts, ja pazÄ«me nav iespÄ“jota, pavadÄ«tais laiks konsolÄ“ (ne terminÄ�lÄ«) un aizslÄ“gtajÄ� sesijÄ� NETIEK uzskaitÄ«ts (šīs pazÄ«mes darbspÄ“ja ļoti atkarÄ«ga no grafiskÄ�s vides kurÄ� strÄ�dÄ�jat)IzvÄ“lieties, vai rÄ�dÄ«t Timekpr-next slÄ“dzenes ikonu un paziņojumus lietotÄ�jam. LÅ«dzu, ņemiet vÄ“rÄ�, ka, atzÄ«mÄ“jot Å¡o opciju, tiks atspÄ“jota visa informÄ�cijas un paziņojumu rÄ�dīšana lietotÄ�jam!Å Ä« pazÄ«me nosaka vai paziņojumam jÄ�pievieno Ä«ss skaņas signÄ�ls brÄ«di, kad tiek parÄ�dÄ«ts ziņojums no Timekpr-nExT. Darbojas tikai tad, ja iespÄ“joti brÄ«dinÄ�jumi. Ja šī opcija nav rediģējama, tas nozÄ«mÄ“, ka jÅ«su lietotÄ� vide nepiedÄ�vÄ� Å¡Ä�du iespÄ“ju.Nosaka vai lietot balss notifikÄ�cijas, ja opcija nav pieejama, tÄ� bÅ«s atspÄ“jota. Ja vÄ“laties izmantot balss notifikÄ�cijas, lÅ«dzu instalÄ“t "python3-espeak" vai "python3-espeak-ng" pakotni.Sesiju laika uzskaites biežums, kas nosaka cik bieži tiek aptaujÄ�tas lietotÄ�ju sesijas un uzskaitÄ«ts to patÄ“rÄ“tais laiks. 3 - 5 sekundes ir optimÄ�li, lÅ«dzu nemainÄ«t bez vajadzÄ«bas.Sesijas tipsUzstÄ�dÄ«t tieÅ¡i Å¡Ä�du laika ierobežojumuPlayTime aktivitÄ�Å¡u konfigurÄ�cijaSvarÄ«gsRÄ�dÄ«t visus paziņojumusPaziņot par izmaiņÄ�m ierobežojumosRÄ�dÄ«t sekundesNorÄ�diet atlikuÅ¡o laiku sekundÄ“s, pirms kura Timekpr-nExT sÄ�ks laika ik sekunžu atskaiti pirms piemÄ“rot izvÄ“lÄ“to ierobežojumu lietotÄ�ja sesijÄ�m.Nosaka vai rÄ�dÄ«t paziņojumu gadÄ«jumÄ�, ja ierobežojumi tikuÅ¡i mainÄ«tiNosaka, vai atrÄ�dÄ«t visus paziņojumus. Ja opcija atspÄ“jota, rÄ�dÄ«ti tiek tikai Ä«paÅ¡i svarÄ«gi paziņojumi.Nosaka vai atrÄ�dÄ«t sekundes blakus ikonai notifikÄ�ciju panelÄ«. Dažas no grafiskajÄ�m vidÄ“m, piemÄ“ram KDE5, neatbalsta Å¡Ä�du opciju.PiestartÄ“jiesTimekpr-nExT pÄ�rvaldÄ«bas aplikÄ�cijas statussTimekpr-nExT aplikÄ�cijas statussNoņemt norÄ�dÄ«to laika apjomu (sods)IzbeigÅ¡anas laiksSesiju izbeigÅ¡anas laiks "%%s" nav korektsSesiju izbeigÅ¡anas laiks "%%s" nav korekts un uzstÄ�dÄ�msSesiju izbeigÅ¡anas laiks netika padotsStundu intervÄ�ls pÄ�rklÄ�jas ar esoÅ¡u intervÄ�luStundu intervÄ�la beigas pÄ�rklÄ�jas ar esoÅ¡u intervÄ�luStundu intervÄ�la sÄ�kums pÄ�rklÄ�jas ar esoÅ¡u intervÄ�luStundu intervÄ�ls dublÄ“jas ar esoÅ¡u intervÄ�luKomanda nav izdevusies:Stundu daudzums, kas pievienots Å¡odienas atvÄ“lÄ“tajam laikamMinūšu daudzums, kas tiks pievienots Å¡odien atvÄ“lÄ“tajam laikamTimekpr-nExT pÄ�rvaldÄ«bas aplikÄ�cijas lietojums ir sekojoÅ¡s:Radusies problÄ“ma komunikÄ�cijai ar Timekpr-nExT (%%s)!Radusies problÄ“ma savienojumam ar Timekpr-nExT (%%s)!Å eit atrÄ�dÄ«tas dienas un ierobežojumi, kas attiecas uz PlayTime funkcionalitÄ�tiÅ eit atrÄ�dÄ«tas dienas un ierobežojumi, kas attiecas uz TeviÅ Ä« ir Timekpr-nExT pÄ�rvaldÄ«bas aplikÄ�cija, tÄ� atļauj veikt uzstÄ�dÄ«jumus Taviem lietotÄ�jiem kÄ� arÄ« paÅ¡am Timekpr-nExT. Lai lietotu Å¡o aplikÄ�ciju, Tev tÄ� jÄ�darbina ar administratora tiesÄ«bÄ�m vai jÄ�bÅ«t timekpr lietotÄ�ju grupÄ�. LÅ«dzu ņemt vÄ“rÄ�, ka "Timekpr-nExT pÄ�rvaldÄ«ba" pieejama tikai un vienÄ«gi, ja aplikÄ�cija darbinÄ�ta ar administratora tiesÄ«bÄ�m! LÅ«dzu pÄ�rvaldi lietotÄ�jus atbildÄ«gi un neatspÄ“jo tiesÄ«bas sev!Å Ä« sadaļa atļauj pÄ�rvaldÄ«t PlayTime ierobežojumus.Å Ä« sadaļa atļauj pÄ�rvaldÄ«t laika ierobežojumus.Å Ä« opcija iespÄ“jo alternatÄ«vo laika uzskaiti PlayTime aktivitÄ�tÄ“m. Ja šī opcija ir iespÄ“jota, laiks tiek uzskaitÄ«ts tikai tad, ja darbojas kÄ�da no PlayTime sarakstÄ� esoÅ¡ajÄ�m aplikÄ�cijÄ�m, savukÄ�rt pÄ�rÄ“jais laiks tiek uzskatÄ«ts kÄ� dÄ«kstÄ�ves laiks.Å Ä« pazÄ«me nosaka cik ilgi uz ekrÄ�na tiek rÄ�dÄ«ti kritiskie paziņojumi (kad ikona par laika patÄ“riņu ir sarkana). VÄ“rtÄ«ba norÄ�dÄ«ta sekundÄ“s. VÄ“rtÄ«ba 0 nozÄ«mÄ“, ka ziņojums tiks rÄ�dÄ«ts lÄ«dz lietotÄ�js to aizvÄ“rs paÅ¡rocÄ«gi. LÅ«dzu ņemt vÄ“rÄ�, ka jÅ«su lietotÄ� vide var pÄ�rtvert Å¡o opciju, kas nozÄ«mÄ“, ka Å¡ai opcija nebÅ«s nekÄ�da ietekme uz paziņojumiem.Å Ä« pazÄ«me nosaka cik ilgi uz ekrÄ�na tiek rÄ�dÄ«ti standarta paziņojumi par laika patÄ“riņu un ierobežojumu izmaiņÄ�m. VÄ“rtÄ«ba norÄ�dÄ«ta sekundÄ“s. VÄ“rtÄ«ba 0 nozÄ«mÄ“, ka ziņojums tiks rÄ�dÄ«ts lÄ«dz lietotÄ�js to aizvÄ“rs paÅ¡rocÄ«gi (opcija netiek rekomendÄ“ta izmantoÅ¡anai parastajiem paziņojumiem). LÅ«dzu ņemt vÄ“rÄ�, ka jÅ«su lietotÄ� vide var pÄ�rtvert Å¡o opciju, kas nozÄ«mÄ“, ka Å¡ai opcija nebÅ«s nekÄ�da ietekme uz paziņojumiem.TehniskÄ� žurnÄ�la lÄ«menis. LÅ«dzu mainÄ«t tikai tad, ja esat pÄ�rliecinÄ�ts un zinoÅ¡s, ko tas nozÄ«mÄ“.Å Ä« pazÄ«me nosaka vai PlayTime aktivitÄ�Å¡u meklēšanai sistÄ“mÄ� tiks izmantota arÄ« procesa komandrinda ieskaitot procesa parametrus (pÄ“c noklusÄ“juma aktivitÄ�tes tiek filtrÄ“tas tikai pÄ“c procesa nosaukuma). Ja pazÄ«me iespÄ“jota, Timekpr-nExT meklÄ“s procesus, kas reÄ£istrÄ“ti lietotÄ�ja aktivitÄ�Å¡u sarakstÄ� izmantojot pirmos 512 komandrindas simbolus, tÄ�dÄ� veidÄ� palielinot procesu meklēšanas iespÄ“jas. LÅ«dzu bÅ«t uzmanÄ«giem un rÅ«pÄ«gi pÄ�rbaudÄ«t RegExp Å¡ablonus katram lietotÄ�ja aktivitÄ�Å¡u sarakstÄ� esoÅ¡ajam procesam!Å Ä« opcija iespÄ“jo PlayTime funkcionalitÄ�ti. Å is ir globÄ�las slÄ“dzis, ja opcija tiek atspÄ“jota, tÄ� tiek atspÄ“jota visiem lietotÄ�jiem neskatoties uz katra individuÄ�lo iestatÄ«jumu!Å is saraksts atrÄ�da PlayTime aktivitÄ�tes / aplikÄ�cijas, kas tika iespÄ“jotas kÄ� daļa no PlayTime ierobežojumiemÅ is saraksts atrÄ�da laika intervÄ�lus, kas pieejami lietoÅ¡anai. Opcija "∞" norÄ�da, ka laiks kas patÄ“rÄ“ts šī intervÄ�la ietvaros netiks uzskaitÄ«ts kÄ� iztÄ“rÄ“ts, bet gan pieskaitÄ«ts dÄ«kstÄ�ves laikam.Å Ä« vÄ“rtÄ«ba nosaka sekunžu intervÄ�lu ar kÄ�du lietotÄ�ju uzskaitÄ«tais laiks tiek saglabÄ�ts uz diska. Lai nodroÅ¡inÄ�tu augstu precizitÄ�ti nezaudÄ“jot Ä�trdarbÄ«bu, Timekpr-nExT uzskaita laiku atmiņÄ� ar biežumu "AtjaunoÅ¡anas intervÄ�ls", savukÄ�rt šī opcija nodroÅ¡ina uzskaitÄ«tÄ� laika saglabÄ�Å¡anu uz diska ilgtermiņa glabÄ�Å¡anai.LaiksLaika ierobežojumi tika mainÄ«ti, lÅ«dzu ņemt vÄ“rÄ� jaunos ierobežojumus!Pieejamais laiks Å¡odien (saglabÄ�tais laiks, netiek aprēķinÄ�ts reÄ�lajÄ� laikÄ�)DÄ«kstÄ�ves laiks (kopÄ�):DÄ«kstÄ�ves laiks Å¡ai sesijai vai dÄ«kstÄ�ves laiks no Timekpr-nExT pÄ�rstartēšanasDÄ«kstÄ�ves laiks:AtlikuÅ¡ais laiks (kopÄ�):AtlikuÅ¡ais laiks (Å¡odien):AtlikuÅ¡ais laiks Å¡odien:Pieejamais laiks...Laika ierobežojums (mÄ“nesis):Laika ierobežojums (nedēļa):Laika ierobežojumi tika mainÄ«ti, lÅ«dzu pievÄ“rst uzmanÄ«bu jaunajiem ierobežojumiem!Laika ierobežojums uz mÄ“nesi, kas pieejams Tavai lietoÅ¡anaiLaika ierobežojums uz nedēļu, kas pieejams Tavai lietoÅ¡anaiAlternatÄ«va laika uzskaite:Izlietotais laiks (mÄ“nesis):Izlietotais laiks (sesija):Izlietotais laiks (Å¡odiena):Izlietotais laiks (nedēļa):Izlietotais laiks Å¡ajÄ� mÄ“nesÄ«Izlietotais laiks Å¡ajÄ� mÄ“nesÄ« (saglabÄ�tais laiks, nav faktiskais šībrīža laiks)Izlietotais laiks Å¡ajÄ� lietotÄ�ja sesijÄ� vai laiks, kas izlietots pÄ“c Timekpr-nExT pÄ�rstartēšanasIzlietotais laiks Å¡ajÄ� nedēļÄ�Izlietotais laiks Å¡ajÄ� nedēļÄ� (saglabÄ�tais laiks, nav faktiskais šībrīža laiks)Izlietotais laiks Å¡odien (saglabÄ�tais laiks, nav faktiskais šībrīža laiks)Å odien izlietotais laiks:Timekpr-nExTTimekpr-nExT pÄ�rvaldÄ«bas iestatÄ«jumiTimekpr-nExT pÄ�rvaldÄ«baTimekpr-nExT PlayTime paziņojumsTimekpr-nExT administrÄ�cijas aplikÄ�cijaTimekpr-nExT lietotÄ�ja aplikÄ�cijaTimekpr-nExT konfigurÄ�cija saglabÄ�taTimekpr-nExT savienojums vÄ“l nav pieejamsTimekpr-nExT tehniskÄ� žurnÄ�la lÄ«menis. LÅ«dzu nemainÄ«t Å¡o vÄ“rtÄ«bu. Ä»oti iespÄ“jams, ka neatradÄ«siet neko interesantu žurnÄ�la failos. VÄ“rtÄ«bu nozÄ«me: 1 - standarta lÄ«menis, 2 - atkļūdoÅ¡anas lÄ«menis, 3 - padziļinÄ�ts atkļūdoÅ¡anas lÄ«menisTimekpr-nExT paziņojumsAr Timekpr-nExT saistÄ«tÄ� konfigurÄ�cijaLÄ«dzKopÄ“jais atlikuÅ¡ais PlayTime laiks Å¡odienaiKopÄ“jais Å¡odien izlietotais PlayTime laiksNepÄ�rtraukti pieejamais laiks Å¡odien lÄ«dz paÅ¡Ä�m dienas beigÄ�mUzskaitÄ�mo sesiju pazÄ«me "%%s" nav korektaNeaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba "%%s" nav korekta un uzstÄ�dÄ�maUzskaitÄ«tÄ�s sesijas lietotÄ�jam apstrÄ�dÄ�tasUzskaitÄ«tÄ�s sesijas netika padotasUzskaitÄ«t neaktÄ«vÄ�s sesijas:UzskaitÄ«t neaktÄ«vÄ�s:UzskaitÄ�mÄ�s sesijasNEPAREDZÄ’TA KĻŪDA: %%sNeparedzÄ“ta KĻŪDA iegÅ«stot konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�luNeparedzÄ“ta KĻŪDA ielasot lietotÄ�ja konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�luNeparedzÄ“ta KĻŪDA ielasot lietotÄ�ju sarakstu. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�luNeparedzÄ“ta KĻŪDA mainot konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�luNeparedzÄ“ta KĻŪDA mainot laika kontroles failu. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�luNeparedzÄ“ta KĻŪDA ielasot konfigurÄ�ciju. LÅ«dzu pÄ�rbaudÄ«t Timekpr-nExT žurnÄ�luLieto Ä«su skaņas signÄ�lu paziņojumosPielietot balss paziņojumusLietotÄ�ja "%%s" konfigurÄ�cijas fails nav atrastsLietotÄ�ja "%%s" laika pÄ�rvaldÄ«bas fails nav atrastsLietotÄ�js "%%s" nav atrastsLietotÄ�ju pÄ�rvaldÄ«baLietotÄ�ja PlayTime ierobežojumi tika saglabÄ�tiPapildus konfigurÄ�cijas ierobežojumi lietotÄ�jam tika apstrÄ�dÄ�tiLietotÄ�ja konfigurÄ�cija iegÅ«taLietotÄ�ja laika ierobežojumi tika saglabÄ�tiLietotÄ�ja "%%s" PlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s stundÄ�s, nav korektaLietotÄ�ja "%%s" PlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s stundÄ�s, nav korekta un uzstÄ�dÄ�maLietotÄ�ja "%%s" PlayTime vÄ“rtÄ«ba, kas pieļauj aktivitÄ�tes neuzskaitÄ«tajÄ�s stundÄ�s, nav padotaLietotÄ�ja "%%s" PlayTime dienu laika ierobežojumi nav korektiLietotÄ�ja "%%s" PlayTime dienu laika ierobežojumi nav korekti un uzstÄ�dÄ�miLietotÄ�ja "%%s" PlayTime dienu laika ierobežojumi netika padotiLietotÄ�ja "%%s" PlayTime pieļaujamo dienu saraksts nav korektsLietotÄ�ja "%%s" PlayTime pieļaujamo dienu saraksts nav korekts un uzstÄ�dÄ�msLietotÄ�ja "%%s" PlayTime pieļaujamo dienu saraksts netika padotsLietotÄ�ja "%%s" PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba nav korektaLietotÄ�ja "%%s" PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba korekta un uzstÄ�dÄ�maLietotÄ�ja "%%s" PlayTime iespÄ“joÅ¡anas vÄ“rtÄ«ba nav padotaLietotÄ�ja "%%s" pieļaujamÄ� laika operÄ�cija varbÅ«t viena no sekojoÅ¡Ä�m: - + =LietotÄ�ja "%%s" PlayTime alternatÄ«vÄ� laika uzskaites vÄ“rtÄ«ba nav korektaLietotÄ�ja "%%s" PlayTime alternatÄ«vÄ� laika uzskaites vÄ“rtÄ«ba nav korekta un uzstÄ�dÄ�maLietotÄ�ja "%%s" PlayTime alternatÄ«vÄ� laika uzskaites vÄ“rtÄ«ba nav padotaLietotÄ�ja "%%s" pieļaujamÄ� PlayTime laika ierobežojums nav korekts un uzstÄ�dÄ�msLietotÄ�ja "%%s" dienas numurs nav korekts un uzstÄ�dÄ�msLietotÄ�ja "%%s" dienu laika ierobežojumi nav korektiLietotÄ�ja "%%s" dienu laika ierobežojumi nav korekti un uzstÄ�dÄ�miLietotÄ�ja "%%s" dienu laika ierobežojumi netika padotiLietotÄ�ja "%%s" pieļaujamo dienu saraksts nav korektsLietotÄ�ja "%%s" pieļaujamo dienu saraksts nav korekts un uzstÄ�dÄ�msLietotÄ�ja "%%s" pieļaujamo dienu saraksts netika padotsLietotÄ�ja "%%s" dienas numuram jÄ�bÅ«t no 1 lÄ«dz 7LietotÄ�ja "%%s" dienas numurs netika padotsLietotÄ�ja "%%s" slÄ“dzenes slÄ“pÅ¡anas vÄ“rtÄ«ba nav korektaLietotÄ�ja "%%s" slÄ“dzenes slÄ“pÅ¡anas vÄ“rtÄ«ba nav korekta un uzstÄ�dÄ�maLietotÄ�ja "%%s" slÄ“dzenes slÄ“pÅ¡anas vÄ“rtÄ«ba nav padotaLietotÄ�ja "%%s" pieļaujamais mÄ“neÅ¡a ierobežojums nav korektsLietotÄ�ja "%%s" pieļaujamais mÄ“neÅ¡a ierobežojums nav korekts un uzstÄ�dÄ�msLietotÄ�ja "%%s" pieļaujamais mÄ“neÅ¡a ierobežojums netika padotsLietotÄ�ja "%%s" ierobežojumu veida vÄ“rtÄ«ba nav korektaLietotÄ�ja "%%s" ierobežojumu veida vÄ“rtÄ«ba nav korekta un uzstÄ�dÄ�maLietotÄ�ja "%%s" ierobežojumu veida vÄ“rtÄ«ba nav padotaLietotÄ�ja "%%s" pieļaujamÄ� PlayTime laika ierobežojums nav korektsLietotÄ�ja "%%s" laika ierobežojums nav korektsLietotÄ�ja "%%s" laika ierobežojums nav korekts un uzstÄ�dÄ�msLietotÄ�ja "%%s" pieļaujamÄ� laika operÄ�cija varbÅ«t viena no sekojoÅ¡Ä�m: - + =LietotÄ�ja "%%s" neaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba nav korektaLietotÄ�ja "%%s" neaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba nav korekta un uzstÄ�dÄ�maLietotÄ�ja "%%s" neaktÄ«vo sesiju uzskaites vÄ“rtÄ«ba nav padotaLietotÄ�ja "%%s" mÄ“neÅ¡a laika ierobežojums nav korektsLietotÄ�ja "%%s" mÄ“neÅ¡a laika ierobežojums nav korekts un uzstÄ�dÄ�msLietotÄ�ja "%%s" mÄ“neÅ¡a laika ierobežojums nav padotsLietotÄ�jvÄ�rdsLietotÄ�jvÄ�rds:PÄ�rvaldÄ«bas iespÄ“jas, kas saistÄ«tas ar lietotÄ�jiemPÄ�rbaudÄ«t ievadÄ«to laika intervÄ�lu pareizÄ«bu. Å is ir obligÄ�ts solis, lai pÄ�rliecinÄ�tos, ka intervÄ�li ir korekti. ProblemÄ�tiskie intervÄ�li pÄ“c pÄ�rbaudes tiks izgaismoti.BRĪDINÄ€JUMS: Timekpr-nExT administrÄ�cijas aplikÄ�cijai bÅ«tu jÄ�startÄ“jas grafiski, bet grafiskÄ� vide nav pieejama, tÄ�pÄ“c aplikÄ�cija darbosies terminÄ�la režīmÄ�...PamoÅ¡anÄ�s stundas:BrÄ«dinÄ�jumsNedēļas dienu ierobežojumiNedēļaNedēļas un mÄ“neÅ¡a ierobežojumiNedēļas un mÄ“neÅ¡a laika ierobežojumi lietotÄ�jam. Å ie ierobežojumi tiek ņemti vÄ“rÄ� kopÄ� ar pÄ�rÄ“jiem laika ierobežojumiem.Nedēļas un mÄ“neÅ¡a laika ierobežojumi lietotÄ�jam apstrÄ�dÄ�tiKad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks aizslÄ“gts (lock). Å is ierobežojumu veids faktiski nav ierobežojums, tas vairÄ�k domÄ�ts paÅ¡kontroles nodroÅ¡inÄ�Å¡anai.Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks izslÄ“gts. Å is ir faktiskais ierobežojums! Pirms lietot Å¡o opciju, lÅ«dzu izsvÄ“rt vai tÄ� bÅ«s atbilstoÅ¡a JÅ«su situÄ�cijai!Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks novietots gulēšanas režīmÄ� un tiks pamodinÄ�ts automÄ�tiski, kad atvÄ“lÄ“tie ierobežojumi to atļaus. Å is ierobežojumu veids faktiski nav ierobežojums, tas vairÄ�k domÄ�ts paÅ¡kontroles nodroÅ¡inÄ�Å¡anai. Ja dators tiks pamodinÄ�ts brÄ«dÄ«, kad lietotÄ�jam atvÄ“lÄ“tais laiks ir beidzies, datora ekrÄ�ns tiks bloÄ·Ä“ts un pÄ“c kÄ�da laika dators tiks novietots gulēšanas režīmÄ�.Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, dators tiks novietots gulēšanas režīmÄ�. Å is ierobežojumu veids faktiski nav ierobežojums, tas vairÄ�k domÄ�ts paÅ¡kontroles nodroÅ¡inÄ�Å¡anai. Ja dators tiks pamodinÄ�ts brÄ«dÄ«, kad lietotÄ�jam atvÄ“lÄ“tais laiks ir beidzies, datora ekrÄ�ns tiks bloÄ·Ä“ts un pÄ“c kÄ�da laika dators tiks novietots gulēšanas režīmÄ�.Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, tÄ� sesijas tiks izbeigtas. Å is ir faktiskais ierobežojums! Å Ä« ir noklusÄ“tÄ� vÄ“rtÄ«ba un potenciÄ�li vispiemÄ“rotÄ�kÄ�!Kad lietotÄ�jam beidzies atvÄ“lÄ“tais laiks, tÄ� sesijas tiks pÄ�rtrauktas. Å is ir faktiskais ierobežojums! Å Ä« ir noklusÄ“tÄ� vÄ“rtÄ«ba un potenciÄ�li vispiemÄ“rotÄ�kÄ�!Tev atlikuÅ¡as %(n)s stundasTev atlikusi %(n)s stundaTev atlikuÅ¡as %(n)s stundasTev atvÄ“lÄ“tais laiks Å¡odien nav ierobežotsTev atvÄ“lÄ“tais laiks beidzies, Tava sesija tiks aizvÄ“rta pÄ“cTev atvÄ“lÄ“tais laiks beidzies, Tavs dators tiks izslÄ“gts pÄ“cTev atvÄ“lÄ“tais laiks beidzies, Tavs dators tiks novietots gulēšanas režīmÄ� pÄ“cTev atvÄ“lÄ“tais laiks beidzies, Tava sesija tiks bloÄ·Ä“ta pÄ“cdievadiet stundu intervÄ�lusprocesa maska...no...sstundas ir numurÄ“tas pÄ“c ISO 9601 (t.i. 24 stundas, formÄ�ts: 0-23)stsvarÄ«gums...izbeigt lietotÄ�ja sesijasbloÄ·Ä“t ekrÄ�numminn/askaitliskÄ�s laika vÄ“rtÄ«bas ir sekundÄ“sprocesa apraksts...sesijas tips...izslÄ“gt datorugulēšanas un pamoÅ¡anÄ�s režīmsgulēšanas režīmspÄ�rtraukt lietotÄ�ja sesijaslaiks...This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3lÄ«dz...Å¡odienas laikslietotÄ�jvÄ�rds...pÄ�rbaudÄ«tnedēļas dienas ir numurÄ“tas pÄ“c ISO 8601 (t.i. pirmdiena ir pirmÄ� diena nedēļÄ�, formÄ�ts: 1-7)timekpr-next/resource/locale/cs/000775 001750 001750 00000000000 13705523357 020702 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/cs/LC_MESSAGES/000775 001750 001750 00000000000 15122253261 022454 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/cs/LC_MESSAGES/timekpr.po000644 001750 001750 00000347645 15122253261 024510 0ustar00bezvfedubezvfedu000000 000000 # Czech translation for timekpr-next # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2019. # Ludek NOVAK , 2020. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: Ludek NOVAK \n" "POT-Creation-Date: 2021-03-01 22:11+0200\n" "PO-Revision-Date: 2025-10-14 19:19+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Ä�eÅ¡tina <>\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2020-05-13 06:32+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> tiskni nápovÄ›du, například" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> získat uložený seznam uživatelů ze serveru, například" #: common/constants/messages.py:33 msgid "" "==> get user configuration and time information from the server, example" msgstr "" "==> získat konfiguraci uživatele a Ä�asové informace ze serveru, příklad" #: common/constants/messages.py:34 msgid "==> set allowed days for the user, example" msgstr "==> nastavit povolené dny pro uživatele, například" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:36 #, fuzzy #| msgid "" #| "==> set allowed hours for the specified day, or \"ALL\" for every day, " #| "optionally specify start and end minutes in brackets, example" msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> nastavit povolené hodiny pro zadaný den nebo „ALL“ pro každý den, " "volitelnÄ› zadat poÄ�áteÄ�ní a koncové minuty v závorkách, například" #: common/constants/messages.py:37 #, fuzzy #| msgid "" #| "==> set time limits for all allowed days, the total must not exceed the " #| "allowed per-day count, example" msgid "" "==> set time limits for all allowed days, the number of values must not " "exceed the allowed days for the user, example" msgstr "" "==> nastavit Ä�asové limity pro vÅ¡echny povolené dny, celkový souÄ�et nesmí " "pÅ™ekroÄ�it povolený poÄ�et dní, například" #: common/constants/messages.py:38 msgid "==> set time limit per week, example" msgstr "==> nastavit týdenní omezení Ä�asu, například" #: common/constants/messages.py:39 msgid "==> set time limit per month, example" msgstr "==> nastavit Ä�asový limit za mÄ›síc, například" #: common/constants/messages.py:40 msgid "==> set whether to track inactive user sessions, example" msgstr "" "==> nastavit, zda se mají sledovat neaktivní uživatelské relace, například" #: common/constants/messages.py:41 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "==> nastavit, zda skrýt ikonu panelu a zabránit upozornÄ›ní, například" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "shutdown" #: common/constants/messages.py:43 #, fuzzy #| msgid "" #| "==> set restriction / lockout type (\"lock\", \"suspend\", " #| "\"suspendwake\", \"terminate\", \"shutdown\"), examples" msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"shutdown\" - shutdown the computer), examples" msgstr "" "==> nastavit typ omezení / blokování (\"lock\", \"suspend\", " "\"suspendwake\", \"terminate\", \"shutdown\"), například" #: common/constants/messages.py:44 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> nastavený Ä�as zbývající pro uživatele v aktuálním Ä�asovém okamžiku: \"+" "\" (pÅ™idat Ä�as), \"-\" (odeÄ�íst Ä�as), \"=\" (nastavit pÅ™esný Ä�as, který je k " "dispozici), příklad (pÅ™idat jednu hodinu)" #: common/constants/messages.py:45 #, fuzzy #| msgid "==> set allowed days for the user, example" msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> nastavit povolené dny pro uživatele, například" #: common/constants/messages.py:46 #, fuzzy #| msgid "==> set whether to hide tray icon and prevent notifications, example" msgid "" "==> set whether PlayTime must be accounted instead of normal activity, " "example" msgstr "==> nastavit, zda skrýt ikonu panelu a zabránit upozornÄ›ní, například" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" #: common/constants/messages.py:48 #, fuzzy #| msgid "==> set allowed days for the user, example" msgid "==> set allowed days for PlayTime activities, example" msgstr "==> nastavit povolené dny pro uživatele, například" #: common/constants/messages.py:49 #, fuzzy #| msgid "" #| "==> set time limits for all allowed days, the total must not exceed the " #| "allowed per-day count, example" msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> nastavit Ä�asové limity pro vÅ¡echny povolené dny, celkový souÄ�et nesmí " "pÅ™ekroÄ�it povolený poÄ�et dní, například" #: common/constants/messages.py:50 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" #: common/constants/messages.py:51 #, fuzzy #| msgid "" #| "==> set time left for the user at the current moment of time: \"+\" (add " #| "time), \"-\" (subtract time), \"=\" (set exact time available), example " #| "(add one hour)" msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> nastavený Ä�as zbývající pro uživatele v aktuálním Ä�asovém okamžiku: \"+" "\" (pÅ™idat Ä�as), \"-\" (odeÄ�íst Ä�as), \"=\" (nastavit pÅ™esný Ä�as, který je k " "dispozici), příklad (pÅ™idat jednu hodinu)" #: common/constants/messages.py:54 msgid "Control sessions types are not passed" msgstr "Typy kontrolních relací nejsou pÅ™edávány" #: common/constants/messages.py:55 msgid "Control sessions types list is not correct" msgstr "Seznam typů kontrolních relací není správný" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct and cannot be set" msgstr "Seznam typů kontrolních relací není správný a nelze jej nastavit" #: common/constants/messages.py:57 msgid "Excluded session types are not passed" msgstr "VylouÄ�ené typy relací se nepÅ™edávají" #: common/constants/messages.py:58 msgid "Excluded session types list is not correct" msgstr "Seznam vylouÄ�ených typů relací není správný" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct and cannot be set" msgstr "Seznam vylouÄ�ených typů relací není správný a nelze jej nastavit" #: common/constants/messages.py:60 msgid "Excluded user list is not passed" msgstr "Seznam vylouÄ�ených uživatelů není pÅ™edán" #: common/constants/messages.py:61 msgid "Excluded user list is not correct" msgstr "Seznam vylouÄ�ených uživatelů není správný" #: common/constants/messages.py:62 msgid "Excluded user list is not correct and cannot be set" msgstr "Seznam vylouÄ�ených uživatelů není správný a nelze jej nastavit" #: common/constants/messages.py:63 msgid "Final warning time is not passed" msgstr "ÄŒas poslední výstrahy není pÅ™edán" #: common/constants/messages.py:64 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "ÄŒas poslední výstrahy \"%%s\"není správný" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "ÄŒas poslední výstrahy \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:66 #, fuzzy #| msgid "Final warning time is not passed" msgid "Final notification time is not passed" msgstr "ÄŒas poslední výstrahy není pÅ™edán" #: common/constants/messages.py:67 #, fuzzy, python-format #| msgid "Final warning time \"%%s\" is not correct" msgid "Final notification time \"%%s\" is not correct" msgstr "ÄŒas poslední výstrahy \"%%s\"není správný" #: common/constants/messages.py:68 #, fuzzy, python-format #| msgid "Final warning time \"%%s\" is not correct and cannot be set" msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "ÄŒas poslední výstrahy \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:69 msgid "Termination time is not passed" msgstr "ÄŒas ukonÄ�ení není pÅ™edán" #: common/constants/messages.py:70 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "ÄŒas ukonÄ�ení \"%%s\"není správný" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "ÄŒas ukonÄ�ení \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:72 msgid "Track inactive is not passed" msgstr "Stopa není aktivní" #: common/constants/messages.py:73 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Stopa není aktivní \"%%s\"není správné" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "Stopa není aktivní \"%%s\"není správné a nelze jej nastavit" #: common/constants/messages.py:75 msgid "Log level is not passed" msgstr "Úroveň protokolu není aktivní" #: common/constants/messages.py:76 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Úroveň protokolu \"%%s\"není správná" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Úroveň protokolu \"%%s\"není správná a nelze jí nastavit" #: common/constants/messages.py:78 msgid "Poll time is not passed" msgstr "SÄ�ítání Ä�asu není aktivní" #: common/constants/messages.py:79 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "SÄ�ítání Ä�asu \"%%s\"není správné" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "SÄ�ítání Ä�asu \"%%s\"není správné a nelze jej nastavit" #: common/constants/messages.py:81 msgid "Save time is not passed" msgstr "UÅ¡etÅ™ený Ä�as není aktivní" #: common/constants/messages.py:82 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "UÅ¡etÅ™ený Ä�as\"%%s\"není správnÄ›" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "UÅ¡etÅ™ený Ä�as\"%%s\"není správnÄ› a nelze jej nastavit" #: common/constants/messages.py:84 #, fuzzy #| msgid "Poll time is not passed" msgid "PlayTime flag is not passed" msgstr "SÄ�ítání Ä�asu není aktivní" #: common/constants/messages.py:85 #, fuzzy, python-format #| msgid "Poll time \"%%s\" is not correct" msgid "PlayTime flag \"%%s\" is not correct" msgstr "SÄ�ítání Ä�asu \"%%s\"není správné" #: common/constants/messages.py:86 #, fuzzy, python-format #| msgid "Poll time \"%%s\" is not correct and cannot be set" msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "SÄ�ítání Ä�asu \"%%s\"není správné a nelze jej nastavit" #: common/constants/messages.py:87 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "" #: common/constants/messages.py:88 #, fuzzy, python-format #| msgid "Track inactive \"%%s\" is not correct" msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "Stopa není aktivní \"%%s\"není správné" #: common/constants/messages.py:89 #, fuzzy, python-format #| msgid "Track inactive \"%%s\" is not correct and cannot be set" msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be " "set" msgstr "Stopa není aktivní \"%%s\"není správné a nelze jej nastavit" #: common/constants/messages.py:92 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "Číslo dne uživatele %%s musí být k dispozici" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "Číslo dne uživatele %%s musí být mezi 1 a 7" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "Povolené hodiny uživatele \"%%s\" nejsou správné a nelze je nastavit" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "Seznam dnů uživatele %%s není pÅ™edán" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "Seznam dnů uživatele %%s není správný" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "Seznam dnů uživatele \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "Seznam denních limitů uživatele %%s není pÅ™edán" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "Seznam denních limitů uživatele %%s není správný" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "Seznam denních limitů uživatele %%s není správný a nelze jej nastavit" #: common/constants/messages.py:101 #, fuzzy, python-format #| msgid "User's \"%%s\" set time operation can be one of these: -+=" msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "Operace nastaveného Ä�asu uživatele %%s může být jedna z tÄ›chto operací: -+=" #: common/constants/messages.py:102 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct" msgid "User's \"%%s\" time limit is not correct" msgstr "Nastavený Ä�asový limit uživatele %%s není správný" #: common/constants/messages.py:103 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct and cannot be set" msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "Nastavený Ä�asový limit uživatele \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "MÄ›síÄ�ní příspÄ›vek uživatele %%s není schválen" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "MÄ›síÄ�ní příspÄ›vek uživatele %%s není správný" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "MÄ›síÄ�ní příspÄ›vek uživatele \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "Neaktivní příznak neaktivní stopy \"%%s\" uživatele není pÅ™edán" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "Příznak neaktivní stopy \"%%s\" uživatele není správný" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "Příznak neaktivní stopy \"%%s\" uživatele není správný a nelze jej nastavit" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "Příznak \"%%s\" skrytí zásobníku uživatele není pÅ™edán" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "Příznak skrytí panelu \"%%s\" není správný" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "Příznak skrytí ikony „%%s“ v zásobníku uživatele není správný a nelze jej " "nastavit" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "Typ omezení / blokování uživatele „%%s“ není pÅ™edán" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "Typ omezení / blokování uživatele „%%s“ není správný" #: common/constants/messages.py:115 #, python-format msgid "" "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Typ omezení / blokování uživatele „%%s“ není správný a nelze jej nastavit" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "Týdenní příspÄ›vek uživatele \"%%s\" není pÅ™edán" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "Týdenní příspÄ›vek uživatele \"%%s\" není správný" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "Týdenní příspÄ›vek uživatele \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:119 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not passed" msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "Neaktivní příznak neaktivní stopy \"%%s\" uživatele není pÅ™edán" #: common/constants/messages.py:120 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct" msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "Příznak neaktivní stopy \"%%s\" uživatele není správný" #: common/constants/messages.py:121 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "Příznak neaktivní stopy \"%%s\" uživatele není správný a nelze jej nastavit" #: common/constants/messages.py:122 #, fuzzy, python-format #| msgid "User's \"%%s\" hide tray icon flag is not passed" msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "Příznak \"%%s\" skrytí zásobníku uživatele není pÅ™edán" #: common/constants/messages.py:123 #, fuzzy, python-format #| msgid "User's \"%%s\" hide tray icon flag is not correct" msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "Příznak skrytí panelu \"%%s\" není správný" #: common/constants/messages.py:124 #, fuzzy, python-format #| msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "Příznak skrytí ikony „%%s“ v zásobníku uživatele není správný a nelze jej " "nastavit" #: common/constants/messages.py:125 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not passed" msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "passed" msgstr "Neaktivní příznak neaktivní stopy \"%%s\" uživatele není pÅ™edán" #: common/constants/messages.py:126 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct" msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct" msgstr "Příznak neaktivní stopy \"%%s\" uživatele není správný" #: common/constants/messages.py:127 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "Příznak neaktivní stopy \"%%s\" uživatele není správný a nelze jej nastavit" #: common/constants/messages.py:128 #, fuzzy, python-format #| msgid "User's \"%%s\" day list is not passed" msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "Seznam dnů uživatele %%s není pÅ™edán" #: common/constants/messages.py:129 #, fuzzy, python-format #| msgid "User's \"%%s\" day list is not correct" msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "Seznam dnů uživatele %%s není správný" #: common/constants/messages.py:130 #, fuzzy, python-format #| msgid "User's \"%%s\" day list is not correct and cannot be set" msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "Seznam dnů uživatele \"%%s\" není správný a nelze jej nastavit" #: common/constants/messages.py:131 common/constants/messages.py:134 #, fuzzy, python-format #| msgid "User's \"%%s\" day limits list is not passed" msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "Seznam denních limitů uživatele %%s není pÅ™edán" #: common/constants/messages.py:132 common/constants/messages.py:135 #, fuzzy, python-format #| msgid "User's \"%%s\" day limits list is not correct" msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "Seznam denních limitů uživatele %%s není správný" #: common/constants/messages.py:133 common/constants/messages.py:136 #, fuzzy, python-format #| msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgid "" "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "Seznam denních limitů uživatele %%s není správný a nelze jej nastavit" #: common/constants/messages.py:137 #, fuzzy, python-format #| msgid "User's \"%%s\" set time operation can be one of these: -+=" msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "Operace nastaveného Ä�asu uživatele %%s může být jedna z tÄ›chto operací: -+=" #: common/constants/messages.py:138 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct" msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "Nastavený Ä�asový limit uživatele %%s není správný" #: common/constants/messages.py:139 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct and cannot be set" msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "Nastavený Ä�asový limit uživatele \"%%s\" není správný a nelze jej nastavit" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:143 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT " "log files" msgstr "" "NeoÄ�ekávaná CHYBA pÅ™i naÄ�ítání konfigurace. Zkontrolujte soubory protokolu " "Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:145 #, fuzzy #| msgid "" #| "Unexpected ERROR getting confguration. Please inspect Timekpr-nExT log " #| "files" msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "NeoÄ�ekávaná CHYBA pÅ™i získání konfigurace. Zkontrolujte soubory protokolu " "Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:147 #, fuzzy #| msgid "" #| "Unexpected ERROR getting user confguration. Please inspect Timekpr-nExT " #| "log files" msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "NeoÄ�ekávaná CHYBA pÅ™i získávání uživatelského spojení. Zkontrolujte soubory " "protokolu Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:149 msgid "" "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "NeoÄ�ekávaná CHYBA pÅ™i získávání seznamu uživatelů. Zkontrolujte soubory " "protokolu Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:151 #, fuzzy #| msgid "" #| "Unexpected ERROR updating confguration. Please inspect Timekpr-nExT log " #| "files" msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "NeoÄ�ekávaná CHYBA aktualizace konfigurace. Zkontrolujte soubory protokolu " "Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:153 msgid "" "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "NeoÄ�ekávaná CHYBA kontroly aktualizace. Zkontrolujte soubory protokolu " "Timekpr-nExT" #: common/constants/messages.py:154 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "Uživatelská konfigurace \"%%s\" nebyla nalezena" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" control file is not found" msgstr "Uživatelský soubor \"%%s\" nebyl nalezen" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" is not found" msgstr "Uživatel \"%%s\" nebyl nalezen" #: common/constants/messages.py:159 msgid "Connected" msgstr "PÅ™ipojeno" #: common/constants/messages.py:160 msgid "Connecting..." msgstr "PÅ™ipojování…" #: common/constants/messages.py:161 msgid "Failed to connect" msgstr "PÅ™ipojení se nezdaÅ™ilo" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:163 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is " "running" msgstr "" "Prosím znovu otevÅ™ete aplikaci pokud jste superuser a běží Timekpr-nExT" #: common/constants/messages.py:164 msgid "Started" msgstr "SpuÅ¡tÄ›no" #: common/constants/messages.py:165 msgid "User configuration retrieved" msgstr "Uživatelská nastavení byla naÄ�tena" #: common/constants/messages.py:166 msgid "Configuration retrieved" msgstr "Nastavení byla naÄ�tena" #: common/constants/messages.py:167 msgid "Track inactive for user has been processed" msgstr "Neaktivní sledování uživatele bylo zpracováno" #: common/constants/messages.py:168 msgid "Hide tray icon for user has been processed" msgstr "Ikona skrytí zásobníku pro uživatele byla zpracována" #: common/constants/messages.py:169 msgid "Restriction / lockout type for user has been processed" msgstr "Typ omezení / blokování pro uživatele byl zpracován" #: common/constants/messages.py:170 msgid "Additional time for user has been processed" msgstr "Byl zpracován další Ä�as uživatele" #: common/constants/messages.py:171 #, fuzzy #| msgid "Additional time for user has been processed" msgid "Additional PlayTime for user has been processed" msgstr "Byl zpracován další Ä�as uživatele" #: common/constants/messages.py:172 msgid "Weekly and monthly limits for user have been processed" msgstr "Byly zpracovány týdenní a mÄ›síÄ�ní limity uživatele" #: common/constants/messages.py:173 msgid "Allowed days for user have been processed" msgstr "Byly zpracovány povolené dny uživatele" #: common/constants/messages.py:174 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "Day time limits for user have been processed" msgstr "Byly zpracovány Ä�asové limity dnů uživatele" #: common/constants/messages.py:175 msgid "Allowed hours for user have been processed" msgstr "Byly zpracovány povolené hodiny uživatele" #: common/constants/messages.py:176 msgid "Timekpr-nExT configuration has been saved" msgstr "Byla uložena konfigurace Timekpr-nExT" #: common/constants/messages.py:177 #, fuzzy #| msgid "==> set time limit per week, example" msgid "User time limits have been saved" msgstr "==> nastavit týdenní omezení Ä�asu, například" #: common/constants/messages.py:178 #, fuzzy #| msgid "Time limit for the week is enabled" msgid "User PlayTime limits have been saved" msgstr "Povolit týdenní Ä�asový limit" #: common/constants/messages.py:179 #, fuzzy #| msgid "Additional time for user has been processed" msgid "User additional options have been saved" msgstr "Byl zpracován další Ä�as uživatele" #: common/constants/messages.py:180 #, fuzzy #| msgid "Additional time for user has been processed" msgid "Enable PlayTime for the user has been processed" msgstr "Byl zpracován další Ä�as uživatele" #: common/constants/messages.py:181 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "PlayTime override flag for the user has been processed" msgstr "Byly zpracovány Ä�asové limity dnů uživatele" #: common/constants/messages.py:182 #, fuzzy #| msgid "Track inactive for user has been processed" msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "Neaktivní sledování uživatele bylo zpracováno" #: common/constants/messages.py:183 #, fuzzy #| msgid "Allowed days for user have been processed" msgid "PlayTime allowed days for user have been processed" msgstr "Byly zpracovány povolené dny uživatele" #: common/constants/messages.py:184 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "PlayTime day limits for user have been processed" msgstr "Byly zpracovány Ä�asové limity dnů uživatele" #: common/constants/messages.py:185 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "PlayTime activities for user have been processed" msgstr "Byly zpracovány Ä�asové limity dnů uživatele" #: common/constants/messages.py:186 msgid "Please select a day to set the limits" msgstr "Vyberte den a nastavte limity" #: common/constants/messages.py:187 msgid "That interval overlaps with an existing one" msgstr "Interval se pÅ™ekrývá s existujícím" #: common/constants/messages.py:188 msgid "That interval's start conflicts with an existing one" msgstr "Konflikty startu intervalu se stávajícím" #: common/constants/messages.py:189 msgid "That interval's end conflicts with an existing one" msgstr "Konflikty konce intervalu s existujícím" #: common/constants/messages.py:190 msgid "That interval's start or end duplicates an existing one" msgstr "ZaÄ�átek nebo konec intervalu je shodný s existujícím intervalem" #: common/constants/messages.py:191 msgid "Interval start cannot be the same as end" msgstr "ZaÄ�átek intervalu nemůže být stejný jako konec" #: common/constants/messages.py:192 #, fuzzy #| msgid "Interval start cannot be the same as end" msgid "Interval's start cannot be later than end" msgstr "ZaÄ�átek intervalu nemůže být stejný jako konec" #: common/constants/messages.py:193 msgid "Please select an hour interval to remove" msgstr "Vyberte prosím Ä�asový interval, který chcete odebrat" #: common/constants/messages.py:194 msgid "Interval removed" msgstr "Interval odstranÄ›n" #: common/constants/messages.py:195 msgid "Timekpr-nExT interface is not yet ready" msgstr "Rozhraní Timekpr-nExT není pÅ™ipraveno" #: common/constants/messages.py:198 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, " "but no displays are available, thus running in CLI..." msgstr "" "VAROVÃ�NÃ�: AdministraÄ�ní nástroj Timekpr-nExT byl požádán o spuÅ¡tÄ›ní v " "grafickém režimu, ale nejsou k dispozici žádné displeje, takže běží v " "textovém režimu ..." #: common/constants/messages.py:199 msgid "The command is incorrect:" msgstr "Příkaz je nesprávný:" #: common/constants/messages.py:200 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "Použití administrátorského klienta Timekpr-nExT je následující:" #: common/constants/messages.py:201 msgid "---=== NOTICE ===---" msgstr "---=== OZNÃ�MENÃ� ===---" #: common/constants/messages.py:202 msgid "numeric time values are in seconds" msgstr "Ä�íselné hodnoty Ä�asu jsou v sekundách" #: common/constants/messages.py:203 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "pracovní dny jsou oÄ�íslovány podle ISO 8601 (tj. první den je pondÄ›lí, " "formát: 1-7)" #: common/constants/messages.py:204 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "hodiny jsou oÄ�íslovány podle ISO 8601 (tj. hodiny 24h, formát: 0-23)" #: common/constants/messages.py:206 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "Celkem %(n)s uživatel:" msgstr[1] "Celkem %(n)s uživatelé:" msgstr[2] "Celkem %(n)s uživatelů:" #: common/constants/messages.py:207 #, fuzzy, python-format #| msgid "Config for %s:" msgid "Configuration for user %s:" msgstr "Nastavení pro %s:" #: common/constants/messages.py:210 msgid "Time left..." msgstr "Zbývající Ä�as..." #: common/constants/messages.py:211 msgid "Limits & Configuration" msgstr "Limity a nastavení" #: common/constants/messages.py:212 msgid "About" msgstr "O aplikaci" #: common/constants/messages.py:215 resource/client/forms/about.glade:17 msgid "Keep control of computer usage" msgstr "MÄ›jte kontrolu nad používáním poÄ�ítaÄ�e" #: common/constants/messages.py:216 msgid "Day" msgstr "Den" #: common/constants/messages.py:217 msgid "Enabled" msgstr "Povoleno" #: common/constants/messages.py:218 common/constants/messages.py:224 msgid "Limit" msgstr "Omezení" #: common/constants/messages.py:219 msgid "From" msgstr "Od" #: common/constants/messages.py:220 #, fuzzy #| msgid "from" msgid "from..." msgstr "od" #: common/constants/messages.py:221 msgid "To" msgstr "Do" #: common/constants/messages.py:222 msgid "to..." msgstr "" #: common/constants/messages.py:223 msgid "Period" msgstr "" #: common/constants/messages.py:225 msgid "Weekly" msgstr "" #: common/constants/messages.py:226 msgid "Monthly" msgstr "" #: common/constants/messages.py:227 common/constants/messages.py:229 msgid "Session type" msgstr "Typ relace" #: common/constants/messages.py:228 common/constants/messages.py:230 #, fuzzy #| msgid "Session type" msgid "session type..." msgstr "Typ relace" #: common/constants/messages.py:231 msgid "Username" msgstr "Uživatelské jméno" #: common/constants/messages.py:232 #, fuzzy #| msgid "Username" msgid "username..." msgstr "Uživatelské jméno" #: common/constants/messages.py:233 msgid "Process mask" msgstr "" #: common/constants/messages.py:234 msgid "executable mask..." msgstr "" #: common/constants/messages.py:235 msgid "Process description" msgstr "" #: common/constants/messages.py:236 msgid "process description..." msgstr "" #: common/constants/messages.py:237 msgid "Time" msgstr "" #: common/constants/messages.py:238 msgid "time..." msgstr "" #: common/constants/messages.py:239 msgid "Importance" msgstr "" #: common/constants/messages.py:240 msgid "importance..." msgstr "" #: common/constants/messages.py:243 msgid "Timekpr-nExT notification" msgstr "Oznámení Timekpr-nExT" #: common/constants/messages.py:244 #, fuzzy #| msgid "Timekpr-nExT notification" msgid "Timekpr-nExT PlayTime notification" msgstr "Oznámení Timekpr-nExT" #: common/constants/messages.py:245 msgid "Your time is not limited today" msgstr "Dnes není Ä�as omezen" #: common/constants/messages.py:246 msgid "Time allowance has changed, please note new time left!" msgstr "ÄŒasový limit se zmÄ›nil, upozorňujeme na nový zbývající Ä�as!" #: common/constants/messages.py:247 msgid "Time limit configuration has changed, please note new configuration!" msgstr "Nastavení Ä�asového limitu se zmÄ›nilo, mÄ›jte na pamÄ›ti nové hodnoty!" #: common/constants/messages.py:248 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "DoÅ¡lo k problému s pÅ™ipojením k démonu Timekpr-nExT (%%s)!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "PÅ™i komunikaci s Timekpr-nExT (%%s) je problém!" #: common/constants/messages.py:250 #, fuzzy, python-format #| msgid "Icon inititalization error (%%s)!" msgid "Icon initialization error (%%s)!" msgstr "Chyba inicializace ikony (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:252 msgid "Your time is up, you will be forcibly logged out in" msgstr "Váš Ä�as vyprÅ¡el, zaÄ�alo odhlášování" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:254 #, fuzzy #| msgid "Your time is up, your computer will be forcily shutdown in" msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Váš Ä�as vyprÅ¡el, poÄ�ítaÄ� bude vynucenÄ› vypnut" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:256 msgid "Your time is up, your session will be forcibly locked in" msgstr "Váš Ä�as vyprÅ¡el, vaÅ¡e relace bude nyní nucenÄ› uzamÄ�ena" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:258 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Váš Ä�as vyprÅ¡el, váš poÄ�ítaÄ� bude nyní nucenÄ› uspán" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:260 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s sekunda" msgstr[1] "%(n)s sekundy" msgstr[2] "%(n)s sekund" #: common/constants/messages.py:261 msgid "Internal connection error, please check log files" msgstr "Interní chyba pÅ™ipojení, zkontrolujte soubory protokolu" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:263 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Zbývá %(n)s hodina" msgstr[1] "Zbývájí %(n)s hodiny" msgstr[2] "Zbývá %(n)s hodin" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:265 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minuta" msgstr[1] "%(n)s minuty" msgstr[2] "%(n)s minut" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:267 common/constants/messages.py:269 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s sekunda" msgstr[1] "%(n)s sekundy" msgstr[2] "%(n)s sekund" #: common/constants/messages.py:269 #, fuzzy, python-format #| msgid "%(n)s second left" #| msgid_plural "%(n)s seconds left" msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s sekunda" msgstr[1] "%(n)s sekundy" msgstr[2] "%(n)s sekund" #: common/constants/messages.py:270 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "Funkci \"%%s\", která se používá k detekci neÄ�innosti, nelze aktivovat!\n" "Když je obrazovka uzamÄ�ena, nemusí se poÄ�ítat doba neÄ�innosti/neaktivity!" #: common/constants/messages.py:273 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "NEOÄŒEKÃ�VANÃ� CHYBA: %%s" #: common/constants/messages.py:274 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "CHYBA ROZBORU PARAMETRÅ® (zkontrolujte platnost parametru): %%s" #: common/constants/messages.py:275 msgid "Command FAILED: access denied" msgstr "Příkaz byl NEÚSPĚŠNÃ�: přístup zamítnut" #: common/constants/messages.py:276 msgid "Command FAILED: communication was not accepted" msgstr "Příkaz byl NEÚSPĚŠNÃ�: komunikace nebyla pÅ™ijata" #: common/constants/messages.py:277 msgid "n/a" msgstr "není známo" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "O aplikaci Timekpr-nExT" #: resource/client/forms/about.glade:16 msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" msgstr "" #: resource/client/forms/about.glade:19 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:20 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see " "file /usr/share/common-licenses/GPL-3" msgstr "" "Tento program je svobodný software: můžete jej dále šířit a/nebo upravovat v " "souladu s podmínkami GNU General Public License zveÅ™ejnÄ›né nadací Free " "Software Foundation, buÄ� verzí 3 licence, nebo (podle vaší volby) jakoukoli " "novÄ›jší verzí.\n" "\n" "Tento program je distribuován v nadÄ›ji, že bude užiteÄ�ný, ale BEZ JAKÉKOLI " "ZÃ�RUKY; bez pÅ™edpokládané záruky PRODEJNOSTI nebo VHODNOSTI PRO URÄŒITÃ� ÚČEL. " "Další podrobnosti naleznete v GNU General Public License.\n" "\n" "Spolu s tímto programem byste mÄ›li obdržet kopii GNU General Public License. " "Pokud ne, navÅ¡tivte http://www.gnu.org/licenses/. V Debianu viz soubor /usr/" "share/common-license/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:26 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "Ludek NOVAK " #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Odebrat vylouÄ�ený typ relace" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Správa Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Ikona, že?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "PozornÄ› si pÅ™eÄ�tÄ›te poznámky ;)" #: resource/client/forms/admin.glade:435 #, fuzzy #| msgid "" #| "This is the configuration app for Timekpr-nExT. It allows you to set time " #| "limits for your individual users as well as general Timekpr-nExT " #| "options.\n" #| "\n" #| "To use this application, you either have to execute it as superuser or " #| "have to be part of the timekpr group.\n" #| "Please note that the \"Timekpr-nExT Configuration\" is available in " #| "superuser (administrator) mode only!\n" #| "\n" #| "Please configure carefully: do not lock yourself out!" msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have " "to be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in " "superuser (administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Toto je konfiguraÄ�ní aplikace Timekpr-nExT. Umožňuje nakonfigurovat Ä�as pro " "vaÅ¡e uživatele a také parametry Timekpr-nExT.\n" "\n" "Chcete-li použít tuto aplikaci, musíte ji buÄ� spustit jako superuživatel, " "nebo musíte být souÄ�ástí skupiny timekpr. UvÄ›domte si prosím, že „Nastavení " "Timekpr-nExT\" je k dispozici pouze v režimu superuživatele (správce)!\n" "\n" "Prosím buÄ�te opatrní, nezablokujte se!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3016 msgid "Users related configuration" msgstr "Nastavení související s uživateli" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Uživatelské jméno:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Seznam uživatelských jmen registrovaných v systému" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Obnovit" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Obnovit konfiguraci z uloženého stavu" #: resource/client/forms/admin.glade:586 #, fuzzy #| msgid "This shows information about time left / spent" msgid "Information about time left / spent" msgstr "Informace o zbývajícím / stráveném Ä�ase" #: resource/client/forms/admin.glade:610 #, fuzzy msgid "" "Continuous time left. May span more than the current day (realtime, " "available when user is logged in)" msgstr "" "NepÅ™etržitý Ä�as zbývající uživateli, který může trvat déle než aktuální den " "(reálný Ä�as, k dispozici po pÅ™ihlášení uživatele)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Zbývající Ä�as (skuteÄ�ný):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 #: resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 #: resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 #: resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 #: resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 #: resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Formát: " #: resource/client/forms/admin.glade:641 #, fuzzy msgid "" "How long the user was inactive since last login (realtime, available when " "user is logged in)" msgstr "" "Jak dlouho byl uživatel od posledního pÅ™ihlášení neaktivní (v reálném Ä�ase, " "k dispozici pÅ™i pÅ™ihlášení uživatele)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "ÄŒas neaktivní (skuteÄ�ný):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "ÄŒas k dispozici dnes (uložený, nikoli v reálném Ä�ase)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Zbývající Ä�as (dnes):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "ÄŒas využitý dnes (uložený, nikoliv reálný Ä�as)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "ÄŒas využitý dnes:" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "ÄŒas svyužitý tento týden (uložený, nikoliv reálný Ä�as)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "ÄŒas využitý za týden:" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "ÄŒas využitý tento mÄ›síc (uložený, nikoliv reálný Ä�as)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "ÄŒas využitý za mÄ›síc:" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "" #: resource/client/forms/admin.glade:885 #, fuzzy #| msgid "Set day's time limit" msgid "today's time" msgstr "Nastavit denní limit" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "h" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "Množství minut, které je tÅ™eba upravit pro dneÅ¡ní limit" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "Množství hodin, které je tÅ™eba upravit pro dneÅ¡ní limit" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "PÅ™idat zadanou Ä�ástku (odmÄ›na)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "OdeÄ�íst zadanou Ä�ástku (pokuta)" #: resource/client/forms/admin.glade:1036 #, fuzzy #| msgid "Set this specific limit" msgid "Set this specific time limit" msgstr "Nastavit pÅ™esnÄ› stanovený limit" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "" #: resource/client/forms/admin.glade:1134 #, fuzzy #| msgid "" #| "How long user was inactive since last login (realtime, available when " #| "user is logged in)" msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Jak dlouho byl uživatel od posledního pÅ™ihlášení neaktivní (v reálném Ä�ase, " "k dispozici pÅ™i pÅ™ihlášení uživatele)" #: resource/client/forms/admin.glade:1136 #, fuzzy #| msgid "Time left (actual):" msgid "PlayTime left (actual):" msgstr "Zbývající Ä�as (skuteÄ�ný):" #: resource/client/forms/admin.glade:1150 #: resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 #, fuzzy #| msgid "Format: " msgid "Format: " msgstr "Formát: " #: resource/client/forms/admin.glade:1165 #, fuzzy #| msgid "Time available today (saved stated, not real-time)" msgid "PlayTime available today (saved stated, not real-time)" msgstr "ÄŒas k dispozici dnes (uložený, nikoli v reálném Ä�ase)" #: resource/client/forms/admin.glade:1167 #, fuzzy #| msgid "Time left (today):" msgid "PlayTime left (today):" msgstr "Zbývající Ä�as (dnes):" #: resource/client/forms/admin.glade:1196 #: resource/client/forms/admin.glade:1212 #, fuzzy #| msgid "" #| "How long user was inactive since last login (realtime, available when " #| "user is logged in)" msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Jak dlouho byl uživatel od posledního pÅ™ihlášení neaktivní (v reálném Ä�ase, " "k dispozici pÅ™i pÅ™ihlášení uživatele)" #: resource/client/forms/admin.glade:1198 #, fuzzy #| msgid "Time inactive (actual):" msgid "Running activities (actual):" msgstr "ÄŒas neaktivní (skuteÄ�ný):" #: resource/client/forms/admin.glade:1253 #, fuzzy #| msgid "Time spent today (saved stated, not real-time)" msgid "PlayTime spent today (saved stated, not real-time)" msgstr "ÄŒas využitý dnes (uložený, nikoliv reálný Ä�as)" #: resource/client/forms/admin.glade:1255 #, fuzzy #| msgid "Time spent (today):" msgid "PlayTime spent (today):" msgstr "ÄŒas využitý dnes:" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "StruÄ�né informace o využitém Ä�asu a vÅ¡em souvisejícím s řízením Ä�asu pro " "dneÅ¡ní den" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Aktuální informace" #: resource/client/forms/admin.glade:1348 #, fuzzy #| msgid "This allows you to change time limits for today" msgid "This lets you configure time limits." msgstr "Zde můžete upravit Ä�asové limity pro dneÅ¡ní den" #: resource/client/forms/admin.glade:1350 #, fuzzy #| msgid "Weekly & Monthly limits" msgid "Week day limits" msgstr "Týdenní a mÄ›síÄ�ní limity" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 #: resource/client/forms/admin.glade:1865 #: resource/client/forms/admin.glade:2265 #, fuzzy #| msgid "hr" msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 #: resource/client/forms/admin.glade:2269 #, fuzzy #| msgid "The amount of hours to be adjusted for today's limit" msgid "Choose hours to be adjusted for selected days." msgstr "Množství hodin, které je tÅ™eba upravit pro dneÅ¡ní limit" #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 #: resource/client/forms/admin.glade:1881 #: resource/client/forms/admin.glade:2281 msgid "m" msgstr "" #: resource/client/forms/admin.glade:1390 #: resource/client/forms/admin.glade:2285 #, fuzzy #| msgid "The amount of minutes to be adjusted for today's limit" msgid "Choose minutes to be adjusted for selected days." msgstr "Množství minut, které je tÅ™eba upravit pro dneÅ¡ní limit" #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:1474 #, fuzzy #| msgid "" #| "Lists day of the week and additional information about the day's limit. " #| "Please enable / disable days for the user." msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Seznam dnů v týdnu s informací o denním limitu, povolené/zakázané dny " "uživatele." #: resource/client/forms/admin.glade:1550 #, fuzzy #| msgid "" #| "Hour intervals per day available to this user.\n" #| "Please note that if the day's limit ends at 24:00 and the next day's " #| "limit starts at 00:00, then the user can work continuously past " #| "midnight.\n" #| "Please note that multiple intervals cannot be configured within the same " #| "hour. An interval can start or end or contain a specific hour, but not " #| "more than once. This is by design, not a bug." msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same " "hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Uživatel má k dispozici pÅ™edepsané intervaly hodin za den.\n" "UvÄ›domte si prosím, že den konÄ�í ve 24:00 a další den zaÄ�íná v 0:00 hodin. " "Proto může uživatel pracovat nepÅ™etržitÄ› i po půlnoci.\n" "Také vezmÄ›te na vÄ›domí, že v jedné hodinÄ› nelze nakonfigurovat více " "intervalů. Interval může zaÄ�ínat nebo konÄ�it v urÄ�ité hodinÄ›. PřípadnÄ› může " "obsahovat urÄ�itou hodinu, ale ne více než jednou což je to zámÄ›r, nikoli " "chyba." #: resource/client/forms/admin.glade:1581 msgid "Hour intervals" msgstr "Hodinové intervaly" #: resource/client/forms/admin.glade:1603 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" #: resource/client/forms/admin.glade:1620 msgid "Delete the selected time interval from the available list of intervals." msgstr "" #: resource/client/forms/admin.glade:1688 #, fuzzy #| msgid "Hour intervals" msgid "enter hour intervals" msgstr "Hodinové intervaly" #: resource/client/forms/admin.glade:1742 msgid "verify" msgstr "" #: resource/client/forms/admin.glade:1746 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" #: resource/client/forms/admin.glade:1821 #, fuzzy #| msgid "Weekly & Monthly limits" msgid "Weekly and monthly limits" msgstr "Týdenní a mÄ›síÄ�ní limity" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1849 msgid "d" msgstr "" #: resource/client/forms/admin.glade:1853 msgid "Choose days to be adjusted for selected period." msgstr "" #: resource/client/forms/admin.glade:1869 #, fuzzy #| msgid "The amount of hours to be adjusted for today's limit" msgid "Choose hours to be adjusted for selected period." msgstr "Množství hodin, které je tÅ™eba upravit pro dneÅ¡ní limit" #: resource/client/forms/admin.glade:1885 #, fuzzy #| msgid "The amount of minutes to be adjusted for today's limit" msgid "Choose minutes to be adjusted for selected period." msgstr "Množství minut, které je tÅ™eba upravit pro dneÅ¡ní limit" #: resource/client/forms/admin.glade:1913 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or " "hours or minutes) for the selected period." msgstr "" #: resource/client/forms/admin.glade:1927 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or " "hours or minutes) for the selected period." msgstr "" #: resource/client/forms/admin.glade:1976 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit " "configuration." msgstr "" #: resource/client/forms/admin.glade:2016 msgid "Apply daily limits" msgstr "Použít denní limity" #: resource/client/forms/admin.glade:2021 #, fuzzy #| msgid "Apply all changes made in this page" msgid "Apply limit all changes made in this page" msgstr "Použít vÅ¡echny zmÄ›ny provedené na této stránce" #: resource/client/forms/admin.glade:2042 msgid "Daily limit configuration for all week days" msgstr "Nastavení denního limitu pro každý den v týdnu" #: resource/client/forms/admin.glade:2043 #, fuzzy #| msgid "Limits & Configuration" msgid "Limit configuration" msgstr "Limity a nastavení" #: resource/client/forms/admin.glade:2064 msgid "Settings for PlayTime activities" msgstr "" #: resource/client/forms/admin.glade:2084 msgid "PlayTime options" msgstr "" #: resource/client/forms/admin.glade:2108 #: resource/client/forms/admin.glade:2147 msgid "Enable PlayTime for selected user" msgstr "" #: resource/client/forms/admin.glade:2110 msgid "Enable PlayTime:" msgstr "" #: resource/client/forms/admin.glade:2124 #: resource/client/forms/admin.glade:2161 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" #: resource/client/forms/admin.glade:2132 msgid "Enable PlayTime override:" msgstr "" #: resource/client/forms/admin.glade:2180 #: resource/client/forms/admin.glade:2201 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted " "(\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted " "towards PlayTime limits, otherwise applications in PlayTime activity list " "will be terminated as soon as they are started during unaccounted (\"∞\") " "time intervals." msgstr "" #: resource/client/forms/admin.glade:2186 msgid "Allowed during \"∞\" intervals:" msgstr "" #: resource/client/forms/admin.glade:2245 #, fuzzy #| msgid "This allows you to change time limits for today" msgid "This lets you configure PlayTime limits." msgstr "Zde můžete upravit Ä�asové limity pro dneÅ¡ní den" #: resource/client/forms/admin.glade:2247 #: resource/client/forms/client.glade:1253 #, fuzzy #| msgid "Daily limits" msgid "PlayTime limits" msgstr "Denní limity" #: resource/client/forms/admin.glade:2305 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) " "for selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:2322 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) " "for selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:2374 #, fuzzy #| msgid "" #| "Lists day of the week and additional information about the day's limit. " #| "Please enable / disable days for the user." msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for " "PlayTime activities." msgstr "" "Seznam dnů v týdnu s informací o denním limitu, povolené/zakázané dny " "uživatele." #: resource/client/forms/admin.glade:2423 #, fuzzy #| msgid "Time inactive:" msgid "PlayTime activities" msgstr "Neaktivní Ä�as:" #: resource/client/forms/admin.glade:2445 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity " "list directly." msgstr "" #: resource/client/forms/admin.glade:2462 msgid "Remove selected entry from PlayTime activities." msgstr "" #: resource/client/forms/admin.glade:2506 msgid "" "Please specify a list of full process (executable) names without path as " "case sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" #: resource/client/forms/admin.glade:2546 #, fuzzy #| msgid "Users related configuration" msgid "Apply PlayTime configuration" msgstr "Nastavení související s uživateli" #: resource/client/forms/admin.glade:2550 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" #: resource/client/forms/admin.glade:2569 #, fuzzy #| msgid "Timekpr-nExT Configuration" msgid "PlayTime configuration" msgstr "Nastavení Timekpr-nExT" #: resource/client/forms/admin.glade:2594 msgid "Additional configuration options" msgstr "Další možnosti konfigurace" #: resource/client/forms/admin.glade:2629 #: resource/client/forms/admin.glade:2652 #, fuzzy #| msgid "" #| "Select whether inactive session time is counted. If this is unchecked, " #| "time spent in console (not terminal emulator) login sessions and while " #| "the screen is locked is NOT taken into account. This varies among desktop " #| "environments." msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This " "varies among desktop environments." msgstr "" "Vyberte, zda se má poÄ�ítat Ä�as pro neaktivní relace. Pokud toto není " "zaÅ¡krtnuto, NEBUDE brána v úvahu doba použití v konzoli (nikoli v terminálu) " "a pÅ™i uzamÄ�ené obrazovce (toto se velmi liší DE od DE)" #: resource/client/forms/admin.glade:2633 msgid "Track inactive sessions:" msgstr "Nastavit neaktivní relace:" #: resource/client/forms/admin.glade:2669 #: resource/client/forms/admin.glade:2692 #, fuzzy #| msgid "" #| "Select whether to show Timekpr-next's padlock icon and notifications to " #| "the user.\n" #| "Please note that unchecking this will disable showing all information and " #| "notifications to the user!" msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that unchecking this will disable showing all information and " "notifications to the user!" msgstr "" "Vyberte, zda se má uživateli zobrazit ikona visacího zámku a upozornÄ›ní " "Timekpr-next.\n" "Pamatujte, že odÅ¡krtnutím této možnosti zakážete zobrazování vÅ¡ech informací " "a upozornÄ›ní uživateli!" #: resource/client/forms/admin.glade:2673 msgid "Hide icon and notifications:" msgstr "Skrýt ikonu a upozornÄ›ní:" #: resource/client/forms/admin.glade:2744 #, fuzzy #| msgid "" #| "Select a restriction / lockout type for the user.\n" #| "NOTE: please be very careful, think ahead and read every options " #| "description when changing this setting from default value!" msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Vyberte pro uživatele typ omezení / blokování.\n" "POZNÃ�MKA: buÄ�te velmi opatrní, myslete dopÅ™edu a pÅ™i zmÄ›nÄ› tohoto nastavení " "z výchozí hodnoty si pÅ™eÄ�tÄ›te popis vÅ¡ech možností!" #: resource/client/forms/admin.glade:2748 msgid "Restriction / lockout type:" msgstr "Typ omezení / blokování:" #: resource/client/forms/admin.glade:2770 msgid "terminate sessions" msgstr "ukonÄ�it relace" #: resource/client/forms/admin.glade:2774 #, fuzzy #| msgid "" #| "When time ends, user sessions will be terminated.\n" #| "This option is a restriction!\n" #| "This is the default option and most likely is the one you need!" msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Po uplynutí Ä�asu budou relace uživatelů ukonÄ�eny.\n" "Tato možnost je omezení!\n" "Toto je výchozí možnost a nejpravdÄ›podobnÄ›ji ta, kterou potÅ™ebujete!" #: resource/client/forms/admin.glade:2792 msgid "shutdown computer" msgstr "Vypnout poÄ�ítaÄ�" #: resource/client/forms/admin.glade:2796 #, fuzzy #| msgid "" #| "When time ends, computer will be shut down.\n" #| "This option is a restriction!\n" #| "Please evaluate whether you need this type of restriction!" msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Po uplynutí Ä�asu bude poÄ�ítaÄ� vypnut.\n" "Tato možnost je omezení!\n" "VyhodnoÅ¥te, zda tento typ omezení potÅ™ebujete!" #: resource/client/forms/admin.glade:2814 #, fuzzy msgid "suspend computer" msgstr "pozastavit poÄ�ítaÄ�" #: resource/client/forms/admin.glade:2818 #, fuzzy msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control " "purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be " "locked and put to sleep again after some time." msgstr "" "Po uplynutí Ä�asu bude poÄ�ítaÄ� pozastaven (uspán).\n" "Tato možnost není omezením a je vhodnÄ›jší pro úÄ�ely sebeovládání.\n" "Když se probudíte, když jeÅ¡tÄ› nezbývá Ä�as, obrazovka poÄ�ítaÄ�e se uzamkne a " "po nÄ›jaké dobÄ› se znovu uspí." #: resource/client/forms/admin.glade:2836 #, fuzzy msgid "suspend / wakeup computer" msgstr "pozastavit / probudit poÄ�ítaÄ�" #: resource/client/forms/admin.glade:2840 #, fuzzy msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken " "up at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control " "purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be " "locked and put to sleep again after some time." msgstr "" "Po uplynutí Ä�asu bude poÄ�ítaÄ� pozastaven (uspán) a probuden na zaÄ�átku " "dalšího dostupného Ä�asového intervalu pro uživatele.\n" "Tato možnost není omezením a je vhodnÄ›jší pro úÄ�ely sebeovládání.\n" "Když se probudíte, když jeÅ¡tÄ› nezbývá Ä�as, obrazovka poÄ�ítaÄ�e se uzamkne a " "po nÄ›jaké dobÄ› se znovu uspí." #: resource/client/forms/admin.glade:2858 msgid "lock screen" msgstr "uzamknutí obrazovky" #: resource/client/forms/admin.glade:2862 #, fuzzy #| msgid "" #| "When time ends, computer screen will be locked.\n" #| "This option is not a restriction and is more suited for self control " #| "purposes." msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control " "purposes." msgstr "" "Po uplynutí Ä�asu bude obrazovka poÄ�ítaÄ�e uzamÄ�ena.\n" "Tato možnost není omezením a je vhodnÄ›jší pro úÄ�ely ovládání relace." #: resource/client/forms/admin.glade:2893 #, fuzzy msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" "Vyberte Ä�asový interval, kdy lze poÄ�ítaÄ� automaticky probudit.\n" "Upozorňujeme, že tato možnost je úÄ�inná, pouze pokud je probuzení pomocí " "hodin RealTime podporováno a povoleno v systému BIOS / UEFI!" #: resource/client/forms/admin.glade:2897 msgid "Wakeup hour interval:" msgstr "Interval hodin pro probuzení:" #: resource/client/forms/admin.glade:2909 #, fuzzy msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" "Zadejte hodinu zahájení funkce automatického probuzení.\n" "Upozorňujeme, že tato možnost je úÄ�inná, pouze pokud je probuzení pomocí " "hodin RealTime podporováno a povoleno v systému BIOS / UEFI!" #: resource/client/forms/admin.glade:2928 #, fuzzy msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" "Zadejte koneÄ�nou hodinu pro funkci automatického probuzení.\n" "Upozorňujeme, že tato možnost je úÄ�inná, pouze pokud je probuzení pomocí " "hodin RealTime podporováno a povoleno v systému BIOS / UEFI!" #: resource/client/forms/admin.glade:2966 #, fuzzy #| msgid "Configuration" msgid "Apply configuration" msgstr "Nastavení" #: resource/client/forms/admin.glade:2970 #, fuzzy #| msgid "Additional configuration options" msgid "Apply additional configuration changes on this page" msgstr "Další možnosti konfigurace" #: resource/client/forms/admin.glade:2989 msgid "Additional configuration" msgstr "Další konfigurace" #: resource/client/forms/admin.glade:2990 #: resource/client/forms/admin.glade:3661 msgid "Additional options" msgstr "Další možnosti" #: resource/client/forms/admin.glade:3017 msgid "User Configuration" msgstr "Nastavení uživatele" #: resource/client/forms/admin.glade:3027 #, fuzzy #| msgid "Timekpr-nExT Configuration" msgid "Timekpr-nExT related configuration" msgstr "Nastavení Timekpr-nExT" #: resource/client/forms/admin.glade:3054 msgid "Control Timekpr-nExT Settings" msgstr "Nastavení ovládání Timekpr-nExT" #: resource/client/forms/admin.glade:3081 #: resource/client/forms/admin.glade:3233 #, fuzzy #| msgid "" #| "Timekpr-nExT log level. Please do not change this unless asked. You " #| "likely won't find anything pretty in the log files.\n" #| "1 - standard, 2 - debug, 3 - extra debug" msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Úroveň protokolu Timekpr-nExT. Neměňte to, pokud to nebude požadováno " "(pravdÄ›podobnÄ› v souborech protokolu nenajdete nic hezkého)\n" "1 - standard, 2 - ladit, 3 - ladit podrobnÄ›ji" #: resource/client/forms/admin.glade:3101 #: resource/client/forms/admin.glade:3149 #, fuzzy #| msgid "" #| "Specify session polling time granularity (how often user sessions and " #| "activity are checked).\n" #| "3 - 5 seconds are optimal, don't change this if unsure." msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "UrÄ�it Ä�etnost mezi dotazováním relace (v jakém intervalu se budou dotazovat " "uživatelské relace a aktivity).\n" "Nejlepší nastavení je 3 - 5 sekund, neměňte nastavení pokud si nejste jisti." #: resource/client/forms/admin.glade:3105 msgid "Poll interval" msgstr "Interval dotazování" #: resource/client/forms/admin.glade:3117 #: resource/client/forms/admin.glade:3220 #, fuzzy #| msgid "" #| "Specify the time in seconds when Timekpr-nExT starts continuous real-time " #| "countdown before terminating the session" msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "UrÄ�ete Ä�as v sekundách, kdy Timekpr-nExT zahájí nepÅ™etržité odpoÄ�ítávání v " "reálném Ä�ase pÅ™ed ukonÄ�ením relace" #: resource/client/forms/admin.glade:3133 #: resource/client/forms/admin.glade:3183 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a " "frequency at which user state is saved to disk for permanent storage." msgstr "" #: resource/client/forms/admin.glade:3137 msgid "Save time" msgstr "UÅ¡etÅ™ený Ä�as" #: resource/client/forms/admin.glade:3167 #: resource/client/forms/admin.glade:3202 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can " "be done to prevent it." msgstr "" #: resource/client/forms/admin.glade:3171 msgid "Termination time" msgstr "ÄŒas do odhlášení" #: resource/client/forms/admin.glade:3222 #, fuzzy #| msgid "Termination time" msgid "Countdown time" msgstr "ÄŒas do odhlášení" #: resource/client/forms/admin.glade:3239 msgid "Log level" msgstr "Úroveň protokolu" #: resource/client/forms/admin.glade:3250 #: resource/client/forms/admin.glade:3266 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user " "in client application!" msgstr "" #: resource/client/forms/admin.glade:3254 #, fuzzy #| msgid "Show all notifications" msgid "Final notification" msgstr "Zobrazit vÅ¡echna oznámení" #: resource/client/forms/admin.glade:3308 msgid "Control Timekpr-nExT tracking items" msgstr "Ovládáné položky Timekpr-nExT" #: resource/client/forms/admin.glade:3341 msgid "Tracked Sessions" msgstr "Sledované relace" #: resource/client/forms/admin.glade:3364 msgid "Add tracked session type to the list" msgstr "PÅ™idat sledovaný typ relace do seznamu" #: resource/client/forms/admin.glade:3379 msgid "Remove tracked session type from the list" msgstr "Odebrat sledovaný typ relace ze seznamu" #: resource/client/forms/admin.glade:3408 #, fuzzy #| msgid "" #| "List of session types to be tracked.\n" #| "Please, do not change or experiment with this unless you actually (not " #| "wishfully) know what you are doing." msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Seznam typů relací, které mají být sledovány.\n" "Prosím, neměňte ani s tím neexperimentujte, pokud skuteÄ�nÄ› nevíte, co dÄ›láte." #: resource/client/forms/admin.glade:3442 msgid "Excluded Sessions" msgstr "VylouÄ�ené relace" #: resource/client/forms/admin.glade:3465 msgid "Add an excluded session type to the list" msgstr "PÅ™idat vylouÄ�ený typ relace do seznamu" #: resource/client/forms/admin.glade:3480 msgid "Remove an excluded session type from the list" msgstr "Odebrat vylouÄ�ený typ relace ze seznamu" #: resource/client/forms/admin.glade:3509 #, fuzzy #| msgid "" #| "List of sessions to be excluded from tracking.\n" #| "Please, do not change or experiment with this unless you actually (not " #| "wishfully) know what you are doing." msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Seznam relací, které mají být ze sledování vylouÄ�eny.\n" "Prosím, neměňte ani s tím neexperimentujte, pokud skuteÄ�nÄ› nevíte, co dÄ›láte." #: resource/client/forms/admin.glade:3543 msgid "Excluded Users" msgstr "Vyjmutí uživatelé" #: resource/client/forms/admin.glade:3566 msgid "Add a user to the exclusion list" msgstr "PÅ™idat uživatele do seznamu vylouÄ�ených" #: resource/client/forms/admin.glade:3581 msgid "Remove a user from the exclusion list" msgstr "Odstranit uživatele ze seznamu vylouÄ�ených" #: resource/client/forms/admin.glade:3610 #, fuzzy #| msgid "" #| "List of users excluded from tracking.\n" #| "Please specify actual usernames, not real names here. For example, " #| "\"jsmith\", not \"John Smith\"." msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, " "\"jsmith\", not \"John Smith\"." msgstr "" "Seznam uživatelů vylouÄ�ených ze sledování.\n" "Zde prosím zadejte uživatelská jména, nikoli skuteÄ�ná jména \n" "(napÅ™. uveÄ�te \"novakj\", ne \"Jan Novák\")" #: resource/client/forms/admin.glade:3688 #: resource/client/forms/admin.glade:3707 #: resource/client/forms/admin.glade:3743 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" #: resource/client/forms/admin.glade:3692 msgid "PlayTime enabled:" msgstr "" #: resource/client/forms/admin.glade:3722 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" #: resource/client/forms/admin.glade:3728 msgid "Enhanced activity monitor:" msgstr "" #: resource/client/forms/admin.glade:3777 #, fuzzy #| msgid "Apply Timekpr-nExT setings" msgid "Apply Timekpr-nExT settings" msgstr "Použít nastavení Timekpr-nExT" #: resource/client/forms/admin.glade:3782 msgid "Apply all Timekpr-nExT settings at once" msgstr "Použít najednou vÅ¡echna nastavení Timekpr-nExT" #: resource/client/forms/admin.glade:3802 msgid "Timekpr-nExT Administration Configuration" msgstr "Nastavení programu Timekpr-nExT" #: resource/client/forms/admin.glade:3803 msgid "Timekpr-nExT Configuration" msgstr "Nastavení Timekpr-nExT" #: resource/client/forms/admin.glade:3832 #: resource/client/forms/admin.glade:3849 msgid "Status of Timekpr-nExT admin client" msgstr "Stav správce Timekpr-nExT" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 #, fuzzy #| msgid "Configuration" msgid "Information" msgstr "Nastavení" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 #, fuzzy #| msgid "Warning time" msgid "Warning" msgstr "ÄŒas varování" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Klientská Ä�ást Timekpr-nExT" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Stav klienta Timekpr-nExT" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Uložit vÅ¡echny zmÄ›ny" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Zavřít okno" #: resource/client/forms/client.glade:297 #: resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Aktuální uživatelské jméno" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Aktuální statistiky" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "ÄŒas využitý touto relací nebo od restartování Timekpr-nExT" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "ÄŒas využitý relací:" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "ÄŒas neaktivní využitý touto relací nebo od restartování Timekpr-nExT" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Neaktivní Ä�as:" #: resource/client/forms/client.glade:469 #, fuzzy msgid "Continuous time left to you. May span more than the current day." msgstr "Zbývající nepÅ™etržitý Ä�as, jeho délka může být delší než aktuální den." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Zbývající nepÅ™etržitý Ä�as:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Celkový dneÅ¡ní Ä�as, který je k dispozici do konce dne" #: resource/client/forms/client.glade:489 #: resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "ÄŒas zbývající dnes:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Toto jsou limity jednotlivých dnů, které máte k dispozici" #: resource/client/forms/client.glade:573 #: resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Limity dnů" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervaly" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Denní limity" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Další statistiky" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "ÄŒas využitý v tomto týdnu" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "ÄŒas využitý v tomto mÄ›síci" #: resource/client/forms/client.glade:755 #, fuzzy #| msgid "" #| "Select whether inactive session time is counted. If this is unchecked, " #| "time spent in console (not terminal emulator) login sessions and while " #| "the screen is locked is NOT taken into account. This varies among desktop " #| "environments." msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Vyberte, zda se má poÄ�ítat Ä�as pro neaktivní relace. Pokud toto není " "zaÅ¡krtnuto, NEBUDE brána v úvahu doba použití v konzoli (nikoli v terminálu) " "a pÅ™i uzamÄ�ené obrazovce (toto se velmi liší DE od DE)" #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Sledovat neaktivní:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen " "is locked is NOT taken into account. This varies among desktop environments." msgstr "" "Vyberte, zda se má poÄ�ítat Ä�as pro neaktivní relace. Pokud toto není " "zaÅ¡krtnuto, NEBUDE brána v úvahu doba použití v konzoli (nikoli v terminálu) " "a pÅ™i uzamÄ�ené obrazovce (toto se velmi liší DE od DE)" #: resource/client/forms/client.glade:820 #: resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Ostatní limity" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Týdenní Ä�asový limit, který máte k dispozici" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "ÄŒasový limit za týden:" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "MÄ›síÄ�ní Ä�asový limit. který máte k dispozici" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "ÄŒasový limit za mÄ›síc:" #: resource/client/forms/client.glade:948 #, fuzzy #| msgid "Current statistics" msgid "Current PlayTime statistics" msgstr "Aktuální statistiky" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "" #: resource/client/forms/client.glade:998 #, fuzzy #| msgid "Time spent (today):" msgid "Total PlayTime spent today" msgstr "ÄŒas využitý dnes:" #: resource/client/forms/client.glade:1000 #, fuzzy #| msgid "Time spent (today):" msgid "Time spent today:" msgstr "ÄŒas využitý dnes:" #: resource/client/forms/client.glade:1027 #: resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" #: resource/client/forms/client.glade:1046 #, fuzzy #| msgid "Time limit (week):" msgid "Time limit override:" msgstr "ÄŒasový limit za týden:" #: resource/client/forms/client.glade:1060 #: resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "" #: resource/client/forms/client.glade:1086 #: resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "" #: resource/client/forms/client.glade:1148 #, fuzzy #| msgid "These are days and limits that available to You" msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "Toto jsou limity jednotlivých dnů, které máte k dispozici" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open " "until dismissed, however this behaviour highly depends on Desktop " "Environment in use" msgstr "" #: resource/client/forms/client.glade:1324 #, fuzzy #| msgid "Additional configuration" msgid "Notification configuration" msgstr "Další konfigurace" #: resource/client/forms/client.glade:1346 #, fuzzy #| msgid "Add tracked session type to the list" msgid "Add new notification threshold to the list" msgstr "PÅ™idat sledovaný typ relace do seznamu" #: resource/client/forms/client.glade:1361 #, fuzzy #| msgid "Remove tracked session type from the list" msgid "Remove notification threshold from the list" msgstr "Odebrat sledovaný typ relace ze seznamu" #: resource/client/forms/client.glade:1410 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open " "until dismissed, however this behaviour highly depends on Desktop " "Environment in use" msgstr "" #: resource/client/forms/client.glade:1442 #, fuzzy #| msgid "Timekpr-nExT Administration Configuration" msgid "PlayTime notification configuration" msgstr "Nastavení programu Timekpr-nExT" #: resource/client/forms/client.glade:1464 msgid "Add new PlayTime notification threshold to the list" msgstr "" #: resource/client/forms/client.glade:1479 #, fuzzy #| msgid "Remove tracked session type from the list" msgid "Remove PlayTime notification threshold from the list" msgstr "Odebrat sledovaný typ relace ze seznamu" #: resource/client/forms/client.glade:1538 #, fuzzy #| msgid "Show all notifications" msgid "Notifications" msgstr "Zobrazit vÅ¡echna oznámení" #: resource/client/forms/client.glade:1562 #, fuzzy #| msgid "" #| "Select whether to use speech notifications, if available. You may be able " #| "to make speech notifications available by installing package \"python3-" #| "espeak\"." msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Vyberte, zda se mají používat hlasová oznámení (nejsou-li k dispozici, bude " "volba Å¡edá). Pokud potÅ™ebujete použít hlasová oznámení, nainstalujte prosím " "balíÄ�ek \"python3-espeak\" nebo \"python3-espeak-ng\"." #: resource/client/forms/client.glade:1572 msgid "Use speech notifications" msgstr "Použít hlasová oznámení" #: resource/client/forms/client.glade:1591 #: resource/client/forms/client.glade:1613 #, fuzzy #| msgid "" #| "This sets the logging level. Please do not change this unless you know " #| "what you're doing." msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Zde nastavíte úroveň protokolování (prosím pokud nevíte co dÄ›láte, neměňte " "nastavení)" #: resource/client/forms/client.glade:1617 msgid "Logging level" msgstr "Úroveň protokolování" #: resource/client/forms/client.glade:1639 msgid "" "Specify whether to show a notification when limit configurations or " "allowance changes" msgstr "" "UrÄ�ete, zda se mají zobrazit oznámení, když se zmÄ›ní konfigurace limitů nebo " "povolení" #: resource/client/forms/client.glade:1647 msgid "Show limit changes" msgstr "Zobrazit zmÄ›ny limitu" #: resource/client/forms/client.glade:1663 #, fuzzy #| msgid "" #| "Specify whether to show all notifications. If unchecked, then only " #| "important ones are shown" msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "UrÄ�ete, zda se mají zobrazit vÅ¡echna oznámení. Pokud není zaÅ¡krtnuto, " "zobrazí se pouze důležité" #: resource/client/forms/client.glade:1673 msgid "Show all notifications" msgstr "Zobrazit vÅ¡echna oznámení" #: resource/client/forms/client.glade:1689 #, fuzzy #| msgid "" #| "Specify whether to show seconds in notification area. Some desktop " #| "environments, like KDE5, do not support text besides notification icons." msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides " "notification icons." msgstr "" "UrÄ�ete, zda se mají zobrazovat sekundy v oznamovací oblasti (nÄ›které DE, " "například KDE5, nepodporují text kromÄ› oznamovacích ikon)" #: resource/client/forms/client.glade:1699 msgid "Show seconds in notification area" msgstr "Zobrazit sekundy v oznamovací oblasti" #: resource/client/forms/client.glade:1718 #: resource/client/forms/client.glade:1742 #, fuzzy msgid "" "This sets how long a notification is shown for regular notifications about " "time left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, " "in which case this setting will not have any effect on notification." msgstr "" "Tím se nastavuje, jak dlouho se bude zobrazovat oznámení pro upozornÄ›ní na " "zbývající Ä�as a zmÄ›ny konfigurace.\n" "Hodnota je zadána v sekundách, hodnota 0 znamená zobrazit, dokud není " "zruÅ¡ena (nedoporuÄ�uje se pro běžné oznámení).\n" "Upozorňujeme, že prostÅ™edí, které používáte, může pÅ™epsat Ä�asový limit, což " "znamená, že toto nastavení nebude mít žádný vliv na oznámení." #: resource/client/forms/client.glade:1749 msgid "Notification timeout (sec)" msgstr "ÄŒasový limit oznámení (s)" #: resource/client/forms/client.glade:1774 #: resource/client/forms/client.glade:1799 #, fuzzy msgid "" "This sets how long a notification is shown for \"Critical\" notifications " "about time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, " "in which case this setting will not have any effect on notification." msgstr "" "Toto nastavuje, jak dlouho se bude zobrazovat oznámení pro kritická oznámení " "o zbývajícím Ä�asu (když ikona zÄ�ervená).\n" "Hodnota je zadána v sekundách, hodnota 0 znamená zobrazit, dokud není " "odmítnuta.\n" "Upozorňujeme, že prostÅ™edí, které používáte, může pÅ™epsat Ä�asový limit, což " "znamená, že toto nastavení nebude mít žádný vliv na oznámení." #: resource/client/forms/client.glade:1806 msgid "Critical notification timeout (sec)" msgstr "ÄŒasový limit kritického oznámení (s)" #: resource/client/forms/client.glade:1828 #, fuzzy msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce " "a new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Vyberte, zda chcete použít zvukové „pípnutí“ (krátký zvukový signál) k " "oznaÄ�ení nového oznámení od Timekpr-nExT. Toto funguje pouze pro aktivovaná " "oznámení.\n" "Pokud nastavení nelze upravovat, vaÅ¡e prostÅ™edí neinvertuje podporu " "zvukového upozornÄ›ní." #: resource/client/forms/client.glade:1840 msgid "Use sound \"bell\" for notifications" msgstr "K upozornÄ›ní použijte zvukový signál" #: resource/client/forms/client.glade:1860 msgid "Configuration" msgstr "Nastavení" #, fuzzy #~| msgid "" #~| "Copyright (c) 2018-2020 Eduards Bezverhijs\n" #~| "Super tester: Rinalds Dobelis\n" #~| "Beta tester: SanskritFritz" #~ msgid "" #~ "Copyright (c) 2018-2020 Eduards Bezverhijs\n" #~ "Main test (ex): Rinalds Dobelis\n" #~ "Beta test: SanskritFritz" #~ msgstr "" #~ "Copyright (c) 2018-2020 Eduards Bezverhijs\n" #~ "Super tester: Rinalds Dobelis\n" #~ "Beta tester: SanskritFritz" #~ msgid "00:00:00:00" #~ msgstr "00:00:00:00" #~ msgid "Amount:" #~ msgstr "Úroveň:" #~ msgid "Add" #~ msgstr "PÅ™idat" #~ msgid "Subtract" #~ msgstr "OdeÄ�íst" #~ msgid "Set" #~ msgstr "Zadat" #~ msgid "Configure time limits for week days" #~ msgstr "Nastavit Ä�asové limity pro dny v týdnu" #~ msgid "Set the number of hours to limit available time for particular day" #~ msgstr "" #~ "Nastavte poÄ�et hodin, abyste omezili Ä�as, který je k dispozici pro " #~ "konkrétní den" #~ msgid "" #~ "Set hours and minutes at this user's disposal for this particular day. " #~ "Don't forget to hit the button!" #~ msgstr "" #~ "Nastavit urÄ�ené hodiny a minuty pro konkrétní den, které má uživatel k " #~ "dispozici (nezapomeňte stisknout tlaÄ�ítko )" #~ msgid "Manage intervals for the day" #~ msgstr "Stanovit intervaly pro daný den" #~ msgid "Specify START minute of the allowed hour interval" #~ msgstr "UrÄ�ete minutu ZAÄŒÃ�TKU povoleného Ä�asového intervalu" #~ msgid "Specify START hour of the allowed hour interval" #~ msgstr "UrÄ�ete hodinu ZAÄŒÃ�TKU povoleného Ä�asového intervalu" #~ msgid "to" #~ msgstr "do" #~ msgid "Remove" #~ msgstr "Odebrat" #~ msgid "" #~ "Remove selected interval from the list. Do not forget to hit the " #~ "button!" #~ msgstr "" #~ "Odstranit vybraný interval ze seznamu (nezapomeňte stisknout tlaÄ�ítko " #~ ")" #~ msgid "" #~ "Add specified hour interval to the list. Do not forget to hit the " #~ "button!" #~ msgstr "" #~ "PÅ™idat zadaný hodinový interval do seznamu (nezapomeňte stisknout " #~ "tlaÄ�ítko )" #~ msgid "Specify the END hour of the allowed hour interval" #~ msgstr "UrÄ�ete hodinu KONCE povoleného Ä�asového intervalu" #~ msgid "Specify the END minute of the allowed hour interval" #~ msgstr "UrÄ�ete minutu KONCE povoleného Ä�asového intervalu" #~ msgid "Time limit for the month" #~ msgstr "MÄ›síÄ�ní Ä�asový limit" #~ msgid "Time limit (month)" #~ msgstr "ÄŒasový limit za mÄ›síc:" #~ msgid "Time limit for the month is enabled" #~ msgstr "Povolit mÄ›síÄ�ní Ä�asový limit" #~ msgid "Time limit for the week" #~ msgstr "Týdenní Ä�asový limit" #~ msgid "Time limit (week)" #~ msgstr "ÄŒasový limit za týden" #~ msgid "day" #~ msgstr "den" #~ msgid "Week limit (days part)" #~ msgstr "Rozsah týdenního limitu (výbÄ›r dnů)" #~ msgid "Week limit (hours part)" #~ msgstr "Rozsah týdeního limitu (výbÄ›r hodin)" #~ msgid "Week limit (minutes part)" #~ msgstr "Rozsah týdeního limitu (výbÄ›r minut)" #~ msgid "Month limit (days part)" #~ msgstr "Rozsah mÄ›síÄ�ního limitu (výbÄ›r dnů)" #~ msgid "Month limit (hours part)" #~ msgstr "Rozsah mÄ›síÄ�ního limitu (výbÄ›r hodin)" #~ msgid "Month limit (minutes part)" #~ msgstr "Rozsah mÄ›síÄ�ního limitu (výbÄ›r minut)" #~ msgid "This allows you to set up weekly and monthly limits" #~ msgstr "Zde můžete nastavit týdenní a mÄ›síÄ�ní limity" #~ msgid "Apply" #~ msgstr "Použít" #~ msgid "Apply weekly and monthly limits" #~ msgstr "Použt týdenní a mÄ›síÄ�ní limity" #~ msgid "Weekly and monthly limit configuration" #~ msgstr "Nastavení týdenních a mÄ›síÄ�ních limitů" #~ msgid "Set track inactive sessions" #~ msgstr "Nastavit neaktivní relace" #~ msgid "Set preference for showing icon to user" #~ msgstr "Nastavit pÅ™edvolbu zobrazování ikony uživateli" #~ msgid "Set restriction / lockout type" #~ msgstr "Nastavit typ omezení / blokování" #~ msgid "This specifies the frequency with which actual user state is saved" #~ msgstr "UrÄ�ete Ä�asový interval, ve kterém je uložen skuteÄ�ný stav uživatele" #~ msgid "" #~ "Number of seconds before terminating user sessions. After this is " #~ "reached, the user's session will be terminated / locked, and nothing can " #~ "be done to prevent it.\n" #~ "Adding time does not help in this case. Do that before reaching this " #~ "point..." #~ msgstr "" #~ "PoÄ�et sekund od ukonÄ�ení po odhlášení uživatelské relace. Po dosažení " #~ "Ä�asového limitu zaÄ�ne odpoÄ�et, následnÄ› bude Ä�innost uživatele ukonÄ�ena, " #~ "odhlášení nelze zabránit.\n" #~ "PÅ™idání Ä�asu v tomto případÄ› nepomůže. ÄŒas pÅ™idejte pÅ™ed dosažením tohoto " #~ "bodu ..." #~ msgid "Enter session type to be tracked" #~ msgstr "Zadejte typ relace, kterou chcete sledovat" #~ msgid "Enter session type to be excluded from tracking" #~ msgstr "Zadejte typ relace, která má být ze sledování vylouÄ�ena" #~ msgid "Enter username to be excluded from tracking" #~ msgstr "Zadejte uživatelské jméno, které má být ze sledování vylouÄ�eno" #~ msgid "This shows the time periods that are available for your use" #~ msgstr "Zobrazit Ä�asové intervaly, které jsou k dispozici pro použití" #~ msgid "" #~ "Specify whether to show seconds in notification area (some DE, like KDE5, " #~ "do not support text besides notification icons)" #~ msgstr "" #~ "UrÄ�ete, zda se mají zobrazovat sekundy v oznamovací oblasti (nÄ›které DE, " #~ "například KDE5, nepodporují text kromÄ› oznamovacích ikon)" #~ msgid "Control sessions types list is not correct and can not be set" #~ msgstr "Seznam typů kontrolních relací není správný a nelze jej nastavit" #~ msgid "Excluded session types list is not correct and can not be set" #~ msgstr "Seznam vylouÄ�ených typů relací není správný a nelze jej nastavit" #~ msgid "Excluded user list is not correct and can not be set" #~ msgstr "Seznam vylouÄ�ených uživatelů není správný a nelze jej nastavit" #, python-format #~ msgid "Final warning time \"%%s\" is not correct and can not be set" #~ msgstr "ÄŒas poslední výstrahy \"%%s\" není správný a nelze jej nastavit" #~ msgid "" #~ "Select whether to use speech notifications (if not available, this will " #~ "be greyed out). If usage of speech is very much needed, please install " #~ "python3-espeak package" #~ msgstr "" #~ "Vyberte, zda se mají používat hlasová oznámení (nejsou-li k dispozici, " #~ "bude volba Å¡edá). Pokud potÅ™ebujete použít hlasová oznámení, nainstalujte " #~ "prosím balíÄ�ek python3-espeak" #~ msgid "" #~ "Specify whether to show notification when limit configurations or " #~ "allowance changes" #~ msgstr "" #~ "UrÄ�ete, zda se mají zobrazit oznámení, když se zmÄ›ní konfigurace limitů " #~ "nebo povolení" #~ msgid "Time limit for month available to You" #~ msgstr "MÄ›síÄ�ní Ä�asový limit. který máte k dispozici" #~ msgid "Time limit for week available to You" #~ msgstr "Týdenní Ä�asový limit, který máte k dispozici" #, python-format #~ msgid "Termination time \"%%s\" is not correct and can not be set" #~ msgstr "ÄŒas ukonÄ�ení \"%%s\" není správný a nelze jej nastavit" #, python-format #~ msgid "Track inactive \"%%s\" is not correct and can not be set" #~ msgstr "Stopa není aktivní \"%%s\"není správné a nelze jej nastavit" #~ msgid "Specify END minute of the allowed hour interval" #~ msgstr "UrÄ�ete minutu KONCE povoleného Ä�asového intervalu" #~ msgid "Specify END hour of the allowed hour interval" #~ msgstr "UrÄ�ete hodinu KONCE povoleného Ä�asového intervalu" #~ msgid "This allows You to set up weekly & monthly limits" #~ msgstr "Zde můžete nastavit týdenní a mÄ›síÄ�ní limity" #~ msgid "Month limit amount (minutes part)" #~ msgstr "Rozsah mÄ›síÄ�ního limitu (výbÄ›r minut)" #~ msgid "Month limit amount (days part)" #~ msgstr "Rozsah mÄ›síÄ�ního limitu (výbÄ›r dnů)" #~ msgid "Month limit amount (hours part)" #~ msgstr "Rozsah mÄ›síÄ�ního limitu (výbÄ›r hodin)" #~ msgid "Week limit amount (hours part)" #~ msgstr "Rozsah týdeního limitu (výbÄ›r hodin)" #~ msgid "Week limit amount (minutes part)" #~ msgstr "Rozsah týdeního limitu (výbÄ›r minut)" #~ msgid "Week limit amount (days part)" #~ msgstr "Rozsah týdenního limitu (výbÄ›r dnů)" #~ msgid "==> get user configuration from the server, example" #~ msgstr "==> získat konfiguraci uživatele ze serveru, například" #~ msgid "==> set time limits per all allowed days, example" #~ msgstr "==> nastavit omezení Ä�asu pro vÅ¡echny povolené dny, například" #, python-format #~ msgid "Poll time \"%%s\" is not correct and can not be set" #~ msgstr "SÄ�ítání Ä�asu \"%%s\"není správné a nelze jej nastavit" #, python-format #~ msgid "Save time \"%%s\" is not correct and can not be set" #~ msgstr "UÅ¡etÅ™ený Ä�as\"%%s\"není správnÄ› a nelze jej nastavit" #~ msgid "please-enter-translator-credits" #~ msgstr "LudÄ›k Novák " #~ msgid "Remove user from the exclusion list" #~ msgstr "Odstranit uživatele ze seznamu vylouÄ�ených" #~ msgid "Add user to the exclusion list" #~ msgstr "PÅ™idat uživatele do seznamu vylouÄ�ených" #~ msgid "Remove excluded session type from the list" #~ msgstr "Odebrat vylouÄ�ený typ relace ze seznamu" #~ msgid "Add excluded session type to the list" #~ msgstr "PÅ™idat vylouÄ�ený typ relace do seznamu" #~ msgid "This specifies the time interval at which actual user state is saved" #~ msgstr "UrÄ�ete Ä�asový interval, ve kterém je uložen skuteÄ�ný stav uživatele" #, python-format #~ msgid "User's \"%%s\" allowed hours are not correct and can not be set" #~ msgstr "" #~ "Povolené hodiny uživatele \"%%s\" nejsou správné a nelze je nastavit" #, python-format #~ msgid "User's \"%%s\" day limits list is not correct and can not be set" #~ msgstr "" #~ "Seznam denních limitů uživatele %%s není správný a nelze jej nastavit" #, python-format #~ msgid "User's \"%%s\" day list is not correct and can not be set" #~ msgstr "Seznam dnů uživatele \"%%s\" není správný a nelze jej nastavit" #, python-format #~ msgid "User's \"%%s\" monthly allowance is not correct and can not be set" #~ msgstr "" #~ "MÄ›síÄ�ní příspÄ›vek uživatele \"%%s\" není správný a nelze jej nastavit" #, python-format #~ msgid "User's \"%%s\" set time limit is not correct and can not be set" #~ msgstr "" #~ "Nastavený Ä�asový limit uživatele \"%%s\" není správný a nelze jej nastavit" #, python-format #~ msgid "User's \"%%s\" track inactive flag is not correct and can not be set" #~ msgstr "" #~ "Příznak neaktivní stopy \"%%s\" uživatele není správný a nelze jej " #~ "nastavit" #, python-format #~ msgid "User's \"%%s\" weekly allowance is not correct and can not be set" #~ msgstr "" #~ "Týdenní příspÄ›vek uživatele \"%%s\" není správný a nelze jej nastavit" #~ msgid "Please select a hour interval to remove" #~ msgstr "Vyberte prosím Ä�asový interval, který chcete odebrat" #~ msgid "Set the amount of hours to limit available time for particular day" #~ msgstr "" #~ "Nastavte poÄ�et hodin, abyste omezili Ä�as, který je k dispozici pro " #~ "konkrétní den" #~ msgid "Add specified amount (reward)" #~ msgstr "PÅ™idat zadanou Ä�ástku (odmÄ›na)" #~ msgid "Subtract specified amount (penalty)" #~ msgstr "OdeÄ�íst zadanou Ä�ástku (pokuta)" #, python-format #~ msgid "Log level \"%%s\" is not correct and can not be set" #~ msgstr "Úroveň protokolu \"%%s\"není správná a nelze jí nastavit" #~ msgid "Interval overlaps with existing one" #~ msgstr "Interval se pÅ™ekrývá s existujícím" #~ msgid "Interval start conflicts with existing one" #~ msgstr "Konflikty startu intervalu se stávajícím" #~ msgid "Interval end conflicts with existing one" #~ msgstr "Konflikty konce intervalu s existujícím" #~ msgid "Interval start or end duplicates existing interval" #~ msgstr "ZaÄ�átek nebo konec intervalu je shodný s existujícím intervalem" #~ msgid "Interval start can not be the same as end" #~ msgstr "ZaÄ�átek intervalu nemůže být stejný jako konec" #, python-format #~ msgid "" #~ "Feature \"%%s\", which is used to detect idle time, can not be enabled!\n" #~ "Idle / inactive time might not be accounted when screen is locked!" #~ msgstr "" #~ "Funkci \"%%s\", která se používá k detekci neÄ�innosti, nelze aktivovat!\n" #~ "Když je obrazovka uzamÄ�ena, nemusí se poÄ�ítat doba neÄ�innosti/neaktivity!" #~ msgid "" #~ "This is Timekpr-nExT configuration app. It allows you to configure time " #~ "for your users as well as the Timekpr-nExT parameters.\n" #~ "\n" #~ "To use this application, you either have to execute it as superuser or " #~ "have to be part of the timekpr group.\n" #~ "Please note that the \"Timekpr-nExT Configuration\" is available in " #~ "superuser (administrator) mode only!\n" #~ "\n" #~ "Please configure carefully: do not lock yourself out!" #~ msgstr "" #~ "Toto je konfiguraÄ�ní aplikace Timekpr-nExT. Umožňuje nakonfigurovat Ä�as " #~ "pro vaÅ¡e uživatele a také parametry Timekpr-nExT.\n" #~ "\n" #~ "Chcete-li použít tuto aplikaci, musíte ji buÄ� spustit jako superuživatel, " #~ "nebo musíte být souÄ�ástí skupiny timekpr. UvÄ›domte si prosím, že " #~ "„Nastavení Timekpr-nExT\" je k dispozici pouze v režimu superuživatele " #~ "(správce)!\n" #~ "\n" #~ "Prosím buÄ�te opatrní, nezablokujte se!" #~ msgid "Time spent for this week (saved stated, not real-time)" #~ msgstr "ÄŒas svyužitý tento týden (uložený, nikoliv reálný Ä�as)" #~ msgid "" #~ "This allows you to change time for today as well as inactive session " #~ "tracking" #~ msgstr "Umožnit zmÄ›nu Ä�asu pro aktivní i neaktivní sledované relace" #~ msgid "Set exacly specified limit" #~ msgstr "Nastavit pÅ™esnÄ› stanovený limit" #~ msgid "" #~ "Select whether time for inactive sessions are counted. If this is " #~ "unchecked, time spent in console (not terminal) and while screen is " #~ "locked is NOT taken into account (this very much varies from DE to DE)" #~ msgstr "" #~ "Vyberte, zda se má poÄ�ítat Ä�as pro neaktivní relace. Pokud toto není " #~ "zaÅ¡krtnuto, NEBUDE brána v úvahu doba použití v konzoli (nikoli v " #~ "terminálu) a pÅ™i uzamÄ�ené obrazovce (toto se velmi liší DE od DE)" #~ msgid "" #~ "Lists day of the week and additional information about the day's limit, " #~ "please enable / disable days for the user" #~ msgstr "" #~ "Seznam dnů v týdnu s informací o denním limitu, povolené/zakázané dny " #~ "uživatele" #~ msgid "Specify day's limit" #~ msgstr "Nastavit denní limit" #~ msgid "" #~ "Set specified hours and minutes for particular day at user's disposal (do " #~ "not forget to hit the button)" #~ msgstr "" #~ "Nastavit urÄ�ené hodiny a minuty pro konkrétní den, které má uživatel k " #~ "dispozici (nezapomeňte stisknout tlaÄ�ítko )" #~ msgid "" #~ "Hour intervals per day available to user.\n" #~ "Please note that if day ends at 24th hour and next day starts at 0, user " #~ "can work continuously past midnight.\n" #~ "Please note that multiple intervals cannot be configured within the same " #~ "hour. An interval can start or end or contain a specific hour, but not " #~ "more than once (this is by design, not a bug)" #~ msgstr "" #~ "Uživatel má k dispozici pÅ™edepsané intervaly hodin za den.\n" #~ "UvÄ›domte si prosím, že den konÄ�í ve 24:00 a další den zaÄ�íná v 0:00 " #~ "hodin. Proto může uživatel pracovat nepÅ™etržitÄ› i po půlnoci.\n" #~ "Také vezmÄ›te na vÄ›domí, že v jedné hodinÄ› nelze nakonfigurovat více " #~ "intervalů. Interval může zaÄ�ínat nebo konÄ�it v urÄ�ité hodinÄ›. PřípadnÄ› " #~ "může obsahovat urÄ�itou hodinu, ale ne více než jednou což je to zámÄ›r, " #~ "nikoli chyba." #~ msgid "" #~ "Remove selected interval from the list (do not forget to hit the " #~ "button)" #~ msgstr "" #~ "Odstranit vybraný interval ze seznamu (nezapomeňte stisknout tlaÄ�ítko " #~ ")" #~ msgid "" #~ "Add specified hour interval to the list (do not forget to hit th e " #~ "button)" #~ msgstr "" #~ "PÅ™idat zadaný hodinový interval do seznamu (nezapomeňte stisknout " #~ "tlaÄ�ítko )" #~ msgid "" #~ "Timekpr-nExT log level. Please do not change this unless asked (you " #~ "likely won't find anything pretty in the log files)\n" #~ "1 - standard, 2 - debug, 3 - extra debug" #~ msgstr "" #~ "Úroveň protokolu Timekpr-nExT. Neměňte to, pokud to nebude požadováno " #~ "(pravdÄ›podobnÄ› v souborech protokolu nenajdete nic hezkého)\n" #~ "1 - standard, 2 - ladit, 3 - ladit podrobnÄ›ji" #~ msgid "" #~ "Specify session polling time granularity (at which interval user sessions " #~ "and activity are polled).\n" #~ "3 -5 seconds are optimal, don't change this if unsure." #~ msgstr "" #~ "UrÄ�it Ä�etnost mezi dotazováním relace (v jakém intervalu se budou " #~ "dotazovat uživatelské relace a aktivity).\n" #~ "Nejlepší nastavení je 3 - 5 sekund, neměňte nastavení pokud si nejste " #~ "jisti." #~ msgid "" #~ "Amount of seconds before terminating user sessions. After this is " #~ "reached, user will be terminated, nothing can be done to prevent it.\n" #~ "Adding time does not help in this case. Do that before reaching this " #~ "point..." #~ msgstr "" #~ "PoÄ�et sekund od ukonÄ�ení po odhlášení uživatelské relace. Po dosažení " #~ "Ä�asového limitu zaÄ�ne odpoÄ�et, následnÄ› bude Ä�innost uživatele ukonÄ�ena, " #~ "odhlášení nelze zabránit.\n" #~ "PÅ™idání Ä�asu v tomto případÄ› nepomůže. ÄŒas pÅ™idejte pÅ™ed dosažením tohoto " #~ "bodu ..." #~ msgid "" #~ "List of users excluded from tracking.\n" #~ "Please specify actual usernames, not real names here (e.g please specify " #~ "jsmith, not John Smith)" #~ msgstr "" #~ "Seznam uživatelů vylouÄ�ených ze sledování.\n" #~ "Zde prosím zadejte uživatelská jména, nikoli skuteÄ�ná jména \n" #~ "(napÅ™. uveÄ�te novakj, ne Jan Novák)" #~ msgid "This shows time intervals that are available for Your use" #~ msgstr "Zobrazit Ä�asové intervaly, které jsou k dispozici pro použití" #~ msgid "TIme spent for this week" #~ msgstr "ÄŒas využitý v tomto týdnu" #~ msgid "Time spent for this month" #~ msgstr "ÄŒas využitý v tomto mÄ›síci" #~ msgid "" #~ "This sets logging level (please do not change this unless You know what " #~ "You're doing)" #~ msgstr "" #~ "Zde nastavíte úroveň protokolování (prosím pokud nevíte co dÄ›láte, " #~ "neměňte nastavení)" #~ msgid "" #~ "==> set allowed hours per specified day or ALL for every day, example" #~ msgstr "" #~ "==> nastavit povolené hodiny na urÄ�ený den nebo pro VÅ ECHNY dny, například" #~ msgid "" #~ "==> set time left for the user at current moment, example (add one hour)" #~ msgstr "" #~ "==> nastavit Ä�as zbývající pro uživatele v aktuálním okamžiku, například " #~ "(pÅ™idat jednu hodinu)" #~ msgid "Continous time left to You which may span to more than a current day" #~ msgstr "" #~ "Zbývající nevyÄ�erpaný Ä�as, jeho délka může být delší než aktuální den" #~ msgid "Continous time left:" #~ msgstr "Zbývající nevyÄ�erpaný Ä�as:" #~ msgid "Hide tray icon is not passed" #~ msgstr "Ikona skrýt zásobník není pÅ™edána" #, python-format #~ msgid "Hide tray icon \"%%s\" is not correct" #~ msgstr "Ikona skrytí panelu \"%%s\" není správná" #, python-format #~ msgid "Hide tray icon \"%%s\" is not correct and can not be set" #~ msgstr "Ikona skrytí panelu \"%%s\" není správná a nelze ji nastavit" #, python-format #~ msgid "User's \"%%s\" hide tray icon flag is not correct and can not be set" #~ msgstr "Příznak skrytí zásobníku \"%%s\" není správný a nelze jej nastavit" #~ msgid "" #~ "Continuous time left to user which may span to more than a current day " #~ "(realtime, available when user is logged in)" #~ msgstr "" #~ "NepÅ™etržitý Ä�as zbývající uživateli, který může trvat déle než aktuální " #~ "den (reálný Ä�as, k dispozici po pÅ™ihlášení uživatele)" #~ msgid "" #~ "Select whether to show padlock icon and notifications to user.\n" #~ "Please note that this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Vyberte, zda se má uživateli zobrazit ikona zámku a upozornÄ›ní.\n" #~ "Upozorňujeme, že tím zakážete zobrazování vÅ¡ech informací a oznámení " #~ "uživateli!" timekpr-next/resource/locale/cs/LC_MESSAGES/timekpr.mo000644 001750 001750 00000062420 15122253261 024466 0ustar00bezvfedubezvfedu000000 000000 Þ•è\7œxy”$¯*Ôÿ0HEŽ*¦™Ñ%k$‘D¶8û4: M(n—$³Ø ñ$7+M)y*£'ÎöY ct.’ ÁÏ ç ñÿ#3%W*}<¨#å $+7 cp t™‚$6%E*k<–!Ó3õ )J‡\'ä9  F*g’—*´ßî þ1 =(N w� ¦*½ èò0B Zh�<œNÙ%( (N w … 0¤ Õ %í -!A!)^!ˆ!&�!6·!î! " "%"0D"u"å�" s#€#—#!ª#UÌ#"$#*$N$!l$Ž$%Ÿ$7Å$ý$+%2H%4{%7°%è%4&67&5n&7¤&;Ü&7'6P'2‡'º'CÒ'(%(9(L( ](j(~(D‘(*Ö())+)?)U)i)|)3’)@Æ)*2*.O* ~*)‹*µ*Ð*ì*)+'*+R+l+Bo+#²+5Ö+* ,7,T,m,},Ž,I¤,Hî,S7-"‹-®-%Ç-$í-.*.=.<Z.+—.=Ã.*/$,/6Q/#ˆ//¬/'Ü//0A40.v0-¥0?Ó0,16@1Hw15À1/ö1A&2.h2,—2>Ä2+3/3 83B3€^3ß36õ3(,4U43t4<¨48å4G5f5 i5u5y5"}5 5²5¥Å5Wk8ÈÃ8%Œ:(²:(Û:K;P;@i;Mª;"ø;6<ÒR<3%=2Y=KŒ=PØ= )>4>+L>)x>"¢>(Å>î>? ?0?B?&U?)|?,¦?2Ó?@a@ @/�@6½@ ô@ÿ@ A#A!5A#WA!{A-�A1ËAFýA)DBnBŽB3¤B ØBæB êB#öBC#C6C*KC2vCG©C0ñCE"D/hD˜Dš²D-MEC{E'¿E*çEFF92FlF €FŒF:¡FÜF4ðF %G./G^GgG6{G²G'ÅG<íG!*HLH$eHŠH?¨HLèH5I8SIŒI&¢I;ÉI J-&J)TJ~J(�JÆJ'ÎJ8öJ/KKKcK$tK9™KÓKÙóK ÍLØLõL& M^3M ’M�M¸M#ÒMöM$ N;0NlN'‹N)³N+ÝND ONO=gO=¥OFãO1*P?\P=œPDÚP;Q[QKyQÅQÖQöQR(R=RXRJrR4½R2òR%S@SXSmS‡S?§S@çS(T?FT6†T ½T ÊTëTUU&7U(^U‡UŸU:¢U)ÝU>V2FVyVŽVªV¿VÑVhëVVTW_«W) X5X/RX(‚X«XÉX&ßXFY6MYK„Y5ÐY*ZA1Z)sZ0�Z1ÎZ.[_/[=�[7Í[N\7T\?Œ\TÌ\>!];`]Pœ]Eí]73^Lk^6¸^ï^_%_µ@_ö_:`@P`‘`,¨`?Õ`>aHTa�aŸa´a ¸a*Åaðab b[´dg§�ÛÊw'9;¶ÍFŸ¹=Œ²2Z.7‹jXžŠÎ¼±¦ãÜ�‰ ÝbÙd|äv›4+¢iythÖLÅ Dœ8èzÒGÏК½É˜Ƶ%$I—”*S]‚c¯`‘HJÌV[\(­´q‡:¬n)â¿o«Wƒ�Q»RK~>çf¥1AY �@åÄT·…ß0 ÓP"–„mޏ-s°™�Þeº<ÀOÚ•& ¾“rák{ Áa×Ǩ/ÃU!NBE¤^æ3³#ÔÑË5¡?ÈuM’ˆ®£CØpÕ6x† },à©_ª€l%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set allowed days for the user, example==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTAdd a user to the exclusion listAdd an excluded session type to the listAdd specified time (reward)Add tracked session type to the listAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllowed days for user have been processedAllowed hours for user have been processedApply all Timekpr-nExT settings at onceApply daily limitsBrief information about time spent and everything related to time management for this dayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration retrievedConnectedConnecting...Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCritical notification timeout (sec)Current effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDays & LimitsEduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )EnabledExcluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsIcon, isn't it?Info & TodayInternal connection error, please check log filesInterval removedInterval start cannot be the same as endIntervalsKeep control of computer usageLimitLimits & ConfigurationList of usernames registered on the systemLog levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelNotes, read carefully ;)Notification timeout (sec)PARAMETER PARSE ERROR (please check parameter validity): %%sPlease reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePoll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Session typeShow all notificationsShow limit changesShow seconds in notification areaSpecify whether to show a notification when limit configurations or allowance changesStartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are the days and limits that are available to youTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT notificationToTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser configuration retrievedUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationWARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:Weekly and monthly limits for user have been processedYou have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked inhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrlock screenminn/anumeric time values are in secondsshutdown computerterminate sessionstimekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: Ludek NOVAK PO-Revision-Date: 2025-10-14 19:19+0300 Last-Translator: Eduards Bezverhijs Language-Team: Ä�eÅ¡tina <> Language: cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; X-Launchpad-Export-Date: 2020-05-13 06:32+0000 X-Generator: Poedit 3.6 %(n)s minuta%(n)s minuty%(n)s minut%(n)s sekunda%(n)s sekundy%(n)s sekund%(n)s sekunda%(n)s sekundy%(n)s sekundCelkem %(n)s uživatel:Celkem %(n)s uživatelé:Celkem %(n)s uživatelů:---=== OZNÃ�MENÃ� ===---==> získat uložený seznam uživatelů ze serveru, například==> získat konfiguraci uživatele a Ä�asové informace ze serveru, příklad==> tiskni nápovÄ›du, například==> nastavit povolené dny pro uživatele, například==> nastavený Ä�as zbývající pro uživatele v aktuálním Ä�asovém okamžiku: "+" (pÅ™idat Ä�as), "-" (odeÄ�íst Ä�as), "=" (nastavit pÅ™esný Ä�as, který je k dispozici), příklad (pÅ™idat jednu hodinu)==> nastavit Ä�asový limit za mÄ›síc, například==> nastavit týdenní omezení Ä�asu, například==> nastavit, zda skrýt ikonu panelu a zabránit upozornÄ›ní, například==> nastavit, zda se mají sledovat neaktivní uživatelské relace, napříkladO aplikaciO aplikaci Timekpr-nExTPÅ™idat uživatele do seznamu vylouÄ�enýchPÅ™idat vylouÄ�ený typ relace do seznamuPÅ™idat zadanou Ä�ástku (odmÄ›na)PÅ™idat sledovaný typ relace do seznamuDalší konfiguraceDalší možnosti konfiguraceOstatní limityDalší možnostiDalší statistikyByl zpracován další Ä�as uživateleByly zpracovány povolené dny uživateleByly zpracovány povolené hodiny uživatelePoužít najednou vÅ¡echna nastavení Timekpr-nExTPoužít denní limityStruÄ�né informace o využitém Ä�asu a vÅ¡em souvisejícím s řízením Ä�asu pro dneÅ¡ní denZavřít oknoPříkaz byl NEÚSPĚŠNÃ�: přístup zamítnutPříkaz byl NEÚSPĚŠNÃ�: komunikace nebyla pÅ™ijataNastaveníNastavení byla naÄ�tenaPÅ™ipojenoPÅ™ipojování…Zbývající nepÅ™etržitý Ä�as:Nastavení ovládání Timekpr-nExTOvládáné položky Timekpr-nExTTypy kontrolních relací nejsou pÅ™edáványSeznam typů kontrolních relací není správnýSeznam typů kontrolních relací není správný a nelze jej nastavitÄŒasový limit kritického oznámení (s)Aktuální uživatelské jménoAktuální statistikyNastavení denního limitu pro každý den v týdnuDenní limityDenLimity dnůLudek NOVAK PovolenoVylouÄ�ené relaceVyjmutí uživateléVylouÄ�ené typy relací se nepÅ™edávajíSeznam vylouÄ�ených typů relací není správnýSeznam vylouÄ�ených typů relací není správný a nelze jej nastavitSeznam vylouÄ�ených uživatelů není správnýSeznam vylouÄ�ených uživatelů není správný a nelze jej nastavitSeznam vylouÄ�ených uživatelů není pÅ™edánPÅ™ipojení se nezdaÅ™iloFunkci "%%s", která se používá k detekci neÄ�innosti, nelze aktivovat! Když je obrazovka uzamÄ�ena, nemusí se poÄ�ítat doba neÄ�innosti/neaktivity!ÄŒas poslední výstrahy "%%s"není správnýČas poslední výstrahy "%%s" není správný a nelze jej nastavitÄŒas poslední výstrahy není pÅ™edánFormát: OdSkrýt ikonu a upozornÄ›ní:Ikona skrytí zásobníku pro uživatele byla zpracovánaHodinové intervalyIkona, že?Aktuální informaceInterní chyba pÅ™ipojení, zkontrolujte soubory protokoluInterval odstranÄ›nZaÄ�átek intervalu nemůže být stejný jako konecIntervalyMÄ›jte kontrolu nad používáním poÄ�ítaÄ�eOmezeníLimity a nastaveníSeznam uživatelských jmen registrovaných v systémuÚroveň protokoluÚroveň protokolu "%%s"není správnáÚroveň protokolu "%%s"není správná a nelze jí nastavitÚroveň protokolu není aktivníÚroveň protokolováníPozornÄ› si pÅ™eÄ�tÄ›te poznámky ;)ÄŒasový limit oznámení (s)CHYBA ROZBORU PARAMETRÅ® (zkontrolujte platnost parametru): %%sProsím znovu otevÅ™ete aplikaci pokud jste superuser a běží Timekpr-nExTVyberte den a nastavte limityVyberte prosím Ä�asový interval, který chcete odebratInterval dotazováníSÄ�ítání Ä�asu "%%s"není správnéSÄ�ítání Ä�asu "%%s"není správné a nelze jej nastavitSÄ�ítání Ä�asu není aktivníOdstranit uživatele ze seznamu vylouÄ�enýchOdebrat vylouÄ�ený typ relace ze seznamuOdebrat vylouÄ�ený typ relaceOdebrat sledovaný typ relace ze seznamuObnovitObnovit konfiguraci z uloženého stavuTyp omezení / blokování pro uživatele byl zpracovánTyp omezení / blokování:Uložit vÅ¡echny zmÄ›nyUÅ¡etÅ™ený Ä�asUÅ¡etÅ™ený Ä�as"%%s"není správnÄ›UÅ¡etÅ™ený Ä�as"%%s"není správnÄ› a nelze jej nastavitUÅ¡etÅ™ený Ä�as není aktivníVyberte, zda se má poÄ�ítat Ä�as pro neaktivní relace. Pokud toto není zaÅ¡krtnuto, NEBUDE brána v úvahu doba použití v konzoli (nikoli v terminálu) a pÅ™i uzamÄ�ené obrazovce (toto se velmi liší DE od DE)Typ relaceZobrazit vÅ¡echna oznámeníZobrazit zmÄ›ny limituZobrazit sekundy v oznamovací oblastiUrÄ�ete, zda se mají zobrazit oznámení, když se zmÄ›ní konfigurace limitů nebo povoleníSpuÅ¡tÄ›noStav správce Timekpr-nExTStav klienta Timekpr-nExTOdeÄ�íst zadanou Ä�ástku (pokuta)ÄŒas do odhlášeníČas ukonÄ�ení "%%s"není správnýČas ukonÄ�ení "%%s" není správný a nelze jej nastavitÄŒas ukonÄ�ení není pÅ™edánInterval se pÅ™ekrývá s existujícímKonflikty konce intervalu s existujícímKonflikty startu intervalu se stávajícímZaÄ�átek nebo konec intervalu je shodný s existujícím intervalemPříkaz je nesprávný:Množství hodin, které je tÅ™eba upravit pro dneÅ¡ní limitMnožství minut, které je tÅ™eba upravit pro dneÅ¡ní limitPoužití administrátorského klienta Timekpr-nExT je následující:PÅ™i komunikaci s Timekpr-nExT (%%s) je problém!DoÅ¡lo k problému s pÅ™ipojením k démonu Timekpr-nExT (%%s)!Toto jsou limity jednotlivých dnů, které máte k dispoziciÄŒasový limit se zmÄ›nil, upozorňujeme na nový zbývající Ä�as!ÄŒas k dispozici dnes (uložený, nikoli v reálném Ä�ase)ÄŒas neaktivní (skuteÄ�ný):ÄŒas neaktivní využitý touto relací nebo od restartování Timekpr-nExTNeaktivní Ä�as:Zbývající Ä�as (skuteÄ�ný):Zbývající Ä�as (dnes):ÄŒas zbývající dnes:Zbývající Ä�as...ÄŒasový limit za mÄ›síc:ÄŒasový limit za týden:Nastavení Ä�asového limitu se zmÄ›nilo, mÄ›jte na pamÄ›ti nové hodnoty!MÄ›síÄ�ní Ä�asový limit. který máte k dispoziciTýdenní Ä�asový limit, který máte k dispoziciÄŒas využitý za mÄ›síc:ÄŒas využitý relací:ÄŒas využitý dnes:ÄŒas využitý za týden:ÄŒas využitý v tomto mÄ›síciÄŒas využitý tento mÄ›síc (uložený, nikoliv reálný Ä�as)ÄŒas využitý touto relací nebo od restartování Timekpr-nExTÄŒas využitý v tomto týdnuÄŒas svyužitý tento týden (uložený, nikoliv reálný Ä�as)ÄŒas využitý dnes (uložený, nikoliv reálný Ä�as)Timekpr-nExTNastavení programu Timekpr-nExTNastavení Timekpr-nExTSpráva Timekpr-nExTKlientská Ä�ást Timekpr-nExTByla uložena konfigurace Timekpr-nExTRozhraní Timekpr-nExT není pÅ™ipravenoOznámení Timekpr-nExTDoCelkový dneÅ¡ní Ä�as, který je k dispozici do konce dneStopa není aktivní "%%s"není správnéStopa není aktivní "%%s"není správné a nelze jej nastavitNeaktivní sledování uživatele bylo zpracovánoStopa není aktivníNastavit neaktivní relace:Sledovat neaktivní:Sledované relaceNEOÄŒEKÃ�VANÃ� CHYBA: %%sNeoÄ�ekávaná CHYBA pÅ™i získávání seznamu uživatelů. Zkontrolujte soubory protokolu Timekpr-nExTNeoÄ�ekávaná CHYBA kontroly aktualizace. Zkontrolujte soubory protokolu Timekpr-nExTNeoÄ�ekávaná CHYBA pÅ™i naÄ�ítání konfigurace. Zkontrolujte soubory protokolu Timekpr-nExTK upozornÄ›ní použijte zvukový signálPoužít hlasová oznámeníUživatelská konfigurace "%%s" nebyla nalezenaUživatelský soubor "%%s" nebyl nalezenUživatel "%%s" nebyl nalezenNastavení uživateleUživatelská nastavení byla naÄ�tenaPovolené hodiny uživatele "%%s" nejsou správné a nelze je nastavitSeznam denních limitů uživatele %%s není správnýSeznam denních limitů uživatele %%s není správný a nelze jej nastavitSeznam denních limitů uživatele %%s není pÅ™edánSeznam dnů uživatele %%s není správnýSeznam dnů uživatele "%%s" není správný a nelze jej nastavitSeznam dnů uživatele %%s není pÅ™edánČíslo dne uživatele %%s musí být mezi 1 a 7Číslo dne uživatele %%s musí být k dispoziciPříznak skrytí panelu "%%s" není správnýPříznak skrytí ikony „%%s“ v zásobníku uživatele není správný a nelze jej nastavitPříznak "%%s" skrytí zásobníku uživatele není pÅ™edánMÄ›síÄ�ní příspÄ›vek uživatele %%s není správnýMÄ›síÄ�ní příspÄ›vek uživatele "%%s" není správný a nelze jej nastavitMÄ›síÄ�ní příspÄ›vek uživatele %%s není schválenTyp omezení / blokování uživatele „%%s“ není správnýTyp omezení / blokování uživatele „%%s“ není správný a nelze jej nastavitTyp omezení / blokování uživatele „%%s“ není pÅ™edánPříznak neaktivní stopy "%%s" uživatele není správnýPříznak neaktivní stopy "%%s" uživatele není správný a nelze jej nastavitNeaktivní příznak neaktivní stopy "%%s" uživatele není pÅ™edánTýdenní příspÄ›vek uživatele "%%s" není správnýTýdenní příspÄ›vek uživatele "%%s" není správný a nelze jej nastavitTýdenní příspÄ›vek uživatele "%%s" není pÅ™edánUživatelské jménoUživatelské jméno:Nastavení související s uživateliVAROVÃ�NÃ�: AdministraÄ�ní nástroj Timekpr-nExT byl požádán o spuÅ¡tÄ›ní v grafickém režimu, ale nejsou k dispozici žádné displeje, takže běží v textovém režimu ...Interval hodin pro probuzení:Byly zpracovány týdenní a mÄ›síÄ�ní limity uživateleZbývá %(n)s hodinaZbývájí %(n)s hodinyZbývá %(n)s hodinDnes není Ä�as omezenVáš Ä�as vyprÅ¡el, zaÄ�alo odhlášováníVáš Ä�as vyprÅ¡el, váš poÄ�ítaÄ� bude nyní nucenÄ› uspánVáš Ä�as vyprÅ¡el, vaÅ¡e relace bude nyní nucenÄ› uzamÄ�enahodiny jsou oÄ�íslovány podle ISO 8601 (tj. hodiny 24h, formát: 0-23)huzamknutí obrazovkyminnení známoÄ�íselné hodnoty Ä�asu jsou v sekundáchVypnout poÄ�ítaÄ�ukonÄ�it relaceTento program je svobodný software: můžete jej dále šířit a/nebo upravovat v souladu s podmínkami GNU General Public License zveÅ™ejnÄ›né nadací Free Software Foundation, buÄ� verzí 3 licence, nebo (podle vaší volby) jakoukoli novÄ›jší verzí. Tento program je distribuován v nadÄ›ji, že bude užiteÄ�ný, ale BEZ JAKÉKOLI ZÃ�RUKY; bez pÅ™edpokládané záruky PRODEJNOSTI nebo VHODNOSTI PRO URÄŒITÃ� ÚČEL. Další podrobnosti naleznete v GNU General Public License. Spolu s tímto programem byste mÄ›li obdržet kopii GNU General Public License. Pokud ne, navÅ¡tivte http://www.gnu.org/licenses/. V Debianu viz soubor /usr/share/common-license/GPL-3pracovní dny jsou oÄ�íslovány podle ISO 8601 (tj. první den je pondÄ›lí, formát: 1-7)timekpr-next/resource/locale/pt/000755 001750 001750 00000000000 15122253204 020700 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/pt/LC_MESSAGES/000755 001750 001750 00000000000 15122253261 022470 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/pt/LC_MESSAGES/timekpr.po000644 001750 001750 00000307217 15122253261 024515 0ustar00bezvfedubezvfedu000000 000000 # Portuguese translation for timekpr-next # Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:17+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> mostrar ajuda, exemplo" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> obter a lista de utilizadores gravada no servidor, exemplo" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "==> obter informação temporal e configuração do utilizador a partir do " "servidor, exemplo" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" "==> obter informações de tempo do utilizador em tempo real do servidor, exemplo" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> definir os dias permitidos para o utilizador, exemplo" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> definir as horas permitidas para o dia especificado, ou \"TODAS\" para " "todos os dias, opcionalmente especificar os minutos de início e de fim entre " "parênteses como este [x-y], adicionalmente especificar ! à frente da hora se " "não tiver de ser contabilizado (tempo livre para o utilizador), exemplo" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> definir limites de tempo para todos os dias permitidos, o número dos " "valores não deve exceder os dias permitidos para o utilizador, exemplo" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> definir limite de tempo por semana, exemplo" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> definir limite de tempo por mês, exemplo" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "==> definir se contabiliza sessões de utilizador inativo, exemplo" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" "==> definir se deseja ocultar o ícone da bandeja e evitar notificações, exemplo" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> definir tipo de restrição/bloqueio (\"trancado\" - bloquear sessão, " "\"suspender\" - suspender o computador, \"suspendeacorda\" - suspender e " "ativar, \"terminar\" - encerrar sessões, \"kill\" - finalizar sessões, " "\"encerrar\" - desligar o computador), exemplos" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> definir o tempo restante para o utilizador no momento atual: \"+\" " "(adicionar tempo), \"-\" (subtrair tempo), \"=\" (definir o tempo exato " "disponível), exemplo (adicionar uma hora)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> definir se o TempoDeJogo está ativado para o utilizador, exemplo" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> definir se o TempoDeJogo deve ser contabilizado em vez da atividade normal, " "por exemplo" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> definir se as actividades do TempoDeJogo são permitidas durante os " "intervalos não contabilizados (\"∞\"), por exemplo" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "" "==> definir os dias permitidos para as actividades do TempoDeJogo, por exemplo" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> definir limites de TempoDeJogo para todos os dias permitidos, o número de " "valores não deve exceder os dias de TempoDeJogo permitidos para o utilizador, " "por exemplo" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> definir máscaras de processo da atividade TempoDeJogo, para as quais o " "tempo é contabilizado, exemplo" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> definir o TempoDeJogo restante para o utilizador no momento atual: \"+\" " "(adicionar tempo), \"-\" (subtrair tempo), \"=\" (definir o tempo exato " "disponível), exemplo (adicionar uma hora)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Tipos de sessões de controlo não são passadas" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "Lista de tipos de sessões de controlo não está correta" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "Lista de tipos de sessões de controlo não está correta e não pode ser definida" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "Tipos de sessão excluídos não são passados" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "Lista de tipos de sessão excluídos não está correta" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "Lista de tipos de sessão excluídos não está correta e não ser definida" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "Lista de utilizadores excluídos não é passada" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "Lista de utilizadores excluídos não está correta" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "Lista de utilizadores excluídos não está correta e não pode ser definida" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "Último aviso de tempo não é passado" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "Último aviso de tempo \"%%s\" não está correto" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "O tempo de aviso final \"%%s\" não está correto e não pode ser definido" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "A hora da notificação final não foi ultrapassada" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "A hora final da notificação \"%%s\" não está correta" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "A hora final da notificação \"%%s\" não está correta e não pode ser definida" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "Tempo de encerramento não é passado" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "Tempo de encerramento \"%%s\" não está correto" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "Tempo de encerramento \"%%s\" não está correto e não pode ser definido" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Contabilizar inativo não é passado" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Contabilizar inativo \"%%s\" não está correto" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "O rastreio inativo \"%%s\" não está correto e não pode ser definido" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Nível de registo não é passado" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Nível de Registo \"%%s\" não está correto" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "O nível de registo \"%%s\" não está correto e não pode ser definido" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "Intervalo de verificação não é passado" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "Intervalo de verificação não é transmitido" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "Tempo de verificação \"%%s\" não está correto e não pode ser definido" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "Intervalo de gravação não é passado" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "Tempo guardado \"%%s\" não está correto" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "Tempo guardado \"%%s\" não está correto e não pode ser definido" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "O sinalizador TempoDeJogo não está passado" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "O sinalizador TempoDeJogo \"%%s\" não está correto" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "" "O sinalizador TempoDeJogo \"%%s\" não está correto e não pode ser definido" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "" "O sinalizador do monitor de atividade melhorado do TempoDeJogo não está passado" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "" "O sinalizador \"%%s\" do monitor de atividade melhorado do TempoDeJogo não está " "correto" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "O sinalizador \"%%s\" do monitor de atividade melhorado do TempoDeJogo não está " "correto e não pode ser definido" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "O número do dia do utilizador \"%%s\" tem de estar presente" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "O número do dia do utilizador \"%%s\" tem de ser entre 1 e 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "As horas permitidas \"%%s\" do utilizador não estão correctas e não podem ser " "definidas" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "A lista de dias do utilizador \"%%s\" não é passada" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "A lista de dias do utilizador \"%%s\" não está correta" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" "Lista diária do utilizador \"%%s\" não está correta e não pode ser definida" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "Lista de limites diários do utilizador\"%%s\" não é passada" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "Os limites de dias do utilizador \"%%s\" não estão corretos" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "Lista de limites diários do utilizador \"%%s\" não está correta e não pode ser " "definida" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "A operação temporal \"%%s\" do utilizador pode ser uma das seguintes: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "O limite de tempo \"%%s\" do utilizador não está correto" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "O limite de tempo \"%%s\" do utilizador não está correto e não pode ser definido" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "O limite mensal do utilizador \"%%s\" não é passado" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "O limite mensal do utilizador \"%%s\" não está correto" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "A tolerância mensal do utilizador \"%%s\" não está correta e não pode ser " "definida" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "" "O sinalizador de inatividade de via \"%%s\" do utilizador não está passado" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "" "O sinalizador de inatividade de via \"%%s\" do utilizador não está correto" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "O sinalizador de inatividade de via \"%%s\" do utilizador não está correto e " "não pode ser definido" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" "A indicação \"%%s\" do utilizador para ocultar o ícone de bandeira do painel " "não está passada" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "" "O sinalizador \"%%s\" do utilizador para ocultar o ícone do tabuleiro não está " "correto" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "O sinalizador \"%%s\" do utilizador para ocultar o ícone do tabuleiro não está " "correto e não pode ser definido" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "A restrição/tipo de bloqueio \"%%s\" do utilizador não foi aprovada" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "O tipo de restrição / bloqueio \"%%s\" do utilizador não está correto" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "O tipo de restrição / bloqueio \"%%s\" do utilizador não está correto e não " "pode ser definido" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "A tolerância semanal do utilizador \"%%s\" não é passada" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "A tolerância semanal do utilizador \"%%s\" não está correto" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "O subsídio semanal \"%%s\" do utilizador não está correto e não pode ser " "definido" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "" "O sinalizador de ativação do PlayTime \"%%s\" do utilizador não foi passado" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "" "O sinalizador de ativação do PlayTime \"%%s\" do utilizador não está correto" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "O sinalizador de ativação do PlayTime \"%%s\" do utilizador não está correto e " "não pode ser definido" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "O sinalizador de substituição do PlayTime \"%%s\" do utilizador não foi passado" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "" "O sinalizador de substituição de PlayTime \"%%s\" do utilizador não está correto" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "O sinalizador de substituição de PlayTime \"%%s\" do utilizador não está " "correto e não pode ser definido" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "O sinalizador \"%%s\" PlayTime do utilizador permitido durante intervalos não " "contabilizados não é passado" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "O sinalizador do utilizador \"%%s\" PlayTime permitido durante intervalos não " "contabilizados não está correto" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "O sinalizador do utilizador \"%%s\" PlayTime allowed during unaccounted " "intervals não está correto e não pode ser definido" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "A lista de dias do PlayTime \"%%s\" do utilizador não foi aprovada" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "A lista de dias do PlayTime \"%%s\" do utilizador não está correcta" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "A lista de dias do PlayTime \"%%s\" do utilizador não está correcta e não pode " "ser definida" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "A lista de limites diários do PlayTime \"%%s\" do utilizador não foi aprovada" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "A lista de limites diários do PlayTime \"%%s\" do utilizador não está correcta" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "A lista de limites diários do PlayTime \"%%s\" do utilizador não está correcta " "e não pode ser definida" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "A operação PlayTime \"%%s\" do utilizador pode ser uma das seguintes: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "O limite de PlayTime definido pelo utilizador \"%%s\" não está correto" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "O limite de tempo do PlayTime \"%%s\" do utilizador não está correto e não pode " "ser definido" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERRO inesperado ao carregar a configuração. Por favor, inspeccione os ficheiros " "de registo do Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERRO inesperado na obtenção da configuração. Por favor, inspeccione os " "ficheiros de registo do Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERRO inesperado na obtenção da configuração do utilizador. Por favor, " "inspeccione os ficheiros de registo do Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "ERRO inesperado na obtenção da lista de utilizadores. Por favor, inspeccione os " "ficheiros de registo do Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERRO inesperado ao atualizar a configuração. Por favor, inspeccione os " "ficheiros de registo do Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "ERRO inesperado na atualização do controlo. Por favor, inspeccione os ficheiros " "de registo do Timekpr-nExT" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "Configuração do Utilizador \"%%s\" não encontrada" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "O ficheiro de controlo do utilizador \"%%s\" não foi encontrado" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "Utilizador \"%%s\" não encontrado" #: common/constants/messages.py:160 msgid "Connected" msgstr "Ligado" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "A ligar..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Falha ao ligar" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "Por reabra a aplicação se é o superuser e o Timekpr-nExT está a correr" #: common/constants/messages.py:165 msgid "Started" msgstr "Iniciado" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "Configuração do utilizador recuperada" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Configuração recuperada" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "O rastreio de inatividade para o utilizador foi processado" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Ocultar o ícone do painel para o utilizador foi processado" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "O tipo de restrição / bloqueio para o utilizador foi processado" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "O tempo adicional para o utilizador foi processado" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "O PlayTime adicional para o utilizador foi processado" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "Os limites semanais e mensais para o utilizador foram processados" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Os dias permitidos para o utilizador foram processados" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Os limites de tempo diários para o utilizador foram processados" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "As horas permitidas para o utilizador foram processadas" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "A configuração do Timekpr-nExT foi guardada" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Os limites de tempo do utilizador foram guardados" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "Os limites de PlayTime do utilizador foram guardados" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "As opções adicionais do utilizador foram guardadas" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "A ativação do PlayTime para o utilizador foi processada" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "A bandeira de substituição do PlayTime para o utilizador foi processada" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "Tempo Livre permitido durante intervalos não contabilizados o sinalizador para " "o utilizador foi processado" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "Os dias permitidos de PlayTime para o utilizador foram processados" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "Os limites diários do PlayTime para o utilizador foram processados" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "As actividades do PlayTime para o utilizador foram processadas" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Seleccione um dia para definir os limites" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "Esse intervalo sobrepõe-se a um já existente" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "O início desse intervalo entra em conflito com um já existente" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "O fim desse intervalo entra em conflito com um intervalo existente" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "O início ou o fim desse intervalo duplica um intervalo existente" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "O início do intervalo não pode ser o mesmo que o fim" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "O início do intervalo não pode ser posterior ao fim" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Seleccione um intervalo de horas para remover" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Intervalo removido" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "A interface Timekpr-nExT ainda não está pronta" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "AVISO: Foi pedido ao utilitário de administração Timekpr-nExT que fosse " "executado em modo GUI, mas não há ecrãs disponíveis, pelo que foi executado em " "CLI..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "O comando está incorreto:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "A utilização do cliente de administração Timekpr-nExT é a seguinte:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== NOTÃ�CIA ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "os valores numéricos de tempo são em segundos" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "os dias da semana são numerados de acordo com a norma ISO 8601 (ou seja, " "segunda-feira é o primeiro dia, formato: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "as horas são numeradas de acordo com a norma ISO 8601 (ou seja, relógio de 24 " "horas, formato: 0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s utilizador no total:" msgstr[1] "%(n)s utilizadores no total:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Configuração para o utilizador %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Tempo restante..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Limites & configuração" #: common/constants/messages.py:213 msgid "About" msgstr "Sobre" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Manter controlo do uso do computador" #: common/constants/messages.py:217 msgid "Day" msgstr "Dia" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Ativado" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Limite" #: common/constants/messages.py:220 msgid "From" msgstr "De" #: common/constants/messages.py:221 msgid "from..." msgstr "de..." #: common/constants/messages.py:222 msgid "To" msgstr "Para" #: common/constants/messages.py:223 msgid "to..." msgstr "para..." #: common/constants/messages.py:224 msgid "Period" msgstr "Período" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Semanal" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Mensal" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Tipo de sessão" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "tipo de sessão..." #: common/constants/messages.py:232 msgid "Username" msgstr "Nome de utilizador" #: common/constants/messages.py:233 msgid "username..." msgstr "nome de utilizador..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Máscara do processo" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "máscara executável..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Descrição do processo" #: common/constants/messages.py:237 msgid "process description..." msgstr "descrição do processo..." #: common/constants/messages.py:238 msgid "Time" msgstr "Horário" #: common/constants/messages.py:239 msgid "time..." msgstr "horário..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Importância" #: common/constants/messages.py:241 msgid "importance..." msgstr "importância..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Notificação Timekpr-nExT" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Notificação do TempoDeJogo Timekpr-nExT" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "O seu tempo não está limitado hoje" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "Tempo de tolerância alterou, por favor note o novo tempo restante!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "Configuração do tempo limite alterou, por favor note a nova configuração!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Há um problema a ligar ao Timekpr-nExT daemon (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Há um problema ao comunicar com o Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Erro de inicialização do ícone (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "O seu tempo acabou, será forçado a sair em" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "O seu tempo esgotou, o seu computador será encerrado forçosamente em" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "O seu tempo acabou, a sua sessão será forçada a trancar em" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "O seu tempo acabou, o seu computador será forçado a suspender em" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s segundo" msgstr[1] "%(n)s segundos" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Erro de ligação interna, por favor consulte os ficheiros de registo" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Tem %(n)s hora" msgstr[1] "Tem %(n)s horas" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minuto" msgstr[1] "%(n)s minutos" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s segundo restante" msgstr[1] "%(n)s segundo restantes" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s segundo de Tempo Livre restante" msgstr[1] "%(n)s segundos de Tempo Livre restante" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "O recurso \"%%s\", que é usado para detetar o tempo ocioso, não pode ser " "ativado!\n" "O tempo ocioso / inativo pode não ser contabilizado quando o ecrã está trancado!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "ERRO INESPERADO: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "PARAMETER PARSE ERROR (verifique a validade do parâmetro): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Comando FALHADO: acesso negado" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Comando FALHADO: a comunicação não foi aceite" #: common/constants/messages.py:278 msgid "n/a" msgstr "n/a" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Sobre o Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Este programa é software livre: pode redistribuí-lo e/ou modificá-lo de acordo " "com os termos da Licença Pública Geral GNU, tal como publicada pela Free " "Software Foundation, quer a versão 3 da Licença, quer (à sua escolha) qualquer " "versão posterior.\n" "\n" "\n" "Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER " "GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM " "PROPÓSITO PARTICULAR. Veja a Licença Pública Geral GNU para mais detalhes.\n" "\n" "\n" "Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este " "programa. Se não, veja . Em Debian, veja o " "ficheiro /usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(Afinação de Traduções por JP Lord )\n" "(Afinação de Inglês por Phil Hudson )" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Remover tipo de sessão excluida" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Administração Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Ã�cone, não é?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Notas, leia cuidadosamente ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Esta é a aplicação de configuração do Timekpr-nExT. Permite-lhe definir limites " "de tempo para os seus utilizadores individuais, bem como opções gerais do " "Timekpr-nExT.\n" "Para utilizar esta aplicação, tem de a executar como superutilizador ou tem de " "fazer parte do grupo timekpr.\n" "Tenha em atenção que a \"Configuração do Timekpr-nExT\" só está disponível em " "modo de superutilizador (administrador)!\n" "Por favor, configure cuidadosamente: não se bloqueie a si próprio!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Configuração relacionada com utilizadores" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Nome de utilizador:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Lista de utilizadores registados no sistema" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Restaurar" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Restaurar configurações a partir do estado guardado" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Informações sobre tempo restante / gasto" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Tempo contínuo restante. Pode abranger mais do que o dia atual (em tempo real, " "disponível quando o utilizador tem sessão iniciada)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Tempo restante (atual):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Formato: " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Quanto tempo o utilizador esteve inativo desde o último início de sessão (em " "tempo real, disponível quando o utilizador tem sessão iniciada)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Tempo inativo (atual):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Tempo disponível hoje (indicado guardado, não em tempo real)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Tempo restante (hoje):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Tempo despendido hoje (declarado guardado, não em tempo real)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Tempo gasto (hoje):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "Tempo despendido esta semana (guardado, não em tempo real)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Tempo gasto (semana):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Tempo gasto este mês (estado guardado, não tempo-real)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Tempo gasto (mês):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Ajustamentos de empréstimo" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "horário de hoje" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" "Escolha esta opção para ajustar o tempo disponível do utilizador para hoje" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "TempoDeJogo" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "Escolha esta opção para ajustar o tempo de jogo do utilizador para hoje" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "hr" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "O número de minutos a ajustar para o limite de hoje" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "O número de horas a ajustar para o limite de hoje" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Adicionar tempo especificado (recompensa)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Subtrair o tempo especificado (penalização)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Definir este limite de tempo específico" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Informação sobre TempoDeJogo" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Tempo de jogo real disponível hoje (em tempo real, disponível quando o " "utilizador tem sessão iniciada)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "TempoDeJogo restante (atual):" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Formato: " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "PlayTime disponível hoje (guardado, não em tempo real)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "PlayTime restante (hoje):" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Contagem de actividades do Active PlayTime (em tempo real, disponível quando o " "utilizador tem sessão iniciada)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Actividades correntes (reais):" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "Tempo de Jogo despendido hoje (indicado guardado, não em tempo real)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "Tempo de jogo gasto (hoje):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "Breve informação sobre o tempo despendido e tudo o que se relaciona com a " "gestão do tempo para este dia" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Info & Hoje" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Isto permite-lhe configurar limites de tempo." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Limites dos dias da semana" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Escolha as horas a ajustar para os dias seleccionados." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Escolha os minutos a ajustar para os dias seleccionados." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Aumentar o subsídio diário de tempo na unidade de tempo selecionada (horas ou " "minutos) para os dias seleccionados.\n" "Tenha em atenção que pode selecionar mais do que um dia para o ajustamento!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Diminuir o subsídio diário de tempo na unidade de tempo selecionada (horas ou " "minutos) para os dias seleccionados.\n" "Tenha em atenção que pode selecionar mais do que um dia para o ajustamento!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Lista o dia da semana e informações adicionais sobre o limite do dia.\n" "\n" "Por favor ative/desative dias para o utilizador." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Intervalos de horas para o dia selecionado disponíveis para o utilizador.\n" "A opção \"∞\" indica que o tempo gasto durante este intervalo não será " "contabilizado para o limite diário, mas sim como inativo.\n" "\n" "Tenha em atenção que se o limite do dia terminar às 24:00 e o limite do dia " "seguinte começar às 00:00, o utilizador pode trabalhar continuamente depois da " "meia-noite.\n" "\n" "Tenha em atenção que não podem ser configurados vários intervalos na mesma " "hora.\n" "Um intervalo pode começar ou terminar ou conter uma hora específica, mas não " "mais do que uma vez. Isto foi concebido e não é um erro.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Intervalos horários" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Crie um novo intervalo de tempo que estará disponível para o utilizador.\n" "\n" "Depois de criar o intervalo, edite as suas horas de início e fim diretamente na " "lista de intervalos." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "" "Eliminar o intervalo de tempo selecionado da lista de intervalos disponível." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "insira intervalo horário" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "verificar" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Verificar os intervalos de tempo configurados. Este é um passo obrigatório para " "garantir que os intervalos estão correctos.\n" "\n" "Os intervalos que apresentarem problemas serão destacados." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Limites semanais e mensais" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "d" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Escolha os dias a serem ajustados para o período selecionado." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Selecionar as horas a ajustar para o período selecionado." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Escolha os minutos a ajustar para o período selecionado." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Aumentar o subsídio de tempo semanal ou mensal pela unidade de tempo " "selecionada (dias, horas ou minutos) para o período selecionado." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Diminuir o subsídio de tempo semanal ou mensal pela unidade de tempo " "selecionada (dias, horas ou minutos) para o período selecionado." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Limites semanais e mensais para o utilizador.\n" "\n" "Estes limites são aplicados ao utilizador juntamente com o resto da " "configuração de limites." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Aplicar limites diários" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Aplicar limitar todas as alterações efectuadas nesta página" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Configuração do limite diário para todos os dias da semana" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Limitar configuração" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Definições para atividades TempoDeJogo" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "Opções TempoDeJogo" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Ativar TempoDeJogo para o utilizador selecionado" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Ativar TempoDeJogo:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Ativar a substituição do PlayTime para o utilizador selecionado.\n" "\n" "Esta definição substitui a contabilização do tempo de forma a que o tempo só " "seja contabilizado quando pelo menos uma das aplicações da lista de actividades " "do PlayTime estiver em execução!\n" "\n" "Isto afecta apenas a contabilização do tempo, os intervalos continuam a ser " "totalmente aplicados!\n" "\n" "Se nenhum processo estiver a ser executado, o tempo é contabilizado como " "inativo, pelo que é efetivamente tempo livre para o utilizador!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Ativar a substituição do PlayTime:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Permitir atividades do PlayTime durante intervalos de tempo não contabilizados " "(\"∞\") para o usuário selecionado.\n" "\n" "Esta definição permite que o utilizador utilize as aplicações configuradas na " "sua lista de actividades do PlayTime durante os intervalos de tempo marcados " "como não contabilizados (\"∞\").\n" "\n" "Se esta definição for activada, a utilização de actividades não será " "contabilizada para os limites do PlayTime, caso contrário, as aplicações na " "lista de actividades do PlayTime serão terminadas assim que forem iniciadas " "durante intervalos de tempo não contabilizados (\"∞\")." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Permitido durante os intervalos \"∞\":" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Isto permite-lhe configurar os limites do PlayTime." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "Limites do PlayTime" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Aumentar o tempo de jogo diário na unidade de tempo selecionada (horas ou " "minutos) para os dias seleccionados.\n" "\n" "Tenha em atenção que pode selecionar mais do que um dia para o ajuste!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Diminuir o tempo de jogo diário na unidade de tempo selecionada (horas ou " "minutos) para os dias seleccionados.\n" "\n" "Tenha em atenção que pode selecionar mais do que um dia para o ajuste!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Lista o dia da semana e informações adicionais sobre o limite do PlayTime do " "dia.\n" "\n" "Active/desactive os dias para o utilizador e defina o limite de tempo para as " "actividades do PlayTime." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "Actividades PlayTime" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Adicionar nova atividade PlayTime.\n" "\n" "Especifique a máscara da atividade e a descrição de fácil utilização " "diretamente na lista de actividades." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Remover a entrada selecionada das actividades do PlayTime." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Especifique uma lista de nomes completos de processos (executáveis) sem caminho " "como cadeias de caracteres sensíveis a maiúsculas e minúsculas a monitorizar no " "sistema.\n" "\n" "Também é possível especificar máscaras RegExp para os processos, mas tenha " "muito cuidado com elas, pois a utilização incorrecta desta definição pode levar " "à eliminação de processos indesejados para o utilizador!\n" "\n" "NOTA: RegExp é uma configuração de perito!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Aplicar a configuração do PlayTime" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "Aplicar limites do PlayTime e alterações de configuração nesta página" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "Configuração do PlayTime" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Opções de configuração adicionais" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Seleccione se o tempo de sessão inativa é contabilizado.\n" "\n" "Se esta opção não estiver selecionada, o tempo gasto em sessões de início de " "sessão na consola (não no emulador de terminal) e enquanto o ecrã estiver " "bloqueado NÃO é tido em conta. Isto varia consoante os ambientes de trabalho." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Contabilizar sessões inativas:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Selecione se o ícone de cadeado do Timekpr-next e as notificações devem ser " "exibidos para o usuário.\n" "\n" "Atenção: marcar esta opção desativará a exibição de todas as informações e " "notificações para o usuário!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Esconder ícones e notificações:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Seleccione um tipo de restrição/bloqueio para o utilizador.\n" "\n" "NOTA: tenha muito cuidado, pense com antecedência e leia a descrição de todas " "as opções quando alterar esta definição do valor predefinido!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Restrição / tipo de tranca:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "terminar sessões" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Quando o tempo terminar, as sessões dos utilizadores serão terminadas.\n" "\n" "Esta opção é uma restrição!\n" "\n" "Esta é a opção predefinida e, muito provavelmente, é a opção de que necessita!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "finalizar sessões" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Quando o tempo acabar, as sessões do usuário serão finalizadas.\n" "\n" "Esta opção é uma restrição!\n" "\n" "Avalie se precisa deste tipo de restrição!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "encerrar o computador" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Quando o tempo terminar, o computador será desligado.\n" "\n" "Esta opção é uma restrição!\n" "\n" "Avalie se precisa deste tipo de restrição!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "suspender computador" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Quando o tempo terminar, o computador será suspenso (colocado a dormir).\n" "\n" "Esta opção não é uma restrição e é mais adequada para fins de auto-controlo.\n" "\n" "Se for acordado quando ainda não houver tempo, o ecrã do computador será " "bloqueado e colocado novamente em suspensão após algum tempo." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "suspender / acordar computador" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Quando o tempo terminar, o computador será suspenso (colocado a dormir) e será " "acordado no início do próximo intervalo de tempo disponível para o utilizador.\n" "\n" "Esta opção não é uma restrição e é mais adequada para fins de auto-controlo.\n" "\n" "Se for acordado quando ainda não houver tempo, o ecrã do computador será " "bloqueado e colocado novamente em suspensão após algum tempo." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "ecrã de bloqueio" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Quando o tempo terminar, o ecrã do computador será bloqueado.\n" "\n" "Esta opção não é uma restrição e é mais adequada para fins de auto-controlo." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Seleccione um intervalo de tempo em que o computador pode ser acordado " "automaticamente.\n" "\n" "Tenha em atenção que esta opção só é eficaz se o despertar por RealTime Clock " "for suportado e ativado na BIOS / UEFI!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Intervalo de hora de acordar:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Introduzir a hora de início para a função de despertar automático.\n" "\n" "Tenha em atenção que esta opção só é eficaz se o despertar por RealTime Clock " "for suportado e ativado na BIOS / UEFI!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Introduzir a hora final para a função de despertar automático.\n" "\n" "Tenha em atenção que esta opção só é eficaz se o despertar por RealTime Clock " "for suportado e ativado na BIOS / UEFI!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Aplicar configuração" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Aplicar alterações de configuração adicionais nesta página" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Configuração adicional" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Opções adicionais" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Configuração do Utilizador" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Configuração relacionada com o Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Controlar Definições Timekpr-nExT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Nível de registo do Timekpr-nExT.\n" "\n" "Por favor, não altere isso a menos que seja necessário. É provável que não " "encontre nada de bonito nos ficheiros de registo.\n" "\n" "Os valores são: 1 - standard, 2 - debug, 3 - extra debug" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Granularidade do tempo de sondagem da sessão que especifica a frequência com " "que as sessões e a atividade do utilizador são verificadas e contabilizadas.\n" "\n" "3 - 5 segundos é o ideal, não altere isto se não tiver a certeza." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Intervalo de verificação" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Especifique o tempo, em segundos, durante o qual o Timekpr-nExT inicia a " "contagem decrescente contínua em tempo real antes de impor uma restrição/" "bloqueio às sessões do utilizador." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Especifica a taxa em segundos a que o estado real do utilizador é guardado no " "disco.\n" "\n" "Para melhorar o desempenho e continuar a ter grande precisão, o Timekpr-nExT " "contabiliza o tempo na memória com a frequência \"Poll interval\" (Intervalo de " "sondagem), esta definição define a frequência com que o estado do utilizador é " "guardado no disco para armazenamento permanente." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Guardar tempo" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Número de segundos restantes para o utilizador antes de impor uma restrição / " "bloqueio configurado para suas sessões.\n" "\n" "Depois de isso ser alcançado e se o utilizador ainda estiver ativo, as sessões " "do utilizador serão tratadas de acordo com a restrição / bloqueio especificado, " "e quase nada pode ser feito para o impedir." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Tempo de encerramento" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Tempo de contagem decrescente" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Nível de registo" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Número de segundos restantes para o tempo disponível do utilizador antes de " "enviar uma notificação crítica final de que o tempo está prestes a esgotar-se.\n" "\n" "NOTA: o resto dos tempos de notificação são configuráveis de utilizador por " "utilizdor na aplicação cliente!" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Notificação final" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Controlar itens de rastreio Timekpr-nExT" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Sessões Contabilizadas" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Adicionar tipo de sessão rastreada à lista" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Remover tipo de sessão rastreada da lista" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Lista dos tipos de sessão a rastrear.\n" "\n" "Por favor, não mude ou faça experiências com isto a menos que saiba realmente " "(e não apenas desejavelmente) o que está a fazer." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Sessões Excluídas" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Adicionar um tipo de sessão excluída à lista" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Remover um tipo de sessão excluído da lista" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Lista de sessões a excluir do rastreio.\n" "\n" "Por favor, não mude ou faça experiências com isto a menos que realmente (e não " "apenas desejavelmente) saiba o que está a fazer fazer." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Utilizadores Excluídos" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Adicionar um utilizador à lista de exclusão" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Remover um utilizador da lista de exclusão" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "Lista de utilizadores excluídos do rastreio.\n" "\n" "Por favor especifique nomes de utilizadores atuais, e não nomes reais aqui. Por " "exemplo, \"jsmith\", não \"John Smith\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Esta definição controla se a funcionalidade de Tempo Livre está ativada.\n" "\n" "Este é um interruptor mestre do Tempo Livre, se estiver desligado, está " "desligado para todos independentemente das configurações individuais!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "Tempo Livre ativado:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Esta configuração controla se o monitor de atividade de Tempo Livre usará a " "linha de comando do processo, incluindo argumentos, para monitorizar processos " "(por defeito usa apenas o nome do processo).\n" "\n" "Quando esta definição estiver ativada, o Timekpr-nExT efetuará uma " "correspondência com a linha de comandos completa até 512 caracteres capacidades " "de monitorização de processos melhoradas.\n" "\n" "Por favor, tenha cuidado e verifique novamente as suas regras de RegExp nas " "máscaras de atividade de Tempo Livre de cada utilizador individualmente!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Monitor de atividade melhorado:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Aplicar as definições do Timekpr-nExT" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Aplicar todas as definições do Timekpr-nExT imediatamente" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Configuração de Administração Timekpr-nExT" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Configuração Timekpr-nExT" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "Estado do cliente administrador do Timekpr-nExT" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Informação" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Aviso" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Severo" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Crítico" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Cliente Timekpr-nExT" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Estado do cliente Timekpr-nExT" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Guardar todas as alterações" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Fechar a janela" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Nome de utilizador efetivo corrente" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Estatísticas atuais" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "Tempo gasto nesta sessão ou após o Timekpr-nExT ter sido reiniciado" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Tempo gasto (sessão):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "Tempo inativo desta sessão ou após Timekpr-nExT ter sido reiniciado" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Tempo inativo:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "Tempo contínuo restante para si. Pode abranger mais do que o dia atual." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Tempo contínuo restante:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Tempo total de seguida disponível restante para hoje, até o final do dia" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Tempo restante hoje:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Estes são os dias e limites que estão disponíveis para si" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Dias & Limites" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Isto mostra os intervalos de tempo que estão disponíveis para uso.\n" "\n" "A opção \"∞\" indica que o tempo gasto durante este intervalo não será " "contabilizado para o limite diário, mas sim como ocioso." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervalos" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Limites diários" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Estatísticas adicionais" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Tempo gasto esta semana" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Tempo gasto neste mês" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Selecione se o tempo de sessão inativa é contado.\n" "\n" "Se isto não estiver marcado, o tempo gasto em sessões de login na console (não " "no emulador de terminal) e enquanto o ecrã estiver bloqueado NÃO será tomado em " "conta.\n" "Isto varia conforme os ambientes de trabalho." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Contabilizar inativo:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Selecione se o tempo de sessão inativa é contado. Se isto não estiver marcado, " "o tempo gasto em sessões de login no console (não no emulador de terminal) e " "enquanto o ecrã estiver bloqueado NÃO será tomado em conta. Isto varia conforme " "os ambientes de trabalho." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Limites adicionais" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Tempo limite para esta semana disponível para si" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Tempo limite (semana):" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Tempo limite para este mês disponível para si" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Tempo limite (mês):" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "Estatísticas atuais do Tempo Livre" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Total de Tempo Livre restante disponível hoje" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Total de Tempo Livre gasto hoje" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Tempo gasto hoje:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Esta opção substitui a contabilização de tempo padrão.\n" "\n" "Se estiver marcada, o tempo será contabilizado somente quando as atividades em " "\"Lista de atividades / aplicações\" estiverem em execução, o restante do tempo " "será considerado ocioso." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Substituição do limite de tempo:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Número de atividades ativas de Tempo Livre no momento" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Atividades em execução:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Permitir atividades durante intervalos de tempo não contabilizados (\"∞\").\n" "\n" "Esta configuração permite usar aplicações listadas em \"Lista de aplicações / " "atividades\" durante intervalos de tempo que são marcados como não " "contabilizados (\"∞\"), se a configuração não estiver habilitada, nenhuma das " "atividades tem permissão para ser executada!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Permitido durante \"∞\":" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "Estes são os dias e limites disponíveis para si como parte das restrições de " "atividade do Tempo Livre" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "Isso mostra atividades/aplicações que fazem parte das restrições do Tempo Livre" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Lista de atividades / aplicações" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuração para notificações personalizadas sobre o tempo disponível.\n" "\n" "Configure as notificações como achar melhor. No entanto, tenha em mente que " "haverá dois tipos de notificações que não podem ser personalizadas: um aviso " "final algum tempo antes do tempo acabar e notificações de contagem decrescente " "quando o tempo estiver prestes a acabar.\n" "\n" "O valor de configuração \"Tempo\" indica um valor de tempo restante quando a " "notificação será exibida, a opção \"Importância\" atribui uma cor de ícone e " "propriedades de notificação da seguinte forma.\n" "\n" "Informação - um ícone verde e uma notificação informativa serão exibidos\n" "Aviso - um ícone amarelo e uma notificação informativa serão exibidos\n" "Grave - um ícone vermelho e uma notificação importante serão exibidos\n" "Crítico - um ícone vermelho e uma notificação crítica serão exibidos, esta " "notificação geralmente é exibida em todas as aplicações abertas e permanece " "aberta até ser descartada, no entanto, este comportamento depende muito do " "Ambiente de Trabalho em uso" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Configuração de notificação" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Adicionar novo limite de notificação à lista" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Remover limite de notificação da lista" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuração para notificações personalizadas sobre o Tempo Livre disponível.\n" "\n" "Configure as notificações como achar melhor.\n" "\n" "O valor de configuração \"Tempo\" indica um valor de Tempo Livre restante " "quando a notificação será exibida, a opção \"Importância\" controla a cor do " "ícone e as propriedades de notificação da seguinte forma.\n" "\n" "Informações - um ícone verde e uma notificação informativa serão exibidos\n" "Aviso - um ícone amarelo e uma notificação informativa serão exibidos\n" "Grave - um ícone vermelho e uma notificação importante serão exibidos\n" "Crítico - um ícone vermelho e uma notificação crítica serão exibidos, essa " "notificação geralmente é exibida em todas as aplicações abertas e permanece " "aberta até ser descartada, no entanto, esse comportamento depende muito do " "Ambiente de Trabalho em uso" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Configuração de notificação do Tempo Livre" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Adicionar novo limite de notificação do Tempo Livre à lista" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Remover limite de notificação do Tempo Livre da lista" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Notificações" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Selecione se deseja usar notificações faladas, se disponíveis.\n" "\n" "Pode tornar as notificações faladas disponíveis ao instalar o pacote \"python3-" "espeak\" ou \"python3-espeak-ng\"." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Usar notificação vocais" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Isto define o nível de registo.\n" "\n" "Por favor, não altere isto a menos que saiba o que está a fazer." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Nível de registo" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Especifique se deseja mostrar uma notificação quando houver alterações nas " "configurações de limite ou permissão" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Mostrar alterações de limite" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Especifique se deseja mostrar todas as notificações.\n" "\n" "Se desmarcado, somente as importantes serão mostradas." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Mostrar todas as notificações" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Especifique se deseja mostrar segundos na área de notificação.\n" "\n" "Alguns ambientes de trabalho, como o KDE5, não suportam texto ao lado de ícones " "de notificação." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Mostrar segundos na área de notificação" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Isto define por quanto tempo uma notificação é mostrada para notificações " "regulares sobre tempo restante e alterações de configuração.\n" "\n" "O valor é especificado em segundos.\n" "\n" "Um valor de 0 significa mostrar até ser descartado (não recomendado para " "notificações regulares).\n" "\n" "Note que o ambiente de trabalho que usa pode substituir esse tempo limite, " "nesse caso essa configuração não terá nenhum efeito na notificação." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Tempo de intervalo de notificação (seg)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Isto define por quanto tempo uma notificação é mostrada para notificações " "\"Críticas\" sobre o tempo restante (quando o ícone fica vermelho).\n" "\n" "O valor é especificado em segundos.\n" "Um valor de 0 significa mostrar até ser descartado.\n" "\n" "Note que o ambiente de trabalho que usa pode substituir esse tempo limite, " "nesse caso essa configuração não terá nenhum efeito na notificação." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Tempo limite de notificação crítica (seg)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Selecione se deseja usar o som \"sineta\" (som de notificação curto) para " "anunciar uma nova notificação do Timekpr-nExT.\n" "\n" "Isto funciona apenas para notificações ativadas.\n" "\n" "Se esta configuração não for editável, o seu ambiente não anuncia suporte a " "notificação sonora." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Usar som de \"campainha\" para notificações" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Configuração" #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Direitos de Cópia (c) 2018-2021 Eduards Bezverhijs" #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> definir tipo de restrição/bloqueio (\"trancado\" - bloquear sessão, " #~ "\"suspender\" - suspender o computador, \"suspendeacorda\" - suspender e " #~ "ativar, \"terminar\" - encerrar sessões, \"encerrar\" - desligar o " #~ "computador), exemplos" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Seleccione se pretende mostrar o ícone de cadeado do Timekpr-next e as " #~ "notificações ao utilizador.\n" #~ "\n" #~ "Tenha em atenção que desmarcar esta opção irá desativar a apresentação de " #~ "todas as informações e notificações ao utilizador!" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Selecione se deseja usar notificações faladas, se disponíveis.\n" #~ "\n" #~ "Pode tornar as notificações faladas disponíveis ao instalar o pacote " #~ "\"python3-espeak\"." timekpr-next/resource/locale/pt/LC_MESSAGES/timekpr.mo000644 001750 001750 00000222046 15122253261 024506 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–«®–Z˜u˜.’˜LÁ˜7™F™Q]™>¯™\î™Kškfš¹Òš©Œ›N6œ9…œ.¿œî�³ïž-£Ÿ/ÑŸ‘ {“ E¡[U¡R±¡B¢G¢M¢pb¢"Ó¢iö¢-`£/Ž£“¾£>R¤/‘¤)Á¤,ë¤5¥N¥%g¥�¥ ¥´¥2Í¥W¦cX¨¼©6Ø©&ª6ª7Oª$‡ªJ¬ª'÷ª?«;_«›«²«>Ë«j ¬>u¬6´¬:ë¬8&­9_­I™­Mã­1®A®0`®‘®J ®%ë±$¶6¶P¶ W¶Hb¶…«¶1·#K·(o·0˜·9É·R¸V¸±t¸&¹,/¹#\¹#€¹¤¹=¹¹÷¹º@ ºMº¹\ºÂ»‡Ù»Ma¼ž¯¼0N½9½û¹½$µ¿Ú¿î¿ö¿¾ÀÃÕÀ™Á­Á.ÅÁ7ôÁK,Â3xÂL¬Â0ùÂ*Ã¥9ÃßÃ6óÃO*Ä3zÄ/®ÄHÞÄ&'Å,NÅ%{Å¡Å"¤Å;ÇÅÆ`Æ‘yÈ( É4É EɹRÉ ʇÏÊ WË cËpË*�ËEºËÌ6Ì5JÌ €Ì$‹Ì°Ì·ÌÎ̬çÌ´”Í+IÎ¥uλÏy×ÏQÐ*cÐEŽÐ!ÔÐöÐÑÑ-Ñ)MÑwÑ6†ÑJ½ÑÓ?Ô\Ô eÔqÔ>†ÔBÅÔkÕ8tÕ­ÕCÈÕ ÖW!ÖpyÖQêÖ2<×Ko×,»×èר Ø.4ØcØIxØÂØEÞØJ$Ù)oÙ-™Ù»ÇÙƒÛ.žÛHÍÛ*ÜAÜYÜ7nÜ+¦Ü-ÒÜ Ý(!Ý:JÝ*…Ý °Ý5ºÝAðÝ2ÞPÞoÞ‰Þ §Þ'µÞ@ÝÞ'ßÑFßÔàíà*üá 'ãÝ5äå³*æãÞæÂç(Òç(ûç$è+èKè*j蹕èvOéoÆé¦6êÝê/æêë-5ëcë.yëG¨ë%ðë.ìBEì@ˆìAÉì í2&í4YíHŽí6×í5îiDî<®îÞëî3Êð-þðø,ñƒ%ò²©ód\õ&ÁõÞè÷SÇøÊùxæù_ûChû>¬ûëûEüHüWüoü†ü›ü­üÂüMÙü/'ý1Wý"‰ý¬ýÀý×ýëýþ8þEQþ—þ;¯þ>ëþ*ÿ <ÿ.Iÿxÿ)”ÿ¾ÿÛÿ-ðÿ0àO0-Ky.~­JÍ-DF:‹$Æë !9oN}¾v<m³l!lŽ+û'2A>t ³Ô4ñ4&'[1ƒnµ{$k O h\ MÅ C \W A´ Nö gE L­ Kú RF k™ P ]V X´ ; YI<£6àM3e;™:ÕWph`Ù6:Tq3ÆGú`BD£Fè8/QhKºJcQJµ<S=9‘ËÞ+ò»¤Ú�£¾ÆŽáAp”²†G„Î+S’ÀÓ$ò,FDB‹=Î (@FeH®±ÁÔæèì/ð ; N d ƒ ˜  ª ½¶ t#|#�# £#x­#c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:17+0300 Last-Translator: Eduards Bezverhijs Language-Team: Portuguese Language: pt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s minuto%(n)s minutos%(n)s segundo%(n)s segundos%(n)s segundo restante%(n)s segundo restantes%(n)s segundo de Tempo Livre restante%(n)s segundos de Tempo Livre restante%(n)s utilizador no total:%(n)s utilizadores no total:---=== NOTÃ�CIA ===---==> obter informações de tempo do utilizador em tempo real do servidor, exemplo==> obter a lista de utilizadores gravada no servidor, exemplo==> obter informação temporal e configuração do utilizador a partir do servidor, exemplo==> mostrar ajuda, exemplo==> definir máscaras de processo da atividade TempoDeJogo, para as quais o tempo é contabilizado, exemplo==> definir o TempoDeJogo restante para o utilizador no momento atual: "+" (adicionar tempo), "-" (subtrair tempo), "=" (definir o tempo exato disponível), exemplo (adicionar uma hora)==> definir limites de TempoDeJogo para todos os dias permitidos, o número de valores não deve exceder os dias de TempoDeJogo permitidos para o utilizador, por exemplo==> definir os dias permitidos para as actividades do TempoDeJogo, por exemplo==> definir os dias permitidos para o utilizador, exemplo==> definir as horas permitidas para o dia especificado, ou "TODAS" para todos os dias, opcionalmente especificar os minutos de início e de fim entre parênteses como este [x-y], adicionalmente especificar ! à frente da hora se não tiver de ser contabilizado (tempo livre para o utilizador), exemplo==> definir tipo de restrição/bloqueio ("trancado" - bloquear sessão, "suspender" - suspender o computador, "suspendeacorda" - suspender e ativar, "terminar" - encerrar sessões, "kill" - finalizar sessões, "encerrar" - desligar o computador), exemplos==> definir o tempo restante para o utilizador no momento atual: "+" (adicionar tempo), "-" (subtrair tempo), "=" (definir o tempo exato disponível), exemplo (adicionar uma hora)==> definir limite de tempo por mês, exemplo==> definir limite de tempo por semana, exemplo==> definir limites de tempo para todos os dias permitidos, o número dos valores não deve exceder os dias permitidos para o utilizador, exemplo==> definir se as actividades do TempoDeJogo são permitidas durante os intervalos não contabilizados ("∞"), por exemplo==> definir se o TempoDeJogo está ativado para o utilizador, exemplo==> definir se o TempoDeJogo deve ser contabilizado em vez da atividade normal, por exemplo==> definir se deseja ocultar o ícone da bandeja e evitar notificações, exemplo==> definir se contabiliza sessões de utilizador inativo, exemploSobreSobre o Timekpr-nExTContagem de actividades do Active PlayTime (em tempo real, disponível quando o utilizador tem sessão iniciada)Lista de atividades / aplicaçõesTempo de jogo real disponível hoje (em tempo real, disponível quando o utilizador tem sessão iniciada)Adicionar um utilizador à lista de exclusãoAdicionar um tipo de sessão excluída à listaAdicionar nova atividade PlayTime. Especifique a máscara da atividade e a descrição de fácil utilização diretamente na lista de actividades.Adicionar novo limite de notificação do Tempo Livre à listaAdicionar novo limite de notificação à listaAdicionar tempo especificado (recompensa)Adicionar tipo de sessão rastreada à listaO PlayTime adicional para o utilizador foi processadoConfiguração adicionalOpções de configuração adicionaisLimites adicionaisOpções adicionaisEstatísticas adicionaisO tempo adicional para o utilizador foi processadoPermitir atividades do PlayTime durante intervalos de tempo não contabilizados ("∞") para o usuário selecionado. Esta definição permite que o utilizador utilize as aplicações configuradas na sua lista de actividades do PlayTime durante os intervalos de tempo marcados como não contabilizados ("∞"). Se esta definição for activada, a utilização de actividades não será contabilizada para os limites do PlayTime, caso contrário, as aplicações na lista de actividades do PlayTime serão terminadas assim que forem iniciadas durante intervalos de tempo não contabilizados ("∞").Permitir atividades durante intervalos de tempo não contabilizados ("∞"). Esta configuração permite usar aplicações listadas em "Lista de aplicações / atividades" durante intervalos de tempo que são marcados como não contabilizados ("∞"), se a configuração não estiver habilitada, nenhuma das atividades tem permissão para ser executada!Ajustamentos de empréstimoOs dias permitidos para o utilizador foram processadosPermitido durante os intervalos "∞":Permitido durante "∞":As horas permitidas para o utilizador foram processadasAplicar a configuração do PlayTimeAplicar limites do PlayTime e alterações de configuração nesta páginaAplicar as definições do Timekpr-nExTAplicar alterações de configuração adicionais nesta páginaAplicar todas as definições do Timekpr-nExT imediatamenteAplicar configuraçãoAplicar limites diáriosAplicar limitar todas as alterações efectuadas nesta páginaBreve informação sobre o tempo despendido e tudo o que se relaciona com a gestão do tempo para este diaEscolha os dias a serem ajustados para o período selecionado.Escolha as horas a ajustar para os dias seleccionados.Selecionar as horas a ajustar para o período selecionado.Escolha os minutos a ajustar para os dias seleccionados.Escolha os minutos a ajustar para o período selecionado.Escolha esta opção para ajustar o tempo de jogo do utilizador para hojeEscolha esta opção para ajustar o tempo disponível do utilizador para hojeFechar a janelaComando FALHADO: acesso negadoComando FALHADO: a comunicação não foi aceiteConfiguraçãoConfiguração para notificações personalizadas sobre o Tempo Livre disponível. Configure as notificações como achar melhor. O valor de configuração "Tempo" indica um valor de Tempo Livre restante quando a notificação será exibida, a opção "Importância" controla a cor do ícone e as propriedades de notificação da seguinte forma. Informações - um ícone verde e uma notificação informativa serão exibidos Aviso - um ícone amarelo e uma notificação informativa serão exibidos Grave - um ícone vermelho e uma notificação importante serão exibidos Crítico - um ícone vermelho e uma notificação crítica serão exibidos, essa notificação geralmente é exibida em todas as aplicações abertas e permanece aberta até ser descartada, no entanto, esse comportamento depende muito do Ambiente de Trabalho em usoConfiguração para notificações personalizadas sobre o tempo disponível. Configure as notificações como achar melhor. No entanto, tenha em mente que haverá dois tipos de notificações que não podem ser personalizadas: um aviso final algum tempo antes do tempo acabar e notificações de contagem decrescente quando o tempo estiver prestes a acabar. O valor de configuração "Tempo" indica um valor de tempo restante quando a notificação será exibida, a opção "Importância" atribui uma cor de ícone e propriedades de notificação da seguinte forma. Informação - um ícone verde e uma notificação informativa serão exibidos Aviso - um ícone amarelo e uma notificação informativa serão exibidos Grave - um ícone vermelho e uma notificação importante serão exibidos Crítico - um ícone vermelho e uma notificação crítica serão exibidos, esta notificação geralmente é exibida em todas as aplicações abertas e permanece aberta até ser descartada, no entanto, este comportamento depende muito do Ambiente de Trabalho em usoConfiguração para o utilizador %s:Configuração recuperadaLigadoA ligar...Tempo contínuo restante para si. Pode abranger mais do que o dia atual.Tempo contínuo restante. Pode abranger mais do que o dia atual (em tempo real, disponível quando o utilizador tem sessão iniciada)Tempo contínuo restante:Controlar Definições Timekpr-nExTControlar itens de rastreio Timekpr-nExTTipos de sessões de controlo não são passadasLista de tipos de sessões de controlo não está corretaLista de tipos de sessões de controlo não está correta e não pode ser definidaTempo de contagem decrescenteCrie um novo intervalo de tempo que estará disponível para o utilizador. Depois de criar o intervalo, edite as suas horas de início e fim diretamente na lista de intervalos.CríticoTempo limite de notificação crítica (seg)Estatísticas atuais do Tempo LivreNome de utilizador efetivo correnteEstatísticas atuaisConfiguração do limite diário para todos os dias da semanaLimites diáriosDiaOs limites de tempo diários para o utilizador foram processadosDias & LimitesDiminuir o tempo de jogo diário na unidade de tempo selecionada (horas ou minutos) para os dias seleccionados. Tenha em atenção que pode selecionar mais do que um dia para o ajuste!Diminuir o subsídio diário de tempo na unidade de tempo selecionada (horas ou minutos) para os dias seleccionados. Tenha em atenção que pode selecionar mais do que um dia para o ajustamento!Diminuir o subsídio de tempo semanal ou mensal pela unidade de tempo selecionada (dias, horas ou minutos) para o período selecionado.Eliminar o intervalo de tempo selecionado da lista de intervalos disponível.Eduards Bezverhijs (Afinação de Traduções por JP Lord ) (Afinação de Inglês por Phil Hudson )Ativar TempoDeJogo para o utilizador selecionadoA ativação do PlayTime para o utilizador foi processadaAtivar a substituição do PlayTime para o utilizador selecionado. Esta definição substitui a contabilização do tempo de forma a que o tempo só seja contabilizado quando pelo menos uma das aplicações da lista de actividades do PlayTime estiver em execução! Isto afecta apenas a contabilização do tempo, os intervalos continuam a ser totalmente aplicados! Se nenhum processo estiver a ser executado, o tempo é contabilizado como inativo, pelo que é efetivamente tempo livre para o utilizador!Ativar a substituição do PlayTime:Ativar TempoDeJogo:AtivadoMonitor de atividade melhorado:Introduzir a hora final para a função de despertar automático. Tenha em atenção que esta opção só é eficaz se o despertar por RealTime Clock for suportado e ativado na BIOS / UEFI!Introduzir a hora de início para a função de despertar automático. Tenha em atenção que esta opção só é eficaz se o despertar por RealTime Clock for suportado e ativado na BIOS / UEFI!Sessões ExcluídasUtilizadores ExcluídosTipos de sessão excluídos não são passadosLista de tipos de sessão excluídos não está corretaLista de tipos de sessão excluídos não está correta e não ser definidaLista de utilizadores excluídos não está corretaLista de utilizadores excluídos não está correta e não pode ser definidaLista de utilizadores excluídos não é passadaFalha ao ligarO recurso "%%s", que é usado para detetar o tempo ocioso, não pode ser ativado! O tempo ocioso / inativo pode não ser contabilizado quando o ecrã está trancado!Notificação finalA hora final da notificação "%%s" não está corretaA hora final da notificação "%%s" não está correta e não pode ser definidaA hora da notificação final não foi ultrapassadaÚltimo aviso de tempo "%%s" não está corretoO tempo de aviso final "%%s" não está correto e não pode ser definidoÚltimo aviso de tempo não é passadoFormato: Formato: DeEsconder ícones e notificações:Ocultar o ícone do painel para o utilizador foi processadoIntervalos horáriosIntervalos de horas para o dia selecionado disponíveis para o utilizador. A opção "∞" indica que o tempo gasto durante este intervalo não será contabilizado para o limite diário, mas sim como inativo. Tenha em atenção que se o limite do dia terminar às 24:00 e o limite do dia seguinte começar às 00:00, o utilizador pode trabalhar continuamente depois da meia-noite. Tenha em atenção que não podem ser configurados vários intervalos na mesma hora. Um intervalo pode começar ou terminar ou conter uma hora específica, mas não mais do que uma vez. Isto foi concebido e não é um erro. Quanto tempo o utilizador esteve inativo desde o último início de sessão (em tempo real, disponível quando o utilizador tem sessão iniciada)Erro de inicialização do ícone (%%s)!Ã�cone, não é?ImportânciaAumentar o tempo de jogo diário na unidade de tempo selecionada (horas ou minutos) para os dias seleccionados. Tenha em atenção que pode selecionar mais do que um dia para o ajuste!Aumentar o subsídio diário de tempo na unidade de tempo selecionada (horas ou minutos) para os dias seleccionados. Tenha em atenção que pode selecionar mais do que um dia para o ajustamento!Aumentar o subsídio de tempo semanal ou mensal pela unidade de tempo selecionada (dias, horas ou minutos) para o período selecionado.Info & HojeInformaçãoInformação sobre TempoDeJogoInformações sobre tempo restante / gastoErro de ligação interna, por favor consulte os ficheiros de registoIntervalo removidoO início do intervalo não pode ser o mesmo que o fimO início do intervalo não pode ser posterior ao fimIntervalosManter controlo do uso do computadorLimiteLimitar configuraçãoLimites & configuraçãoLista dos tipos de sessão a rastrear. Por favor, não mude ou faça experiências com isto a menos que saiba realmente (e não apenas desejavelmente) o que está a fazer.Lista de sessões a excluir do rastreio. Por favor, não mude ou faça experiências com isto a menos que realmente (e não apenas desejavelmente) saiba o que está a fazer fazer.Lista de utilizadores registados no sistemaLista de utilizadores excluídos do rastreio. Por favor especifique nomes de utilizadores atuais, e não nomes reais aqui. Por exemplo, "jsmith", não "John Smith".Lista o dia da semana e informações adicionais sobre o limite do PlayTime do dia. Active/desactive os dias para o utilizador e defina o limite de tempo para as actividades do PlayTime.Lista o dia da semana e informações adicionais sobre o limite do dia. Por favor ative/desative dias para o utilizador.Nível de registoNível de Registo "%%s" não está corretoO nível de registo "%%s" não está correto e não pode ser definidoNível de registo não é passadoNível de registoMensalNotas, leia cuidadosamente ;)Configuração de notificaçãoTempo de intervalo de notificação (seg)NotificaçõesNúmero de atividades ativas de Tempo Livre no momentoNúmero de segundos restantes para o utilizador antes de impor uma restrição / bloqueio configurado para suas sessões. Depois de isso ser alcançado e se o utilizador ainda estiver ativo, as sessões do utilizador serão tratadas de acordo com a restrição / bloqueio especificado, e quase nada pode ser feito para o impedir.Número de segundos restantes para o tempo disponível do utilizador antes de enviar uma notificação crítica final de que o tempo está prestes a esgotar-se. NOTA: o resto dos tempos de notificação são configuráveis de utilizador por utilizdor na aplicação cliente!PARAMETER PARSE ERROR (verifique a validade do parâmetro): %%sPeríodoTempoDeJogoActividades PlayTimeAs actividades do PlayTime para o utilizador foram processadasOs dias permitidos de PlayTime para o utilizador foram processadosTempo Livre permitido durante intervalos não contabilizados o sinalizador para o utilizador foi processadoPlayTime disponível hoje (guardado, não em tempo real)Configuração do PlayTimeOs limites diários do PlayTime para o utilizador foram processadosTempo Livre ativado:O sinalizador "%%s" do monitor de atividade melhorado do TempoDeJogo não está corretoO sinalizador "%%s" do monitor de atividade melhorado do TempoDeJogo não está correto e não pode ser definidoO sinalizador do monitor de atividade melhorado do TempoDeJogo não está passadoO sinalizador TempoDeJogo "%%s" não está corretoO sinalizador TempoDeJogo "%%s" não está correto e não pode ser definidoO sinalizador TempoDeJogo não está passadoTempoDeJogo restante (atual):PlayTime restante (hoje):Limites do PlayTimeConfiguração de notificação do Tempo LivreOpções TempoDeJogoA bandeira de substituição do PlayTime para o utilizador foi processadaTempo de jogo gasto (hoje):Tempo de Jogo despendido hoje (indicado guardado, não em tempo real)Por reabra a aplicação se é o superuser e o Timekpr-nExT está a correrSeleccione um dia para definir os limitesSeleccione um intervalo de horas para removerEspecifique uma lista de nomes completos de processos (executáveis) sem caminho como cadeias de caracteres sensíveis a maiúsculas e minúsculas a monitorizar no sistema. Também é possível especificar máscaras RegExp para os processos, mas tenha muito cuidado com elas, pois a utilização incorrecta desta definição pode levar à eliminação de processos indesejados para o utilizador! NOTA: RegExp é uma configuração de perito!Intervalo de verificaçãoIntervalo de verificação não é transmitidoTempo de verificação "%%s" não está correto e não pode ser definidoIntervalo de verificação não é passadoDescrição do processoMáscara do processoRemover limite de notificação do Tempo Livre da listaRemover um utilizador da lista de exclusãoRemover um tipo de sessão excluído da listaRemover tipo de sessão excluidaRemover limite de notificação da listaRemover a entrada selecionada das actividades do PlayTime.Remover tipo de sessão rastreada da listaRestaurarRestaurar configurações a partir do estado guardadoO tipo de restrição / bloqueio para o utilizador foi processadoRestrição / tipo de tranca:Actividades correntes (reais):Atividades em execução:Guardar todas as alteraçõesGuardar tempoTempo guardado "%%s" não está corretoTempo guardado "%%s" não está correto e não pode ser definidoIntervalo de gravação não é passadoSeleccione um tipo de restrição/bloqueio para o utilizador. NOTA: tenha muito cuidado, pense com antecedência e leia a descrição de todas as opções quando alterar esta definição do valor predefinido!Seleccione um intervalo de tempo em que o computador pode ser acordado automaticamente. Tenha em atenção que esta opção só é eficaz se o despertar por RealTime Clock for suportado e ativado na BIOS / UEFI!Selecione se o tempo de sessão inativa é contado. Se isto não estiver marcado, o tempo gasto em sessões de login na console (não no emulador de terminal) e enquanto o ecrã estiver bloqueado NÃO será tomado em conta. Isto varia conforme os ambientes de trabalho.Seleccione se o tempo de sessão inativa é contabilizado. Se esta opção não estiver selecionada, o tempo gasto em sessões de início de sessão na consola (não no emulador de terminal) e enquanto o ecrã estiver bloqueado NÃO é tido em conta. Isto varia consoante os ambientes de trabalho.Selecione se o tempo de sessão inativa é contado. Se isto não estiver marcado, o tempo gasto em sessões de login no console (não no emulador de terminal) e enquanto o ecrã estiver bloqueado NÃO será tomado em conta. Isto varia conforme os ambientes de trabalho.Selecione se o ícone de cadeado do Timekpr-next e as notificações devem ser exibidos para o usuário. Atenção: marcar esta opção desativará a exibição de todas as informações e notificações para o usuário!Selecione se deseja usar o som "sineta" (som de notificação curto) para anunciar uma nova notificação do Timekpr-nExT. Isto funciona apenas para notificações ativadas. Se esta configuração não for editável, o seu ambiente não anuncia suporte a notificação sonora.Selecione se deseja usar notificações faladas, se disponíveis. Pode tornar as notificações faladas disponíveis ao instalar o pacote "python3-espeak" ou "python3-espeak-ng".Granularidade do tempo de sondagem da sessão que especifica a frequência com que as sessões e a atividade do utilizador são verificadas e contabilizadas. 3 - 5 segundos é o ideal, não altere isto se não tiver a certeza.Tipo de sessãoDefinir este limite de tempo específicoDefinições para atividades TempoDeJogoSeveroMostrar todas as notificaçõesMostrar alterações de limiteMostrar segundos na área de notificaçãoEspecifique o tempo, em segundos, durante o qual o Timekpr-nExT inicia a contagem decrescente contínua em tempo real antes de impor uma restrição/bloqueio às sessões do utilizador.Especifique se deseja mostrar uma notificação quando houver alterações nas configurações de limite ou permissãoEspecifique se deseja mostrar todas as notificações. Se desmarcado, somente as importantes serão mostradas.Especifique se deseja mostrar segundos na área de notificação. Alguns ambientes de trabalho, como o KDE5, não suportam texto ao lado de ícones de notificação.IniciadoEstado do cliente administrador do Timekpr-nExTEstado do cliente Timekpr-nExTSubtrair o tempo especificado (penalização)Tempo de encerramentoTempo de encerramento "%%s" não está corretoTempo de encerramento "%%s" não está correto e não pode ser definidoTempo de encerramento não é passadoEsse intervalo sobrepõe-se a um já existenteO fim desse intervalo entra em conflito com um intervalo existenteO início desse intervalo entra em conflito com um já existenteO início ou o fim desse intervalo duplica um intervalo existenteO comando está incorreto:O número de horas a ajustar para o limite de hojeO número de minutos a ajustar para o limite de hojeA utilização do cliente de administração Timekpr-nExT é a seguinte:Há um problema ao comunicar com o Timekpr-nExT (%%s)!Há um problema a ligar ao Timekpr-nExT daemon (%%s)!Estes são os dias e limites disponíveis para si como parte das restrições de atividade do Tempo LivreEstes são os dias e limites que estão disponíveis para siEsta é a aplicação de configuração do Timekpr-nExT. Permite-lhe definir limites de tempo para os seus utilizadores individuais, bem como opções gerais do Timekpr-nExT. Para utilizar esta aplicação, tem de a executar como superutilizador ou tem de fazer parte do grupo timekpr. Tenha em atenção que a "Configuração do Timekpr-nExT" só está disponível em modo de superutilizador (administrador)! Por favor, configure cuidadosamente: não se bloqueie a si próprio!Isto permite-lhe configurar os limites do PlayTime.Isto permite-lhe configurar limites de tempo.Esta opção substitui a contabilização de tempo padrão. Se estiver marcada, o tempo será contabilizado somente quando as atividades em "Lista de atividades / aplicações" estiverem em execução, o restante do tempo será considerado ocioso.Isto define por quanto tempo uma notificação é mostrada para notificações "Críticas" sobre o tempo restante (quando o ícone fica vermelho). O valor é especificado em segundos. Um valor de 0 significa mostrar até ser descartado. Note que o ambiente de trabalho que usa pode substituir esse tempo limite, nesse caso essa configuração não terá nenhum efeito na notificação.Isto define por quanto tempo uma notificação é mostrada para notificações regulares sobre tempo restante e alterações de configuração. O valor é especificado em segundos. Um valor de 0 significa mostrar até ser descartado (não recomendado para notificações regulares). Note que o ambiente de trabalho que usa pode substituir esse tempo limite, nesse caso essa configuração não terá nenhum efeito na notificação.Isto define o nível de registo. Por favor, não altere isto a menos que saiba o que está a fazer.Esta configuração controla se o monitor de atividade de Tempo Livre usará a linha de comando do processo, incluindo argumentos, para monitorizar processos (por defeito usa apenas o nome do processo). Quando esta definição estiver ativada, o Timekpr-nExT efetuará uma correspondência com a linha de comandos completa até 512 caracteres capacidades de monitorização de processos melhoradas. Por favor, tenha cuidado e verifique novamente as suas regras de RegExp nas máscaras de atividade de Tempo Livre de cada utilizador individualmente!Esta definição controla se a funcionalidade de Tempo Livre está ativada. Este é um interruptor mestre do Tempo Livre, se estiver desligado, está desligado para todos independentemente das configurações individuais!Isso mostra atividades/aplicações que fazem parte das restrições do Tempo LivreIsto mostra os intervalos de tempo que estão disponíveis para uso. A opção "∞" indica que o tempo gasto durante este intervalo não será contabilizado para o limite diário, mas sim como ocioso.Especifica a taxa em segundos a que o estado real do utilizador é guardado no disco. Para melhorar o desempenho e continuar a ter grande precisão, o Timekpr-nExT contabiliza o tempo na memória com a frequência "Poll interval" (Intervalo de sondagem), esta definição define a frequência com que o estado do utilizador é guardado no disco para armazenamento permanente.HorárioTempo de tolerância alterou, por favor note o novo tempo restante!Tempo disponível hoje (indicado guardado, não em tempo real)Tempo inativo (atual):Tempo inativo desta sessão ou após Timekpr-nExT ter sido reiniciadoTempo inativo:Tempo restante (atual):Tempo restante (hoje):Tempo restante hoje:Tempo restante...Tempo limite (mês):Tempo limite (semana):Configuração do tempo limite alterou, por favor note a nova configuração!Tempo limite para este mês disponível para siTempo limite para esta semana disponível para siSubstituição do limite de tempo:Tempo gasto (mês):Tempo gasto (sessão):Tempo gasto (hoje):Tempo gasto (semana):Tempo gasto neste mêsTempo gasto este mês (estado guardado, não tempo-real)Tempo gasto nesta sessão ou após o Timekpr-nExT ter sido reiniciadoTempo gasto esta semanaTempo despendido esta semana (guardado, não em tempo real)Tempo despendido hoje (declarado guardado, não em tempo real)Tempo gasto hoje:Timekpr-nExTConfiguração de Administração Timekpr-nExTConfiguração Timekpr-nExTNotificação do TempoDeJogo Timekpr-nExTAdministração Timekpr-nExTCliente Timekpr-nExTA configuração do Timekpr-nExT foi guardadaA interface Timekpr-nExT ainda não está prontaNível de registo do Timekpr-nExT. Por favor, não altere isso a menos que seja necessário. É provável que não encontre nada de bonito nos ficheiros de registo. Os valores são: 1 - standard, 2 - debug, 3 - extra debugNotificação Timekpr-nExTConfiguração relacionada com o Timekpr-nExTParaTotal de Tempo Livre restante disponível hojeTotal de Tempo Livre gasto hojeTempo total de seguida disponível restante para hoje, até o final do diaContabilizar inativo "%%s" não está corretoO rastreio inativo "%%s" não está correto e não pode ser definidoO rastreio de inatividade para o utilizador foi processadoContabilizar inativo não é passadoContabilizar sessões inativas:Contabilizar inativo:Sessões ContabilizadasERRO INESPERADO: %%sERRO inesperado na obtenção da configuração. Por favor, inspeccione os ficheiros de registo do Timekpr-nExTERRO inesperado na obtenção da configuração do utilizador. Por favor, inspeccione os ficheiros de registo do Timekpr-nExTERRO inesperado na obtenção da lista de utilizadores. Por favor, inspeccione os ficheiros de registo do Timekpr-nExTERRO inesperado ao atualizar a configuração. Por favor, inspeccione os ficheiros de registo do Timekpr-nExTERRO inesperado na atualização do controlo. Por favor, inspeccione os ficheiros de registo do Timekpr-nExTERRO inesperado ao carregar a configuração. Por favor, inspeccione os ficheiros de registo do Timekpr-nExTUsar som de "campainha" para notificaçõesUsar notificação vocaisConfiguração do Utilizador "%%s" não encontradaO ficheiro de controlo do utilizador "%%s" não foi encontradoUtilizador "%%s" não encontradoConfiguração do UtilizadorOs limites de PlayTime do utilizador foram guardadosAs opções adicionais do utilizador foram guardadasConfiguração do utilizador recuperadaOs limites de tempo do utilizador foram guardadosO sinalizador do utilizador "%%s" PlayTime permitido durante intervalos não contabilizados não está corretoO sinalizador do utilizador "%%s" PlayTime allowed during unaccounted intervals não está correto e não pode ser definidoO sinalizador "%%s" PlayTime do utilizador permitido durante intervalos não contabilizados não é passadoA lista de limites diários do PlayTime "%%s" do utilizador não está correctaA lista de limites diários do PlayTime "%%s" do utilizador não está correcta e não pode ser definidaA lista de limites diários do PlayTime "%%s" do utilizador não foi aprovadaA lista de dias do PlayTime "%%s" do utilizador não está correctaA lista de dias do PlayTime "%%s" do utilizador não está correcta e não pode ser definidaA lista de dias do PlayTime "%%s" do utilizador não foi aprovadaO sinalizador de ativação do PlayTime "%%s" do utilizador não está corretoO sinalizador de ativação do PlayTime "%%s" do utilizador não está correto e não pode ser definidoO sinalizador de ativação do PlayTime "%%s" do utilizador não foi passadoA operação PlayTime "%%s" do utilizador pode ser uma das seguintes: - + =O sinalizador de substituição de PlayTime "%%s" do utilizador não está corretoO sinalizador de substituição de PlayTime "%%s" do utilizador não está correto e não pode ser definidoO sinalizador de substituição do PlayTime "%%s" do utilizador não foi passadoO limite de tempo do PlayTime "%%s" do utilizador não está correto e não pode ser definidoAs horas permitidas "%%s" do utilizador não estão correctas e não podem ser definidasOs limites de dias do utilizador "%%s" não estão corretosLista de limites diários do utilizador "%%s" não está correta e não pode ser definidaLista de limites diários do utilizador"%%s" não é passadaA lista de dias do utilizador "%%s" não está corretaLista diária do utilizador "%%s" não está correta e não pode ser definidaA lista de dias do utilizador "%%s" não é passadaO número do dia do utilizador "%%s" tem de ser entre 1 e 7O número do dia do utilizador "%%s" tem de estar presenteO sinalizador "%%s" do utilizador para ocultar o ícone do tabuleiro não está corretoO sinalizador "%%s" do utilizador para ocultar o ícone do tabuleiro não está correto e não pode ser definidoA indicação "%%s" do utilizador para ocultar o ícone de bandeira do painel não está passadaO limite mensal do utilizador "%%s" não está corretoA tolerância mensal do utilizador "%%s" não está correta e não pode ser definidaO limite mensal do utilizador "%%s" não é passadoO tipo de restrição / bloqueio "%%s" do utilizador não está corretoO tipo de restrição / bloqueio "%%s" do utilizador não está correto e não pode ser definidoA restrição/tipo de bloqueio "%%s" do utilizador não foi aprovadaO limite de PlayTime definido pelo utilizador "%%s" não está corretoO limite de tempo "%%s" do utilizador não está corretoO limite de tempo "%%s" do utilizador não está correto e não pode ser definidoA operação temporal "%%s" do utilizador pode ser uma das seguintes: - + =O sinalizador de inatividade de via "%%s" do utilizador não está corretoO sinalizador de inatividade de via "%%s" do utilizador não está correto e não pode ser definidoO sinalizador de inatividade de via "%%s" do utilizador não está passadoA tolerância semanal do utilizador "%%s" não está corretoO subsídio semanal "%%s" do utilizador não está correto e não pode ser definidoA tolerância semanal do utilizador "%%s" não é passadaNome de utilizadorNome de utilizador:Configuração relacionada com utilizadoresVerificar os intervalos de tempo configurados. Este é um passo obrigatório para garantir que os intervalos estão correctos. Os intervalos que apresentarem problemas serão destacados.AVISO: Foi pedido ao utilitário de administração Timekpr-nExT que fosse executado em modo GUI, mas não há ecrãs disponíveis, pelo que foi executado em CLI...Intervalo de hora de acordar:AvisoLimites dos dias da semanaSemanalLimites semanais e mensaisLimites semanais e mensais para o utilizador. Estes limites são aplicados ao utilizador juntamente com o resto da configuração de limites.Os limites semanais e mensais para o utilizador foram processadosQuando o tempo terminar, o ecrã do computador será bloqueado. Esta opção não é uma restrição e é mais adequada para fins de auto-controlo.Quando o tempo terminar, o computador será desligado. Esta opção é uma restrição! Avalie se precisa deste tipo de restrição!Quando o tempo terminar, o computador será suspenso (colocado a dormir) e será acordado no início do próximo intervalo de tempo disponível para o utilizador. Esta opção não é uma restrição e é mais adequada para fins de auto-controlo. Se for acordado quando ainda não houver tempo, o ecrã do computador será bloqueado e colocado novamente em suspensão após algum tempo.Quando o tempo terminar, o computador será suspenso (colocado a dormir). Esta opção não é uma restrição e é mais adequada para fins de auto-controlo. Se for acordado quando ainda não houver tempo, o ecrã do computador será bloqueado e colocado novamente em suspensão após algum tempo.Quando o tempo acabar, as sessões do usuário serão finalizadas. Esta opção é uma restrição! Avalie se precisa deste tipo de restrição!Quando o tempo terminar, as sessões dos utilizadores serão terminadas. Esta opção é uma restrição! Esta é a opção predefinida e, muito provavelmente, é a opção de que necessita!Tem %(n)s horaTem %(n)s horasO seu tempo não está limitado hojeO seu tempo acabou, será forçado a sair emO seu tempo esgotou, o seu computador será encerrado forçosamente emO seu tempo acabou, o seu computador será forçado a suspender emO seu tempo acabou, a sua sessão será forçada a trancar emdinsira intervalo horáriomáscara executável...de...has horas são numeradas de acordo com a norma ISO 8601 (ou seja, relógio de 24 horas, formato: 0-23)hrimportância...finalizar sessõesecrã de bloqueiomminn/aos valores numéricos de tempo são em segundosdescrição do processo...tipo de sessão...encerrar o computadorsuspender / acordar computadorsuspender computadorterminar sessõeshorário...Este programa é software livre: pode redistribuí-lo e/ou modificá-lo de acordo com os termos da Licença Pública Geral GNU, tal como publicada pela Free Software Foundation, quer a versão 3 da Licença, quer (à sua escolha) qualquer versão posterior. Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO PARTICULAR. Veja a Licença Pública Geral GNU para mais detalhes. Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa. Se não, veja . Em Debian, veja o ficheiro /usr/share/common-licenses/GPL-3para...horário de hojenome de utilizador...verificaros dias da semana são numerados de acordo com a norma ISO 8601 (ou seja, segunda-feira é o primeiro dia, formato: 1-7)timekpr-next/resource/locale/de/000775 001750 001750 00000000000 13476006650 020662 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/de/LC_MESSAGES/000775 001750 001750 00000000000 15122253261 022437 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/de/LC_MESSAGES/timekpr.po000644 001750 001750 00000307110 15122253261 024452 0ustar00bezvfedubezvfedu000000 000000 msgid "" msgstr "" "Project-Id-Version: Timekpr nExT\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:19+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Ulle \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __:1,2\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> Hilfe ausgeben, Beispiel" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> Gespeicherte Benutzerliste vom Server holen, Beispiel" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "==> Gespeicherte Benutzerkonfiguration und Zeitinformationen vom Server holen, " "Beispiel" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" "Holen Sie sich Echtzeit Gespeicherte Benutzerkonfiguration vom Server, Beispiel" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> Erlaubte Tage für den Benutzer festlegen, Beispiel" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> Erlaubte Stunden für den ausgewählten Tag festlegen, oder \"ALL\" für den " "ganzen Tag. Optional dahinter die Start- und End-Minuten in eckigen Klammern [x-" "y] angeben. Zusätzlich ein ! vor der Stunde, wenn diese nicht berechnet wird " "(also freie Zeit für den Benutzer), Beispiel" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> Zeitlimits für alle erlaubten Tage festlegen; die Anzahl der Werte darf " "nicht größer sein als die Anzahl der erlaubten Tage für den Benutzer, Beispiel" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> Wochenlimit festlegen, Beispiel" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> Zeitlimit pro Monat festlegen, Beispiel" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "" "==> Festlegen, ob inaktive Benutzer-Sitzungen beachtet werden sollen, Beispiel" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" "==> Legen Sie fest, ob das Taskleistensymbol ausgeblendet und " "Benachrichtigungen verhindert werden sollen" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> Art der Beschränkung / Sperre festlegen (\"lock\" - Sitzung sperren, " "\"suspend\" - Den Rechner in den Ruhezustand versetzen, \"suspendwake\" - In " "den Ruhezustand versetzen und wieder aufwecken, \"terminate\" - Sitzung " "beenden, \"kill\" - Sitzungen töten, \"shutdown\" - Den Rechner " "herunterfahren), Beispiele" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> Restzeit festlegen ab jetzt für momentanen Benutzer: \"+\" (Zeit " "hinzufügen), \"-\" (Zeit subtrahieren), \"=\" (genaue verfügbare Zeit " "einstellen), Beispiel (eine Stunde hinzufügen)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> festlegen ob PlayTime für den Nutzer aktiviert ist, Beispiel" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> Festlegen, ob statt der normalen Nutzungszeit die PlayTime berechnet werden " "soll. Beispiel" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> Festlegen, ob PlayTime Aktivitäten während berechnungsfreien Zeiten (\"∞\") " "erlaubt sind, Beispiel" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "" "==> festlegen an welchen Tagen PlayTime Aktivitäten erlaubt sind, Beispiel" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> PlayTime Zeit-Limits für alle erlaubten Tage festlegen. Die Anzahl der " "Werte darf die Anzahl der Tage, an denen PlayTime für den Benutzer erlaugt ist, " "nicht überschreiten. Beispiel" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> Festlegen, für welche Prozesse die Zeit als PlayTime berechnet wird " "(Filtermasken für die Prozesse). Beispiel" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> PlayTime-Restzeit für den Benutzer festlegen ab dem jetzigen Zeitpunkt: \"+" "\" (Zeit hinzufügen), \"-\" (Zeit abziehen), \"=\" (genaue verfügbare Zeit " "einstellen), Beispiel (eine Stunde hinzufügen)\"" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Typ der Sitzungssteuerung wurde nicht übergeben" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "Liste der Sitzungssteuerung-Typen ist nicht korrekt" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "Liste der Sitzungssteuerung-Typen ist nicht korrekt und kann nicht verarbeitet " "werden" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "Ausgeschlossene Sitzungs-Typen wurden nicht übergeben" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "Liste der ausgeschlossenen Sitzungstypen ist nicht korrekt" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "" "Liste der ausgeschlossenen Sitzungstypen ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "Liste der ausgeschlossenen Benutzer wurde nicht übergeben" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "Liste der ausgeschlossenen Benutzer ist nicht korrekt" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "" "Liste der ausgeschlossenen Benutzer ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "Zeitpunkt der letzten Warnung wurde nicht übergeben" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "Zeitpunkt der letzten Warnung \"%%s\" ist nicht korrekt" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "Zeitpunkt der letzten Warnung \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "Zeitpunkt der letzten Ankündigung ist noch nicht erreicht" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "Zeitpunkt der letzten Ankündigung \"%%s\" ist nicht korrekt" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "Zeitpunkt der letzten Ankündigung \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "End-Zeitpunkt wurde nicht übergeben" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "End-Zeitpunkt \"%%s\" ist nicht korrekt" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "End-Zeitpunkt \"%%s\" ist nicht korrekt und kann nicht verarbeitet werden" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Beachtung von Inaktivität wurde nicht übergeben" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Beachtung von Inaktivität \"%%s\" ist nicht korrekt" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "" "Beachtung von Inaktivität \"%%s\" ist nicht korrekt und kann nicht verarbeitet " "werden" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Log level wurde nicht übergeben" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Log level \"%%s\" ist nicht korrekt" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Log level \"%%s\" ist nicht korrekt und kann nicht verarbeitet werden" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "Abfrage-Zeit wurde nicht übergeben" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "Abfrage-Zeit \"%%s\" ist nicht korrekt" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "Abfrage-Zeit \"%%s\" ist nicht korrekt und kann nicht verarbeitet werden" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "Speicherzeitpunkt wurde nicht übergeben" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "Speicherzeitpunkt \"%%s\" ist nicht korrekt" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "" "Speicherzeitpunkt \"%%s\" ist nicht korrekt und kann nicht verarbeitet werden" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "Das Playtime-Flag wurde nicht übergeben" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "Das PlayTime-Flag \"%%s\" ist nicht korrekt" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "" "Das PlayTime-Flag \"%%s\" ist nicht korrekt und kann nicht verarbeitet werden" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "" "Das Flag für erweitertes PlayTime-Aktivitäten-Monitoring wurde nicht übergeben" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "" "Das Flag für erweitertes PlayTime-Aktivitäten-Monitoring \"%%s\" ist nicht " "korrekt" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "Das Flag für erweitertes PlayTime-Aktivitäten-Monitoring \"%%s\" ist nicht " "korrekt und kann nicht verarbeitet werden" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "Anzahl der Tage für Benutzer \"%%s\" muss vorhanden sein" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "Anzahl der Tage für Benutzer \"%%s\" kann nur 1 bis 7 sein" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "Erlaubte Stunden für Benutzer \"%%s\" sind nicht korrekt und können nicht " "verarbeitet werden" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "Liste der Tage für Benutzer \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "Liste der Tage für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" "Liste der Tage für Benutzer \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "Liste der Tages-Limits für Benutzer \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "Liste der Tages-Limits für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "Liste der Tages-Limits für Benutzer \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "Die Veränderungs-Operation für die Nutzungszeit des Benutzers \"%%s\" kann eine " "der folgenden sein: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "Das Zeitlimit für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "Das Zeitlimit für Benutzer \"%%s\" ist nicht korrekt und kann nicht verarbeitet " "werden" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "Monatliches Zeitlimit für Benutzer \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "Monatliches Zeitlimit für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "Monatliches Zeitlimit für Benutzer \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "Der Schalter für Inaktivitäts-Beachtung \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "Der Schalter für Inaktivitäts-Beachtung \"%%s\" ist nicht korrekt" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "Der Schalter für Inaktivitäts-Beachtung \"%%s\" ist nicht korrekt und kann " "nicht verarbeitet werden" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" "Das Flag zum Ausblenden des Tray-Icons für Benutzer \"%%s\" wurde nicht " "übergeben" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "" "Das Flag zum Ausblenden des Tray-Icons für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "Das Flag zum Ausblenden des Tray-Icons für Benutzer \"%%s\" ist nicht korrekt " "und kann nicht verarbeitet werden" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "" "Die Art der Beschränkung / Sperre für Benutzer \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "Die Art der Beschränkung / Sperre für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Die Art der Beschränkung / Sperre für Benutzer \"%%s\" ist nicht korrekt und " "kann nicht verarbeitet werden" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "Wöchentliches Zeitlimit für Benutzer \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "Wöchentliches Zeitlimit für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "Wöchentliches Zeitlimit für Benutzer \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "" "Das Flag zur Aktivierung der PlayTime für Benutzer \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "" "Das Flag zur Aktivierung der PlayTime für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "Das Flag zur Aktivierung der PlayTime für Benutzer \"%%s\" ist nicht korrekt " "und kann nicht verarbeitet werden" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "Das Flag zum Überschreiben der PlayTime für Benutzer \"%%s\" wurde nicht " "übergeben" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "" "Das Flag zum Überschreiben der PlayTime für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "Das Flag zum Überschreiben der PlayTime für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "Das Flag für PlayTime während berechnungsfreier Zeiten für Benutzer \"%%s\" " "wurde nicht übergeben" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "Das Flag für PlayTime während berechnungsfreier Zeiten für Benutzer \"%%s\" ist " "nicht korrekt" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "Das Flag für PlayTime während berechnungsfreier Zeiten für Benutzer \"%%s\" ist " "nicht korrekt und kann nicht verarbeitet werden" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "Liste der PlayTime-Tage für Benutzer \"%%s\" wurde nicht übergeben" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "Liste der PlayTime-Tage für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "Liste der PlayTime-Tage für Benutzer \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "Liste der PlayTime Tages-Limits für Benutzer \\\"%%s\\\" wurde nicht übergeben" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "Liste der PlayTime Tages-Limits für Benutzer \\\"%%s\\\" ist nicht korrekt" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "Liste der PlayTime Tages-Limits für Benutzer \\\"%%s\\\" ist nicht korrekt und " "kann nicht verarbeitet werden" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "Die Veränderungs-Operation für die PlayTime-Zeit des Benutzers \"%%s\" kann " "eine der folgenden sein: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "Das PlayTime Zeitlimit für Benutzer \"%%s\" ist nicht korrekt" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "Das PlayTime Zeitlimit für Benutzer \"%%s\" ist nicht korrekt und kann nicht " "verarbeitet werden" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "Fehler beim Laden der Konfiguration. Bitte die Timekpr-nExT Logs ansehen" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "Fehler beim Holen der Konfiguration. Bitte die Timekpr-nExT Logs ansehen" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Fehler beim Holen der Benutzer-Konfiguration. Bitte Timekpr-nExT Logs ansehen" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "Fehler beim Holen der Benutzer-Liste. Bitte die Timekpr-nExT Logs ansehen" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "Fehler beim Aktualisieren der Konfiguration. Bitte die Timekpr-nExT Logs ansehen" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "Fehler beim Aktualisieren der Steuerung. Bitte die Timekpr-nExT Logs ansehen" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "Konfiguration für Benutzer \"%%s\" nicht gefunden" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "Steuerungs-Datei für Benutzer \"%%s\" nicht gefunden" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "Benutzer \"%%s\" nicht gefunden" #: common/constants/messages.py:160 msgid "Connected" msgstr "Verbunden" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "Verbindungsaufbau …" #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Verbindung fehlgeschlagen" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Bitte öffnen Sie die Anwendung erneut wenn Sie Superuser sind und Timekpr-nExT " "bereits läuft" #: common/constants/messages.py:165 msgid "Started" msgstr "Gestartet" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "Benutzer-Konfiguration wurde geladen" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Konfiguration erhalten" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "Inaktivitäts-Verfolgung für den Benutzer wurde verarbeitet" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Das Symbol zum Ausblenden des Fachs für den Benutzer wurde verarbeitet" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Art der Beschränkung / Sperre wurde verarbeitet" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Zusatz-Zeit für den Benutzer wurde verarbeitet" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Zusätzliche PlayTime für den Benutzer wurde verarbeitet" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "Wochen- und Monats-Zeitlimits für den Benutzer wurden verarbeitet" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Erlaubte Tage für den Benutzer wurden verarbeitet" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Tags-Limits für den Benutzer wurden verarbeitet" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Erlaubte Stunden für den Benutzer wurden verarbeitet" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "Timekpr-nExT-Konfiguration wurde gespeichert" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Zeitlimits für den Benutzer wurden gespeichert" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "PlayTime-Limits für den Benutzer wurden gespeichert" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Zusätzliche Optionen für den Benutzer wurden gespeichert" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "PlayTime-Aktivieren für den Benutzer wurde verarbeitet" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "Das Flag PlayTime überschreiben für den Benutzer wurde verarbeitet" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "Das Flag PlayTime-erlauben-währendberechnungsfreien-Zeiten für den Benutzer " "wurde verarbeitet" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "Erlaubte PlayTime-Tage für den Benutzer wurden verarbeitet" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "PlayTime-Tageslimits für den Benutzer wurden verarbeitet" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "PlayTime-Aktivitäten (Anwendungen) für den Benutzer wurden verarbeitet" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Bitte wählen Sie einen Tag für die Begrenzung" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "Intervall überschneidet sich mit bereits vorhandenem Intervall" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "Intervall-Beginn kollidiert mit bereits vorhandenem Intervall-Beginn" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "Intervall-Ende kollidiert mit bereits vorhandenem Intervall-Ende" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "Intervall-Beginn oder -Ende duploziert bereits vorhandenen Intervall" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Intervall-Beginn muss ungleich Intervall-Ende sein" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "Die Startzeit des Zeitintervalls darf nicht später als das Ende sein" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Bitte wählen Sie einen Stunden-Intervall zum Entfernen" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Intervall entfernt" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "Timekpr-nExT-Schnittstelle ist noch nicht bereit" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "Warnhinweis: Timekpr-nExT-Administrationstool soll im GUI-Modus gestartet " "werden, es sind aber keine grafischen Fenster möglich. Daher wird der " "Kommandozeilen-Modus gestartet." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "Der folgende Befehl ist nicht korrekt:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "Benutzung von Timekpr-nExT Admin-Client ist wie folgt:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== BEACHTEN ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "Die numerischen Zeitwerte sind in Sekunden angegeben" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "Wochentage sind gemäß ISO 8601 nummeriert (d. h. Montag ist der erste Tag, " "Format: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "Die Stunden sind gemäß ISO 8601 nummeriert (d. h. 24-Stunden-Uhr, Format: 0-23)." #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "Insgesamt %(n)s Benutzer:" msgstr[1] "Insgesamt %(n)s Benutzer:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Konfiguration für den Benuzter %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Verbleibende Zeit..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Limits & Konfiguration" #: common/constants/messages.py:213 msgid "About" msgstr "Über" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Computer-Nutzung im Griff behalten" #: common/constants/messages.py:217 msgid "Day" msgstr "Tag" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Aktiviert" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Begrenzung" #: common/constants/messages.py:220 msgid "From" msgstr "Von" #: common/constants/messages.py:221 msgid "from..." msgstr "von..." #: common/constants/messages.py:222 msgid "To" msgstr "Zu" #: common/constants/messages.py:223 msgid "to..." msgstr "bis..." #: common/constants/messages.py:224 msgid "Period" msgstr "Zeitraum" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Wöchentlich" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Monatlich" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Sitzungs-Typ" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "Sitzungs-Typ..." #: common/constants/messages.py:232 msgid "Username" msgstr "Benutzername" #: common/constants/messages.py:233 msgid "username..." msgstr "Benutzername..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Maske für die Prozesse" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "Maske für die ausführbaren Dateien" #: common/constants/messages.py:236 msgid "Process description" msgstr "Prozess-Beschreibung" #: common/constants/messages.py:237 msgid "process description..." msgstr "Prozess-Beschreibung..." #: common/constants/messages.py:238 msgid "Time" msgstr "Zeit" #: common/constants/messages.py:239 msgid "time..." msgstr "Zeit..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Wichtigkeit" #: common/constants/messages.py:241 msgid "importance..." msgstr "Wichtigkeit..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Timekpr-nExT Hinweis" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Timekpr-nExT PlayTime Benachrichtigung" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Heute gibt es keine Zeitbeschränkung" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "Erlaubte Zeit wurde geändert, bitte neue Zeit beachten!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "Konfiguration der Zeitbeschränkung wurde geändert, bitte neue " "Zeitbeschränkungen beachten!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Es gibt ein Problem beim Verbinden zum Timekpr-nExT Service (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Es gibt ein Problem mit der Kommunikation zu Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Fehler (%%s) beim Bereitstellen des Icons!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Die erlaubte Nutzungszeit ist vorbei, das Ausloggen erfolgt in" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Die Zeit ist abgelaufen, der Rechner wird automatisch heruntergefahren in" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Die Zeit ist abgelaufen, der Rechner wird automatisch gesperrt in" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "" "Die Zeit ist abgelaufen, der Rechner wird automatisch in den Ruhezustand " "versetzt in" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s Sekunde" msgstr[1] "%(n)s Sekunden" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Interner Verbindungsfehler. Bitte schauen Sie in die log-Dateien" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Es bleibt noch %(n)s Stunde" msgstr[1] "Es bleiben noch %(n)s Stunden" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s Minute" msgstr[1] "%(n)s Minuten" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "noch %(n)s Sekunde" msgstr[1] "noch %(n)s Sekunden" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s Sekunde PlayTime verbleibt" msgstr[1] "%(n)s Sekunden PlayTime verbleiben" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "Die Funktion \"%%s\", mit der die Leerlaufzeit erkannt wird, kann nicht " "aktiviert werden!\n" "Leerlauf- / Inaktivitätszeit wird möglicherweise nicht berücksichtigt, wenn der " "Bildschirm gesperrt ist!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "Unerwarteter Fehler: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "PARAMETERANALYSEFEHLER (bitte überprüfen Sie die Gültigkeit der Parameter): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Kommando fehlgeschlagen: Zugriff verweigert" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Kommando fehlgeschlagen: Kommunikation wurde nicht angenommen" #: common/constants/messages.py:278 msgid "n/a" msgstr "nicht verfügbar" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Über Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" # Copied from https://www.gnu.org/licenses/gpl-howto.de.html #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Dieses Programm ist Freie Software: Sie können es unter den Bedingungen\n" "der GNU General Public License, wie von der Free Software Foundation,\n" "Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren\n" "veröffentlichten Version, weiter verteilen und/oder modifizieren.\n" "\n" "Dieses Programm wird in der Hoffnung bereitgestellt, dass es nützlich sein " "wird, jedoch\n" "OHNE JEDE GEWÄHR,; sogar ohne die implizite\n" "Gewähr der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.\n" "Siehe die GNU General Public License für weitere Einzelheiten.\n" "\n" "Sie sollten eine Kopie der GNU General Public License zusammen mit diesem\n" "Programm erhalten haben. Wenn nicht, siehe " #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "ulle@o2online.de" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Ausgeschlossene Sitzungs-Typen entfernen" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Timekpr-nExT Administration" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Ist DAS nicht ein Icon?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Hinweise, bitte sorgfältig lesen ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Das ist die Konfigurations-App für Timekpr-nExT. Hiermit können sowohl " "Zeitlimits für einzelne Benutzer, als auch allgemeine Timekpr-nExT-Optionen " "festgelegt werden\n" "Um diese Anwendung zu benutzen, müssten Sie entweder Administrator (superuser), " "oder Mitglied der timekpr-Gruppe sein.\n" "Hinweis: die Timekpr-nExT-Konfiguration steht nur im Administrator-Modus zur " "Verfügung.\n" "\n" "Bitte vorsichtig Konfigurieren: sperren Sie sich nicht selbst aus!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Benutzer-bezogene Konfiguration" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Benutzer auswählen:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Liste der im System registrierten Benutzer" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Wiederherstellen" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Wiederherstellen einer gespeicherten Konfiguration" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Information über verbleibende / verbrauchte Zeit" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Zusammenhängende verbleibende Zeit. Dies kann mehr als den aktuellen Tag " "umfassen. (real-time, verfügbar, wenn der Benutzer eingeloggt ist)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Verbleibende Zeit (aktuell):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Format: " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Wie lange der Benutzer inaktiv war seit dem letzten Login. (real-time, " "verfügbar wenn der Benutzer eingeloggt ist)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Zeit inaktiv (aktuell):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Heute verfügbare Zeit (gespeichert, nicht real-time)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Verbleibende Zeit (heute):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Nutzungszeit heute (gespeichert, nicht real-time)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Nutzungszeit (heute):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "Nutzungszeit dieser Woche (gespeichert, nicht real-time)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Nutzungszeit (Woche):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Nutzungszeit dieses Monats (gespeichert, nicht real-time)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Nutzungszeit (Monat):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Veränderung des Tageslimits" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "Heutiges Zeitlimit" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" "Dieses Auswählen, um das Zeitlimit des Benutzers für den heutigen Tag zu " "verändern" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "Heutige PlayTime" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "Dieses Auswählen, um das PlayTime-Tageslimit des Benutzers für den heutigen Tag " "zu verändern" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "h" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "Wert der Minuten-Veränderung für das heutige Tageslimit" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "Wert der Stunden-Veränderung für das heutige Tages-Limit" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Die angegebene Anzahl hinzufügen (Belohnung)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Die angegebene Anzahl abziehen (Strafe)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Genau das angegebene Zeitlimit setzen" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Informationen über die PlayTime" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Aktuell heute verbleibende PlayTime (real-time, verfügbar, wenn der Benutzer " "eingeloggt ist)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "verbleibende PlayTime (aktuell)" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Format: " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "Heute verbleibende PlayTime-Zeit (gespeicherter Staus, nicht real-time)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "Verbleibende PlayTime-Zeit (heute)" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Momentaner Zeitverbrauch von laufenden PlayTime-Aktivitäten (real-time; nur " "verfügbar, wenn der Benutzer wenn der Benutzer eingeloggt ist)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Laufende Aktivitäten (aktuell)" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "Heute verbrauchte PlayTime (gespeicherter Status, nicht real-time)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "Verbrauchte PlayTime (heute)" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "Kurze Zusammenfassung zur heute bestehenden und verwendeten Nutzungszeit" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Info & Heute" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Hier werden die Zeitlimits festgelegt" #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Beschränkung der Wochentage" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Hier die zu verändernden Stunden an den markierten Tagen auswählen" #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Gewünschte Minuten-Veränderung für die gewählten Tage" #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Hinzufügen der gewünschten Zeitveränderung (Minuten oder Stunden) zum Tages-" "Zeitlimit der ausgewählten Tage.\n" "\n" "Hinweis: man kann mehrere Tage gleichzeitig für die Zeitveränderung auswählen." #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Abziehen der gewünschten Zeitveränderung (Minuten oder Stunden) zum Tages-" "Zeitlimit der ausgewählten Tage.\n" "\n" "Hinweis: man kann mehrere Tage gleichzeitig für die Zeitveränderung auswählen." #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Liste der Wochentage und zusätzliche Informationen über das Tageslimit\n" "\n" "Bitte die Tage für den Benutzer de- / aktivieren." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Stunden-Intervalle, die dem Benutzer zur Verfügung stehen\n" "Die Option \"∞\" bedeutet, das die Nutzungszeit während dieses Intervalls nicht " "für das Tageslimit berechnet wird, es wird stattdessen als Leerlaufzeit " "berechnet.\n" "\n" "Hinweis: Wenn das Tageslimit um 24:00 Uhr endet und das Limit de folgenden " "Tages um 0:00 beginnt, kann der Benutzer unterbrechungsfrei über Mitternacht " "hinweg arbeiten.\n" "\n" "Hinweis: Es können nicht mehrere Minuten-Zeit-Intervalle innerhalb einer Stunde " "konfiguriert werden.\n" "Nur ein einziges Intervall kann innerhalb einer Stunde beginnen oder enden oder " "die Stunde umfassen, aber nicht mehrere. Dies ist by Design so, kein Fehler.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Stunden-Intervalle" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Erstelle ein neues Zeit-Intervall, welches dem Benutzer zur Verfügung steht.\n" "\n" "Nachdem Erstellen des Intervalls, bitte die Start- und End-Zeiten direkt in der " "Intervall-Liste bearbeiten" #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "" "Entferne das ausgewählte Zeitintervall aus der Liste der Intervalle, die dem " "Benutzer zur Verfügung steht." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "Stunden-Intervall eingeben" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "überprüfen" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Überprüfung der konfigurierten Zeitintervalle. Dies ist ein verpflichtender " "Schritt um sicherzustellen, dass die Intervalle korrekt sind.\n" "\n" "Intervalle, die Probleme haben werden markiert." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Wochen- und Monats-Limits" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "t" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "" "Anzahl der Tage auswählen um die der gewählte Zeitraum verändert werden soll" #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "" "Anzahl der Stunden auswählen, um die der gewählte Zeitraum verändert werden soll" #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "" "Anzahl der Minuten auswählen, um die der gewählte Zeitraum verändert werden soll" #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Hinzufügen der gewählten Zeiteinheiten (Tage, Stunden, oder Minuten) zum " "Wochen- oder Monats-Limit" #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Abziehen der gewählten Zeiteinheiten (Tage, Stunden, oder Minuten) vom Wochen " "oder Monats-Limit" #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Wochen- und Monats-Limits für den Benutzer\n" "\n" "Diese Limit werden gemeinsam mit dem Rest der Limits für den Benutzer " "angewendet." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Liste der Tages-Limits übernehmen" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Alle vorgenommenen Limit-Veränderungen auf dieser Seite anwenden" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Konfigurieren der Tages-Limits für die gesamte Woche" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Limit-Konfiguration" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Einstellungen für PlayTime-Aktivitäten" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "PlayTime-Optionen" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "PlayTime für den ausgewählten Benutzer aktivieren" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "PlayTime aktivieren:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "PlayTime-Override für den ausgewählten Nutzer aktivieren\n" "\n" "Diese Einstellung verändert die Zeitabrechnung so, dass Zeit nur dann berechnet " "wird, wenn wenigstens eine der Anwendungen auf der PlayTime-Aktivitäten-Liste " "ausgeführt wird.\n" "Wenn keine dieser Prozesse laufen, wird die Zeit als Leerlauf berechnet, ist " "also effektiv berechnungsfreie Zeit für den Nutzer.\n" "\n" "Dies betrifft nur die Zeitabrechnung; die Zeitintervalle werden trotzdem " "erzwungen!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "PlayTime-Override aktivieren:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "PlayTime Aktivitäten während berechnungsfreien (\"∞\") Zeitintervallen für den " "ausgewählten Benutzer erlauben.\n" "\n" "Diese Einstellung erlaubt dem Benutzer in Zeiträumen, die als berechnungsfrei " "(\"∞\") markiert sind, Anwendungen, die in der PlayTime-Aktivitäten-Liste " "aufgeführt sind, zu nutzen.\n" "\n" "Wenn diese Einstellung aktiviert ist, dann wird die Benutzung von diesen " "Anwendungen nicht auf die PlayTime-Limits angerechnet. Anderenfalls werden " "Anwendungen in der PlayTime-Liste während berechnungsfreien (\"∞\") Zeiträumen " "sofort nach ihrem Start wieder beendet." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Erlaubt während \"∞\" Intevallen:" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Hier werden die PlayTime Zeitlimits konfiguriert" #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "PlayTime Zeitlimits" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Hinzufügen der gewählten Zeiteinheiten (Stunden oder Minuten) zum PlayTime-" "Zeitlimit für die ausgewählten Tage.\n" "\n" "Hinweis: Man kann mehrere Tage gleichzeitig für die Veränderung auswählen!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Abziehen der gewählten Zeiteinheiten (Stunden oder Minuten) vom PlayTime-" "Zeitlimit für die ausgewählten Tage.\n" "\n" "Hinweis: Man kann mehrere Tage gleichzeitig für die Veränderung auswählen!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Liste der Wochentage und zusätzliche Informationen über die PlayTime Tages-" "Limits\n" "\n" "Bitte die Tage für den Benutzer de- / aktivieren und Zeitlimits für die " "PalyTime-Aktivitäten festlegen." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "PlayTime-Aktivitäten" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Eine neue PlayTime-Aktivität hinzufügen.\n" "\n" "Bitte die Aktivitäten-Maske und eine benutzerfreundliche Beschreibung direkt in " "der Liste eintragen." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Die ausgewählte PlayTime-Aktivität entfernen." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Bitte eine Liste der zu überwachenden Prozesse eingeben. (gesamte Prozess-" "Namen, aber ohne Pfadangabe; Groß-Kleinschreibung beachten.) \n" "\n" "Es ist auch möglich reguläre Ausdrücke (RegExp) als Masken für Prozesse zu " "benutzen. Aber bitte größte Vorsicht, damit nicht unbeabsichtigt falsche " "Prozesse des Nutzers beendet werden\n" "\n" "Hinweis: RegExp ist eine Experteneinstellung!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "PlayTime-Konfiguration anwenden" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" "Alle PlayTime-Limit- und Konfigurations-Änderungen auf deiser Seite anwenden" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "PlayTime-Konfiguration" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Zusätzliche Konfigurationsoptionen" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Auswahl, ob inaktive Sitzungs-Zeit mitberechnet wird.\n" "\n" "Wenn diese Option nicht aktiviert ist, dann wird Nutzungszeit in der virtuellen " "Konsole (nicht Terminal-Emulator) und Zeit während der Bildschirm gesperrt ist " "nicht mitberechnet. Dies variiert zwischen Desktop-Umgebungen." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Passive Nutzungszeit mitzählen:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Wählen Sie aus, ob das Timekpr-next-Schlosssymbol und Benachrichtigungen dem " "Nutzer angezeigt werden sollen.\n" "\n" "Bitte beachten Sie, dass durch das Aktivieren dieser Option alle Informationen " "und Benachrichtigungen für den Nutzer deaktiviert werden!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Verberge Symbol und Benachrichtigungen:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Wähle die Art der Beschränkung / Sperre für den Nutzer\n" "\n" "Hinweis: bitte große Vorsicht, wenn die Standardeinstellung verändert wird! In " "diesem Fall die die Beschreibungen aller möglichen Optionen durchlesen!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Art der Beschränkung / Sperre:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "Sitzungen beenden" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Wenn die Zeit abgelaufen ist, werden die Nutzer-Sitzungen beendet.\n" "\n" "Diese Option ist eine Beschränkung!\n" "\n" "Dies ist die Standard-Option und höchstwahrscheinlich die, die benötigt wird!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "Sitzungen zwangsweise beenden" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Wenn die Zeit abgelaufen ist, werden die Benutzersitzungen beendet.\n" "\n" "Diese Option ist eine Beschränkung!\n" "\n" "Bitte abwägen, ob diese Art der Beschränkung benötigt wird!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "Rechner herunterfahren" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Wenn die Zeit abgelaufen ist, wird der Rechner heruntergefahren.\n" "\n" "Diese Option ist eine Beschränkung!\n" "\n" "Bitte abwägen, ob diese Art der Beschränkung benötigt wird!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "Ruhezustand" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Wenn die Zeit abgelaufen ist, wird der Rechner in den Ruhezustand versetzt.\n" "\n" "Diese Option ist keine Beschränkung und eher zur Selbstkontrolle geeignet\n" "\n" "Wenn der Rechner aufwacht und immer noch keine Zeit verfügbar ist, wird nach " "kurzer Zeit der Bildschirm wieder gesperrt und der Rechner wieder in den " "Ruhezustand versetzt." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "Ruhezustand + Aufwecken" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Wenn die Zeit abgelaufen ist, wird der Rechner in den Ruhezustand versetzt und " "zu Beginn des nächsten freien Zeitintervalls des Benutzers wieder aufgeweckt.\n" "\n" "Diese Option ist keine Beschränkung und eher zur Selbstkontrolle geeignet\n" "\n" "Wenn der Rechner aufwacht und immer noch keine Zeit verfügbar ist, wird nach " "kurzer Zeit der Bildschirm wieder gesperrt und der Rechner wieder in den " "Ruhezustand versetzt." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "Bildschirm sperren" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Wenn die Zeit abgelaufen ist, wird der Bildschirm gesperrt.\n" "\n" "Diese Option ist keine Beschränkung und eher zur Selbstkontrolle geeignet" #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Zeitintervall auswählen, in dem der Rechner automatisch aufgeweckt werden " "kann.\n" "\n" "Hinweis: diese Option funktioniert nur, wenn das Aufwecken des Rechners via " "RealTimeClock (RTC) im BIOS/UEFI aktiviert ist" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Aufweck-Stunden-Intervall" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Start-Stunde für die automatische Aufweckfunktion eingeben.\n" "\n" "Hinweis: diese Option kann nur dann funktionieren, wenn die Funktion Aufwecken-" "durch-RealTime-Clock vom BIOS / UEFI unterstützt wird und aktiviert ist." #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "End-Stunde für die automatische Aufweckfunktion eingeben.\n" "\n" "Hinweis: diese Option kann nur dann funktionieren, wenn die Funktion Aufwecken-" "durch-RealTime-Clock vom BIOS / UEFI unterstützt wird und aktiviert ist." #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Konfiguration anwenden" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Änderungen der erweiterten Konfiguration auf dieser Seite anwenden" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Erweiterte Konfiguration" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Weitere Optionen" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Benutzer-Konfiguration" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Konfiguration von Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Verwalten der Timekpr-nExT Einstellungen" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Timekpr-nExT Log-Level.\n" "\n" "Bitte nur verändern, wenn unbedingt notwendig. In den Log-Dateien gibt es " "wahrscheinlich nichts Schönes zu sehen.\n" "\n" "Mögliche Werte sind: 1 - Standard, 2 - Debug, 3 - extra Debug" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Das Polling-Intervall für die Sitzungsabfrage gibt an, wie häufig Sitzungen und " "Aktivitäten überprüft und berechnet werden.\n" "\n" "3-5 Sekunden sind optimal; im Zweifel nicht ändern." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Abfrage-Intervall" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Zeit in Sekunden, wann Timekpr-nExT den real-Time Countdown beginnt, bevor eine " "Restriktion / Sperre auf eine Benutzersitzung angewendet wird." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Intervall in Sekunden, in denen Timekpr-nExT den aktuellen Benutzer-Status auf " "die Festplatte speichert.\n" "\n" "Für höhere Performance bei gleichzeitig hoher Genauigkeit berechnet Timekpr-" "nExT die Nutzungszeiten zunächst im Arbeitspeicher mit der im Polling-Intervall " "festgelegten Häufigkeit.\n" "Diese Einstellung definiert die Häufigkeit mit der dieser Status für dauerhafte " "Speicherung auf die Festplatte geschrieben wird." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Zeit speichern" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Anzahl der dem Benutzer verbleibenden Sekunden, bevor die konfigurierte " "Restriktion / Sperre auf seine Sitzung angewendet wird.\n" "\n" "Wenn dieser Zeitpunkt erreicht wurde und der Nutzer noch immer aktiv ist, " "werden die Sitzungen des Benutzers entsprechend der eingestellten Restriktion / " "Sperre behandelt und es kann fast nichts unternommen werden um das zu " "verhindern." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Beendigungs-Zeit" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Countdown-Zeit" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Log-Stufe" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Anzahl der verbleibenden Sekunden von der verfügbaren Zeit des Benutzers, bevor " "eine letzte kritische Mitteilung gesendet wird, dass seine Nutzungszeit " "abläuft.\n" "\n" "Hinweis: Die anderen Mitteilungs-Zeiten sind individuell durch den Nutzer in " "der Client-Anwendung konfigurierbar!" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Letzte Mitteilung" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Verwalten der von Timekpr-nExT überwachten Zustände" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Überwachte Sitzungen" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Überwachten Sitzungs-Typ zur Liste hinzufügen" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Überwachten Sitzungs-Typ von der Liste entfernen" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Liste der Sitzungs-Typen die überwacht werden sollen.\n" "\n" "Bitte nicht verändern oder damit experimentieren, außer Du weißt wirklich genau " "was Du tust (und glaubst nicht nur es zu wissen)." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Nicht überwachte Sitzungs-Typen" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Sitzungs-Typ, der nicht überwacht werden soll, zur Liste hinzufügen" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Sitzungs-Typ, der nicht überwacht werden soll, von der Liste entfernen" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Liste von Sitzungs-Typen, die von der Überwachung ausgenommen sind.\n" "\n" "Bitte nicht verändern oder damit experimentieren, außer Du weißt wirklich genau " "was Du tust (und glaubst nicht nur es zu wissen)." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Nicht überwachte Benutzer" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Benutzer zur Ausschluss-Liste hinzufügen" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Benutzer von der Ausschluss-Liste entfernen" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "Liste von Benutzern, die von der Überwachung ausgenommen sind.\n" "\n" "Bitte die echten Benutzernamen hier angeben, nicht Klartext-Namen. Zum " "Beispiel: \"ameier\", nicht \"Anton Meier\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Diese Einstellung bestimmt, ob die PlayTime-Funktionalität aktiviert ist.\n" "\n" "Dies ist der PlayTime-Hauptschalter. Wenn er ausgeschaltet ist, dann ist " "PlayTime für Alle ausgeschaltet, unabhängig von den individuellen Einstellungen!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "PlayTime aktivert:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Diese Einstellung bestimmt, ob die PlayTime-Aktivitäten-Überwachung die gesamte " "Kommandozeile, inklusive Argumente, zur Überwachung benutzt. (Standardmäßig " "wird nur der Prozess-Name benutzt.)\n" "\n" "Wenn diese Einstellung aktiviert ist, benutzt Timekpr-nExT zum Vergleichen die " "gesamte Kommandozeile bis zu 512 Zeichen, was erweiterte Prüfungen ermöglicht.\n" "\n" "Bitte ganz besonders vorsichtig sein und die RegExp-Muster in den einzelnen " "PlayTime-Masken der Benutzer doppelt überprüfen!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Erweiterte Aktivitäten-Überwachung:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Timekpr-nExT-Einstellungen anwenden" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Anwenden aller Timekpr-nExT Einstellungen auf einmal" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Konfigurieren, wie Timekpr-nExT arbeiten soll (Administration)" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Timekpr-nExT-Konfiguration" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "Status des Timekpr-nExT Admin Client" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Information" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Warnung" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Schwerwiegend" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Kritisch" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Timekpr-nExT Client" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Status des Timekpr-nExT Client" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Alle Änderungen speichern" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Fenster schließen" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Momentaner effektiver Benutzername" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Aktuelle Statistiken" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "" "Verbrauchte Nutzungszeit in der Benutzersitzung oder seit Timekpr-nExT neu " "gestartet wurde" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Nutzungszeit (Sitzung):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "" "Passive Nutzungszeit in der Benutzersitzung oder seit Timekpr-nExT neu " "gestartet wurde" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Passive Zeit:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "" "Verbleibende zusammenhängende Zeit. Kann mehr als den aktuellen Tag umfassen." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Verbleibende Zeit ohne Unterbrechung:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Verbleibende Zeit insgesamt bis zum Ende des Tages" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Verbleibende Zeit heute:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Ihnen erlaubte Nutzungstage und Limits" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Nutzungstage & Limits" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Dies zeigt die Zeiten, die zur Nutzung verfügbar sind.\n" "\n" "Die Option \"∞\" bedeutet, dass die Zeit während dieses Zeitintervalls nicht " "auf das Tageslimit angerechnet wird. Sie wird stattdessen als Leerlauf gezählt." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervalle" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Tages-Limits" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Zusätzliche Statistiken" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Verbrauchte Nutzungszeit in dieser Woche" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Verbrauchte Nutzungszeit in diesem Monat" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Wähle, ob inaktive Sitzungszeit mitgezählt werden soll.\n" "\n" "Wenn diese Option nicht ausgewählt ist, wird Zeit in der virtuellen Konsole " "(nicht Terminal-Emulator) und Zeiten mit gesperrtem Bildschirm nicht " "mitgezählt. Was genau als inaktive Sitzung gilt, variiert zwischen den Desktop-" "Umgebungen." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Passive Nutzung überwachen:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Nutzungszeit mit gesperrtem Bildschirm oder ohne aktives Fenster (sogenannte " "console) wird nicht mitgezählt (abhängig von gewählter Desktopumgebung). Ist " "das Häkchen gesetzt, zählt alles vom Einloggen bis zum Ausloggen als " "Nutzungszeit." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Zusätzliche Limits" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Ihnen erlaubte Nutzungszeit in dieser Woche" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Zeitlimit (Woche):" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Ihnen erlaubte Nutzungszeit in diesem Monat" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Zeitlimit (Monat):" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "Aktuelle PlayTime-Statistiken" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Gesamte heute verbleibende PlayTime" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Gesamte heute verbrauchte PlayTime" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Heute verbrauchte Zeit:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Diese Option überschreibt die standardmäßige Zeitberechnung.\n" "\n" "Wenn diese Option aktiviert ist, wird Zeit nur berechnet, wenn Anwendungen aus " "der Aktivitäten-Liste laufen. Der Rest der Zeit wird als Leerlauf berechnet." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Zeitlimit-Override:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Anzahl der momentan laufenden PlayTime-Aktivitäten (Anwendungen)" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Laufende Aktivitäten:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Die Aktivitäten während berechnungsreien (\"∞\") Zeitintervallen erlauben\n" "\n" "Diese Einstellung gestattet die Nutzung von Anwendungen aus der Aktivitäten-" "Liste während Zeitintervallen, die als berechnunsfrei (\"∞\") markiert sind.\n" "Wenn diese Einstellung nicht aktiviert ist, darf keine dieser Anwendungen in " "diesem Zeitraum laufen!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Erlaubt während \"∞\":" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "Dies sind für PlayTime-Aktivitäten verfügbare Tage und Zeitlimits" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "Dies zeigt die Anwendungen, die als PlayTime-Aktivitäten gezählt werden." #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Liste der Anwendungen" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Konfiguration für personalisierte Benachrichtigungen über die verbleibende " "Zeit.\n" "\n" "Bitte konfiguriere die Benachrichtigungen, wie es für Dich passt. Beachte " "jedoch, dass es zwei Arten von Benachrichtigungen gibt, die nicht verändert " "werden können: eine letzte Warnung kurz bevor die Nutzungszeit endet und, ein " "Countdown am Ende der Nutzungszeit.\n" "\n" "Der Einstellungswert \"Zeit\" gibt an, wie viel Nutzungszeit noch übrig ist, " "wenn dieser Hinweis angezeigt wird.\n" "Die \"Wichtigkeit\" definiert die Symbol-Farbe und die Eigenschaften der " "angezeigten Benachrichtigungen wie folgt:\n" "\n" "Information - grünes Symbol und informative Benachrichtigung\n" "Warnung - gelbes Symbol und informative Benachrichtigung\n" "Schwerwiegend - rotes Symbol und wichtige Benachrichtigung\n" "Kritisch - rotes Symbol und kritische Benachrichtigung. Diese Benachrichtigung " "wird normalerweise über allen anderen Anwendungen eingeblendet und bleibt " "geöffnet, bis sie weggeklickt wird. Allerdings hängt das genaue Verhalten sehr " "stark von der genutzten Desktop-Umgebung ab." #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Einstellungen für Benachrichtigungen" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Einen neuen Benachrichtigungs-Schwellwert zur Liste hinzufügen" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Einen Benachrichtigungs-Schwellwert von der Liste entfernen" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Konfiguration für personalisierte Benachrichtigungen über die verbleibende " "PlayTime (Spiele-Zeit).\n" "\n" "Bitte konfiguriere die Benachrichtigungen, wie es für Dich passt.\n" "\n" "Der Einstellungswert \"Zeit\" gibt an, wie viel Nutzungszeit noch übrig ist, " "wenn dieser Hinweis angezeigt wird.\n" "Die \"Wichtigkeit\" definiert die Symbol-Farbe und die Eigenschaften der " "angezeigten Benachrichtigungen wie folgt:\n" "\n" "Information - grünes Symbol und informative Benachrichtigung\n" "Warnung - gelbes Symbol und informative Benachrichtigung\n" "Schwerwiegend - rotes Symbol und wichtige Benachrichtigung\n" "Kritisch - rotes Symbol und kritische Benachrichtigung. Diese Benachrichtigung " "wird normalerweise über allen anderen Anwendungen eingeblendet und bleibt " "geöffnet, bis sie weggeklickt wird. Allerdings hängt das genaue Verhalten sehr " "stark von der genutzten Desktop-Umgebung ab." #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Einstellungen für PlayTime-Benachrichtigungen" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Einen neuen PlayTime-Benachrichtigungs-Schwellwert zur Liste hinzufügen" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Einen PlayTime-Benachrichtigungs-Schwellwert von der Liste entfernen" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Benachrichtigungen" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Wähle aus, ob Sprach-Benachrichtigungen benutzt werden sollen (falls " "verfügbar).\n" "\n" "Für Sprach-Benachrichtigungen ist die Installation des Pakets \"python3-" "espeak\" oder \"python3-espeak-ng\" notwendig." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Sprach-Hinweise verwenden" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Dies bestimmt das Logging-Level.\n" "\n" "Bitte nicht verändern, außer Du weißt genau was Du tust." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Log-Ausführlichkeit" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Sollen Änderungen an Limits oder der erlaubten Nutzungszeiten angezeigt werden" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Limit-Änderungen anzeigen" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Auswählen, ob alle Benachrichtigungen angezeigt werden sollen.\n" "\n" "Wenn nicht ausgewählt, dann erden nur die Wichtigen angezeigt." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Alle Benachrichtigungen anzeigen" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Auswählen, ob Sekunden in dem Benachrichtigungs-Bereich angezeigt werden " "sollen.\n" "\n" "Manche Desktop-Umgebungen, wie KDE5, unterstützen keinen Text zusätzlich zum " "Benachrichtigungs-Symbol." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Benachrichtigungen enthalten Sekunden" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Dies bestimmt, wie lange eine Benachrichtigung angezeigt wird für normale " "Benachrichtigungen über verbleibende Zeit und Konfigurationsänderungen.\n" "\n" "Der Wert wird in Sekunden angegeben.\n" "Ein Wert von 0 bedeutet: anzeigen, solange bis weggeklickt. (Nicht empfohlen " "für normale Benachrichtigungen.)\n" "\n" "Hinweis: Die genutzte Desktop-Umgebung kann den hier eingestellten Wert " "überschreiben. In diesem Fall hat der hier eingestellte Wert keine Auswirkungen." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Benachrichtigungs-Timeout (Sek.)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Dies bestimmt, wie lange eine Benachrichtigung angezeigt wird für \"kritische\" " "Benachrichtigungen über verbleibende Zeit (wenn das Symbol rot wird).\n" "\n" "Der Wert wird in Sekunden angegeben.\n" "Ein Wert von 0 bedeutet: anzeigen, solange bis weggeklickt.\n" "\n" "Hinweis: Die genutzte Desktop-Umgebung kann den hier eingestellten Wert " "überschreiben. In diesem Fall hat der hier eingestellte Wert keine Auswirkungen." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Zeitlimit für kritische Benachrichtigung (Sek.)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Auswahl ob der Sound \"Piepton\" (kurzer Benachrichtigungston) für neue " "Benachrichtigungen von Timekpr-nExT verwendet werden soll.\n" "\n" "Dies funktioniert nur für aktivierte Benachrichtigungen.\n" "\n" "Wenn diese Einstellung nicht änderbar ist, unterstützt dein System keine Sound-" "Benachrichtigungen." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Sound \"Piepton\" für Benachrichtigungen" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Konfiguration" #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> Art der Beschränkung / Sperre festlegen (\"lock\" - Sitzung sperren, " #~ "\"suspend\" - Den Rechner in den Ruhezustand versetzen, \"suspendwake\" - In " #~ "den Ruhezustand versetzen und wieder aufwecken, \"terminate\" - Sitzung " #~ "beenden, \"shutdown\" - Den Rechner herunterfahren), Beispiele" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Auswahl, ob das Timekpr-next Schlüssel-Symbol und Benachrichtigungen für den " #~ "Nutzer angezeigt werden" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Wähle aus, ob Sprach-Benachrichtigungen benutzt werden sollen (falls " #~ "verfügbar).\n" #~ "\n" #~ "Für Sprach-Benachrichtigungen ist die Installation des Pakets \"python3-" #~ "espeak\" notwendig." #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Copyright (c) 2018-2021 Eduards Bezverhijs" timekpr-next/resource/locale/de/LC_MESSAGES/timekpr.mo000644 001750 001750 00000222203 15122253261 024446 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–Ö®–…˜ ˜&½˜Cä˜3(™\™Os™9ÙWý™UšsršÊæš»±›Kmœ7¹œñœ. ž·;Ÿ+óŸ# žC hâ AK¡^�¡iì¡OV¢¦¢¬¢Œ¿¢L£]b£)À£E꣑0¤H¤? ¥-K¥/y¥9©¥ã¥#ü¥ ¦4¦E¦/^¦8ަLǨª21ª"dª‡ª5ŸªÕªMõª#C«Cg«4««à«"÷«A¬H\¬O¥¬Dõ¬S:­9Ž­SÈ­_®U|®Ò®+å®=¯ O¯U]¯ ³²#¿¶ã¶ ú¶·N·�i·%÷·(¸5F¸0|¸3­¸Uá¸7¹¹F¹º0 º:º"Xº{º5�º ƺÓº0׺»¿»ÀÞ»`Ÿ¼l½m½3~½7²½Ä꽯¿Í¿ â¿%ì¿ÔÀÖçÀ ¾ÁßÁ6úÁ:1Â\lÂ5ÉÂWÿÂ:WÃ’ÃìÃpÄ:‚Ä\½Ä:Å5UÅW‹Å4ãÅ-Æ&FÆmÆ'qÆG™ÆáÆ�ôÆs…É*ùÉ$Ê <ÊÂHÊà ËdÏË 4Ì AÌ MÌ1nÌ@ ÌáÌ2ôÌE'Í mÍ"xÍ ›Í¦ÍºÍ¼ÑÍÊŽÎ*Yϰ„Ï¿5Ð|õÐ rÑ!|ÑDžÑ!ãÑÒ Ò$$Ò%IÒ oÒ�ÒA£ÒlåÒRÔRhÕ»ÕÄÕÕÕHëÕ;4Ö_pÖGÐÖ×9/×i×R|×tÏ×QDØ)–ØKÀØ( Ù5Ù"UÙxÙ.ŒÙ»ÙDÍÙÚB/Ú^rÚ/ÑÚ7Ûw9Û±Ü$ÃÜFèÜ#/ÝSÝhÝD€Ý+ÅÝGñÝ(9Þ;bÞ/žÞ1ÎÞß2ß0DßuߕߵßÌßçß)ößK à(làÔ•àÌjá(7â`ãñväøhå"aæÇ„ç¶Lè é%é(6é _é méŽé%©éŽÏéO^ꀮê»/ë ëë$õëì'9ìaì%rìG˜ì$àì?í@EíD†íDËí&î:7î9rî6¬î@ãîB$ïDgï&¬ï¼Óï0�ñ%ÁñÝçñ’ÅòÅXô]öå|öçbøJJùוù¥múü8ü5Qü‡üVŸü öüý!ý<ýUýjý}ý]�ý+îý+þFþZþpþˆþžþ(´þ9ÝþZÿ(rÿ8›ÿ1Ôÿ >+j&…¬È,Ü0 Ì:;#>"b2…2¸Të<@1} ¯ÐíHMeI³PýLNH›'ä 0&3W‹©4À:õ$0/U^…€äceGÉi L{ =È _ Bf K© mõ Pc j´ N Nn S½ ^ \p <Í ^ Ai4«Và979q7«Lãn0QŸ;ñ]-@‹HÌjM€<Î3 U?i•AÿcAF¥>ì`+CŒ ÐÝò¼°Ï€š¢ ¿ÌæBf‡©¦1—ØEp©¶¹`9%T>zI¹TAXšœ$·ÜãRå8 : I g z | € 4‘ Æ Þ î ! !)!;!®C!ò#ù# $ $Y)$c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: Timekpr nExT Report-Msgid-Bugs-To: PO-Revision-Date: 2025-10-14 19:19+0300 Last-Translator: Eduards Bezverhijs Language-Team: Ulle Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __:1,2 %(n)s Minute%(n)s Minuten%(n)s Sekunde%(n)s Sekundennoch %(n)s Sekundenoch %(n)s Sekunden%(n)s Sekunde PlayTime verbleibt%(n)s Sekunden PlayTime verbleibenInsgesamt %(n)s Benutzer:Insgesamt %(n)s Benutzer:---=== BEACHTEN ===---Holen Sie sich Echtzeit Gespeicherte Benutzerkonfiguration vom Server, Beispiel==> Gespeicherte Benutzerliste vom Server holen, Beispiel==> Gespeicherte Benutzerkonfiguration und Zeitinformationen vom Server holen, Beispiel==> Hilfe ausgeben, Beispiel==> Festlegen, für welche Prozesse die Zeit als PlayTime berechnet wird (Filtermasken für die Prozesse). Beispiel==> PlayTime-Restzeit für den Benutzer festlegen ab dem jetzigen Zeitpunkt: "+" (Zeit hinzufügen), "-" (Zeit abziehen), "=" (genaue verfügbare Zeit einstellen), Beispiel (eine Stunde hinzufügen)"==> PlayTime Zeit-Limits für alle erlaubten Tage festlegen. Die Anzahl der Werte darf die Anzahl der Tage, an denen PlayTime für den Benutzer erlaugt ist, nicht überschreiten. Beispiel==> festlegen an welchen Tagen PlayTime Aktivitäten erlaubt sind, Beispiel==> Erlaubte Tage für den Benutzer festlegen, Beispiel==> Erlaubte Stunden für den ausgewählten Tag festlegen, oder "ALL" für den ganzen Tag. Optional dahinter die Start- und End-Minuten in eckigen Klammern [x-y] angeben. Zusätzlich ein ! vor der Stunde, wenn diese nicht berechnet wird (also freie Zeit für den Benutzer), Beispiel==> Art der Beschränkung / Sperre festlegen ("lock" - Sitzung sperren, "suspend" - Den Rechner in den Ruhezustand versetzen, "suspendwake" - In den Ruhezustand versetzen und wieder aufwecken, "terminate" - Sitzung beenden, "kill" - Sitzungen töten, "shutdown" - Den Rechner herunterfahren), Beispiele==> Restzeit festlegen ab jetzt für momentanen Benutzer: "+" (Zeit hinzufügen), "-" (Zeit subtrahieren), "=" (genaue verfügbare Zeit einstellen), Beispiel (eine Stunde hinzufügen)==> Zeitlimit pro Monat festlegen, Beispiel==> Wochenlimit festlegen, Beispiel==> Zeitlimits für alle erlaubten Tage festlegen; die Anzahl der Werte darf nicht größer sein als die Anzahl der erlaubten Tage für den Benutzer, Beispiel==> Festlegen, ob PlayTime Aktivitäten während berechnungsfreien Zeiten ("∞") erlaubt sind, Beispiel==> festlegen ob PlayTime für den Nutzer aktiviert ist, Beispiel==> Festlegen, ob statt der normalen Nutzungszeit die PlayTime berechnet werden soll. Beispiel==> Legen Sie fest, ob das Taskleistensymbol ausgeblendet und Benachrichtigungen verhindert werden sollen==> Festlegen, ob inaktive Benutzer-Sitzungen beachtet werden sollen, BeispielÜberÜber Timekpr-nExTMomentaner Zeitverbrauch von laufenden PlayTime-Aktivitäten (real-time; nur verfügbar, wenn der Benutzer wenn der Benutzer eingeloggt ist)Liste der AnwendungenAktuell heute verbleibende PlayTime (real-time, verfügbar, wenn der Benutzer eingeloggt ist)Benutzer zur Ausschluss-Liste hinzufügenSitzungs-Typ, der nicht überwacht werden soll, zur Liste hinzufügenEine neue PlayTime-Aktivität hinzufügen. Bitte die Aktivitäten-Maske und eine benutzerfreundliche Beschreibung direkt in der Liste eintragen.Einen neuen PlayTime-Benachrichtigungs-Schwellwert zur Liste hinzufügenEinen neuen Benachrichtigungs-Schwellwert zur Liste hinzufügenDie angegebene Anzahl hinzufügen (Belohnung)Überwachten Sitzungs-Typ zur Liste hinzufügenZusätzliche PlayTime für den Benutzer wurde verarbeitetErweiterte KonfigurationZusätzliche KonfigurationsoptionenZusätzliche LimitsWeitere OptionenZusätzliche StatistikenZusatz-Zeit für den Benutzer wurde verarbeitetPlayTime Aktivitäten während berechnungsfreien ("∞") Zeitintervallen für den ausgewählten Benutzer erlauben. Diese Einstellung erlaubt dem Benutzer in Zeiträumen, die als berechnungsfrei ("∞") markiert sind, Anwendungen, die in der PlayTime-Aktivitäten-Liste aufgeführt sind, zu nutzen. Wenn diese Einstellung aktiviert ist, dann wird die Benutzung von diesen Anwendungen nicht auf die PlayTime-Limits angerechnet. Anderenfalls werden Anwendungen in der PlayTime-Liste während berechnungsfreien ("∞") Zeiträumen sofort nach ihrem Start wieder beendet.Die Aktivitäten während berechnungsreien ("∞") Zeitintervallen erlauben Diese Einstellung gestattet die Nutzung von Anwendungen aus der Aktivitäten-Liste während Zeitintervallen, die als berechnunsfrei ("∞") markiert sind. Wenn diese Einstellung nicht aktiviert ist, darf keine dieser Anwendungen in diesem Zeitraum laufen!Veränderung des TageslimitsErlaubte Tage für den Benutzer wurden verarbeitetErlaubt während "∞" Intevallen:Erlaubt während "∞":Erlaubte Stunden für den Benutzer wurden verarbeitetPlayTime-Konfiguration anwendenAlle PlayTime-Limit- und Konfigurations-Änderungen auf deiser Seite anwendenTimekpr-nExT-Einstellungen anwendenÄnderungen der erweiterten Konfiguration auf dieser Seite anwendenAnwenden aller Timekpr-nExT Einstellungen auf einmalKonfiguration anwendenListe der Tages-Limits übernehmenAlle vorgenommenen Limit-Veränderungen auf dieser Seite anwendenKurze Zusammenfassung zur heute bestehenden und verwendeten NutzungszeitAnzahl der Tage auswählen um die der gewählte Zeitraum verändert werden sollHier die zu verändernden Stunden an den markierten Tagen auswählenAnzahl der Stunden auswählen, um die der gewählte Zeitraum verändert werden sollGewünschte Minuten-Veränderung für die gewählten TageAnzahl der Minuten auswählen, um die der gewählte Zeitraum verändert werden sollDieses Auswählen, um das PlayTime-Tageslimit des Benutzers für den heutigen Tag zu verändernDieses Auswählen, um das Zeitlimit des Benutzers für den heutigen Tag zu verändernFenster schließenKommando fehlgeschlagen: Zugriff verweigertKommando fehlgeschlagen: Kommunikation wurde nicht angenommenKonfigurationKonfiguration für personalisierte Benachrichtigungen über die verbleibende PlayTime (Spiele-Zeit). Bitte konfiguriere die Benachrichtigungen, wie es für Dich passt. Der Einstellungswert "Zeit" gibt an, wie viel Nutzungszeit noch übrig ist, wenn dieser Hinweis angezeigt wird. Die "Wichtigkeit" definiert die Symbol-Farbe und die Eigenschaften der angezeigten Benachrichtigungen wie folgt: Information - grünes Symbol und informative Benachrichtigung Warnung - gelbes Symbol und informative Benachrichtigung Schwerwiegend - rotes Symbol und wichtige Benachrichtigung Kritisch - rotes Symbol und kritische Benachrichtigung. Diese Benachrichtigung wird normalerweise über allen anderen Anwendungen eingeblendet und bleibt geöffnet, bis sie weggeklickt wird. Allerdings hängt das genaue Verhalten sehr stark von der genutzten Desktop-Umgebung ab.Konfiguration für personalisierte Benachrichtigungen über die verbleibende Zeit. Bitte konfiguriere die Benachrichtigungen, wie es für Dich passt. Beachte jedoch, dass es zwei Arten von Benachrichtigungen gibt, die nicht verändert werden können: eine letzte Warnung kurz bevor die Nutzungszeit endet und, ein Countdown am Ende der Nutzungszeit. Der Einstellungswert "Zeit" gibt an, wie viel Nutzungszeit noch übrig ist, wenn dieser Hinweis angezeigt wird. Die "Wichtigkeit" definiert die Symbol-Farbe und die Eigenschaften der angezeigten Benachrichtigungen wie folgt: Information - grünes Symbol und informative Benachrichtigung Warnung - gelbes Symbol und informative Benachrichtigung Schwerwiegend - rotes Symbol und wichtige Benachrichtigung Kritisch - rotes Symbol und kritische Benachrichtigung. Diese Benachrichtigung wird normalerweise über allen anderen Anwendungen eingeblendet und bleibt geöffnet, bis sie weggeklickt wird. Allerdings hängt das genaue Verhalten sehr stark von der genutzten Desktop-Umgebung ab.Konfiguration für den Benuzter %s:Konfiguration erhaltenVerbundenVerbindungsaufbau …Verbleibende zusammenhängende Zeit. Kann mehr als den aktuellen Tag umfassen.Zusammenhängende verbleibende Zeit. Dies kann mehr als den aktuellen Tag umfassen. (real-time, verfügbar, wenn der Benutzer eingeloggt ist)Verbleibende Zeit ohne Unterbrechung:Verwalten der Timekpr-nExT EinstellungenVerwalten der von Timekpr-nExT überwachten ZuständeTyp der Sitzungssteuerung wurde nicht übergebenListe der Sitzungssteuerung-Typen ist nicht korrektListe der Sitzungssteuerung-Typen ist nicht korrekt und kann nicht verarbeitet werdenCountdown-ZeitErstelle ein neues Zeit-Intervall, welches dem Benutzer zur Verfügung steht. Nachdem Erstellen des Intervalls, bitte die Start- und End-Zeiten direkt in der Intervall-Liste bearbeitenKritischZeitlimit für kritische Benachrichtigung (Sek.)Aktuelle PlayTime-StatistikenMomentaner effektiver BenutzernameAktuelle StatistikenKonfigurieren der Tages-Limits für die gesamte WocheTages-LimitsTagTags-Limits für den Benutzer wurden verarbeitetNutzungstage & LimitsAbziehen der gewählten Zeiteinheiten (Stunden oder Minuten) vom PlayTime-Zeitlimit für die ausgewählten Tage. Hinweis: Man kann mehrere Tage gleichzeitig für die Veränderung auswählen!Abziehen der gewünschten Zeitveränderung (Minuten oder Stunden) zum Tages-Zeitlimit der ausgewählten Tage. Hinweis: man kann mehrere Tage gleichzeitig für die Zeitveränderung auswählen.Abziehen der gewählten Zeiteinheiten (Tage, Stunden, oder Minuten) vom Wochen oder Monats-LimitEntferne das ausgewählte Zeitintervall aus der Liste der Intervalle, die dem Benutzer zur Verfügung steht.ulle@o2online.dePlayTime für den ausgewählten Benutzer aktivierenPlayTime-Aktivieren für den Benutzer wurde verarbeitetPlayTime-Override für den ausgewählten Nutzer aktivieren Diese Einstellung verändert die Zeitabrechnung so, dass Zeit nur dann berechnet wird, wenn wenigstens eine der Anwendungen auf der PlayTime-Aktivitäten-Liste ausgeführt wird. Wenn keine dieser Prozesse laufen, wird die Zeit als Leerlauf berechnet, ist also effektiv berechnungsfreie Zeit für den Nutzer. Dies betrifft nur die Zeitabrechnung; die Zeitintervalle werden trotzdem erzwungen!PlayTime-Override aktivieren:PlayTime aktivieren:AktiviertErweiterte Aktivitäten-Überwachung:End-Stunde für die automatische Aufweckfunktion eingeben. Hinweis: diese Option kann nur dann funktionieren, wenn die Funktion Aufwecken-durch-RealTime-Clock vom BIOS / UEFI unterstützt wird und aktiviert ist.Start-Stunde für die automatische Aufweckfunktion eingeben. Hinweis: diese Option kann nur dann funktionieren, wenn die Funktion Aufwecken-durch-RealTime-Clock vom BIOS / UEFI unterstützt wird und aktiviert ist.Nicht überwachte Sitzungs-TypenNicht überwachte BenutzerAusgeschlossene Sitzungs-Typen wurden nicht übergebenListe der ausgeschlossenen Sitzungstypen ist nicht korrektListe der ausgeschlossenen Sitzungstypen ist nicht korrekt und kann nicht verarbeitet werdenListe der ausgeschlossenen Benutzer ist nicht korrektListe der ausgeschlossenen Benutzer ist nicht korrekt und kann nicht verarbeitet werdenListe der ausgeschlossenen Benutzer wurde nicht übergebenVerbindung fehlgeschlagenDie Funktion "%%s", mit der die Leerlaufzeit erkannt wird, kann nicht aktiviert werden! Leerlauf- / Inaktivitätszeit wird möglicherweise nicht berücksichtigt, wenn der Bildschirm gesperrt ist!Letzte MitteilungZeitpunkt der letzten Ankündigung "%%s" ist nicht korrektZeitpunkt der letzten Ankündigung "%%s" ist nicht korrekt und kann nicht verarbeitet werdenZeitpunkt der letzten Ankündigung ist noch nicht erreichtZeitpunkt der letzten Warnung "%%s" ist nicht korrektZeitpunkt der letzten Warnung "%%s" ist nicht korrekt und kann nicht verarbeitet werdenZeitpunkt der letzten Warnung wurde nicht übergebenFormat: Format: VonVerberge Symbol und Benachrichtigungen:Das Symbol zum Ausblenden des Fachs für den Benutzer wurde verarbeitetStunden-IntervalleStunden-Intervalle, die dem Benutzer zur Verfügung stehen Die Option "∞" bedeutet, das die Nutzungszeit während dieses Intervalls nicht für das Tageslimit berechnet wird, es wird stattdessen als Leerlaufzeit berechnet. Hinweis: Wenn das Tageslimit um 24:00 Uhr endet und das Limit de folgenden Tages um 0:00 beginnt, kann der Benutzer unterbrechungsfrei über Mitternacht hinweg arbeiten. Hinweis: Es können nicht mehrere Minuten-Zeit-Intervalle innerhalb einer Stunde konfiguriert werden. Nur ein einziges Intervall kann innerhalb einer Stunde beginnen oder enden oder die Stunde umfassen, aber nicht mehrere. Dies ist by Design so, kein Fehler. Wie lange der Benutzer inaktiv war seit dem letzten Login. (real-time, verfügbar wenn der Benutzer eingeloggt ist)Fehler (%%s) beim Bereitstellen des Icons!Ist DAS nicht ein Icon?WichtigkeitHinzufügen der gewählten Zeiteinheiten (Stunden oder Minuten) zum PlayTime-Zeitlimit für die ausgewählten Tage. Hinweis: Man kann mehrere Tage gleichzeitig für die Veränderung auswählen!Hinzufügen der gewünschten Zeitveränderung (Minuten oder Stunden) zum Tages-Zeitlimit der ausgewählten Tage. Hinweis: man kann mehrere Tage gleichzeitig für die Zeitveränderung auswählen.Hinzufügen der gewählten Zeiteinheiten (Tage, Stunden, oder Minuten) zum Wochen- oder Monats-LimitInfo & HeuteInformationInformationen über die PlayTimeInformation über verbleibende / verbrauchte ZeitInterner Verbindungsfehler. Bitte schauen Sie in die log-DateienIntervall entferntIntervall-Beginn muss ungleich Intervall-Ende seinDie Startzeit des Zeitintervalls darf nicht später als das Ende seinIntervalleComputer-Nutzung im Griff behaltenBegrenzungLimit-KonfigurationLimits & KonfigurationListe der Sitzungs-Typen die überwacht werden sollen. Bitte nicht verändern oder damit experimentieren, außer Du weißt wirklich genau was Du tust (und glaubst nicht nur es zu wissen).Liste von Sitzungs-Typen, die von der Überwachung ausgenommen sind. Bitte nicht verändern oder damit experimentieren, außer Du weißt wirklich genau was Du tust (und glaubst nicht nur es zu wissen).Liste der im System registrierten BenutzerListe von Benutzern, die von der Überwachung ausgenommen sind. Bitte die echten Benutzernamen hier angeben, nicht Klartext-Namen. Zum Beispiel: "ameier", nicht "Anton Meier".Liste der Wochentage und zusätzliche Informationen über die PlayTime Tages-Limits Bitte die Tage für den Benutzer de- / aktivieren und Zeitlimits für die PalyTime-Aktivitäten festlegen.Liste der Wochentage und zusätzliche Informationen über das Tageslimit Bitte die Tage für den Benutzer de- / aktivieren.Log-StufeLog level "%%s" ist nicht korrektLog level "%%s" ist nicht korrekt und kann nicht verarbeitet werdenLog level wurde nicht übergebenLog-AusführlichkeitMonatlichHinweise, bitte sorgfältig lesen ;)Einstellungen für BenachrichtigungenBenachrichtigungs-Timeout (Sek.)BenachrichtigungenAnzahl der momentan laufenden PlayTime-Aktivitäten (Anwendungen)Anzahl der dem Benutzer verbleibenden Sekunden, bevor die konfigurierte Restriktion / Sperre auf seine Sitzung angewendet wird. Wenn dieser Zeitpunkt erreicht wurde und der Nutzer noch immer aktiv ist, werden die Sitzungen des Benutzers entsprechend der eingestellten Restriktion / Sperre behandelt und es kann fast nichts unternommen werden um das zu verhindern.Anzahl der verbleibenden Sekunden von der verfügbaren Zeit des Benutzers, bevor eine letzte kritische Mitteilung gesendet wird, dass seine Nutzungszeit abläuft. Hinweis: Die anderen Mitteilungs-Zeiten sind individuell durch den Nutzer in der Client-Anwendung konfigurierbar!PARAMETERANALYSEFEHLER (bitte überprüfen Sie die Gültigkeit der Parameter): %%sZeitraumHeutige PlayTimePlayTime-AktivitätenPlayTime-Aktivitäten (Anwendungen) für den Benutzer wurden verarbeitetErlaubte PlayTime-Tage für den Benutzer wurden verarbeitetDas Flag PlayTime-erlauben-währendberechnungsfreien-Zeiten für den Benutzer wurde verarbeitetHeute verbleibende PlayTime-Zeit (gespeicherter Staus, nicht real-time)PlayTime-KonfigurationPlayTime-Tageslimits für den Benutzer wurden verarbeitetPlayTime aktivert:Das Flag für erweitertes PlayTime-Aktivitäten-Monitoring "%%s" ist nicht korrektDas Flag für erweitertes PlayTime-Aktivitäten-Monitoring "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDas Flag für erweitertes PlayTime-Aktivitäten-Monitoring wurde nicht übergebenDas PlayTime-Flag "%%s" ist nicht korrektDas PlayTime-Flag "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDas Playtime-Flag wurde nicht übergebenverbleibende PlayTime (aktuell)Verbleibende PlayTime-Zeit (heute)PlayTime ZeitlimitsEinstellungen für PlayTime-BenachrichtigungenPlayTime-OptionenDas Flag PlayTime überschreiben für den Benutzer wurde verarbeitetVerbrauchte PlayTime (heute)Heute verbrauchte PlayTime (gespeicherter Status, nicht real-time)Bitte öffnen Sie die Anwendung erneut wenn Sie Superuser sind und Timekpr-nExT bereits läuftBitte wählen Sie einen Tag für die BegrenzungBitte wählen Sie einen Stunden-Intervall zum EntfernenBitte eine Liste der zu überwachenden Prozesse eingeben. (gesamte Prozess-Namen, aber ohne Pfadangabe; Groß-Kleinschreibung beachten.) Es ist auch möglich reguläre Ausdrücke (RegExp) als Masken für Prozesse zu benutzen. Aber bitte größte Vorsicht, damit nicht unbeabsichtigt falsche Prozesse des Nutzers beendet werden Hinweis: RegExp ist eine Experteneinstellung!Abfrage-IntervallAbfrage-Zeit "%%s" ist nicht korrektAbfrage-Zeit "%%s" ist nicht korrekt und kann nicht verarbeitet werdenAbfrage-Zeit wurde nicht übergebenProzess-BeschreibungMaske für die ProzesseEinen PlayTime-Benachrichtigungs-Schwellwert von der Liste entfernenBenutzer von der Ausschluss-Liste entfernenSitzungs-Typ, der nicht überwacht werden soll, von der Liste entfernenAusgeschlossene Sitzungs-Typen entfernenEinen Benachrichtigungs-Schwellwert von der Liste entfernenDie ausgewählte PlayTime-Aktivität entfernen.Überwachten Sitzungs-Typ von der Liste entfernenWiederherstellenWiederherstellen einer gespeicherten KonfigurationArt der Beschränkung / Sperre wurde verarbeitetArt der Beschränkung / Sperre:Laufende Aktivitäten (aktuell)Laufende Aktivitäten:Alle Änderungen speichernZeit speichernSpeicherzeitpunkt "%%s" ist nicht korrektSpeicherzeitpunkt "%%s" ist nicht korrekt und kann nicht verarbeitet werdenSpeicherzeitpunkt wurde nicht übergebenWähle die Art der Beschränkung / Sperre für den Nutzer Hinweis: bitte große Vorsicht, wenn die Standardeinstellung verändert wird! In diesem Fall die die Beschreibungen aller möglichen Optionen durchlesen!Zeitintervall auswählen, in dem der Rechner automatisch aufgeweckt werden kann. Hinweis: diese Option funktioniert nur, wenn das Aufwecken des Rechners via RealTimeClock (RTC) im BIOS/UEFI aktiviert istWähle, ob inaktive Sitzungszeit mitgezählt werden soll. Wenn diese Option nicht ausgewählt ist, wird Zeit in der virtuellen Konsole (nicht Terminal-Emulator) und Zeiten mit gesperrtem Bildschirm nicht mitgezählt. Was genau als inaktive Sitzung gilt, variiert zwischen den Desktop-Umgebungen.Auswahl, ob inaktive Sitzungs-Zeit mitberechnet wird. Wenn diese Option nicht aktiviert ist, dann wird Nutzungszeit in der virtuellen Konsole (nicht Terminal-Emulator) und Zeit während der Bildschirm gesperrt ist nicht mitberechnet. Dies variiert zwischen Desktop-Umgebungen.Nutzungszeit mit gesperrtem Bildschirm oder ohne aktives Fenster (sogenannte console) wird nicht mitgezählt (abhängig von gewählter Desktopumgebung). Ist das Häkchen gesetzt, zählt alles vom Einloggen bis zum Ausloggen als Nutzungszeit.Wählen Sie aus, ob das Timekpr-next-Schlosssymbol und Benachrichtigungen dem Nutzer angezeigt werden sollen. Bitte beachten Sie, dass durch das Aktivieren dieser Option alle Informationen und Benachrichtigungen für den Nutzer deaktiviert werden!Auswahl ob der Sound "Piepton" (kurzer Benachrichtigungston) für neue Benachrichtigungen von Timekpr-nExT verwendet werden soll. Dies funktioniert nur für aktivierte Benachrichtigungen. Wenn diese Einstellung nicht änderbar ist, unterstützt dein System keine Sound-Benachrichtigungen.Wähle aus, ob Sprach-Benachrichtigungen benutzt werden sollen (falls verfügbar). Für Sprach-Benachrichtigungen ist die Installation des Pakets "python3-espeak" oder "python3-espeak-ng" notwendig.Das Polling-Intervall für die Sitzungsabfrage gibt an, wie häufig Sitzungen und Aktivitäten überprüft und berechnet werden. 3-5 Sekunden sind optimal; im Zweifel nicht ändern.Sitzungs-TypGenau das angegebene Zeitlimit setzenEinstellungen für PlayTime-AktivitätenSchwerwiegendAlle Benachrichtigungen anzeigenLimit-Änderungen anzeigenBenachrichtigungen enthalten SekundenZeit in Sekunden, wann Timekpr-nExT den real-Time Countdown beginnt, bevor eine Restriktion / Sperre auf eine Benutzersitzung angewendet wird.Sollen Änderungen an Limits oder der erlaubten Nutzungszeiten angezeigt werdenAuswählen, ob alle Benachrichtigungen angezeigt werden sollen. Wenn nicht ausgewählt, dann erden nur die Wichtigen angezeigt.Auswählen, ob Sekunden in dem Benachrichtigungs-Bereich angezeigt werden sollen. Manche Desktop-Umgebungen, wie KDE5, unterstützen keinen Text zusätzlich zum Benachrichtigungs-Symbol.GestartetStatus des Timekpr-nExT Admin ClientStatus des Timekpr-nExT ClientDie angegebene Anzahl abziehen (Strafe)Beendigungs-ZeitEnd-Zeitpunkt "%%s" ist nicht korrektEnd-Zeitpunkt "%%s" ist nicht korrekt und kann nicht verarbeitet werdenEnd-Zeitpunkt wurde nicht übergebenIntervall überschneidet sich mit bereits vorhandenem IntervallIntervall-Ende kollidiert mit bereits vorhandenem Intervall-EndeIntervall-Beginn kollidiert mit bereits vorhandenem Intervall-BeginnIntervall-Beginn oder -Ende duploziert bereits vorhandenen IntervallDer folgende Befehl ist nicht korrekt:Wert der Stunden-Veränderung für das heutige Tages-LimitWert der Minuten-Veränderung für das heutige TageslimitBenutzung von Timekpr-nExT Admin-Client ist wie folgt:Es gibt ein Problem mit der Kommunikation zu Timekpr-nExT (%%s)!Es gibt ein Problem beim Verbinden zum Timekpr-nExT Service (%%s)!Dies sind für PlayTime-Aktivitäten verfügbare Tage und ZeitlimitsIhnen erlaubte Nutzungstage und LimitsDas ist die Konfigurations-App für Timekpr-nExT. Hiermit können sowohl Zeitlimits für einzelne Benutzer, als auch allgemeine Timekpr-nExT-Optionen festgelegt werden Um diese Anwendung zu benutzen, müssten Sie entweder Administrator (superuser), oder Mitglied der timekpr-Gruppe sein. Hinweis: die Timekpr-nExT-Konfiguration steht nur im Administrator-Modus zur Verfügung. Bitte vorsichtig Konfigurieren: sperren Sie sich nicht selbst aus!Hier werden die PlayTime Zeitlimits konfiguriertHier werden die Zeitlimits festgelegtDiese Option überschreibt die standardmäßige Zeitberechnung. Wenn diese Option aktiviert ist, wird Zeit nur berechnet, wenn Anwendungen aus der Aktivitäten-Liste laufen. Der Rest der Zeit wird als Leerlauf berechnet.Dies bestimmt, wie lange eine Benachrichtigung angezeigt wird für "kritische" Benachrichtigungen über verbleibende Zeit (wenn das Symbol rot wird). Der Wert wird in Sekunden angegeben. Ein Wert von 0 bedeutet: anzeigen, solange bis weggeklickt. Hinweis: Die genutzte Desktop-Umgebung kann den hier eingestellten Wert überschreiben. In diesem Fall hat der hier eingestellte Wert keine Auswirkungen.Dies bestimmt, wie lange eine Benachrichtigung angezeigt wird für normale Benachrichtigungen über verbleibende Zeit und Konfigurationsänderungen. Der Wert wird in Sekunden angegeben. Ein Wert von 0 bedeutet: anzeigen, solange bis weggeklickt. (Nicht empfohlen für normale Benachrichtigungen.) Hinweis: Die genutzte Desktop-Umgebung kann den hier eingestellten Wert überschreiben. In diesem Fall hat der hier eingestellte Wert keine Auswirkungen.Dies bestimmt das Logging-Level. Bitte nicht verändern, außer Du weißt genau was Du tust.Diese Einstellung bestimmt, ob die PlayTime-Aktivitäten-Überwachung die gesamte Kommandozeile, inklusive Argumente, zur Überwachung benutzt. (Standardmäßig wird nur der Prozess-Name benutzt.) Wenn diese Einstellung aktiviert ist, benutzt Timekpr-nExT zum Vergleichen die gesamte Kommandozeile bis zu 512 Zeichen, was erweiterte Prüfungen ermöglicht. Bitte ganz besonders vorsichtig sein und die RegExp-Muster in den einzelnen PlayTime-Masken der Benutzer doppelt überprüfen!Diese Einstellung bestimmt, ob die PlayTime-Funktionalität aktiviert ist. Dies ist der PlayTime-Hauptschalter. Wenn er ausgeschaltet ist, dann ist PlayTime für Alle ausgeschaltet, unabhängig von den individuellen Einstellungen!Dies zeigt die Anwendungen, die als PlayTime-Aktivitäten gezählt werden.Dies zeigt die Zeiten, die zur Nutzung verfügbar sind. Die Option "∞" bedeutet, dass die Zeit während dieses Zeitintervalls nicht auf das Tageslimit angerechnet wird. Sie wird stattdessen als Leerlauf gezählt.Intervall in Sekunden, in denen Timekpr-nExT den aktuellen Benutzer-Status auf die Festplatte speichert. Für höhere Performance bei gleichzeitig hoher Genauigkeit berechnet Timekpr-nExT die Nutzungszeiten zunächst im Arbeitspeicher mit der im Polling-Intervall festgelegten Häufigkeit. Diese Einstellung definiert die Häufigkeit mit der dieser Status für dauerhafte Speicherung auf die Festplatte geschrieben wird.ZeitErlaubte Zeit wurde geändert, bitte neue Zeit beachten!Heute verfügbare Zeit (gespeichert, nicht real-time)Zeit inaktiv (aktuell):Passive Nutzungszeit in der Benutzersitzung oder seit Timekpr-nExT neu gestartet wurdePassive Zeit:Verbleibende Zeit (aktuell):Verbleibende Zeit (heute):Verbleibende Zeit heute:Verbleibende Zeit...Zeitlimit (Monat):Zeitlimit (Woche):Konfiguration der Zeitbeschränkung wurde geändert, bitte neue Zeitbeschränkungen beachten!Ihnen erlaubte Nutzungszeit in diesem MonatIhnen erlaubte Nutzungszeit in dieser WocheZeitlimit-Override:Nutzungszeit (Monat):Nutzungszeit (Sitzung):Nutzungszeit (heute):Nutzungszeit (Woche):Verbrauchte Nutzungszeit in diesem MonatNutzungszeit dieses Monats (gespeichert, nicht real-time)Verbrauchte Nutzungszeit in der Benutzersitzung oder seit Timekpr-nExT neu gestartet wurdeVerbrauchte Nutzungszeit in dieser WocheNutzungszeit dieser Woche (gespeichert, nicht real-time)Nutzungszeit heute (gespeichert, nicht real-time)Heute verbrauchte Zeit:Timekpr-nExTKonfigurieren, wie Timekpr-nExT arbeiten soll (Administration)Timekpr-nExT-KonfigurationTimekpr-nExT PlayTime BenachrichtigungTimekpr-nExT AdministrationTimekpr-nExT ClientTimekpr-nExT-Konfiguration wurde gespeichertTimekpr-nExT-Schnittstelle ist noch nicht bereitTimekpr-nExT Log-Level. Bitte nur verändern, wenn unbedingt notwendig. In den Log-Dateien gibt es wahrscheinlich nichts Schönes zu sehen. Mögliche Werte sind: 1 - Standard, 2 - Debug, 3 - extra DebugTimekpr-nExT HinweisKonfiguration von Timekpr-nExTZuGesamte heute verbleibende PlayTimeGesamte heute verbrauchte PlayTimeVerbleibende Zeit insgesamt bis zum Ende des TagesBeachtung von Inaktivität "%%s" ist nicht korrektBeachtung von Inaktivität "%%s" ist nicht korrekt und kann nicht verarbeitet werdenInaktivitäts-Verfolgung für den Benutzer wurde verarbeitetBeachtung von Inaktivität wurde nicht übergebenPassive Nutzungszeit mitzählen:Passive Nutzung überwachen:Überwachte SitzungenUnerwarteter Fehler: %%sFehler beim Holen der Konfiguration. Bitte die Timekpr-nExT Logs ansehenFehler beim Holen der Benutzer-Konfiguration. Bitte Timekpr-nExT Logs ansehenFehler beim Holen der Benutzer-Liste. Bitte die Timekpr-nExT Logs ansehenFehler beim Aktualisieren der Konfiguration. Bitte die Timekpr-nExT Logs ansehenFehler beim Aktualisieren der Steuerung. Bitte die Timekpr-nExT Logs ansehenFehler beim Laden der Konfiguration. Bitte die Timekpr-nExT Logs ansehenSound "Piepton" für BenachrichtigungenSprach-Hinweise verwendenKonfiguration für Benutzer "%%s" nicht gefundenSteuerungs-Datei für Benutzer "%%s" nicht gefundenBenutzer "%%s" nicht gefundenBenutzer-KonfigurationPlayTime-Limits für den Benutzer wurden gespeichertZusätzliche Optionen für den Benutzer wurden gespeichertBenutzer-Konfiguration wurde geladenZeitlimits für den Benutzer wurden gespeichertDas Flag für PlayTime während berechnungsfreier Zeiten für Benutzer "%%s" ist nicht korrektDas Flag für PlayTime während berechnungsfreier Zeiten für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDas Flag für PlayTime während berechnungsfreier Zeiten für Benutzer "%%s" wurde nicht übergebenListe der PlayTime Tages-Limits für Benutzer \"%%s\" ist nicht korrektListe der PlayTime Tages-Limits für Benutzer \"%%s\" ist nicht korrekt und kann nicht verarbeitet werdenListe der PlayTime Tages-Limits für Benutzer \"%%s\" wurde nicht übergebenListe der PlayTime-Tage für Benutzer "%%s" ist nicht korrektListe der PlayTime-Tage für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenListe der PlayTime-Tage für Benutzer "%%s" wurde nicht übergebenDas Flag zur Aktivierung der PlayTime für Benutzer "%%s" ist nicht korrektDas Flag zur Aktivierung der PlayTime für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDas Flag zur Aktivierung der PlayTime für Benutzer "%%s" wurde nicht übergebenDie Veränderungs-Operation für die PlayTime-Zeit des Benutzers "%%s" kann eine der folgenden sein: - + =Das Flag zum Überschreiben der PlayTime für Benutzer "%%s" ist nicht korrektDas Flag zum Überschreiben der PlayTime für Benutzer "%%s" ist nicht korrektDas Flag zum Überschreiben der PlayTime für Benutzer "%%s" wurde nicht übergebenDas PlayTime Zeitlimit für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenErlaubte Stunden für Benutzer "%%s" sind nicht korrekt und können nicht verarbeitet werdenListe der Tages-Limits für Benutzer "%%s" ist nicht korrektListe der Tages-Limits für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenListe der Tages-Limits für Benutzer "%%s" wurde nicht übergebenListe der Tage für Benutzer "%%s" ist nicht korrektListe der Tage für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenListe der Tage für Benutzer "%%s" wurde nicht übergebenAnzahl der Tage für Benutzer "%%s" kann nur 1 bis 7 seinAnzahl der Tage für Benutzer "%%s" muss vorhanden seinDas Flag zum Ausblenden des Tray-Icons für Benutzer "%%s" ist nicht korrektDas Flag zum Ausblenden des Tray-Icons für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDas Flag zum Ausblenden des Tray-Icons für Benutzer "%%s" wurde nicht übergebenMonatliches Zeitlimit für Benutzer "%%s" ist nicht korrektMonatliches Zeitlimit für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenMonatliches Zeitlimit für Benutzer "%%s" wurde nicht übergebenDie Art der Beschränkung / Sperre für Benutzer "%%s" ist nicht korrektDie Art der Beschränkung / Sperre für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDie Art der Beschränkung / Sperre für Benutzer "%%s" wurde nicht übergebenDas PlayTime Zeitlimit für Benutzer "%%s" ist nicht korrektDas Zeitlimit für Benutzer "%%s" ist nicht korrektDas Zeitlimit für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDie Veränderungs-Operation für die Nutzungszeit des Benutzers "%%s" kann eine der folgenden sein: - + =Der Schalter für Inaktivitäts-Beachtung "%%s" ist nicht korrektDer Schalter für Inaktivitäts-Beachtung "%%s" ist nicht korrekt und kann nicht verarbeitet werdenDer Schalter für Inaktivitäts-Beachtung "%%s" wurde nicht übergebenWöchentliches Zeitlimit für Benutzer "%%s" ist nicht korrektWöchentliches Zeitlimit für Benutzer "%%s" ist nicht korrekt und kann nicht verarbeitet werdenWöchentliches Zeitlimit für Benutzer "%%s" wurde nicht übergebenBenutzernameBenutzer auswählen:Benutzer-bezogene KonfigurationÜberprüfung der konfigurierten Zeitintervalle. Dies ist ein verpflichtender Schritt um sicherzustellen, dass die Intervalle korrekt sind. Intervalle, die Probleme haben werden markiert.Warnhinweis: Timekpr-nExT-Administrationstool soll im GUI-Modus gestartet werden, es sind aber keine grafischen Fenster möglich. Daher wird der Kommandozeilen-Modus gestartet.Aufweck-Stunden-IntervallWarnungBeschränkung der WochentageWöchentlichWochen- und Monats-LimitsWochen- und Monats-Limits für den Benutzer Diese Limit werden gemeinsam mit dem Rest der Limits für den Benutzer angewendet.Wochen- und Monats-Zeitlimits für den Benutzer wurden verarbeitetWenn die Zeit abgelaufen ist, wird der Bildschirm gesperrt. Diese Option ist keine Beschränkung und eher zur Selbstkontrolle geeignetWenn die Zeit abgelaufen ist, wird der Rechner heruntergefahren. Diese Option ist eine Beschränkung! Bitte abwägen, ob diese Art der Beschränkung benötigt wird!Wenn die Zeit abgelaufen ist, wird der Rechner in den Ruhezustand versetzt und zu Beginn des nächsten freien Zeitintervalls des Benutzers wieder aufgeweckt. Diese Option ist keine Beschränkung und eher zur Selbstkontrolle geeignet Wenn der Rechner aufwacht und immer noch keine Zeit verfügbar ist, wird nach kurzer Zeit der Bildschirm wieder gesperrt und der Rechner wieder in den Ruhezustand versetzt.Wenn die Zeit abgelaufen ist, wird der Rechner in den Ruhezustand versetzt. Diese Option ist keine Beschränkung und eher zur Selbstkontrolle geeignet Wenn der Rechner aufwacht und immer noch keine Zeit verfügbar ist, wird nach kurzer Zeit der Bildschirm wieder gesperrt und der Rechner wieder in den Ruhezustand versetzt.Wenn die Zeit abgelaufen ist, werden die Benutzersitzungen beendet. Diese Option ist eine Beschränkung! Bitte abwägen, ob diese Art der Beschränkung benötigt wird!Wenn die Zeit abgelaufen ist, werden die Nutzer-Sitzungen beendet. Diese Option ist eine Beschränkung! Dies ist die Standard-Option und höchstwahrscheinlich die, die benötigt wird!Es bleibt noch %(n)s StundeEs bleiben noch %(n)s StundenHeute gibt es keine ZeitbeschränkungDie erlaubte Nutzungszeit ist vorbei, das Ausloggen erfolgt inDie Zeit ist abgelaufen, der Rechner wird automatisch heruntergefahren inDie Zeit ist abgelaufen, der Rechner wird automatisch in den Ruhezustand versetzt inDie Zeit ist abgelaufen, der Rechner wird automatisch gesperrt intStunden-Intervall eingebenMaske für die ausführbaren Dateienvon...hDie Stunden sind gemäß ISO 8601 nummeriert (d. h. 24-Stunden-Uhr, Format: 0-23).hWichtigkeit...Sitzungen zwangsweise beendenBildschirm sperrenmminnicht verfügbarDie numerischen Zeitwerte sind in Sekunden angegebenProzess-Beschreibung...Sitzungs-Typ...Rechner herunterfahrenRuhezustand + AufweckenRuhezustandSitzungen beendenZeit...Dieses Programm ist Freie Software: Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation, Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren veröffentlichten Version, weiter verteilen und/oder modifizieren. Dieses Programm wird in der Hoffnung bereitgestellt, dass es nützlich sein wird, jedoch OHNE JEDE GEWÄHR,; sogar ohne die implizite Gewähr der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General Public License für weitere Einzelheiten. Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe bis...Heutiges ZeitlimitBenutzername...überprüfenWochentage sind gemäß ISO 8601 nummeriert (d. h. Montag ist der erste Tag, Format: 1-7)timekpr-next/resource/locale/en_GB/000755 001750 001750 00000000000 15122253261 021232 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/en_GB/LC_MESSAGES/000755 001750 001750 00000000000 15122253261 023017 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/en_GB/LC_MESSAGES/timekpr.po000644 001750 001750 00000271470 15122253261 025045 0ustar00bezvfedubezvfedu000000 000000 # English (United Kingdom) translation for timekpr-next # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:18+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: English (United Kingdom) \n" "Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> print help, example" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> get saved user list from the server, example" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "==> get user configuration and time information from the server, example" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "==> get realtime user time information from the server, example" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> set allowed days for the user, example" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> set time limit per week, example" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> set time limit per month, example" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "==> set whether to track inactive user sessions, example" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "==> set whether to hide tray icon and prevent notifications, example" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> set whether PlayTime is enabled for the user, example" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> set whether PlayTime must be accounted instead of normal activity, example" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "==> set allowed days for PlayTime activities, example" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Control sessions types are not passed" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "Control sessions types list is not correct" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "Control sessions types list is not correct and cannot be set" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "Excluded session types are not passed" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "Excluded session types list is not correct" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "Excluded session types list is not correct and cannot be set" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "Excluded user list is not passed" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "Excluded user list is not correct" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "Excluded user list is not correct and cannot be set" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "Final warning time is not passed" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "Final warning time \"%%s\" is not correct" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "Final warning time \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "Final notification time is not passed" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "Final notification time \"%%s\" is not correct" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "Final notification time \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "Termination time is not passed" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "Termination time \"%%s\" is not correct" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "Termination time \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Track inactive is not passed" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Track inactive \"%%s\" is not correct" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "Track inactive \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Log level is not passed" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Log level \"%%s\" is not correct" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Log level \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "Poll time is not passed" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "Poll time \"%%s\" is not correct" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "Poll time \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "Save time is not passed" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "Save time \"%%s\" is not correct" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "Save time \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "PlayTime flag is not passed" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "PlayTime flag \"%%s\" is not correct" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "PlayTime flag \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "PlayTime enhanced activity monitor flag is not passed" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "PlayTime enhanced activity monitor flag \"%%s\" is not correct" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "User's \"%%s\" day number must be present" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "User's \"%%s\" day number must be between 1 and 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "User's \"%%s\" allowed hours are not correct and cannot be set" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "User's \"%%s\" day list is not passed" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "User's \"%%s\" day list is not correct" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "User's \"%%s\" day list is not correct and cannot be set" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "User's \"%%s\" day limits list is not passed" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "User's \"%%s\" day limits list is not correct" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "User's \"%%s\" day limits list is not correct and cannot be set" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "User's \"%%s\" time operation can be one of these: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "User's \"%%s\" time limit is not correct" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "User's \"%%s\" time limit is not correct and cannot be set" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "User's \"%%s\" monthly allowance is not passed" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "User's \"%%s\" monthly allowance is not correct" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "User's \"%%s\" monthly allowance is not correct and cannot be set" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "User's \"%%s\" track inactive flag is not passed" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "User's \"%%s\" track inactive flag is not correct" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "User's \"%%s\" track inactive flag is not correct and cannot be set" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "User's \"%%s\" hide tray icon flag is not passed" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "User's \"%%s\" hide tray icon flag is not correct" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "User's \"%%s\" hide tray icon flag is not correct and cannot be set" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "User's \"%%s\" restriction / lockout type is not passed" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "User's \"%%s\" restriction / lockout type is not correct" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "User's \"%%s\" restriction / lockout type is not correct and cannot be set" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "User's \"%%s\" weekly allowance is not passed" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "User's \"%%s\" weekly allowance is not correct" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "User's \"%%s\" weekly allowance is not correct and cannot be set" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "User's \"%%s\" PlayTime enable flag is not passed" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "User's \"%%s\" PlayTime enable flag is not correct" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "User's \"%%s\" PlayTime override flag is not passed" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "User's \"%%s\" PlayTime override flag is not correct" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "User's \"%%s\" PlayTime override flag is not correct and cannot be set" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "User's \"%%s\" PlayTime day list is not passed" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "User's \"%%s\" PlayTime day list is not correct" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "User's \"%%s\" PlayTime day list is not correct and cannot be set" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "User's \"%%s\" PlayTime day limits list is not passed" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "User's \"%%s\" PlayTime day limits list is not correct" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "User's \"%%s\" PlayTime operation can be one of these: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "User's \"%%s\" set PlayTime limit is not correct" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "User's \"%%s\" PlayTime time limit is not correct and cannot be set" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "User \"%%s\" configuration is not found" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "User \"%%s\" control file is not found" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "User \"%%s\" is not found" #: common/constants/messages.py:160 msgid "Connected" msgstr "Connected" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "Connecting..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Failed to connect" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Please reopen the application if you are superuser and Timekpr-nExT is running" #: common/constants/messages.py:165 msgid "Started" msgstr "Started" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "User configuration retrieved" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Configuration retrieved" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "Track inactive for user has been processed" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Hide tray icon for user has been processed" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Restriction / lockout type for user has been processed" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Additional time for user has been processed" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Additional PlayTime for user has been processed" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "Weekly and monthly limits for user have been processed" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Allowed days for user have been processed" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Day time limits for user have been processed" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Allowed hours for user have been processed" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "Timekpr-nExT configuration has been saved" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "User time limits have been saved" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "User PlayTime limits have been saved" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "User additional options have been saved" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "Enable PlayTime for the user has been processed" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "PlayTime override flag for the user has been processed" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "PlayTime allowed days for user have been processed" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "PlayTime day limits for user have been processed" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "PlayTime activities for user have been processed" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Please select a day to set the limits" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "That interval overlaps with an existing one" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "That interval's start conflicts with an existing one" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "That interval's end conflicts with an existing one" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "That interval's start or end duplicates an existing one" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Interval start cannot be the same as end" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "Interval's start cannot be later than end" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Please select an hour interval to remove" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Interval removed" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "Timekpr-nExT interface is not yet ready" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "The command is incorrect:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "The usage of Timekpr-nExT admin client is as follows:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== NOTICE ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "numeric time values are in seconds" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s user in total:" msgstr[1] "%(n)s users in total:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Configuration for user %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Time left..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Limits & Configuration" #: common/constants/messages.py:213 msgid "About" msgstr "About" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Keep control of computer usage" #: common/constants/messages.py:217 msgid "Day" msgstr "Day" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Enabled" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Limit" #: common/constants/messages.py:220 msgid "From" msgstr "From" #: common/constants/messages.py:221 msgid "from..." msgstr "from..." #: common/constants/messages.py:222 msgid "To" msgstr "To" #: common/constants/messages.py:223 msgid "to..." msgstr "to..." #: common/constants/messages.py:224 msgid "Period" msgstr "Period" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Weekly" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Monthly" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Session type" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "session type..." #: common/constants/messages.py:232 msgid "Username" msgstr "Username" #: common/constants/messages.py:233 msgid "username..." msgstr "username..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Process mask" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "executable mask..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Process description" #: common/constants/messages.py:237 msgid "process description..." msgstr "process description..." #: common/constants/messages.py:238 msgid "Time" msgstr "Time" #: common/constants/messages.py:239 msgid "time..." msgstr "time..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Importance" #: common/constants/messages.py:241 msgid "importance..." msgstr "importance..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Timekpr-nExT notification" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Timekpr-nExT PlayTime notification" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Your time is not limited today" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "Time allowance has changed, please note new time left!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "Time limit configuration has changed, please note new configuration!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "There is a problem connecting to Timekpr-nExT daemon (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "There is a problem communicating to Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Icon initialisation error (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Your time is up, you will be forcibly logged out in" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Your time is up, your computer will be forcibly shutdown in" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Your time is up, your session will be forcibly locked in" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Your time is up, your computer will be forcibly suspended in" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s second" msgstr[1] "%(n)s seconds" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Internal connection error, please check log files" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "You have %(n)s hour" msgstr[1] "You have %(n)s hours" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minute" msgstr[1] "%(n)s minutes" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s second left" msgstr[1] "%(n)s seconds left" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s second of PlayTime left" msgstr[1] "%(n)s seconds of PlayTime left" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "UNEXPECTED ERROR: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "PARAMETER PARSE ERROR (please check parameter validity): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Command FAILED: access denied" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Command FAILED: communication was not accepted" #: common/constants/messages.py:278 msgid "n/a" msgstr "n/a" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "About Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public Licence as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Remove excluded session type" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Timekpr-nExT administration" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Icon, isn't it?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Notes, read carefully ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Users related configuration" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Username:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "List of usernames registered on the system" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Restore" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Restore configuration from saved state" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Information about time left / spent" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Time left (actual):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Format: " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Time inactive (actual):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Time available today (saved stated, not real-time)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Time left (today):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Time spent today (saved stated, not real-time)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Time spent (today):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "Time spent this week (saved stated, not real-time)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Time spent (week):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Time spent this month (saved stated, not real-time)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Time spent (month):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Allowance adjustments" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "today's time" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "Choose this to adjust user's time allowance for today" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "PlayTime" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "Choose this to adjust user's PlayTime allowance for today" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "hr" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "The number of minutes to be adjusted for today's limit" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "The number of hours to be adjusted for today's limit" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Add specified time (reward)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Subtract specified time (penalty)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Set this specific time limit" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Information about PlayTime" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Actual PlayTime available today (realtime, available when user is logged in)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "PlayTime left (actual):" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Format: " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "PlayTime available today (saved stated, not real-time)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "PlayTime left (today):" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Active PlayTime activity count (realtime, available when user is logged in)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Running activities (actual):" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "PlayTime spent today (saved stated, not real-time)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "PlayTime spent (today):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "Brief information about time spent and everything related to time management " "for this day" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Info & Today" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "This lets you configure time limits." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Week day limits" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Choose hours to be adjusted for selected days." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Choose minutes to be adjusted for selected days." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Hour intervals" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "Delete the selected time interval from the available list of intervals." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "enter hour intervals" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "verify" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Weekly and monthly limits" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "d" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Choose days to be adjusted for selected period." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Choose hours to be adjusted for selected period." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Choose minutes to be adjusted for selected period." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Apply daily limits" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Apply limit all changes made in this page" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Daily limit configuration for all week days" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Limit configuration" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Settings for PlayTime activities" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "PlayTime options" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Enable PlayTime for selected user" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Enable PlayTime:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Enable PlayTime override:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Allowed during \"∞\" intervals:" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "This lets you configure PlayTime limits." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "PlayTime limits" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "PlayTime activities" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Remove selected entry from PlayTime activities." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Apply PlayTime configuration" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "Apply PlayTime limits and configuration changes on this page" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "PlayTime configuration" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Additional configuration options" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Track inactive sessions:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Hide icon and notifications:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Restriction / lockout type:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "terminate sessions" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "kill sessions" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "shutdown computer" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "suspend computer" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "suspend / wakeup computer" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "lock screen" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Wakeup hour interval:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if woken up by RealTime Clock, " "which is supported and enabled in BIOS / UEFI!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if woken up by RealTime Clock, " "which is supported and enabled in BIOS / UEFI!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Apply configuration" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Apply additional configuration changes on this page" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Additional configuration" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Additional options" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "User Configuration" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Timekpr-nExT related configuration" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Control Timekpr-nExT Settings" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Poll interval" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Save time" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Termination time" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Countdown time" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Log level" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Final notification" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Control Timekpr-nExT tracking items" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Tracked Sessions" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Add tracked session type to the list" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Remove tracked session type from the list" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Excluded Sessions" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Add an excluded session type to the list" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Remove an excluded session type from the list" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Excluded Users" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Add a user to the exclusion list" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Remove a user from the exclusion list" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "PlayTime enabled:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Enhanced activity monitor:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Apply Timekpr-nExT settings" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Apply all Timekpr-nExT settings at once" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Timekpr-nExT Administration Configuration" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Timekpr-nExT Configuration" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "Status of Timekpr-nExT admin client" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Information" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Warning" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Severe" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Critical" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Timekpr-nExT client" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Status of Timekpr-nExT client" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Save all changes" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Close the window" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Current effective username" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Current statistics" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "Time spent this session or after Timekpr-nExT has been restarted" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Time spent (session):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "Time inactive this session or after Timekpr-nExT has been restarted" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Time inactive:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "Continuous time left to you. May span more than the current day." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Continuous time left:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Total time available left today in a row, up to the end of the day" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Time left today:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "These are the days and limits that are available to you" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Days & Limits" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervals" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Daily limits" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Additional statistics" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Time spent this week" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Time spent this month" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Track inactive:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Additional limits" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Time limit for this week available to you" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Time limit (week):" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Time limit for this month available to you" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Time limit (month):" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "Current PlayTime statistics" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Total PlayTime available left today" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Total PlayTime spent today" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Time spent today:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Time limit override:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Number of currently active PlayTime activities" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Running activities:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Allowed during \"∞\":" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "This shows activities / applications which are part of PlayTime restrictions" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Activity / application list" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalised: a " "final warning sometime before time ends and a countdown notification when time " "is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however, this behaviour highly depends on the Desktop Environment in " "use" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Notification configuration" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Add new notification threshold to the list" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Remove notification threshold from the list" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however, this behaviour highly depends on Desktop Environment in use" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "PlayTime notification configuration" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Add new PlayTime notification threshold to the list" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Remove PlayTime notification threshold from the list" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Notifications" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Use speech notifications" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Logging level" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Specify whether to show a notification when limit configurations or allowance " "changes" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Show limit changes" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Show all notifications" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Show seconds in notification area" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notifications." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Notification timeout (sec)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notifications." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Critical notification timeout (sec)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Use sound \"bell\" for notifications" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Configuration" #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Copyright (c) 2018-2021 Eduards Bezverhijs" timekpr-next/resource/locale/en_GB/LC_MESSAGES/timekpr.mo000644 001750 001750 00000205026 15122253261 025034 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–Á®–p˜‹˜$¦˜<˘*™3™?H™0ˆ™H¹™šQš�lšŠ ›5•›*Ë›óö›éꜙÔ�%nž$”žu¹ž]/Ÿ9�ŸNÇŸD 8[ ” š K­ ù L¡ b¡(ƒ¡u¬¡3"¢*V¢�¢$�¢/¢ò¢ £,£>£Q£+g£Ý“£q¥ƒ¦)™¦æã¦*ù¦$§<A§~§3š§'Χö§ ¨)¨YG¨/¡¨.Ѩ0©01©2b©9•©5Ï©ªª.4ª cªäqªªV­±± 4± >±@L±e�±ó± ²#'²%K²*q²<œ²Ù²›è²„³#�³±³ͳè³+û³ '´4´,8´ e´¥s´¡µs»µG/¶™w¶!·/3·sc·׸ñ¸¹ ¹¯%¹±Õ¹‡º™º%¨º*κ<ùº!6»3X» Œ»­»‡¿»G¼,Z¼>‡¼%Ƽ'ì¼9½ N½*o½#š½¾½ý*འ¾¾\3À �À±À ÁÀ¥ÌÀ¡rÁs ˆÂ •¡Â#¼Â1àÂÃ(#Ã)Là vÀßåùÃ�ÐÚaÄ*üÄ…'Å«­ÅsYÆ ÍÆׯ0öÆ'Ç ?ÇMÇUÇnÇ‰Ç ¤Ç.²ÇáÇß÷È<×ÉÊÊ$Ê08Ê2iÊRœÊ6ïÊ&Ë0=ËnË<€ËN½Ë5 Ì"BÌ4e̶̚ÌÎÌåÌ#õÌÍ6*ÍaÍ2yÍN¬Í%ûÍ(!ÎPJÎ ›Ï©Ï0ÈÏùÏÐ %Ð42Ð%gÐ-�лÐ+ØÐ/Ñ)4Ñ^Ñ&fÑ6�ÑÄÑàÑýÑÒ "Ò,Ò0KÒ|Ò®”Ò¹CÓæýÓæäÔåËÕµ±Öýg×°eة٠ÀÙÍÙ êÙ ÚÚ)Ú!<Ú�^ÚUïÚ]EÛŒ£Û0Ü#8Ü\Ü!zÜœÜ%­Ü7ÓÜ Ý+*Ý2VÝ4‰Ý7¾ÝöÝ4Þ6EÞ5|Þ7²Þ;êÞY&ß7€ßž¸ß(Wá$€áÆ¥áRlâ{¿ãZ;å»–å·RçL èËWè&#éJê6Oê2†ê¹êCÑêë$ë8ëKë \ëië}ëD�ë*Õë)ì*ì?ìSìiì}ì�ì3¦ì@Úìí20í.cí’í ¤í)±íÛí"öíî5î)Iî'sî´›îPï"jï�ï#�ï´ïBÏï#ð56ð*lð—ð´ðÍðÝðîðMñRRñI¥ñNïñH>òS‡ò"Ûòþò%ó$=óbózó$�ó'²óÚó ÷óNô`gôMÈô4õFKõ3’õ-Æõ?ôõ,4ö0aöB’ö/Õö:÷2@÷Ds÷1¸÷Aê÷<,ø+iø=•ø*Óø$þø6#ù#Zù/~ù'®ù/ÖùAú.Hú-wú?¥ú,åú6ûHIû5’û.Èû&÷û8ü6Wü/ŽüA¾ü.ý,/ý>\ý+›ýÇý ÐýÚý”öý€‹þ ÿ"ÿ*ÿ:ÿAÿx[ÿ6Ôÿ †‹M`ˆc‘ì(~§3Æ;ú<68s¬®ÃÖÞGà( + 9 GSUY"]€—§¹Óä÷˜ÿ˜  ž  « · W¾ c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:18+0300 Last-Translator: Eduards Bezverhijs Language-Team: English (United Kingdom) Language: en_GB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however, this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalised: a final warning sometime before time ends and a countdown notification when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however, this behaviour highly depends on the Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if woken up by RealTime Clock, which is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if woken up by RealTime Clock, which is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialisation error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notifications.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notifications.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)timekpr-next/resource/locale/it/000775 001750 001750 00000000000 13476006650 020706 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/it/LC_MESSAGES/000775 001750 001750 00000000000 15122253261 022463 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/it/LC_MESSAGES/timekpr.po000644 001750 001750 00000306376 15122253261 024513 0ustar00bezvfedubezvfedu000000 000000 msgid "" msgstr "" "Project-Id-Version: Timekpr nExT\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:18+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Albano Battistella \n" "Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __:1,2\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> stampa aiuto, esempio" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> ottieni l'elenco degli utenti salvati dal server, esempio" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "==> richiama la configurazione utente e le informazioni sull'ora dal server, " "esempio" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" "richiama le informazioni sul tempo dell'utente in tempo reale dal server, " "esempio" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> imposta i giorni consentiti per l'utente, esempio" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> imposta le ore consentite per il giorno specificato, o \"ALL\" per ogni " "giorno, opzionalmente specifica i minuti di inizio e di fine tra parentesi come " "questa [x-y], inoltre specifica! davanti all'ora se non deve essere " "contabilizzato (tempo libero per l'utente), esempio" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> imposta i limiti di tempo per tutti i giorni consentiti, il numero di " "valori non deve superare i giorni consentiti per l'utente, esempio" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> imposta il limite di tempo a settimana, esempio" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> imposta il limite di tempo per mese,esempio" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "==> imposta se tracciare sessioni utente inattive, esempio" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" "==> imposta se nascondere l'icona nella barra delle applicazioni ed impedire " "le notifiche, esempio" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> imposta il tipo di restrizione / blocco (\"lock\" - blocca, \"suspend\" - " "sospendi, \"suspendwake\" - sospendi riattivazione, \"terminate\" - termina, " "\"kill\" - forzare la chiusura delle sessioni, \"shutdown\" - arresta), esempi" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> imposta il tempo rimasto per l'utente allo stato attuale: \"+\" (aggiungi " "ora), \"-\" (sottrai ora), \"=\" (imposta l'ora esatta disponibile), esempio " "(aggiungi un'ora)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> imposta se il Tempo per il Gioco è abilitato per l'utente, esempio" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> imposta se il Tempo per il Gioco deve essere considerato invece normale " "attività, esempio" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> imposta se le attività per il Tempo di Gioco sono consentite durante " "intervalli non contabilizzati (\"∞\"), esempio" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "==> imposta i giorni consentiti per le attività di Gioco, esempio" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> imposta i limiti di Gioco per tutti i giorni consentiti, il numero di " "valori non deve superare i giorni di Gioco consentiti per l'utente, esempio" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> imposta le maschere del processo di attività di Gioco, per le quali si " "tiene conto del tempo, esempio" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> imposta il Tempo di Gioco a sinistra per l'utente al momento attuale: \"+\" " "(aggiungi tempo), \"-\" (sottrai tempo), \"=\" (imposta il tempo esatto " "disponibile), esempio (aggiungi un'ora)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "I tipi di sessioni di controllo non sono passati" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "L'elenco dei tipi di sessioni di controllo non è corretto" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "L'elenco dei tipi di sessioni di controllo non è corretto e non può essere " "impostato" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "I tipi di sessione esclusi non sono passati" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "L'elenco dei tipi di sessione esclusi non è corretto" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "" "L'elenco dei tipi di sessione esclusi non è corretto e non può essere impostato" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "L'elenco utenti esclusi non e' passato" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "L'elenco utenti esclusi non è corretto" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "L'elenco utenti esclusi non è corretto e non può essere impostato" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "Il tempo di avviso finale non è passato" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "Il tempo di avviso finale \"%%s\" non è corretto" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "Il tempo di avviso finale \"%%s\" non è corretto e non può essere impostato" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "Il tempo di notifica finale non è trascorso" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "L'ora di notifica finale \"%%s\" non è corretta" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "L'ora di notifica finale \"%%s\" non è corretta e non può essere impostata" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "Il tempo di termine non è passato" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "Il tempo di termine \"%%s\" non è corretto" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "Il tempo di termine \"%%s\" non è corretto e non può essere impostato" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "La traccia inattiva non è passata" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "La traccia inattiva \"%%s\" non è corretta" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "La traccia inattiva \"%%s\" non è corretta e non può essere impostata" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Il livello di log non è passato" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Il livello di log \"%%s\" non è corretto" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Il livello di registro \"%%s\" non è corretto e non può essere impostato" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "Il tempo di verifica non è passato" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "Il tempo di verifica \"%%s\" non è corretto" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "Il tempo di verifica \"%%s\" non è corretto e non può essere impostato" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "Risparmio di tempo non è passato" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "Risparmio di tempo \"%%s\" non è corretto" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "Risparmio di tempo \"%%s\" non è corretto e non può essere impostato" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "Il flag del Tempo di Gioco non è passato" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "Il flag del Tempo di Gioco \"%%s\"non è corretto" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "" "Il flag del Tempo di Gioco \"%%s\" non è corretto e non può essere impostato" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "" "Il flag di monitoraggio delle attività avanzate del Tempo di Gioco non è passato" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "" "Il flag di monitoraggio dell'attività avanzata del Tempo di Gioco \"%%s\" non è " "corretto" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "Il flag di monitoraggio delle attività avanzate del Tempo di Gioco \"%%s\" non " "è corretto e non può essere impostato" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "Il numero del giorno \"%%s\" dell'utente deve essere presente" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "Il numero del giorno \"%%s\" dell'utente deve essere compreso tra 1 e 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "Le ore \"%%s\" consentite dall'utente non sono corrette e non possono essere " "impostate" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "L'elenco dei giorni \"%%s\" dell'utente non è passato" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "L'elenco dei giorni \"%%s\" dell'utente non è corretto" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" "L'elenco dei giorni \"%%s\" dell'utente non è corretto e non può essere " "impostato" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "L'elenco dei limiti del giorno \"%%s\" dell'utente non è passato" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "L'elenco dei limiti di giorno \"%%s\" dell'utente non è corretto" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "L'elenco dei limiti di giorno \"%%s\" dell'utente non è corretto e non può " "essere impostato" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "L'operazione temporale \"%%s\" dell'utente può essere una di queste: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "Il limite di tempo \"%%s\" dell'utente non è corretto" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "Il limite di tempo \"%%s\" dell'utente non è corretto e non può essere impostato" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "Il permesso mensile dell'utente \"%%s\" non e' passato" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "Il permesso mensile dell'utente \"%%s\" non è corretto" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "Il permesso mensile dell'utente \"%%s\"non è corretto e non può essere impostato" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "La traccia inattiva dell'utente \"%%s\"non e' passata" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "La traccia inattiva dell'utente \"%%s\"non e' passata" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "Il contrassegno inattivo della traccia dell'utente\"%%s\" non è corretto e non " "può essere impostato" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "Il flag dell'icona \"%%s\" nascosta dell'utente non viene passato" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "" "Il flag dell'icona \"%%s\" della barra delle applicazioni dell'utente non è " "corretto" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "Il flag dell'icona della barra delle applicazioni \"%%s\" dell'utente non è " "corretto e non può essere impostato" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "Il tipo di restrizione / blocco dell'utente \"%%s\" non è passato" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "Il tipo di restrizione / blocco \"%%s\" dell'utente non è corretto" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Il tipo di restrizione / blocco dell'utente \"%%s\" non è corretto e non può " "essere impostato" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "Il permesso settimanale dell'utente\"%%s\" non viene superato" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "Il permesso settimanale dell'utente \"%%s\" non è corretto" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "Il permesso settimanale dell'utente\"%%s\" non è corretto e non può essere " "impostato" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "" "Il flag di abilitazione del Tempo di Gioco \"%%s\" dell'utente non è passato" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "" "Il flag di abilitazione del Tempo di Gioco \"%%s\" dell'utente non è corretto" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "Il flag di abilitazione del Tempo di Gioco \"%%s\" dell'utente non è corretto e " "non può essere impostato" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "Il flag di sovrascrizione del Tempo di Gioco dell'utente \"%%s\" non è passato" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "" "Il flag di sovrascrizione del Tempo di Gioco dell'utente \"%%s\" non è corretto" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "Il flag di sovrascrizione del Tempo di Gioco dell'utente \"%%s\" non è corretto " "e non può essere impostato" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "Il tempo di Gioco \"%%s\" consentito dell'utente durante gli intervalli non " "registrati non è passato" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "Il tempo di Gioco \"%%s\" consentito dell'utente durante gli intervalli non " "registrati non è corretto" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "Il tempo di Gioco \"%%s\" consentito dell'utente durante gli intervalli non " "registrati non è corretto e non può essere impostato" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "L'elenco dei giorni di Gioco dell'utente \"%%s\" non è passato" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "L'elenco dei giorni di Gioco dell'utente \"%%s\" non è corretto" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "L'elenco dei giorni di Gioco dell'utente \"%%s\" non è corretto e non può " "essere impostato" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "L'elenco dei limiti giornalieri di Gioco \"%%s\" dell'utente non è stato " "superato" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "L'elenco dei limiti giornalieri di Gioco \"%%s\" dell'utente non è corretto" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "L'elenco dei limiti giornalieri di Gioco \"%%s\" dell'utente non è corretto e " "non può essere impostato" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "L'operazione di Gioco dell'utente \"%%s\"può essere una di queste: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "Il limite di Gioco impostato dall'utente \"%%s\"non è corretto" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "Il limite di tempo di Gioco dell'utente\"%%s\" non è corretto e non può essere " "impostato" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERRORE inaspettato durante il caricamento della configurazione. Controlla i " "files log di Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERRORE imprevisto durante il recupero della configurazione. Si prega di " "controllare i file di registro di Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERRORE imprevisto durante il recupero della configurazione utente. Si prega di " "controllare i file di registro di Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "ERRORE inaspettato per ottenere l'elenco degli utenti. Controlla i files log di " "Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERRORE imprevisto durante l'aggiornamento della configurazione. Si prega di " "controllare i file di registro di Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "ERRORE inatteso durante l'aggiornamento. Controlla i files log di Timekpr-nExT" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "La configurazione dell'utente \"%%s\" non è stata trovata" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "Il file di controllo dell'utente \"%%s\" non è stato trovato" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "L'utente \"%%s\" non è stato trovato" #: common/constants/messages.py:160 msgid "Connected" msgstr "Connesso" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "Connessione in corso..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Connessione fallita" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Si prega di riaprire l'applicazione se si è super-utente e Timekpr-nExT è in " "esecuzione" #: common/constants/messages.py:165 msgid "Started" msgstr "Avviato" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "Configurazione utente recuperata" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Configurazione recuperata" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "La traccia inattiva per l'utente è stata elaborata" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "L'icona Nascondi barra delle applicazioni per l'utente è stata elaborata" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Il tipo di restrizione / blocco per l'utente è stato elaborato" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "È stato elaborato un tempo aggiuntivo per l'utente" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Il tempo di Gioco aggiuntivo per l'utente è stato elaborato" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "I limiti settimanali e mensili per l'utente sono stati elaborati" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "I giorni consentiti per l'utente sono stati elaborati" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "I limiti di tempo del giorno per l'utente sono stati elaborati" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Le ore consentite per l'utente sono state elaborate" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "La configurazione di Timekpr-nExT è stata salvata" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "I limiti di tempo dell'utente sono stati salvati" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "I limiti di GIoco dell' utente sono stati salvati" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Le opzioni aggiuntive dell'utente sono state salvate" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "L'abilitazione del Tempo di Gioco per l'utente è stata elaborata" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "" "Il flag di sovrascrizione del Tempo di Gioco per l'utente è stato elaborato" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "Il flag del Tempo di Gioco consentito durante intervalli non contabilizzati per " "l'utente è stato elaborato" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "I giorni di Gioco consentiti per l'utente sono stati elaborati" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "I limiti giornalieri del Tempo di Gioco per l'utente sono stati elaborati" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "Le attività del Tempo di Gioco per l'utente sono state elaborate" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Si prega di selezionare un giorno per impostare i limiti" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "L'intervallo si sovrappone a quello esistente" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "L'inizio dell'intervallo è in conflitto con quello esistente" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "La fine dell'intervallo è in conflitto con quella esistente" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "L'intervallo di inizio o fine duplica l'intervallo esistente" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "L'inizio dell'intervallo non può essere lo stesso della fine" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "L'inizio dell'intervallo non può essere successivo alla fine" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Si prega di selezionare un intervallo di un'ora da rimuovere" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Intervallo rimosso" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "L'interfaccia Timekpr-nExT non è ancora pronta" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "ATTENZIONE: l'utilità di amministrazione di Timekpr-nExT è stata chiesta di " "eseguirla in modalità GUI, ma non sono disponibili display, quindi in " "esecuzione in CLI ..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "Il comando non è corretto:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "L'utilizzo del client di amministrazione Timekpr-nExT è il seguente:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== AVVISO ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "i valori numerici di tempo sono in secondi" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "i giorni della settimana sono numerati secondo ISO 8601 (ovvero il lunedì è il " "primo giorno, formato: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "le ore sono numerate secondo ISO 8601 (ad es. orologio 24 ore, formato: 0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s utente in totale:" msgstr[1] "%(n)s utenti in totale:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Configurazione per l'utente %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Tempo rimasto..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Limiti e configurazione" #: common/constants/messages.py:213 msgid "About" msgstr "Informazioni su" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Mantieni il controllo del computer in uso" #: common/constants/messages.py:217 msgid "Day" msgstr "Giorno" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Abilitato" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Limite" #: common/constants/messages.py:220 msgid "From" msgstr "Da" #: common/constants/messages.py:221 msgid "from..." msgstr "da..." #: common/constants/messages.py:222 msgid "To" msgstr "A" #: common/constants/messages.py:223 msgid "to..." msgstr "a..." #: common/constants/messages.py:224 msgid "Period" msgstr "Periodo" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Settimanale" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Mensile" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Tipo di sessione" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "tipo di sessione..." #: common/constants/messages.py:232 msgid "Username" msgstr "Nome utente" #: common/constants/messages.py:233 msgid "username..." msgstr "nome utente..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Maschera processo" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "maschera eseguibile..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Descrizione processo" #: common/constants/messages.py:237 msgid "process description..." msgstr "descrizione del processo..." #: common/constants/messages.py:238 msgid "Time" msgstr "Orario" #: common/constants/messages.py:239 msgid "time..." msgstr "Orario..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Importanza" #: common/constants/messages.py:241 msgid "importance..." msgstr "impoartanza..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Notifica di Timekpr-nExT" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Notifica Tempo di Gioco di Timekpr-nExT" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Il tuo tempo non è limitato oggi" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "" "Il permesso di tempo è cambiato, si prega di notare il nuovo tempo rimasto!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "La configurazione del limite di tempo è cambiata, si prega di notare la nuova " "configurazione!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "" "Si è verificato un problema durante il collegamento al daemon Timekpr-nExT " "(%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "" "Si è verificato un problema durante la comunicazione con Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Errore di inizializzazione dell'icona (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Il tuo tempo è scaduto, Sarai forzatamente disconnesso in" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Il tuo tempo è scaduto, il tuo computer verrà spento" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Il tuo tempo è scaduto, la tua sessione verrà bloccata forzatamente" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Il tuo tempo è scaduto, il tuo computer verrà sospeso forzatamente" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s secondo" msgstr[1] "%(n)s secondi" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Errore di connessione interna, controllare i files log" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Hai %(n)s ora" msgstr[1] "Hai %(n)s ore" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minuto" msgstr[1] "%(n)s minuti" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s secondo rimasto" msgstr[1] "%(n)s secondi rimasto" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s secondo di Gioco rimanente" msgstr[1] "%(n)s secondi di Gioco rimanente" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "La funzione \"%%s\", utilizzata per rilevare i tempi di inattività, non può " "essere abilitata!\n" "Il tempo di inattività / inattivo potrebbe non essere preso in considerazione " "quando lo schermo è bloccato!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "ERRORE INASPETTATO: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "ERRORE DI ANALISI DEI PARAMETRI (verificare la validità dei parametri): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Comando NON RIUSCITO: accesso negato" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Comando NON RIUSCITO: la comunicazione non è stata accettata" #: common/constants/messages.py:278 msgid "n/a" msgstr "n/a" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Informazioni su Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Questo programma è software libero: è possibile ridistribuirlo e/o modificarlo " "secondo i termini della GNU General Public License così come pubblicata dalla " "Free Software Foundation, sia la versione 3 della licenza, o (a propria scelta) " "una versione successiva.\n" "\n" "Questo programma è distribuito nella speranza che possa essere utile, ma SENZA " "ALCUNA GARANZIA, nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ " "PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per ulteriori " "dettagli.\n" "\n" "Dovreste aver ricevuto una copia della GNU General Public License insieme a " "questo programma. In caso contrario, vedere . In " "Debian, vedere file / usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )\n" "(Italian fine-tuning by " #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Rimuovi il tipo di sessione esclusa" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Amministrazione di Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Icona, non è vero?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Note, leggi attentamente;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Questa è l'app di configurazione per Timekpr-nExT. Ti consente di impostare " "limiti di tempo per i tuoi utenti individuali e opzioni generali di Timekpr-" "nExT.\n" "Per usare questa applicazione, devi eseguirla come superutente o far parte del " "gruppo timekpr.\n" "Si noti che la \"Configurazione Timekpr-nExT\" è disponibile solo in modalità " "super-utente (amministratore)!\n" "\n" "Si prega di configurare con attenzione: non chiudetevi fuori!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Configurazione relativa agli utenti" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Nome utente:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Elenco dei nomi utente registrati nel sistema" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Ripristina" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Ripristina una configurazione salvata" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Informazioni sul tempo rimanente / trascorso" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Tempo rimasto. Può estendersi più del giorno corrente (in tempo reale, " "disponibile quando l'utente è connesso)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Tempo rimasto (effettivo):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Formato: " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Quanto tempo l'utente è stato inattivo dall'ultimo accesso (in tempo reale, " "disponibile quando l'utente è connesso)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Tempo inattivo (effettivo):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Tempo disponibile oggi (risparmiato dichiarato, non in tempo reale)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Tempo rimasto (oggi):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Tempo trascorso oggi (salvato dichiarato, non in tempo reale)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Tempo trascorso (oggi):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "" "Tempo trascorso per questa settimana (salvato dichiarato, non in tempo reale)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Tempo trascorso (settimana):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Tempo trascorso questo mese (salvato dichiarato, non in tempo reale)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Tempo trascorso (mese):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Aggiustamenti consentiti" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "il tempo di oggi" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "Scegli questa opzione per regolare il tempo dell'utente per oggi" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "Tempo di Gioco" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "Scegli questa opzione per modificare la concessione del Tempo di Gioco " "dell'utente per oggi" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "ore" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "La quantità di minuti da regolare per il limite di oggi" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "La quantità di ore da regolare per il limite di oggi" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "minuti" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Aggiungi la quantità specificata (ricompensa)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Sottrai la quantità specificata (penalità)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Imposta questo limite di tempo specifico" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Informazioni sul Tempo di Gioco" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Tempo di GIoco effettivo disponibile oggi (in tempo reale, disponibile quando " "l'utente ha effettuato l'accesso)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "Tempo di GIoco trascorso (attuale):" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Formato: " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "Tempo di GIoco disponibile oggi (stato salvato, non in tempo reale)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "Tempo di Gioco trascorso (oggi):" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Conteggio attività Attive di Gioco(in tempo reale, disponibile quando l'utente " "ha effettuato l'accesso)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Attività in corso (effettive):" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "Tempo di Gioco trascorso oggi (stato salvato, non in tempo reale)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "Tempo di GIoco trascorso (oggi):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "Brevi informazioni sul tempo trascorso e tutto ciò che riguarda la gestione del " "tempo per questo giorno" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Informazioni & oggi" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Ciò consente di configurare i limiti di tempo." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Limiti dei giorni feriali" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Scegli le ore da regolare per i giorni selezionati." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Scegli i minuti da regolare per i giorni selezionati." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Aumenta la concessione di tempo giornaliera in base all'unità di tempo " "selezionata (ore o minuti) per i giorni selezionati.\n" "\n" "Tieni presente che puoi selezionare più di un giorno per la regolazione!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Riduci la concessione di tempo giornaliera in base all'unità di tempo " "selezionata (ore o minuti) per i giorni selezionati.\n" "\n" "Tieni presente che puoi selezionare più di un giorno per la regolazione!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Elenca il giorno della settimana e ulteriori informazioni sul limite del " "giorno.\n" "\n" "Si prega di abilitare / disabilitare i giorni per l'utente." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Intervalli orari per il giorno selezionato disponibili per l'utente.\n" "L'opzione \"∞\" indica che il tempo trascorso durante questo intervallo non " "verrà conteggiato nel limite giornaliero, ma sarà invece considerato inattivo.\n" "\n" "Tieni presente che se il limite del giorno termina alle 24:00 e il limite del " "giorno successivo inizia alle 00:00, l'utente può lavorare ininterrottamente " "oltre la mezzanotte.\n" "\n" "Si noti che non è possibile configurare più intervalli nella stessa ora.\n" "Un intervallo può iniziare o finire o contenere un'ora specifica, ma non più di " "una volta. Questo è di progettazione, non un bug.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Intervalli di ora" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Crea un nuovo intervallo di tempo che sarà disponibile per l'utente.\n" "\n" "Dopo aver creato l'intervallo, modificare i suoi orari di inizio e fine " "direttamente nell'elenco degli intervalli." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "" "Elimina l'intervallo di tempo selezionato dall'elenco di intervalli disponibile." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "inserire intervalli orari" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "verifica" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Verifica gli intervalli di tempo configurati. Questo è un passaggio " "obbligatorio per garantire che gli intervalli siano corretti.\n" "\n" "Verranno evidenziati gli intervalli che presentano problemi." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Limiti settimanali e mensili" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "g" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Scegli i giorni da regolare per il periodo selezionato." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Scegli le ore da regolare per il periodo selezionato." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Scegli i minuti da regolare per il periodo selezionato." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Aumenta la concessione di tempo settimanale o mensile in base all'unità di " "tempo selezionata (giorni o ore o minuti) per il periodo selezionato." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Diminuisce la concessione di tempo settimanale o mensile in base all'unità di " "tempo selezionata (giorni o ore o minuti) per il periodo selezionato." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Limiti settimanali e mensili per l'utente.\n" "\n" "Questi limiti vengono applicati all'utente insieme al resto della " "configurazione dei limiti." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Applica limiti giornalieri" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Applica limite a tutte le modifiche apportate in questa pagina" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Configurazione limite giornaliero per tutti i giorni della settimana" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Limite di configurazione" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Impostazioni per le attività di Gioco" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "Opzioni di GIoco" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Abilita Tempo di Gioco per l'utente selezionato" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Abilita Tempo di Gioco" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Abilita la sovrascrittura del Tempo di Gioco per l'utente selezionato.\n" "\n" "Questa impostazione sostituisce il conteggio del tempo in modo tale che il " "tempo venga conteggiato solo quando almeno una delle applicazioni nell'elenco " "delle attività di Gioco è in esecuzione!\n" "\n" "Ciò riguarda solo il conteggio del tempo, gli intervalli sono ancora pienamente " "applicati!\n" "\n" "Se nessun processo è in esecuzione, il tempo viene considerato inattivo, quindi " "è effettivamente tempo libero per l'utente!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Abilita sovrascrittura del Tempo di Gioco:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Consenti attività di Gioco durante intervalli di tempo non contabilizzati " "(\"∞\") per l'utente selezionato.\n" "\n" "Questa impostazione consente all'utente di utilizzare le applicazioni " "configurate nel proprio elenco di attività di Gioco durante gli intervalli di " "tempo contrassegnati come non contabilizzati (\"∞\").\n" "\n" "Se questa impostazione è abilitata, l'utilizzo delle attività non verrà " "considerato ai fini dei limiti di Gioco, altrimenti le applicazioni nell'elenco " "delle attività di Gioco verranno terminate non appena vengono avviate durante " "intervalli di tempo(\"∞\") non contabilizzati." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Consentito durante gli \"∞\" intervalli:" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Ciò ti consente di configurare i limiti di Gioco." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "Limiti di Tempo di Gioco" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Aumenta la concessione giornaliera del Tempo di Gioco in base all'unità di " "tempo selezionata (ore o minuti) per i giorni selezionati.\n" "\n" "Tieni presente che puoi selezionare più di un giorno per la regolazione!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Diminuisci la concessione giornaliera del Tempo di Gioco in base all'unità di " "tempo selezionata (ore o minuti) per i giorni selezionati.\n" "\n" "Tieni presente che puoi selezionare più di un giorno per la regolazione!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Elenca il giorno della settimana e ulteriori informazioni sul limite di Gioco " "del giorno.\n" "\n" "Abilita / disabilita i giorni per l'utente e imposta il tempo consentito per le " "attività di Gioco." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "Attività di Gioco" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Aggiungi nuova attività di Gioco.\n" "\n" "Specificare direttamente la maschera dell'attività e una descrizione intuitiva " "nell'elenco delle attività." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Rimuovi la voce selezionata dalle attività di Gioco." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Specificare un elenco di nomi di processi completi (eseguibili) senza percorso " "come stringhe con distinzione tra maiuscole e minuscole da monitorare nel " "sistema.\n" "\n" "È possibile specificare anche le maschere RegExp per i processi, ma si prega di " "fare molta attenzione in quanto l'uso improprio di questa impostazione può " "portare alla chiusura di processi indesiderati per l'utente!\n" "\n" "NOTA: RegExp è un'impostazione esperta!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Applica configurazione di Gioco" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" "Applica i limiti di Gioco e le modifiche alla configurazione in questa pagina" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "Configurazione Tempo di Gioco" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Statistiche aggiuntive" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Seleziona se conteggiare il tempo della sessione inattiva.\n" "\n" "Se questa opzione è deselezionata, il tempo trascorso nelle sessioni di accesso " "della console (non dell'emulatore di terminale) e mentre lo schermo è bloccato " "NON viene preso in considerazione. Questo varia a seconda degli ambienti " "desktop." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Tieni traccia delle sessioni inattive:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Seleziona se mostrare l’icona del lucchetto di Timekpr-next e le notifiche " "all’utente.\n" "\n" "Si prega di notare che selezionando questa opzione verrà disabilitata la " "visualizzazione di tutte le informazioni e notifiche per l’utente!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Nascondi icone e notifiche:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Seleziona un tipo di restrizione / blocco per l'utente.\n" "\n" "NOTA: si prega di fare molta attenzione, pensare in anticipo e leggere ogni " "descrizione delle opzioni quando si modifica questa impostazione dal valore " "predefinito!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Tipo di restrizione / blocco:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "termina sessioni" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Allo scadere del tempo, le sessioni utente verranno terminate.\n" "\n" "Questa opzione è una restrizione!\n" "\n" "Questa è l'opzione predefinita e molto probabilmente è quella che ti serve!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "forzare la chiusura delle sessioni" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Quando il tempo scade, le sessioni dell'utente saranno forzatamente chiuse.\n" "\n" "Questa opzione è una restrizione!\n" "\n" "Valuta se hai bisogno di questo tipo di restrizione!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "arresto del computer" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Allo scadere del tempo, il computer verrà spento.\n" "\n" "Questa opzione è una restrizione!\n" "\n" "Valuta se hai bisogno di questo tipo di restrizione!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "Sospensione del computer" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Allo scadere del tempo, il computer verrà sospeso (messo in stato di sleep " "mode).\n" "\n" "Questa opzione non è una restrizione ed è più adatta per scopi di " "autocontrollo.\n" "\n" "Se viene riattivato quando non c'è ancora tempo, lo schermo del computer verrà " "bloccato e dopo un po 'di tempo verrà messo di nuovo in sospensione." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "sospendi / riattiva computer" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Allo scadere del tempo, il computer verrà sospeso (messo in stato di stop) e " "verrà riattivato all'inizio del successivo intervallo di tempo disponibile per " "l'utente.\n" "\n" "Questa opzione non è una restrizione ed è più adatta per scopi di " "autocontrollo.\n" "\n" "Se viene riattivato quando non c'è ancora tempo, lo schermo del computer verrà " "bloccato e dopo un po 'di tempo verrà messo di nuovo in sospensione." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "blocca schermo" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Allo scadere del tempo, lo schermo del computer verrà bloccato.\n" "\n" "Questa opzione non è una restrizione ed è più adatta per scopi di autocontrollo." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Selezionare un intervallo di tempo in cui il computer può essere riattivato " "automaticamente.\n" "\n" "Tieni presente che questa opzione è efficace solo se la riattivazione tramite " "RealTime Clock è supportata e abilitata in BIOS / UEFI!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Intervallo ora sveglia:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Immettere l'ora di inizio per la funzione di riattivazione automatica.\n" "\n" "Tieni presente che questa opzione è efficace solo se la riattivazione tramite " "RealTime Clock è supportata e abilitata in BIOS / UEFI!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Immettere l'ora di fine per la funzione di riattivazione automatica.\n" "\n" "Tieni presente che questa opzione è efficace solo se la riattivazione tramite " "RealTime Clock è supportata e abilitata in BIOS / UEFI!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Applica configurazione" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Applica ulteriori modifiche alla configurazione in questa pagina" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Configurazione aggiuntiva" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Opzioni aggiuntive" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Configurazione utente" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Configurazione relativa a Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Controlla le impostazioni di Timekpr-nExT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Livello di log Timekpr-nExT.\n" "\n" "Si prega di non modificarlo a meno che non sia necessario. Probabilmente non " "troverai nulla di carino nei file di registro.\n" "\n" "I valori sono: 1 - standard, 2 - debug, 3 - extra debug" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Granularità del tempo di polling della sessione che specifica la frequenza con " "cui le sessioni e l'attività dell'utente vengono controllate e contabilizzate.\n" "\n" "3-5 secondi sono ottimali, non cambiarlo se non sei sicuro." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Verifica intervallo" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Specificare il tempo in secondi in cui Timekpr-nExT avvia il conto alla " "rovescia continuo in tempo reale prima di applicare una restrizione / blocco " "alle sessioni dell'utente." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Specifica la frequenza in secondi alla quale lo stato utente effettivo viene " "salvato su disco.\n" "\n" "Per migliorare le prestazioni e avere ancora una maggiore precisione, Timekpr-" "nExT tiene conto del tempo in memoria della frequenza di \"Intervallo di " "polling\", questa impostazione definisce una frequenza alla quale lo stato " "dell'utente viene salvato su disco per l'archiviazione permanente." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Risparmia tempo" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Numero di secondi rimasti per l'utente prima di applicare una restrizione / " "blocco configurato alle sue sessioni.\n" "\n" "Dopo che questo è stato raggiunto e l'utente è ancora attivo, le sessioni " "dell'utente verranno gestite in base alla restrizione / blocco specificati e " "quasi nulla può essere fatto per impedirlo." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Tempo di termine" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Conto alla rovescia" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Livello di log" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Numero di secondi rimanenti per il tempo disponibile dell'utente prima di " "inviare una notifica finale critica che il tempo sta per scadere.\n" "\n" "NOTA: il resto dei tempi di notifica sono configurabili utente per utente " "nell'applicazione client!" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Notifica finale" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Controllo degli elementi di tracciamento di Timekpr-nExT" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Sessioni monitorate" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Aggiungi il tipo di sessione tracciato alla lista" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Rimuovi il tipo di sessione tracciato dall'elenco" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Elenco dei tipi di sessione da monitorare.\n" "\n" "Per favore, non cambiarlo o sperimentarlo a meno che tu non sappia " "effettivamente (non desiderosamente) cosa stai facendo." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Sessioni escluse" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Aggiungi il tipo di sessione esclusa all'elenco" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Rimuovi il tipo di sessione esclusa dall'elenco" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Elenco delle sessioni da escludere dal monitoraggio.\n" "\n" "Per favore, non cambiarlo o sperimentarlo a meno che tu non sappia " "effettivamente (non desiderosamente) cosa stai facendo." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Utenti esclusi" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Aggiungi utente all'elenco di esclusione" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Rimuovi utente dall'elenco di esclusione" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "Elenco di utenti esclusi dal monitoraggio.\n" "\n" "Specifica qui i nomi utente effettivi, non i nomi reali. Ad esempio, " "\"jsmith\", non \"John Smith\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Questa impostazione controlla se la funzionalità di Gioco è abilitata.\n" "\n" "Questo è un interruttore principale del Tempo di Gioco, se è spento, è spento " "per tutti indipendentemente dalle impostazioni individuali!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "Tempo di Gioco abilitato:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Questa impostazione controlla se il monitor dell'attività di Gioco utilizzerà " "la riga di comando del processo, inclusi gli argomenti, per il monitoraggio dei " "processi (per impostazione predefinita utilizza solo il nome del processo).\n" "\n" "Quando questa impostazione è abilitata, Timekpr-nExT eseguirà una " "corrispondenza con la riga di comando completa fino a 512 caratteri, " "consentendo funzionalità avanzate di monitoraggio del processo.\n" "\n" "Fai attenzione e ricontrolla i tuoi schemi RegExp nelle maschere di attività di " "Gioco di ogni singolo utente!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Monitoraggio dell'attività migliorato:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Applica impostazioni Timekpr-nExT" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Applica tutte le impostazioni di Timekpr-nExT contemporaneamente" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Configurazione dell'amministrazione di Timekpr-nExT" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Configurazione Timekpr-nExT" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "Stato del client di amministrazione Timekpr-nExT" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Informazioni" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Attenzione" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Grave" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Critico" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Client Timekpr-nExT" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Stato del client Timekpr-nExT" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Salva tutte le modifiche" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Chiudi la finestra" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Nome utente corrente" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Statistiche attuali" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "" "Tempo trascorso in questa sessione o dopo che Timekpr-nExT è stato riavviato" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Tempo trascorso (sessione):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "" "Tempo inattivo in questa sessione o dopo che Timekpr-nExT è stato riavviato" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Tempo inattivo:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "Tempo continuo lasciato a te. Può estendersi più del giorno corrente." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Tempo residuo rimanente:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "" "Tempo totale disponibile rimasto in una riga, fino alla fine della giornata" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Tempo rimasto oggi:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Questi sono giorni e limiti che sono a tua disposizione" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Giorni e limiti" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Questo mostra gli intervalli di tempo disponibili per l'uso.\n" "\n" "L'opzione \"∞\" indica che il tempo trascorso durante questo intervallo non " "verrà conteggiato nel limite giornaliero, ma sarà invece considerato inattivo." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervalli" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Limiti giornalieri" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Statistiche aggiuntive" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Tempo trascorso per questa settimana" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Tempo trascorso per questo mese" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Seleziona se conteggiare il tempo della sessione inattiva.\n" "\n" "Se questa opzione è deselezionata, il tempo trascorso nelle sessioni di accesso " "della console (non dell'emulatore di terminale) e mentre lo schermo è bloccato " "NON viene preso in considerazione.\n" "Questo varia a seconda degli ambienti desktop." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Traccia inattiva:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Se viene conteggiato il tempo per le sessioni inattive, se questo è " "deselezionato, il tempo trascorso in console (non nel terminale) e mentre lo " "schermo è bloccato, NON viene preso in considerazione (varia molto da DE a DE)" #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Limiti aggiuntivi" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Limite di tempo per settimana disponibile per te" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Limite di tempo (settimana):" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Limite di tempo per il mese a tua disposizione" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Limite di tempo (mese):" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "Statistiche di Gioco correnti" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Tempo di Gioco totale rimasto oggi" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Tempo di gioco totale speso oggi" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Tempo trascorso oggi:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Questa opzione sostituisce il conteggio del tempo predefinito.\n" "\n" "Se è selezionato, il tempo viene conteggiato solo quando le attività in " "\"Elenco attività / applicazioni\" sono in esecuzione, il resto del tempo è " "considerato inattivo." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Limite di tempo oltrepassato:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Numero di attività di Gioco attualmente attive" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Attività in corso:" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Consenti attività durante intervalli di tempo (\"∞\") non contabilizzati.\n" "\n" "Questa impostazione consente di utilizzare le applicazioni elencate in \"Elenco " "attività / applicazioni\" durante gli intervalli di tempo contrassegnati come " "non contabilizzati (\"∞\"), se l'impostazione non è abilitata, nessuna delle " "attività può essere eseguita!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Consentito durante \"∞\":" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "Questi sono i giorni e i limiti a tua disposizione come parte delle limitazioni " "delle attività di Gioco" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "Questo mostra le attività / applicazioni che fanno parte delle restrizioni del " "Tempo di Gioco" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Elenco attività / applicazioni" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configurazione per notifiche personalizzate sul tempo disponibile.\n" "\n" "Configura le notifiche come meglio credi. Tuttavia, tieni presente che ci " "saranno due tipi di notifiche che non possono essere personalizzate: un avviso " "finale qualche tempo prima che il tempo finisca e un conto alla rovescia quando " "il tempo sta per scadere.\n" "\n" "Il valore \"Time\" di configurazione indica un valore di tempo rimanente in cui " "verrà mostrata la notifica, l'opzione \"Importance\" regola il colore di " "un'icona e le proprietà di notifica come segue.\n" "\n" "Informazioni: verranno visualizzate un'icona verde e una notifica informativa\n" "Avviso: verranno visualizzati un'icona gialla e una notifica informativa\n" "Grave: verranno mostrate un'icona rossa e una notifica importante\n" "Critico: verranno mostrate un'icona rossa e una notifica critica, questa " "notifica di solito viene mostrata su tutte le applicazioni aperte e rimane " "aperta fino a quando non viene chiusa, tuttavia questo comportamento dipende " "fortemente dall'ambiente desktop in uso" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Configurazione notifiche" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Aggiungi una nuova soglia di notifica all'elenco" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Rimuovi la soglia di notifica dall'elenco" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configurazione per notifiche personalizzate sul Tempo di Gioco disponibile.\n" "\n" "Configura le notifiche come meglio credi.\n" "\n" "Il valore \"Time\" di configurazione indica un valore del Tempo di Gioco " "rimanente quando verrà mostrata la notifica, l'opzione \"Importance\" governa " "il colore di un'icona e le proprietà di notifica come segue.\n" "\n" "Informazioni: verranno visualizzate un'icona verde e una notifica informativa\n" "Avviso: verranno visualizzati un'icona gialla e una notifica informativa\n" "Grave: verranno mostrate un'icona rossa e una notifica importante\n" "Critico: verranno mostrate un'icona rossa e una notifica critica, questa " "notifica di solito viene mostrata su tutte le applicazioni aperte e rimane " "aperta fino a quando non viene chiusa, tuttavia questo comportamento dipende " "fortemente dall'ambiente desktop in uso" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Configurazione delle notifiche del Tempo di Gioco" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Aggiungi una nuova soglia di notifica del Tempo di Gioco all'elenco" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Rimuovi la soglia di notifica del Tempo di Gioco dall'elenco" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Notifiche" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Seleziona se utilizzare le notifiche vocali, se disponibili.\n" "\n" "Potresti essere in grado di rendere disponibili le notifiche vocali installando " "il pacchetto \"python3-espeak\" o \"python3-espeak-ng\"." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Usa le notifiche vocali" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Questo imposta il livello di registrazione.\n" "\n" "Per favore non cambiarlo a meno che tu non sappia cosa stai facendo." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Livello di registrazione" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Se mostrare la notifica quando si modificano le configurazioni limite o la " "tolleranza" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Mostra le modifiche ai limiti" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Specifica se mostrare tutte le notifiche.\n" "\n" "Se deselezionato, vengono mostrati solo quelli importanti." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Mostra tutte le notifiche" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Specificare se mostrare i secondi nell'area di notifica.\n" "\n" "Alcuni ambienti desktop, come KDE5, non supportano il testo oltre alle icone di " "notifica." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Mostra i secondi nell'area di notifica" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Imposta la durata di visualizzazione di una notifica per le notifiche regolari " "sul tempo rimanente e sulle modifiche alla configurazione.\n" "\n" "Il valore è specificato in secondi.\n" "Un valore di 0 significa mostrare fino a quando non viene ignorato (non " "consigliato per le notifiche regolari).\n" "\n" "Tieni presente che l'ambiente desktop che utilizzi potrebbe ignorare questo " "timeout, nel qual caso questa impostazione non avrà alcun effetto sulla " "notifica." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Timeout notifica (sec)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Imposta la durata di visualizzazione di una notifica per le notifiche " "\"critiche\" sul tempo rimanente (quando l'icona diventa rossa).\n" "\n" "Il valore è specificato in secondi.\n" "Un valore di 0 significa mostrare fino a quando non viene ignorato.\n" "\n" "Tieni presente che l'ambiente desktop che utilizzi potrebbe ignorare questo " "timeout, nel qual caso questa impostazione non avrà alcun effetto sulla " "notifica." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Timeout di notifica critico (sec)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Seleziona se utilizzare il suono \"campanello\" (breve suono di notifica) per " "annunciare una nuova notifica da Timekpr-nExT.\n" "\n" "Funziona solo per le notifiche abilitate.\n" "\n" "Se questa impostazione non è modificabile, l'ambiente che usi non è in grado di " "supportare per le notifiche sonore." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Usa il suono \"beep\" per le notifiche" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Configurazione" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Seleziona se mostrare l'icona del lucchetto di Timekpr-next e le notifiche " #~ "all'utente.\n" #~ "\n" #~ "Tieni presente che deselezionando questa opzione verrà disabilitata la " #~ "visualizzazione di tutte le informazioni e le notifiche all'utente!" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Seleziona se utilizzare le notifiche vocali, se disponibili.\n" #~ "\n" #~ "Potresti essere in grado di rendere disponibili le notifiche vocali " #~ "installando il pacchetto \"python3-espeak\"." #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> imposta il tipo di restrizione / blocco (\"lock\" - blocca, \"suspend\" " #~ "- sospendi, \"suspendwake\" - sospendi riattivazione, \"terminate\" - " #~ "termina, \"shutdown\" - arresta), esempi" #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Copyright (c) 2018-2021 Eduards Bezverhijs" timekpr-next/resource/locale/it/LC_MESSAGES/timekpr.mo000644 001750 001750 00000221544 15122253261 024501 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–î®–�˜·˜+Ó˜Aÿ˜/A™q™Q†™=Ø™Tškšj…š¹ðš•ª›B@œ5ƒœ¹œÝË�§©ž/QŸ3�ŸŒµŸxB G» ^¡cb¡:Æ¡¢¢h.¢—¢o·¢('£/P£�€£C¤0U¤.†¤1µ¤<ç¤$¥>¥U¥g¥z¥3‘¥RÅ¥V¨o©5ˆ©(¾©ç©3ª5ªMUª!£ª@Ū@«G«^«>y«h¸«7!¬3Y¬5�¬5ì7ù¬[1­@�­έ$á­=®D®,S®ñ€±rµ’µ¬µµµG͵q¶‡¶) ¶8ʶ0·:4·Vo·Æ·¹Ú·”¸!œ¸¾¸ܸñ¸D¹J¹]¹>d¹£¹Ô³¹Æˆº”O»Pä»Ò5¼/½A8½èz½*c¿Ž¿ ¥¿'¯¿Í׿ϥÀuÁ†Á+•Á5ÁÁQ÷Á'IÂCqÂ&µÂÜÂËð¼Ã.ÌÃJûÃ,FÄ/sÄK£Ä(ïÄ'Å@Å`ÅcÅIÅÉÅfÛÅuBÈ,¸ÈåÈ ùÈÑÉÇÖÉ‘žÊ0Ë DËQË,qË6žËÕË=èË=&Ì dÌ)o̙̠̹̦Ñ̰xÍ-)ÎŒWξäÎ�£Ï1Ð'@ÐHhÐ ±ÐÒÐëÐóÐÑ'Ñ >Ñ/HÑ8xÑð±ÒL¢ÓïÓ÷ÓÔAÔ>[ÔkšÔCÕJÕIhÕ²ÕXÌÕu%ÖR›Ö/îÖL×)k×#•× ¹×Ú×1ó×%ØL6Ø ƒØA¤ØYæØ8@Ù<yÙ¦¶Ù]Û*qÛFœÛ#ãÛÜÜ<.Ü(kÜ/”Ü#ÄÜ)èÜ5Ý1HÝ zÝ%…Ý?«ÝëÝ Þ)Þ=ÞVÞ(fÞD�Þ!ÔÞÝöÞæÔß.»à.êááãêûãæäÂæÜÆæ£ç(´ç&Ýçè è$è&Bè¯ièUéeoé“Õéiê0qê¢ê,Àêíê)þêE(ë"në-‘ë<¿ë=üë<:ìwì5“ì8ÉìEíMHíR–íhéí7Rî24ð/gðë—ðŽƒñ¿óqÒô&DõÖk÷^BøÚ¡ø‚|ùÿúLûCSû—ûL³ûüü+üAüUüfü~ü^›ü.úü0)ýZýxý�ý¬ýÄýáýDþMFþ$”þM¹þ=ÿEÿ [ÿ3hÿœÿ'¸ÿàÿ2/GÒwJ&cŠ"Œ ¯KÐ)EF3Œ"À&ã 0vH}¿\=zšNed$Êï8;@#| 1¶4è 0>do€ÔcUJ¹f Pk >¼ Zû =V L” há KJ G– NÞ j- M˜ Xæ T? ?” [Ô ?05pQ¦4øE-;sS¯o?s5³Pé4:Ao]±@=P4ŽPÃI4^c“4÷9,Tf;» ÷ #À4ªõ  ¸Ã Ýéˆ@�•ÐŒf”ó?ˆ¥È±n !<:^6™DÐE[]wŽ”M–äè"÷)+2*6a}‘¦ÃÜ íÑ÷É"Î"ß"î"l÷"c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: Timekpr nExT Report-Msgid-Bugs-To: PO-Revision-Date: 2025-10-14 19:18+0300 Last-Translator: Eduards Bezverhijs Language-Team: Albano Battistella Language: it_IT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __:1,2 %(n)s minuto%(n)s minuti%(n)s secondo%(n)s secondi%(n)s secondo rimasto%(n)s secondi rimasto%(n)s secondo di Gioco rimanente%(n)s secondi di Gioco rimanente%(n)s utente in totale:%(n)s utenti in totale:---=== AVVISO ===---richiama le informazioni sul tempo dell'utente in tempo reale dal server, esempio==> ottieni l'elenco degli utenti salvati dal server, esempio==> richiama la configurazione utente e le informazioni sull'ora dal server, esempio==> stampa aiuto, esempio==> imposta le maschere del processo di attività di Gioco, per le quali si tiene conto del tempo, esempio==> imposta il Tempo di Gioco a sinistra per l'utente al momento attuale: "+" (aggiungi tempo), "-" (sottrai tempo), "=" (imposta il tempo esatto disponibile), esempio (aggiungi un'ora)==> imposta i limiti di Gioco per tutti i giorni consentiti, il numero di valori non deve superare i giorni di Gioco consentiti per l'utente, esempio==> imposta i giorni consentiti per le attività di Gioco, esempio==> imposta i giorni consentiti per l'utente, esempio==> imposta le ore consentite per il giorno specificato, o "ALL" per ogni giorno, opzionalmente specifica i minuti di inizio e di fine tra parentesi come questa [x-y], inoltre specifica! davanti all'ora se non deve essere contabilizzato (tempo libero per l'utente), esempio==> imposta il tipo di restrizione / blocco ("lock" - blocca, "suspend" - sospendi, "suspendwake" - sospendi riattivazione, "terminate" - termina, "kill" - forzare la chiusura delle sessioni, "shutdown" - arresta), esempi==> imposta il tempo rimasto per l'utente allo stato attuale: "+" (aggiungi ora), "-" (sottrai ora), "=" (imposta l'ora esatta disponibile), esempio (aggiungi un'ora)==> imposta il limite di tempo per mese,esempio==> imposta il limite di tempo a settimana, esempio==> imposta i limiti di tempo per tutti i giorni consentiti, il numero di valori non deve superare i giorni consentiti per l'utente, esempio==> imposta se le attività per il Tempo di Gioco sono consentite durante intervalli non contabilizzati ("∞"), esempio==> imposta se il Tempo per il Gioco è abilitato per l'utente, esempio==> imposta se il Tempo per il Gioco deve essere considerato invece normale attività, esempio==> imposta se nascondere l'icona nella barra delle applicazioni ed impedire le notifiche, esempio==> imposta se tracciare sessioni utente inattive, esempioInformazioni suInformazioni su Timekpr-nExTConteggio attività Attive di Gioco(in tempo reale, disponibile quando l'utente ha effettuato l'accesso)Elenco attività / applicazioniTempo di GIoco effettivo disponibile oggi (in tempo reale, disponibile quando l'utente ha effettuato l'accesso)Aggiungi utente all'elenco di esclusioneAggiungi il tipo di sessione esclusa all'elencoAggiungi nuova attività di Gioco. Specificare direttamente la maschera dell'attività e una descrizione intuitiva nell'elenco delle attività.Aggiungi una nuova soglia di notifica del Tempo di Gioco all'elencoAggiungi una nuova soglia di notifica all'elencoAggiungi la quantità specificata (ricompensa)Aggiungi il tipo di sessione tracciato alla listaIl tempo di Gioco aggiuntivo per l'utente è stato elaboratoConfigurazione aggiuntivaStatistiche aggiuntiveLimiti aggiuntiviOpzioni aggiuntiveStatistiche aggiuntiveÈ stato elaborato un tempo aggiuntivo per l'utenteConsenti attività di Gioco durante intervalli di tempo non contabilizzati ("∞") per l'utente selezionato. Questa impostazione consente all'utente di utilizzare le applicazioni configurate nel proprio elenco di attività di Gioco durante gli intervalli di tempo contrassegnati come non contabilizzati ("∞"). Se questa impostazione è abilitata, l'utilizzo delle attività non verrà considerato ai fini dei limiti di Gioco, altrimenti le applicazioni nell'elenco delle attività di Gioco verranno terminate non appena vengono avviate durante intervalli di tempo("∞") non contabilizzati.Consenti attività durante intervalli di tempo ("∞") non contabilizzati. Questa impostazione consente di utilizzare le applicazioni elencate in "Elenco attività / applicazioni" durante gli intervalli di tempo contrassegnati come non contabilizzati ("∞"), se l'impostazione non è abilitata, nessuna delle attività può essere eseguita!Aggiustamenti consentitiI giorni consentiti per l'utente sono stati elaboratiConsentito durante gli "∞" intervalli:Consentito durante "∞":Le ore consentite per l'utente sono state elaborateApplica configurazione di GiocoApplica i limiti di Gioco e le modifiche alla configurazione in questa paginaApplica impostazioni Timekpr-nExTApplica ulteriori modifiche alla configurazione in questa paginaApplica tutte le impostazioni di Timekpr-nExT contemporaneamenteApplica configurazioneApplica limiti giornalieriApplica limite a tutte le modifiche apportate in questa paginaBrevi informazioni sul tempo trascorso e tutto ciò che riguarda la gestione del tempo per questo giornoScegli i giorni da regolare per il periodo selezionato.Scegli le ore da regolare per i giorni selezionati.Scegli le ore da regolare per il periodo selezionato.Scegli i minuti da regolare per i giorni selezionati.Scegli i minuti da regolare per il periodo selezionato.Scegli questa opzione per modificare la concessione del Tempo di Gioco dell'utente per oggiScegli questa opzione per regolare il tempo dell'utente per oggiChiudi la finestraComando NON RIUSCITO: accesso negatoComando NON RIUSCITO: la comunicazione non è stata accettataConfigurazioneConfigurazione per notifiche personalizzate sul Tempo di Gioco disponibile. Configura le notifiche come meglio credi. Il valore "Time" di configurazione indica un valore del Tempo di Gioco rimanente quando verrà mostrata la notifica, l'opzione "Importance" governa il colore di un'icona e le proprietà di notifica come segue. Informazioni: verranno visualizzate un'icona verde e una notifica informativa Avviso: verranno visualizzati un'icona gialla e una notifica informativa Grave: verranno mostrate un'icona rossa e una notifica importante Critico: verranno mostrate un'icona rossa e una notifica critica, questa notifica di solito viene mostrata su tutte le applicazioni aperte e rimane aperta fino a quando non viene chiusa, tuttavia questo comportamento dipende fortemente dall'ambiente desktop in usoConfigurazione per notifiche personalizzate sul tempo disponibile. Configura le notifiche come meglio credi. Tuttavia, tieni presente che ci saranno due tipi di notifiche che non possono essere personalizzate: un avviso finale qualche tempo prima che il tempo finisca e un conto alla rovescia quando il tempo sta per scadere. Il valore "Time" di configurazione indica un valore di tempo rimanente in cui verrà mostrata la notifica, l'opzione "Importance" regola il colore di un'icona e le proprietà di notifica come segue. Informazioni: verranno visualizzate un'icona verde e una notifica informativa Avviso: verranno visualizzati un'icona gialla e una notifica informativa Grave: verranno mostrate un'icona rossa e una notifica importante Critico: verranno mostrate un'icona rossa e una notifica critica, questa notifica di solito viene mostrata su tutte le applicazioni aperte e rimane aperta fino a quando non viene chiusa, tuttavia questo comportamento dipende fortemente dall'ambiente desktop in usoConfigurazione per l'utente %s:Configurazione recuperataConnessoConnessione in corso...Tempo continuo lasciato a te. Può estendersi più del giorno corrente.Tempo rimasto. Può estendersi più del giorno corrente (in tempo reale, disponibile quando l'utente è connesso)Tempo residuo rimanente:Controlla le impostazioni di Timekpr-nExTControllo degli elementi di tracciamento di Timekpr-nExTI tipi di sessioni di controllo non sono passatiL'elenco dei tipi di sessioni di controllo non è correttoL'elenco dei tipi di sessioni di controllo non è corretto e non può essere impostatoConto alla rovesciaCrea un nuovo intervallo di tempo che sarà disponibile per l'utente. Dopo aver creato l'intervallo, modificare i suoi orari di inizio e fine direttamente nell'elenco degli intervalli.CriticoTimeout di notifica critico (sec)Statistiche di Gioco correntiNome utente correnteStatistiche attualiConfigurazione limite giornaliero per tutti i giorni della settimanaLimiti giornalieriGiornoI limiti di tempo del giorno per l'utente sono stati elaboratiGiorni e limitiDiminuisci la concessione giornaliera del Tempo di Gioco in base all'unità di tempo selezionata (ore o minuti) per i giorni selezionati. Tieni presente che puoi selezionare più di un giorno per la regolazione!Riduci la concessione di tempo giornaliera in base all'unità di tempo selezionata (ore o minuti) per i giorni selezionati. Tieni presente che puoi selezionare più di un giorno per la regolazione!Diminuisce la concessione di tempo settimanale o mensile in base all'unità di tempo selezionata (giorni o ore o minuti) per il periodo selezionato.Elimina l'intervallo di tempo selezionato dall'elenco di intervalli disponibile.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson ) (Italian fine-tuning by Abilita Tempo di Gioco per l'utente selezionatoL'abilitazione del Tempo di Gioco per l'utente è stata elaborataAbilita la sovrascrittura del Tempo di Gioco per l'utente selezionato. Questa impostazione sostituisce il conteggio del tempo in modo tale che il tempo venga conteggiato solo quando almeno una delle applicazioni nell'elenco delle attività di Gioco è in esecuzione! Ciò riguarda solo il conteggio del tempo, gli intervalli sono ancora pienamente applicati! Se nessun processo è in esecuzione, il tempo viene considerato inattivo, quindi è effettivamente tempo libero per l'utente!Abilita sovrascrittura del Tempo di Gioco:Abilita Tempo di GiocoAbilitatoMonitoraggio dell'attività migliorato:Immettere l'ora di fine per la funzione di riattivazione automatica. Tieni presente che questa opzione è efficace solo se la riattivazione tramite RealTime Clock è supportata e abilitata in BIOS / UEFI!Immettere l'ora di inizio per la funzione di riattivazione automatica. Tieni presente che questa opzione è efficace solo se la riattivazione tramite RealTime Clock è supportata e abilitata in BIOS / UEFI!Sessioni escluseUtenti esclusiI tipi di sessione esclusi non sono passatiL'elenco dei tipi di sessione esclusi non è correttoL'elenco dei tipi di sessione esclusi non è corretto e non può essere impostatoL'elenco utenti esclusi non è correttoL'elenco utenti esclusi non è corretto e non può essere impostatoL'elenco utenti esclusi non e' passatoConnessione fallitaLa funzione "%%s", utilizzata per rilevare i tempi di inattività, non può essere abilitata! Il tempo di inattività / inattivo potrebbe non essere preso in considerazione quando lo schermo è bloccato!Notifica finaleL'ora di notifica finale "%%s" non è correttaL'ora di notifica finale "%%s" non è corretta e non può essere impostataIl tempo di notifica finale non è trascorsoIl tempo di avviso finale "%%s" non è correttoIl tempo di avviso finale "%%s" non è corretto e non può essere impostatoIl tempo di avviso finale non è passatoFormato: Formato: DaNascondi icone e notifiche:L'icona Nascondi barra delle applicazioni per l'utente è stata elaborataIntervalli di oraIntervalli orari per il giorno selezionato disponibili per l'utente. L'opzione "∞" indica che il tempo trascorso durante questo intervallo non verrà conteggiato nel limite giornaliero, ma sarà invece considerato inattivo. Tieni presente che se il limite del giorno termina alle 24:00 e il limite del giorno successivo inizia alle 00:00, l'utente può lavorare ininterrottamente oltre la mezzanotte. Si noti che non è possibile configurare più intervalli nella stessa ora. Un intervallo può iniziare o finire o contenere un'ora specifica, ma non più di una volta. Questo è di progettazione, non un bug. Quanto tempo l'utente è stato inattivo dall'ultimo accesso (in tempo reale, disponibile quando l'utente è connesso)Errore di inizializzazione dell'icona (%%s)!Icona, non è vero?ImportanzaAumenta la concessione giornaliera del Tempo di Gioco in base all'unità di tempo selezionata (ore o minuti) per i giorni selezionati. Tieni presente che puoi selezionare più di un giorno per la regolazione!Aumenta la concessione di tempo giornaliera in base all'unità di tempo selezionata (ore o minuti) per i giorni selezionati. Tieni presente che puoi selezionare più di un giorno per la regolazione!Aumenta la concessione di tempo settimanale o mensile in base all'unità di tempo selezionata (giorni o ore o minuti) per il periodo selezionato.Informazioni & oggiInformazioniInformazioni sul Tempo di GiocoInformazioni sul tempo rimanente / trascorsoErrore di connessione interna, controllare i files logIntervallo rimossoL'inizio dell'intervallo non può essere lo stesso della fineL'inizio dell'intervallo non può essere successivo alla fineIntervalliMantieni il controllo del computer in usoLimiteLimite di configurazioneLimiti e configurazioneElenco dei tipi di sessione da monitorare. Per favore, non cambiarlo o sperimentarlo a meno che tu non sappia effettivamente (non desiderosamente) cosa stai facendo.Elenco delle sessioni da escludere dal monitoraggio. Per favore, non cambiarlo o sperimentarlo a meno che tu non sappia effettivamente (non desiderosamente) cosa stai facendo.Elenco dei nomi utente registrati nel sistemaElenco di utenti esclusi dal monitoraggio. Specifica qui i nomi utente effettivi, non i nomi reali. Ad esempio, "jsmith", non "John Smith".Elenca il giorno della settimana e ulteriori informazioni sul limite di Gioco del giorno. Abilita / disabilita i giorni per l'utente e imposta il tempo consentito per le attività di Gioco.Elenca il giorno della settimana e ulteriori informazioni sul limite del giorno. Si prega di abilitare / disabilitare i giorni per l'utente.Livello di logIl livello di log "%%s" non è correttoIl livello di registro "%%s" non è corretto e non può essere impostatoIl livello di log non è passatoLivello di registrazioneMensileNote, leggi attentamente;)Configurazione notificheTimeout notifica (sec)NotificheNumero di attività di Gioco attualmente attiveNumero di secondi rimasti per l'utente prima di applicare una restrizione / blocco configurato alle sue sessioni. Dopo che questo è stato raggiunto e l'utente è ancora attivo, le sessioni dell'utente verranno gestite in base alla restrizione / blocco specificati e quasi nulla può essere fatto per impedirlo.Numero di secondi rimanenti per il tempo disponibile dell'utente prima di inviare una notifica finale critica che il tempo sta per scadere. NOTA: il resto dei tempi di notifica sono configurabili utente per utente nell'applicazione client!ERRORE DI ANALISI DEI PARAMETRI (verificare la validità dei parametri): %%sPeriodoTempo di GiocoAttività di GiocoLe attività del Tempo di Gioco per l'utente sono state elaborateI giorni di Gioco consentiti per l'utente sono stati elaboratiIl flag del Tempo di Gioco consentito durante intervalli non contabilizzati per l'utente è stato elaboratoTempo di GIoco disponibile oggi (stato salvato, non in tempo reale)Configurazione Tempo di GiocoI limiti giornalieri del Tempo di Gioco per l'utente sono stati elaboratiTempo di Gioco abilitato:Il flag di monitoraggio dell'attività avanzata del Tempo di Gioco "%%s" non è correttoIl flag di monitoraggio delle attività avanzate del Tempo di Gioco "%%s" non è corretto e non può essere impostatoIl flag di monitoraggio delle attività avanzate del Tempo di Gioco non è passatoIl flag del Tempo di Gioco "%%s"non è correttoIl flag del Tempo di Gioco "%%s" non è corretto e non può essere impostatoIl flag del Tempo di Gioco non è passatoTempo di GIoco trascorso (attuale):Tempo di Gioco trascorso (oggi):Limiti di Tempo di GiocoConfigurazione delle notifiche del Tempo di GiocoOpzioni di GIocoIl flag di sovrascrizione del Tempo di Gioco per l'utente è stato elaboratoTempo di GIoco trascorso (oggi):Tempo di Gioco trascorso oggi (stato salvato, non in tempo reale)Si prega di riaprire l'applicazione se si è super-utente e Timekpr-nExT è in esecuzioneSi prega di selezionare un giorno per impostare i limitiSi prega di selezionare un intervallo di un'ora da rimuovereSpecificare un elenco di nomi di processi completi (eseguibili) senza percorso come stringhe con distinzione tra maiuscole e minuscole da monitorare nel sistema. È possibile specificare anche le maschere RegExp per i processi, ma si prega di fare molta attenzione in quanto l'uso improprio di questa impostazione può portare alla chiusura di processi indesiderati per l'utente! NOTA: RegExp è un'impostazione esperta!Verifica intervalloIl tempo di verifica "%%s" non è correttoIl tempo di verifica "%%s" non è corretto e non può essere impostatoIl tempo di verifica non è passatoDescrizione processoMaschera processoRimuovi la soglia di notifica del Tempo di Gioco dall'elencoRimuovi utente dall'elenco di esclusioneRimuovi il tipo di sessione esclusa dall'elencoRimuovi il tipo di sessione esclusaRimuovi la soglia di notifica dall'elencoRimuovi la voce selezionata dalle attività di Gioco.Rimuovi il tipo di sessione tracciato dall'elencoRipristinaRipristina una configurazione salvataIl tipo di restrizione / blocco per l'utente è stato elaboratoTipo di restrizione / blocco:Attività in corso (effettive):Attività in corso:Salva tutte le modificheRisparmia tempoRisparmio di tempo "%%s" non è correttoRisparmio di tempo "%%s" non è corretto e non può essere impostatoRisparmio di tempo non è passatoSeleziona un tipo di restrizione / blocco per l'utente. NOTA: si prega di fare molta attenzione, pensare in anticipo e leggere ogni descrizione delle opzioni quando si modifica questa impostazione dal valore predefinito!Selezionare un intervallo di tempo in cui il computer può essere riattivato automaticamente. Tieni presente che questa opzione è efficace solo se la riattivazione tramite RealTime Clock è supportata e abilitata in BIOS / UEFI!Seleziona se conteggiare il tempo della sessione inattiva. Se questa opzione è deselezionata, il tempo trascorso nelle sessioni di accesso della console (non dell'emulatore di terminale) e mentre lo schermo è bloccato NON viene preso in considerazione. Questo varia a seconda degli ambienti desktop.Seleziona se conteggiare il tempo della sessione inattiva. Se questa opzione è deselezionata, il tempo trascorso nelle sessioni di accesso della console (non dell'emulatore di terminale) e mentre lo schermo è bloccato NON viene preso in considerazione. Questo varia a seconda degli ambienti desktop.Se viene conteggiato il tempo per le sessioni inattive, se questo è deselezionato, il tempo trascorso in console (non nel terminale) e mentre lo schermo è bloccato, NON viene preso in considerazione (varia molto da DE a DE)Seleziona se mostrare l’icona del lucchetto di Timekpr-next e le notifiche all’utente. Si prega di notare che selezionando questa opzione verrà disabilitata la visualizzazione di tutte le informazioni e notifiche per l’utente!Seleziona se utilizzare il suono "campanello" (breve suono di notifica) per annunciare una nuova notifica da Timekpr-nExT. Funziona solo per le notifiche abilitate. Se questa impostazione non è modificabile, l'ambiente che usi non è in grado di supportare per le notifiche sonore.Seleziona se utilizzare le notifiche vocali, se disponibili. Potresti essere in grado di rendere disponibili le notifiche vocali installando il pacchetto "python3-espeak" o "python3-espeak-ng".Granularità del tempo di polling della sessione che specifica la frequenza con cui le sessioni e l'attività dell'utente vengono controllate e contabilizzate. 3-5 secondi sono ottimali, non cambiarlo se non sei sicuro.Tipo di sessioneImposta questo limite di tempo specificoImpostazioni per le attività di GiocoGraveMostra tutte le notificheMostra le modifiche ai limitiMostra i secondi nell'area di notificaSpecificare il tempo in secondi in cui Timekpr-nExT avvia il conto alla rovescia continuo in tempo reale prima di applicare una restrizione / blocco alle sessioni dell'utente.Se mostrare la notifica quando si modificano le configurazioni limite o la tolleranzaSpecifica se mostrare tutte le notifiche. Se deselezionato, vengono mostrati solo quelli importanti.Specificare se mostrare i secondi nell'area di notifica. Alcuni ambienti desktop, come KDE5, non supportano il testo oltre alle icone di notifica.AvviatoStato del client di amministrazione Timekpr-nExTStato del client Timekpr-nExTSottrai la quantità specificata (penalità)Tempo di termineIl tempo di termine "%%s" non è correttoIl tempo di termine "%%s" non è corretto e non può essere impostatoIl tempo di termine non è passatoL'intervallo si sovrappone a quello esistenteLa fine dell'intervallo è in conflitto con quella esistenteL'inizio dell'intervallo è in conflitto con quello esistenteL'intervallo di inizio o fine duplica l'intervallo esistenteIl comando non è corretto:La quantità di ore da regolare per il limite di oggiLa quantità di minuti da regolare per il limite di oggiL'utilizzo del client di amministrazione Timekpr-nExT è il seguente:Si è verificato un problema durante la comunicazione con Timekpr-nExT (%%s)!Si è verificato un problema durante il collegamento al daemon Timekpr-nExT (%%s)!Questi sono i giorni e i limiti a tua disposizione come parte delle limitazioni delle attività di GiocoQuesti sono giorni e limiti che sono a tua disposizioneQuesta è l'app di configurazione per Timekpr-nExT. Ti consente di impostare limiti di tempo per i tuoi utenti individuali e opzioni generali di Timekpr-nExT. Per usare questa applicazione, devi eseguirla come superutente o far parte del gruppo timekpr. Si noti che la "Configurazione Timekpr-nExT" è disponibile solo in modalità super-utente (amministratore)! Si prega di configurare con attenzione: non chiudetevi fuori!Ciò ti consente di configurare i limiti di Gioco.Ciò consente di configurare i limiti di tempo.Questa opzione sostituisce il conteggio del tempo predefinito. Se è selezionato, il tempo viene conteggiato solo quando le attività in "Elenco attività / applicazioni" sono in esecuzione, il resto del tempo è considerato inattivo.Imposta la durata di visualizzazione di una notifica per le notifiche "critiche" sul tempo rimanente (quando l'icona diventa rossa). Il valore è specificato in secondi. Un valore di 0 significa mostrare fino a quando non viene ignorato. Tieni presente che l'ambiente desktop che utilizzi potrebbe ignorare questo timeout, nel qual caso questa impostazione non avrà alcun effetto sulla notifica.Imposta la durata di visualizzazione di una notifica per le notifiche regolari sul tempo rimanente e sulle modifiche alla configurazione. Il valore è specificato in secondi. Un valore di 0 significa mostrare fino a quando non viene ignorato (non consigliato per le notifiche regolari). Tieni presente che l'ambiente desktop che utilizzi potrebbe ignorare questo timeout, nel qual caso questa impostazione non avrà alcun effetto sulla notifica.Questo imposta il livello di registrazione. Per favore non cambiarlo a meno che tu non sappia cosa stai facendo.Questa impostazione controlla se il monitor dell'attività di Gioco utilizzerà la riga di comando del processo, inclusi gli argomenti, per il monitoraggio dei processi (per impostazione predefinita utilizza solo il nome del processo). Quando questa impostazione è abilitata, Timekpr-nExT eseguirà una corrispondenza con la riga di comando completa fino a 512 caratteri, consentendo funzionalità avanzate di monitoraggio del processo. Fai attenzione e ricontrolla i tuoi schemi RegExp nelle maschere di attività di Gioco di ogni singolo utente!Questa impostazione controlla se la funzionalità di Gioco è abilitata. Questo è un interruttore principale del Tempo di Gioco, se è spento, è spento per tutti indipendentemente dalle impostazioni individuali!Questo mostra le attività / applicazioni che fanno parte delle restrizioni del Tempo di GiocoQuesto mostra gli intervalli di tempo disponibili per l'uso. L'opzione "∞" indica che il tempo trascorso durante questo intervallo non verrà conteggiato nel limite giornaliero, ma sarà invece considerato inattivo.Specifica la frequenza in secondi alla quale lo stato utente effettivo viene salvato su disco. Per migliorare le prestazioni e avere ancora una maggiore precisione, Timekpr-nExT tiene conto del tempo in memoria della frequenza di "Intervallo di polling", questa impostazione definisce una frequenza alla quale lo stato dell'utente viene salvato su disco per l'archiviazione permanente.OrarioIl permesso di tempo è cambiato, si prega di notare il nuovo tempo rimasto!Tempo disponibile oggi (risparmiato dichiarato, non in tempo reale)Tempo inattivo (effettivo):Tempo inattivo in questa sessione o dopo che Timekpr-nExT è stato riavviatoTempo inattivo:Tempo rimasto (effettivo):Tempo rimasto (oggi):Tempo rimasto oggi:Tempo rimasto...Limite di tempo (mese):Limite di tempo (settimana):La configurazione del limite di tempo è cambiata, si prega di notare la nuova configurazione!Limite di tempo per il mese a tua disposizioneLimite di tempo per settimana disponibile per teLimite di tempo oltrepassato:Tempo trascorso (mese):Tempo trascorso (sessione):Tempo trascorso (oggi):Tempo trascorso (settimana):Tempo trascorso per questo meseTempo trascorso questo mese (salvato dichiarato, non in tempo reale)Tempo trascorso in questa sessione o dopo che Timekpr-nExT è stato riavviatoTempo trascorso per questa settimanaTempo trascorso per questa settimana (salvato dichiarato, non in tempo reale)Tempo trascorso oggi (salvato dichiarato, non in tempo reale)Tempo trascorso oggi:Timekpr-nExTConfigurazione dell'amministrazione di Timekpr-nExTConfigurazione Timekpr-nExTNotifica Tempo di Gioco di Timekpr-nExTAmministrazione di Timekpr-nExTClient Timekpr-nExTLa configurazione di Timekpr-nExT è stata salvataL'interfaccia Timekpr-nExT non è ancora prontaLivello di log Timekpr-nExT. Si prega di non modificarlo a meno che non sia necessario. Probabilmente non troverai nulla di carino nei file di registro. I valori sono: 1 - standard, 2 - debug, 3 - extra debugNotifica di Timekpr-nExTConfigurazione relativa a Timekpr-nExTATempo di Gioco totale rimasto oggiTempo di gioco totale speso oggiTempo totale disponibile rimasto in una riga, fino alla fine della giornataLa traccia inattiva "%%s" non è correttaLa traccia inattiva "%%s" non è corretta e non può essere impostataLa traccia inattiva per l'utente è stata elaborataLa traccia inattiva non è passataTieni traccia delle sessioni inattive:Traccia inattiva:Sessioni monitorateERRORE INASPETTATO: %%sERRORE imprevisto durante il recupero della configurazione. Si prega di controllare i file di registro di Timekpr-nExTERRORE imprevisto durante il recupero della configurazione utente. Si prega di controllare i file di registro di Timekpr-nExTERRORE inaspettato per ottenere l'elenco degli utenti. Controlla i files log di Timekpr-nExTERRORE imprevisto durante l'aggiornamento della configurazione. Si prega di controllare i file di registro di Timekpr-nExTERRORE inatteso durante l'aggiornamento. Controlla i files log di Timekpr-nExTERRORE inaspettato durante il caricamento della configurazione. Controlla i files log di Timekpr-nExTUsa il suono "beep" per le notificheUsa le notifiche vocaliLa configurazione dell'utente "%%s" non è stata trovataIl file di controllo dell'utente "%%s" non è stato trovatoL'utente "%%s" non è stato trovatoConfigurazione utenteI limiti di GIoco dell' utente sono stati salvatiLe opzioni aggiuntive dell'utente sono state salvateConfigurazione utente recuperataI limiti di tempo dell'utente sono stati salvatiIl tempo di Gioco "%%s" consentito dell'utente durante gli intervalli non registrati non è correttoIl tempo di Gioco "%%s" consentito dell'utente durante gli intervalli non registrati non è corretto e non può essere impostatoIl tempo di Gioco "%%s" consentito dell'utente durante gli intervalli non registrati non è passatoL'elenco dei limiti giornalieri di Gioco "%%s" dell'utente non è correttoL'elenco dei limiti giornalieri di Gioco "%%s" dell'utente non è corretto e non può essere impostatoL'elenco dei limiti giornalieri di Gioco "%%s" dell'utente non è stato superatoL'elenco dei giorni di Gioco dell'utente "%%s" non è correttoL'elenco dei giorni di Gioco dell'utente "%%s" non è corretto e non può essere impostatoL'elenco dei giorni di Gioco dell'utente "%%s" non è passatoIl flag di abilitazione del Tempo di Gioco "%%s" dell'utente non è correttoIl flag di abilitazione del Tempo di Gioco "%%s" dell'utente non è corretto e non può essere impostatoIl flag di abilitazione del Tempo di Gioco "%%s" dell'utente non è passatoL'operazione di Gioco dell'utente "%%s"può essere una di queste: - + =Il flag di sovrascrizione del Tempo di Gioco dell'utente "%%s" non è correttoIl flag di sovrascrizione del Tempo di Gioco dell'utente "%%s" non è corretto e non può essere impostatoIl flag di sovrascrizione del Tempo di Gioco dell'utente "%%s" non è passatoIl limite di tempo di Gioco dell'utente"%%s" non è corretto e non può essere impostatoLe ore "%%s" consentite dall'utente non sono corrette e non possono essere impostateL'elenco dei limiti di giorno "%%s" dell'utente non è correttoL'elenco dei limiti di giorno "%%s" dell'utente non è corretto e non può essere impostatoL'elenco dei limiti del giorno "%%s" dell'utente non è passatoL'elenco dei giorni "%%s" dell'utente non è correttoL'elenco dei giorni "%%s" dell'utente non è corretto e non può essere impostatoL'elenco dei giorni "%%s" dell'utente non è passatoIl numero del giorno "%%s" dell'utente deve essere compreso tra 1 e 7Il numero del giorno "%%s" dell'utente deve essere presenteIl flag dell'icona "%%s" della barra delle applicazioni dell'utente non è correttoIl flag dell'icona della barra delle applicazioni "%%s" dell'utente non è corretto e non può essere impostatoIl flag dell'icona "%%s" nascosta dell'utente non viene passatoIl permesso mensile dell'utente "%%s" non è correttoIl permesso mensile dell'utente "%%s"non è corretto e non può essere impostatoIl permesso mensile dell'utente "%%s" non e' passatoIl tipo di restrizione / blocco "%%s" dell'utente non è correttoIl tipo di restrizione / blocco dell'utente "%%s" non è corretto e non può essere impostatoIl tipo di restrizione / blocco dell'utente "%%s" non è passatoIl limite di Gioco impostato dall'utente "%%s"non è correttoIl limite di tempo "%%s" dell'utente non è correttoIl limite di tempo "%%s" dell'utente non è corretto e non può essere impostatoL'operazione temporale "%%s" dell'utente può essere una di queste: - + =La traccia inattiva dell'utente "%%s"non e' passataIl contrassegno inattivo della traccia dell'utente"%%s" non è corretto e non può essere impostatoLa traccia inattiva dell'utente "%%s"non e' passataIl permesso settimanale dell'utente "%%s" non è correttoIl permesso settimanale dell'utente"%%s" non è corretto e non può essere impostatoIl permesso settimanale dell'utente"%%s" non viene superatoNome utenteNome utente:Configurazione relativa agli utentiVerifica gli intervalli di tempo configurati. Questo è un passaggio obbligatorio per garantire che gli intervalli siano corretti. Verranno evidenziati gli intervalli che presentano problemi.ATTENZIONE: l'utilità di amministrazione di Timekpr-nExT è stata chiesta di eseguirla in modalità GUI, ma non sono disponibili display, quindi in esecuzione in CLI ...Intervallo ora sveglia:AttenzioneLimiti dei giorni ferialiSettimanaleLimiti settimanali e mensiliLimiti settimanali e mensili per l'utente. Questi limiti vengono applicati all'utente insieme al resto della configurazione dei limiti.I limiti settimanali e mensili per l'utente sono stati elaboratiAllo scadere del tempo, lo schermo del computer verrà bloccato. Questa opzione non è una restrizione ed è più adatta per scopi di autocontrollo.Allo scadere del tempo, il computer verrà spento. Questa opzione è una restrizione! Valuta se hai bisogno di questo tipo di restrizione!Allo scadere del tempo, il computer verrà sospeso (messo in stato di stop) e verrà riattivato all'inizio del successivo intervallo di tempo disponibile per l'utente. Questa opzione non è una restrizione ed è più adatta per scopi di autocontrollo. Se viene riattivato quando non c'è ancora tempo, lo schermo del computer verrà bloccato e dopo un po 'di tempo verrà messo di nuovo in sospensione.Allo scadere del tempo, il computer verrà sospeso (messo in stato di sleep mode). Questa opzione non è una restrizione ed è più adatta per scopi di autocontrollo. Se viene riattivato quando non c'è ancora tempo, lo schermo del computer verrà bloccato e dopo un po 'di tempo verrà messo di nuovo in sospensione.Quando il tempo scade, le sessioni dell'utente saranno forzatamente chiuse. Questa opzione è una restrizione! Valuta se hai bisogno di questo tipo di restrizione!Allo scadere del tempo, le sessioni utente verranno terminate. Questa opzione è una restrizione! Questa è l'opzione predefinita e molto probabilmente è quella che ti serve!Hai %(n)s oraHai %(n)s oreIl tuo tempo non è limitato oggiIl tuo tempo è scaduto, Sarai forzatamente disconnesso inIl tuo tempo è scaduto, il tuo computer verrà spentoIl tuo tempo è scaduto, il tuo computer verrà sospeso forzatamenteIl tuo tempo è scaduto, la tua sessione verrà bloccata forzatamenteginserire intervalli orarimaschera eseguibile...da...hle ore sono numerate secondo ISO 8601 (ad es. orologio 24 ore, formato: 0-23)oreimpoartanza...forzare la chiusura delle sessioniblocca schermomminutin/ai valori numerici di tempo sono in secondidescrizione del processo...tipo di sessione...arresto del computersospendi / riattiva computerSospensione del computertermina sessioniOrario...Questo programma è software libero: è possibile ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License così come pubblicata dalla Free Software Foundation, sia la versione 3 della licenza, o (a propria scelta) una versione successiva. Questo programma è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA, nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per ulteriori dettagli. Dovreste aver ricevuto una copia della GNU General Public License insieme a questo programma. In caso contrario, vedere . In Debian, vedere file / usr/share/common-licenses/GPL-3a...il tempo di ogginome utente...verificai giorni della settimana sono numerati secondo ISO 8601 (ovvero il lunedì è il primo giorno, formato: 1-7)timekpr-next/resource/locale/hu/000775 001750 001750 00000000000 13705523357 020711 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/hu/LC_MESSAGES/000775 001750 001750 00000000000 15122253261 022463 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/hu/LC_MESSAGES/timekpr.po000644 001750 001750 00000351306 15122253261 024504 0ustar00bezvfedubezvfedu000000 000000 # Hungarian translation for timekpr-next # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2021-03-01 22:11+0200\n" "PO-Revision-Date: 2025-10-14 19:18+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2020-10-10 15:24+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> súgó megjelenítése, példa" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> mentett felhasználólista betöltése a szerverrÅ‘l, példa" #: common/constants/messages.py:33 msgid "" "==> get user configuration and time information from the server, example" msgstr "==> felhasználói konfigurációs és idÅ‘információkat a szerverrÅ‘l, példa" #: common/constants/messages.py:34 msgid "==> set allowed days for the user, example" msgstr "==> felhasználónak engedélyezett napok beállítása, példa" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:36 #, fuzzy msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> meghatározott napra vagy \"ALL\" az összes napra engedélyezett órák " "beállítása (opcionálisan zárójelben adja meg a kezdÅ‘ és a végi percet), példa" #: common/constants/messages.py:37 #, fuzzy msgid "" "==> set time limits for all allowed days, the number of values must not " "exceed the allowed days for the user, example" msgstr "" "==> idÅ‘korlátok beállítása az engedélyezett napokra (az értékszámnak meg " "kell egyeznie az engedélyezett napszámmal), példa" #: common/constants/messages.py:38 msgid "==> set time limit per week, example" msgstr "==> heti idÅ‘korlát beállítása, példa" #: common/constants/messages.py:39 msgid "==> set time limit per month, example" msgstr "==> havi idÅ‘korlát beállítása, példa" #: common/constants/messages.py:40 msgid "==> set whether to track inactive user sessions, example" msgstr "" "==> inaktív felhasználói meneteket figyelembe vételének beállítása, példa" #: common/constants/messages.py:41 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" "==> beállíthatja, hogy elrejtse-e a tálca ikont és megakadályozza az " "értesítéseket, példa" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "shutdown" #: common/constants/messages.py:43 #, fuzzy msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"shutdown\" - shutdown the computer), examples" msgstr "" "==> korlátozás / zárolás típusának beállítása (\"lock\", \"suspend\", " "\"suspendwake\", \"terminate\", \"shutdown\"), példa" #: common/constants/messages.py:44 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> a felhasználó aktuálisan fennmaradó idejének beállítása: \"+\" (idÅ‘ " "hozzáadása), \"-\" (idÅ‘ kivonása), \"=\" (a rendelkezésre álló pontos idÅ‘ " "beállítása), példa" #: common/constants/messages.py:45 #, fuzzy #| msgid "==> set allowed days for the user, example" msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> felhasználónak engedélyezett napok beállítása, példa" #: common/constants/messages.py:46 #, fuzzy #| msgid "==> set whether to hide tray icon and prevent notifications, example" msgid "" "==> set whether PlayTime must be accounted instead of normal activity, " "example" msgstr "" "==> beállíthatja, hogy elrejtse-e a tálca ikont és megakadályozza az " "értesítéseket, példa" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" #: common/constants/messages.py:48 #, fuzzy #| msgid "==> set allowed days for the user, example" msgid "==> set allowed days for PlayTime activities, example" msgstr "==> felhasználónak engedélyezett napok beállítása, példa" #: common/constants/messages.py:49 #, fuzzy msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> idÅ‘korlátok beállítása az engedélyezett napokra (az értékszámnak meg " "kell egyeznie az engedélyezett napszámmal), példa" #: common/constants/messages.py:50 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" #: common/constants/messages.py:51 #, fuzzy #| msgid "" #| "==> set time left for the user at the current moment of time: \"+\" (add " #| "time), \"-\" (subtract time), \"=\" (set exact time available), example " #| "(add one hour)" msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> a felhasználó aktuálisan fennmaradó idejének beállítása: \"+\" (idÅ‘ " "hozzáadása), \"-\" (idÅ‘ kivonása), \"=\" (a rendelkezésre álló pontos idÅ‘ " "beállítása), példa" #: common/constants/messages.py:54 msgid "Control sessions types are not passed" msgstr "Nem adták át a vezérlÅ‘ munkamenet típusait" #: common/constants/messages.py:55 msgid "Control sessions types list is not correct" msgstr "Nem megfelelÅ‘ a vezérlÅ‘ munkamenet típuslistája" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "Nem megfelelÅ‘ a vezérlÅ‘ munkamenet típuslistája és nem lehet beállítani" #: common/constants/messages.py:57 msgid "Excluded session types are not passed" msgstr "A kizárt munkamenet típusait nem adták át" #: common/constants/messages.py:58 msgid "Excluded session types list is not correct" msgstr "Nem megfelelÅ‘ a kizárt munkamenetek típuslistája" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct and cannot be set" msgstr "" "Nem megfelelÅ‘ a kizárt munkamenetek típuslistája és nem lehet beállítani" #: common/constants/messages.py:60 msgid "Excluded user list is not passed" msgstr "A kizárt felhasználók listáját nem adták át" #: common/constants/messages.py:61 msgid "Excluded user list is not correct" msgstr "Nem megfelelÅ‘ a kizárt felhasználók listája" #: common/constants/messages.py:62 msgid "Excluded user list is not correct and cannot be set" msgstr "A kizárt felhasználók listáját nem adták át és nem lehet feldolgozni" #: common/constants/messages.py:63 msgid "Final warning time is not passed" msgstr "Az utolsó figyelmeztetés idÅ‘pontját nem adták át" #: common/constants/messages.py:64 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "A utolsó figyelmeztetés \"%%s\" idÅ‘pontja nem megfelelÅ‘" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "A utolsó figyelmeztetés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet " "beállítani" #: common/constants/messages.py:66 #, fuzzy #| msgid "Final warning time is not passed" msgid "Final notification time is not passed" msgstr "Az utolsó figyelmeztetés idÅ‘pontját nem adták át" #: common/constants/messages.py:67 #, fuzzy, python-format #| msgid "Final warning time \"%%s\" is not correct" msgid "Final notification time \"%%s\" is not correct" msgstr "A utolsó figyelmeztetés \"%%s\" idÅ‘pontja nem megfelelÅ‘" #: common/constants/messages.py:68 #, fuzzy, python-format #| msgid "Final warning time \"%%s\" is not correct and cannot be set" msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "A utolsó figyelmeztetés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet " "beállítani" #: common/constants/messages.py:69 msgid "Termination time is not passed" msgstr "A kilépés idÅ‘pontját nem adták át" #: common/constants/messages.py:70 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "A kilépés \"%%s\" idÅ‘pontja nem megfelelÅ‘" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "A kilépés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:72 msgid "Track inactive is not passed" msgstr "Az inaktívitás figyelését nem adták át" #: common/constants/messages.py:73 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "A(z) \"%%s\" inaktivitás figyelése nem megfelelÅ‘" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "" "A(z) \"%%s\" inaktivitás figyelése nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:75 msgid "Log level is not passed" msgstr "A naplózás szintjét nem adták át" #: common/constants/messages.py:76 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "A \"%%s\" naplózás szintje nem megfelelÅ‘" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "A \"%%s\" naplózás szintje nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:78 msgid "Poll time is not passed" msgstr "A lekérdezés idÅ‘pontját nem adták át" #: common/constants/messages.py:79 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "A lekérdezés \"%%s\" idÅ‘pontja nem megfelelÅ‘" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "A lekérdezés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:81 msgid "Save time is not passed" msgstr "A tárolás idÅ‘pontját nem adták át" #: common/constants/messages.py:82 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "A tárolás \"%%s\" idÅ‘pontja nem megfelelÅ‘" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "A tárolás \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:84 #, fuzzy #| msgid "Poll time is not passed" msgid "PlayTime flag is not passed" msgstr "A lekérdezés idÅ‘pontját nem adták át" #: common/constants/messages.py:85 #, fuzzy, python-format #| msgid "Poll time \"%%s\" is not correct" msgid "PlayTime flag \"%%s\" is not correct" msgstr "A lekérdezés \"%%s\" idÅ‘pontja nem megfelelÅ‘" #: common/constants/messages.py:86 #, fuzzy, python-format #| msgid "Poll time \"%%s\" is not correct and cannot be set" msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "A lekérdezés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:87 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "" #: common/constants/messages.py:88 #, fuzzy, python-format #| msgid "Track inactive \"%%s\" is not correct" msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "A(z) \"%%s\" inaktivitás figyelése nem megfelelÅ‘" #: common/constants/messages.py:89 #, fuzzy, python-format #| msgid "Track inactive \"%%s\" is not correct and cannot be set" msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be " "set" msgstr "" "A(z) \"%%s\" inaktivitás figyelése nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:92 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "A \"%%s\" felhasználó napjai számának rendelkezésre kell állniuk" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "A \"%%s\" felhasználó napjai számának 1 és 7 között kell lennie" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó számára engedélyezett órák nem megfelelÅ‘ek és nem " "lehet beállítani" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "A \"%%s\" felhasználó naplistáját nem adták át" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "A \"%%s\" felhasználó naplistája nem megfelelÅ‘" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "A \"%%s\" felhasználó naplistája nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "A \"%%s\" felhasználó napi korlátozáslistáját nem adták át" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "A \"%%s\" felhasználó napi korlátozáslistája nem megfelelÅ‘" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó napi korlátozáslistája nem megfelelÅ‘ és nem lehet " "beállítani" #: common/constants/messages.py:101 #, fuzzy, python-format #| msgid "User's \"%%s\" set time operation can be one of these: -+=" msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "A \"%%s\" felhasználó idÅ‘beállító műveletei ezek lehetnek: -+=" #: common/constants/messages.py:102 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct" msgid "User's \"%%s\" time limit is not correct" msgstr "A \"%%s\" felhasználó idÅ‘korlátja nem megfelelÅ‘" #: common/constants/messages.py:103 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct and cannot be set" msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó idÅ‘korlátja nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "A \"%%s\" felhasználó havi korlátját nem adták át" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "A \"%%s\" felhasználó havi korlátja nem megfelelÅ‘" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó havi korlátja nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolóját nem adták át" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘ és nem " "lehet beállítani" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" "A felhasználó \"%%s\" elrejtÅ‘ tálca ikonjának jelzÅ‘je nem került átadásra" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "A felhasználó \"%%s\" elrejtõ tálcájának ikonja nem megfelelõ" #: common/constants/messages.py:112 #, fuzzy, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "A felhasználó \"%%s\" elrejtõ tálcájának ikonja nem megfelelõ, és nem " "állítható be" #: common/constants/messages.py:113 #, fuzzy, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "" "A felhasználó \"%%s\" korlátozásának / zárolásának típusa nincs megadva" #: common/constants/messages.py:114 #, fuzzy, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "" "A felhasználó \"%%s\" korlátozásának / zárolásának típusa nem megfelelÅ‘" #: common/constants/messages.py:115 #, fuzzy, python-format msgid "" "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "A felhasználó \"%%s\" korlátozási / zárolási típusa nem megfelelÅ‘, és nem " "állítható be" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "A \"%%s\" felhasználó heti korlátját nem adták át" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "A \"%%s\" felhasználó heti korlátja nem megfelelÅ‘" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó heti korlátja nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:119 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not passed" msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolóját nem adták át" #: common/constants/messages.py:120 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct" msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘" #: common/constants/messages.py:121 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘ és nem " "lehet beállítani" #: common/constants/messages.py:122 #, fuzzy, python-format #| msgid "User's \"%%s\" hide tray icon flag is not passed" msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "A felhasználó \"%%s\" elrejtÅ‘ tálca ikonjának jelzÅ‘je nem került átadásra" #: common/constants/messages.py:123 #, fuzzy, python-format #| msgid "User's \"%%s\" hide tray icon flag is not correct" msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "A felhasználó \"%%s\" elrejtõ tálcájának ikonja nem megfelelõ" #: common/constants/messages.py:124 #, fuzzy, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "A felhasználó \"%%s\" elrejtõ tálcájának ikonja nem megfelelõ, és nem " "állítható be" #: common/constants/messages.py:125 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not passed" msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "passed" msgstr "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolóját nem adták át" #: common/constants/messages.py:126 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct" msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct" msgstr "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘" #: common/constants/messages.py:127 #, fuzzy, python-format #| msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘ és nem " "lehet beállítani" #: common/constants/messages.py:128 #, fuzzy, python-format #| msgid "User's \"%%s\" day list is not passed" msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "A \"%%s\" felhasználó naplistáját nem adták át" #: common/constants/messages.py:129 #, fuzzy, python-format #| msgid "User's \"%%s\" day list is not correct" msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "A \"%%s\" felhasználó naplistája nem megfelelÅ‘" #: common/constants/messages.py:130 #, fuzzy, python-format #| msgid "User's \"%%s\" day list is not correct and cannot be set" msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "A \"%%s\" felhasználó naplistája nem megfelelÅ‘ és nem lehet beállítani" #: common/constants/messages.py:131 common/constants/messages.py:134 #, fuzzy, python-format #| msgid "User's \"%%s\" day limits list is not passed" msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "A \"%%s\" felhasználó napi korlátozáslistáját nem adták át" #: common/constants/messages.py:132 common/constants/messages.py:135 #, fuzzy, python-format #| msgid "User's \"%%s\" day limits list is not correct" msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "A \"%%s\" felhasználó napi korlátozáslistája nem megfelelÅ‘" #: common/constants/messages.py:133 common/constants/messages.py:136 #, fuzzy, python-format #| msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgid "" "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó napi korlátozáslistája nem megfelelÅ‘ és nem lehet " "beállítani" #: common/constants/messages.py:137 #, fuzzy, python-format #| msgid "User's \"%%s\" set time operation can be one of these: -+=" msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "A \"%%s\" felhasználó idÅ‘beállító műveletei ezek lehetnek: -+=" #: common/constants/messages.py:138 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct" msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "A \"%%s\" felhasználó idÅ‘korlátja nem megfelelÅ‘" #: common/constants/messages.py:139 #, fuzzy, python-format #| msgid "User's \"%%s\" set time limit is not correct and cannot be set" msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "A \"%%s\" felhasználó idÅ‘korlátja nem megfelelÅ‘ és nem lehet beállítani" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:143 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT " "log files" msgstr "" "Váratlan hiba a konfiguráció betöltése során. Kérjük, tekintse meg a Timekpr-" "nExT naplófájljait" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:145 #, fuzzy #| msgid "" #| "Unexpected ERROR getting confguration. Please inspect Timekpr-nExT log " #| "files" msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "Váratlan hiba a konfiguráció lekérése során. Kérjük, tekintse meg a Timekpr-" "nExT naplófájljait" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:147 #, fuzzy #| msgid "" #| "Unexpected ERROR getting user confguration. Please inspect Timekpr-nExT " #| "log files" msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Váratlan hiba a felhasználói konfiguráció lekérése során. Kérjük, tekintse " "meg a Timekpr-nExT naplófájljait" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:149 msgid "" "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "Váratlan hiba a felhasználólista lekérése során. Kérjük, tekintse meg a " "Timekpr-nExT naplófájljait" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:151 #, fuzzy #| msgid "" #| "Unexpected ERROR updating confguration. Please inspect Timekpr-nExT log " #| "files" msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Váratlan hiba a konfiguráció frissítésekor. Kérjük, tekintse meg a Timekpr-" "nExT naplófájljait" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:153 msgid "" "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "Váratlan hiba a vezérlés frissítésekor. Kérjük, tekintse meg a Timekpr-nExT " "naplófájljait" #: common/constants/messages.py:154 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "A \"%%s\" felhasználó konfigurációját nem találtuk" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" control file is not found" msgstr "A \"%%s\" vezérlÅ‘ fájlt nem találtuk" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" is not found" msgstr "A \"%%s\" felhasználót nem találtuk" #: common/constants/messages.py:159 msgid "Connected" msgstr "Kapcsolódva" #: common/constants/messages.py:160 msgid "Connecting..." msgstr "Kapcsolódás folyamatban…" #: common/constants/messages.py:161 msgid "Failed to connect" msgstr "Sikertelen kapcsolódás" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:163 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is " "running" msgstr "" "Kérjük, indítsa újra az alkalmazást, ha Ön superuser és a Timekpr-nExT fut" #: common/constants/messages.py:164 msgid "Started" msgstr "Elindítva" #: common/constants/messages.py:165 msgid "User configuration retrieved" msgstr "A felhasználó konfigurációja betöltve" #: common/constants/messages.py:166 msgid "Configuration retrieved" msgstr "A konfiguráció betöltve" #: common/constants/messages.py:167 msgid "Track inactive for user has been processed" msgstr "A felhasználói inaktivitás követését feldolgozták" #: common/constants/messages.py:168 msgid "Hide tray icon for user has been processed" msgstr "A felhasználó tálcaikonjának elrejtése feldolgozásra került" #: common/constants/messages.py:169 #, fuzzy msgid "Restriction / lockout type for user has been processed" msgstr "A felhasználó korlátozásának / zárolásának típusa feldolgozásra került" #: common/constants/messages.py:170 msgid "Additional time for user has been processed" msgstr "A felhasználói többletidÅ‘t feldolgozták" #: common/constants/messages.py:171 #, fuzzy #| msgid "Additional time for user has been processed" msgid "Additional PlayTime for user has been processed" msgstr "A felhasználói többletidÅ‘t feldolgozták" #: common/constants/messages.py:172 msgid "Weekly and monthly limits for user have been processed" msgstr "A felhasználói heti és havi idÅ‘korlátokat feldolgozták" #: common/constants/messages.py:173 msgid "Allowed days for user have been processed" msgstr "Az felhasználónak engedélyezett napokat feldolgozták" #: common/constants/messages.py:174 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "Day time limits for user have been processed" msgstr "A felhasználó napi idÅ‘korlátjait feldolgozták" #: common/constants/messages.py:175 msgid "Allowed hours for user have been processed" msgstr "Az felhasználónak engedélyezett órákat feldolgozták" #: common/constants/messages.py:176 msgid "Timekpr-nExT configuration has been saved" msgstr "A Timekpr-nExT konfigurációját elmentették" #: common/constants/messages.py:177 #, fuzzy #| msgid "==> set time limit per week, example" msgid "User time limits have been saved" msgstr "==> heti idÅ‘korlát beállítása, példa" #: common/constants/messages.py:178 #, fuzzy #| msgid "Time limit for the week is enabled" msgid "User PlayTime limits have been saved" msgstr "A heti idÅ‘korlát be van kapcsolva" #: common/constants/messages.py:179 #, fuzzy #| msgid "Additional time for user has been processed" msgid "User additional options have been saved" msgstr "A felhasználói többletidÅ‘t feldolgozták" #: common/constants/messages.py:180 #, fuzzy #| msgid "Additional time for user has been processed" msgid "Enable PlayTime for the user has been processed" msgstr "A felhasználói többletidÅ‘t feldolgozták" #: common/constants/messages.py:181 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "PlayTime override flag for the user has been processed" msgstr "A felhasználó napi idÅ‘korlátjait feldolgozták" #: common/constants/messages.py:182 #, fuzzy #| msgid "Track inactive for user has been processed" msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "A felhasználói inaktivitás követését feldolgozták" #: common/constants/messages.py:183 #, fuzzy #| msgid "Allowed days for user have been processed" msgid "PlayTime allowed days for user have been processed" msgstr "Az felhasználónak engedélyezett napokat feldolgozták" #: common/constants/messages.py:184 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "PlayTime day limits for user have been processed" msgstr "A felhasználó napi idÅ‘korlátjait feldolgozták" #: common/constants/messages.py:185 #, fuzzy #| msgid "Time limits for days for user have been processed" msgid "PlayTime activities for user have been processed" msgstr "A felhasználó napi idÅ‘korlátjait feldolgozták" #: common/constants/messages.py:186 msgid "Please select a day to set the limits" msgstr "Kérjük, válasszon egy napot a korlátok beállításához" #: common/constants/messages.py:187 msgid "That interval overlaps with an existing one" msgstr "Az idÅ‘köz átfedésben vagy egy már létezÅ‘vel" #: common/constants/messages.py:188 msgid "That interval's start conflicts with an existing one" msgstr "Az idÅ‘köz kezdete ütközik egy már létezÅ‘vel" #: common/constants/messages.py:189 msgid "That interval's end conflicts with an existing one" msgstr "Az idÅ‘köz befejezése ütközik egy már létezÅ‘vel" #: common/constants/messages.py:190 msgid "That interval's start or end duplicates an existing one" msgstr "Az idÅ‘köz kezdete vagy befejezése megkettÅ‘z egy már létezÅ‘ idÅ‘közt" #: common/constants/messages.py:191 msgid "Interval start cannot be the same as end" msgstr "Az idÅ‘köz kezdete nem lehet azonos a befejezésével" #: common/constants/messages.py:192 #, fuzzy #| msgid "Interval start cannot be the same as end" msgid "Interval's start cannot be later than end" msgstr "Az idÅ‘köz kezdete nem lehet azonos a befejezésével" #: common/constants/messages.py:193 msgid "Please select an hour interval to remove" msgstr "Kérjük, válasszon egy eltávolítandó óra-idÅ‘közt" #: common/constants/messages.py:194 msgid "Interval removed" msgstr "Az idÅ‘köz eltávolítva" #: common/constants/messages.py:195 msgid "Timekpr-nExT interface is not yet ready" msgstr "A Timekpr-nExT interfész még nem áll készen" #: common/constants/messages.py:198 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, " "but no displays are available, thus running in CLI..." msgstr "" "Figyelmeztetés: A Timekpr-nExT adminisztrációs eszközt GUI üzemmódban " "kellene elindítani, de a grafikus megjelenítés nem elérhetÅ‘. Ezért CLI " "üzemmódban fog elindulni." #: common/constants/messages.py:199 msgid "The command is incorrect:" msgstr "A parancs nem megfelelÅ‘:" #: common/constants/messages.py:200 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "A Timekpr-nExT admin klienst a következÅ‘képpen kell használni:" #: common/constants/messages.py:201 msgid "---=== NOTICE ===---" msgstr "---=== ÉRTESÃ�TÉS ===---" #: common/constants/messages.py:202 msgid "numeric time values are in seconds" msgstr "a numerikus időértékek másodpercben vannak megadva" #: common/constants/messages.py:203 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "a hétköznapokat az ISO 8601 szerint számozzuk (azaz hétfÅ‘ az elsÅ‘ nap, " "formátum: 1-7)" #: common/constants/messages.py:204 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "az órákat az ISO 8601 szerint számozzuk (azaz 24 órás óra, formátum: 0–23)" #: common/constants/messages.py:206 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "Összesen %(n)s felhasználó:" msgstr[1] "Összesen %(n)s felhasználó:" #: common/constants/messages.py:207 #, fuzzy, python-format #| msgid "Config for %s:" msgid "Configuration for user %s:" msgstr "%s konfigurációja:" #: common/constants/messages.py:210 msgid "Time left..." msgstr "Fennmaradó idÅ‘..." #: common/constants/messages.py:211 msgid "Limits & Configuration" msgstr "Korlátok & konfiguráció" #: common/constants/messages.py:212 msgid "About" msgstr "Névjegy" #: common/constants/messages.py:215 resource/client/forms/about.glade:17 msgid "Keep control of computer usage" msgstr "Felügyelje a számítógép-használatot" #: common/constants/messages.py:216 msgid "Day" msgstr "Nap" #: common/constants/messages.py:217 msgid "Enabled" msgstr "Engedélyezve" #: common/constants/messages.py:218 common/constants/messages.py:224 msgid "Limit" msgstr "Korlát" #: common/constants/messages.py:219 msgid "From" msgstr "Kezdett" #: common/constants/messages.py:220 #, fuzzy #| msgid "from" msgid "from..." msgstr "ettÅ‘l" #: common/constants/messages.py:221 msgid "To" msgstr "Befejezés" #: common/constants/messages.py:222 msgid "to..." msgstr "" #: common/constants/messages.py:223 msgid "Period" msgstr "" #: common/constants/messages.py:225 msgid "Weekly" msgstr "" #: common/constants/messages.py:226 msgid "Monthly" msgstr "" #: common/constants/messages.py:227 common/constants/messages.py:229 msgid "Session type" msgstr "Munkamenettípus" #: common/constants/messages.py:228 common/constants/messages.py:230 #, fuzzy #| msgid "Session type" msgid "session type..." msgstr "Munkamenettípus" #: common/constants/messages.py:231 msgid "Username" msgstr "Felhasználónév" #: common/constants/messages.py:232 #, fuzzy #| msgid "Username" msgid "username..." msgstr "Felhasználónév" #: common/constants/messages.py:233 msgid "Process mask" msgstr "" #: common/constants/messages.py:234 msgid "executable mask..." msgstr "" #: common/constants/messages.py:235 msgid "Process description" msgstr "" #: common/constants/messages.py:236 msgid "process description..." msgstr "" #: common/constants/messages.py:237 msgid "Time" msgstr "" #: common/constants/messages.py:238 msgid "time..." msgstr "" #: common/constants/messages.py:239 msgid "Importance" msgstr "" #: common/constants/messages.py:240 msgid "importance..." msgstr "" #: common/constants/messages.py:243 msgid "Timekpr-nExT notification" msgstr "Timekpr-nExT jelzés" #: common/constants/messages.py:244 #, fuzzy #| msgid "Timekpr-nExT notification" msgid "Timekpr-nExT PlayTime notification" msgstr "Timekpr-nExT jelzés" #: common/constants/messages.py:245 msgid "Your time is not limited today" msgstr "Mára nincsen idÅ‘korlátod" #: common/constants/messages.py:246 msgid "Time allowance has changed, please note new time left!" msgstr "Az engedélyezett idÅ‘t megváltoztatták, az új idÅ‘t vegye figyelembe!" #: common/constants/messages.py:247 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "Az idÅ‘korlát konfigurációját megváltoztatták, az új konfigurációt vegye " "figyelembe!" #: common/constants/messages.py:248 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Nem lehet a Timekpr-nExT szolgáltatáshoz kapcsolódni (%%s)!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Nem lehet a Timekpr-nExT-tel kommunikálni (%%s)!" #: common/constants/messages.py:250 #, fuzzy, python-format #| msgid "Icon inititalization error (%%s)!" msgid "Icon initialization error (%%s)!" msgstr "Hiba az ikon inicializálásakor (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:252 msgid "Your time is up, you will be forcibly logged out in" msgstr "Az ideje lejárt, akkor erÅ‘szakkal be lesz jelentkezve" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:254 #, fuzzy msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Lejárt az ideje, a számítógépet erÅ‘szakkal leállítják" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:256 #, fuzzy msgid "Your time is up, your session will be forcibly locked in" msgstr "Lejárt az ideje, a munkamenetet erÅ‘szakkal bezárják" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:258 #, fuzzy msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Lejárt az ideje, számítógépét erÅ‘szakosan felfüggesztjük" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:260 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s másodperc múlva ki lesz léptetve" msgstr[1] "%(n)s másodperc múlva ki lesz léptetve" #: common/constants/messages.py:261 msgid "Internal connection error, please check log files" msgstr "BelsÅ‘ kapcsolati hiba, további információk a naplófájlokban található" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:263 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Még %(n)s óra" msgstr[1] "Még %(n)s óra" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:265 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s perc" msgstr[1] "%(n)s perc" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:267 common/constants/messages.py:269 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s másodperc van hátra" msgstr[1] "%(n)s másodperc van hátra" #: common/constants/messages.py:269 #, fuzzy, python-format #| msgid "%(n)s second left" #| msgid_plural "%(n)s seconds left" msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s másodperc van hátra" msgstr[1] "%(n)s másodperc van hátra" #: common/constants/messages.py:270 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "A tétlen idÅ‘ észlelésére szolgáló \"%%s\" szolgáltatás nem engedélyezhetÅ‘!\n" "Lehet, hogy a tétlen / inaktív idÅ‘t nem veszik figyelembe, amikor a képernyÅ‘ " "le van zárva!" #: common/constants/messages.py:273 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "Váratlan hiba: %%s" #: common/constants/messages.py:274 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "PARAMÉTER ELEMZÉSI HIBA (kérjük, ellenÅ‘rizze a paraméter érvényességét): %%s" #: common/constants/messages.py:275 msgid "Command FAILED: access denied" msgstr "A parancs meghiúsult: hozzáférés megtagadva" #: common/constants/messages.py:276 msgid "Command FAILED: communication was not accepted" msgstr "A parancs meghiúsult: a kommunikációt nem fogadták" #: common/constants/messages.py:277 msgid "n/a" msgstr "nem elérhetÅ‘" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Timekpr-nExT névjegy" #: resource/client/forms/about.glade:16 msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" msgstr "Copyright (c) 2018-2021 Eduards Bezverhijs" #: resource/client/forms/about.glade:19 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:20 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation, either version 3 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see " "file /usr/share/common-licenses/GPL-3" msgstr "" "Ez a program szabad szoftver; terjeszthetÅ‘ illetve módosítható a Free " "Software Foundation által kiadott GNU General Public License dokumentumában " "leírtak; akár a licenc 3-as, akár (tetszÅ‘leges) késÅ‘bbi változata szerint.\n" "\n" "Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de " "minden egyéb GARANCIA NÉLKÜL, az ELADHATÓSÃ�GRA vagy VALAMELY CÉLRA VALÓ " "ALKALMAZHATÓSÃ�GRA való származtatott garanciát is beleértve. További " "részleteket a GNU General Public License tartalmaz.\n" "\n" "A felhasználónak a programmal együtt meg kell kapnia a GNU General Public " "License egy példányát; ha mégsem kapta meg, akkor az megtalálható a címen. Debian disztribúcióban lásd a /usr/share/" "common-licenses/GPL-3 fájlt" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:26 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "rolkovit+ubuntu@gmail.com" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Kizárt munkamenet-típusok eltávolítása" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Timekpr-nExT adminisztráció" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Ez egy ikon, ugye?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Megjegyzések, figyelmesen olvasni :)" #: resource/client/forms/admin.glade:435 #, fuzzy #| msgid "" #| "This is the configuration app for Timekpr-nExT. It allows you to set time " #| "limits for your individual users as well as general Timekpr-nExT " #| "options.\n" #| "\n" #| "To use this application, you either have to execute it as superuser or " #| "have to be part of the timekpr group.\n" #| "Please note that the \"Timekpr-nExT Configuration\" is available in " #| "superuser (administrator) mode only!\n" #| "\n" #| "Please configure carefully: do not lock yourself out!" msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have " "to be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in " "superuser (administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Ez a Timekpr-nExT konfigurációs app. Beállíthatjuk vele a felhasználóink " "idejét, valamint a Timekpr-nExT paramétereket.\n" "\n" "Az app futtatása superuser-ként vagy a timekpr csoport tagjaként " "lehetséges.\n" "A \"Timekpr-nExT konfiguráció\" csak superuser (adminisztrátor) üzemmódban " "lehetséges.\n" "\n" "A konfiguráció során legyünk óvatosak, nehogy kizárjuk magunkat!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3016 msgid "Users related configuration" msgstr "Felhasználói beállítások" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Felhasználónév:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "A rendszerben regisztrált felhasználók listája" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Visszaállítás" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "A beállítások visszaállítása egy mentett állapotból" #: resource/client/forms/admin.glade:586 #, fuzzy #| msgid "This shows information about time left / spent" msgid "Information about time left / spent" msgstr "Ez megmutatja a hátralévÅ‘ / eltöltött idÅ‘t" #: resource/client/forms/admin.glade:610 #, fuzzy msgid "" "Continuous time left. May span more than the current day (realtime, " "available when user is logged in)" msgstr "" "A felhasználó számára fenntartott folyamatos idÅ‘, amely meghaladhatja az " "aktuális napot (valós idÅ‘, elérhetÅ‘, amikor a felhasználó be van jelentkezve)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "HátralévÅ‘ idÅ‘ (tényleges):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 #: resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 #: resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 #: resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 #: resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 #: resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Formátum: " #: resource/client/forms/admin.glade:641 #, fuzzy msgid "" "How long the user was inactive since last login (realtime, available when " "user is logged in)" msgstr "" "Meddig volt inaktív a felhasználó a legutóbbi bejelentkezés óta (valós " "idejű, elérhetÅ‘, amikor a felhasználó be van jelentkezve)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "HátralévÅ‘ idÅ‘ (tényleges):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Ma elérhetÅ‘ idÅ‘ (mentett kijelentve, nem valósidejű)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Még hátralévÅ‘ idÅ‘ (ma):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Mai napon felhasznált idÅ‘ (tárolt állapot, nem valós idejű)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Felhasznált idÅ‘ (ma):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "A héten felhasznált idÅ‘ (mentett állapot, nem valós idejű)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Felhasznált idÅ‘ (hét):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Ebben a hónapban felhasznált idÅ‘ (mentett állapot, nem valós idejű)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Felhasznált idÅ‘ (hónap):" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "" #: resource/client/forms/admin.glade:885 #, fuzzy #| msgid "Set day's time limit" msgid "today's time" msgstr "Napi idÅ‘korlát meghatározása" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "óra" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "A mai napi idÅ‘korláthoz beállítandó percek" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "A mai napi idÅ‘korláthoz beállítandó órák" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "perc" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Megadott mennyiség hozzáadása (jutalom)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Megadott mennyiség levonása (büntetés)" #: resource/client/forms/admin.glade:1036 #, fuzzy #| msgid "Set this specific limit" msgid "Set this specific time limit" msgstr "Pontosan megadott idÅ‘korlát beállítása" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "" #: resource/client/forms/admin.glade:1134 #, fuzzy #| msgid "" #| "How long user was inactive since last login (realtime, available when " #| "user is logged in)" msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Meddig volt inaktív a felhasználó a legutóbbi bejelentkezés óta (valós " "idejű, elérhetÅ‘, amikor a felhasználó be van jelentkezve)" #: resource/client/forms/admin.glade:1136 #, fuzzy #| msgid "Time left (actual):" msgid "PlayTime left (actual):" msgstr "HátralévÅ‘ idÅ‘ (tényleges):" #: resource/client/forms/admin.glade:1150 #: resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 #, fuzzy #| msgid "Format: " msgid "Format: " msgstr "Formátum: " #: resource/client/forms/admin.glade:1165 #, fuzzy #| msgid "Time available today (saved stated, not real-time)" msgid "PlayTime available today (saved stated, not real-time)" msgstr "Ma elérhetÅ‘ idÅ‘ (mentett kijelentve, nem valósidejű)" #: resource/client/forms/admin.glade:1167 #, fuzzy #| msgid "Time left (today):" msgid "PlayTime left (today):" msgstr "Még hátralévÅ‘ idÅ‘ (ma):" #: resource/client/forms/admin.glade:1196 #: resource/client/forms/admin.glade:1212 #, fuzzy #| msgid "" #| "How long user was inactive since last login (realtime, available when " #| "user is logged in)" msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Meddig volt inaktív a felhasználó a legutóbbi bejelentkezés óta (valós " "idejű, elérhetÅ‘, amikor a felhasználó be van jelentkezve)" #: resource/client/forms/admin.glade:1198 #, fuzzy #| msgid "Time inactive (actual):" msgid "Running activities (actual):" msgstr "HátralévÅ‘ idÅ‘ (tényleges):" #: resource/client/forms/admin.glade:1253 #, fuzzy #| msgid "Time spent today (saved stated, not real-time)" msgid "PlayTime spent today (saved stated, not real-time)" msgstr "Mai napon felhasznált idÅ‘ (tárolt állapot, nem valós idejű)" #: resource/client/forms/admin.glade:1255 #, fuzzy #| msgid "Time spent (today):" msgid "PlayTime spent (today):" msgstr "Felhasznált idÅ‘ (ma):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "Rövid összefoglaló a mai napon felhasznált idÅ‘rÅ‘l és az idÅ‘kezelésrÅ‘l" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Infó & ma" #: resource/client/forms/admin.glade:1348 #, fuzzy msgid "This lets you configure time limits." msgstr "Ez lehetÅ‘vé teszi a mai határidÅ‘k megváltoztatását" #: resource/client/forms/admin.glade:1350 #, fuzzy #| msgid "Weekly & Monthly limits" msgid "Week day limits" msgstr "Heti & havi idÅ‘korlátok" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 #: resource/client/forms/admin.glade:1865 #: resource/client/forms/admin.glade:2265 #, fuzzy #| msgid "hr" msgid "h" msgstr "óra" #: resource/client/forms/admin.glade:1374 #: resource/client/forms/admin.glade:2269 #, fuzzy #| msgid "The amount of hours to be adjusted for today's limit" msgid "Choose hours to be adjusted for selected days." msgstr "A mai napi idÅ‘korláthoz beállítandó órák" #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 #: resource/client/forms/admin.glade:1881 #: resource/client/forms/admin.glade:2281 msgid "m" msgstr "" #: resource/client/forms/admin.glade:1390 #: resource/client/forms/admin.glade:2285 #, fuzzy #| msgid "The amount of minutes to be adjusted for today's limit" msgid "Choose minutes to be adjusted for selected days." msgstr "A mai napi idÅ‘korláthoz beállítandó percek" #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:1474 #, fuzzy #| msgid "" #| "Lists day of the week and additional information about the day's limit. " #| "Please enable / disable days for the user." msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "A hét napjainak listája és információ a napi idÅ‘korlátokról, felhasználó " "napjainak engedélyezése / tiltása." #: resource/client/forms/admin.glade:1550 #, fuzzy #| msgid "" #| "Hour intervals per day available to this user.\n" #| "Please note that if the day's limit ends at 24:00 and the next day's " #| "limit starts at 00:00, then the user can work continuously past " #| "midnight.\n" #| "Please note that multiple intervals cannot be configured within the same " #| "hour. An interval can start or end or contain a specific hour, but not " #| "more than once. This is by design, not a bug." msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same " "hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Felhasználónak rendelkezésére álló napi óra idÅ‘keret.\n" "Megjegyzés: ha egy nap a 24. órában véget és a következÅ‘ nap a 0. órával " "megkezdÅ‘dik, akkor a felhasználható idÅ‘ átnyúlik az éjfélen.\n" "Megjegyzés: egy órán belül nem lehet több intervallumot beállítani. " "Kizárólag egy idÅ‘intervallum eleje és vége lehet ugyanazon az órában (ez " "szándékolt, nem hiba)" #: resource/client/forms/admin.glade:1581 msgid "Hour intervals" msgstr "Óra idÅ‘közök" #: resource/client/forms/admin.glade:1603 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" #: resource/client/forms/admin.glade:1620 msgid "Delete the selected time interval from the available list of intervals." msgstr "" #: resource/client/forms/admin.glade:1688 #, fuzzy #| msgid "Hour intervals" msgid "enter hour intervals" msgstr "Óra idÅ‘közök" #: resource/client/forms/admin.glade:1742 msgid "verify" msgstr "" #: resource/client/forms/admin.glade:1746 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" #: resource/client/forms/admin.glade:1821 #, fuzzy #| msgid "Weekly & Monthly limits" msgid "Weekly and monthly limits" msgstr "Heti & havi idÅ‘korlátok" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1849 msgid "d" msgstr "" #: resource/client/forms/admin.glade:1853 msgid "Choose days to be adjusted for selected period." msgstr "" #: resource/client/forms/admin.glade:1869 #, fuzzy #| msgid "The amount of hours to be adjusted for today's limit" msgid "Choose hours to be adjusted for selected period." msgstr "A mai napi idÅ‘korláthoz beállítandó órák" #: resource/client/forms/admin.glade:1885 #, fuzzy #| msgid "The amount of minutes to be adjusted for today's limit" msgid "Choose minutes to be adjusted for selected period." msgstr "A mai napi idÅ‘korláthoz beállítandó percek" #: resource/client/forms/admin.glade:1913 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or " "hours or minutes) for the selected period." msgstr "" #: resource/client/forms/admin.glade:1927 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or " "hours or minutes) for the selected period." msgstr "" #: resource/client/forms/admin.glade:1976 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit " "configuration." msgstr "" #: resource/client/forms/admin.glade:2016 msgid "Apply daily limits" msgstr "Napi korlátok alkalmazása" #: resource/client/forms/admin.glade:2021 #, fuzzy #| msgid "Apply all changes made in this page" msgid "Apply limit all changes made in this page" msgstr "Az ezen a lapon eszközölt összes változtatás alkalmazása" #: resource/client/forms/admin.glade:2042 msgid "Daily limit configuration for all week days" msgstr "Napi korlát beállítása az összes munkanapra" #: resource/client/forms/admin.glade:2043 #, fuzzy #| msgid "Limits & Configuration" msgid "Limit configuration" msgstr "Korlátok & konfiguráció" #: resource/client/forms/admin.glade:2064 msgid "Settings for PlayTime activities" msgstr "" #: resource/client/forms/admin.glade:2084 msgid "PlayTime options" msgstr "" #: resource/client/forms/admin.glade:2108 #: resource/client/forms/admin.glade:2147 msgid "Enable PlayTime for selected user" msgstr "" #: resource/client/forms/admin.glade:2110 msgid "Enable PlayTime:" msgstr "" #: resource/client/forms/admin.glade:2124 #: resource/client/forms/admin.glade:2161 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" #: resource/client/forms/admin.glade:2132 msgid "Enable PlayTime override:" msgstr "" #: resource/client/forms/admin.glade:2180 #: resource/client/forms/admin.glade:2201 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted " "(\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted " "towards PlayTime limits, otherwise applications in PlayTime activity list " "will be terminated as soon as they are started during unaccounted (\"∞\") " "time intervals." msgstr "" #: resource/client/forms/admin.glade:2186 msgid "Allowed during \"∞\" intervals:" msgstr "" #: resource/client/forms/admin.glade:2245 #, fuzzy msgid "This lets you configure PlayTime limits." msgstr "Ez lehetÅ‘vé teszi a mai határidÅ‘k megváltoztatását" #: resource/client/forms/admin.glade:2247 #: resource/client/forms/client.glade:1253 #, fuzzy #| msgid "Daily limits" msgid "PlayTime limits" msgstr "Napi korlátok" #: resource/client/forms/admin.glade:2305 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) " "for selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:2322 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) " "for selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" #: resource/client/forms/admin.glade:2374 #, fuzzy #| msgid "" #| "Lists day of the week and additional information about the day's limit. " #| "Please enable / disable days for the user." msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for " "PlayTime activities." msgstr "" "A hét napjainak listája és információ a napi idÅ‘korlátokról, felhasználó " "napjainak engedélyezése / tiltása." #: resource/client/forms/admin.glade:2423 #, fuzzy #| msgid "Time inactive:" msgid "PlayTime activities" msgstr "Inaktív idÅ‘:" #: resource/client/forms/admin.glade:2445 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity " "list directly." msgstr "" #: resource/client/forms/admin.glade:2462 msgid "Remove selected entry from PlayTime activities." msgstr "" #: resource/client/forms/admin.glade:2506 msgid "" "Please specify a list of full process (executable) names without path as " "case sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" #: resource/client/forms/admin.glade:2546 #, fuzzy #| msgid "Users related configuration" msgid "Apply PlayTime configuration" msgstr "Felhasználói beállítások" #: resource/client/forms/admin.glade:2550 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" #: resource/client/forms/admin.glade:2569 #, fuzzy #| msgid "Timekpr-nExT Configuration" msgid "PlayTime configuration" msgstr "Timekpr-nExT beállítások" #: resource/client/forms/admin.glade:2594 #, fuzzy msgid "Additional configuration options" msgstr "További konfigurációs lehetÅ‘ségek" #: resource/client/forms/admin.glade:2629 #: resource/client/forms/admin.glade:2652 #, fuzzy #| msgid "" #| "Select whether inactive session time is counted. If this is unchecked, " #| "time spent in console (not terminal emulator) login sessions and while " #| "the screen is locked is NOT taken into account. This varies among desktop " #| "environments." msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This " "varies among desktop environments." msgstr "" "Válasszuk ki, hogy az inaktív munkamenetek ideje számít-e. Ha nincsen " "kiválasztva, akkor a zárolt képernyÅ‘ alatt a konzolban (nem egy terminálban) " "töltött idÅ‘ nem lesz figyelembe véve (ez asztali környezetenként nagy " "mértékben eltérhet)" #: resource/client/forms/admin.glade:2633 msgid "Track inactive sessions:" msgstr "Inaktív munkamenetek követése:" #: resource/client/forms/admin.glade:2669 #: resource/client/forms/admin.glade:2692 #, fuzzy msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that unchecking this will disable showing all information and " "notifications to the user!" msgstr "" "Válassza ki, hogy megjelenjen-e a lakat ikon és az értesítések a felhasználó " "számára.\n" "Felhívjuk figyelmét, hogy ez letiltja az összes információ és értesítés " "megjelenítését a felhasználó számára!" #: resource/client/forms/admin.glade:2673 msgid "Hide icon and notifications:" msgstr "Ikon és értesítések elrejtése:" #: resource/client/forms/admin.glade:2744 #, fuzzy msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Válasszon egy korlátozási / zárolási típust a felhasználó számára.\n" "MEGJEGYZÉS: kérjük, legyen nagyon körültekintÅ‘, gondolkodjon elÅ‘re és " "olvassa el az összes opció leírását, amikor megváltoztatja ezt a beállítást " "az alapértelmezett értékrÅ‘l!" #: resource/client/forms/admin.glade:2748 #, fuzzy msgid "Restriction / lockout type:" msgstr "Korlátozás / zárolás típusa:" #: resource/client/forms/admin.glade:2770 #, fuzzy msgid "terminate sessions" msgstr "szekciók befejezése" #: resource/client/forms/admin.glade:2774 #, fuzzy msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Az idÅ‘ lejártakor a felhasználói munkamenetek befejezÅ‘dnek.\n" "Ez az opció korlátozás!\n" "Ez az alapértelmezett opció, és valószínűleg ez az, amelyre szüksége van!" #: resource/client/forms/admin.glade:2792 #, fuzzy msgid "shutdown computer" msgstr "leállított számítógép" #: resource/client/forms/admin.glade:2796 #, fuzzy msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Ha lejár az idÅ‘, a számítógép leáll.\n" "Ez az opció korlátozás!\n" "Kérjük, értékelje, hogy szüksége van-e ilyen típusú korlátozásra!" #: resource/client/forms/admin.glade:2814 #, fuzzy msgid "suspend computer" msgstr "függessze fel a számítógépet" #: resource/client/forms/admin.glade:2818 #, fuzzy msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control " "purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be " "locked and put to sleep again after some time." msgstr "" "Ha lejár az idÅ‘, a számítógépet felfüggesztik (elalszik).\n" "Ez az opció nem korlátozás, és inkább önkontroll célokra alkalmas.\n" "Amikor felébred, amikor még nincs idÅ‘, a számítógép képernyÅ‘je zárolva lesz, " "és egy idÅ‘ után újra elalszik." #: resource/client/forms/admin.glade:2836 #, fuzzy msgid "suspend / wakeup computer" msgstr "felfüggesztés / ébresztés számítógép" #: resource/client/forms/admin.glade:2840 #, fuzzy msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken " "up at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control " "purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be " "locked and put to sleep again after some time." msgstr "" "Az idÅ‘ lejártával a számítógépet felfüggesztik (elalszik), és felébresztik a " "felhasználó számára elérhetÅ‘ következÅ‘ idÅ‘intervallum elején.\n" "Ez az opció nem korlátozás, és inkább önkontroll célokra alkalmas.\n" "Amikor felébred, amikor még nincs idÅ‘, a számítógép képernyÅ‘je zárolva lesz, " "és egy idÅ‘ után újra elalszik." #: resource/client/forms/admin.glade:2858 #, fuzzy msgid "lock screen" msgstr "zár képernyÅ‘n" #: resource/client/forms/admin.glade:2862 #, fuzzy msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control " "purposes." msgstr "" "Az idÅ‘ lejártakor a számítógép képernyÅ‘je zárolva lesz.\n" "Ez az opció nem korlátozás, és inkább önkontroll célokra alkalmas." #: resource/client/forms/admin.glade:2893 #, fuzzy msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" "Válassza ki azt az idÅ‘intervallumot, amikor a számítógép automatikusan " "felébreszthetÅ‘.\n" "Felhívjuk figyelmét, hogy ez az opció csak akkor hatékony, ha a RealTime " "Clock felébresztést támogatja és engedélyezi a BIOS / UEFI!" #: resource/client/forms/admin.glade:2897 #, fuzzy msgid "Wakeup hour interval:" msgstr "Ébresztési idÅ‘intervallum:" #: resource/client/forms/admin.glade:2909 #, fuzzy msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" "Adja meg az automatikus ébresztés kezdési óráját.\n" "Felhívjuk figyelmét, hogy ez az opció csak akkor hatékony, ha a RealTime " "Clock felébresztést támogatja és engedélyezi a BIOS / UEFI!" #: resource/client/forms/admin.glade:2928 #, fuzzy msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock " "is supported and enabled in BIOS / UEFI!" msgstr "" "Adja meg a záró órát az automatikus ébresztés funkcióhoz.\n" "Felhívjuk figyelmét, hogy ez az opció csak akkor hatékony, ha a RealTime " "Clock felébresztést támogatja és engedélyezi a BIOS / UEFI!" #: resource/client/forms/admin.glade:2966 #, fuzzy #| msgid "Configuration" msgid "Apply configuration" msgstr "Beállítások" #: resource/client/forms/admin.glade:2970 #, fuzzy msgid "Apply additional configuration changes on this page" msgstr "További konfigurációs lehetÅ‘ségek" #: resource/client/forms/admin.glade:2989 #, fuzzy msgid "Additional configuration" msgstr "További konfiguráció" #: resource/client/forms/admin.glade:2990 #: resource/client/forms/admin.glade:3661 #, fuzzy msgid "Additional options" msgstr "További beállítások" #: resource/client/forms/admin.glade:3017 msgid "User Configuration" msgstr "Felhasználói beállítás" #: resource/client/forms/admin.glade:3027 #, fuzzy #| msgid "Timekpr-nExT Configuration" msgid "Timekpr-nExT related configuration" msgstr "Timekpr-nExT beállítások" #: resource/client/forms/admin.glade:3054 msgid "Control Timekpr-nExT Settings" msgstr "A Timekpr-nExT beállítások kezelése" #: resource/client/forms/admin.glade:3081 #: resource/client/forms/admin.glade:3233 #, fuzzy #| msgid "" #| "Timekpr-nExT log level. Please do not change this unless asked. You " #| "likely won't find anything pretty in the log files.\n" #| "1 - standard, 2 - debug, 3 - extra debug" msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "A Timekpr-nExT naplózási szinje. Csak kérés esetén változtassuk " "(valószínűleg semmi hasznos nem található a naplófájlokban)\n" "1 - standard, 2 - debug, 3 - extra debug" #: resource/client/forms/admin.glade:3101 #: resource/client/forms/admin.glade:3149 #, fuzzy #| msgid "" #| "Specify session polling time granularity (how often user sessions and " #| "activity are checked).\n" #| "3 - 5 seconds are optimal, don't change this if unsure." msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "A munkamenet lekérdezésének idÅ‘köze (amilyen idÅ‘közönként a felhasználói " "munkamenetet és az aktivitási állapotokat lekérdezzük)\n" "3-5 másodperc az optimális, ne változtassuk, ha nem vagyunk biztosak." #: resource/client/forms/admin.glade:3105 msgid "Poll interval" msgstr "Lekérdezési intervallum" #: resource/client/forms/admin.glade:3117 #: resource/client/forms/admin.glade:3220 #, fuzzy #| msgid "" #| "Specify the time in seconds when Timekpr-nExT starts continuous real-time " #| "countdown before terminating the session" msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "A Timekpr-nExT munkamenet lezárása elÅ‘tti, valós idejű visszaszámlálásának " "idÅ‘tartama másodpercekben" #: resource/client/forms/admin.glade:3133 #: resource/client/forms/admin.glade:3183 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a " "frequency at which user state is saved to disk for permanent storage." msgstr "" #: resource/client/forms/admin.glade:3137 msgid "Save time" msgstr "IdÅ‘ mentése" #: resource/client/forms/admin.glade:3167 #: resource/client/forms/admin.glade:3202 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can " "be done to prevent it." msgstr "" #: resource/client/forms/admin.glade:3171 msgid "Termination time" msgstr "Befejezés ideje" #: resource/client/forms/admin.glade:3222 #, fuzzy #| msgid "Termination time" msgid "Countdown time" msgstr "Befejezés ideje" #: resource/client/forms/admin.glade:3239 msgid "Log level" msgstr "Naplózási szint" #: resource/client/forms/admin.glade:3250 #: resource/client/forms/admin.glade:3266 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user " "in client application!" msgstr "" #: resource/client/forms/admin.glade:3254 #, fuzzy #| msgid "Show all notifications" msgid "Final notification" msgstr "Összes értesítés megjelenítése" #: resource/client/forms/admin.glade:3308 msgid "Control Timekpr-nExT tracking items" msgstr "A Timekpr-nExT által felügyelt állapotok kezelése" #: resource/client/forms/admin.glade:3341 msgid "Tracked Sessions" msgstr "Felügyelet munkamenetek" #: resource/client/forms/admin.glade:3364 msgid "Add tracked session type to the list" msgstr "Felügyelt munkamenet-típus hozzáadása a listához" #: resource/client/forms/admin.glade:3379 msgid "Remove tracked session type from the list" msgstr "Felügyelt munkamenet-típus eltávolítása a listáról" #: resource/client/forms/admin.glade:3408 #, fuzzy #| msgid "" #| "List of session types to be tracked.\n" #| "Please, do not change or experiment with this unless you actually (not " #| "wishfully) know what you are doing." msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "FelügyelendÅ‘ munkamenetek típusa.\n" "Ezt lehetÅ‘leg ne változtassa meg, hacsak nem tudja pontosan, mit csinál." #: resource/client/forms/admin.glade:3442 msgid "Excluded Sessions" msgstr "Kizárt munkamenetek" #: resource/client/forms/admin.glade:3465 msgid "Add an excluded session type to the list" msgstr "Kizárt munkamenet típusának hozzáadása a listához" #: resource/client/forms/admin.glade:3480 msgid "Remove an excluded session type from the list" msgstr "Kizárt munkamenet típusának eltávolítása a listából" #: resource/client/forms/admin.glade:3509 #, fuzzy #| msgid "" #| "List of sessions to be excluded from tracking.\n" #| "Please, do not change or experiment with this unless you actually (not " #| "wishfully) know what you are doing." msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "A felügyelet alól kizárt munkamenetek.\n" "Ezt lehetÅ‘leg ne változtassa meg, hacsak nem tudja pontosan, mit csinál." #: resource/client/forms/admin.glade:3543 msgid "Excluded Users" msgstr "Kizárt felhasználók" #: resource/client/forms/admin.glade:3566 msgid "Add a user to the exclusion list" msgstr "Felhasználó hozzáadása a kizárási listához" #: resource/client/forms/admin.glade:3581 msgid "Remove a user from the exclusion list" msgstr "Felhasználó eltávolítása a kizárási listáról" #: resource/client/forms/admin.glade:3610 #, fuzzy #| msgid "" #| "List of users excluded from tracking.\n" #| "Please specify actual usernames, not real names here. For example, " #| "\"jsmith\", not \"John Smith\"." msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, " "\"jsmith\", not \"John Smith\"." msgstr "" "Felügyelet alól kizárt felhasználók.\n" "Valós felhasználóneveket kell megadni, nem való neveket (pl. \"kovacsj\", " "nem \"Kovács János\")" #: resource/client/forms/admin.glade:3688 #: resource/client/forms/admin.glade:3707 #: resource/client/forms/admin.glade:3743 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" #: resource/client/forms/admin.glade:3692 msgid "PlayTime enabled:" msgstr "" #: resource/client/forms/admin.glade:3722 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" #: resource/client/forms/admin.glade:3728 msgid "Enhanced activity monitor:" msgstr "" #: resource/client/forms/admin.glade:3777 #, fuzzy #| msgid "Apply Timekpr-nExT setings" msgid "Apply Timekpr-nExT settings" msgstr "Timekpr-nExT beállítások alkalmazása" #: resource/client/forms/admin.glade:3782 msgid "Apply all Timekpr-nExT settings at once" msgstr "Timekpr-nExT beállítások együttes alkalmazása" #: resource/client/forms/admin.glade:3802 msgid "Timekpr-nExT Administration Configuration" msgstr "Timekpr-nExT adminisztráció beállítása" #: resource/client/forms/admin.glade:3803 msgid "Timekpr-nExT Configuration" msgstr "Timekpr-nExT beállítások" #: resource/client/forms/admin.glade:3832 #: resource/client/forms/admin.glade:3849 msgid "Status of Timekpr-nExT admin client" msgstr "A Timekpr-nExT admin kliens állapota" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 #, fuzzy #| msgid "Configuration" msgid "Information" msgstr "Beállítások" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 #, fuzzy #| msgid "Warning time" msgid "Warning" msgstr "Riasztás idÅ‘zítése" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Timekpr-nExT kliens" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "A Timekpr-nExT kliens állapota" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Összes változtatás mentése" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Az ablak bezárása" #: resource/client/forms/client.glade:297 #: resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "A jelenleg hatásos felhasználónév" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Aktuális statisztikák" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "" "Az ebben a munkamenetben vagy a Timekpr-nExT újraindítása óta felhasznált idÅ‘" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Felhasznált idÅ‘ (munkamenet):" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "" "Inaktív felhasználási idÅ‘ ebben a munkamenetben vagy a Timekpr-nExT " "újraindítása óta" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Inaktív idÅ‘:" #: resource/client/forms/client.glade:469 #, fuzzy msgid "Continuous time left to you. May span more than the current day." msgstr "" "A megszakítások nélkül rendelkezésre álló idÅ‘, mely akár a következÅ‘ napra " "is áthúzódhat." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Megszakítások nélkül rendelkezésre álló idÅ‘:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "A nap végéig fennmaradó idÅ‘" #: resource/client/forms/client.glade:489 #: resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Mai fennmaradó idÅ‘:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "A rendelkezésre álló napok és korlátok" #: resource/client/forms/client.glade:573 #: resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Napok & korlátok" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "IdÅ‘közök" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Napi korlátok" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "További statisztikák" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Ezen a héten felhasznált idÅ‘" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Ebben a hónapban felhasznált idÅ‘" #: resource/client/forms/client.glade:755 #, fuzzy #| msgid "" #| "Select whether inactive session time is counted. If this is unchecked, " #| "time spent in console (not terminal emulator) login sessions and while " #| "the screen is locked is NOT taken into account. This varies among desktop " #| "environments." msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Válasszuk ki, hogy az inaktív munkamenetek ideje számít-e. Ha nincsen " "kiválasztva, akkor a zárolt képernyÅ‘ alatt a konzolban (nem egy terminálban) " "töltött idÅ‘ nem lesz figyelembe véve (ez asztali környezetenként nagy " "mértékben eltérhet)" #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Inaktív idÅ‘ felügyelete:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen " "is locked is NOT taken into account. This varies among desktop environments." msgstr "" "Válasszuk ki, hogy az inaktív munkamenetek ideje számít-e. Ha nincsen " "kiválasztva, akkor a zárolt képernyÅ‘ alatt a konzolban (nem egy terminálban) " "töltött idÅ‘ nem lesz figyelembe véve (ez asztali környezetenként nagy " "mértékben eltérhet)" #: resource/client/forms/client.glade:820 #: resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "További korlátok" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Rendelkezésre álló heti idÅ‘korlát" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "IdÅ‘korlát (hét):" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Rendelkezésre álló havi idÅ‘korlát" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "IdÅ‘korlát (havi):" #: resource/client/forms/client.glade:948 #, fuzzy #| msgid "Current statistics" msgid "Current PlayTime statistics" msgstr "Aktuális statisztikák" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "" #: resource/client/forms/client.glade:998 #, fuzzy #| msgid "Time spent (today):" msgid "Total PlayTime spent today" msgstr "Felhasznált idÅ‘ (ma):" #: resource/client/forms/client.glade:1000 #, fuzzy #| msgid "Time spent (today):" msgid "Time spent today:" msgstr "Felhasznált idÅ‘ (ma):" #: resource/client/forms/client.glade:1027 #: resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" #: resource/client/forms/client.glade:1046 #, fuzzy #| msgid "Time limit (week):" msgid "Time limit override:" msgstr "IdÅ‘korlát (hét):" #: resource/client/forms/client.glade:1060 #: resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "" #: resource/client/forms/client.glade:1086 #: resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "" #: resource/client/forms/client.glade:1148 #, fuzzy #| msgid "These are days and limits that available to You" msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "A rendelkezésre álló napok és korlátok" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open " "until dismissed, however this behaviour highly depends on Desktop " "Environment in use" msgstr "" #: resource/client/forms/client.glade:1324 #, fuzzy msgid "Notification configuration" msgstr "További konfiguráció" #: resource/client/forms/client.glade:1346 #, fuzzy #| msgid "Add tracked session type to the list" msgid "Add new notification threshold to the list" msgstr "Felügyelt munkamenet-típus hozzáadása a listához" #: resource/client/forms/client.glade:1361 #, fuzzy #| msgid "Remove tracked session type from the list" msgid "Remove notification threshold from the list" msgstr "Felügyelt munkamenet-típus eltávolítása a listáról" #: resource/client/forms/client.glade:1410 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open " "until dismissed, however this behaviour highly depends on Desktop " "Environment in use" msgstr "" #: resource/client/forms/client.glade:1442 #, fuzzy #| msgid "Timekpr-nExT Administration Configuration" msgid "PlayTime notification configuration" msgstr "Timekpr-nExT adminisztráció beállítása" #: resource/client/forms/client.glade:1464 msgid "Add new PlayTime notification threshold to the list" msgstr "" #: resource/client/forms/client.glade:1479 #, fuzzy #| msgid "Remove tracked session type from the list" msgid "Remove PlayTime notification threshold from the list" msgstr "Felügyelt munkamenet-típus eltávolítása a listáról" #: resource/client/forms/client.glade:1538 #, fuzzy #| msgid "Show all notifications" msgid "Notifications" msgstr "Összes értesítés megjelenítése" #: resource/client/forms/client.glade:1562 #, fuzzy #| msgid "" #| "Select whether to use speech notifications, if available. You may be able " #| "to make speech notifications available by installing package \"python3-" #| "espeak\"." msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Beszédértesítések használatának beállítása (kiszürkítve, ha nem elérhetÅ‘). A " "működéshez a \"python3-espeak\" vagy \"python3-espeak-ng\" csomagnak " "telepítve kell lennie." #: resource/client/forms/client.glade:1572 msgid "Use speech notifications" msgstr "Beszédértesítések használata" #: resource/client/forms/client.glade:1591 #: resource/client/forms/client.glade:1613 #, fuzzy #| msgid "" #| "This sets the logging level. Please do not change this unless you know " #| "what you're doing." msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Beállítja a naplózási szintet (ne állítsuk, hacsak nem tudjuk, pontosan mit " "is csinálunk)" #: resource/client/forms/client.glade:1617 msgid "Logging level" msgstr "Naplózási szint" #: resource/client/forms/client.glade:1639 msgid "" "Specify whether to show a notification when limit configurations or " "allowance changes" msgstr "" "Annak megjelenítését állíthatjuk be, hogy korlátozások beállításai vagy " "engedélyezések megváltoztak" #: resource/client/forms/client.glade:1647 msgid "Show limit changes" msgstr "Korlátok változásainak kijelzése" #: resource/client/forms/client.glade:1663 #, fuzzy #| msgid "" #| "Specify whether to show all notifications. If unchecked, then only " #| "important ones are shown" msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Összes értesítés megjelenítésének beállítása. Ha nincsen kijelölve, akkor " "csak a fontos lesznek megjelenítve" #: resource/client/forms/client.glade:1673 msgid "Show all notifications" msgstr "Összes értesítés megjelenítése" #: resource/client/forms/client.glade:1689 #, fuzzy #| msgid "" #| "Specify whether to show seconds in notification area. Some desktop " #| "environments, like KDE5, do not support text besides notification icons." msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides " "notification icons." msgstr "" "Másodpercek értesítési sávban történÅ‘ megjelenítésének beállítása (egyes " "asztali környezetek, mint a KDES nem támogatják az értesítési ikonok " "melletti szöveget)" #: resource/client/forms/client.glade:1699 msgid "Show seconds in notification area" msgstr "Másodpercek megjelenítése az értesítési területen" #: resource/client/forms/client.glade:1718 #: resource/client/forms/client.glade:1742 #, fuzzy msgid "" "This sets how long a notification is shown for regular notifications about " "time left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, " "in which case this setting will not have any effect on notification." msgstr "" "Ez beállítja, hogy mennyi ideig jelenjen meg egy értesítés a szokásos " "értesítéseknél a hátralévÅ‘ idÅ‘rÅ‘l és a konfigurációs változásokról.\n" "Az értéket másodpercben kell megadni, a 0 érték azt jelenti, hogy az " "elutasításig látható (nem ajánlott a rendszeres értesítéshez).\n" "Felhívjuk figyelmét, hogy az Ön által használt környezet felülbírálhatja az " "idÅ‘túllépést, ami azt jelenti, hogy ez a beállítás nincs hatással az " "értesítésre." #: resource/client/forms/client.glade:1749 msgid "Notification timeout (sec)" msgstr "Értesítési idÅ‘túllépés (mp)" #: resource/client/forms/client.glade:1774 #: resource/client/forms/client.glade:1799 #, fuzzy msgid "" "This sets how long a notification is shown for \"Critical\" notifications " "about time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, " "in which case this setting will not have any effect on notification." msgstr "" "Ez beállítja, hogy mennyi ideig jelenjen meg egy értesítés a Kritikus " "értesítéseknél a hátralévÅ‘ idÅ‘rÅ‘l (amikor az ikon pirosra vált).\n" "Az értéket másodpercben adják meg, a 0 érték azt jelenti, hogy az " "elutasításig látható.\n" "Felhívjuk figyelmét, hogy az Ön által használt környezet felülbírálhatja az " "idÅ‘túllépést, ami azt jelenti, hogy ez a beállítás nincs hatással az " "értesítésre." #: resource/client/forms/client.glade:1806 msgid "Critical notification timeout (sec)" msgstr "Kritikus értesítési idÅ‘túllépés (mp)" #: resource/client/forms/client.glade:1828 #, fuzzy msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce " "a new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Válassza ki, hogy a \"csengÅ‘\" hangot (rövid értesítési hang) használja-e az " "új értesítés megjelenítéséhez a Timekpr-nExT-tÅ‘l. Ez csak az engedélyezett " "értesítéseknél működik.\n" "Ha a beállítás nem szerkeszthetÅ‘, akkor a környezet nem hirdeti a hangos " "értesítési támogatást...." #: resource/client/forms/client.glade:1840 msgid "Use sound \"bell\" for notifications" msgstr "Használjon hangos az értesítésekhez" #: resource/client/forms/client.glade:1860 msgid "Configuration" msgstr "Beállítások" #, fuzzy #~| msgid "" #~| "Copyright (c) 2018-2020 Eduards Bezverhijs\n" #~| "Super tester: Rinalds Dobelis\n" #~| "Beta tester: SanskritFritz" #~ msgid "" #~ "Copyright (c) 2018-2020 Eduards Bezverhijs\n" #~ "Main test (ex): Rinalds Dobelis\n" #~ "Beta test: SanskritFritz" #~ msgstr "" #~ "Copyright (c) 2018-2020 Eduards Bezverhijs\n" #~ "Super tester: Rinalds Dobelis\n" #~ "Beta tester: SanskritFritz" #~ msgid "00:00:00:00" #~ msgstr "00:00:00:00" #~ msgid "Amount:" #~ msgstr "Mérték:" #~ msgid "Add" #~ msgstr "Hozzáad" #~ msgid "Subtract" #~ msgstr "Levonás" #~ msgid "Set" #~ msgstr "Beállít" #~ msgid "Configure time limits for week days" #~ msgstr "Munkanapok idÅ‘korlátjainak beállítása" #~ msgid "Set the number of hours to limit available time for particular day" #~ msgstr "Adott nap engedélyezett idejének megadása órában" #~ msgid "" #~ "Set hours and minutes at this user's disposal for this particular day. " #~ "Don't forget to hit the button!" #~ msgstr "" #~ "A felhasználó rendelkezésére álló idÅ‘ megadása órában és percben egy " #~ "adott napra (ne felejtsük el az nyomógombbal igazolni)" #~ msgid "Manage intervals for the day" #~ msgstr "Napi idÅ‘intervallumok kezelése" #~ msgid "Specify START minute of the allowed hour interval" #~ msgstr "Az engedélyezett óra idÅ‘intervallum kezdeti percének meghatározása" #~ msgid "Specify START hour of the allowed hour interval" #~ msgstr "Az engedélyezett óra idÅ‘intervallum kezdeti órájának meghatározása" #~ msgid "to" #~ msgstr "eddig" #~ msgid "Remove" #~ msgstr "Eltávolít" #~ msgid "" #~ "Remove selected interval from the list. Do not forget to hit the " #~ "button!" #~ msgstr "" #~ "A kiválasztott idÅ‘intervallum eltávolítása a listából (igazolni kell az " #~ " felülettel)" #~ msgid "" #~ "Add specified hour interval to the list. Do not forget to hit the " #~ "button!" #~ msgstr "" #~ "A megadott óra idÅ‘intervallum hozzáadása a listához (igazolni kell az " #~ " felülettel)" #~ msgid "Specify the END hour of the allowed hour interval" #~ msgstr "Az engedélyezett óra idÅ‘intervallum befejezÅ‘ órájának meghatározása" #~ msgid "Specify the END minute of the allowed hour interval" #~ msgstr "Az engedélyezett óra idÅ‘intervallum befejezÅ‘ percének meghatározása" #~ msgid "Time limit for the month" #~ msgstr "Havi idÅ‘korlát" #~ msgid "Time limit (month)" #~ msgstr "IdÅ‘korlát (hónap)" #~ msgid "Time limit for the month is enabled" #~ msgstr "A havi idÅ‘korlát be van kapcsolva" #~ msgid "Time limit for the week" #~ msgstr "Heti idÅ‘korlát" #~ msgid "Time limit (week)" #~ msgstr "IdÅ‘korlát (hét)" #~ msgid "day" #~ msgstr "nap" #~ msgid "Week limit (days part)" #~ msgstr "Heti idÅ‘korlát (napok)" #~ msgid "Week limit (hours part)" #~ msgstr "Heti idÅ‘korlát (órák)" #~ msgid "Week limit (minutes part)" #~ msgstr "Heti idÅ‘korlát (percek)" #~ msgid "Month limit (days part)" #~ msgstr "Havi idÅ‘korlát (napok)" #~ msgid "Month limit (hours part)" #~ msgstr "Havi idÅ‘korlát (órák)" #~ msgid "Month limit (minutes part)" #~ msgstr "Havi idÅ‘korlát (percek)" #~ msgid "This allows you to set up weekly and monthly limits" #~ msgstr "A heti és havi idÅ‘korlátokat lehet beállítani" #~ msgid "Apply" #~ msgstr "Alkalmaz" #~ msgid "Apply weekly and monthly limits" #~ msgstr "Heti és havi idÅ‘korlátok alkalmazása" #~ msgid "Weekly and monthly limit configuration" #~ msgstr "Heti és havi idÅ‘korlátok beállítása" #~ msgid "Set track inactive sessions" #~ msgstr "Inaktív munkamenetek követésének beállítása" #~ msgid "Set preference for showing icon to user" #~ msgstr "Ã�llítsa be, hogy a felhasználónak milyen ikon jelenjen meg" #, fuzzy #~ msgid "Set restriction / lockout type" #~ msgstr "Ã�llítsa be a korlátozás / zárolás típusát" #~ msgid "This specifies the frequency with which actual user state is saved" #~ msgstr "Meghatározza a tényleges felhasználói állapot mentésének idÅ‘közét" #~ msgid "" #~ "Number of seconds before terminating user sessions. After this is " #~ "reached, the user's session will be terminated / locked, and nothing can " #~ "be done to prevent it.\n" #~ "Adding time does not help in this case. Do that before reaching this " #~ "point..." #~ msgstr "" #~ "A felhasználói munkamenet lezárásáig hátrelévÅ‘ másodpercek. InnentÅ‘l a " #~ "felhasználó kizárását már nem lehet megakadályozni.\n" #~ "Ebben az esetben idÅ‘ hozzáadása már nem segít. Ezt ezelÅ‘tt az idÅ‘pont " #~ "elÅ‘tt kell megtenni..." #~ msgid "Enter session type to be tracked" #~ msgstr "Felügyelt munkamenet-típusok bevitele" #~ msgid "Enter session type to be excluded from tracking" #~ msgstr "Felügyelet alól kizárandó munkamenet típusának bevitele" #~ msgid "Enter username to be excluded from tracking" #~ msgstr "A felügyelet alól kizárandó felhasználók bevitele" #~ msgid "This shows the time periods that are available for your use" #~ msgstr "Rendelkezésre álló idÅ‘intervallumok" #~ msgid "" #~ "==> set time left for the user at current moment, example (add one hour)" #~ msgstr "==> a felhasználó aktuálisan fennmaradó idejének beállítása, példa" #~ msgid "==> set time limits per all allowed days, example" #~ msgstr "==> idÅ‘korlátok beállítása az engedélyezett napokra, példa" #~ msgid "" #~ "==> set allowed hours per specified day or ALL for every day, example" #~ msgstr "" #~ "==> meghatározott napra vagy MINDENKINEK az összes napra engedélyezett " #~ "órák beállítása, példa" #~ msgid "==> get user configuration from the server, example" #~ msgstr "==> felhasználói konfiguráció betöltése a szerverrÅ‘l, példa" #~ msgid "Excluded session types list is not correct and can not be set" #~ msgstr "" #~ "Nem megfelelÅ‘ a kizárt munkamenetek típuslistája és nem lehet beállítani" #~ msgid "Control sessions types list is not correct and can not be set" #~ msgstr "" #~ "Nem megfelelÅ‘ a vezérlÅ‘ munkamenet típuslistája és nem lehet beállítani" #~ msgid "Excluded user list is not correct and can not be set" #~ msgstr "" #~ "A kizárt felhasználók listáját nem adták át és nem lehet feldolgozni" #, python-format #~ msgid "Final warning time \"%%s\" is not correct and can not be set" #~ msgstr "" #~ "A utolsó figyelmeztetés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet " #~ "beállítani" #, python-format #~ msgid "Termination time \"%%s\" is not correct and can not be set" #~ msgstr "A kilépés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "Track inactive \"%%s\" is not correct and can not be set" #~ msgstr "" #~ "A(z) \"%%s\" inaktivitás figyelése nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "Log level \"%%s\" is not correct and can not be set" #~ msgstr "A \"%%s\" naplózás szintje nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "Poll time \"%%s\" is not correct and can not be set" #~ msgstr "" #~ "A lekérdezés \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "Save time \"%%s\" is not correct and can not be set" #~ msgstr "A tárolás \"%%s\" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "User's \"%%s\" allowed hours are not correct and can not be set" #~ msgstr "" #~ "A \"%%s\" felhasználó számára engedélyezett órák nem megfelelÅ‘ek és nem " #~ "lehet beállítani" #, python-format #~ msgid "User's \"%%s\" day limits list is not correct and can not be set" #~ msgstr "" #~ "A \"%%s\" felhasználó napi korlátozáslistája nem megfelelÅ‘ és nem lehet " #~ "beállítani" #, python-format #~ msgid "User's \"%%s\" day list is not correct and can not be set" #~ msgstr "" #~ "A \"%%s\" felhasználó naplistája nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "User's \"%%s\" monthly allowance is not correct and can not be set" #~ msgstr "" #~ "A \"%%s\" felhasználó havi korlátja nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "User's \"%%s\" set time limit is not correct and can not be set" #~ msgstr "" #~ "A \"%%s\" felhasználó idÅ‘korlátja nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "User's \"%%s\" weekly allowance is not correct and can not be set" #~ msgstr "" #~ "A \"%%s\" felhasználó heti korlátja nem megfelelÅ‘ és nem lehet beállítani" #, python-format #~ msgid "User's \"%%s\" track inactive flag is not correct and can not be set" #~ msgstr "" #~ "A \"%%s\" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘ és " #~ "nem lehet beállítani" #~ msgid "Please select a hour interval to remove" #~ msgstr "Kérjük, válasszon egy eltávolítandó óra-idÅ‘közt" #~ msgid "Interval start can not be the same as end" #~ msgstr "Az idÅ‘köz kezdete nem lehet azonos a befejezésével" #~ msgid "Interval start or end duplicates existing interval" #~ msgstr "Az idÅ‘köz kezdete vagy befejezése megkettÅ‘z egy már létezÅ‘ idÅ‘közt" #~ msgid "Interval end conflicts with existing one" #~ msgstr "Az idÅ‘köz befejezése ütközik egy már létezÅ‘vel" #~ msgid "Interval start conflicts with existing one" #~ msgstr "Az idÅ‘köz kezdete ütközik egy már létezÅ‘vel" #~ msgid "Interval overlaps with existing one" #~ msgstr "Az idÅ‘köz átfedésben vagy egy már létezÅ‘vel" #~ msgid "please-enter-translator-credits" #~ msgstr "rolkovit+ubuntu@gmail.com" #~ msgid "" #~ "This is Timekpr-nExT configuration app. It allows you to configure time " #~ "for your users as well as the Timekpr-nExT parameters.\n" #~ "\n" #~ "To use this application, you either have to execute it as superuser or " #~ "have to be part of the timekpr group.\n" #~ "Please note that the \"Timekpr-nExT Configuration\" is available in " #~ "superuser (administrator) mode only!\n" #~ "\n" #~ "Please configure carefully: do not lock yourself out!" #~ msgstr "" #~ "Ez a Timekpr-nExT konfigurációs app. Beállíthatjuk vele a felhasználóink " #~ "idejét, valamint a Timekpr-nExT paramétereket.\n" #~ "\n" #~ "Az app futtatása superuser-ként vagy a timekpr csoport tagjaként " #~ "lehetséges.\n" #~ "A \"Timekpr-nExT konfiguráció\" csak superuser (adminisztrátor) " #~ "üzemmódban lehetséges.\n" #~ "\n" #~ "A konfiguráció során legyünk óvatosak, nehogy kizárjuk magunkat!" #~ msgid "" #~ "This allows you to change time for today as well as inactive session " #~ "tracking" #~ msgstr "" #~ "Ezzel tudjuk a mai nap idejét megváltoztatni illetve az inaktív " #~ "munkamenet figyelését beállítani" #~ msgid "Time spent for this week (saved stated, not real-time)" #~ msgstr "A héten felhasznált idÅ‘ (mentett állapot, nem valós idejű)" #~ msgid "Subtract specified amount (penalty)" #~ msgstr "Megadott mennyiség levonása (büntetés)" #~ msgid "Add specified amount (reward)" #~ msgstr "Megadott mennyiség hozzáadása (jutalom)" #~ msgid "" #~ "Select whether time for inactive sessions are counted. If this is " #~ "unchecked, time spent in console (not terminal) and while screen is " #~ "locked is NOT taken into account (this very much varies from DE to DE)" #~ msgstr "" #~ "Válasszuk ki, hogy az inaktív munkamenetek ideje számít-e. Ha nincsen " #~ "kiválasztva, akkor a zárolt képernyÅ‘ alatt a konzolban (nem egy " #~ "terminálban) töltött idÅ‘ nem lesz figyelembe véve (ez asztali " #~ "környezetenként nagy mértékben eltérhet)" #~ msgid "Set exacly specified limit" #~ msgstr "Pontosan megadott idÅ‘korlát beállítása" #~ msgid "" #~ "Lists day of the week and additional information about the day's limit, " #~ "please enable / disable days for the user" #~ msgstr "" #~ "A hét napjainak listája és információ a napi idÅ‘korlátokról, felhasználó " #~ "napjainak engedélyezése / tiltása" #~ msgid "" #~ "Set specified hours and minutes for particular day at user's disposal (do " #~ "not forget to hit the button)" #~ msgstr "" #~ "A felhasználó rendelkezésére álló idÅ‘ megadása órában és percben egy " #~ "adott napra (ne felejtsük el az nyomógombbal igazolni)" #~ msgid "Set the amount of hours to limit available time for particular day" #~ msgstr "Adott nap engedélyezett idejének megadása órában" #~ msgid "Specify day's limit" #~ msgstr "Napi idÅ‘korlát meghatározása" #~ msgid "" #~ "Add specified hour interval to the list (do not forget to hit th e " #~ "button)" #~ msgstr "" #~ "A megadott óra idÅ‘intervallum hozzáadása a listához (igazolni kell az " #~ " felülettel)" #~ msgid "" #~ "Hour intervals per day available to user.\n" #~ "Please note that if day ends at 24th hour and next day starts at 0, user " #~ "can work continuously past midnight.\n" #~ "Please note that multiple intervals cannot be configured within the same " #~ "hour. An interval can start or end or contain a specific hour, but not " #~ "more than once (this is by design, not a bug)" #~ msgstr "" #~ "Felhasználónak rendelkezésére álló napi óra idÅ‘keret.\n" #~ "Megjegyzés: ha egy nap a 24. órában véget és a következÅ‘ nap a 0. órával " #~ "megkezdÅ‘dik, akkor a felhasználható idÅ‘ átnyúlik az éjfélen.\n" #~ "Megjegyzés: egy órán belül nem lehet több intervallumot beállítani. " #~ "Kizárólag egy idÅ‘intervallum eleje és vége lehet ugyanazon az órában (ez " #~ "szándékolt, nem hiba)" #~ msgid "" #~ "Remove selected interval from the list (do not forget to hit the " #~ "button)" #~ msgstr "" #~ "A kiválasztott idÅ‘intervallum eltávolítása a listából (igazolni kell az " #~ " felülettel)" #~ msgid "Specify END hour of the allowed hour interval" #~ msgstr "Az engedélyezett óra idÅ‘intervallum befejezÅ‘ órájának meghatározása" #~ msgid "Specify END minute of the allowed hour interval" #~ msgstr "Az engedélyezett óra idÅ‘intervallum befejezÅ‘ percének meghatározása" #~ msgid "This allows You to set up weekly & monthly limits" #~ msgstr "A heti és havi idÅ‘korlátokat lehet beállítani" #~ msgid "Month limit amount (minutes part)" #~ msgstr "Havi idÅ‘korlát (percek)" #~ msgid "Month limit amount (days part)" #~ msgstr "Havi idÅ‘korlát (napok)" #~ msgid "Month limit amount (hours part)" #~ msgstr "Havi idÅ‘korlát (órák)" #~ msgid "Week limit amount (hours part)" #~ msgstr "Heti idÅ‘korlát (órák)" #~ msgid "Week limit amount (minutes part)" #~ msgstr "Heti idÅ‘korlát (percek)" #~ msgid "Week limit amount (days part)" #~ msgstr "Heti idÅ‘korlát (napok)" #~ msgid "" #~ "Timekpr-nExT log level. Please do not change this unless asked (you " #~ "likely won't find anything pretty in the log files)\n" #~ "1 - standard, 2 - debug, 3 - extra debug" #~ msgstr "" #~ "A Timekpr-nExT naplózási szinje. Csak kérés esetén változtassuk " #~ "(valószínűleg semmi hasznos nem található a naplófájlokban)\n" #~ "1 - standard, 2 - debug, 3 - extra debug" #~ msgid "This specifies the time interval at which actual user state is saved" #~ msgstr "Meghatározza a tényleges felhasználói állapot mentésének idÅ‘közét" #~ msgid "" #~ "Amount of seconds before terminating user sessions. After this is " #~ "reached, user will be terminated, nothing can be done to prevent it.\n" #~ "Adding time does not help in this case. Do that before reaching this " #~ "point..." #~ msgstr "" #~ "A felhasználói munkamenet lezárásáig hátrelévÅ‘ másodpercek. InnentÅ‘l a " #~ "felhasználó kizárását már nem lehet megakadályozni.\n" #~ "Ebben az esetben idÅ‘ hozzáadása már nem segít. Ezt ezelÅ‘tt az idÅ‘pont " #~ "elÅ‘tt kell megtenni..." #~ msgid "Add user to the exclusion list" #~ msgstr "Felhasználó hozzáadása a kizárási listához" #~ msgid "" #~ "List of users excluded from tracking.\n" #~ "Please specify actual usernames, not real names here (e.g please specify " #~ "jsmith, not John Smith)" #~ msgstr "" #~ "Felügyelet alól kizárt felhasználók.\n" #~ "Valós felhasználóneveket kell megadni, nem való neveket (pl. kovacsj, nem " #~ "Kovács János)" #~ msgid "Remove excluded session type from the list" #~ msgstr "Kizárt munkamenet típusának eltávolítása a listából" #~ msgid "Add excluded session type to the list" #~ msgstr "Kizárt munkamenet típusának hozzáadása a listához" #~ msgid "Remove user from the exclusion list" #~ msgstr "Felhasználó eltávolítása a kizárási listáról" #~ msgid "Continous time left to You which may span to more than a current day" #~ msgstr "" #~ "A megszakítások nélkül rendelkezésre álló idÅ‘, mely akár a következÅ‘ " #~ "napra is áthúzódhat" #~ msgid "Continous time left:" #~ msgstr "Megszakítások nélkül rendelkezésre álló idÅ‘:" #~ msgid "This shows time intervals that are available for Your use" #~ msgstr "Rendelkezésre álló idÅ‘intervallumok" #~ msgid "Time spent for this month" #~ msgstr "Ebben a hónapban felhasznált idÅ‘" #~ msgid "Time limit for week available to You" #~ msgstr "Rendelkezésre álló heti idÅ‘korlát" #~ msgid "" #~ "Specify whether to show notification when limit configurations or " #~ "allowance changes" #~ msgstr "" #~ "Annak megjelenítését állíthatjuk be, hogy korlátozások beállításai vagy " #~ "engedélyezések megváltoztak" #~ msgid "Time limit for month available to You" #~ msgstr "Rendelkezésre álló havi idÅ‘korlát" #~ msgid "" #~ "This sets logging level (please do not change this unless You know what " #~ "You're doing)" #~ msgstr "" #~ "Beállítja a naplózási szintet (ne állítsuk, hacsak nem tudjuk, pontosan " #~ "mit is csinálunk)" #~ msgid "" #~ "Specify whether to show seconds in notification area (some DE, like KDE5, " #~ "do not support text besides notification icons)" #~ msgstr "" #~ "Másodpercek értesítési sávban történÅ‘ megjelenítésének beállítása (egyes " #~ "asztali környezetek, mint a KDES nem támogatják az értesítési ikonok " #~ "melletti szöveget)" #~ msgid "TIme spent for this week" #~ msgstr "Ezen a héten felhasznált idÅ‘" #, python-format #~ msgid "" #~ "Feature \"%%s\", which is used to detect idle time, can not be enabled!\n" #~ "Idle / inactive time might not be accounted when screen is locked!" #~ msgstr "" #~ "A tétlen idÅ‘ észlelésére szolgáló \"%%s\" szolgáltatás nem " #~ "engedélyezhetÅ‘!\n" #~ "Lehet, hogy a tétlen / inaktív idÅ‘t nem veszik figyelembe, amikor a " #~ "képernyÅ‘ le van zárva!" #~ msgid "" #~ "Specify session polling time granularity (at which interval user sessions " #~ "and activity are polled).\n" #~ "3 -5 seconds are optimal, don't change this if unsure." #~ msgstr "" #~ "A munkamenet lekérdezésének idÅ‘köze (amilyen idÅ‘közönként a felhasználói " #~ "munkamenetet és az aktivitási állapotokat lekérdezzük)\n" #~ "3-5 másodperc az optimális, ne változtassuk, ha nem vagyunk biztosak." #~ msgid "" #~ "Select whether to use speech notifications (if not available, this will " #~ "be greyed out). If usage of speech is very much needed, please install " #~ "python3-espeak package" #~ msgstr "" #~ "Beszédértesítések használatának beállítása (kiszürkítve, ha nem " #~ "elérhetÅ‘). A működéshez a python3-espeak csomagnak telepítve kell lennie" #~ msgid "Hide tray icon is not passed" #~ msgstr "A tálca elrejtése ikon nem került átadásra" #, python-format #~ msgid "Hide tray icon \"%%s\" is not correct" #~ msgstr "A \"%%s\" tálcaikon elrejtése nem megfelelÅ‘" #, python-format #~ msgid "Hide tray icon \"%%s\" is not correct and can not be set" #~ msgstr "A \"%%s\" tálcaikon elrejtése nem megfelelÅ‘, és nem állítható be" #, python-format #~ msgid "User's \"%%s\" hide tray icon flag is not correct and can not be set" #~ msgstr "" #~ "A felhasználó \"%%s\" elrejtõ tálcájának ikonja nem megfelelõ, és nem " #~ "állítható be" #~ msgid "" #~ "Continuous time left to user which may span to more than a current day " #~ "(realtime, available when user is logged in)" #~ msgstr "" #~ "A felhasználó számára fenntartott folyamatos idÅ‘, amely meghaladhatja az " #~ "aktuális napot (valós idÅ‘, elérhetÅ‘, amikor a felhasználó be van " #~ "jelentkezve)" #~ msgid "" #~ "Select whether to show padlock icon and notifications to user.\n" #~ "Please note that this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Válassza ki, hogy megjelenjen-e a lakat ikon és az értesítések a " #~ "felhasználó számára.\n" #~ "Felhívjuk figyelmét, hogy ez letiltja az összes információ és értesítés " #~ "megjelenítését a felhasználó számára!" timekpr-next/resource/locale/hu/LC_MESSAGES/timekpr.mo000644 001750 001750 00000061652 15122253261 024503 0ustar00bezvfedubezvfedu000000 000000 Þ•Úì%¼ PQl$‡*¬×0ìHf*~™©%C$iDŽ8Ó  %(Fo$‹°Â+Ø)*.'Y�Y”îÿ. LZ r |Š #¾%â*<3*p#›¿Ú+í & *™8ÒÚì%û*!<L!‰3« ߇'š9 ü*HM*j•¤ ´1Áó( -7V\*s ž¨0Çø 7<RN�%Þ( -;0Z‹%£-É÷) > &F m ~ ˆ 0§ Ø åð Ö!ã!ú!! "U/"…"#�"±"!Ï"ñ"%#7(#`#+#2«#4Þ#7$K$4e$6š$5Ñ$7%;?%7{%6³%2ê%&C5&y&ˆ&œ&¯& À&Í&á&Dô&*9')d'Ž'¢'¸'Ì'ß'3õ'@)(j(2(.²( á()î()3)O))c)'�)µ)Ï)BÒ)#*59**o*š*·*Ð*à*ñ*I+HQ+Sš+"î+,%*,$P,u,�, ,<½,+ú,=&-*d-$�-6´-#ë-/.'?./g..—.-Æ.?ô.,4//a/A‘/.Ó/,0>/0+n0š0 £0­0€É06J1(�1ª13É1Gý1E2H2L2"P2¥s2W5ªq57S277†7=¾7ü7@8PX8"©8?Ì8³ 9*À9*ë9b:Ry:Ì:Õ:1ë:7;*U;5€;¶;É;,à;8 <9F<2€<³<OÏ<=/3=6c=š=©= Ä=Ñ=4î='#>5K>0�>4²>Oç>*7?+b?%Ž?´?0Ì?ý? @@"@ <@J@_@-v@4¤@OÙ@0)ALZA2§AÚA´óA9¨BTâB67C+nCšC#¢CBÆC DD -DM8D†D6 D ×D)ãD EE20EcE)uEDŸE%äE F%F"BFVeFQ¼F<G8KG„G.žGIÍG*H5BH;xH+´H9àHI;+IgI †I+”IFÀI'Jþ/J.K$?K$dK8‰KpÂK 3L%>LdL*„L¯L+ÀLFìL'3M2[M6ŽM2ÅMKøMDN/^N/ŽNB¾N1O>3O+rOIžO9èO"P\BPŸP®PÎPëPQQ)Q]=Q&›Q&ÂQéQR%R=R#WRI{RSÅRS@9SAzS ¼S+ÉSõST/T.CT/rT¢T ·TÂT1âTLU8aU,šU!ÇUéUVVl2VbŸViW'lW!”W6¶W&íW$X9X*UXa€X>âXY!Y@{Y0¼YKíY29ZDlZD±ZBöZP9[3Š[N¾[5 \GC\b‹\Iî\38]Nl]5»]ñ]^^´4^<é^&_F_7b_Sš_î_ó_ø_6`>`\Mcp×'—Ñ!Q/™°�aÆÇÃ[:‚u(¯fÍ’È#k½ ÔÉPm¥"Õ.¬w˜»©b¼+›B@r$o­}¾´c,…À”*N-–ER&vt·0nž¨¶UlÙÖ?~AÐÁÒ¦Šš�^±{DXHˆ ³L�Ÿ€§ÅÏd39O=Tº\5 yJSC4j`Y®Ìq‹I�WÓ ‡ ¡Ê1h)«7†<g‘²ieÚË%Ä�KV¸>£ MªÂ¢ sœØ8ŽzxŒµÎ6G|2¹_‰;ƒ¿]¤„•Z“F%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set allowed days for the user, example==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTAdd a user to the exclusion listAdd an excluded session type to the listAdd specified time (reward)Add tracked session type to the listAdditional limitsAdditional statisticsAdditional time for user has been processedAllowed days for user have been processedAllowed hours for user have been processedApply all Timekpr-nExT settings at onceApply daily limitsBrief information about time spent and everything related to time management for this dayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration retrievedConnectedConnecting...Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCopyright (c) 2018-2021 Eduards BezverhijsCritical notification timeout (sec)Current effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDays & LimitsEduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )EnabledExcluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsIcon, isn't it?Info & TodayInternal connection error, please check log filesInterval removedInterval start cannot be the same as endIntervalsKeep control of computer usageLimitLimits & ConfigurationList of usernames registered on the systemLog levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelNotes, read carefully ;)Notification timeout (sec)PARAMETER PARSE ERROR (please check parameter validity): %%sPlease reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePoll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove tracked session type from the listRestoreRestore configuration from saved stateSave all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Session typeShow all notificationsShow limit changesShow seconds in notification areaSpecify whether to show a notification when limit configurations or allowance changesStartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are the days and limits that are available to youTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT notificationToTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser configuration retrievedUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationWARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Weekly and monthly limits for user have been processedYou have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrminn/anumeric time values are in secondstimekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:18+0300 Last-Translator: Eduards Bezverhijs Language-Team: Hungarian Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2020-10-10 15:24+0000 X-Generator: Poedit 3.6 %(n)s perc%(n)s perc%(n)s másodperc múlva ki lesz léptetve%(n)s másodperc múlva ki lesz léptetve%(n)s másodperc van hátra%(n)s másodperc van hátraÖsszesen %(n)s felhasználó:Összesen %(n)s felhasználó:---=== ÉRTESÃ�TÉS ===---==> mentett felhasználólista betöltése a szerverrÅ‘l, példa==> felhasználói konfigurációs és idÅ‘információkat a szerverrÅ‘l, példa==> súgó megjelenítése, példa==> felhasználónak engedélyezett napok beállítása, példa==> a felhasználó aktuálisan fennmaradó idejének beállítása: "+" (idÅ‘ hozzáadása), "-" (idÅ‘ kivonása), "=" (a rendelkezésre álló pontos idÅ‘ beállítása), példa==> havi idÅ‘korlát beállítása, példa==> heti idÅ‘korlát beállítása, példa==> beállíthatja, hogy elrejtse-e a tálca ikont és megakadályozza az értesítéseket, példa==> inaktív felhasználói meneteket figyelembe vételének beállítása, példaNévjegyTimekpr-nExT névjegyFelhasználó hozzáadása a kizárási listáhozKizárt munkamenet típusának hozzáadása a listáhozMegadott mennyiség hozzáadása (jutalom)Felügyelt munkamenet-típus hozzáadása a listáhozTovábbi korlátokTovábbi statisztikákA felhasználói többletidÅ‘t feldolgoztákAz felhasználónak engedélyezett napokat feldolgoztákAz felhasználónak engedélyezett órákat feldolgoztákTimekpr-nExT beállítások együttes alkalmazásaNapi korlátok alkalmazásaRövid összefoglaló a mai napon felhasznált idÅ‘rÅ‘l és az idÅ‘kezelésrÅ‘lAz ablak bezárásaA parancs meghiúsult: hozzáférés megtagadvaA parancs meghiúsult: a kommunikációt nem fogadtákBeállításokA konfiguráció betöltveKapcsolódvaKapcsolódás folyamatban…Megszakítások nélkül rendelkezésre álló idÅ‘:A Timekpr-nExT beállítások kezeléseA Timekpr-nExT által felügyelt állapotok kezeléseNem adták át a vezérlÅ‘ munkamenet típusaitNem megfelelÅ‘ a vezérlÅ‘ munkamenet típuslistájaNem megfelelÅ‘ a vezérlÅ‘ munkamenet típuslistája és nem lehet beállítaniCopyright (c) 2018-2021 Eduards BezverhijsKritikus értesítési idÅ‘túllépés (mp)A jelenleg hatásos felhasználónévAktuális statisztikákNapi korlát beállítása az összes munkanapraNapi korlátokNapNapok & korlátokrolkovit+ubuntu@gmail.comEngedélyezveKizárt munkamenetekKizárt felhasználókA kizárt munkamenet típusait nem adták átNem megfelelÅ‘ a kizárt munkamenetek típuslistájaNem megfelelÅ‘ a kizárt munkamenetek típuslistája és nem lehet beállítaniNem megfelelÅ‘ a kizárt felhasználók listájaA kizárt felhasználók listáját nem adták át és nem lehet feldolgozniA kizárt felhasználók listáját nem adták átSikertelen kapcsolódásA tétlen idÅ‘ észlelésére szolgáló "%%s" szolgáltatás nem engedélyezhetÅ‘! Lehet, hogy a tétlen / inaktív idÅ‘t nem veszik figyelembe, amikor a képernyÅ‘ le van zárva!A utolsó figyelmeztetés "%%s" idÅ‘pontja nem megfelelÅ‘A utolsó figyelmeztetés "%%s" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítaniAz utolsó figyelmeztetés idÅ‘pontját nem adták átFormátum: KezdettIkon és értesítések elrejtése:A felhasználó tálcaikonjának elrejtése feldolgozásra kerültÓra idÅ‘közökEz egy ikon, ugye?Infó & maBelsÅ‘ kapcsolati hiba, további információk a naplófájlokban találhatóAz idÅ‘köz eltávolítvaAz idÅ‘köz kezdete nem lehet azonos a befejezésévelIdÅ‘közökFelügyelje a számítógép-használatotKorlátKorlátok & konfigurációA rendszerben regisztrált felhasználók listájaNaplózási szintA "%%s" naplózás szintje nem megfelelÅ‘A "%%s" naplózás szintje nem megfelelÅ‘ és nem lehet beállítaniA naplózás szintjét nem adták átNaplózási szintMegjegyzések, figyelmesen olvasni :)Értesítési idÅ‘túllépés (mp)PARAMÉTER ELEMZÉSI HIBA (kérjük, ellenÅ‘rizze a paraméter érvényességét): %%sKérjük, indítsa újra az alkalmazást, ha Ön superuser és a Timekpr-nExT futKérjük, válasszon egy napot a korlátok beállításáhozKérjük, válasszon egy eltávolítandó óra-idÅ‘köztLekérdezési intervallumA lekérdezés "%%s" idÅ‘pontja nem megfelelÅ‘A lekérdezés "%%s" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítaniA lekérdezés idÅ‘pontját nem adták átFelhasználó eltávolítása a kizárási listárólKizárt munkamenet típusának eltávolítása a listábólKizárt munkamenet-típusok eltávolításaFelügyelt munkamenet-típus eltávolítása a listárólVisszaállításA beállítások visszaállítása egy mentett állapotbólÖsszes változtatás mentéseIdÅ‘ mentéseA tárolás "%%s" idÅ‘pontja nem megfelelÅ‘A tárolás "%%s" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítaniA tárolás idÅ‘pontját nem adták átVálasszuk ki, hogy az inaktív munkamenetek ideje számít-e. Ha nincsen kiválasztva, akkor a zárolt képernyÅ‘ alatt a konzolban (nem egy terminálban) töltött idÅ‘ nem lesz figyelembe véve (ez asztali környezetenként nagy mértékben eltérhet)MunkamenettípusÖsszes értesítés megjelenítéseKorlátok változásainak kijelzéseMásodpercek megjelenítése az értesítési területenAnnak megjelenítését állíthatjuk be, hogy korlátozások beállításai vagy engedélyezések megváltoztakElindítvaA Timekpr-nExT admin kliens állapotaA Timekpr-nExT kliens állapotaMegadott mennyiség levonása (büntetés)Befejezés idejeA kilépés "%%s" idÅ‘pontja nem megfelelÅ‘A kilépés "%%s" idÅ‘pontja nem megfelelÅ‘ és nem lehet beállítaniA kilépés idÅ‘pontját nem adták átAz idÅ‘köz átfedésben vagy egy már létezÅ‘velAz idÅ‘köz befejezése ütközik egy már létezÅ‘velAz idÅ‘köz kezdete ütközik egy már létezÅ‘velAz idÅ‘köz kezdete vagy befejezése megkettÅ‘z egy már létezÅ‘ idÅ‘köztA parancs nem megfelelÅ‘:A mai napi idÅ‘korláthoz beállítandó órákA mai napi idÅ‘korláthoz beállítandó percekA Timekpr-nExT admin klienst a következÅ‘képpen kell használni:Nem lehet a Timekpr-nExT-tel kommunikálni (%%s)!Nem lehet a Timekpr-nExT szolgáltatáshoz kapcsolódni (%%s)!A rendelkezésre álló napok és korlátokAz engedélyezett idÅ‘t megváltoztatták, az új idÅ‘t vegye figyelembe!Ma elérhetÅ‘ idÅ‘ (mentett kijelentve, nem valósidejű)HátralévÅ‘ idÅ‘ (tényleges):Inaktív felhasználási idÅ‘ ebben a munkamenetben vagy a Timekpr-nExT újraindítása ótaInaktív idÅ‘:HátralévÅ‘ idÅ‘ (tényleges):Még hátralévÅ‘ idÅ‘ (ma):Mai fennmaradó idÅ‘:Fennmaradó idÅ‘...IdÅ‘korlát (havi):IdÅ‘korlát (hét):Az idÅ‘korlát konfigurációját megváltoztatták, az új konfigurációt vegye figyelembe!Rendelkezésre álló havi idÅ‘korlátRendelkezésre álló heti idÅ‘korlátFelhasznált idÅ‘ (hónap):Felhasznált idÅ‘ (munkamenet):Felhasznált idÅ‘ (ma):Felhasznált idÅ‘ (hét):Ebben a hónapban felhasznált idÅ‘Ebben a hónapban felhasznált idÅ‘ (mentett állapot, nem valós idejű)Az ebben a munkamenetben vagy a Timekpr-nExT újraindítása óta felhasznált idÅ‘Ezen a héten felhasznált idÅ‘A héten felhasznált idÅ‘ (mentett állapot, nem valós idejű)Mai napon felhasznált idÅ‘ (tárolt állapot, nem valós idejű)Timekpr-nExTTimekpr-nExT adminisztráció beállításaTimekpr-nExT beállításokTimekpr-nExT adminisztrációTimekpr-nExT kliensA Timekpr-nExT konfigurációját elmentettékA Timekpr-nExT interfész még nem áll készenTimekpr-nExT jelzésBefejezésA nap végéig fennmaradó idÅ‘A(z) "%%s" inaktivitás figyelése nem megfelelÅ‘A(z) "%%s" inaktivitás figyelése nem megfelelÅ‘ és nem lehet beállítaniA felhasználói inaktivitás követését feldolgoztákAz inaktívitás figyelését nem adták átInaktív munkamenetek követése:Inaktív idÅ‘ felügyelete:Felügyelet munkamenetekVáratlan hiba: %%sVáratlan hiba a felhasználólista lekérése során. Kérjük, tekintse meg a Timekpr-nExT naplófájljaitVáratlan hiba a vezérlés frissítésekor. Kérjük, tekintse meg a Timekpr-nExT naplófájljaitVáratlan hiba a konfiguráció betöltése során. Kérjük, tekintse meg a Timekpr-nExT naplófájljaitHasználjon hangos az értesítésekhezBeszédértesítések használataA "%%s" felhasználó konfigurációját nem találtukA "%%s" vezérlÅ‘ fájlt nem találtukA "%%s" felhasználót nem találtukFelhasználói beállításA felhasználó konfigurációja betöltveA "%%s" felhasználó számára engedélyezett órák nem megfelelÅ‘ek és nem lehet beállítaniA "%%s" felhasználó napi korlátozáslistája nem megfelelÅ‘A "%%s" felhasználó napi korlátozáslistája nem megfelelÅ‘ és nem lehet beállítaniA "%%s" felhasználó napi korlátozáslistáját nem adták átA "%%s" felhasználó naplistája nem megfelelÅ‘A "%%s" felhasználó naplistája nem megfelelÅ‘ és nem lehet beállítaniA "%%s" felhasználó naplistáját nem adták átA "%%s" felhasználó napjai számának 1 és 7 között kell lennieA "%%s" felhasználó napjai számának rendelkezésre kell állniukA felhasználó "%%s" elrejtõ tálcájának ikonja nem megfelelõA felhasználó "%%s" elrejtÅ‘ tálca ikonjának jelzÅ‘je nem került átadásraA "%%s" felhasználó havi korlátja nem megfelelÅ‘A "%%s" felhasználó havi korlátja nem megfelelÅ‘ és nem lehet beállítaniA "%%s" felhasználó havi korlátját nem adták átA "%%s" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘A "%%s" felhasználó inaktivitást figyelÅ‘ kapcsolója nem megfelelÅ‘ és nem lehet beállítaniA "%%s" felhasználó inaktivitást figyelÅ‘ kapcsolóját nem adták átA "%%s" felhasználó heti korlátja nem megfelelÅ‘A "%%s" felhasználó heti korlátja nem megfelelÅ‘ és nem lehet beállítaniA "%%s" felhasználó heti korlátját nem adták átFelhasználónévFelhasználónév:Felhasználói beállításokFigyelmeztetés: A Timekpr-nExT adminisztrációs eszközt GUI üzemmódban kellene elindítani, de a grafikus megjelenítés nem elérhetÅ‘. Ezért CLI üzemmódban fog elindulni.A felhasználói heti és havi idÅ‘korlátokat feldolgoztákMég %(n)s óraMég %(n)s óraMára nincsen idÅ‘korlátodAz ideje lejárt, akkor erÅ‘szakkal be lesz jelentkezveaz órákat az ISO 8601 szerint számozzuk (azaz 24 órás óra, formátum: 0–23)órapercnem elérhetÅ‘a numerikus időértékek másodpercben vannak megadvaEz a program szabad szoftver; terjeszthetÅ‘ illetve módosítható a Free Software Foundation által kiadott GNU General Public License dokumentumában leírtak; akár a licenc 3-as, akár (tetszÅ‘leges) késÅ‘bbi változata szerint. Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az ELADHATÓSÃ�GRA vagy VALAMELY CÉLRA VALÓ ALKALMAZHATÓSÃ�GRA való származtatott garanciát is beleértve. További részleteket a GNU General Public License tartalmaz. A felhasználónak a programmal együtt meg kell kapnia a GNU General Public License egy példányát; ha mégsem kapta meg, akkor az megtalálható a címen. Debian disztribúcióban lásd a /usr/share/common-licenses/GPL-3 fájlta hétköznapokat az ISO 8601 szerint számozzuk (azaz hétfÅ‘ az elsÅ‘ nap, formátum: 1-7)timekpr-next/resource/locale/fr_CA/000755 001750 001750 00000000000 15122253261 021232 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/fr_CA/LC_MESSAGES/000755 001750 001750 00000000000 15122253261 023017 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/fr_CA/LC_MESSAGES/timekpr.po000644 001750 001750 00000306556 15122253261 025051 0ustar00bezvfedubezvfedu000000 000000 # French (Canada) translation for timekpr-next # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:17+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: French (Canada) \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> afficher l'aide, exemple" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> enregistrer la liste des utilisateurs à partir du serveur, exemple" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "==> obtenir les informations de configuration utilisateur et d'heure du " "serveur, exemple" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" "obtenez des informations sur l'heure de l'utilisateur en temps réel à partir du " "serveur, exemple" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> régler les jours permis pour l'utilisateur, exemple" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> régler les heures permises pour le jour choisi, ou \"ALL\" pour tous les " "jours. Utilisez des crochets [x-y] pour indiquer un intervalle. Utilisez ! " "devant l'heure pour ne pas tenir compte de cette heure (heure disponible à " "l'utilisateur), exemple" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> régler les limites de temps pour les jours choisis. Le nombre de valeurs " "ne doit pas excéder le nombre de jours permis, exemple" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "==> régler la limite par semaine, exemple" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "==> régler la limite par mois, exemple" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "==> choisir de surveiller les sessions inactives, exemple" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" "==> définir s'il faut masquer l'icône de la barre d'état et empêcher les " "notifications, exemple" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> régler le type de restriction/verrou (\"lock\" - verrouiller la session, " "\"suspend\" - mettre en veille, \"suspendwake\" - mettre en veille et " "réveiller, \"terminate\" - fermer la session, \"kill\" - tuer les sessions, " "\"shutdown\" - arrêter l'ordinateur), exemples" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> régler le temps restant pour l'utilisateur à partir de maintenant: \"+\" " "(ajouter l'heure), \"-\" (soustraire l'heure), \"=\" (définir l'heure exacte " "disponible), exemple (ajouter une heure)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> activer/désactiver l'option TempsLibre pour l'utilisateur, exemple" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> choisir si TempsLibre doit être utilisé au lieu de l'activité normale, " "exemple" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> choisir si TempsLibre est permis durant les intervalles non comptabilisés, " "exemple" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "==> régler les jours permis pour les activités TempsLibre, exemple" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> régler les limites de TempsLibre pour les jours choisis. Le nombre de " "valeurs ne doit pas excéder le nombre de jours de \"Temps libre\" permis pour " "l'utilisateur, exemple" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> régler les masques des processus pour lesquels le TempsLibre est considéré, " "exemple" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> régler le TempsLibre restant : \"+\" pour ajouter du temps, \"-\" pour " "réduire le temps, \"=\" pour régler le temps exact, exemple (ajouter une heure)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Les types de sessions de contrôle ne sont pas envoyés" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "La liste des types de sessions de contrôle est incorrecte" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "La liste des types de sessions de contrôle est incorrecte et ne peux être réglée" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "Les types de sessions exclues ne sont pas eonvoyés" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "La liste des types de sessions exclues est incorrecte" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "" "La liste des types de sessions exclues est incorrecte et ne peux être réglée" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "La liste des utilisateurs exclus n'est pas envoyée" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "La liste des utilisateurs exclus est incorrecte" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "La liste des utilisateurs exclus est incorrecte et ne peux être réglée" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "L'avertissement final sur le temps n'est pas envoyé" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "L'avertissement de temps écoulé \"%%s\" est incorrect" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "L'avertissement de temps écoulé \"%%s\" est incorrect et ne peut être réglé" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "Avertissement final que le temps n'est pas écoulé" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "Avertissement final : le temps \"%%s\" est incorrect" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "Avertissement final : le temps \"%%s\" est incorrect et ne peut être utilisé" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "L'heure de fin de session n'est pas passée" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "L'heure de fin de session \"%%s\" est incorrecte" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "L'heure de fin de session \"%%s\" est incorrecte et ne peut être réglée" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Le suivi d'inactivité n'est pas passé" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Le suivi d'inactivité \"%%s\" est incorrect" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "Le suivi d'inactivité \"%%s\" est incorrect et ne peut être réglé" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Le niveau de journal n'est pas passé" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Le niveau de journal \"%%s\" est incorrect" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Le niveau de journal \"%%s\" est incorrect et the peut être réglé" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "La période de rafraîchissement n'est pas envoyée" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "La période de rafraîchissement \"%%s\" est incorrecte" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "" "La période de rafraîchissement \"%%s\" est incorrecte et ne peut être réglée" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "Le temps d'enregistrement n'est pas passé" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "Le temps d'enregistrement \"%%s\" est incorrect" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "Le temps d'enregistrement \"%%s\" est incorrect et ne peut être réglé" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "L'option TempsLibre n'est pas expirée" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "L'option TempsLibre \"%%s\" est incorrecte" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "L'option TempsLibre \"%%s\" est incorrecte et ne peut être utilisée" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "Le suivi amélioré de l'option TempsLibre n'est pas expirée" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "Le suivi amélioré de l'option TempsLibre \"%%s\" est incorrect" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "Le suivi amélioré de l'option TempsLibre \"%%s\" est incorrect et ne peut être " "utilisé" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "Le numéro du jour de l'utilisateur \"%%s\" doit être inscrit" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "Le numéro du jour de l'utilisateur \"%%s\" doit être entre 1 et 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "Les heures permises de l'utilisateur \"%%s\" sont incorrectes et ne peuvent " "être réglées" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "La liste de jour de l'utilisateur \"%%s\" n'est pas passée" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "La liste de jour de l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" "La liste de jour de l'utilisateur \"%%s\" est incorrecte et ne peut être réglée" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "" "La liste des limites quotidiennes de l'utilisateur \"%%s\" n'est pas envoyée" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "La liste des limites quotidiennes de l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "La liste des limites quotidiennes de l'utilisateur \"%%s\" est incorrecte et ne " "peut être réglée" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "Le temps d'utilisation de l'utilisateur \"%%s\" peut être \"+\", \"-\" ou \"=\"" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "La limite de temps pour l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "La limite de temps pour l'utilisateur \"%%s\" est incorrecte et ne peux être " "utilisée" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "L'allocation mensuelle de l'utilisateur \"%%s\" n'est pas passée" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "L'allocation mensuelle de l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "L'allocation mensuelle de l'utilisateur \"%%s\" est incorrecte et ne peut être " "réglée" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "Le témoin de suivi d'inactivité de l'utilisateur \"%%s\" n'est pas passé" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "Le témoin de suivi d'inactivité de l'utilisateur \"%%s\" est incorrect" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "Le témoin de suivi d'inactivité de l'utilisateur \"%%s\" est incorrect et ne " "peut être réglé" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" "L'indicateur d'icône de masquage de la barre d'état \"%%s\" de l'utilisateur " "n'est pas transmis" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "" "L'indicateur de masquage de l'icône \"%%s\" de l'utilisateur n'est pas correct" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "Le réglage pour masquer 'icône de la barre d'état pour l'utilisateur \"%%s\" et " "incorrect et ne peut pas être configuré" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "" "La contrainte / le verrouillage pour l'utilisateur \"%%s\" n'est pas atteint" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "La contrainte / le verrouillage pour l'utilisateur \"%%s\" est incorrect" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Le type de contrainte / verrouillage est incorrect et ne peut être configuré" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "L'allocation hebdomadaire de l'utilisateur \"%%s\" n'est pas dépassée" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "L'allocation hebdomadaire de l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "L'allocation hebdomadaire de l'utilisateur \"%%s\" est incorrecte et ne peut " "être réglée" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "TempsLibre pour l'utilisateur \"%%s\" n'est pas expiré" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "L'activation de TempsLibre pour l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "L'activation de TempsLibre pour l'utilisateur \"%%s\" est incorrecte et ne peut " "être utilisée" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "Le contournement du TempsLibre pour l'utilisateur \"%%s\" n'est pas expiré" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "Le contournement du TempsLibre pour l'utilisateur \"%%s\" est incorrect" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "Le contournement du TempsLibre pour l'utilisateur \"%%s\" est incorrect et ne " "peut être utilisé" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "Le TempsLibre durant les intervalles non comptabilisés pour l'utilisateur " "\"%%s\" n'est pas expiré" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "La permission de TempsLibre durant les intervalles non comptabilisés pour " "l'utilisateur \"%%s\" est incorrect" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "La permission de TempsLibre durant les intervalles non comptabilisés pour " "l'utilisateur \"%%s\" est incorrect et ne peux être utilisée" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "" "La liste des jours de TempsLibre pour l'utilisateur \"%%s\" n'est pas expirée" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "" "La liste des jours de TempsLibre pour l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "La liste des jours de TempsLibre pour l'utilisateur \"%%s\" est incorrecte et " "ne peut être utilisée" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "La limite quotidienne de TempsLibre pour l'utilisateur \"%%s\" n'est pas expirée" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "La limite quotidienne de TempsLibre pour l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "La limite quotidienne de TempsLibre pour l'utilisateur \"%%s\" est incorrecte " "et ne peut être utilisée" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "Les opérations sur le TempsLibre de l'utilisateur \"%%s\" peuvent être \"+\", " "\"-\" ou \"=\"" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "La limite de TempsLibre pour l'utilisateur \"%%s\" est incorrecte" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "La limite de TempsLibre pour l'utilisateur \"%%s\" est incorrecte et ne peut " "être utilisée" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "ERREUR inattendue (chargement de la config). Vérifiez le journal" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "ERREUR inattendue en obtenant la configuration. Consultez le log" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERREUR inattendue en obtenant la configuration utilisateur. Consultez le log" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "ERREUR inattendue (obtenir la liste des utilisateurs). Vérifiez le journal" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERREUR inattendue lors de la mise à jour de la configuration utilisateur. " "Consultez le log" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "ERREUR inattendue (mise à jour du contrôle). Vérifiez le journal" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "La configuration de l'utilisateur \"%%s\" est introuvable" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "La fichier de contrôle de l'utilisateur \"%%s\" est introuvable" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "L'utilisateur \"%%s\" est introuvable" #: common/constants/messages.py:160 msgid "Connected" msgstr "Connecté" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "Connexion en cours…" #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Échec de connexion" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Relancez l'application si vous êtes super utilisateur et que Timekpr-nExT roule" #: common/constants/messages.py:165 msgid "Started" msgstr "Démarré" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "Configuration de l'utilisateur trouvée" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Configuration trouvée" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "Le suivi d'inactivité pour l'utilisateur a été traité" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Masquer l'icône de la barre d'état pour l'utilisateur a été traité" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Le type de contrainte / verrouillage pour l'utilisateur a été appliqué" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Le temps supplémentaire pour l'utilisateur a été traité" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Le TempsLibre supplémentaire pour l'utilisateur a été traité" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "" "Les limites hebdomadaires et mensuelles pour l'utilisateur ont été traitées" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Les jours permis pour l'utilisateur ont été traités" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Les limites quotidiennes pour l'utilisateur ont été traitées" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Les heures permises pour l'utilisateur ont été traitées" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "La configuration de Timekpr-nExT a été enregistrée" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Les limites pour l'utilisateur sont enregistrées" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "Les limites de TempsLibre pour l'utilisateur sont enregistrées" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Les options supplémentaires pour l'utilisateur sont enregistrées" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "TempsLibre pour l'utilisateur est activé" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "Le contournement du TempsLibre pour l'utilisateur a été traité" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "Le TempsLibre permis pendant les intervalles non comptabilisés a été traité" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "Les jours de TempsLibre permis pour l'utilisateur ont été traités" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "Les limites quotidiennes de TempsLibre ont été traitées" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "Les activités de TempsLibre pour l'utilisateur ont été traitées" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Veuillez choisir un jour avant de fixer les limites" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "L'intervalle chevauche l'intervalle existant" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "Le début de l'intervalle est en conflit avec la valeur existante" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "La fin de l'intervalle est en conflit avec la valeur existante" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "" "Le début ou la fin de l'intervalle est un doublon de l'intervalle existant" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Le début de l'intervalle ne peut être identique à la fin de l'intervalle" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "Le début de l'intervalle ne peut être après la fin" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Veuillez choisir un intervalle de temps à retirer" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Intervalle retiré" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "L'interface de Timekpr-nExT n'est pas prête" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "AVERTISSEMENT: l'interface de gestion de Timekpr-nExT devait être lancée en " "mode graphique, mais aucun affichage n'est disponible. Elle fonctionne donc en " "ligne de commande..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "La commande est incorrecte :" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "L'utilisation du client de gestion de Timekpr-nExT est la suivante :" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== REMARQUER ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "les valeurs de temps numériques sont en secondes" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "les jours de la semaine sont numérotés selon la norme ISO 8601 (c'est-à-dire " "que le lundi est le premier jour, format: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "les heures sont numérotées selon ISO 8601 (c.-à-d. horloge 24h, format: 0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s utilisateur au total :" msgstr[1] "%(n)s utilisateurs au total:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Configuration pour l'utilisateur %s :" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Temps restant..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Limites et configuration" #: common/constants/messages.py:213 msgid "About" msgstr "À propos" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Demeurez en contrôle de l'utilisation de votre ordinateur" #: common/constants/messages.py:217 msgid "Day" msgstr "Jour" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Activé" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Limite" #: common/constants/messages.py:220 msgid "From" msgstr "De" #: common/constants/messages.py:221 msgid "from..." msgstr "de..." #: common/constants/messages.py:222 msgid "To" msgstr "À" #: common/constants/messages.py:223 msgid "to..." msgstr "à..." #: common/constants/messages.py:224 msgid "Period" msgstr "Période" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Hebdomadaire" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Mensuel" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Type de session" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "type de session..." #: common/constants/messages.py:232 msgid "Username" msgstr "Nom d’utilisateur" #: common/constants/messages.py:233 msgid "username..." msgstr "nom d'utilisateur..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Masque des processus" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "masque exécutable..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Description du processus" #: common/constants/messages.py:237 msgid "process description..." msgstr "description du processus..." #: common/constants/messages.py:238 msgid "Time" msgstr "Temps" #: common/constants/messages.py:239 msgid "time..." msgstr "temps..." #: common/constants/messages.py:240 msgid "Importance" msgstr "importance" #: common/constants/messages.py:241 msgid "importance..." msgstr "importance..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Message de Timekpr-nExT" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Avertissement de TempsLibre de Timekpr-nExT" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Votre temps n'est pas limité aujourd'hui" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "Votre allocation a changé, veuillez prendre note de votre nouveau temps!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "Votre configuration de temps a changé, veuillez prendre note de votre nouvelle " "configuration!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Il y a un problème de connexion au service de Timekpr-nExT (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Il y a un problème de communication avec Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Erreur d'initialisation de l'icône (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Votre temps est expiré, votre session sera automatiquement terminée dans" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Temps expiré, votre ordinateur sera automatiquement arrêté dans" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "" "Votre temps est écoulé, votre session sera automatiquement verrouillée dans" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "" "Votre temps est écoulé, votre ordinateur sera automatiquement mis en veille dans" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s seconde" msgstr[1] "%(n)s secondes" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Erreur de connexion interne, veuillez consulter le journal" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Il reste %(n)s heure" msgstr[1] "Il reste %(n)s heures" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minute" msgstr[1] "%(n)s minutes" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s seconde à votre session" msgstr[1] "%(n)s secondes à votre session" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s seconde de TempsLibre restante" msgstr[1] "%(n)s secondes de TempsLibre restantes" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "La fonctionnalité \"%%s\", qui est utilisée pour détecter le temps " "d'inactivité, ne peut pas être activée!\n" "Le temps inactif / inactif peut ne pas être pris en compte lorsque l'écran est " "verrouillé!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "ERREUR INATTENDUE: %%S" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "ERREUR D'ANALYSE DE PARAMÈTRE (veuillez vérifier la validité du paramètre): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "ÉCHEC de l'opération: accès interdit" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "ÉCHEC de l'opération: communication refusée" #: common/constants/messages.py:278 msgid "n/a" msgstr "n/a" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "À propos de Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le modifier " "suivant les termes de la GNU General Public License telle que publiée par la " "Free Software Foundation , soit la version 3 de la Licence, soit (à votre gré)\n" "toute version ultérieure.\n" "\n" "Ce programme est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE " "GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ\n" "16 ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la GNU General Public " "License pour plus de détails.\n" "\n" "Vous devriez avoir reçu une copie de la GNU General Public License avec ce " "programme ; si ce n’est pas le cas, consultez : . " "Sur Debian, consultez /usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "JP Lord " #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Retirez le type de session exclue" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Gestion de Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Icône, n'est-ce pas?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Notes à lire attentivement" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Vous êtes dans l'app de configuration pour Timekpr-nExT. Elle vous permet de " "régler les limites de temps pour chaque utilisateur ainsi que les options " "générales de Timekpr-nExT.\n" "Vous devez exécuter cette application en tant que superutilisateur ou faire " "partie du groupe timekpr.\n" "Notez que \"Configuration de Timekpr-nExT\" est disponible seulement en mode " "superutilisateur (administrateur).\n" "\n" "Configurez prudemment : ne bloquez pas votre accès!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Paramètres reliés aux utilisateurs" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Nom d’utilisateur :" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Liste des noms d'utilisateur disponibles sur le système" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Rétablir" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Rétablir les paramètres de la version enregistrée" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Information sur le temps restant / utilisé" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Temps disponible en continu. Peut être utilisé sur plus que le jour courant " "(la valeur réelle est disponible quand la session de l'utilisateur est ouverte)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Temps restant (réel):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Format : " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Durée d'inactivité de l'utilisateur depuis la dernière ouverture de session (la " "valeur réelle est disponible quand la session de l'utilisateur est ouverte)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Temps inactif (réel):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Temps disponible aujourd'hui (enregistré déclaré, pas en temps réel)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Temps restant (aujourd'hui):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Temps d'utilisation aujourd'hui (pas en temps réel)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Temps d'utilisation (aujourd'hui) :" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "Temps d'utilisation cette semaine (pas en temps réel)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Temps d'utilisation (semaine) :" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Temps d'utilisation ce mois-ci (pas en temps réel)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Temps d'utilisation (mois) :" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Ajustements des allocations" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "le temps aujourd'hui" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" "Choisissez ceci pour ajuster l'allocation de temps de l'utilisateur pour " "aujourd'hui" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "TempsLibre" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "Choisissez ceci pour ajuster l'allocation de TempsLibre de l'utilisateur pour " "aujourd'hui" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "h" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "Nombre de minute(s) à ajuster à la limite d'aujourd'hui" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "Nombre d'heure(s) à ajuster à la limite d'aujourd'hui" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Ajouter la quantité spécifiée (récompense)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Soustraire la quantité spécifiée (punition)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Régler la limite de temps exacte" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Information sur TempsLibre" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "TempsLibre disponible aujourd'hui (véritable, disponible à l'ouverture de la " "session)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "TempsLibre restant :" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Format : " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "TempsLibre disponible aujourd'hui (enregistré, peut différer)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "TempsLibre restant (aujourd'hui) :" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Compteur d'activité en TempsLibre (véritable, disponible à l'ouverture de la " "session)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Activités en cours (véritable) :" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "TempsLibre utilisé aujourd'hui (enregistré, peut différer)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "TempsLibre utilisé (aujourd'hui) :" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "Information brève sur l'utilisation du temps et sur la gestion du temps pour " "aujourd'hui" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Infos et aujourd'hui" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Vous permet de configurer les limites de temps." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Limites des jours de semaine" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Choisissez les heures à ajuster pour les jours sélectionnés" #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Choisissez les minutes à ajuster pour les jours sélectionnés" #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Augmenter les limites quotidiennes par l'unité de temps choisie (heures ou " "minutes) pour le jour sélectionné.\n" "\n" "Notez que vous pouvez choisir plus d'une journée!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Réduire les limites quotidiennes par l'unité de temps choisie (heures ou " "minutes) pour le jour sélectionné.\n" "\n" "Notez que vous pouvez choisir plus d'une journée!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Liste des jours de la semaine et informations supplémentaires à propos des " "limites quotidiennes.\n" "\n" "Veuillez activer / désactiver les jours pour l'utilisateur." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Intervalles en heure pour le jour sélectionné et pour l'utilisateur.\n" "L'option \"∞\" indique que le temps utilisé durant cet intervalle ne sera pas " "comptabilisé dans la limite quotidienne. Il sera comptabilisé comme temps " "inactif.\n" "\n" "Notez que si la limite se termine à 24:00 et que la limite du jour suivant " "commence à 00:00, alors l'utilisateur peut continuer à travailler sans " "interruption à minuit.\n" "\n" "Notez que des intervalles multiples ne peuvent pas être configurés à " "l'intérieur de la même heure.\n" "Un intervalle peut commencer ou se terminer ou contenir une heure spécifique, " "mais pas plus d'une fois. C'est un comportement voulu, pas un bug.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Périodes horaires" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Créer un nouvel intervalle qui sera disponible à l'utilisateur.\n" "\n" "Après la création de l'intervalle, veuillez éditer son temps de début et de fin " "directement dans la liste des intervalles." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "" "Effacer l'intervalle de temps sélectionné de la liste des intervalles " "disponibles." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "entrez les intervalles en heures" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "vérifier" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Vérifier les intervalles de temps configurés est une étape nécessaire pour " "assurer que les intervalles sont valides.\n" "\n" "Les intervalles non conformes seront mis en évidence." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Limites hebdomadaires et mensuelles" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "j" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Choisissez les jours qui seront ajustés pour la période sélectionnée." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Choisissez les heures qui seront ajustées pour la période sélectionnée." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Choisissez les jours qui seront ajustés pour la période sélectionnée." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Augmenter l'allocation hebdomadaire ou mensuelle en utilisant l'unité de temps " "choisie (jours, heures ou minutes) pour la période sélectionnée." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Réduire l'allocation hebdomadaire ou mensuelle en utilisant l'unité de temps " "choisie (jours, heures ou minutes) pour la période sélectionnée." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Limites hebdomadaire et mensuelle pour l'utilisateur.\n" "\n" "Ces limites sont appliquées pour l'utilisateur en plus des autres limites " "configurées." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Appliquez les limites quotidiennes" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Appliquer toutes les modifications effectuées sur cette page" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Configuration des limites pour tous les jours de la semaine" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Configuration de la limite" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Réglages des activités TempsLibre" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "Options du TempsLibre" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Activer TempsLibre pour l'utilisateur sélectionné" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Activer TempsLibre" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Activer le contournement du TempsLibre pour l'utilisateur sélectionné.\n" "\n" "Ce réglage a préséance sur la comptabilisation du temps de sorte que le temps " "est comptabilisé seulement lorsqu'une application sur la liste des activités " "TempsLibre est activée!\n" "\n" "Ce réglage influence seulement la comptabilisation du temps. Les intervalles " "de temps sont toujours considérés.\n" "\n" "Si aucun processus n'est en cours d'utilisation, le temps est comptabilisé " "comme du temps inactif par l'utilisateur (non comptabilisé)!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Activer le contournement du TempsLibre:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Permettre les activités TempsLibre pendant les intervalles de temps non " "comptabilisés (\"∞\") pour l'utilisateur sélectionné.\n" "\n" "Ce réglage permet à l'utilisateur d'utiliser les applications configurées dans " "la liste des activités TempsLibre pendant les intervalles de temps indiqués " "comme non comptabilisés (\"∞\").\n" "\n" "Si ce réglage est activé, les activités utilisées ne seront pas comptabilisées " "dans la limite du TempsLibre, sinon les applications dans la liste des " "activités TempsLibre seront fermées aussitôt qu'elles sont lancées pendant les " "intervalles non comptabilisés (\"∞\")." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Permises pendant les intervalles (\"∞\") :" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Vous permet de configurer les limites du TempsLibre" #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "Limites du TempsLibre" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Augmenter l'allocation quotidienne de TempsLibre par l'unité de temps " "sélectionnée (heures ou minutes) pour les jours sélectionnés.\n" "\n" "Notez que vous pouvez sélectionner plus d'un jour!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Réduire l'allocation quotidienne de TempsLibre par l'unité de temps " "sélectionnée (heures ou minutes) pour les jours sélectionnés.\n" "\n" "Notez que vous pouvez sélectionner plus d'un jour!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Listes des jours de la semaine an informations supplémentaires du TempsLibre du " "jour.\n" "\n" "Veuillez activer / désactiver les jours pour l'utilisateur et régler " "l'allocation de temps pour les activités TempsLibre." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "Activités TempsLibre" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Ajouter une nouvelle activité TempsLibre.\n" "\n" "Veuillez spécifier le masque d'activité et une description conviviale " "directement dans la liste des activités." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Retirer l'item sélectionné de la liste des activités TempsLibre." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Veuillez spécifier la liste complète des noms des processus (exécutables) sans " "leur chemin de répertoire en tenant comptes des majuscules. Cette liste sera " "considérée prise en compte dans l'observation du système.\n" "\n" "Il est également possible d'utiliser des masques de RegExp, mais soyez prudent " "puisque ces expressions peuvent arrêter des processus valides pour " "l'utilisateur!\n" "\n" "NOTE : l'utilisation des RegExp est réservée aux utilisateurs expérimentés!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Appliquer la configuration du TempsLibre" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "Appliquer les limites et la configuration du TempsLibre sur cette page" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "Configuration du TempsLibre" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Options de configuration supplémentaires" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Déterminer si le temps de session inactif est comptabilisé.\n" "\n" "Si ce réglage n'est pas coché, le temps passé en mode console (excluant " "l'émulateur du terminal) et pendant le verrouillage de l'écran n'est PAS " "comptabilisé. L'effet varie selon les environnements de bureau (desktop " "environments)." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Suivi des sessions inactives :" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Choisissez si l’icône du cadenas de Timekpr-next et les notifications doivent " "être affichées à l’utilisateur.\n" "\n" "Veuillez noter que cocher cette option désactivera l’affichage de toutes les " "informations et notifications pour l’utilisateur !" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Masquer l'icône et les notifications:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Choisir une restriction / type de verrouillage pour l'utilisateur.\n" "\n" "NOTE : soyez prudent, réfléchissez bien et lisez chacune des options en " "modifiant la valeur par défaut de ce réglage!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Type de contrainte / verrouillage:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "interrompre les sessions" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "À l'expiration du temps, la session de l'utilisateur sera fermée.\n" "\n" "Cette options est une restriction!\n" "\n" "Cette option est la valeur par défaut et probablement celle que vous voulez " "utiliser!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "terminer les sessions" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "À l'expiration du temps, l'ordinateur sera arrêté.\n" "\n" "Cette option est une restriction!\n" "\n" "Veuillez évaluer avec soin si vous avez besoin d'utiliser cette restriction!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "extinction de l'ordinateur" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "À l'expiration du temps, l'ordinateur sera arrêté.\n" "\n" "Cette option est une restriction!\n" "\n" "Veuillez évaluer avec soin si vous avez besoin d'utiliser cette restriction!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "mise en veille de l'ordinateur" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "À l'expiration du temps, l'ordinateur sera mis en veille.\n" "\n" "Cette option est une restriction!\n" "\n" "Au réveil de l'ordinateur, s'il n'y a toujours plus de temps disponible, " "l'écran demeurera verrouillé et l'ordinateur sera remis en veille après un " "moment." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "mise en veille / rallumage de l'ordinateur" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "À l'expiration du temps, l'ordinateur sera mis en veille et réveillé au début " "du prochain intervalle disponible pour l'utilisateur.\n" "\n" "Cette option est une restriction et est mieux adaptée pour gérer l'auto-" "restriction de son ordinateur!\n" "\n" "Au réveil, s'il n'y a plus de temps disponible, l'écran sera verrouillé et " "l'ordinateur sera remis en veille après un moment." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "verrouillage de l'écran" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "À l'expiration du temps, l'écran de l'ordinateur sera verrouillé.\n" "\n" "Cette option est une restriction et est mieux adaptée pour gérer l'auto-" "restriction de son ordinateur!" #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Choisir un intervalle de temps où l'ordinateur peut être réveillé " "automatiquement.\n" "\n" "Notez que ce réglage fonctionne uniquement si le réveil par l'horloge du " "système est supporté et activé dans le BIOS / UEFI!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Délai de réveil:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Entrer le début l'heure de mise en fonction du réveil automatique.\n" "\n" "Notez que ce réglage fonctionne uniquement si le réveil par l'horloge du " "système est supporté et activé dans le BIOS / UEFI!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Entrer la fin l'heure de mise en fonction du réveil automatique.\n" "\n" "Notez que ce réglage fonctionne uniquement si le réveil par l'horloge du " "système est supporté et activé dans le BIOS / UEFI!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Appliquer la configuration" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Appliquer les changements supplémentaires effectués sur cette page" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Configuration supplémentaire" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Options supplémentaires" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Configuration de l'utilisateur trouvée" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Configuration associée à Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Paramètres de Timekpr-nExT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Niveau de journalisation de Timekpr-nExT.\n" "\n" "Évitez de changer ce réglage à moins que ça ne soit nécessaire. Vous risquez " "de ne rien trouver d'utile dans les logs.\n" "\n" "Valeurs possibles : 1- standard, 2- debug, 3- extra debut" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Fréquence de vérification de la comptabilisation des sessions utilisateurs.\n" "\n" "3 à 5 secondes représente une valeur optimale. Ne changez pas ce réglage sans " "savoir ce que vous faites." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Intervalle de rafraîchissement" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Spécifier le temps en secondes où Timekpr-nExT débute le compte à rebours en " "temps réel avant d'appliquer la restriction / le verrouillage de la session de " "l'utilisateur." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Spécifie la fréquence en secondes d'enregistrement de l'état de l'utilisateur " "sur le disque.\n" "\n" "Pour améliorer la performance en maintenant une bonne précision, Timekpr-nExT " "ajuste l'état de l'utilisateur en mémoire vive à la \"fréquenced de " "vérification\". Ce réglage spécifie uniquement la fréquence à laquelle " "l'information est consignée sur le disque dur." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Enregistrer le temps" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Nombre de secondes restantes avant d'appliquer la restriction / le verrouillage " "configuré pour la session.\n" "\n" "À la fin du compte à rebours, si l'utilisateur est toujours actif, la session " "sera prise en charge selon le réglage programmé dans le champ restriction / " "verrouillage et rien ne pourra être fait pour l'empêcher." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Temps de fin de session" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Compte à rebours" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Niveau du journal" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Nombre de secondes restantes avant d'envoyer un avertissement critique et final " "que le temps est sur le point d'expirer.\n" "\n" "NOTE : le moment des autres avertissements est réglable par utilisateur et par " "application!" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Avertissement final" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Contrôle des éléments de suivi de Timekpr-nExT" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Sessions suivies" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Ajouter le type de session suivie à la liste" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Retirer le type de session suivie de la liste" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Liste des sessions à vérifier.\n" "\n" "Veuillez ne pas changer ou expérimenter d'autres valeurs à moins de bien " "comprendre ce que vous faites (pas seulement pour essayer)." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Sessions exclues" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Ajouter le type de session exclue à la liste" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Retirer le type de session exclue de la liste" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Liste des sessions exclues de la vérification.\n" "\n" "Veuillez indiquer les noms d'utilisateur, par les noms réels. Par exemple, " "\"jsmith\", pas \"John Smith\"." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Utilisateurs exclus" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Ajouter l'utilisateur à la liste d'exclusion" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Retirer l'utilisateur de la liste d'exclusion" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "Liste des utilisateurs exclus de la vérification.\n" "\n" "Veuillez indiquer les noms d'utilisateur, par les noms réels. Par exemple, " "\"jsmith\", pas \"John Smith\"." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Ce réglage contrôle si la fonction TempsLibre est activée ou non.\n" "\n" "Ce réglage est le commutateur principal de la fonction TempsLibre. S'il est " "désactivé, TempsLibre sera désactivé pour tous les utilisateurs peu importe " "leurs configurations individuelles." #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "TempsLibre activé :" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "L'activation de ce réglage activera la vérification des arguments des processus " "lancés par ligne de commande (la vérification par défaut utilise uniquement le " "nom du processus).\n" "\n" "Lorsque ce réglage est activé, Timekpr-nExT vérifiera toute la ligne de " "commande jusqu'à 512 caractères pour mieux cibler les processus.\n" "\n" "Soyez prudent et vérifiez deux fois les expression RegExp pour chacun des " "masques des utilisateurs de TempsLibre." #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Vérification améliorée des activités :" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Appliquer les réglages de Timekpr-nExT" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Appliquer TOUS les réglages de Timekpr-nExT" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Paramètre de gestion de Timekpr-nExT" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "La configuration de Timekpr-nExT a été enregistrée" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "État du client de gestion de Timekpr-nExT" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Informations" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Attention" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Sévère" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Critique" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Client de Timekpr-nExT" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "État du client de Timekpr-nExT" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Enregistrer tous les changements" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Fermer la fenêtre" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Nom d'utilisateur actif" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Statistiques actuelles" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "" "Temps d'utilisation de la session ou depuis le redémarrage de Timekpr-nExT" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Temps d'utilisation (session) :" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "Temps d'inactivité de la session ou depuis le redémarrage de Timekpr-nExT" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Temps d'inactivité :" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "Temps restant. Peut s'étaler sur plus d'un jour." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Temps restant :" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Temps total consécutif disponible (aujourd'hui)" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Temps restant aujourd'hui :" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Jours et limites qui sont associés à l'utilisateur" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Jours et limites" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Afficher les intervalles de temps configurés et disponibles.\n" "\n" "L'option \"∞\" indique que le temps utilisé pendant l'intervalle ne sera pas " "comptabilisé dans la limite quotidienne. Il sera comptabilisé comme temps " "inactif." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervalles" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Limites quotidiennes" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Statistiques supplémentaires" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Temps utilisé cette semaine" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Temps utilisé ce mois-ci" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Choisir si le temps inactif est comptabilisé.\n" "\n" "Si ce réglage n'est pas coché, le temps passé en console (pas en émulateur de " "terminal) et pendant le verrouillage de l'écran ne sera PAS comptabilisé.\n" "L'effet de ce réglage varie selon les environnements de bureau (desktop " "environnment)." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Suivi inactif :" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Si le temps pour les sessions inactives est compté, si cette option est " "désactivée, le temps passé dans la console (pas le terminal) et si l'écran est " "verrouillé, n'est PAS pris en compte (ceci varie beaucoup selon les " "environments de bureau)" #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Limites supplémentaires" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Limite de temps pour la semaine" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Limite de temps (semaine) :" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Limite de temps pour le mois" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Limite de temps (mois) :" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "Statistiques de TempsLibre" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Durée de TempsLibre disponible aujourd'hui" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Durée de TempsLibre utilisée aujourd'hui" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Temps utilisé aujourd'hui :" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Cette option contourne la comptabilisation du temps par défaut.\n" "\n" "Si elle est cochée, le temps n'est comptabilisé que les activités de la liste " "d'activités sont en cours. Le reste du temps est considéré comme inactif." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Contournement de la limite de temps :" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Nombre d'acvitiés TempsLibre en cours" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Activités en cours :" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Permettre les activités pendant les intervalles non comptabilisés (\"∞\").\n" "\n" "Ce réglage permet l'utilisation des activités de la liste d'activités pendant " "les intervalles indiqués comme non comptabilisés (\"∞\"). Si ce réglage n'est " "pas activé, aucune activité ne sera autorisée!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Permettre durant \"∞\" :" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "Voici les jours et les limites disponibles pour la restriction des activités " "TempsLibre" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "Affiche les activités / applications qui font partie des restrictions du " "TempsLibre" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Liste des activités / applications" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Avertissements (temps restant) personnalisés.\n" "\n" "Veuillez configurer ces réglages selon vos préférences. Cependant, souvenez-" "vous que deux types d'avertissements ne peuvent être personnalisés : " "l'avertissement final avant que le temps ne soit écoulé et le compte à rebours " "quand le temps est presque écoulé.\n" "\n" "Information - un icône vert et un avertissement d'information est affiché.\n" "Attention - un icône jaune et n avertissement d'information est affiché.\n" "Sévère - un icône rouge et un avertissement important est affiché.\n" "Critique - un icône rouge et un avertissement critique est affiché. Ce type " "d'avertissement est généralement affiché par-dessus outtes les applications " "ouvertes et reste affiché jusqu'à ce qu'il soit manuellement fermé, mais reste " "dépendant de l'environnement de bureau (desktop environnment) utilisé." #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Réglage des avertissements" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Ajouter un niveau d'avertissement à la liste" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Retirer un niveau d'avertissement de la liste" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Réglage des avertissements (temps restant) du TempsLibre personnalisés.\n" "\n" "Veuillez configurer ces réglages selon vos préférences.\n" "\n" "Le point de réglage \"Temps\" indique le TempsLibre restant au moment de " "l'affichage de l'avertissement. Le point \"Importance\" gère les propriétés " "suivantes de l'avertissement:\n" "\n" "Information - un icône vert et un avertissement d'information est affiché.\n" "Attention - un icône jaune et n avertissement d'information est affiché.\n" "Sévère - un icône rouge et un avertissement important est affiché.\n" "Critique - un icône rouge et un avertissement critique est affiché. Ce type " "d'avertissement est généralement affiché par-dessus outtes les applications " "ouvertes et reste affiché jusqu'à ce qu'il soit manuellement fermé, mais reste " "dépendant de l'environnement de bureau (desktop environnment) utilisé." #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Réglage des avertissements du TempsLibre" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Ajouter un niveau d'avertissement du TempsLibre à la liste" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Retirer un niveau d'avertissement du TempsLibre de la liste" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Avertissements" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Activer les avertissements vocaux, s'ils sont disponibles.\n" "\n" "Il peut être possible d'activer les avertissements vocaux disponibles en " "installant le paquet \"python3-espeak\" ou \"python3-espeak-ng\"." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Utiliser des avertissements vocaux" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Régler le niveau de journalisation.\n" "\n" "Veuillez ne pas modifier ce paramètre à moins de savoir ce que vous faites." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Niveau du journal" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Activation des avertissements quand les limites ou les allocations changent" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Afficher les changements de limite" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Afficher tous les avertissements.\n" "\n" "Si ce réglage n'est pas coché, seuls les avertissements importants seront " "affichés." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Afficher tous les avertissements" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Afficher les secondes dans les avertissements.\n" "\n" "Des environnements de bureau (KDE par exemple) ne supportent pas le texte sur " "les icônes d'avertissement." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Afficher les secondes dans la zone d'avertissement" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Délai d'affichage d'un avertissement pour un avertissement normal à propos du " "temps restant et d'un changement de réglage.\n" "\n" "Cette valeur est en secondes.\n" "Une valeur de 0 indique que l'avertissement sera affiché jusqu'à ce qu'il soit " "manuellement fermé (n'est pas recommandé pour les avertissements non " "critiques).\n" "\n" "Notez que l'environnement du bureau peut contourner ce délai. Dans ce cas, ce " "réglage n'a aucun effet." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Délai de notification (sec)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Délai d'affichage d'un avertissement pour un avertissement critique à propos du " "temps restant (icône rouge).\n" "\n" "Cette valeur est en secondes.\n" "Une valeur de 0 indique que l'avertissement sera affiché jusqu'à ce qu'il soit " "manuellement fermé.\n" "\n" "Notez que l'environnement du bureau peut contourner ce délai. Dans ce cas, ce " "réglage n'a aucun effet." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Délai d'expiration des notifications critiques (s)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Activer le beep du système à l'affichage d'un nouvel avertissement de Timekpr-" "nExT.\n" "\n" "Cette option fonctionne uniquement pour les avertissements actifs.\n" "\n" "Si vous ne pouvez modifier ce réglage, c'est que votre environnement de bureau " "ne supporte pas l'utilisation du son dans les avertissements." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Utiliser un \"bip\" sonore pour les notifications" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Réglages" #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> régler le type de restriction/verrou (\"lock\" - verrouiller la session, " #~ "\"suspend\" - mettre en veille, \"suspendwake\" - mettre en veille et " #~ "réveiller, \"terminate\" - fermer la session, \"shutdown\" - arrêter " #~ "l'ordinateur), exemples" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Choisir d'afficher l'icône du cadenas de Timekpr-nExT et les avertissements " #~ "à l'utilisateur.\n" #~ "\n" #~ "Notez que désactiver cette option empêchera toute information de parvenir à " #~ "l'utilisateur!" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Activer les avertissements vocaux, s'ils sont disponibles.\n" #~ "\n" #~ "Il peut être possible d'activer les avertissements vocaux disponibles en " #~ "installant le paquet \"python3-espeak\"." #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Copyright (c) 2018-2021 Eduards Bezverhijs" timekpr-next/resource/locale/fr_CA/LC_MESSAGES/timekpr.mo000644 001750 001750 00000221424 15122253261 025034 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–²®–a˜|˜>™˜Kؘ:$™_™bw™GÚ™X"š{šZ˜š—󚮋›D:œ8œû¸œ´�¿¹ž'yŸ*¡Ÿ†ÌŸWS G« Uó cI¡9­¡ ç¡ñ¡X ¢#d¢Wˆ¢-à¢-£�<£;Ú£-¤.D¤-s¤@¡¤â¤)¥*¥C¥\¥;z¥[¶¥"¨5©6Q©*ˆ©³©:Ì©(ªF0ª'wªDŸª,䪫",«=O«Y�«Iç«>1¬Kp¬?¼¬Iü¬YF­T ­õ­'®.0® _®Si®V½±%µ:µ Qµ[µ2qµŸ¤µD¶U¶1q¶7£¶:Û¶T·k·Á}·?¸3H¸|¸—¸¯¸;Ƹ¹¹?¹\¹¼m¹£*º’κTa»¶»3Ñ»)¼/¼'2¾Z¾m¾*u¾Ä ¾Çe¿-À>À3RÀ5†ÀO¼À/ ÁI<Á3†ÁºÁÌÎÁ›Â2¯ÂLâÂ3/Ã5cÃN™Ã4èÃ/Ä&MÄtÄ&wÄGžÄæÄ—ùÄŸ‘Ç*1È\È rȽ}Ȥ;É“àÉtÊ ‰Ê–Ê+±Ê:ÝÊËK+Ë5wË ­Ë:¹ËôËûĘ̈/Ì™ØÌ8rÍœ«ÍÕHΠÏ¿Ï(ÑÏBúÏ%=ÐcÐuÐ}ЙеÐÒÐ&áÐFÑÖOÒS&ÓzÓ ƒÓŽÓC¤ÓDèÓO-Ô?}Ô½Ô:ÙÔÕ>)ÕXhÕ=ÁÕ(ÿÕC(Ö&lÖ“Ö"¨ÖËÖ)áÖ ×A!×#c×=‡×PÅ×3Ø2JØÒ}ØPÚ5pÚO¦Ú3öÚ*ÛCÛ;XÛ-”Û-ÂÛ!ðÛ-ÜC@Ü-„Ü ²Ü4¼ÜIñÜ";Ý"^Ý�Ý —ݸÝ-ÍÝFûÝ*BÞ½mÞÙ+ß%à-+áøYâûRã(NäÃwå»;æ÷æ!ç#)çMç Vç"wç2šç¯ÍçK}èyÉèšCé Þé*èéê.3êbê.zêH©ê+òê,ë>KëAŠëKÌëì76ì9nìE¨ì=îìB,íXoí4ÈíÁýí3¿ï/óïà#ð_ñ«dòsô¹„ô>öTF÷â›÷s~øòùIøùHBú‹úK¢úîúûû9ûVûgû�û^žûýûü%:ü`ü ~ü$Ÿü Äüåü3ÿüK3ýý6œý4Óýþ %þ%2þ5Xþ+ŽþºþÒþ5éþ,ÿâLÿ/'Go+r*ž0É*úC%9i'£Ëëü @$LeK²[þCZAž/à"73>k#ª'Î?öB6'y1¡lÓ‡@bÈK+fwOÞH.cwLÛB( ]k 5É Vÿ EV _œ Iü ZF Y¡ Gû aC K¥ 6ñ P( 9y A³ <õ M2z€_û<[V˜?ïF/NvJÅ?:PU‹HáF*_qIÑ?Y[Eµû$&°K²ü¯ ÂÌ é#ö�Nª®ù§¨tPþŧĿl*,)WJ�BÌRNb± ³ÔêðPòC ESi‚„ˆ1Œ¾Úí*3Rkæt["a"v" ‹"~•"c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:17+0300 Last-Translator: Eduards Bezverhijs Language-Team: French (Canada) Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s minute%(n)s minutes%(n)s seconde%(n)s secondes%(n)s seconde à votre session%(n)s secondes à votre session%(n)s seconde de TempsLibre restante%(n)s secondes de TempsLibre restantes%(n)s utilisateur au total :%(n)s utilisateurs au total:---=== REMARQUER ===---obtenez des informations sur l'heure de l'utilisateur en temps réel à partir du serveur, exemple==> enregistrer la liste des utilisateurs à partir du serveur, exemple==> obtenir les informations de configuration utilisateur et d'heure du serveur, exemple==> afficher l'aide, exemple==> régler les masques des processus pour lesquels le TempsLibre est considéré, exemple==> régler le TempsLibre restant : "+" pour ajouter du temps, "-" pour réduire le temps, "=" pour régler le temps exact, exemple (ajouter une heure)==> régler les limites de TempsLibre pour les jours choisis. Le nombre de valeurs ne doit pas excéder le nombre de jours de "Temps libre" permis pour l'utilisateur, exemple==> régler les jours permis pour les activités TempsLibre, exemple==> régler les jours permis pour l'utilisateur, exemple==> régler les heures permises pour le jour choisi, ou "ALL" pour tous les jours. Utilisez des crochets [x-y] pour indiquer un intervalle. Utilisez ! devant l'heure pour ne pas tenir compte de cette heure (heure disponible à l'utilisateur), exemple==> régler le type de restriction/verrou ("lock" - verrouiller la session, "suspend" - mettre en veille, "suspendwake" - mettre en veille et réveiller, "terminate" - fermer la session, "kill" - tuer les sessions, "shutdown" - arrêter l'ordinateur), exemples==> régler le temps restant pour l'utilisateur à partir de maintenant: "+" (ajouter l'heure), "-" (soustraire l'heure), "=" (définir l'heure exacte disponible), exemple (ajouter une heure)==> régler la limite par mois, exemple==> régler la limite par semaine, exemple==> régler les limites de temps pour les jours choisis. Le nombre de valeurs ne doit pas excéder le nombre de jours permis, exemple==> choisir si TempsLibre est permis durant les intervalles non comptabilisés, exemple==> activer/désactiver l'option TempsLibre pour l'utilisateur, exemple==> choisir si TempsLibre doit être utilisé au lieu de l'activité normale, exemple==> définir s'il faut masquer l'icône de la barre d'état et empêcher les notifications, exemple==> choisir de surveiller les sessions inactives, exempleÀ proposÀ propos de Timekpr-nExTCompteur d'activité en TempsLibre (véritable, disponible à l'ouverture de la session)Liste des activités / applicationsTempsLibre disponible aujourd'hui (véritable, disponible à l'ouverture de la session)Ajouter l'utilisateur à la liste d'exclusionAjouter le type de session exclue à la listeAjouter une nouvelle activité TempsLibre. Veuillez spécifier le masque d'activité et une description conviviale directement dans la liste des activités.Ajouter un niveau d'avertissement du TempsLibre à la listeAjouter un niveau d'avertissement à la listeAjouter la quantité spécifiée (récompense)Ajouter le type de session suivie à la listeLe TempsLibre supplémentaire pour l'utilisateur a été traitéConfiguration supplémentaireOptions de configuration supplémentairesLimites supplémentairesOptions supplémentairesStatistiques supplémentairesLe temps supplémentaire pour l'utilisateur a été traitéPermettre les activités TempsLibre pendant les intervalles de temps non comptabilisés ("∞") pour l'utilisateur sélectionné. Ce réglage permet à l'utilisateur d'utiliser les applications configurées dans la liste des activités TempsLibre pendant les intervalles de temps indiqués comme non comptabilisés ("∞"). Si ce réglage est activé, les activités utilisées ne seront pas comptabilisées dans la limite du TempsLibre, sinon les applications dans la liste des activités TempsLibre seront fermées aussitôt qu'elles sont lancées pendant les intervalles non comptabilisés ("∞").Permettre les activités pendant les intervalles non comptabilisés ("∞"). Ce réglage permet l'utilisation des activités de la liste d'activités pendant les intervalles indiqués comme non comptabilisés ("∞"). Si ce réglage n'est pas activé, aucune activité ne sera autorisée!Ajustements des allocationsLes jours permis pour l'utilisateur ont été traitésPermises pendant les intervalles ("∞") :Permettre durant "∞" :Les heures permises pour l'utilisateur ont été traitéesAppliquer la configuration du TempsLibreAppliquer les limites et la configuration du TempsLibre sur cette pageAppliquer les réglages de Timekpr-nExTAppliquer les changements supplémentaires effectués sur cette pageAppliquer TOUS les réglages de Timekpr-nExTAppliquer la configurationAppliquez les limites quotidiennesAppliquer toutes les modifications effectuées sur cette pageInformation brève sur l'utilisation du temps et sur la gestion du temps pour aujourd'huiChoisissez les jours qui seront ajustés pour la période sélectionnée.Choisissez les heures à ajuster pour les jours sélectionnésChoisissez les heures qui seront ajustées pour la période sélectionnée.Choisissez les minutes à ajuster pour les jours sélectionnésChoisissez les jours qui seront ajustés pour la période sélectionnée.Choisissez ceci pour ajuster l'allocation de TempsLibre de l'utilisateur pour aujourd'huiChoisissez ceci pour ajuster l'allocation de temps de l'utilisateur pour aujourd'huiFermer la fenêtreÉCHEC de l'opération: accès interditÉCHEC de l'opération: communication refuséeRéglagesRéglage des avertissements (temps restant) du TempsLibre personnalisés. Veuillez configurer ces réglages selon vos préférences. Le point de réglage "Temps" indique le TempsLibre restant au moment de l'affichage de l'avertissement. Le point "Importance" gère les propriétés suivantes de l'avertissement: Information - un icône vert et un avertissement d'information est affiché. Attention - un icône jaune et n avertissement d'information est affiché. Sévère - un icône rouge et un avertissement important est affiché. Critique - un icône rouge et un avertissement critique est affiché. Ce type d'avertissement est généralement affiché par-dessus outtes les applications ouvertes et reste affiché jusqu'à ce qu'il soit manuellement fermé, mais reste dépendant de l'environnement de bureau (desktop environnment) utilisé.Avertissements (temps restant) personnalisés. Veuillez configurer ces réglages selon vos préférences. Cependant, souvenez-vous que deux types d'avertissements ne peuvent être personnalisés : l'avertissement final avant que le temps ne soit écoulé et le compte à rebours quand le temps est presque écoulé. Information - un icône vert et un avertissement d'information est affiché. Attention - un icône jaune et n avertissement d'information est affiché. Sévère - un icône rouge et un avertissement important est affiché. Critique - un icône rouge et un avertissement critique est affiché. Ce type d'avertissement est généralement affiché par-dessus outtes les applications ouvertes et reste affiché jusqu'à ce qu'il soit manuellement fermé, mais reste dépendant de l'environnement de bureau (desktop environnment) utilisé.Configuration pour l'utilisateur %s :Configuration trouvéeConnectéConnexion en cours…Temps restant. Peut s'étaler sur plus d'un jour.Temps disponible en continu. Peut être utilisé sur plus que le jour courant (la valeur réelle est disponible quand la session de l'utilisateur est ouverte)Temps restant :Paramètres de Timekpr-nExTContrôle des éléments de suivi de Timekpr-nExTLes types de sessions de contrôle ne sont pas envoyésLa liste des types de sessions de contrôle est incorrecteLa liste des types de sessions de contrôle est incorrecte et ne peux être régléeCompte à reboursCréer un nouvel intervalle qui sera disponible à l'utilisateur. Après la création de l'intervalle, veuillez éditer son temps de début et de fin directement dans la liste des intervalles.CritiqueDélai d'expiration des notifications critiques (s)Statistiques de TempsLibreNom d'utilisateur actifStatistiques actuellesConfiguration des limites pour tous les jours de la semaineLimites quotidiennesJourLes limites quotidiennes pour l'utilisateur ont été traitéesJours et limitesRéduire l'allocation quotidienne de TempsLibre par l'unité de temps sélectionnée (heures ou minutes) pour les jours sélectionnés. Notez que vous pouvez sélectionner plus d'un jour!Réduire les limites quotidiennes par l'unité de temps choisie (heures ou minutes) pour le jour sélectionné. Notez que vous pouvez choisir plus d'une journée!Réduire l'allocation hebdomadaire ou mensuelle en utilisant l'unité de temps choisie (jours, heures ou minutes) pour la période sélectionnée.Effacer l'intervalle de temps sélectionné de la liste des intervalles disponibles.JP Lord Activer TempsLibre pour l'utilisateur sélectionnéTempsLibre pour l'utilisateur est activéActiver le contournement du TempsLibre pour l'utilisateur sélectionné. Ce réglage a préséance sur la comptabilisation du temps de sorte que le temps est comptabilisé seulement lorsqu'une application sur la liste des activités TempsLibre est activée! Ce réglage influence seulement la comptabilisation du temps. Les intervalles de temps sont toujours considérés. Si aucun processus n'est en cours d'utilisation, le temps est comptabilisé comme du temps inactif par l'utilisateur (non comptabilisé)!Activer le contournement du TempsLibre:Activer TempsLibreActivéVérification améliorée des activités :Entrer la fin l'heure de mise en fonction du réveil automatique. Notez que ce réglage fonctionne uniquement si le réveil par l'horloge du système est supporté et activé dans le BIOS / UEFI!Entrer le début l'heure de mise en fonction du réveil automatique. Notez que ce réglage fonctionne uniquement si le réveil par l'horloge du système est supporté et activé dans le BIOS / UEFI!Sessions excluesUtilisateurs exclusLes types de sessions exclues ne sont pas eonvoyésLa liste des types de sessions exclues est incorrecteLa liste des types de sessions exclues est incorrecte et ne peux être régléeLa liste des utilisateurs exclus est incorrecteLa liste des utilisateurs exclus est incorrecte et ne peux être régléeLa liste des utilisateurs exclus n'est pas envoyéeÉchec de connexionLa fonctionnalité "%%s", qui est utilisée pour détecter le temps d'inactivité, ne peut pas être activée! Le temps inactif / inactif peut ne pas être pris en compte lorsque l'écran est verrouillé!Avertissement finalAvertissement final : le temps "%%s" est incorrectAvertissement final : le temps "%%s" est incorrect et ne peut être utiliséAvertissement final que le temps n'est pas écouléL'avertissement de temps écoulé "%%s" est incorrectL'avertissement de temps écoulé "%%s" est incorrect et ne peut être régléL'avertissement final sur le temps n'est pas envoyéFormat : Format : DeMasquer l'icône et les notifications:Masquer l'icône de la barre d'état pour l'utilisateur a été traitéPériodes horairesIntervalles en heure pour le jour sélectionné et pour l'utilisateur. L'option "∞" indique que le temps utilisé durant cet intervalle ne sera pas comptabilisé dans la limite quotidienne. Il sera comptabilisé comme temps inactif. Notez que si la limite se termine à 24:00 et que la limite du jour suivant commence à 00:00, alors l'utilisateur peut continuer à travailler sans interruption à minuit. Notez que des intervalles multiples ne peuvent pas être configurés à l'intérieur de la même heure. Un intervalle peut commencer ou se terminer ou contenir une heure spécifique, mais pas plus d'une fois. C'est un comportement voulu, pas un bug. Durée d'inactivité de l'utilisateur depuis la dernière ouverture de session (la valeur réelle est disponible quand la session de l'utilisateur est ouverte)Erreur d'initialisation de l'icône (%%s)!Icône, n'est-ce pas?importanceAugmenter l'allocation quotidienne de TempsLibre par l'unité de temps sélectionnée (heures ou minutes) pour les jours sélectionnés. Notez que vous pouvez sélectionner plus d'un jour!Augmenter les limites quotidiennes par l'unité de temps choisie (heures ou minutes) pour le jour sélectionné. Notez que vous pouvez choisir plus d'une journée!Augmenter l'allocation hebdomadaire ou mensuelle en utilisant l'unité de temps choisie (jours, heures ou minutes) pour la période sélectionnée.Infos et aujourd'huiInformationsInformation sur TempsLibreInformation sur le temps restant / utiliséErreur de connexion interne, veuillez consulter le journalIntervalle retiréLe début de l'intervalle ne peut être identique à la fin de l'intervalleLe début de l'intervalle ne peut être après la finIntervallesDemeurez en contrôle de l'utilisation de votre ordinateurLimiteConfiguration de la limiteLimites et configurationListe des sessions à vérifier. Veuillez ne pas changer ou expérimenter d'autres valeurs à moins de bien comprendre ce que vous faites (pas seulement pour essayer).Liste des sessions exclues de la vérification. Veuillez indiquer les noms d'utilisateur, par les noms réels. Par exemple, "jsmith", pas "John Smith".Liste des noms d'utilisateur disponibles sur le systèmeListe des utilisateurs exclus de la vérification. Veuillez indiquer les noms d'utilisateur, par les noms réels. Par exemple, "jsmith", pas "John Smith".Listes des jours de la semaine an informations supplémentaires du TempsLibre du jour. Veuillez activer / désactiver les jours pour l'utilisateur et régler l'allocation de temps pour les activités TempsLibre.Liste des jours de la semaine et informations supplémentaires à propos des limites quotidiennes. Veuillez activer / désactiver les jours pour l'utilisateur.Niveau du journalLe niveau de journal "%%s" est incorrectLe niveau de journal "%%s" est incorrect et the peut être régléLe niveau de journal n'est pas passéNiveau du journalMensuelNotes à lire attentivementRéglage des avertissementsDélai de notification (sec)AvertissementsNombre d'acvitiés TempsLibre en coursNombre de secondes restantes avant d'appliquer la restriction / le verrouillage configuré pour la session. À la fin du compte à rebours, si l'utilisateur est toujours actif, la session sera prise en charge selon le réglage programmé dans le champ restriction / verrouillage et rien ne pourra être fait pour l'empêcher.Nombre de secondes restantes avant d'envoyer un avertissement critique et final que le temps est sur le point d'expirer. NOTE : le moment des autres avertissements est réglable par utilisateur et par application!ERREUR D'ANALYSE DE PARAMÈTRE (veuillez vérifier la validité du paramètre): %%sPériodeTempsLibreActivités TempsLibreLes activités de TempsLibre pour l'utilisateur ont été traitéesLes jours de TempsLibre permis pour l'utilisateur ont été traitésLe TempsLibre permis pendant les intervalles non comptabilisés a été traitéTempsLibre disponible aujourd'hui (enregistré, peut différer)Configuration du TempsLibreLes limites quotidiennes de TempsLibre ont été traitéesTempsLibre activé :Le suivi amélioré de l'option TempsLibre "%%s" est incorrectLe suivi amélioré de l'option TempsLibre "%%s" est incorrect et ne peut être utiliséLe suivi amélioré de l'option TempsLibre n'est pas expiréeL'option TempsLibre "%%s" est incorrecteL'option TempsLibre "%%s" est incorrecte et ne peut être utiliséeL'option TempsLibre n'est pas expiréeTempsLibre restant :TempsLibre restant (aujourd'hui) :Limites du TempsLibreRéglage des avertissements du TempsLibreOptions du TempsLibreLe contournement du TempsLibre pour l'utilisateur a été traitéTempsLibre utilisé (aujourd'hui) :TempsLibre utilisé aujourd'hui (enregistré, peut différer)Relancez l'application si vous êtes super utilisateur et que Timekpr-nExT rouleVeuillez choisir un jour avant de fixer les limitesVeuillez choisir un intervalle de temps à retirerVeuillez spécifier la liste complète des noms des processus (exécutables) sans leur chemin de répertoire en tenant comptes des majuscules. Cette liste sera considérée prise en compte dans l'observation du système. Il est également possible d'utiliser des masques de RegExp, mais soyez prudent puisque ces expressions peuvent arrêter des processus valides pour l'utilisateur! NOTE : l'utilisation des RegExp est réservée aux utilisateurs expérimentés!Intervalle de rafraîchissementLa période de rafraîchissement "%%s" est incorrecteLa période de rafraîchissement "%%s" est incorrecte et ne peut être régléeLa période de rafraîchissement n'est pas envoyéeDescription du processusMasque des processusRetirer un niveau d'avertissement du TempsLibre de la listeRetirer l'utilisateur de la liste d'exclusionRetirer le type de session exclue de la listeRetirez le type de session exclueRetirer un niveau d'avertissement de la listeRetirer l'item sélectionné de la liste des activités TempsLibre.Retirer le type de session suivie de la listeRétablirRétablir les paramètres de la version enregistréeLe type de contrainte / verrouillage pour l'utilisateur a été appliquéType de contrainte / verrouillage:Activités en cours (véritable) :Activités en cours :Enregistrer tous les changementsEnregistrer le tempsLe temps d'enregistrement "%%s" est incorrectLe temps d'enregistrement "%%s" est incorrect et ne peut être régléLe temps d'enregistrement n'est pas passéChoisir une restriction / type de verrouillage pour l'utilisateur. NOTE : soyez prudent, réfléchissez bien et lisez chacune des options en modifiant la valeur par défaut de ce réglage!Choisir un intervalle de temps où l'ordinateur peut être réveillé automatiquement. Notez que ce réglage fonctionne uniquement si le réveil par l'horloge du système est supporté et activé dans le BIOS / UEFI!Choisir si le temps inactif est comptabilisé. Si ce réglage n'est pas coché, le temps passé en console (pas en émulateur de terminal) et pendant le verrouillage de l'écran ne sera PAS comptabilisé. L'effet de ce réglage varie selon les environnements de bureau (desktop environnment).Déterminer si le temps de session inactif est comptabilisé. Si ce réglage n'est pas coché, le temps passé en mode console (excluant l'émulateur du terminal) et pendant le verrouillage de l'écran n'est PAS comptabilisé. L'effet varie selon les environnements de bureau (desktop environments).Si le temps pour les sessions inactives est compté, si cette option est désactivée, le temps passé dans la console (pas le terminal) et si l'écran est verrouillé, n'est PAS pris en compte (ceci varie beaucoup selon les environments de bureau)Choisissez si l’icône du cadenas de Timekpr-next et les notifications doivent être affichées à l’utilisateur. Veuillez noter que cocher cette option désactivera l’affichage de toutes les informations et notifications pour l’utilisateur !Activer le beep du système à l'affichage d'un nouvel avertissement de Timekpr-nExT. Cette option fonctionne uniquement pour les avertissements actifs. Si vous ne pouvez modifier ce réglage, c'est que votre environnement de bureau ne supporte pas l'utilisation du son dans les avertissements.Activer les avertissements vocaux, s'ils sont disponibles. Il peut être possible d'activer les avertissements vocaux disponibles en installant le paquet "python3-espeak" ou "python3-espeak-ng".Fréquence de vérification de la comptabilisation des sessions utilisateurs. 3 à 5 secondes représente une valeur optimale. Ne changez pas ce réglage sans savoir ce que vous faites.Type de sessionRégler la limite de temps exacteRéglages des activités TempsLibreSévèreAfficher tous les avertissementsAfficher les changements de limiteAfficher les secondes dans la zone d'avertissementSpécifier le temps en secondes où Timekpr-nExT débute le compte à rebours en temps réel avant d'appliquer la restriction / le verrouillage de la session de l'utilisateur.Activation des avertissements quand les limites ou les allocations changentAfficher tous les avertissements. Si ce réglage n'est pas coché, seuls les avertissements importants seront affichés.Afficher les secondes dans les avertissements. Des environnements de bureau (KDE par exemple) ne supportent pas le texte sur les icônes d'avertissement.DémarréÉtat du client de gestion de Timekpr-nExTÉtat du client de Timekpr-nExTSoustraire la quantité spécifiée (punition)Temps de fin de sessionL'heure de fin de session "%%s" est incorrecteL'heure de fin de session "%%s" est incorrecte et ne peut être régléeL'heure de fin de session n'est pas passéeL'intervalle chevauche l'intervalle existantLa fin de l'intervalle est en conflit avec la valeur existanteLe début de l'intervalle est en conflit avec la valeur existanteLe début ou la fin de l'intervalle est un doublon de l'intervalle existantLa commande est incorrecte :Nombre d'heure(s) à ajuster à la limite d'aujourd'huiNombre de minute(s) à ajuster à la limite d'aujourd'huiL'utilisation du client de gestion de Timekpr-nExT est la suivante :Il y a un problème de communication avec Timekpr-nExT (%%s)!Il y a un problème de connexion au service de Timekpr-nExT (%%s)!Voici les jours et les limites disponibles pour la restriction des activités TempsLibreJours et limites qui sont associés à l'utilisateurVous êtes dans l'app de configuration pour Timekpr-nExT. Elle vous permet de régler les limites de temps pour chaque utilisateur ainsi que les options générales de Timekpr-nExT. Vous devez exécuter cette application en tant que superutilisateur ou faire partie du groupe timekpr. Notez que "Configuration de Timekpr-nExT" est disponible seulement en mode superutilisateur (administrateur). Configurez prudemment : ne bloquez pas votre accès!Vous permet de configurer les limites du TempsLibreVous permet de configurer les limites de temps.Cette option contourne la comptabilisation du temps par défaut. Si elle est cochée, le temps n'est comptabilisé que les activités de la liste d'activités sont en cours. Le reste du temps est considéré comme inactif.Délai d'affichage d'un avertissement pour un avertissement critique à propos du temps restant (icône rouge). Cette valeur est en secondes. Une valeur de 0 indique que l'avertissement sera affiché jusqu'à ce qu'il soit manuellement fermé. Notez que l'environnement du bureau peut contourner ce délai. Dans ce cas, ce réglage n'a aucun effet.Délai d'affichage d'un avertissement pour un avertissement normal à propos du temps restant et d'un changement de réglage. Cette valeur est en secondes. Une valeur de 0 indique que l'avertissement sera affiché jusqu'à ce qu'il soit manuellement fermé (n'est pas recommandé pour les avertissements non critiques). Notez que l'environnement du bureau peut contourner ce délai. Dans ce cas, ce réglage n'a aucun effet.Régler le niveau de journalisation. Veuillez ne pas modifier ce paramètre à moins de savoir ce que vous faites.L'activation de ce réglage activera la vérification des arguments des processus lancés par ligne de commande (la vérification par défaut utilise uniquement le nom du processus). Lorsque ce réglage est activé, Timekpr-nExT vérifiera toute la ligne de commande jusqu'à 512 caractères pour mieux cibler les processus. Soyez prudent et vérifiez deux fois les expression RegExp pour chacun des masques des utilisateurs de TempsLibre.Ce réglage contrôle si la fonction TempsLibre est activée ou non. Ce réglage est le commutateur principal de la fonction TempsLibre. S'il est désactivé, TempsLibre sera désactivé pour tous les utilisateurs peu importe leurs configurations individuelles.Affiche les activités / applications qui font partie des restrictions du TempsLibreAfficher les intervalles de temps configurés et disponibles. L'option "∞" indique que le temps utilisé pendant l'intervalle ne sera pas comptabilisé dans la limite quotidienne. Il sera comptabilisé comme temps inactif.Spécifie la fréquence en secondes d'enregistrement de l'état de l'utilisateur sur le disque. Pour améliorer la performance en maintenant une bonne précision, Timekpr-nExT ajuste l'état de l'utilisateur en mémoire vive à la "fréquenced de vérification". Ce réglage spécifie uniquement la fréquence à laquelle l'information est consignée sur le disque dur.TempsVotre allocation a changé, veuillez prendre note de votre nouveau temps!Temps disponible aujourd'hui (enregistré déclaré, pas en temps réel)Temps inactif (réel):Temps d'inactivité de la session ou depuis le redémarrage de Timekpr-nExTTemps d'inactivité :Temps restant (réel):Temps restant (aujourd'hui):Temps restant aujourd'hui :Temps restant...Limite de temps (mois) :Limite de temps (semaine) :Votre configuration de temps a changé, veuillez prendre note de votre nouvelle configuration!Limite de temps pour le moisLimite de temps pour la semaineContournement de la limite de temps :Temps d'utilisation (mois) :Temps d'utilisation (session) :Temps d'utilisation (aujourd'hui) :Temps d'utilisation (semaine) :Temps utilisé ce mois-ciTemps d'utilisation ce mois-ci (pas en temps réel)Temps d'utilisation de la session ou depuis le redémarrage de Timekpr-nExTTemps utilisé cette semaineTemps d'utilisation cette semaine (pas en temps réel)Temps d'utilisation aujourd'hui (pas en temps réel)Temps utilisé aujourd'hui :Timekpr-nExTParamètre de gestion de Timekpr-nExTLa configuration de Timekpr-nExT a été enregistréeAvertissement de TempsLibre de Timekpr-nExTGestion de Timekpr-nExTClient de Timekpr-nExTLa configuration de Timekpr-nExT a été enregistréeL'interface de Timekpr-nExT n'est pas prêteNiveau de journalisation de Timekpr-nExT. Évitez de changer ce réglage à moins que ça ne soit nécessaire. Vous risquez de ne rien trouver d'utile dans les logs. Valeurs possibles : 1- standard, 2- debug, 3- extra debutMessage de Timekpr-nExTConfiguration associée à Timekpr-nExTÀDurée de TempsLibre disponible aujourd'huiDurée de TempsLibre utilisée aujourd'huiTemps total consécutif disponible (aujourd'hui)Le suivi d'inactivité "%%s" est incorrectLe suivi d'inactivité "%%s" est incorrect et ne peut être régléLe suivi d'inactivité pour l'utilisateur a été traitéLe suivi d'inactivité n'est pas passéSuivi des sessions inactives :Suivi inactif :Sessions suiviesERREUR INATTENDUE: %%SERREUR inattendue en obtenant la configuration. Consultez le logERREUR inattendue en obtenant la configuration utilisateur. Consultez le logERREUR inattendue (obtenir la liste des utilisateurs). Vérifiez le journalERREUR inattendue lors de la mise à jour de la configuration utilisateur. Consultez le logERREUR inattendue (mise à jour du contrôle). Vérifiez le journalERREUR inattendue (chargement de la config). Vérifiez le journalUtiliser un "bip" sonore pour les notificationsUtiliser des avertissements vocauxLa configuration de l'utilisateur "%%s" est introuvableLa fichier de contrôle de l'utilisateur "%%s" est introuvableL'utilisateur "%%s" est introuvableConfiguration de l'utilisateur trouvéeLes limites de TempsLibre pour l'utilisateur sont enregistréesLes options supplémentaires pour l'utilisateur sont enregistréesConfiguration de l'utilisateur trouvéeLes limites pour l'utilisateur sont enregistréesLa permission de TempsLibre durant les intervalles non comptabilisés pour l'utilisateur "%%s" est incorrectLa permission de TempsLibre durant les intervalles non comptabilisés pour l'utilisateur "%%s" est incorrect et ne peux être utiliséeLe TempsLibre durant les intervalles non comptabilisés pour l'utilisateur "%%s" n'est pas expiréLa limite quotidienne de TempsLibre pour l'utilisateur "%%s" est incorrecteLa limite quotidienne de TempsLibre pour l'utilisateur "%%s" est incorrecte et ne peut être utiliséeLa limite quotidienne de TempsLibre pour l'utilisateur "%%s" n'est pas expiréeLa liste des jours de TempsLibre pour l'utilisateur "%%s" est incorrecteLa liste des jours de TempsLibre pour l'utilisateur "%%s" est incorrecte et ne peut être utiliséeLa liste des jours de TempsLibre pour l'utilisateur "%%s" n'est pas expiréeL'activation de TempsLibre pour l'utilisateur "%%s" est incorrecteL'activation de TempsLibre pour l'utilisateur "%%s" est incorrecte et ne peut être utiliséeTempsLibre pour l'utilisateur "%%s" n'est pas expiréLes opérations sur le TempsLibre de l'utilisateur "%%s" peuvent être "+", "-" ou "="Le contournement du TempsLibre pour l'utilisateur "%%s" est incorrectLe contournement du TempsLibre pour l'utilisateur "%%s" est incorrect et ne peut être utiliséLe contournement du TempsLibre pour l'utilisateur "%%s" n'est pas expiréLa limite de TempsLibre pour l'utilisateur "%%s" est incorrecte et ne peut être utiliséeLes heures permises de l'utilisateur "%%s" sont incorrectes et ne peuvent être régléesLa liste des limites quotidiennes de l'utilisateur "%%s" est incorrecteLa liste des limites quotidiennes de l'utilisateur "%%s" est incorrecte et ne peut être régléeLa liste des limites quotidiennes de l'utilisateur "%%s" n'est pas envoyéeLa liste de jour de l'utilisateur "%%s" est incorrecteLa liste de jour de l'utilisateur "%%s" est incorrecte et ne peut être régléeLa liste de jour de l'utilisateur "%%s" n'est pas passéeLe numéro du jour de l'utilisateur "%%s" doit être entre 1 et 7Le numéro du jour de l'utilisateur "%%s" doit être inscritL'indicateur de masquage de l'icône "%%s" de l'utilisateur n'est pas correctLe réglage pour masquer 'icône de la barre d'état pour l'utilisateur "%%s" et incorrect et ne peut pas être configuréL'indicateur d'icône de masquage de la barre d'état "%%s" de l'utilisateur n'est pas transmisL'allocation mensuelle de l'utilisateur "%%s" est incorrecteL'allocation mensuelle de l'utilisateur "%%s" est incorrecte et ne peut être régléeL'allocation mensuelle de l'utilisateur "%%s" n'est pas passéeLa contrainte / le verrouillage pour l'utilisateur "%%s" est incorrectLe type de contrainte / verrouillage est incorrect et ne peut être configuréLa contrainte / le verrouillage pour l'utilisateur "%%s" n'est pas atteintLa limite de TempsLibre pour l'utilisateur "%%s" est incorrecteLa limite de temps pour l'utilisateur "%%s" est incorrecteLa limite de temps pour l'utilisateur "%%s" est incorrecte et ne peux être utiliséeLe temps d'utilisation de l'utilisateur "%%s" peut être "+", "-" ou "="Le témoin de suivi d'inactivité de l'utilisateur "%%s" est incorrectLe témoin de suivi d'inactivité de l'utilisateur "%%s" est incorrect et ne peut être régléLe témoin de suivi d'inactivité de l'utilisateur "%%s" n'est pas passéL'allocation hebdomadaire de l'utilisateur "%%s" est incorrecteL'allocation hebdomadaire de l'utilisateur "%%s" est incorrecte et ne peut être régléeL'allocation hebdomadaire de l'utilisateur "%%s" n'est pas dépasséeNom d’utilisateurNom d’utilisateur :Paramètres reliés aux utilisateursVérifier les intervalles de temps configurés est une étape nécessaire pour assurer que les intervalles sont valides. Les intervalles non conformes seront mis en évidence.AVERTISSEMENT: l'interface de gestion de Timekpr-nExT devait être lancée en mode graphique, mais aucun affichage n'est disponible. Elle fonctionne donc en ligne de commande...Délai de réveil:AttentionLimites des jours de semaineHebdomadaireLimites hebdomadaires et mensuellesLimites hebdomadaire et mensuelle pour l'utilisateur. Ces limites sont appliquées pour l'utilisateur en plus des autres limites configurées.Les limites hebdomadaires et mensuelles pour l'utilisateur ont été traitéesÀ l'expiration du temps, l'écran de l'ordinateur sera verrouillé. Cette option est une restriction et est mieux adaptée pour gérer l'auto-restriction de son ordinateur!À l'expiration du temps, l'ordinateur sera arrêté. Cette option est une restriction! Veuillez évaluer avec soin si vous avez besoin d'utiliser cette restriction!À l'expiration du temps, l'ordinateur sera mis en veille et réveillé au début du prochain intervalle disponible pour l'utilisateur. Cette option est une restriction et est mieux adaptée pour gérer l'auto-restriction de son ordinateur! Au réveil, s'il n'y a plus de temps disponible, l'écran sera verrouillé et l'ordinateur sera remis en veille après un moment.À l'expiration du temps, l'ordinateur sera mis en veille. Cette option est une restriction! Au réveil de l'ordinateur, s'il n'y a toujours plus de temps disponible, l'écran demeurera verrouillé et l'ordinateur sera remis en veille après un moment.À l'expiration du temps, l'ordinateur sera arrêté. Cette option est une restriction! Veuillez évaluer avec soin si vous avez besoin d'utiliser cette restriction!À l'expiration du temps, la session de l'utilisateur sera fermée. Cette options est une restriction! Cette option est la valeur par défaut et probablement celle que vous voulez utiliser!Il reste %(n)s heureIl reste %(n)s heuresVotre temps n'est pas limité aujourd'huiVotre temps est expiré, votre session sera automatiquement terminée dansTemps expiré, votre ordinateur sera automatiquement arrêté dansVotre temps est écoulé, votre ordinateur sera automatiquement mis en veille dansVotre temps est écoulé, votre session sera automatiquement verrouillée dansjentrez les intervalles en heuresmasque exécutable...de...hles heures sont numérotées selon ISO 8601 (c.-à-d. horloge 24h, format: 0-23)himportance...terminer les sessionsverrouillage de l'écranmminn/ales valeurs de temps numériques sont en secondesdescription du processus...type de session...extinction de l'ordinateurmise en veille / rallumage de l'ordinateurmise en veille de l'ordinateurinterrompre les sessionstemps...Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes de la GNU General Public License telle que publiée par la Free Software Foundation , soit la version 3 de la Licence, soit (à votre gré) toute version ultérieure. Ce programme est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ 16 ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la GNU General Public License pour plus de détails. Vous devriez avoir reçu une copie de la GNU General Public License avec ce programme ; si ce n’est pas le cas, consultez : . Sur Debian, consultez /usr/share/common-licenses/GPL-3à...le temps aujourd'huinom d'utilisateur...vérifierles jours de la semaine sont numérotés selon la norme ISO 8601 (c'est-à-dire que le lundi est le premier jour, format: 1-7)timekpr-next/resource/locale/be/000700 001750 001750 00000000000 14575617250 020651 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/be/LC_MESSAGES/000700 001750 001750 00000000000 15122253261 022421 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/be/LC_MESSAGES/timekpr.po000644 001750 001750 00000361204 15122253261 024454 0ustar00bezvfedubezvfedu000000 000000 # Belarusian translation for timekpr-next # Copyright (c) 2022 Rosetta Contributors and Canonical Ltd 2022 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2022. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:18+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: Belarusian \n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 " "&& (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "паказаць даведку, напрыклад" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "атрымаць Ñ�піÑ� карыÑ�тальнікаў з Ñ�ервера, напрыклад" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "атрымаць інфармацыю аб канфігурацыі карыÑ�тальніка Ñ– чаÑ�е з Ñ�ервера, напрыклад:" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" "атрымайце інфармацыю пра чаÑ� карыÑ�тальніка Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у з Ñ�ервера, " "напрыклад" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "задаць дазволеныÑ� дні длÑ� карыÑ�тальніка, напрыклад" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "==> задаць дазволеныÑ� гадзіны длÑ� вызначанага днÑ� або \"ALL\" длÑ� кожнага днÑ�, " "па жаданні пазначыць хвіліны пачатку Ñ– заканчÑ�ннÑ� Ñž дужках, напрыклад [x-y], " "дадаткова пазначыць ! перад гадзінай, калі гÑ�та не трÑ�ба ўлічваць (вольны чаÑ� " "длÑ� карыÑ�тальніка), напрыклад:" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "==> уÑ�талÑ�ваць ліміты чаÑ�у длÑ� ÑžÑ�Ñ–Ñ… дазволеных дзён, колькаÑ�ць значÑ�ннÑ�Ñž не " "павінна перавышаць дазволеных дзён длÑ� карыÑ�тальніка, напрыклад:" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "уÑ�талÑ�ваць абмежаванне чаÑ�у на тыдзень, напрыклад" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "уÑ�талÑ�ваць ліміт чаÑ�у Ñž меÑ�Ñ�ц, напрыклад" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "задаць, ці варта адÑ�очваць неактыўныÑ� Ñ�еанÑ�Ñ‹ карыÑ�тальнікаў, напрыклад" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "задаць, ці трÑ�ба хаваць значок у трÑ�й Ñ– адхілÑ�ць апавÑ�шчÑ�нні, напрыклад" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "==> задаць абмежаванні / тып блакіроўкі (\"lock\" - блакіроўка Ñ�еÑ�Ñ–Ñ–, " "\"suspend\" - прыпыненне працы кампутара, \"suspendwake\" - прыпыненне Ñ– " "абуджÑ�нне, \"terminate\" - завÑ�ршÑ�нне Ñ�еанÑ�аў, \"kill\" - забіць Ñ�еанÑ�Ñ‹, " "\"shutdown\" - выключÑ�нне кампутара), прыклады:" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> задаць чаÑ�, Ñ�кі заÑ�таўÑ�Ñ� карыÑ�тальніку на бÑ�гучы момант чаÑ�у: \"+\" (дадаць " "чаÑ�), \"-\" (аднÑ�ць чаÑ�), \"=\" (даÑ�тупны дакладны чаÑ�), прыклад (дадаць адну " "гадзіну)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "==> уÑ�талÑ�ваць, ці ўключаны ЧаÑ�Гульні длÑ� карыÑ�тальніка, напрыклад:" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "==> уÑ�талюйце, ці трÑ�ба ўлічваць ЧаÑ�Гульні замеÑ�Ñ‚ звычайнай дзейнаÑ�ці, " "напрыклад:" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "==> уÑ�талюйце, ці дазволены дзеÑ�нне ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных (\"∞\") " "інтÑ�рвалаў, напрыклад:" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "==> задаць дазволеныÑ� дні длÑ� дзеÑ�ннÑ� ЧаÑ�аГульні, напрыклад:" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "==> уÑ�талюйце абмежаванні ЧаÑ�аГульні длÑ� ÑžÑ�Ñ–Ñ… дазволеных дзён, значÑ�нне не " "павінна перавышаць дазволаў ЧаÑ�аГульні дазволеных дзён длÑ� карыÑ�тальніка, " "напрыклад:" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "==> задаць маÑ�кі працÑ�Ñ�у актыўнаÑ�ці PlayTime, длÑ� Ñ�кога ўлічваецца чаÑ�, " "напрыклад:" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "==> задаць ЧаÑ�Гульні, Ñ�кі заÑ�таўÑ�Ñ� длÑ� карыÑ�тальніка на бÑ�гучы момант чаÑ�у: \"+" "\" (дадаць чаÑ�), \"-\" (аднÑ�ць чаÑ�), \"=\" (даÑ�тупны дакладны чаÑ�), прыклад " "(дадаць адну гадзіну)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Тып кантролю Ñ�еÑ�Ñ�Ñ–Ñ�мі не вызначан" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "СпіÑ� тыпаў Ñ�еанÑ�аў кіраваннÑ� нÑ�правільны" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "СпіÑ� тыпаў Ñ�еанÑ�аў кіраваннÑ� нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "ВыключаныÑ� тыпы Ñ�еанÑ�аў нÑ�правільныÑ�" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "СпіÑ� выключаных тыпаў Ñ�еанÑ�аў нÑ�правільны" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "СпіÑ� выключаных тыпаў Ñ�еанÑ�аў нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "СпіÑ� выключаных карыÑ�тальнікаў не паÑ�уе" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "СпіÑ� выключаных карыÑ�тальнікаў нÑ�правільны" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "СпіÑ� выключаных карыÑ�тальнікаў нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "ЧаÑ� апошнÑ�га папÑ�Ñ€Ñ�джаннÑ� не паÑ�уе" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "ЧаÑ� апошнÑ�га папÑ�Ñ€Ñ�джаннÑ� \"%%s\" нÑ�правільны" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "ЧаÑ� канчатковага папÑ�Ñ€Ñ�джаннÑ� \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "ЧаÑ� канчатковага апавÑ�шчÑ�ннÑ� не прайшоў" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "ЧаÑ� канчатковага апавÑ�шчÑ�ннÑ� \"%%s\" нÑ�правільны" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "ЧаÑ� канчатковага апавÑ�шчÑ�ннÑ� \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "ЧаÑ� Ñ�пыненнÑ� Ñ�еÑ�Ñ–Ñ– не паÑ�уе" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "ЧаÑ� Ñ�пыненнÑ� Ñ�еÑ�Ñ–Ñ– \"%%s\" нÑ�правільны" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "ЧаÑ� заканчÑ�ннÑ� \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "Ð�дÑ�очванне неактыўных Ñ�еÑ�ій не задана" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "Ð�дÑ�очванне неактыўных Ñ�еÑ�ій \"%%s\" нÑ�правільнае" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "Ð�еактыўны трÑ�к \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "Узровень лагаваннÑ� не ÑžÑ�талÑ�ваны" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "Узровень лагаваннÑ� \"%%s\" памылковы" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "Узровень лагаваннÑ� \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "ЧаÑ� апытаннÑ� не ÑžÑ�талÑ�ваны" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "ЧаÑ� апытаннÑ� \"%%s\" памылковы" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "ЧаÑ� апытаннÑ� \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "ЧаÑ� захаваннÑ� не ÑžÑ�талÑ�ваны" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "ЧаÑ� захаваннÑ� \"%%s\" памылковы" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "ЧаÑ� захаваннÑ� \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "СцÑ�г ЧаÑ�Гульні не перададзены" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "СцÑ�г PlayTime \"%%s\" нÑ�правільны" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "СцÑ�г ЧаÑ�аГульні \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "СцÑ�г маніторынгу пашыранай актыўнаÑ�ці ЧаÑ�аГульні не перададзены" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "СцÑ�г маніторынгу актыўнаÑ�ці ЧаÑ�аГульні \"%%s\" нÑ�правільны" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "СцÑ�г маніторынгу пашыранай актыўнаÑ�ці ЧаÑ�аГульні \"%%s\" нÑ�правільны Ñ– не можа " "быць уÑ�талÑ�ваны" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "КарыÑ�тальнік \"%%s\" нумар днÑ� павінен прыÑ�утнічаць" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "КарыÑ�тальнік \"%%s\" нумар днÑ� павінен быць ад 1 да 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "ДазволеныÑ� гадзіны карыÑ�тальніка \"%%s\" нÑ�правільныÑ� Ñ– Ñ–Ñ… нельга ÑžÑ�талÑ�ваць" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "КарыÑ�тальнік \"%%s\" Ñ�піÑ� дзён не ÑžÑ�талÑ�ваны" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "КарыÑ�тальнік \"%%s\" Ñ�піÑ� дзён памылковы" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "СпіÑ� дзён карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "КарыÑ�тальнік \"%%s\" Ñ�піÑ� дзённых абмежаваннÑ�Ñž не ÑžÑ�талÑ�ваны" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "КарыÑ�тальнік \"%%s\" Ñ�піÑ� дзённых абмежаваннÑ�Ñž памылковы" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "СпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не можа быць " "уÑ�талÑ�ваны" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "Ð�перацыÑ� з чаÑ�ам карыÑ�тальніка \"%%s\" можа быць адной з наÑ�тупных: - + =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "ЧаÑ�авы ліміт карыÑ�тальніка \"%%s\" нÑ�правільны" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "ЧаÑ�авы ліміт карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "КарыÑ�тальнік \"%%s\" штомеÑ�Ñ�чныÑ� дазволы не ÑžÑ�талÑ�ваныÑ�" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "КарыÑ�тальнік \"%%s\" штомеÑ�Ñ�чныÑ� дазволы памылковыÑ�" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "ШтомеÑ�Ñ�чныÑ� дазволы карыÑ�тальніка \"%%s\" нÑ�правільныÑ� Ñ– Ñ–Ñ… нельга ÑžÑ�талÑ�ваць" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "КарыÑ�тальнік \"%%s\" Ñ�цÑ�г \"адÑ�очваць неактыўных\" не ÑžÑ�талÑ�ваны" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "КарыÑ�тальнік \"%%s\" Ñ�цÑ�г \"адÑ�очваць неактыўных\" памылковы" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "СцÑ�г неактыўнага трÑ�ка карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не можа быць " "уÑ�талÑ�ваны" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "КарыÑ�тальнік \"%%s\" Ñ�цÑ�г \"Ñ�хаваць Ñž трÑ�й\" не ÑžÑ�талÑ�ваны" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "КарыÑ�тальнік \"%%s\" Ñ�цÑ�г \"Ñ�хаваць значок у трÑ�й\" памылковы" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "СцÑ�г Ñ�хаваць значок у трÑ�Ñ– длÑ� карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не можа быць " "уÑ�талÑ�ваны" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "Тып абмежаваннÑ� / блакіроўкі карыÑ�тальніка \"%%s\" памылковы" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "Тып абмежаваннÑ� / блакіроўкі карыÑ�тальніка \"%%s\" нÑ�правільны" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Тып абмежаваннÑ� / блакіроўкі карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не можа быць " "уÑ�талÑ�ваны" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "КарыÑ�тальнік \"%%s\" штотыднёвыÑ� дазволы не ÑžÑ�талÑ�ваныÑ�" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "КарыÑ�тальнік \"%%s\" штотыднёвыÑ� дазволы памылковыÑ�" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "ШтотыднёвыÑ� дазволы карыÑ�тальніка \"%%s\" нÑ�правільнаÑ� Ñ– Ñ�е нельга ÑžÑ�талÑ�ваць" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "СцÑ�г уключÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка \"%%s\" не перададзены" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "СцÑ�г уключÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка \"%%s\" нÑ�правільны" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "КарыÑ�тальніцкі Ñ�цÑ�г уключÑ�ннÑ� ЧаÑ�аГульні \"%%s\" нÑ�правільны Ñ– не можа быць " "уÑ�талÑ�ваны" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "СцÑ�г перавызначÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка \"%%s\" не перададзены" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "СцÑ�г перавызначÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка \"%%s\" нÑ�правільны" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "СцÑ�г перавызначÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не будзе " "ÑžÑ�талÑ�ваны" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "СцÑ�г ЧаÑ�аГульні дазволенага падчаÑ� нÑ�ўлічаных інтÑ�рвалаў, карыÑ�тальніка " "\"%%s\" не перададзены" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "КарыÑ�тальнік \"%%s\", Ñ�цÑ�г ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных інтÑ�рвалаў неправільны" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "КарыÑ�тальнік \"%%s\", Ñ�цÑ�г ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных інтÑ�рвалаў неправільны " "Ñ– не будзе ÑžÑ�талÑ�ваны" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "СпіÑ� дзён ЧаÑ�аГульні карыÑ�тальніка \"%%s\" не прайшоў" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "СпіÑ� дзён ЧаÑ�аГульні карыÑ�тальніка \"%%s\" нÑ�правільны" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "СпіÑ� дзён ЧаÑ�аГульні карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не будзе ÑžÑ�талÑ�ваны" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "СпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка \"%%s\" не прайшоў" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "СпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка \"%%s\" нÑ�правільны" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "СпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не будзе " "ÑžÑ�талÑ�ваны" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "Ð�перацыÑ� ЧаÑ�аГульні карыÑ�тальніка \"%%s\" можа быць адной з наÑ�тупных: - + =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "КарыÑ�тальніку \"%%s\", уÑ�талÑ�ваныÑ� нÑ�правільныÑ� абмежаванні ЧаÑ�аГульні" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "ЧаÑ�Гульні карыÑ�тальніка \"%%s\" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваны" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "Ð�ечаканаÑ� ПÐ�МЫЛКÐ� загрузкі канфігурацыі. Праверце файлы журналаў Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "ПÐ�МЫЛКÐ� пры атрыманні канфігурацыі. Праверце файлы журналаў Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ПÐ�МЫЛКÐ� атрыманнÑ� канфігурацыі карыÑ�тальніка. Праверце лог журналаў Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "ПÐ�МЫЛКÐ� атрыманнÑ� Ñ�піÑ�а карыÑ�тальнікаў. Калі лаÑ�ка, праверце файлы журналаў" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "Ð�ечаканаÑ� ПÐ�МЫЛКÐ� аднаўленнÑ� канфігурацыі. Праверце лог журналаў Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "ПÐ�МЫЛКÐ� кіраваннÑ� абнаўленнем. Калі лаÑ�ка, праверце файлы журналаў" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "КарыÑ�тальнік \"%%s\" канфігурацыÑ� адÑ�утнічае" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "КарыÑ�тальнік \"%%s\" кантрольны файл не знойдзены" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "КарыÑ�тальнік \"%%s\" адÑ�утнічае" #: common/constants/messages.py:160 msgid "Connected" msgstr "ЗлучÑ�ннÑ�" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "ЗлучаюÑ�ÑŒ..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Ð�е выйшла злучыцца" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Калі вы Ñ�уперкарыÑ�тальнік Ñ– працуе Timekpr-nExT, адкрыйце праграму паўторна" #: common/constants/messages.py:165 msgid "Started" msgstr "Запушчана" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "КанфігурацыÑ� карыÑ�тальніка атрыманаÑ�" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "КанфігурацыÑ� атрыманаÑ�" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "Ð�дÑ�очванне неактыўнага длÑ� карыÑ�тальніка, апрацавана" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "Схаваць значок у трÑ�й длÑ� карыÑ�тальніка быў апрацаваны" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Тып абмежаваннÑ� / блакіроўкі длÑ� карыÑ�тальніка апрацаваны" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Дадатковы чаÑ� длÑ� карыÑ�тальніка апрацаваны" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Дадатковы ЧаÑ�Гульні длÑ� карыÑ�тальніка быў апрацаваны" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "ТыднёвыÑ� Ñ– меÑ�Ñ�чныÑ� ліміты длÑ� карыÑ�тальніка былі апрацаваны" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "ДазволеныÑ� дні длÑ� карыÑ�тальніка апрацаваны" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "ДзённыÑ� абмежаванні длÑ� карыÑ�тальнікаў апрацаваныÑ�" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "ДазволеныÑ� длÑ� карыÑ�тальніка гадзіны былі апрацаваны" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "КанфігурацыÑ� Timekpr-nExT была захаванаÑ�" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Ð�бмежаванні чаÑ�у карыÑ�тальніка былі захаваныÑ�" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "КарыÑ�тальніцкіÑ� абмежаванні ЧаÑ�аГульні былі захаваныÑ�" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "ДадатковыÑ� параметры карыÑ�тальніка былі захаваны" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "ЧаÑ�Гульні длÑ� карыÑ�тальніка уключаны" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "ЧаÑ�Гульні длÑ� карыÑ�тальніка быў перавызначаны" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "ЧаÑ�Гульні, дазволены падчаÑ� нÑ�ўлічаных інтÑ�рвалаў, длÑ� карыÑ�тальніка апрацаваны" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "ДзённыÑ� ЧаÑ�ыГульні, дазволеныÑ� длÑ� карыÑ�тальніка, апрацаваныÑ�" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "Ð�бмежаванні ЧаÑ�аГульні длÑ� карыÑ�тальніка апрацаваныÑ�" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "СпіÑ� дзеÑ�ннÑ�Ñž / прыкладаннÑ�Ñž ЧаÑ�аГульні длÑ� карыÑ�тальніка апрацаваныÑ�" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Калі лаÑ�ка, абÑ�рыце дзень каб уÑ�талÑ�ваць ліміты" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "ГÑ�ты інтÑ�рвал перакрываецца з Ñ–Ñ�нуючым" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "Пачатак гÑ�тага інтÑ�рвалу канфліктуе з Ñ–Ñ�нуючым" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "Канец гÑ�тага інтÑ�рвалу канфліктуе з Ñ–Ñ�нуючым" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "Пачатак або канец гÑ�тага інтÑ�рвалу дублюе Ñ–Ñ�нуючы" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Пачатак інтÑ�рвалу не можа быць такім жа, Ñ�к Ñ– Ñ�канчÑ�нне" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "Пачатак інтÑ�рвалу не можа быць пазней за канец" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Выберыце гадзінны інтÑ�рвал длÑ� выдаленнÑ�" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "ІнтÑ�рвал выдалены" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "ІнтÑ�рфейÑ� Timekpr-nExT Ñ�шчÑ� не гатовы" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "ПÐ�ПЯРЭДЖÐ�Ð�Ð�Е: Утыліце адмініÑ�траваннÑ� Timekpr-nExT было прапанавана запуÑ�ціцца " "у Ñ€Ñ�жыме графічнага інтÑ�рфейÑ�у, але дыÑ�плеі недаÑ�тупныÑ�, таму працуе Ñž CLI..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "ПамылковаÑ� каманда:" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "" "ВыкарыÑ�танне кліента адмініÑ�тратарам Timekpr-nExT выглÑ�дае наÑ�тупным чынам:" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== Ð�Ð�ТÐ�ТКІ ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "лікавыÑ� значÑ�нні чаÑ�у Ñž Ñ�екундах" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "дні тыднÑ� нумаруюцца Ñž адпаведнаÑ�ці з ISO 8601 (г.зн. панÑ�дзелак - першы дзень, " "фармат: 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "гадзіны нумаруюцца Ñž адпаведнаÑ�ці з ISO 8601 (г.зн. 24-гадзінны гадзіннік, " "фармат: 0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s карыÑ�тальнікаў уÑ�Ñ�го:" msgstr[1] "%(n)s карыÑ�тальнікаў уÑ�Ñ�го:" msgstr[2] "%(n)s карыÑ�тальнікаў уÑ�Ñ�го:" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "КанфігурацыÑ� длÑ� карыÑ�тальніка %s:" #: common/constants/messages.py:211 msgid "Time left..." msgstr "ЗаÑ�талоÑ�Ñ� чаÑ�у..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Ð�бмежаванні Ñ– канфігурацыі" #: common/constants/messages.py:213 msgid "About" msgstr "Ð�б праграме" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Трымайце кантроль над выкарыÑ�таннем кампутара" #: common/constants/messages.py:217 msgid "Day" msgstr "Дзень" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Уключана" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Ð�бмежаванні" #: common/constants/messages.py:220 msgid "From" msgstr "З" #: common/constants/messages.py:221 msgid "from..." msgstr "ад..." #: common/constants/messages.py:222 msgid "To" msgstr "Па" #: common/constants/messages.py:223 msgid "to..." msgstr "да..." #: common/constants/messages.py:224 msgid "Period" msgstr "ПерыÑ�д" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Штотыдзень" #: common/constants/messages.py:227 msgid "Monthly" msgstr "ШтомеÑ�Ñ�ц" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Тып Ñ�еÑ�Ñ–Ñ–" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "тып Ñ�еÑ�Ñ–Ñ–..." #: common/constants/messages.py:232 msgid "Username" msgstr "КарыÑ�тальнік" #: common/constants/messages.py:233 msgid "username..." msgstr "імÑ� карыÑ�тальніка..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "МаÑ�ка працÑ�Ñ�а" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "выконваемаÑ� маÑ�ка..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Ð�піÑ�анне працÑ�Ñ�у" #: common/constants/messages.py:237 msgid "process description..." msgstr "апіÑ�анне працÑ�Ñ�у..." #: common/constants/messages.py:238 msgid "Time" msgstr "ЧаÑ�" #: common/constants/messages.py:239 msgid "time..." msgstr "чаÑ�..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Важна" #: common/constants/messages.py:241 msgid "importance..." msgstr "важна...." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Ð�павÑ�шчÑ�нне Timekpr-nExT" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Ð�павÑ�шчÑ�нне ЧаÑ�аГульні Timekpr-nExT" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "СённÑ� ваш чаÑ� не абмежаваны" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "Дазволены чаÑ� зменены,звÑ�рніце ўвагу, колькі заÑ�талоÑ�Ñ� чаÑ�у!" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "КанфігурацыÑ� абмежаваннÑ� чаÑ�у змÑ�нілаÑ�Ñ�, звÑ�рніце ўвагу на новую канфігурацыю!" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "Узнікла праблема з падключÑ�ннем да дÑ�мана Timekpr-nExT (%%s)!" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "Узнікла праблема з падключÑ�ннем да Timekpr-nExT (%%s)!" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Памылка ініцыÑ�лізацыі іконкі (%%s)!" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Ваш чаÑ� Ñ�кончыўÑ�Ñ�, вы будзеце прымуÑ�ова выдалены з Ñ�Ñ–Ñ�Ñ‚Ñ�мы праз" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Ваш чаÑ� Ñ�кончыўÑ�Ñ�, ваш кампутар будзе прымуÑ�ова адключаны праз" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Ваш чаÑ� Ñ�кончыўÑ�Ñ�, ваш Ñ�еанÑ� будзе прымуÑ�ова заблакаваны праз" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Ваш чаÑ� Ñ�кончыўÑ�Ñ�, ваш кампутар будзе прымуÑ�ова прыпынены праз" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s Ñ�екунд" msgstr[1] "%(n)s Ñ�екунды" msgstr[2] "%(n)s Ñ�екунд" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Памылка ўнутранага падключÑ�ннÑ�, праверце файлы журналаў" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "У ваÑ� Ñ‘Ñ�ць %(n)s гадз." msgstr[1] "У ваÑ� Ñ‘Ñ�ць %(n)s гадз." msgstr[2] "У ваÑ� Ñ‘Ñ�ць %(n)s гадз." #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s хвілін" msgstr[1] "%(n)s хвіліна" msgstr[2] "%(n)s хвілін(Ñ‹)" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s Ñ�екунда" msgstr[1] "%(n)s Ñ�екунды" msgstr[2] "%(n)s Ñ�екунд" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s Ñ�екунд ЧаÑ�аГульні заÑ�талоÑ�Ñ�" msgstr[1] "%(n)s Ñ�екунды ЧаÑ�аГульні заÑ�талоÑ�Ñ�" msgstr[2] "%(n)s Ñ�екунд ЧаÑ�аГульні заÑ�талоÑ�Ñ�" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "Ð�емагчыма ўключыць функцыю \"%%s\", Ñ�каÑ� выкарыÑ�тоўваецца длÑ� выÑ�ўленнÑ� чаÑ�у " "праÑ�тою!\n" "ЧаÑ� праÑ�тою / бÑ�здзейнаÑ�ці можа не ўлічвацца, калі Ñ�кран заблакаваны!" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "Ð�ЕЧÐ�КÐ�Ð�Ð�Я ПÐ�МЫЛКÐ�: %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "ПÐ�МЫЛКÐ� разбору параметраў (калі лаÑ�ка, праверце Ñ�апраўднаÑ�ць параметраў): %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "Каманда Ð�Е ВЫКÐ�Ð�Ð�Ð�Ð�: доÑ�туп забаронены" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "Каманда Ð�Е ВЫКÐ�Ð�Ð�Ð�Ð�: Ñ�увÑ�зь не дазволена" #: common/constants/messages.py:278 msgid "n/a" msgstr "недаÑ�тупны" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "Ð�б Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "ГÑ�таÑ� праграма з'Ñ�ўлÑ�ецца бÑ�Ñ�платным праграмным забеÑ�пÑ�чÑ�ннем: вы можаце " "раÑ�паўÑ�юджваць Ñ�е Ñ–/або змÑ�нÑ�ць Ñ�е Ñž адпаведнаÑ�ці з умовамі GNU General Public " "License, апублікаванай Фондам вольнага праграмнага забеÑ�пÑ�чÑ�ннÑ�, альбо верÑ�Ñ–Ñ– 3 " "ЛіцÑ�нзіі, альбо (на ваш выбар) любой больш познÑ�й верÑ�Ñ–Ñ–.\n" "ГÑ�таÑ� праграма раÑ�паўÑ�юджваецца Ñž надзеі, што Ñ�на будзе карыÑ�най, але БЕЗ " "Ð�ІЯКІХ ГÐ�РÐ�Ð�ТЫЙ; нават без наÑ�ўнай гарантыі прыдатнаÑ�ці длÑ� продажу або " "прыдатнаÑ�ці длÑ� пÑ�ўнага прызначÑ�ннÑ�. Больш падрабÑ�зную інфармацыю глÑ�дзіце Ñž " "Генеральнай грамадÑ�кай ліцÑ�нзіі GNU.\n" "Ð’Ñ‹ павінны былі атрымаць копію GNU General Public License разам з гÑ�тай " "праграмай. Калі нÑ�ма, глÑ�дзіце . У Debian " "глÑ�дзіце файл /usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )\n" "(Belarussian translat by Aliaksandr Parmon )" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Выдаліць выключаны тып Ñ�еанÑ�у" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Ð�дмініÑ�траванне Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Ð�Ñ�ма значка (іконкі)?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Чытайце ўважліва заўвагі ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "ГÑ�та прыкладанне канфігурацыі длÑ� Timekpr-nExT. Яно дазвалÑ�е ÑžÑ�талёўваць " "абмежаванні длÑ� вашых аÑ�обных карыÑ�тальнікаў, а такÑ�ама агульныÑ� параметры " "Timekpr-nExT.\n" "Каб выкарыÑ�тоўваць гÑ�ты дадатак, вы павінны альбо выкарыÑ�тоўваць Ñ�го Ñ�к " "Ñ�уперкарыÑ�тальнік, альбо быць чаÑ�ткай групы timekpr.\n" "ЗвÑ�рніце ўвагу, што «Ð�аÑ�тройка Timekpr-nExT» даÑ�тупнаÑ� толькі Ñž Ñ€Ñ�жыме " "Ñ�уперкарыÑ�тальніка (адмініÑ�тратара)!\n" "Калі лаÑ�ка, наладжвайце ўважліва: не заблакуйце Ñ�абе!" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "КанфігурацыÑ�, звÑ�занаÑ� з карыÑ�тальнікамі" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "КарыÑ�тальнік:" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "СпіÑ� карыÑ�тальнікаў, зарÑ�гіÑ�траваных у Ñ�Ñ–Ñ�Ñ‚Ñ�ме" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Ð�днаўленне" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Ð�днавіць канфігурацыю з захаванага Ñ�тану" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "ІнфармацыÑ� пра чаÑ�, Ñ�кі заÑ�таўÑ�Ñ�/ быў вытрачаны" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "ЗначÑ�нне вызначае, Ñ�к доўга вы можаце беÑ�перапынна карыÑ�тацца кампутарам, " "затрачаны чаÑ� можа перакрывацца на некалькі дзён (разлічваецца Ñž Ñ€Ñ�жыме " "Ñ€Ñ�альнага чаÑ�у, даÑ�тупна толькі калі карыÑ�тальнік актыўны)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "ЗаÑ�таўшыÑ�Ñ� чаÑ� (фактычны):" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Фармат: <дні : гадзіны : хвіліны : Ñ�екунды>" #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Як доўга карыÑ�тальнік быў неактыўны з моманту апошнÑ�га ўваходу Ñž Ñ�Ñ–Ñ�Ñ‚Ñ�му (у " "Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, даÑ�тупна, калі карыÑ�тальнік увайшоў у Ñ�Ñ–Ñ�Ñ‚Ñ�му)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "ЧаÑ� бÑ�здзейнаÑ�ці (фактычны):" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "ЧаÑ�, даÑ�тупны Ñ�ённÑ� (захаваны, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "ЗаÑ�талоÑ�Ñ� чаÑ�у (Ñ�ённÑ�):" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "ЧаÑ�, вытрачаны Ñ�ённÑ� (захаваны, а не Ñž Ñ€Ñ�альным чаÑ�е)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Вытрачаны чаÑ� (Ñ�ённÑ�):" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "ЧаÑ�, праведзены на гÑ�тым тыдні (захаваны, а не Ñž Ñ€Ñ�альным чаÑ�е)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "ЧаÑ� вытрачаны (тыдзень):" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "ЧаÑ� вытрачаны у гÑ�тым меÑ�Ñ�цы (захаваны, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Вытрачаны чаÑ� (меÑ�Ñ�ц)" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Дадаць абмежаванні" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "Ñ�ённÑ�шні чаÑ�" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "Выберыце гÑ�та, каб наладзіць чаÑ� карыÑ�тальніка на Ñ�ённÑ�шні дзень" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "ЧаÑ�Гульні" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "Выберыце гÑ�та, каб наладзіць ЧаÑ�Гульні карыÑ�тальніка на Ñ�ённÑ�шні дзень" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "гадз." #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "КолькаÑ�ць хвілін, длÑ� Ñ�ённÑ�шнÑ�га ліміту" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "КолькаÑ�ць гадзін, длÑ� Ñ�ённÑ�шнÑ�га ліміту" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "хвіл" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Дадаць вызначаны чаÑ� (узнагарода)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Ð�днÑ�ць вызначаны чаÑ� (штраф)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "УÑ�талÑ�выць вызначаны чаÑ�" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "ІнфармацыÑ� пра ЧаÑ�Гульні" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "Фактычны ЧаÑ�Гульні, даÑ�тупны Ñ�ённÑ� (у Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, даÑ�тупны, калі " "карыÑ�тальнік увайшоў у Ñ�Ñ–Ñ�Ñ‚Ñ�му)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "ЧаÑ�Гульні заÑ�таўшыйÑ�Ñ� (фактычна)" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Фармат: <гадзіны : хвіліны : Ñ�екунды>" #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "ЧаÑ�Гульні даÑ�тупны Ñ�ённÑ� (вызначана, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "ЧаÑ�Гульні заÑ�таўшыйÑ�Ñ� (Ñ�ённÑ�)" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Падлік актыўнаÑ�ці ЧаÑ�аГульні (у Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, даÑ�тупна, калі " "карыÑ�тальнік увайшоў у Ñ�Ñ–Ñ�Ñ‚Ñ�му)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "БÑ�гучаÑ� дзейнаÑ�ць (фактычна):" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "ЧаÑ�аГульні вытрачана Ñ�ённÑ� (захавана, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "ЧаÑ�Гульні выкарыÑ�таны (Ñ�ённÑ�):" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "КароткаÑ� інфармацыÑ� пра чаÑ�, праведзены Ñ– ÑžÑ�Ñ‘, што звÑ�зана з кіраваннем чаÑ�ам " "на гÑ�ты дзень" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "СённÑ�шнÑ�Ñ� ІнфармацыÑ�" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Ð�алады абмежаваннÑ� па чаÑ�е." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Ð�бмежаванні дзён на тыдзень" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "г" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Выберыце гадзіны длÑ� карÑ�кціроўкі длÑ� выбраных дзён." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "хв" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Выберыце хвіліны длÑ� карÑ�кціроўкі длÑ� выбраных дзён." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "ПавÑ�лічце штодзённы чаÑ� на выбраную адзінку чаÑ�у (гадзіны ці хвіліны) длÑ� " "выбраных дзён.\n" "ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�кціроўкі!" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Зменьшыце штодзённы чаÑ� на выбраную адзінку чаÑ�у (гадзіны ці хвіліны) длÑ� " "выбраных дзён.\n" "ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�кціроўкі!" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "СпіÑ� дзён тыднÑ� Ñ– дадатковаÑ� інфармацыÑ� пра дзённы ліміт.\n" "\n" "Калі лаÑ�ка, уключыце / адключыце дні длÑ� карыÑ�тальніка." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "ДаÑ�тупныÑ� карыÑ�тальніку гадзінныÑ� інтÑ�рвалы длÑ� выбранага днÑ�.\n" "Параметр \"∞\" паказвае, што чаÑ�, праведзены падчаÑ� гÑ�тага інтÑ�рвалу, не будзе " "ўлічвацца Ñž Ñ�утачны ліміт, а будзе ўлічвацца Ñ�к праÑ�той.\n" "ЗвÑ�рніце ўвагу, што калі дзённы ліміт заканчваецца Ñž 24:00, а ліміт наÑ�тупнага " "днÑ� пачынаецца Ñž 00:00, то карыÑ�тальнік можа працаваць беÑ�перапынна паÑ�лÑ� " "поўначы.\n" "ЗвÑ�рніце ўвагу, што некалькі інтÑ�рвалаў нельга наладзіць на працÑ�гу адной " "гадзіны.\n" "ІнтÑ�рвал можа пачынацца або заканчвацца або ўтрымліваць пÑ�ўную гадзіну, але не " "больш за адзін раз. Так задумана, гÑ�та не памылка.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "ІнтÑ�рвалы газдін" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Стварыце новы прамежак чаÑ�у, Ñ�кі будзе даÑ�тупны длÑ� карыÑ�тальніка.\n" "ПаÑ�лÑ� Ñ�тварÑ�ннÑ� інтÑ�рвалу адрÑ�дагуйце чаÑ� Ñ�го пачатку Ñ– заканчÑ�ннÑ� непаÑ�Ñ€Ñ�дна Ñž " "Ñ�піÑ�е інтÑ�рвалаў." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "Выдаліце абраны інтÑ�рвал чаÑ�у з даÑ�тупнага Ñ�піÑ�у інтÑ�рвалаў." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "увÑ�дзіце гадзінныÑ� інтÑ�рвалы" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "Ñ�праўдзіць" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Спраўдзіце наладжаныÑ� інтÑ�рвалы чаÑ�у. ГÑ�та абавÑ�зковы крок длÑ� забеÑ�пÑ�чÑ�ннÑ� " "правільнаÑ�ці інтÑ�рвалаў.\n" "ІнтÑ�рвалы, Ñ�кіÑ� маюць праблемы, будуць вылучаны." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "ТыднёвыÑ� Ñ– меÑ�Ñ�чныÑ� ліміты" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "д" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Пазначце дні длÑ� абранага перыÑ�ду." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Выберыце гадзіны, Ñ�кіÑ� трÑ�ба наладзіць длÑ� абранага перыÑ�ду." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Выберыце хвіліны, Ñ�кіÑ� будуць адрÑ�гулÑ�ваны длÑ� выбранага перыÑ�ду." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "ПавÑ�лічце штотыднёвы або штомеÑ�Ñ�чны чаÑ� на выбраную адзінку чаÑ�у (дні, гадзіны " "або хвіліны) длÑ� абранага перыÑ�ду." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Зменьшыце штотыднёвы або штомеÑ�Ñ�чны чаÑ� на выбраную адзінку чаÑ�у (дні, гадзіны " "або хвіліны) длÑ� абранага перыÑ�ду." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "ТыднёвыÑ� Ñ– меÑ�Ñ�чныÑ� ліміты длÑ� карыÑ�тальніка\n" "\n" "ГÑ�тыÑ� абмежаванні прымÑ�нÑ�юцца да карыÑ�тальніка разам з аÑ�татнÑ�й канфігурацыÑ�й " "лімітаў." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Ўжываць штодзённыÑ� ліміты" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Ужыць змены на ÑžÑ�е абмежаванні, зробленыÑ� на гÑ�тай Ñ�таронцы" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "КанфігурацыÑ� штодзённых лімітаў длÑ� ÑžÑ�Ñ–Ñ… дзён тыднÑ�" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Ð�алады абмежаваннÑ�Ñž" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Ð�алады длÑ� ЧаÑ�аГульні" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "ВарыÑ�нты ЧаÑ�аГульні" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Уключыць ЧаÑ�Гульні длÑ� абранага карыÑ�тальніка" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Уключыць ЧаÑ�Гульні:" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Уключыць перавызначÑ�нне PlayTime длÑ� выбранага карыÑ�тальніка.\n" "\n" "ГÑ�таÑ� налада перавызначае ўлік чаÑ�у такім чынам, што чаÑ� улічваецца толькі " "тады, калі запушчана хацÑ� б адно з прыкладаннÑ�Ñž у Ñ�піÑ�е дзеÑ�ннÑ�Ñž PlayTime!\n" "\n" "ГÑ�та закранае толькі ўлік чаÑ�у, інтÑ�рвалы па-ранейшаму цалкам выконваюцца!\n" "\n" "Калі працÑ�Ñ�Ñ‹ не запушчаны, чаÑ� лічыцца непрацуючым, такім чынам, гÑ�та вольны " "чаÑ� длÑ� карыÑ�тальніка!" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Уключыць перавызначÑ�нне PlayTime:" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Дадаць дзеÑ�нні ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных (\"∞\") чаÑ�овых інтÑ�рвалаў длÑ� " "выбранага карыÑ�тальніка.\n" "\n" "ГÑ�ты параметр дазвалÑ�е карыÑ�тальніку выкарыÑ�тоўваць праграмы, наÑ�троеныÑ� Ñž Ñ�го " "Ñ�піÑ�е дзеÑ�ннÑ�Ñž PlayTime, на працÑ�гу чаÑ�овых інтÑ�рвалаў, Ñ�кіÑ� пазначаны Ñ�к " "нÑ�ўлічаныÑ� (\"∞\").\n" "\n" "Калі гÑ�таÑ� налада ўключана, выкарыÑ�танне дзеÑ�ннÑ�Ñž не будзе ўлічвацца Ñž лімітах " "PlayTime, у адваротным выпадку прыкладаннÑ� Ñž Ñ�піÑ�е дзеÑ�ннÑ�Ñž PlayTime будуць " "Ñ�пыненыÑ�, Ñ�к толькі Ñ�ны будуць запушчаны Ñž нÑ�ўлічаныÑ� (\"∞\") прамежкі чаÑ�у." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Дадаць Ñž \"∞\" інтÑ�рвал :" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Ð�алады лімітаў ЧаÑ�аГульні." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "Ліміты ЧаÑ�аГульні" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "ПавÑ�лічце штодзённую норму ЧаÑ�аГульні на выбраную адзінку чаÑ�у (гадзіны ці " "хвіліны) длÑ� выбраных дзён.\n" "ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�ктыроўкі!" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Паменьшыце штодзённую норму ЧаÑ�аГульні на выбраную адзінку чаÑ�у (гадзіны ці " "хвіліны) длÑ� выбраных дзён.\n" "ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�ктыроўкі!" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Пералік дзён тыднÑ� Ñ– дадатковаÑ� інфармацыÑ� пра дзённыÑ� ліміты ЧаÑ�аГульні.\n" "Калі лаÑ�ка, уключыце / адключыце дні длÑ� карыÑ�тальніка Ñ– ÑžÑ�талюйце чаÑ� дзеÑ�ннÑ� " "ЧаÑ�аГульні." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "ДзейнаÑ�ць ЧаÑ�аГульні" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Дадаць новую дзейнаÑ�ць ЧаÑ�аГульні.\n" "\n" "Калі лаÑ�ка, укажыце маÑ�ку актыўнаÑ�ці Ñ– зручнае апіÑ�анне непаÑ�Ñ€Ñ�дна Ñž Ñ�піÑ�е." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Выдаліць выбраны запіÑ� з дзейнаÑ�ці ЧаÑ�аГульні." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Калі лаÑ�ка, ўкажыце Ñ�піÑ� поўных імёнаў працÑ�Ñ�аў (выкальных файлаў) без шлÑ�ху Ñž " "Ñ�каÑ�ці радкоў з Ñ€Ñ�гіÑ�трам, Ñ�кіÑ� будуць кантралÑ�вацца Ñž Ñ�Ñ–Ñ�Ñ‚Ñ�ме.\n" "\n" "Можна такÑ�ама задаць маÑ�кі RegExp длÑ� працÑ�Ñ�аў, але будзьце вельмі аÑ�цÑ�рожныÑ� з " "імі, бо нÑ�правільнае выкарыÑ�танне гÑ�тага параметра можа прывеÑ�ці да знішчÑ�ннÑ� " "непажаданых працÑ�Ñ�аў длÑ� карыÑ�тальніка!\n" "\n" "УВÐ�ГÐ�: RegExp - гÑ�та Ñ�кÑ�пертнаÑ� налада!" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Ужыць канфігурацыю ЧаÑ�аГульні" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "Ужыць абмежаванні Ñ– канфігурацыі ЧаÑ�аГульні на гÑ�тай Ñ�таронцы" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "Ð�алады ЧаÑ�аГульні" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "ПашыраныÑ� параметры канфігурацыі" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Выберыце, ці падлічваецца чаÑ� неактыўных Ñ�еанÑ�аў.\n" "\n" "Калі гÑ�та не пазначана, чаÑ�, праведзены Ñž Ñ�еанÑ�ах ўваходу Ñž канÑ�оль (а не " "Ñ�мулÑ�тар Ñ‚Ñ�рмінала) Ñ– калі Ñ�кран заблакаваны, Ð�Е ўлічваецца. ГÑ�та вар'іруецца Ñž " "залежнаÑ�ці ад аÑ�Ñ�роддзÑ� працоўнага Ñ�тала." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Ð�дÑ�очваць неактыўныÑ� Ñ�еÑ�Ñ�Ñ–Ñ–:" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Выберыце, ці паказваць карыÑ�тальніку значок замка Timekpr-next Ñ– апавÑ�шчÑ�нні.\n" "\n" "ЗвÑ�рніце ўвагу, што ÑžÑ�талÑ�ванне гÑ�тай галачкі адключыць паказ уÑ�ёй інфармацыі Ñ– " "апавÑ�шчÑ�ннÑ�Ñž карыÑ�тальніку!" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Схаваць іконку Ñ– паведамленні:" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Выберыце тып абмежаваннÑ� / блакіроўкі длÑ� карыÑ�тальніка.\n" "\n" "УВÐ�ГÐ�: калі лаÑ�ка, будзьце вельмі ўважлівыÑ�, падумайце наперад Ñ– прачытайце " "апіÑ�анне ÑžÑ�Ñ–Ñ… параметраў, калі змÑ�нÑ�еце гÑ�тае значÑ�нне Ñ�а значÑ�ннÑ� па змаўчанні!" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Тып абмежаваннÑ� / блакіроўкі:" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "завÑ�ршыць Ñ�еанÑ�Ñ‹" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Калі чаÑ� Ñ�кончыцца, Ñ�еанÑ�Ñ‹ карыÑ�тальнікаў будуць Ñ�пыненыÑ�.\n" "\n" "ГÑ�ты варыÑ�нт - абмежаванне!\n" "\n" "ГÑ�та варыÑ�нт па змаўчанні Ñ–, хутчÑ�й за ÑžÑ�Ñ‘, той, Ñ�кі вам патрÑ�бны!" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "забіць Ñ�еанÑ�Ñ‹" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Калі чаÑ� Ñ�кончыцца, Ñ�еанÑ�Ñ‹ карыÑ�тальніка будуць завершаны.\n" "\n" "ГÑ�ты варыÑ�нт - абмежаванне!\n" "\n" "Калі лаÑ�ка, ацаніце, ці патрÑ�бны вам гÑ�ты тып абмежаваннÑ�!" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "выключыць кампутар" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Калі чаÑ� Ñ�кончыцца, кампутар будзе адключаны.\n" "\n" "ГÑ�ты варыÑ�нт - абмежаванне!\n" "\n" "Калі лаÑ�ка, ацаніце, ці патрÑ�бны вам гÑ�ты тып абмежаваннÑ�!" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "прыпыніць кампутар" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Калі чаÑ� Ñ�кончыцца, кампутар будзе прыпынены (пераведзены Ñž Ñ€Ñ�жым Ñ�ну).\n" "\n" "ГÑ�ты варыÑ�нт не з'Ñ�ўлÑ�ецца абмежаваннем Ñ– больш падыходзіць длÑ� мÑ�таў " "Ñ�амакантролю.\n" "\n" "Калі кампутар прачынацца, а чаÑ�у ÑžÑ�Ñ‘ Ñ�шчÑ� не заÑ�талоÑ�Ñ�, Ñ�кран кампутара будзе " "заблакаваны Ñ– праз некаторы чаÑ� зноў пераведзены Ñž Ñ€Ñ�жым Ñ�ну." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "прыпыненне / абуджÑ�нне кампутара" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Калі чаÑ� Ñ�кончыцца, кампутар будзе прыпынены (пераведзены Ñž Ñ€Ñ�жым Ñ�ну) Ñ– будзе " "абуджаны Ñž пачатку наÑ�тупнага даÑ�тупнага длÑ� карыÑ�тальніка інтÑ�рвала чаÑ�у.\n" "\n" "ГÑ�ты варыÑ�нт не з'Ñ�ўлÑ�ецца абмежаваннем Ñ– больш падыходзіць длÑ� мÑ�таў " "Ñ�амакантролю.\n" "\n" "Калі кампутар прачынацца, а чаÑ�у ÑžÑ�Ñ‘ Ñ�шчÑ� не заÑ�талоÑ�Ñ�, Ñ�кран кампутара будзе " "заблакаваны Ñ– праз некаторы чаÑ� зноў пераведзены Ñž Ñ€Ñ�жым Ñ�ну." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "блакіроўка Ñ�крана" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Калі чаÑ� Ñ�кончыцца, Ñ�кран кампутара будзе заблакіраваны.\n" "\n" "ГÑ�ты варыÑ�нт не з'Ñ�ўлÑ�ецца абмежаваннем Ñ– больш падыходзіць длÑ� мÑ�таў " "Ñ�амакантролю." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Выберыце інтÑ�рвал чаÑ�у, калі кампутар можа аўтаматычна абуджацца.\n" "\n" "ЗвÑ�рніце ўвагу, што гÑ�ты параметр Ñ�фектыўны толькі Ñž тым выпадку, калі " "абуджÑ�нне па гадзінніку Ñ€Ñ�альнага чаÑ�у падтрымліваецца Ñ– ўключана Ñž BIOS / UEFI!" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "ІнтÑ�рвал гадзін абуджÑ�ннÑ�:" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "УвÑ�дзіце гадзіну пачатку длÑ� функцыі аўтаматычнага абуджÑ�ннÑ�.\n" "\n" "ЗвÑ�рніце ўвагу, што гÑ�ты параметр працуе толькі Ñž тым выпадку, калі абуджÑ�нне " "па гадзінніку Ñ€Ñ�альнага чаÑ�у падтрымліваецца Ñ– ўключана Ñž BIOS / UEFI!" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "УвÑ�дзіце гадзіну заканчÑ�ннÑ� длÑ� функцыі аўтаматычнага абуджÑ�ннÑ�.\n" "\n" "ЗвÑ�рніце ўвагу, што гÑ�ты параметр працуе толькі Ñž тым выпадку, калі абуджÑ�нне " "па гадзінніку Ñ€Ñ�альнага чаÑ�у падтрымліваецца Ñ– ўключана Ñž BIOS / UEFI!" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Ужыць налады" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "Ужыць дадатковыÑ� налады змененыÑ� на гÑ�тай Ñ�таронцы" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "ДадатковыÑ� налады" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "дадатковыÑ� опцыі" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Ð�алады карыÑ�тальніка" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "КанфігурацыÑ�, Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Ð�алады кантролю TIMEKPR-NEXT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Узровень лагаваннÑ� Timekpr-nExT.\n" "\n" "Калі лаÑ�ка, не мÑ�нÑ�йце гÑ�та, калі вы не ўпÑ�ўнены. ХутчÑ�й за ÑžÑ�Ñ‘, вы не " "знойдзеце нічога цікавага Ñž файлах логаў.\n" "\n" "ЗначÑ�нні: 1 - Ñ�тандартны, 2 - адладка, 3 - пашыранаÑ� адладка" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "ДÑ�талізацыÑ� чаÑ�у апытаннÑ� Ñ�еанÑ�аў, Ñ�каÑ� вызначае, Ñ�к чаÑ�та правÑ�раюцца Ñ– " "ўлічваюцца Ñ�еанÑ�Ñ‹ Ñ– дзейнаÑ�ць карыÑ�тальнікаў.\n" "\n" "Ð�птымальным з'Ñ�ўлÑ�ецца 3-5 Ñ�екунд, не мÑ�нÑ�йце гÑ�та, калі вы не ўпÑ�ўнены." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "ІнтÑ�рвал апытваннÑ�" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Укажыце чаÑ� у Ñ�екундах, калі Timekpr-nExT пачынае беÑ�перапынны адлік у Ñ€Ñ�жыме " "Ñ€Ñ�альнага чаÑ�у, перш чым уводзіць абмежаванне / блакіроўку Ñ�еанÑ�аў " "карыÑ�тальніка." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "ГÑ�та вызначае хуткаÑ�ць у Ñ�екундах, з Ñ�кой фактычны Ñ�тан карыÑ�тальніка " "захоўваецца на дыÑ�к.\n" "\n" "ДлÑ� павышÑ�ннÑ� прадукцыйнаÑ�ці Ñ– захаваннÑ� выÑ�окай дакладнаÑ�ці, Timekpr-nExT " "ўлічвае чаÑ� у памÑ�ці з чаÑ�татой «ІнтÑ�рвал апытаннÑ�». ГÑ�ты параметр вызначае " "чаÑ�тату, з Ñ�кой Ñ�тан карыÑ�тальніка захоўваецца на дыÑ�ку длÑ� паÑ�таÑ�ннага " "захоўваннÑ�." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Захаваць чаÑ�" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "КолькаÑ�ць Ñ�екунд, Ñ�кіÑ� заÑ�таюцца карыÑ�тальніку да ўвÑ�дзеннÑ� абмежаваннÑ� / " "блакіроўкі Ñ�го Ñ�еанÑ�аў.\n" "\n" "ПаÑ�лÑ� таго, Ñ�к чаÑ� Ñ�ыйдзе Ñ– карыÑ�тальнік будзе па-ранейшаму актыўны, Ñ�еанÑ�Ñ‹ " "карыÑ�тальніка будуць апрацоўвацца Ñž адпаведнаÑ�ці з вызначанымі абмежаваннÑ�мі / " "блакіроўкай, Ñ– амаль нічога нельга будзе зрабіць, каб прадухіліць гÑ�та." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "ЧаÑ� Ñ�пыненнÑ�" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "ЧаÑ� зваротнага адліку" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Узровень лагаваннÑ�" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "КолькаÑ�ць Ñ�екунд, даÑ�тупнага карыÑ�тальніку чаÑ�а, да адпраўкі апошнÑ�га " "крытычнага апавÑ�шчÑ�ннÑ� аб тым, што чаÑ� хутка Ñ�кончыцца." #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Ð�пошнÑ�е папÑ�Ñ€Ñ�джанне" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Кіраванне Ñ�лементамі адÑ�очваннÑ� Timekpr-nExT" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Ð�дÑ�очванне Ñ�еанÑ�аў" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Дадаць Ñž Ñ�піÑ� Ñ�еÑ�Ñ�Ñ–ÑŽ, Ñ�кую трÑ�ба адÑ�очваць" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Выдаліць Ñ�еÑ�Ñ–ÑŽ Ñ�а Ñ�піÑ�у" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "СпіÑ� тыпаў Ñ�еанÑ�аў, Ñ�кіÑ� трÑ�ба адÑ�очваць.\n" "\n" "Вельмі пажадана, не змÑ�ньваць Ñ– не Ñ�кÑ�перыментаваць з гÑ�тым, калі вы на Ñ�амой " "Ñ�праве не ўпÑ�ўнены, што робіце." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "ВыключаныÑ� Ñ�еÑ�Ñ–Ñ–" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Дадайце Ñž Ñ�піÑ� тыпы Ñ�еанÑ�аў, Ñ�кіх нÑ�ма Ñž Ñ�піÑ�е" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Выдаліць ​​Ñ�а Ñ�піÑ�у Ñ�еанÑ�Ñ‹ Ñ�кіÑ� патрÑ�бна выключыць" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "СпіÑ� Ñ�еанÑ�аў, Ñ�кіÑ� трÑ�ба выключыць з адÑ�очваннÑ�.\n" "\n" "Пажадана, не змÑ�нÑ�йць Ñ– не Ñ�кÑ�перыментаваць з гÑ�тым, калі вы на Ñ�амой Ñ�праве не " "ведаеце, навошта гÑ�та." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "ВыключаныÑ� карыÑ�тальнікі" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Дадаць карыÑ�тальніка Ñž Ñ�піÑ� выключÑ�ннÑ�Ñž" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Выдаліць карыÑ�тальніка Ñ�а Ñ�піÑ�у выключÑ�ннÑ�Ñž" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "СпіÑ� карыÑ�тальнікаў, выключаных з адÑ�очваннÑ�.\n" "\n" "Калі лаÑ�ка, укажыце тут назву_акаунта карыÑ�тальнікаў, а не Ñ–Ñ… Ñ�апраўдныÑ� імёны. " "Ð�апрыклад, «jsmith», а не «John Smith»." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "ГÑ�ты параметр вызначае, ці будзе ўключана функцыÑ� ЧаÑ�Гульні.\n" "\n" "ГÑ�та галоўны пераключальнік ЧаÑ�аГульні, калі ён выключаны, ён выключаны длÑ� " "ÑžÑ�Ñ–Ñ…, незалежна ад індывідуальных налад!" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "ЧаÑ�Гульні ўключаны:" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Ð�алада кантралюе, ці будзе манітор актыўнаÑ�ці PlayTime выкарыÑ�тоўваць камандны " "радок працÑ�Ñ�у, уключаючы аргументы, длÑ� маніторынгу працÑ�Ñ�аў (па змаўчанні " "выкарыÑ�тоўваецца толькі імÑ� працÑ�Ñ�у).\n" "\n" "Калі гÑ�ты параметр уключаны, Timekpr-nExT будзе выконваць Ñ�упаÑ�таўленне з " "поўным камандным радком да 512 Ñ�імвалаў, што дазвалÑ�е пашыраць магчымаÑ�ці " "маніторынгу працÑ�Ñ�у.\n" "\n" "Калі лаÑ�ка, будзьце ўважлівыÑ� Ñ– Ñ�шчÑ� раз праверце вашыÑ� шаблоны RegExp у маÑ�ках " "PlayTime кожнага карыÑ�тальніка!" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Пашыраны манітор актыўнаÑ�ці:" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Ужыць налады Timekpr-nExT" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Ужыць уÑ�е налады Timekpr-nExT неадкладна" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "ПашыраныÑ� канфигураванне Timekpr-nExT" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Канфигураванне Timekpr-nExT" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "СтатуÑ� TimekPr-Next кліент-адмініÑ�тратара" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "ЗвеÑ�ткі" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "ПапÑ�Ñ€Ñ�джанне" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Сур'ёзна" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Крытычна" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Timekpr-nExT кліент" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "СтатуÑ� TimekPr-Next кліента" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Захаваць уÑ�е змены" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Зачыніць акно" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "ІмÑ� бÑ�гучага карыÑ�тальніка" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "БÑ�гучаÑ� Ñ�татыÑ�тыка" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "ПрацÑ�глаÑ�ць гÑ�тай Ñ�еÑ�Ñ–Ñ–, альбо чаÑ� паÑ�лÑ� апошнÑ�га Ñ€Ñ�Ñ�тарта Timekpr-nExT" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "ПрацÑ�глаÑ�ць Ñ�еÑ�Ñ–Ñ–:" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "" "ЧаÑ� неактыўнаÑ�ці гÑ�тай Ñ�еÑ�Ñ–Ñ–, альбо чаÑ� паÑ�лÑ� апошнÑ�га Ñ€Ñ�Ñ�тарта Timekpr-nExT" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "ЧаÑ� неактыўнаÑ�ці:" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "Вам заÑ�талоÑ�Ñ� беÑ�перапыннага чаÑ�у. Можа ахопліваць больш за бÑ�гучы дзень." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "ЗаÑ�талоÑ�Ñ� беÑ�перапыннага чаÑ�у:" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "Ð�гульны чаÑ� даÑ�тупны Ñ�ённÑ� Ñž радку, да канца днÑ�" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "ЗаÑ�талоÑ�Ñ� чаÑ�у на Ñ�ённÑ�:" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Дні Ñ– ліміты, Ñ�кіÑ� даÑ�тупныÑ� длÑ� ваÑ�" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Дні Ñ– ліміты" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "ІнтÑ�рвалы чаÑ�у, Ñ�кіÑ� даÑ�тупныÑ� длÑ� выкарыÑ�таннÑ�.\n" "Параметр \"∞\" паказвае, што чаÑ�, праведзены падчаÑ� гÑ�тага інтÑ�рвалу, не будзе " "ўлічвацца Ñž Ñ�утачны ліміт, а будзе ўлічвацца Ñ�к праÑ�той." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "ІнтÑ�рвалы" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Штодзённые ліміты" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "ДадатковаÑ� Ñ�татыÑ�тыка" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "ЧаÑ�, вытрачаны на гÑ�тым тыдні" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "ЧаÑ�, вытрачаны Ñž гÑ�тым меÑ�Ñ�цы" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Выберыце, ці падлічваецца чаÑ� неактыўнай Ñ�еÑ�Ñ–Ñ–.\n" "Калі гÑ�та не пазначана, чаÑ�, праведзены Ñž Ñ�еанÑ�ах ўваходу Ñž канÑ�оль (а не " "Ñ�мулÑ�тар Ñ‚Ñ�рмінала) Ñ– калі Ñ�кран заблакаваны, Ð�Е ўлічваецца.\n" "ГÑ�та вар'іруецца Ñž залежнаÑ�ці ад аÑ�Ñ�роддзÑ� працоўнага Ñ�тала." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Ð�дÑ�очванне неактыўна:" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Выберыце, ці падлічваецца чаÑ� неактыўнай Ñ�еÑ�Ñ–Ñ–. Калі гÑ�та не пазначана, чаÑ�, " "праведзены Ñž Ñ�еанÑ�ах ўваходу Ñž канÑ�оль (а не Ñ�мулÑ�тар Ñ‚Ñ�рмінала) Ñ– калі Ñ�кран " "заблакаваны, Ð�Е ўлічваецца. ГÑ�та вар'іруецца Ñž залежнаÑ�ці ад аÑ�Ñ�роддзÑ�Ñž " "працоўнага Ñ�тала." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "ДадатковыÑ� лііміты" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Ліміты чаÑ�у, даÑ�Ñ�жныÑ� длÑ� ваÑ� гÑ�тым тыдні" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Ліміт чаÑ�у (тыдзень)" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Ліміты чаÑ�у, даÑ�Ñ�жныÑ� длÑ� ваÑ� у гÑ�тым меÑ�Ñ�цы" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Ліміт чаÑ�у (меÑ�Ñ�ц)" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "БÑ�гучаÑ� Ñ�татыÑ�тыка ЧаÑ�аГульні" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Ð�гулам даÑ�тупна на Ñ�ённÑ� ЧаÑ�аГульні" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Ð�гульны ЧаÑ�Гульні вытрчаны Ñ�ённÑ�" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "ЧаÑ�, вытрачаны Ñ�ённÑ�:" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "ГÑ�ты параметр перавызначае ўлік чаÑ�у па змаўчанні.\n" "Калі гÑ�та пазначана, чаÑ� улічваецца толькі пры выкананні дзеÑ�ннÑ�Ñž у «СпіÑ�е " "дзеÑ�ннÑ�Ñž / прылажÑ�ннÑ�ў», аÑ�татні чаÑ� лічыцца бÑ�здзейным." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "ПеравызначÑ�нне абмежаваннÑ� чаÑ�у:" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "КолькаÑ�ць актыўных у цÑ�перашні чаÑ� праграм ЧаÑ�аГульні" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "ЗапушчаныÑ� актыўнÑ�ці" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Дазволіць дзейнаÑ�ць у нÑ�ўлічаныÑ� (\"∞\") прамежкі чаÑ�у.\n" "ГÑ�таÑ� налада дазвалÑ�е выкарыÑ�тоўваць праграмы, пералічаныÑ� Ñž «ДзеÑ�ннÑ�Ñ… / Ñ�піÑ�е " "прыкладаннÑ�ў» на працÑ�гу прамежкаў чаÑ�у, Ñ�кіÑ� пазначаны Ñ�к нÑ�ўлічаныÑ� («∞»). " "Калі налада не ўключана, ні адно з дзеÑ�ннÑ�Ñž не дазволена выконваць!" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Дазволена падчаÑ� \"∞\":" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "ГÑ�та дні Ñ– ліміты, Ñ�кіÑ� даÑ�тупныÑ� вам у рамках абмежаваннÑ�Ñž дзейнаÑ�ці ЧаÑ�аГульні" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "ГÑ�та паказвае дзеÑ�нні / прыкладаннÑ�, Ñ�кіÑ� ўваходзÑ�ць у абмежаванні ЧаÑ�аГульні" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "СпіÑ� прыкладаннÑ�Ñž" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "КанфігурацыÑ� длÑ� перÑ�аналізаваных апавÑ�шчÑ�ннÑ�Ñž аб даÑ�тупным чаÑ�е.\n" "Ð�аладзьце апавÑ�шчÑ�нні так, Ñ�к вы лічыце патрÑ�бным. Ð�днак майце на ўвазе, што " "Ñ‘Ñ�ць два тыпы апавÑ�шчÑ�ннÑ�Ñž, Ñ�кіÑ� нельга перÑ�аналізаваць: апошнÑ�е папÑ�Ñ€Ñ�джанне " "за некаторы чаÑ� да заканчÑ�ннÑ� чаÑ�у Ñ– апавÑ�шчÑ�нні з адлікам, калі чаÑ� хутка " "Ñ�кончыцца.\n" "ЗначÑ�нне «ЧаÑ�» канфігурацыі паказвае чаÑ�, Ñ�кі заÑ�таўÑ�Ñ�, калі будзе паказанае " "апавÑ�шчÑ�нне, параметр «ВажнаÑ�ць» вызначае колер значка Ñ– ўлаÑ�ціваÑ�ці " "апавÑ�шчÑ�ннÑ�.\n" "ІнфармацыÑ� - будзе паказаны зÑ�лёны значок Ñ– інфармацыйнае апавÑ�шчÑ�нне\n" "ПапÑ�Ñ€Ñ�джанне - будзе паказаны жоўты значок Ñ– інфармацыйнае апавÑ�шчÑ�нне\n" "Крытычна - будзе паказаны чырвоны значок Ñ– крытычнае апавÑ�шчÑ�нне, гÑ�та " "апавÑ�шчÑ�нне звычайна паказваецца ва ÑžÑ�Ñ–Ñ… адкрытых прылажÑ�ннÑ�Ñ… Ñ– заÑ�таецца " "адкрытым да таго чаÑ�у, пакуль не будзе зачынена, аднак гÑ�та паводзіны моцна " "залежыць ад аÑ�Ñ�роддзÑ� працоўнага Ñ�тала" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Ð�алады апавÑ�шчÑ�ннÑ�Ñž" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Дадаць новае апавÑ�шчÑ�нне Ñž Ñ�піÑ�" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Выдаліць апавÑ�шчÑ�нне Ñ�а Ñ�піÑ�у" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Ð�алады длÑ� перÑ�аналізаваных апавÑ�шчÑ�ннÑ�Ñž аб даÑ�тупным ЧаÑ�еГульні.\n" "Ð�аладзьце апавÑ�шчÑ�нні так, Ñ�к вы лічыце патрÑ�бным.\n" "ЗначÑ�нне «ЧаÑ�» паказвае колькі ЧаÑ�аГульні заÑ�талоÑ�Ñ�, пакуль будзе паказана " "апавÑ�шчÑ�нне, параметр «ВажнаÑ�ць» вызначае колер значка Ñ– ўлаÑ�ціваÑ�ці " "апавÑ�шчÑ�ннÑ�Ñž.\n" "ІнфармацыÑ� - будзе паказаны зÑ�лёны значок Ñ– інфармацыйнае апавÑ�шчÑ�нне\n" "ПапÑ�Ñ€Ñ�джанне - будзе паказаны жоўты значок Ñ– інфармацыйнае апавÑ�шчÑ�нне\n" "Сур'ёзны - будзе паказаны чырвоны значок Ñ– важнае апавÑ�шчÑ�нне\n" "Крытычна - будзе паказаны чырвоны значок Ñ– крытычнае апавÑ�шчÑ�нне, гÑ�та " "апавÑ�шчÑ�нне звычайна паказваецца ва ÑžÑ�Ñ–Ñ… адкрытых прылажÑ�ннÑ�Ñ… Ñ– заÑ�таецца " "адкрытым да таго чаÑ�у, пакуль не будзе зачынена, аднак гÑ�та паводзіны моцна " "залежыць ад выкарыÑ�тоўванага аÑ�Ñ�роддзÑ� працоўнага Ñ�тала" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Ð�алады апавÑ�шчÑ�ннÑ�Ñž ЧаÑ�аГульні" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Дадаць новае апавÑ�шчÑ�нне ЧаÑ�аГульні Ñž Ñ�піÑ�" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Выдаліць апавÑ�шчÑ�нне ЧаÑ�аГульні Ñ�а Ñ�піÑ�у" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Ð�павÑ�шчÑ�нні" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Выберыце, ці варта выкарыÑ�тоўваць галаÑ�авыÑ� апавÑ�шчÑ�нні, калі такіÑ� маюцца.\n" "Каб зрабіць галаÑ�авыÑ� апавÑ�шчÑ�нні даÑ�тупнымі, трÑ�ба ÑžÑ�талÑ�ваць пакет \"python3-" "espeak\" або \"python3-espeak-ng\"." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "ВыкарыÑ�тоўваць апавÑ�шчÑ�ннÑ�" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "ГÑ�та задае ўзровень лагаваннÑ�.\n" "Калі лаÑ�ка, не зменюйце гÑ�та, калі вы не ўпÑ�ўнены, што робіце Ñ– навошта." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Узровень лагаваннÑ�" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Пазначце, ці трÑ�ба паказваць апавÑ�шчÑ�нне пры змене канфігурацыі лімітаў або " "дазволу" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Паказаць змененыÑ� ліміты" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Пазначце, ці трÑ�ба паказваць уÑ�е апавÑ�шчÑ�нні.\n" "Калі не пазначана, то паказваюцца толькі важныÑ�." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Паказваць уÑ�е апавÑ�шчÑ�нні" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Пазначце, ці трÑ�ба паказваць Ñ�екунды Ñž воблаÑ�ці апавÑ�шчÑ�ннÑ�Ñž.\n" "Ð�екаторыÑ� аÑ�Ñ�роддзÑ� працоўнага Ñ�тала, напрыклад KDE5, не падтрымліваюць Ñ‚Ñ�кÑ�Ñ‚, " "акрамÑ� значкоў апавÑ�шчÑ�ннÑ�Ñž." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "ТÑ�рмін (Ñž Ñ�екундах) колькі паказваюцца апавÑ�шчÑ�нні" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Вызначае, Ñ�к доўга будзе паказвацца апавÑ�шчÑ�нне длÑ� Ñ€Ñ�гулÑ�рных апавÑ�шчÑ�ннÑ�Ñž пра " "чаÑ�, Ñ�кі заÑ�таўÑ�Ñ� Ñ– змены канфігурацыі.\n" "ЗначÑ�нне задаецца Ñž Ñ�екундах.\n" "ЗначÑ�нне 0 азначае паказваць, пакуль не будзе адхілена (не Ñ€Ñ�камендуецца длÑ� " "Ñ€Ñ�гулÑ�рных апавÑ�шчÑ�ннÑ�Ñž).\n" "ЗвÑ�рніце ўвагу, што аÑ�Ñ�роддзе працоўнага Ñ�тала, Ñ�кое вы выкарыÑ�тоўваеце, можа " "перавызначыць гÑ�ты тайм-аўт, Ñ– Ñž гÑ�тым выпадку гÑ�ты параметр не будзе мець " "ніÑ�кага ўплыву на апавÑ�шчÑ�нне." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Тайм-аўт апавÑ�шчÑ�ннÑ� (Ñ�ек)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Вызначае, Ñ�к доўга будзе паказвацца апавÑ�шчÑ�нне длÑ� \"Крытычных\" апавÑ�шчÑ�ннÑ�Ñž " "аб чаÑ�е, Ñ�кі заÑ�таўÑ�Ñ� (калі значок Ñ�тане чырвоным).\n" "ЗначÑ�нне задаецца Ñž Ñ�екундах.\n" "ЗначÑ�нне 0 азначае паказваць, пакуль не будзе адхілена.\n" "ЗвÑ�рніце ўвагу, што аÑ�Ñ�роддзе працоўнага Ñ�тала, Ñ�кое вы выкарыÑ�тоўваеце, можа " "перавызначыць гÑ�ты тайм-аўт, Ñ– Ñž гÑ�тым выпадку гÑ�ты параметр не будзе мець " "ніÑ�кага ўплыву на апавÑ�шчÑ�нне." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Тайм-аўт крытычнага апавÑ�шчÑ�ннÑ� (Ñ�ек)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Выберыце, ці выкарыÑ�тоўваць гук \"званочак\" (кароткі гук апавÑ�шчÑ�ннÑ�), каб " "аб'Ñ�віць аб новым апавÑ�шчÑ�нні ад Timekpr-nExT.\n" "ГÑ�та працуе толькі длÑ� ўключаных апавÑ�шчÑ�ннÑ�Ñž.\n" "Калі гÑ�ты параметр нельга Ñ€Ñ�дагаваць - ваша аÑ�Ñ�роддзе не падтрымлівае гукавыÑ� " "апавÑ�шчÑ�нні." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "ВыкарыÑ�тоўваць гук \"званочак\" длÑ� апавÑ�шчÑ�ннÑ�Ñž" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "КанфігурацыÑ�" #~ msgid "" #~ "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " #~ "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " #~ "terminate sessions, \"shutdown\" - shutdown the computer), examples" #~ msgstr "" #~ "==> задаць абмежаванні / тып блакіроўкі (\"lock\" - блакіроўка Ñ�еÑ�Ñ–Ñ–, " #~ "\"suspend\" - прыпыненне працы кампутара, \"suspendwake\" - прыпыненне Ñ– " #~ "абуджÑ�нне, \"terminate\" - завÑ�ршÑ�нне Ñ�еанÑ�аў, \"shutdown\" - выключÑ�нне " #~ "кампутара), прыклады:" #~ msgid "Copyright (c) 2018-2021 Eduards Bezverhijs" #~ msgstr "Ð�ўтарÑ�кае права (Ñ�) 2018-2021 Eduards Bezverhijs" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Выберыце, ці паказваць карыÑ�тальніку значок замка Ñ– апавÑ�шчÑ�нні Timekpr-" #~ "next.\n" #~ "\n" #~ "ЗвÑ�рніце ўвагу, што пры знÑ�цці галачкі будзе адключаны паказ уÑ�Ñ–Ñ… " #~ "апавÑ�шчÑ�ннÑ�Ñž длÑ� карыÑ�тальніка!" #~ msgid "" #~ "Select whether to use speech notifications, if available.\n" #~ "\n" #~ "You may be able to make speech notifications available by installing package " #~ "\"python3-espeak\"." #~ msgstr "" #~ "Выберыце, ці варта выкарыÑ�тоўваць галаÑ�авыÑ� апавÑ�шчÑ�нні, калі такіÑ� маюцца.\n" #~ "Каб зрабіць галаÑ�авыÑ� апавÑ�шчÑ�нні даÑ�тупнымі, трÑ�ба ÑžÑ�талÑ�ваць пакет " #~ "\"python3-espeak\"." timekpr-next/resource/locale/be/LC_MESSAGES/timekpr.mo000644 001750 001750 00000273607 15122253261 024462 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–÷®–>¦˜:å˜< ™²]™Œš�š¢ºš\]›‘º›3LœŒ€œ# �&1žlXŸ^ÅŸÑ$ Œö¡ƒ£J”¤\ߤ<¥¨>¦y禓a§‚õ§ƒx¨ü¨©º$©!ߩĪJƪS«Ìe«O2¬:‚¬=½¬Mû¬cI­!­­>Ï­#®2®)R®P|®}Í®úK²#F´Rj´(½´&æ´c µ8qµsªµ$¶^C¶@¢¶ã¶0û¶m,·¦š·?A¸a�¸oã¸aS¹yµ¹ƒ/ºw³º+»GE»J�»Ø»wñ»@iÁ>ªÇ+éÇÈ&ȇ:ÈzÂÈ9=Ê*wÊJ¢Ê>íÊL,Ë{yË(õË0ÌOÍD`Í8¥Í2ÞÍ#Î`5Î!–Î ¸Î`ÃÎ$ÏJ;Ï-†ÐÏ´Ñp„ÒßõÒVÕÓE,Ô¹rÔ7,×$d׉×5š×�Ð×{RÙÎÚ/îÚEÛNdÛ}³ÛQ1Ü€ƒÜJÝ"OÝrÝ'ˆÞS°Þ‚ßJ‡ßNÒß„!à@¦àIçà@1árá8uáe®áâ 4â Bæ=Mç%‹ç ±çH¼ç-éÏ3ê'ë+ë.:ëViëhÀë!)ìdKìU°ìíVípí%‡í2­íàíóîWð^ð.}ñϬò#|ó< óoÝó=Mô#‹ô¯ô1Àô%òô/õHõd_õVÄõçø�ù ‘ùžù'±ù‚Ùùs\ú–Ðúxgû!àûdü$güfŒü¨óüxœý.þiDþ7®þ<æþ6#ÿ!Zÿ:|ÿ%·ÿVÝÿ74zl�çWiLÁ¯#¾0âc1w©ÉLãR0`ƒ7ä7VT+«×Lìk95¥5Û' "9 \ 2t e§ 3 ‰A ‡Ë ºS ¿¼ÎN‹ÍÚ9¨\â?.Q(€©0¹.ê]w›’¬.5ÛC$(h3‘Å?Ýg2…H¸SWU\­$ I/ Iy ƒÃ TG!aœ!”þ!A“"Õ"1ë%2&OP&Õ 'v*¹–-HP.G™1�á2Kq3O½4 7o7k„73ð7‚$8 §8/È8)ø8,"9O9 n9$�9’´9PG:K˜:=ä:&";"I;'l;+”;5À;|ö;ys<5í<p#=^”=&ó= ><'>)d>8Ž>+Ç>ó>A ?:O?bŠ?#í@&A8AB=A=€AW¾ATBgkBcÓBG7C5C(µC#ÞC&D|)DŒ¦DŒ3E†ÀE{GF†ÃFVJG3¡GLÕGT"H3wH'«HfÓH\:IF—IVÞIŒ5J´ÂJªwKh"L�‹LeM^‚M†áM[hNhÄN™-OmÇO€5Pr¶Pš)QwÄQyS—¡Si9TC£TxçTJ`UV«UXVd[VžÀV^_WY¾W‰X`¢XlY›pYh Z}uZOóZ~C[yÂ[d<\‘¡\k3]YŸ]‰ù]`ƒ^ä^ý^L_d_z`1�a¿a3Øa b1!b÷SbqKc½cñÂd¶´ekh ‰j”kh«l2mtGms¼ms0nq¤no6o$Pouo}o‘€o pp+p!Epgplpup<Šp"Çpêp#ÿp<#q#`q„q ¤qä®q“v›v$³vØv™ívc\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:18+0300 Last-Translator: Eduards Bezverhijs Language-Team: Belarusian Language: be MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s хвілін%(n)s хвіліна%(n)s хвілін(Ñ‹)%(n)s Ñ�екунд%(n)s Ñ�екунды%(n)s Ñ�екунд%(n)s Ñ�екунда%(n)s Ñ�екунды%(n)s Ñ�екунд%(n)s Ñ�екунд ЧаÑ�аГульні заÑ�талоÑ�Ñ�%(n)s Ñ�екунды ЧаÑ�аГульні заÑ�талоÑ�Ñ�%(n)s Ñ�екунд ЧаÑ�аГульні заÑ�талоÑ�Ñ�%(n)s карыÑ�тальнікаў уÑ�Ñ�го:%(n)s карыÑ�тальнікаў уÑ�Ñ�го:%(n)s карыÑ�тальнікаў уÑ�Ñ�го:---=== Ð�Ð�ТÐ�ТКІ ===---атрымайце інфармацыю пра чаÑ� карыÑ�тальніка Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у з Ñ�ервера, напрыкладатрымаць Ñ�піÑ� карыÑ�тальнікаў з Ñ�ервера, напрыкладатрымаць інфармацыю аб канфігурацыі карыÑ�тальніка Ñ– чаÑ�е з Ñ�ервера, напрыклад:паказаць даведку, напрыклад==> задаць маÑ�кі працÑ�Ñ�у актыўнаÑ�ці PlayTime, длÑ� Ñ�кога ўлічваецца чаÑ�, напрыклад:==> задаць ЧаÑ�Гульні, Ñ�кі заÑ�таўÑ�Ñ� длÑ� карыÑ�тальніка на бÑ�гучы момант чаÑ�у: "+" (дадаць чаÑ�), "-" (аднÑ�ць чаÑ�), "=" (даÑ�тупны дакладны чаÑ�), прыклад (дадаць адну гадзіну)==> уÑ�талюйце абмежаванні ЧаÑ�аГульні длÑ� ÑžÑ�Ñ–Ñ… дазволеных дзён, значÑ�нне не павінна перавышаць дазволаў ЧаÑ�аГульні дазволеных дзён длÑ� карыÑ�тальніка, напрыклад:==> задаць дазволеныÑ� дні длÑ� дзеÑ�ннÑ� ЧаÑ�аГульні, напрыклад:задаць дазволеныÑ� дні длÑ� карыÑ�тальніка, напрыклад==> задаць дазволеныÑ� гадзіны длÑ� вызначанага днÑ� або "ALL" длÑ� кожнага днÑ�, па жаданні пазначыць хвіліны пачатку Ñ– заканчÑ�ннÑ� Ñž дужках, напрыклад [x-y], дадаткова пазначыць ! перад гадзінай, калі гÑ�та не трÑ�ба ўлічваць (вольны чаÑ� длÑ� карыÑ�тальніка), напрыклад:==> задаць абмежаванні / тып блакіроўкі ("lock" - блакіроўка Ñ�еÑ�Ñ–Ñ–, "suspend" - прыпыненне працы кампутара, "suspendwake" - прыпыненне Ñ– абуджÑ�нне, "terminate" - завÑ�ршÑ�нне Ñ�еанÑ�аў, "kill" - забіць Ñ�еанÑ�Ñ‹, "shutdown" - выключÑ�нне кампутара), прыклады:==> задаць чаÑ�, Ñ�кі заÑ�таўÑ�Ñ� карыÑ�тальніку на бÑ�гучы момант чаÑ�у: "+" (дадаць чаÑ�), "-" (аднÑ�ць чаÑ�), "=" (даÑ�тупны дакладны чаÑ�), прыклад (дадаць адну гадзіну)уÑ�талÑ�ваць ліміт чаÑ�у Ñž меÑ�Ñ�ц, напрыкладуÑ�талÑ�ваць абмежаванне чаÑ�у на тыдзень, напрыклад==> уÑ�талÑ�ваць ліміты чаÑ�у длÑ� ÑžÑ�Ñ–Ñ… дазволеных дзён, колькаÑ�ць значÑ�ннÑ�Ñž не павінна перавышаць дазволеных дзён длÑ� карыÑ�тальніка, напрыклад:==> уÑ�талюйце, ці дазволены дзеÑ�нне ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных ("∞") інтÑ�рвалаў, напрыклад:==> уÑ�талÑ�ваць, ці ўключаны ЧаÑ�Гульні длÑ� карыÑ�тальніка, напрыклад:==> уÑ�талюйце, ці трÑ�ба ўлічваць ЧаÑ�Гульні замеÑ�Ñ‚ звычайнай дзейнаÑ�ці, напрыклад:задаць, ці трÑ�ба хаваць значок у трÑ�й Ñ– адхілÑ�ць апавÑ�шчÑ�нні, напрыкладзадаць, ці варта адÑ�очваць неактыўныÑ� Ñ�еанÑ�Ñ‹ карыÑ�тальнікаў, напрыкладÐ�б праграмеÐ�б Timekpr-nExTПадлік актыўнаÑ�ці ЧаÑ�аГульні (у Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, даÑ�тупна, калі карыÑ�тальнік увайшоў у Ñ�Ñ–Ñ�Ñ‚Ñ�му)СпіÑ� прыкладаннÑ�ўФактычны ЧаÑ�Гульні, даÑ�тупны Ñ�ённÑ� (у Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, даÑ�тупны, калі карыÑ�тальнік увайшоў у Ñ�Ñ–Ñ�Ñ‚Ñ�му)Дадаць карыÑ�тальніка Ñž Ñ�піÑ� выключÑ�ннÑ�ўДадайце Ñž Ñ�піÑ� тыпы Ñ�еанÑ�аў, Ñ�кіх нÑ�ма Ñž Ñ�піÑ�еДадаць новую дзейнаÑ�ць ЧаÑ�аГульні. Калі лаÑ�ка, укажыце маÑ�ку актыўнаÑ�ці Ñ– зручнае апіÑ�анне непаÑ�Ñ€Ñ�дна Ñž Ñ�піÑ�е.Дадаць новае апавÑ�шчÑ�нне ЧаÑ�аГульні Ñž Ñ�піÑ�Дадаць новае апавÑ�шчÑ�нне Ñž Ñ�піÑ�Дадаць вызначаны чаÑ� (узнагарода)Дадаць Ñž Ñ�піÑ� Ñ�еÑ�Ñ�Ñ–ÑŽ, Ñ�кую трÑ�ба адÑ�очвацьДадатковы ЧаÑ�Гульні длÑ� карыÑ�тальніка быў апрацаваныДадатковыÑ� наладыПашыраныÑ� параметры канфігурацыіДадатковыÑ� ліімітыдадатковыÑ� опцыіДадатковаÑ� Ñ�татыÑ�тыкаДадатковы чаÑ� длÑ� карыÑ�тальніка апрацаваныДадаць дзеÑ�нні ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных ("∞") чаÑ�овых інтÑ�рвалаў длÑ� выбранага карыÑ�тальніка. ГÑ�ты параметр дазвалÑ�е карыÑ�тальніку выкарыÑ�тоўваць праграмы, наÑ�троеныÑ� Ñž Ñ�го Ñ�піÑ�е дзеÑ�ннÑ�Ñž PlayTime, на працÑ�гу чаÑ�овых інтÑ�рвалаў, Ñ�кіÑ� пазначаны Ñ�к нÑ�ўлічаныÑ� ("∞"). Калі гÑ�таÑ� налада ўключана, выкарыÑ�танне дзеÑ�ннÑ�Ñž не будзе ўлічвацца Ñž лімітах PlayTime, у адваротным выпадку прыкладаннÑ� Ñž Ñ�піÑ�е дзеÑ�ннÑ�Ñž PlayTime будуць Ñ�пыненыÑ�, Ñ�к толькі Ñ�ны будуць запушчаны Ñž нÑ�ўлічаныÑ� ("∞") прамежкі чаÑ�у.Дазволіць дзейнаÑ�ць у нÑ�ўлічаныÑ� ("∞") прамежкі чаÑ�у. ГÑ�таÑ� налада дазвалÑ�е выкарыÑ�тоўваць праграмы, пералічаныÑ� Ñž «ДзеÑ�ннÑ�Ñ… / Ñ�піÑ�е прыкладаннÑ�ў» на працÑ�гу прамежкаў чаÑ�у, Ñ�кіÑ� пазначаны Ñ�к нÑ�ўлічаныÑ� («∞»). Калі налада не ўключана, ні адно з дзеÑ�ннÑ�Ñž не дазволена выконваць!Дадаць абмежаванніДазволеныÑ� дні длÑ� карыÑ�тальніка апрацаваныДадаць Ñž "∞" інтÑ�рвал :Дазволена падчаÑ� "∞":ДазволеныÑ� длÑ� карыÑ�тальніка гадзіны былі апрацаваныУжыць канфігурацыю ЧаÑ�аГульніУжыць абмежаванні Ñ– канфігурацыі ЧаÑ�аГульні на гÑ�тай Ñ�таронцыУжыць налады Timekpr-nExTУжыць дадатковыÑ� налады змененыÑ� на гÑ�тай Ñ�таронцыУжыць уÑ�е налады Timekpr-nExT неадкладнаУжыць наладыЎжываць штодзённыÑ� лімітыУжыць змены на ÑžÑ�е абмежаванні, зробленыÑ� на гÑ�тай Ñ�таронцыКароткаÑ� інфармацыÑ� пра чаÑ�, праведзены Ñ– ÑžÑ�Ñ‘, што звÑ�зана з кіраваннем чаÑ�ам на гÑ�ты дзеньПазначце дні длÑ� абранага перыÑ�ду.Выберыце гадзіны длÑ� карÑ�кціроўкі длÑ� выбраных дзён.Выберыце гадзіны, Ñ�кіÑ� трÑ�ба наладзіць длÑ� абранага перыÑ�ду.Выберыце хвіліны длÑ� карÑ�кціроўкі длÑ� выбраных дзён.Выберыце хвіліны, Ñ�кіÑ� будуць адрÑ�гулÑ�ваны длÑ� выбранага перыÑ�ду.Выберыце гÑ�та, каб наладзіць ЧаÑ�Гульні карыÑ�тальніка на Ñ�ённÑ�шні дзеньВыберыце гÑ�та, каб наладзіць чаÑ� карыÑ�тальніка на Ñ�ённÑ�шні дзеньЗачыніць акноКаманда Ð�Е ВЫКÐ�Ð�Ð�Ð�Ð�: доÑ�туп забароненыКаманда Ð�Е ВЫКÐ�Ð�Ð�Ð�Ð�: Ñ�увÑ�зь не дазволенаКанфігурацыÑ�Ð�алады длÑ� перÑ�аналізаваных апавÑ�шчÑ�ннÑ�Ñž аб даÑ�тупным ЧаÑ�еГульні. Ð�аладзьце апавÑ�шчÑ�нні так, Ñ�к вы лічыце патрÑ�бным. ЗначÑ�нне «ЧаÑ�» паказвае колькі ЧаÑ�аГульні заÑ�талоÑ�Ñ�, пакуль будзе паказана апавÑ�шчÑ�нне, параметр «ВажнаÑ�ць» вызначае колер значка Ñ– ўлаÑ�ціваÑ�ці апавÑ�шчÑ�ннÑ�Ñž. ІнфармацыÑ� - будзе паказаны зÑ�лёны значок Ñ– інфармацыйнае апавÑ�шчÑ�нне ПапÑ�Ñ€Ñ�джанне - будзе паказаны жоўты значок Ñ– інфармацыйнае апавÑ�шчÑ�нне Сур'ёзны - будзе паказаны чырвоны значок Ñ– важнае апавÑ�шчÑ�нне Крытычна - будзе паказаны чырвоны значок Ñ– крытычнае апавÑ�шчÑ�нне, гÑ�та апавÑ�шчÑ�нне звычайна паказваецца ва ÑžÑ�Ñ–Ñ… адкрытых прылажÑ�ннÑ�Ñ… Ñ– заÑ�таецца адкрытым да таго чаÑ�у, пакуль не будзе зачынена, аднак гÑ�та паводзіны моцна залежыць ад выкарыÑ�тоўванага аÑ�Ñ�роддзÑ� працоўнага Ñ�талаКанфігурацыÑ� длÑ� перÑ�аналізаваных апавÑ�шчÑ�ннÑ�Ñž аб даÑ�тупным чаÑ�е. Ð�аладзьце апавÑ�шчÑ�нні так, Ñ�к вы лічыце патрÑ�бным. Ð�днак майце на ўвазе, што Ñ‘Ñ�ць два тыпы апавÑ�шчÑ�ннÑ�Ñž, Ñ�кіÑ� нельга перÑ�аналізаваць: апошнÑ�е папÑ�Ñ€Ñ�джанне за некаторы чаÑ� да заканчÑ�ннÑ� чаÑ�у Ñ– апавÑ�шчÑ�нні з адлікам, калі чаÑ� хутка Ñ�кончыцца. ЗначÑ�нне «ЧаÑ�» канфігурацыі паказвае чаÑ�, Ñ�кі заÑ�таўÑ�Ñ�, калі будзе паказанае апавÑ�шчÑ�нне, параметр «ВажнаÑ�ць» вызначае колер значка Ñ– ўлаÑ�ціваÑ�ці апавÑ�шчÑ�ннÑ�. ІнфармацыÑ� - будзе паказаны зÑ�лёны значок Ñ– інфармацыйнае апавÑ�шчÑ�нне ПапÑ�Ñ€Ñ�джанне - будзе паказаны жоўты значок Ñ– інфармацыйнае апавÑ�шчÑ�нне Крытычна - будзе паказаны чырвоны значок Ñ– крытычнае апавÑ�шчÑ�нне, гÑ�та апавÑ�шчÑ�нне звычайна паказваецца ва ÑžÑ�Ñ–Ñ… адкрытых прылажÑ�ннÑ�Ñ… Ñ– заÑ�таецца адкрытым да таго чаÑ�у, пакуль не будзе зачынена, аднак гÑ�та паводзіны моцна залежыць ад аÑ�Ñ�роддзÑ� працоўнага Ñ�талаКанфігурацыÑ� длÑ� карыÑ�тальніка %s:КанфігурацыÑ� атрыманаÑ�ЗлучÑ�ннÑ�ЗлучаюÑ�ÑŒ...Вам заÑ�талоÑ�Ñ� беÑ�перапыннага чаÑ�у. Можа ахопліваць больш за бÑ�гучы дзень.ЗначÑ�нне вызначае, Ñ�к доўга вы можаце беÑ�перапынна карыÑ�тацца кампутарам, затрачаны чаÑ� можа перакрывацца на некалькі дзён (разлічваецца Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, даÑ�тупна толькі калі карыÑ�тальнік актыўны)ЗаÑ�талоÑ�Ñ� беÑ�перапыннага чаÑ�у:Ð�алады кантролю TIMEKPR-NEXTКіраванне Ñ�лементамі адÑ�очваннÑ� Timekpr-nExTТып кантролю Ñ�еÑ�Ñ�Ñ–Ñ�мі не вызначанСпіÑ� тыпаў Ñ�еанÑ�аў кіраваннÑ� нÑ�правільныСпіÑ� тыпаў Ñ�еанÑ�аў кіраваннÑ� нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныЧаÑ� зваротнага адлікуСтварыце новы прамежак чаÑ�у, Ñ�кі будзе даÑ�тупны длÑ� карыÑ�тальніка. ПаÑ�лÑ� Ñ�тварÑ�ннÑ� інтÑ�рвалу адрÑ�дагуйце чаÑ� Ñ�го пачатку Ñ– заканчÑ�ннÑ� непаÑ�Ñ€Ñ�дна Ñž Ñ�піÑ�е інтÑ�рвалаў.КрытычнаТайм-аўт крытычнага апавÑ�шчÑ�ннÑ� (Ñ�ек)БÑ�гучаÑ� Ñ�татыÑ�тыка ЧаÑ�аГульніІмÑ� бÑ�гучага карыÑ�тальнікаБÑ�гучаÑ� Ñ�татыÑ�тыкаКанфігурацыÑ� штодзённых лімітаў длÑ� ÑžÑ�Ñ–Ñ… дзён тыднÑ�Штодзённые лімітыДзеньДзённыÑ� абмежаванні длÑ� карыÑ�тальнікаў апрацаваныÑ�Дні Ñ– лімітыПаменьшыце штодзённую норму ЧаÑ�аГульні на выбраную адзінку чаÑ�у (гадзіны ці хвіліны) длÑ� выбраных дзён. ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�ктыроўкі!Зменьшыце штодзённы чаÑ� на выбраную адзінку чаÑ�у (гадзіны ці хвіліны) длÑ� выбраных дзён. ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�кціроўкі!Зменьшыце штотыднёвы або штомеÑ�Ñ�чны чаÑ� на выбраную адзінку чаÑ�у (дні, гадзіны або хвіліны) длÑ� абранага перыÑ�ду.Выдаліце абраны інтÑ�рвал чаÑ�у з даÑ�тупнага Ñ�піÑ�у інтÑ�рвалаў.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson ) (Belarussian translat by Aliaksandr Parmon )Уключыць ЧаÑ�Гульні длÑ� абранага карыÑ�тальнікаЧаÑ�Гульні длÑ� карыÑ�тальніка уключаныУключыць перавызначÑ�нне PlayTime длÑ� выбранага карыÑ�тальніка. ГÑ�таÑ� налада перавызначае ўлік чаÑ�у такім чынам, што чаÑ� улічваецца толькі тады, калі запушчана хацÑ� б адно з прыкладаннÑ�Ñž у Ñ�піÑ�е дзеÑ�ннÑ�Ñž PlayTime! ГÑ�та закранае толькі ўлік чаÑ�у, інтÑ�рвалы па-ранейшаму цалкам выконваюцца! Калі працÑ�Ñ�Ñ‹ не запушчаны, чаÑ� лічыцца непрацуючым, такім чынам, гÑ�та вольны чаÑ� длÑ� карыÑ�тальніка!Уключыць перавызначÑ�нне PlayTime:Уключыць ЧаÑ�Гульні:УключанаПашыраны манітор актыўнаÑ�ці:УвÑ�дзіце гадзіну заканчÑ�ннÑ� длÑ� функцыі аўтаматычнага абуджÑ�ннÑ�. ЗвÑ�рніце ўвагу, што гÑ�ты параметр працуе толькі Ñž тым выпадку, калі абуджÑ�нне па гадзінніку Ñ€Ñ�альнага чаÑ�у падтрымліваецца Ñ– ўключана Ñž BIOS / UEFI!УвÑ�дзіце гадзіну пачатку длÑ� функцыі аўтаматычнага абуджÑ�ннÑ�. ЗвÑ�рніце ўвагу, што гÑ�ты параметр працуе толькі Ñž тым выпадку, калі абуджÑ�нне па гадзінніку Ñ€Ñ�альнага чаÑ�у падтрымліваецца Ñ– ўключана Ñž BIOS / UEFI!ВыключаныÑ� Ñ�еÑ�ііВыключаныÑ� карыÑ�тальнікіВыключаныÑ� тыпы Ñ�еанÑ�аў нÑ�правільныÑ�СпіÑ� выключаных тыпаў Ñ�еанÑ�аў нÑ�правільныСпіÑ� выключаных тыпаў Ñ�еанÑ�аў нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныСпіÑ� выключаных карыÑ�тальнікаў нÑ�правільныСпіÑ� выключаных карыÑ�тальнікаў нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныСпіÑ� выключаных карыÑ�тальнікаў не паÑ�уеÐ�е выйшла злучыццаÐ�емагчыма ўключыць функцыю "%%s", Ñ�каÑ� выкарыÑ�тоўваецца длÑ� выÑ�ўленнÑ� чаÑ�у праÑ�тою! ЧаÑ� праÑ�тою / бÑ�здзейнаÑ�ці можа не ўлічвацца, калі Ñ�кран заблакаваны!Ð�пошнÑ�е папÑ�Ñ€Ñ�джаннеЧаÑ� канчатковага апавÑ�шчÑ�ннÑ� "%%s" нÑ�правільныЧаÑ� канчатковага апавÑ�шчÑ�ннÑ� "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныЧаÑ� канчатковага апавÑ�шчÑ�ннÑ� не прайшоўЧаÑ� апошнÑ�га папÑ�Ñ€Ñ�джаннÑ� "%%s" нÑ�правільныЧаÑ� канчатковага папÑ�Ñ€Ñ�джаннÑ� "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныЧаÑ� апошнÑ�га папÑ�Ñ€Ñ�джаннÑ� не паÑ�уеФармат: <дні : гадзіны : хвіліны : Ñ�екунды>Фармат: <гадзіны : хвіліны : Ñ�екунды>ЗСхаваць іконку Ñ– паведамленні:Схаваць значок у трÑ�й длÑ� карыÑ�тальніка быў апрацаваныІнтÑ�рвалы газдінДаÑ�тупныÑ� карыÑ�тальніку гадзінныÑ� інтÑ�рвалы длÑ� выбранага днÑ�. Параметр "∞" паказвае, што чаÑ�, праведзены падчаÑ� гÑ�тага інтÑ�рвалу, не будзе ўлічвацца Ñž Ñ�утачны ліміт, а будзе ўлічвацца Ñ�к праÑ�той. ЗвÑ�рніце ўвагу, што калі дзённы ліміт заканчваецца Ñž 24:00, а ліміт наÑ�тупнага днÑ� пачынаецца Ñž 00:00, то карыÑ�тальнік можа працаваць беÑ�перапынна паÑ�лÑ� поўначы. ЗвÑ�рніце ўвагу, што некалькі інтÑ�рвалаў нельга наладзіць на працÑ�гу адной гадзіны. ІнтÑ�рвал можа пачынацца або заканчвацца або ўтрымліваць пÑ�ўную гадзіну, але не больш за адзін раз. Так задумана, гÑ�та не памылка. Як доўга карыÑ�тальнік быў неактыўны з моманту апошнÑ�га ўваходу Ñž Ñ�Ñ–Ñ�Ñ‚Ñ�му (у Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, даÑ�тупна, калі карыÑ�тальнік увайшоў у Ñ�Ñ–Ñ�Ñ‚Ñ�му)Памылка ініцыÑ�лізацыі іконкі (%%s)!Ð�Ñ�ма значка (іконкі)?ВажнаПавÑ�лічце штодзённую норму ЧаÑ�аГульні на выбраную адзінку чаÑ�у (гадзіны ці хвіліны) длÑ� выбраных дзён. ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�ктыроўкі!ПавÑ�лічце штодзённы чаÑ� на выбраную адзінку чаÑ�у (гадзіны ці хвіліны) длÑ� выбраных дзён. ЗвÑ�рніце ўвагу, што вы можаце выбраць больш за адзін дзень длÑ� карÑ�кціроўкі!ПавÑ�лічце штотыднёвы або штомеÑ�Ñ�чны чаÑ� на выбраную адзінку чаÑ�у (дні, гадзіны або хвіліны) длÑ� абранага перыÑ�ду.СённÑ�шнÑ�Ñ� ІнфармацыÑ�ЗвеÑ�ткіІнфармацыÑ� пра ЧаÑ�ГульніІнфармацыÑ� пра чаÑ�, Ñ�кі заÑ�таўÑ�Ñ�/ быў вытрачаныПамылка ўнутранага падключÑ�ннÑ�, праверце файлы журналаўІнтÑ�рвал выдаленыПачатак інтÑ�рвалу не можа быць такім жа, Ñ�к Ñ– Ñ�канчÑ�ннеПачатак інтÑ�рвалу не можа быць пазней за канецІнтÑ�рвалыТрымайце кантроль над выкарыÑ�таннем кампутараÐ�бмежаванніÐ�алады абмежаваннÑ�ÑžÐ�бмежаванні Ñ– канфігурацыіСпіÑ� тыпаў Ñ�еанÑ�аў, Ñ�кіÑ� трÑ�ба адÑ�очваць. Вельмі пажадана, не змÑ�ньваць Ñ– не Ñ�кÑ�перыментаваць з гÑ�тым, калі вы на Ñ�амой Ñ�праве не ўпÑ�ўнены, што робіце.СпіÑ� Ñ�еанÑ�аў, Ñ�кіÑ� трÑ�ба выключыць з адÑ�очваннÑ�. Пажадана, не змÑ�нÑ�йць Ñ– не Ñ�кÑ�перыментаваць з гÑ�тым, калі вы на Ñ�амой Ñ�праве не ведаеце, навошта гÑ�та.СпіÑ� карыÑ�тальнікаў, зарÑ�гіÑ�траваных у Ñ�Ñ–Ñ�Ñ‚Ñ�меСпіÑ� карыÑ�тальнікаў, выключаных з адÑ�очваннÑ�. Калі лаÑ�ка, укажыце тут назву_акаунта карыÑ�тальнікаў, а не Ñ–Ñ… Ñ�апраўдныÑ� імёны. Ð�апрыклад, «jsmith», а не «John Smith».Пералік дзён тыднÑ� Ñ– дадатковаÑ� інфармацыÑ� пра дзённыÑ� ліміты ЧаÑ�аГульні. Калі лаÑ�ка, уключыце / адключыце дні длÑ� карыÑ�тальніка Ñ– ÑžÑ�талюйце чаÑ� дзеÑ�ннÑ� ЧаÑ�аГульні.СпіÑ� дзён тыднÑ� Ñ– дадатковаÑ� інфармацыÑ� пра дзённы ліміт. Калі лаÑ�ка, уключыце / адключыце дні длÑ� карыÑ�тальніка.Узровень лагаваннÑ�Узровень лагаваннÑ� "%%s" памылковыУзровень лагаваннÑ� "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныУзровень лагаваннÑ� не ÑžÑ�талÑ�ваныУзровень лагаваннÑ�ШтомеÑ�Ñ�цЧытайце ўважліва заўвагі ;)Ð�алады апавÑ�шчÑ�ннÑ�ўТайм-аўт апавÑ�шчÑ�ннÑ� (Ñ�ек)Ð�павÑ�шчÑ�нніКолькаÑ�ць актыўных у цÑ�перашні чаÑ� праграм ЧаÑ�аГульніКолькаÑ�ць Ñ�екунд, Ñ�кіÑ� заÑ�таюцца карыÑ�тальніку да ўвÑ�дзеннÑ� абмежаваннÑ� / блакіроўкі Ñ�го Ñ�еанÑ�аў. ПаÑ�лÑ� таго, Ñ�к чаÑ� Ñ�ыйдзе Ñ– карыÑ�тальнік будзе па-ранейшаму актыўны, Ñ�еанÑ�Ñ‹ карыÑ�тальніка будуць апрацоўвацца Ñž адпаведнаÑ�ці з вызначанымі абмежаваннÑ�мі / блакіроўкай, Ñ– амаль нічога нельга будзе зрабіць, каб прадухіліць гÑ�та.КолькаÑ�ць Ñ�екунд, даÑ�тупнага карыÑ�тальніку чаÑ�а, да адпраўкі апошнÑ�га крытычнага апавÑ�шчÑ�ннÑ� аб тым, што чаÑ� хутка Ñ�кончыцца.ПÐ�МЫЛКÐ� разбору параметраў (калі лаÑ�ка, праверце Ñ�апраўднаÑ�ць параметраў): %%sПерыÑ�дЧаÑ�ГульніДзейнаÑ�ць ЧаÑ�аГульніСпіÑ� дзеÑ�ннÑ�Ñž / прыкладаннÑ�Ñž ЧаÑ�аГульні длÑ� карыÑ�тальніка апрацаваныÑ�ДзённыÑ� ЧаÑ�ыГульні, дазволеныÑ� длÑ� карыÑ�тальніка, апрацаваныÑ�ЧаÑ�Гульні, дазволены падчаÑ� нÑ�ўлічаных інтÑ�рвалаў, длÑ� карыÑ�тальніка апрацаваныЧаÑ�Гульні даÑ�тупны Ñ�ённÑ� (вызначана, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)Ð�алады ЧаÑ�аГульніÐ�бмежаванні ЧаÑ�аГульні длÑ� карыÑ�тальніка апрацаваныÑ�ЧаÑ�Гульні ўключаны:СцÑ�г маніторынгу актыўнаÑ�ці ЧаÑ�аГульні "%%s" нÑ�правільныСцÑ�г маніторынгу пашыранай актыўнаÑ�ці ЧаÑ�аГульні "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныСцÑ�г маніторынгу пашыранай актыўнаÑ�ці ЧаÑ�аГульні не перададзеныСцÑ�г PlayTime "%%s" нÑ�правільныСцÑ�г ЧаÑ�аГульні "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныСцÑ�г ЧаÑ�Гульні не перададзеныЧаÑ�Гульні заÑ�таўшыйÑ�Ñ� (фактычна)ЧаÑ�Гульні заÑ�таўшыйÑ�Ñ� (Ñ�ённÑ�)Ліміты ЧаÑ�аГульніÐ�алады апавÑ�шчÑ�ннÑ�Ñž ЧаÑ�аГульніВарыÑ�нты ЧаÑ�аГульніЧаÑ�Гульні длÑ� карыÑ�тальніка быў перавызначаныЧаÑ�Гульні выкарыÑ�таны (Ñ�ённÑ�):ЧаÑ�аГульні вытрачана Ñ�ённÑ� (захавана, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)Калі вы Ñ�уперкарыÑ�тальнік Ñ– працуе Timekpr-nExT, адкрыйце праграму паўторнаКалі лаÑ�ка, абÑ�рыце дзень каб уÑ�талÑ�ваць лімітыВыберыце гадзінны інтÑ�рвал длÑ� выдаленнÑ�Калі лаÑ�ка, ўкажыце Ñ�піÑ� поўных імёнаў працÑ�Ñ�аў (выкальных файлаў) без шлÑ�ху Ñž Ñ�каÑ�ці радкоў з Ñ€Ñ�гіÑ�трам, Ñ�кіÑ� будуць кантралÑ�вацца Ñž Ñ�Ñ–Ñ�Ñ‚Ñ�ме. Можна такÑ�ама задаць маÑ�кі RegExp длÑ� працÑ�Ñ�аў, але будзьце вельмі аÑ�цÑ�рожныÑ� з імі, бо нÑ�правільнае выкарыÑ�танне гÑ�тага параметра можа прывеÑ�ці да знішчÑ�ннÑ� непажаданых працÑ�Ñ�аў длÑ� карыÑ�тальніка! УВÐ�ГÐ�: RegExp - гÑ�та Ñ�кÑ�пертнаÑ� налада!ІнтÑ�рвал апытваннÑ�ЧаÑ� апытаннÑ� "%%s" памылковыЧаÑ� апытаннÑ� "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныЧаÑ� апытаннÑ� не ÑžÑ�талÑ�ваныÐ�піÑ�анне працÑ�Ñ�уМаÑ�ка працÑ�Ñ�аВыдаліць апавÑ�шчÑ�нне ЧаÑ�аГульні Ñ�а Ñ�піÑ�уВыдаліць карыÑ�тальніка Ñ�а Ñ�піÑ�у выключÑ�ннÑ�ўВыдаліць ​​Ñ�а Ñ�піÑ�у Ñ�еанÑ�Ñ‹ Ñ�кіÑ� патрÑ�бна выключыцьВыдаліць выключаны тып Ñ�еанÑ�уВыдаліць апавÑ�шчÑ�нне Ñ�а Ñ�піÑ�уВыдаліць выбраны запіÑ� з дзейнаÑ�ці ЧаÑ�аГульні.Выдаліць Ñ�еÑ�Ñ–ÑŽ Ñ�а Ñ�піÑ�уÐ�днаўленнеÐ�днавіць канфігурацыю з захаванага Ñ�тануТып абмежаваннÑ� / блакіроўкі длÑ� карыÑ�тальніка апрацаваныТып абмежаваннÑ� / блакіроўкі:БÑ�гучаÑ� дзейнаÑ�ць (фактычна):ЗапушчаныÑ� актыўнÑ�ціЗахаваць уÑ�е зменыЗахаваць чаÑ�ЧаÑ� захаваннÑ� "%%s" памылковыЧаÑ� захаваннÑ� "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныЧаÑ� захаваннÑ� не ÑžÑ�талÑ�ваныВыберыце тып абмежаваннÑ� / блакіроўкі длÑ� карыÑ�тальніка. УВÐ�ГÐ�: калі лаÑ�ка, будзьце вельмі ўважлівыÑ�, падумайце наперад Ñ– прачытайце апіÑ�анне ÑžÑ�Ñ–Ñ… параметраў, калі змÑ�нÑ�еце гÑ�тае значÑ�нне Ñ�а значÑ�ннÑ� па змаўчанні!Выберыце інтÑ�рвал чаÑ�у, калі кампутар можа аўтаматычна абуджацца. ЗвÑ�рніце ўвагу, што гÑ�ты параметр Ñ�фектыўны толькі Ñž тым выпадку, калі абуджÑ�нне па гадзінніку Ñ€Ñ�альнага чаÑ�у падтрымліваецца Ñ– ўключана Ñž BIOS / UEFI!Выберыце, ці падлічваецца чаÑ� неактыўнай Ñ�еÑ�Ñ–Ñ–. Калі гÑ�та не пазначана, чаÑ�, праведзены Ñž Ñ�еанÑ�ах ўваходу Ñž канÑ�оль (а не Ñ�мулÑ�тар Ñ‚Ñ�рмінала) Ñ– калі Ñ�кран заблакаваны, Ð�Е ўлічваецца. ГÑ�та вар'іруецца Ñž залежнаÑ�ці ад аÑ�Ñ�роддзÑ� працоўнага Ñ�тала.Выберыце, ці падлічваецца чаÑ� неактыўных Ñ�еанÑ�аў. Калі гÑ�та не пазначана, чаÑ�, праведзены Ñž Ñ�еанÑ�ах ўваходу Ñž канÑ�оль (а не Ñ�мулÑ�тар Ñ‚Ñ�рмінала) Ñ– калі Ñ�кран заблакаваны, Ð�Е ўлічваецца. ГÑ�та вар'іруецца Ñž залежнаÑ�ці ад аÑ�Ñ�роддзÑ� працоўнага Ñ�тала.Выберыце, ці падлічваецца чаÑ� неактыўнай Ñ�еÑ�Ñ–Ñ–. Калі гÑ�та не пазначана, чаÑ�, праведзены Ñž Ñ�еанÑ�ах ўваходу Ñž канÑ�оль (а не Ñ�мулÑ�тар Ñ‚Ñ�рмінала) Ñ– калі Ñ�кран заблакаваны, Ð�Е ўлічваецца. ГÑ�та вар'іруецца Ñž залежнаÑ�ці ад аÑ�Ñ�роддзÑ�Ñž працоўнага Ñ�тала.Выберыце, ці паказваць карыÑ�тальніку значок замка Timekpr-next Ñ– апавÑ�шчÑ�нні. ЗвÑ�рніце ўвагу, што ÑžÑ�талÑ�ванне гÑ�тай галачкі адключыць паказ уÑ�ёй інфармацыі Ñ– апавÑ�шчÑ�ннÑ�Ñž карыÑ�тальніку!Выберыце, ці выкарыÑ�тоўваць гук "званочак" (кароткі гук апавÑ�шчÑ�ннÑ�), каб аб'Ñ�віць аб новым апавÑ�шчÑ�нні ад Timekpr-nExT. ГÑ�та працуе толькі длÑ� ўключаных апавÑ�шчÑ�ннÑ�Ñž. Калі гÑ�ты параметр нельга Ñ€Ñ�дагаваць - ваша аÑ�Ñ�роддзе не падтрымлівае гукавыÑ� апавÑ�шчÑ�нні.Выберыце, ці варта выкарыÑ�тоўваць галаÑ�авыÑ� апавÑ�шчÑ�нні, калі такіÑ� маюцца. Каб зрабіць галаÑ�авыÑ� апавÑ�шчÑ�нні даÑ�тупнымі, трÑ�ба ÑžÑ�талÑ�ваць пакет "python3-espeak" або "python3-espeak-ng".ДÑ�талізацыÑ� чаÑ�у апытаннÑ� Ñ�еанÑ�аў, Ñ�каÑ� вызначае, Ñ�к чаÑ�та правÑ�раюцца Ñ– ўлічваюцца Ñ�еанÑ�Ñ‹ Ñ– дзейнаÑ�ць карыÑ�тальнікаў. Ð�птымальным з'Ñ�ўлÑ�ецца 3-5 Ñ�екунд, не мÑ�нÑ�йце гÑ�та, калі вы не ўпÑ�ўнены.Тып Ñ�еÑ�ііУÑ�талÑ�выць вызначаны чаÑ�Ð�алады длÑ� ЧаÑ�аГульніСур'ёзнаПаказваць уÑ�е апавÑ�шчÑ�нніПаказаць змененыÑ� лімітыТÑ�рмін (Ñž Ñ�екундах) колькі паказваюцца апавÑ�шчÑ�нніУкажыце чаÑ� у Ñ�екундах, калі Timekpr-nExT пачынае беÑ�перапынны адлік у Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у, перш чым уводзіць абмежаванне / блакіроўку Ñ�еанÑ�аў карыÑ�тальніка.Пазначце, ці трÑ�ба паказваць апавÑ�шчÑ�нне пры змене канфігурацыі лімітаў або дазволуПазначце, ці трÑ�ба паказваць уÑ�е апавÑ�шчÑ�нні. Калі не пазначана, то паказваюцца толькі важныÑ�.Пазначце, ці трÑ�ба паказваць Ñ�екунды Ñž воблаÑ�ці апавÑ�шчÑ�ннÑ�Ñž. Ð�екаторыÑ� аÑ�Ñ�роддзÑ� працоўнага Ñ�тала, напрыклад KDE5, не падтрымліваюць Ñ‚Ñ�кÑ�Ñ‚, акрамÑ� значкоў апавÑ�шчÑ�ннÑ�Ñž.ЗапушчанаСтатуÑ� TimekPr-Next кліент-адмініÑ�тратараСтатуÑ� TimekPr-Next кліентаÐ�днÑ�ць вызначаны чаÑ� (штраф)ЧаÑ� Ñ�пыненнÑ�ЧаÑ� Ñ�пыненнÑ� Ñ�еÑ�Ñ–Ñ– "%%s" нÑ�правільныЧаÑ� заканчÑ�ннÑ� "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныЧаÑ� Ñ�пыненнÑ� Ñ�еÑ�Ñ–Ñ– не паÑ�уеГÑ�ты інтÑ�рвал перакрываецца з Ñ–Ñ�нуючымКанец гÑ�тага інтÑ�рвалу канфліктуе з Ñ–Ñ�нуючымПачатак гÑ�тага інтÑ�рвалу канфліктуе з Ñ–Ñ�нуючымПачатак або канец гÑ�тага інтÑ�рвалу дублюе Ñ–Ñ�нуючыПамылковаÑ� каманда:КолькаÑ�ць гадзін, длÑ� Ñ�ённÑ�шнÑ�га лімітуКолькаÑ�ць хвілін, длÑ� Ñ�ённÑ�шнÑ�га лімітуВыкарыÑ�танне кліента адмініÑ�тратарам Timekpr-nExT выглÑ�дае наÑ�тупным чынам:Узнікла праблема з падключÑ�ннем да Timekpr-nExT (%%s)!Узнікла праблема з падключÑ�ннем да дÑ�мана Timekpr-nExT (%%s)!ГÑ�та дні Ñ– ліміты, Ñ�кіÑ� даÑ�тупныÑ� вам у рамках абмежаваннÑ�Ñž дзейнаÑ�ці ЧаÑ�аГульніДні Ñ– ліміты, Ñ�кіÑ� даÑ�тупныÑ� длÑ� ваÑ�ГÑ�та прыкладанне канфігурацыі длÑ� Timekpr-nExT. Яно дазвалÑ�е ÑžÑ�талёўваць абмежаванні длÑ� вашых аÑ�обных карыÑ�тальнікаў, а такÑ�ама агульныÑ� параметры Timekpr-nExT. Каб выкарыÑ�тоўваць гÑ�ты дадатак, вы павінны альбо выкарыÑ�тоўваць Ñ�го Ñ�к Ñ�уперкарыÑ�тальнік, альбо быць чаÑ�ткай групы timekpr. ЗвÑ�рніце ўвагу, што «Ð�аÑ�тройка Timekpr-nExT» даÑ�тупнаÑ� толькі Ñž Ñ€Ñ�жыме Ñ�уперкарыÑ�тальніка (адмініÑ�тратара)! Калі лаÑ�ка, наладжвайце ўважліва: не заблакуйце Ñ�абе!Ð�алады лімітаў ЧаÑ�аГульні.Ð�алады абмежаваннÑ� па чаÑ�е.ГÑ�ты параметр перавызначае ўлік чаÑ�у па змаўчанні. Калі гÑ�та пазначана, чаÑ� улічваецца толькі пры выкананні дзеÑ�ннÑ�Ñž у «СпіÑ�е дзеÑ�ннÑ�Ñž / прылажÑ�ннÑ�ў», аÑ�татні чаÑ� лічыцца бÑ�здзейным.Вызначае, Ñ�к доўга будзе паказвацца апавÑ�шчÑ�нне длÑ� "Крытычных" апавÑ�шчÑ�ннÑ�Ñž аб чаÑ�е, Ñ�кі заÑ�таўÑ�Ñ� (калі значок Ñ�тане чырвоным). ЗначÑ�нне задаецца Ñž Ñ�екундах. ЗначÑ�нне 0 азначае паказваць, пакуль не будзе адхілена. ЗвÑ�рніце ўвагу, што аÑ�Ñ�роддзе працоўнага Ñ�тала, Ñ�кое вы выкарыÑ�тоўваеце, можа перавызначыць гÑ�ты тайм-аўт, Ñ– Ñž гÑ�тым выпадку гÑ�ты параметр не будзе мець ніÑ�кага ўплыву на апавÑ�шчÑ�нне.Вызначае, Ñ�к доўга будзе паказвацца апавÑ�шчÑ�нне длÑ� Ñ€Ñ�гулÑ�рных апавÑ�шчÑ�ннÑ�Ñž пра чаÑ�, Ñ�кі заÑ�таўÑ�Ñ� Ñ– змены канфігурацыі. ЗначÑ�нне задаецца Ñž Ñ�екундах. ЗначÑ�нне 0 азначае паказваць, пакуль не будзе адхілена (не Ñ€Ñ�камендуецца длÑ� Ñ€Ñ�гулÑ�рных апавÑ�шчÑ�ннÑ�Ñž). ЗвÑ�рніце ўвагу, што аÑ�Ñ�роддзе працоўнага Ñ�тала, Ñ�кое вы выкарыÑ�тоўваеце, можа перавызначыць гÑ�ты тайм-аўт, Ñ– Ñž гÑ�тым выпадку гÑ�ты параметр не будзе мець ніÑ�кага ўплыву на апавÑ�шчÑ�нне.ГÑ�та задае ўзровень лагаваннÑ�. Калі лаÑ�ка, не зменюйце гÑ�та, калі вы не ўпÑ�ўнены, што робіце Ñ– навошта.Ð�алада кантралюе, ці будзе манітор актыўнаÑ�ці PlayTime выкарыÑ�тоўваць камандны радок працÑ�Ñ�у, уключаючы аргументы, длÑ� маніторынгу працÑ�Ñ�аў (па змаўчанні выкарыÑ�тоўваецца толькі імÑ� працÑ�Ñ�у). Калі гÑ�ты параметр уключаны, Timekpr-nExT будзе выконваць Ñ�упаÑ�таўленне з поўным камандным радком да 512 Ñ�імвалаў, што дазвалÑ�е пашыраць магчымаÑ�ці маніторынгу працÑ�Ñ�у. Калі лаÑ�ка, будзьце ўважлівыÑ� Ñ– Ñ�шчÑ� раз праверце вашыÑ� шаблоны RegExp у маÑ�ках PlayTime кожнага карыÑ�тальніка!ГÑ�ты параметр вызначае, ці будзе ўключана функцыÑ� ЧаÑ�Гульні. ГÑ�та галоўны пераключальнік ЧаÑ�аГульні, калі ён выключаны, ён выключаны длÑ� ÑžÑ�Ñ–Ñ…, незалежна ад індывідуальных налад!ГÑ�та паказвае дзеÑ�нні / прыкладаннÑ�, Ñ�кіÑ� ўваходзÑ�ць у абмежаванні ЧаÑ�аГульніІнтÑ�рвалы чаÑ�у, Ñ�кіÑ� даÑ�тупныÑ� длÑ� выкарыÑ�таннÑ�. Параметр "∞" паказвае, што чаÑ�, праведзены падчаÑ� гÑ�тага інтÑ�рвалу, не будзе ўлічвацца Ñž Ñ�утачны ліміт, а будзе ўлічвацца Ñ�к праÑ�той.ГÑ�та вызначае хуткаÑ�ць у Ñ�екундах, з Ñ�кой фактычны Ñ�тан карыÑ�тальніка захоўваецца на дыÑ�к. ДлÑ� павышÑ�ннÑ� прадукцыйнаÑ�ці Ñ– захаваннÑ� выÑ�окай дакладнаÑ�ці, Timekpr-nExT ўлічвае чаÑ� у памÑ�ці з чаÑ�татой «ІнтÑ�рвал апытаннÑ�». ГÑ�ты параметр вызначае чаÑ�тату, з Ñ�кой Ñ�тан карыÑ�тальніка захоўваецца на дыÑ�ку длÑ� паÑ�таÑ�ннага захоўваннÑ�.ЧаÑ�Дазволены чаÑ� зменены,звÑ�рніце ўвагу, колькі заÑ�талоÑ�Ñ� чаÑ�у!ЧаÑ�, даÑ�тупны Ñ�ённÑ� (захаваны, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)ЧаÑ� бÑ�здзейнаÑ�ці (фактычны):ЧаÑ� неактыўнаÑ�ці гÑ�тай Ñ�еÑ�Ñ–Ñ–, альбо чаÑ� паÑ�лÑ� апошнÑ�га Ñ€Ñ�Ñ�тарта Timekpr-nExTЧаÑ� неактыўнаÑ�ці:ЗаÑ�таўшыÑ�Ñ� чаÑ� (фактычны):ЗаÑ�талоÑ�Ñ� чаÑ�у (Ñ�ённÑ�):ЗаÑ�талоÑ�Ñ� чаÑ�у на Ñ�ённÑ�:ЗаÑ�талоÑ�Ñ� чаÑ�у...Ліміт чаÑ�у (меÑ�Ñ�ц)Ліміт чаÑ�у (тыдзень)КанфігурацыÑ� абмежаваннÑ� чаÑ�у змÑ�нілаÑ�Ñ�, звÑ�рніце ўвагу на новую канфігурацыю!Ліміты чаÑ�у, даÑ�Ñ�жныÑ� длÑ� ваÑ� у гÑ�тым меÑ�Ñ�цыЛіміты чаÑ�у, даÑ�Ñ�жныÑ� длÑ� ваÑ� гÑ�тым тыдніПеравызначÑ�нне абмежаваннÑ� чаÑ�у:Вытрачаны чаÑ� (меÑ�Ñ�ц)ПрацÑ�глаÑ�ць Ñ�еÑ�Ñ–Ñ–:Вытрачаны чаÑ� (Ñ�ённÑ�):ЧаÑ� вытрачаны (тыдзень):ЧаÑ�, вытрачаны Ñž гÑ�тым меÑ�Ñ�цыЧаÑ� вытрачаны у гÑ�тым меÑ�Ñ�цы (захаваны, а не Ñž Ñ€Ñ�жыме Ñ€Ñ�альнага чаÑ�у)ПрацÑ�глаÑ�ць гÑ�тай Ñ�еÑ�Ñ–Ñ–, альбо чаÑ� паÑ�лÑ� апошнÑ�га Ñ€Ñ�Ñ�тарта Timekpr-nExTЧаÑ�, вытрачаны на гÑ�тым тыдніЧаÑ�, праведзены на гÑ�тым тыдні (захаваны, а не Ñž Ñ€Ñ�альным чаÑ�е)ЧаÑ�, вытрачаны Ñ�ённÑ� (захаваны, а не Ñž Ñ€Ñ�альным чаÑ�е)ЧаÑ�, вытрачаны Ñ�ённÑ�:Timekpr-nExTПашыраныÑ� канфигураванне Timekpr-nExTКанфигураванне Timekpr-nExTÐ�павÑ�шчÑ�нне ЧаÑ�аГульні Timekpr-nExTÐ�дмініÑ�траванне Timekpr-nExTTimekpr-nExT кліентКанфігурацыÑ� Timekpr-nExT была захаванаÑ�ІнтÑ�рфейÑ� Timekpr-nExT Ñ�шчÑ� не гатовыУзровень лагаваннÑ� Timekpr-nExT. Калі лаÑ�ка, не мÑ�нÑ�йце гÑ�та, калі вы не ўпÑ�ўнены. ХутчÑ�й за ÑžÑ�Ñ‘, вы не знойдзеце нічога цікавага Ñž файлах логаў. ЗначÑ�нні: 1 - Ñ�тандартны, 2 - адладка, 3 - пашыранаÑ� адладкаÐ�павÑ�шчÑ�нне Timekpr-nExTКанфігурацыÑ�, Timekpr-nExTПаÐ�гулам даÑ�тупна на Ñ�ённÑ� ЧаÑ�аГульніÐ�гульны ЧаÑ�Гульні вытрчаны Ñ�ённÑ�Ð�гульны чаÑ� даÑ�тупны Ñ�ённÑ� Ñž радку, да канца днÑ�Ð�дÑ�очванне неактыўных Ñ�еÑ�ій "%%s" нÑ�правільнаеÐ�еактыўны трÑ�к "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныÐ�дÑ�очванне неактыўнага длÑ� карыÑ�тальніка, апрацаванаÐ�дÑ�очванне неактыўных Ñ�еÑ�ій не заданаÐ�дÑ�очваць неактыўныÑ� Ñ�еÑ�Ñ�Ñ–Ñ–:Ð�дÑ�очванне неактыўна:Ð�дÑ�очванне Ñ�еанÑ�аўÐ�ЕЧÐ�КÐ�Ð�Ð�Я ПÐ�МЫЛКÐ�: %%sПÐ�МЫЛКÐ� пры атрыманні канфігурацыі. Праверце файлы журналаў Timekpr-nExTПÐ�МЫЛКÐ� атрыманнÑ� канфігурацыі карыÑ�тальніка. Праверце лог журналаў Timekpr-nExTПÐ�МЫЛКÐ� атрыманнÑ� Ñ�піÑ�а карыÑ�тальнікаў. Калі лаÑ�ка, праверце файлы журналаўÐ�ечаканаÑ� ПÐ�МЫЛКÐ� аднаўленнÑ� канфігурацыі. Праверце лог журналаў Timekpr-nExTПÐ�МЫЛКÐ� кіраваннÑ� абнаўленнем. Калі лаÑ�ка, праверце файлы журналаўÐ�ечаканаÑ� ПÐ�МЫЛКÐ� загрузкі канфігурацыі. Праверце файлы журналаў Timekpr-nExTВыкарыÑ�тоўваць гук "званочак" длÑ� апавÑ�шчÑ�ннÑ�ўВыкарыÑ�тоўваць апавÑ�шчÑ�ннÑ�КарыÑ�тальнік "%%s" канфігурацыÑ� адÑ�утнічаеКарыÑ�тальнік "%%s" кантрольны файл не знойдзеныКарыÑ�тальнік "%%s" адÑ�утнічаеÐ�алады карыÑ�тальнікаКарыÑ�тальніцкіÑ� абмежаванні ЧаÑ�аГульні былі захаваныÑ�ДадатковыÑ� параметры карыÑ�тальніка былі захаваныКанфігурацыÑ� карыÑ�тальніка атрыманаÑ�Ð�бмежаванні чаÑ�у карыÑ�тальніка былі захаваныÑ�КарыÑ�тальнік "%%s", Ñ�цÑ�г ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных інтÑ�рвалаў неправільныКарыÑ�тальнік "%%s", Ñ�цÑ�г ЧаÑ�аГульні падчаÑ� нÑ�ўлічаных інтÑ�рвалаў неправільны Ñ– не будзе ÑžÑ�талÑ�ваныСцÑ�г ЧаÑ�аГульні дазволенага падчаÑ� нÑ�ўлічаных інтÑ�рвалаў, карыÑ�тальніка "%%s" не перададзеныСпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка "%%s" нÑ�правільныСпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка "%%s" нÑ�правільны Ñ– не будзе ÑžÑ�талÑ�ваныСпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка "%%s" не прайшоўСпіÑ� дзён ЧаÑ�аГульні карыÑ�тальніка "%%s" нÑ�правільныСпіÑ� дзён ЧаÑ�аГульні карыÑ�тальніка "%%s" нÑ�правільны Ñ– не будзе ÑžÑ�талÑ�ваныСпіÑ� дзён ЧаÑ�аГульні карыÑ�тальніка "%%s" не прайшоўСцÑ�г уключÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка "%%s" нÑ�правільныКарыÑ�тальніцкі Ñ�цÑ�г уключÑ�ннÑ� ЧаÑ�аГульні "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныСцÑ�г уключÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка "%%s" не перададзеныÐ�перацыÑ� ЧаÑ�аГульні карыÑ�тальніка "%%s" можа быць адной з наÑ�тупных: - + =СцÑ�г перавызначÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка "%%s" нÑ�правільныСцÑ�г перавызначÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка "%%s" нÑ�правільны Ñ– не будзе ÑžÑ�талÑ�ваныСцÑ�г перавызначÑ�ннÑ� ЧаÑ�аГульні карыÑ�тальніка "%%s" не перададзеныЧаÑ�Гульні карыÑ�тальніка "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныДазволеныÑ� гадзіны карыÑ�тальніка "%%s" нÑ�правільныÑ� Ñ– Ñ–Ñ… нельга ÑžÑ�талÑ�вацьКарыÑ�тальнік "%%s" Ñ�піÑ� дзённых абмежаваннÑ�Ñž памылковыСпіÑ� дзённых абмежаваннÑ�Ñž карыÑ�тальніка "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныКарыÑ�тальнік "%%s" Ñ�піÑ� дзённых абмежаваннÑ�Ñž не ÑžÑ�талÑ�ваныКарыÑ�тальнік "%%s" Ñ�піÑ� дзён памылковыСпіÑ� дзён карыÑ�тальніка "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныКарыÑ�тальнік "%%s" Ñ�піÑ� дзён не ÑžÑ�талÑ�ваныКарыÑ�тальнік "%%s" нумар днÑ� павінен быць ад 1 да 7КарыÑ�тальнік "%%s" нумар днÑ� павінен прыÑ�утнічацьКарыÑ�тальнік "%%s" Ñ�цÑ�г "Ñ�хаваць значок у трÑ�й" памылковыСцÑ�г Ñ�хаваць значок у трÑ�Ñ– длÑ� карыÑ�тальніка "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныКарыÑ�тальнік "%%s" Ñ�цÑ�г "Ñ�хаваць Ñž трÑ�й" не ÑžÑ�талÑ�ваныКарыÑ�тальнік "%%s" штомеÑ�Ñ�чныÑ� дазволы памылковыÑ�ШтомеÑ�Ñ�чныÑ� дазволы карыÑ�тальніка "%%s" нÑ�правільныÑ� Ñ– Ñ–Ñ… нельга ÑžÑ�талÑ�вацьКарыÑ�тальнік "%%s" штомеÑ�Ñ�чныÑ� дазволы не ÑžÑ�талÑ�ваныÑ�Тып абмежаваннÑ� / блакіроўкі карыÑ�тальніка "%%s" нÑ�правільныТып абмежаваннÑ� / блакіроўкі карыÑ�тальніка "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныТып абмежаваннÑ� / блакіроўкі карыÑ�тальніка "%%s" памылковыКарыÑ�тальніку "%%s", уÑ�талÑ�ваныÑ� нÑ�правільныÑ� абмежаванні ЧаÑ�аГульніЧаÑ�авы ліміт карыÑ�тальніка "%%s" нÑ�правільныЧаÑ�авы ліміт карыÑ�тальніка "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныÐ�перацыÑ� з чаÑ�ам карыÑ�тальніка "%%s" можа быць адной з наÑ�тупных: - + =КарыÑ�тальнік "%%s" Ñ�цÑ�г "адÑ�очваць неактыўных" памылковыСцÑ�г неактыўнага трÑ�ка карыÑ�тальніка "%%s" нÑ�правільны Ñ– не можа быць уÑ�талÑ�ваныКарыÑ�тальнік "%%s" Ñ�цÑ�г "адÑ�очваць неактыўных" не ÑžÑ�талÑ�ваныКарыÑ�тальнік "%%s" штотыднёвыÑ� дазволы памылковыÑ�ШтотыднёвыÑ� дазволы карыÑ�тальніка "%%s" нÑ�правільнаÑ� Ñ– Ñ�е нельга ÑžÑ�талÑ�вацьКарыÑ�тальнік "%%s" штотыднёвыÑ� дазволы не ÑžÑ�талÑ�ваныÑ�КарыÑ�тальнікКарыÑ�тальнік:КанфігурацыÑ�, звÑ�занаÑ� з карыÑ�тальнікаміСпраўдзіце наладжаныÑ� інтÑ�рвалы чаÑ�у. ГÑ�та абавÑ�зковы крок длÑ� забеÑ�пÑ�чÑ�ннÑ� правільнаÑ�ці інтÑ�рвалаў. ІнтÑ�рвалы, Ñ�кіÑ� маюць праблемы, будуць вылучаны.ПÐ�ПЯРЭДЖÐ�Ð�Ð�Е: Утыліце адмініÑ�траваннÑ� Timekpr-nExT было прапанавана запуÑ�ціцца у Ñ€Ñ�жыме графічнага інтÑ�рфейÑ�у, але дыÑ�плеі недаÑ�тупныÑ�, таму працуе Ñž CLI...ІнтÑ�рвал гадзін абуджÑ�ннÑ�:ПапÑ�Ñ€Ñ�джаннеÐ�бмежаванні дзён на тыдзеньШтотыдзеньТыднёвыÑ� Ñ– меÑ�Ñ�чныÑ� лімітыТыднёвыÑ� Ñ– меÑ�Ñ�чныÑ� ліміты длÑ� карыÑ�тальніка ГÑ�тыÑ� абмежаванні прымÑ�нÑ�юцца да карыÑ�тальніка разам з аÑ�татнÑ�й канфігурацыÑ�й лімітаў.ТыднёвыÑ� Ñ– меÑ�Ñ�чныÑ� ліміты длÑ� карыÑ�тальніка былі апрацаваныКалі чаÑ� Ñ�кончыцца, Ñ�кран кампутара будзе заблакіраваны. ГÑ�ты варыÑ�нт не з'Ñ�ўлÑ�ецца абмежаваннем Ñ– больш падыходзіць длÑ� мÑ�таў Ñ�амакантролю.Калі чаÑ� Ñ�кончыцца, кампутар будзе адключаны. ГÑ�ты варыÑ�нт - абмежаванне! Калі лаÑ�ка, ацаніце, ці патрÑ�бны вам гÑ�ты тып абмежаваннÑ�!Калі чаÑ� Ñ�кончыцца, кампутар будзе прыпынены (пераведзены Ñž Ñ€Ñ�жым Ñ�ну) Ñ– будзе абуджаны Ñž пачатку наÑ�тупнага даÑ�тупнага длÑ� карыÑ�тальніка інтÑ�рвала чаÑ�у. ГÑ�ты варыÑ�нт не з'Ñ�ўлÑ�ецца абмежаваннем Ñ– больш падыходзіць длÑ� мÑ�таў Ñ�амакантролю. Калі кампутар прачынацца, а чаÑ�у ÑžÑ�Ñ‘ Ñ�шчÑ� не заÑ�талоÑ�Ñ�, Ñ�кран кампутара будзе заблакаваны Ñ– праз некаторы чаÑ� зноў пераведзены Ñž Ñ€Ñ�жым Ñ�ну.Калі чаÑ� Ñ�кончыцца, кампутар будзе прыпынены (пераведзены Ñž Ñ€Ñ�жым Ñ�ну). ГÑ�ты варыÑ�нт не з'Ñ�ўлÑ�ецца абмежаваннем Ñ– больш падыходзіць длÑ� мÑ�таў Ñ�амакантролю. Калі кампутар прачынацца, а чаÑ�у ÑžÑ�Ñ‘ Ñ�шчÑ� не заÑ�талоÑ�Ñ�, Ñ�кран кампутара будзе заблакаваны Ñ– праз некаторы чаÑ� зноў пераведзены Ñž Ñ€Ñ�жым Ñ�ну.Калі чаÑ� Ñ�кончыцца, Ñ�еанÑ�Ñ‹ карыÑ�тальніка будуць завершаны. ГÑ�ты варыÑ�нт - абмежаванне! Калі лаÑ�ка, ацаніце, ці патрÑ�бны вам гÑ�ты тып абмежаваннÑ�!Калі чаÑ� Ñ�кончыцца, Ñ�еанÑ�Ñ‹ карыÑ�тальнікаў будуць Ñ�пыненыÑ�. ГÑ�ты варыÑ�нт - абмежаванне! ГÑ�та варыÑ�нт па змаўчанні Ñ–, хутчÑ�й за ÑžÑ�Ñ‘, той, Ñ�кі вам патрÑ�бны!У ваÑ� Ñ‘Ñ�ць %(n)s гадз.У ваÑ� Ñ‘Ñ�ць %(n)s гадз.У ваÑ� Ñ‘Ñ�ць %(n)s гадз.СённÑ� ваш чаÑ� не абмежаваныВаш чаÑ� Ñ�кончыўÑ�Ñ�, вы будзеце прымуÑ�ова выдалены з Ñ�Ñ–Ñ�Ñ‚Ñ�мы празВаш чаÑ� Ñ�кончыўÑ�Ñ�, ваш кампутар будзе прымуÑ�ова адключаны празВаш чаÑ� Ñ�кончыўÑ�Ñ�, ваш кампутар будзе прымуÑ�ова прыпынены празВаш чаÑ� Ñ�кончыўÑ�Ñ�, ваш Ñ�еанÑ� будзе прымуÑ�ова заблакаваны праздувÑ�дзіце гадзінныÑ� інтÑ�рвалывыконваемаÑ� маÑ�ка...ад...ггадзіны нумаруюцца Ñž адпаведнаÑ�ці з ISO 8601 (г.зн. 24-гадзінны гадзіннік, фармат: 0-23)гадз.важна....забіць Ñ�еанÑ�ыблакіроўка Ñ�кранахвхвілнедаÑ�тупнылікавыÑ� значÑ�нні чаÑ�у Ñž Ñ�екундахапіÑ�анне працÑ�Ñ�у...тып Ñ�еÑ�Ñ–Ñ–...выключыць кампутарпрыпыненне / абуджÑ�нне кампутарапрыпыніць кампутарзавÑ�ршыць Ñ�еанÑ�ычаÑ�...ГÑ�таÑ� праграма з'Ñ�ўлÑ�ецца бÑ�Ñ�платным праграмным забеÑ�пÑ�чÑ�ннем: вы можаце раÑ�паўÑ�юджваць Ñ�е Ñ–/або змÑ�нÑ�ць Ñ�е Ñž адпаведнаÑ�ці з умовамі GNU General Public License, апублікаванай Фондам вольнага праграмнага забеÑ�пÑ�чÑ�ннÑ�, альбо верÑ�Ñ–Ñ– 3 ЛіцÑ�нзіі, альбо (на ваш выбар) любой больш познÑ�й верÑ�Ñ–Ñ–. ГÑ�таÑ� праграма раÑ�паўÑ�юджваецца Ñž надзеі, што Ñ�на будзе карыÑ�най, але БЕЗ Ð�ІЯКІХ ГÐ�РÐ�Ð�ТЫЙ; нават без наÑ�ўнай гарантыі прыдатнаÑ�ці длÑ� продажу або прыдатнаÑ�ці длÑ� пÑ�ўнага прызначÑ�ннÑ�. Больш падрабÑ�зную інфармацыю глÑ�дзіце Ñž Генеральнай грамадÑ�кай ліцÑ�нзіі GNU. Ð’Ñ‹ павінны былі атрымаць копію GNU General Public License разам з гÑ�тай праграмай. Калі нÑ�ма, глÑ�дзіце . У Debian глÑ�дзіце файл /usr/share/common-licenses/GPL-3да...Ñ�ённÑ�шні чаÑ�імÑ� карыÑ�тальніка...Ñ�праўдзіцьдні тыднÑ� нумаруюцца Ñž адпаведнаÑ�ці з ISO 8601 (г.зн. панÑ�дзелак - першы дзень, фармат: 1-7)timekpr-next/resource/locale/fr/000775 001750 001750 00000000000 13476006650 020701 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/fr/LC_MESSAGES/000775 001750 001750 00000000000 15122253261 022456 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/locale/fr/LC_MESSAGES/timekpr.po000644 001750 001750 00000312465 15122253261 024502 0ustar00bezvfedubezvfedu000000 000000 # French translation for timekpr-next # Copyright (c) 2023 Rosetta Contributors and Canonical Ltd 2023 # This file is distributed under the same license as the timekpr-next package. # FIRST AUTHOR , 2023. # msgid "" msgstr "" "Project-Id-Version: timekpr-next\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2025-10-14 09:17+0300\n" "PO-Revision-Date: 2025-10-14 19:19+0300\n" "Last-Translator: Eduards Bezverhijs \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Launchpad-Export-Date: 2025-10-14 06:56+0000\n" "X-Generator: Poedit 3.6\n" #: common/constants/messages.py:31 msgid "==> print help, example" msgstr "==> imprimer l'aide, exemple" #: common/constants/messages.py:32 msgid "==> get saved user list from the server, example" msgstr "==> obtenir la liste sauvegardée des utilisateurs du serveur, exemple" #: common/constants/messages.py:33 msgid "==> get user configuration and time information from the server, example" msgstr "" "==> obtenir la configuration de l'utilisateur et les informations de temps du " "serveur, exemple" #: common/constants/messages.py:34 msgid "==> get realtime user time information from the server, example" msgstr "" "obtenir des informations du temps utilisateur en temps réel à partir du " "serveur, exemple" #: common/constants/messages.py:35 msgid "==> set allowed days for the user, example" msgstr "==> définir les jours autorisés pour l'utilisateur, exemple" #. TRANSLATORS: please DO NOT translate the keyword "ALL" #: common/constants/messages.py:37 msgid "" "==> set allowed hours for the specified day, or \"ALL\" for every day, " "optionally specify start and end minutes in brackets like this [x-y], " "additionally specify ! in front of hour if it doesn't have to be accounted " "(free time for user), example" msgstr "" "Définir les heures autorisées pour le jour spécifique, ou \"ALL\" pour tous les " "jours, optionnellement définir les minutes de début et de fin entre crochets " "comme ceci [x-y], optionnellement spécifier ! devant l'heure si elle ne doit " "pas être comptabilisée (temps libre pour l'utilisateur)" #: common/constants/messages.py:38 msgid "" "==> set time limits for all allowed days, the number of values must not exceed " "the allowed days for the user, example" msgstr "" "définir les limites de temps pour tous les jours autorisés, le nombre de " "valeurs ne doit pas dépasser les jours autorisés pour l'utilisateur, exemple" #: common/constants/messages.py:39 msgid "==> set time limit per week, example" msgstr "définir la limite de temps par semaine, exemple" #: common/constants/messages.py:40 msgid "==> set time limit per month, example" msgstr "Définir les limites de temps par mois, exemple" #: common/constants/messages.py:41 msgid "==> set whether to track inactive user sessions, example" msgstr "Définir si le temps d'inactivité doit être compté, exemple" #: common/constants/messages.py:42 msgid "==> set whether to hide tray icon and prevent notifications, example" msgstr "" "définir si l'icône de la barre d'état système doit être masquée et les " "notifications empêchées, exemple" #. TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" #: common/constants/messages.py:44 msgid "" "==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - " "suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - " "terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the " "computer), examples" msgstr "" "définir le type de restriction / verrouillage (\"lock\" - verrouiller la " "session, \"suspend\" - mettre l'ordinateur en veille, \"suspendwake\" - mettre " "en veille et réveiller, \"terminate\" - terminer les sessions, \"kill\" - tuer " "les sessions, \"shutdown\" - éteindre l'ordinateur), exemples" #: common/constants/messages.py:45 msgid "" "==> set time left for the user at the current moment of time: \"+\" (add time), " "\"-\" (subtract time), \"=\" (set exact time available), example (add one hour)" msgstr "" "==> définir le temps restant pour l'utilisateur à l'instant actuel : \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), exemple (add " "une heure)" #: common/constants/messages.py:46 msgid "==> set whether PlayTime is enabled for the user, example" msgstr "définir si PlayTime est activé pour l'utilisateur, exemple" #: common/constants/messages.py:47 msgid "" "==> set whether PlayTime must be accounted instead of normal activity, example" msgstr "" "définir si le temps de jeu doit être comptabilisé au lieu de l'activité " "normale, exemple" #: common/constants/messages.py:48 msgid "" "==> set whether PlayTime activities are allowed during unaccounted (\"∞\") " "intervals, example" msgstr "" "définir si les activités PlayTime sont autorisées pendant les intervalles non " "comptabilisés (\"∞\"), exemple" #: common/constants/messages.py:49 msgid "==> set allowed days for PlayTime activities, example" msgstr "définir des jours autorisés pour les activités PlayTime, exemple" #: common/constants/messages.py:50 msgid "" "==> set PlayTime limits for all allowed days, the number of values must not " "exceed the allowed PlayTime allowed days for the user, example" msgstr "" "définir des limites de temps de jeu pour tous les jours autorisés, le nombre de " "valeurs ne doit pas dépasser les jours de temps de jeu autorisés pour " "l'utilisateur, exemple" #: common/constants/messages.py:51 msgid "" "==> set PlayTime activity process masks, for which the time is accounted, " "example" msgstr "" "définir les masques de processus d'activité PlayTime, pour lesquels le temps " "est comptabilisé, exemple" #: common/constants/messages.py:52 msgid "" "==> set PlayTime left for the user at the current moment of time: \"+\" (add " "time), \"-\" (subtract time), \"=\" (set exact time available), example (add " "one hour)" msgstr "" "définir le temps de jeu restant pour l'utilisateur à l'instant actuel : « + » " "(ajouter du temps), « - » (soustraire du temps), « = » (définir le temps exact " "disponible), exemple (ajouter une heure)" #: common/constants/messages.py:55 msgid "Control sessions types are not passed" msgstr "Les types de sessions de contrôle ne sont pas transmis" #: common/constants/messages.py:56 msgid "Control sessions types list is not correct" msgstr "La liste des types de sessions de contrôle n'est pas correcte" #: common/constants/messages.py:57 msgid "Control sessions types list is not correct and cannot be set" msgstr "" "La liste des types de sessions de contrôle n'est pas correcte et ne peut pas " "être définie" #: common/constants/messages.py:58 msgid "Excluded session types are not passed" msgstr "Les types de session exclue ne sont pas transmis" #: common/constants/messages.py:59 msgid "Excluded session types list is not correct" msgstr "La liste des types de sessions exclues n'est pas correcte" #: common/constants/messages.py:60 msgid "Excluded session types list is not correct and cannot be set" msgstr "" "La liste des types de sessions exclues n'est pas correcte et ne peut pas être " "définie" #: common/constants/messages.py:61 msgid "Excluded user list is not passed" msgstr "la liste des utilisateurs exclus n'est pas transmise" #: common/constants/messages.py:62 msgid "Excluded user list is not correct" msgstr "la liste des utilisateurs exclus n'est pas correcte" #: common/constants/messages.py:63 msgid "Excluded user list is not correct and cannot be set" msgstr "" "la liste des utilisateurs exclus n'est pas correcte et ne peut pas être définie" #: common/constants/messages.py:64 msgid "Final warning time is not passed" msgstr "l'heure de l'avertissement final n'est pas transmise" #: common/constants/messages.py:65 #, python-format msgid "Final warning time \"%%s\" is not correct" msgstr "l'heure de l'avertissement final \"%%s\" n'est pas correcte" #: common/constants/messages.py:66 #, python-format msgid "Final warning time \"%%s\" is not correct and cannot be set" msgstr "" "l'heure de l'avertissement final \"%%s\" n'est pas correcte et ne peut pas être " "définie" #: common/constants/messages.py:67 msgid "Final notification time is not passed" msgstr "l'heure de la notification finale n'est pas transmise" #: common/constants/messages.py:68 #, python-format msgid "Final notification time \"%%s\" is not correct" msgstr "l'heure de la notification finale \"%%s\" n'est pas correcte" #: common/constants/messages.py:69 #, python-format msgid "Final notification time \"%%s\" is not correct and cannot be set" msgstr "" "l'heure de la notification finale \"%%s\" n'est pas correcte et ne peut pas " "être définie" #: common/constants/messages.py:70 msgid "Termination time is not passed" msgstr "l'heure de fin n'est pas transmise" #: common/constants/messages.py:71 #, python-format msgid "Termination time \"%%s\" is not correct" msgstr "l'heure de fin \"%%s\" n'est pas correcte" #: common/constants/messages.py:72 #, python-format msgid "Termination time \"%%s\" is not correct and cannot be set" msgstr "l'heure de fin \"%%s\" n'est pas correcte et ne peut pas être définie" #: common/constants/messages.py:73 msgid "Track inactive is not passed" msgstr "le suivi de l'inactivité n'est pas transmis" #: common/constants/messages.py:74 #, python-format msgid "Track inactive \"%%s\" is not correct" msgstr "le suivi de l'inactivité \"%%s\" n'est pas correct" #: common/constants/messages.py:75 #, python-format msgid "Track inactive \"%%s\" is not correct and cannot be set" msgstr "" "le suivi de l'inactivité \"%%s\" n'est pas correct et ne peut pas être défini" #: common/constants/messages.py:76 msgid "Log level is not passed" msgstr "le niveau de journalisation n'est pas transmis" #: common/constants/messages.py:77 #, python-format msgid "Log level \"%%s\" is not correct" msgstr "le niveau de journalisation \"%%s\" n'est pas correct" #: common/constants/messages.py:78 #, python-format msgid "Log level \"%%s\" is not correct and cannot be set" msgstr "" "le niveau de journalisation \"%%s\" n'est pas correct et ne peut pas être défini" #: common/constants/messages.py:79 msgid "Poll time is not passed" msgstr "l'intervalle d'interrogation n'est pas transmis" #: common/constants/messages.py:80 #, python-format msgid "Poll time \"%%s\" is not correct" msgstr "l'intervalle d'interrogation \"%%s\" n'est pas correct" #: common/constants/messages.py:81 #, python-format msgid "Poll time \"%%s\" is not correct and cannot be set" msgstr "" "l'intervalle d'interrogation \"%%s\" n'est pas correct et ne peut pas être " "défini" #: common/constants/messages.py:82 msgid "Save time is not passed" msgstr "l'intervalle de sauvegarde n'est pas transmis" #: common/constants/messages.py:83 #, python-format msgid "Save time \"%%s\" is not correct" msgstr "l'intervalle de sauvegarde \"%%s\" n'est pas correct" #: common/constants/messages.py:84 #, python-format msgid "Save time \"%%s\" is not correct and cannot be set" msgstr "" "l'intervalle de sauvegarde \"%%s\" n'est pas correct et ne peut pas être défini" #: common/constants/messages.py:85 msgid "PlayTime flag is not passed" msgstr "l'indicateur PlayTime n'est pas transmis" #: common/constants/messages.py:86 #, python-format msgid "PlayTime flag \"%%s\" is not correct" msgstr "l'indicateur PlayTime \"%%s\" n'est pas correct" #: common/constants/messages.py:87 #, python-format msgid "PlayTime flag \"%%s\" is not correct and cannot be set" msgstr "" "l'indicateur PlayTime \"%%s\" n'est pas correct et ne peut pas être défini" #: common/constants/messages.py:88 msgid "PlayTime enhanced activity monitor flag is not passed" msgstr "l'indicateur du moniteur d'activité amélioré PlayTime n'est pas transmis" #: common/constants/messages.py:89 #, python-format msgid "PlayTime enhanced activity monitor flag \"%%s\" is not correct" msgstr "" "l'indicateur du moniteur d'activité amélioré PlayTime \"%%s\" n'est pas correct" #: common/constants/messages.py:90 #, python-format msgid "" "PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set" msgstr "" "l'indicateur du moniteur d'activité amélioré PlayTime \"%%s\" n'est pas correct " "et ne peut pas être défini" #: common/constants/messages.py:93 #, python-format msgid "User's \"%%s\" day number must be present" msgstr "le numéro de jour de l'utilisateur \"%%s\" doit être présent" #: common/constants/messages.py:94 #, python-format msgid "User's \"%%s\" day number must be between 1 and 7" msgstr "le numéro de jour de l'utilisateur \"%%s\" doit être compris entre 1 et 7" #: common/constants/messages.py:95 #, python-format msgid "User's \"%%s\" allowed hours are not correct and cannot be set" msgstr "" "Les heures autorisées de l'utilisateur \"%%s\" ne sont pas correctes et ne " "peuvent pas être définies" #: common/constants/messages.py:96 #, python-format msgid "User's \"%%s\" day list is not passed" msgstr "la liste des jours de l'utilisateur \"%%s\" n'est pas transmise" #: common/constants/messages.py:97 #, python-format msgid "User's \"%%s\" day list is not correct" msgstr "la liste des jours de l'utilisateur \"%%s\" n'est pas correcte" #: common/constants/messages.py:98 #, python-format msgid "User's \"%%s\" day list is not correct and cannot be set" msgstr "" "La liste des jours de l'utilisateur \"%%s\" n'est pas correcte et ne peut pas " "être définie" #: common/constants/messages.py:99 #, python-format msgid "User's \"%%s\" day limits list is not passed" msgstr "" "La liste des limites journalières de l'utilisateur \"%%s\" n'est pas transmise" #: common/constants/messages.py:100 #, python-format msgid "User's \"%%s\" day limits list is not correct" msgstr "" "La liste des limites journalières de l'utilisateur \"%%s\" n'est pas correcte" #: common/constants/messages.py:101 #, python-format msgid "User's \"%%s\" day limits list is not correct and cannot be set" msgstr "" "La liste des limites journalières de l'utilisateur \"%%s\" n'est pas correcte " "et ne peut pas être définie" #: common/constants/messages.py:102 #, python-format msgid "User's \"%%s\" time operation can be one of these: - + =" msgstr "" "L'opération de temps de l'utilisateur \"%%s\" peut être l'une des suivantes : - " "+ =" #: common/constants/messages.py:103 #, python-format msgid "User's \"%%s\" time limit is not correct" msgstr "La limite de temps de l'utilisateur \"%%s\" n'est pas correcte" #: common/constants/messages.py:104 #, python-format msgid "User's \"%%s\" time limit is not correct and cannot be set" msgstr "" "La limite de temps de l'utilisateur \"%%s\" n'est pas correcte et ne peut pas " "être définie" #: common/constants/messages.py:105 #, python-format msgid "User's \"%%s\" monthly allowance is not passed" msgstr "L'allocation mensuelle de l'utilisateur \"%%s\" n'est pas transmise" #: common/constants/messages.py:106 #, python-format msgid "User's \"%%s\" monthly allowance is not correct" msgstr "L'allocation mensuelle de l'utilisateur \"%%s\" n'est pas correcte" #: common/constants/messages.py:107 #, python-format msgid "User's \"%%s\" monthly allowance is not correct and cannot be set" msgstr "" "L'allocation mensuelle de l'utilisateur \"%%s\" n'est pas correcte et ne peut " "pas être définie" #: common/constants/messages.py:108 #, python-format msgid "User's \"%%s\" track inactive flag is not passed" msgstr "" "L'indicateur de suivi de l'inactivité de l'utilisateur \"%%s\" n'est pas " "transmis" #: common/constants/messages.py:109 #, python-format msgid "User's \"%%s\" track inactive flag is not correct" msgstr "" "L'indicateur de suivi de l'inactivité de l'utilisateur \"%%s\" n'est pas correct" #: common/constants/messages.py:110 #, python-format msgid "User's \"%%s\" track inactive flag is not correct and cannot be set" msgstr "" "L'indicateur de suivi de l'inactivité de l'utilisateur \"%%s\" n'est pas " "correct et ne peut pas être défini" #: common/constants/messages.py:111 #, python-format msgid "User's \"%%s\" hide tray icon flag is not passed" msgstr "" "L'indicateur de masquage de l'icône de la barre d'état système de l'utilisateur " "\"%%s\" n'est pas transmis" #: common/constants/messages.py:112 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct" msgstr "" "L'indicateur de masquage de l'icône de la barre d'état système de l'utilisateur " "\"%%s\" n'est pas correct" #: common/constants/messages.py:113 #, python-format msgid "User's \"%%s\" hide tray icon flag is not correct and cannot be set" msgstr "" "L'indicateur de masquage de l'icône de la barre d'état système de l'utilisateur " "\"%%s\" n'est pas correct et ne peut pas être défini" #: common/constants/messages.py:114 #, python-format msgid "User's \"%%s\" restriction / lockout type is not passed" msgstr "" "Le type de restriction / verrouillage de l'utilisateur \"%%s\" n'est pas " "transmis" #: common/constants/messages.py:115 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct" msgstr "" "Le type de restriction / verrouillage de l'utilisateur \"%%s\" n'est pas correct" #: common/constants/messages.py:116 #, python-format msgid "User's \"%%s\" restriction / lockout type is not correct and cannot be set" msgstr "" "Le type de restriction / verrouillage de l'utilisateur \"%%s\" n'est pas " "correct et ne peut pas être défini" #: common/constants/messages.py:117 #, python-format msgid "User's \"%%s\" weekly allowance is not passed" msgstr "l'allocation hebdomadaire de l'utilisateur \"%%s\" n'est pas transmise" #: common/constants/messages.py:118 #, python-format msgid "User's \"%%s\" weekly allowance is not correct" msgstr "L'allocation hebdomadaire de l'utilisateur \"%%s\" n'est pas correcte" #: common/constants/messages.py:119 #, python-format msgid "User's \"%%s\" weekly allowance is not correct and cannot be set" msgstr "" "L'allocation hebdomadaire de l'utilisateur \"%%s\" n'est pas correcte et ne " "peut pas être définie" #: common/constants/messages.py:120 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not passed" msgstr "" "L'indicateur d'activation de PlayTime de l'utilisateur \"%%s\" n'est pas " "transmis" #: common/constants/messages.py:121 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct" msgstr "" "L'indicateur d'activation de PlayTime de l'utilisateur \"%%s\" n'est pas correct" #: common/constants/messages.py:122 #, python-format msgid "User's \"%%s\" PlayTime enable flag is not correct and cannot be set" msgstr "" "L'indicateur d'activation de PlayTime de l'utilisateur \"%%s\" n'est pas " "correct et ne peut pas être défini" #: common/constants/messages.py:123 #, python-format msgid "User's \"%%s\" PlayTime override flag is not passed" msgstr "" "L'indicateur de remplacement de PlayTime de l'utilisateur \"%%s\" n'est pas " "transmis" #: common/constants/messages.py:124 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct" msgstr "" "L'indicateur de remplacement de PlayTime de l'utilisateur \"%%s\" n'est pas " "correct" #: common/constants/messages.py:125 #, python-format msgid "User's \"%%s\" PlayTime override flag is not correct and cannot be set" msgstr "" "L'indicateur de remplacement de PlayTime de l'utilisateur \"%%s\" n'est pas " "correct et ne peut pas être défini" #: common/constants/messages.py:126 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed" msgstr "" "L'indicateur PlayTime autorisé pendant les intervalles non comptabilisés de " "l'utilisateur \"%%s\" n'est pas transmis" #: common/constants/messages.py:127 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct" msgstr "" "L'indicateur PlayTime autorisé pendant les intervalles non comptabilisés de " "l'utilisateur \"%%s\" n'est pas correct" #: common/constants/messages.py:128 #, python-format msgid "" "User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not " "correct and cannot be set" msgstr "" "L'indicateur PlayTime autorisé pendant les intervalles non comptabilisés de " "l'utilisateur \"%%s\" n'est pas correct et ne peut pas être défini" #: common/constants/messages.py:129 #, python-format msgid "User's \"%%s\" PlayTime day list is not passed" msgstr "La liste des jours PlayTime de l'utilisateur \"%%s\" n'est pas transmise" #: common/constants/messages.py:130 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct" msgstr "La liste des jours PlayTime de l'utilisateur \"%%s\" n'est pas correcte" #: common/constants/messages.py:131 #, python-format msgid "User's \"%%s\" PlayTime day list is not correct and cannot be set" msgstr "" "La liste des jours PlayTime de l'utilisateur \"%%s\" n'est pas correcte et ne " "peut pas être définie" #: common/constants/messages.py:132 common/constants/messages.py:135 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not passed" msgstr "" "La liste des limites journalières PlayTime de l'utilisateur \"%%s\" n'est pas " "transmise" #: common/constants/messages.py:133 common/constants/messages.py:136 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct" msgstr "" "La liste des limites journalières PlayTime de l'utilisateur \"%%s\" n'est pas " "correcte" #: common/constants/messages.py:134 common/constants/messages.py:137 #, python-format msgid "User's \"%%s\" PlayTime day limits list is not correct and cannot be set" msgstr "" "La liste des limites journalières PlayTime de l'utilisateur \"%%s\" n'est pas " "correcte et ne peut pas être définie" #: common/constants/messages.py:138 #, python-format msgid "User's \"%%s\" PlayTime operation can be one of these: - + =" msgstr "" "L'opération PlayTime de l'utilisateur \"%%s\" peut être l'une des suivantes : - " "+ =" #: common/constants/messages.py:139 #, python-format msgid "User's \"%%s\" set PlayTime limit is not correct" msgstr "La limite PlayTime définie par l'utilisateur \"%%s\" n'est pas correcte" #: common/constants/messages.py:140 #, python-format msgid "User's \"%%s\" PlayTime time limit is not correct and cannot be set" msgstr "" "La limite de temps PlayTime de l'utilisateur \"%%s\" n'est pas correcte et ne " "peut pas être définie" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:144 msgid "" "Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERREUR inattendue en chargeant la configuration. Inspectez les journaux Timekpr-" "nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:146 msgid "" "Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERREUR inattendue en obtenant la configuration. Inspectez les journaux Timekpr-" "nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:148 msgid "" "Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log " "files" msgstr "" "ERREUR inattendue en obtenant la configuration utilisateur. Inspectez les " "journaux Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:150 msgid "Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files" msgstr "" "ERREUR inattendue en obtenant la liste des utilisateurs. Inspectez les journaux " "Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:152 msgid "" "Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files" msgstr "" "ERREUR inattendue en mettant la configuration à jour. Inspectez les journaux " "Timekpr-nExT" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:154 msgid "Unexpected ERROR updating control. Please inspect Timekpr-nExT log files" msgstr "" "ERREUR inattendue en mettant le contrôle à jour. Inspectez les journaux Timekpr-" "nExT" #: common/constants/messages.py:155 #, python-format msgid "User \"%%s\" configuration is not found" msgstr "La configuration de l'utilisateur \"%%s\" est introuvable" #: common/constants/messages.py:156 #, python-format msgid "User \"%%s\" control file is not found" msgstr "Le fichier de contrôle de l'utilisateur \"%%s\" est introuvable" #: common/constants/messages.py:157 #, python-format msgid "User \"%%s\" is not found" msgstr "L'utilisateur \"%%s\" est introuvable" #: common/constants/messages.py:160 msgid "Connected" msgstr "Connecté" #: common/constants/messages.py:161 msgid "Connecting..." msgstr "Connexion en cours..." #: common/constants/messages.py:162 msgid "Failed to connect" msgstr "Échec de la connexion" #. TRANSLATORS: this message must be 80 symbols long at max #: common/constants/messages.py:164 msgid "" "Please reopen the application if you are superuser and Timekpr-nExT is running" msgstr "" "Rouvrez l'application si vous êtes superutilisateur et Timekpr-nExT tourne" #: common/constants/messages.py:165 msgid "Started" msgstr "Démarré" #: common/constants/messages.py:166 msgid "User configuration retrieved" msgstr "Configuration utilisateur récupérée" #: common/constants/messages.py:167 msgid "Configuration retrieved" msgstr "Configuration récupérée" #: common/constants/messages.py:168 msgid "Track inactive for user has been processed" msgstr "Le suivi de l'inactivité pour l'utilisateur a été traité" #: common/constants/messages.py:169 msgid "Hide tray icon for user has been processed" msgstr "" "Le masquage de l'icône de la barre d'état système pour l'utilisateur a été " "traité" #: common/constants/messages.py:170 msgid "Restriction / lockout type for user has been processed" msgstr "Le type de restriction / verrouillage pour l'utilisateur a été traité" #: common/constants/messages.py:171 msgid "Additional time for user has been processed" msgstr "Le temps supplémentaire pour l'utilisateur a été traité" #: common/constants/messages.py:172 msgid "Additional PlayTime for user has been processed" msgstr "Le PlayTime supplémentaire pour l'utilisateur a été traité" #: common/constants/messages.py:173 msgid "Weekly and monthly limits for user have been processed" msgstr "" "Les limites hebdomadaires et mensuelles pour l'utilisateur ont été traitées" #: common/constants/messages.py:174 msgid "Allowed days for user have been processed" msgstr "Les jours autorisés pour l'utilisateur ont été traités" #: common/constants/messages.py:175 msgid "Day time limits for user have been processed" msgstr "Les limites de temps journalières pour l'utilisateur ont été traitées" #: common/constants/messages.py:176 msgid "Allowed hours for user have been processed" msgstr "Les heures autorisées pour l'utilisateur ont été traitées" #: common/constants/messages.py:177 msgid "Timekpr-nExT configuration has been saved" msgstr "La configuration de Timekpr-nExT a été enregistrée" #: common/constants/messages.py:178 msgid "User time limits have been saved" msgstr "Les limites de temps utilisateur ont été enregistrées" #: common/constants/messages.py:179 msgid "User PlayTime limits have been saved" msgstr "Les limites PlayTime utilisateur ont été enregistrées" #: common/constants/messages.py:180 msgid "User additional options have been saved" msgstr "Les options utilisateur supplémentaires ont été enregistrées" #: common/constants/messages.py:181 msgid "Enable PlayTime for the user has been processed" msgstr "l'activation de PlayTime pour l'utilisateur a été traitée" #: common/constants/messages.py:182 msgid "PlayTime override flag for the user has been processed" msgstr "L'indicateur de remplacement de PlayTime pour l'utilisateur a été traité" #: common/constants/messages.py:183 msgid "" "PlayTime allowed during unaccounted intervals flag for the user has been " "processed" msgstr "" "Le PlayTime autorisé pendant les intervalles non comptabilisés pour " "l'utilisateur a été traité" #: common/constants/messages.py:184 msgid "PlayTime allowed days for user have been processed" msgstr "les jours autorisés PlayTime pour l'utilisateur ont été traités" #: common/constants/messages.py:185 msgid "PlayTime day limits for user have been processed" msgstr "Les limites journalières PlayTime pour l'utilisateur ont été traitées" #: common/constants/messages.py:186 msgid "PlayTime activities for user have been processed" msgstr "Les activités PlayTime pour l'utilisateur ont été traitées" #: common/constants/messages.py:187 msgid "Please select a day to set the limits" msgstr "Veuillez sélectionner un jour pour définir les limites" #: common/constants/messages.py:188 msgid "That interval overlaps with an existing one" msgstr "Cet intervalle chevauche un intervalle existant" #: common/constants/messages.py:189 msgid "That interval's start conflicts with an existing one" msgstr "Le début de cet intervalle entre en conflit avec un intervalle existant" #: common/constants/messages.py:190 msgid "That interval's end conflicts with an existing one" msgstr "la fin de cet intervalle entre en conflit avec un intervalle existant" #: common/constants/messages.py:191 msgid "That interval's start or end duplicates an existing one" msgstr "Le début ou la fin de cet intervalle duplique un intervalle existant" #: common/constants/messages.py:192 msgid "Interval start cannot be the same as end" msgstr "Le début de l'intervalle ne peut pas être identique à la fin" #: common/constants/messages.py:193 msgid "Interval's start cannot be later than end" msgstr "le début de l'intervalle ne peut pas être postérieur à la fin" #: common/constants/messages.py:194 msgid "Please select an hour interval to remove" msgstr "Veuillez sélectionner un intervalle horaire à supprimer" #: common/constants/messages.py:195 msgid "Interval removed" msgstr "Intervalle supprimé" #: common/constants/messages.py:196 msgid "Timekpr-nExT interface is not yet ready" msgstr "l'interface de Timekpr-nExT n'est pas encore prête" #: common/constants/messages.py:199 msgid "" "WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but " "no displays are available, thus running in CLI..." msgstr "" "AVERTISSEMENT : L'utilitaire d'administration de Timekpr-nExT a été invité à " "s'exécuter en mode GUI, mais aucun affichage n'est disponible, il s'exécute " "donc en CLI..." #: common/constants/messages.py:200 msgid "The command is incorrect:" msgstr "La commande est incorrecte :" #: common/constants/messages.py:201 msgid "The usage of Timekpr-nExT admin client is as follows:" msgstr "" "L'utilisation du client d'administration de Timekpr-nExT est la suivante :" #: common/constants/messages.py:202 msgid "---=== NOTICE ===---" msgstr "---=== AVIS ===---" #: common/constants/messages.py:203 msgid "numeric time values are in seconds" msgstr "les valeurs de temps numériques sont en secondes" #: common/constants/messages.py:204 msgid "" "weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, " "format: 1-7)" msgstr "" "les jours de la semaine sont numérotés selon la norme ISO 8601 (lundi est le " "premier jour, format : 1-7)" #: common/constants/messages.py:205 msgid "hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)" msgstr "" "les heures sont numérotées selon la norme ISO 8601 (horloge de 24h, format : " "0-23)" #: common/constants/messages.py:207 #, python-format msgid "%(n)s user in total:" msgid_plural "%(n)s users in total:" msgstr[0] "%(n)s utilisateur au total :" msgstr[1] "%(n)s utilisateurs au total :" #: common/constants/messages.py:208 #, python-format msgid "Configuration for user %s:" msgstr "Configuration pour l'utilisateur %s :" #: common/constants/messages.py:211 msgid "Time left..." msgstr "Temps restant..." #: common/constants/messages.py:212 msgid "Limits & Configuration" msgstr "Limites & Configuration" #: common/constants/messages.py:213 msgid "About" msgstr "À propos" #: common/constants/messages.py:216 resource/client/forms/about.glade:16 msgid "Keep control of computer usage" msgstr "Gardez le contrôle de l'utilisation de l'ordinateur" #: common/constants/messages.py:217 msgid "Day" msgstr "Jour" #: common/constants/messages.py:218 msgid "Enabled" msgstr "Activé" #: common/constants/messages.py:219 common/constants/messages.py:225 msgid "Limit" msgstr "Limite" #: common/constants/messages.py:220 msgid "From" msgstr "De" #: common/constants/messages.py:221 msgid "from..." msgstr "de..." #: common/constants/messages.py:222 msgid "To" msgstr "À" #: common/constants/messages.py:223 msgid "to..." msgstr "à..." #: common/constants/messages.py:224 msgid "Period" msgstr "Période" #: common/constants/messages.py:226 msgid "Weekly" msgstr "Hebdomadaire" #: common/constants/messages.py:227 msgid "Monthly" msgstr "Mensuel" #: common/constants/messages.py:228 common/constants/messages.py:230 msgid "Session type" msgstr "Type de session" #: common/constants/messages.py:229 common/constants/messages.py:231 msgid "session type..." msgstr "type de session..." #: common/constants/messages.py:232 msgid "Username" msgstr "Nom d'utilisateur" #: common/constants/messages.py:233 msgid "username..." msgstr "nom d'utilisateur..." #: common/constants/messages.py:234 msgid "Process mask" msgstr "Masque de processus" #: common/constants/messages.py:235 msgid "executable mask..." msgstr "masque d'exécutable..." #: common/constants/messages.py:236 msgid "Process description" msgstr "Description du processus" #: common/constants/messages.py:237 msgid "process description..." msgstr "description du processus..." #: common/constants/messages.py:238 msgid "Time" msgstr "Temps" #: common/constants/messages.py:239 msgid "time..." msgstr "temps..." #: common/constants/messages.py:240 msgid "Importance" msgstr "Importance" #: common/constants/messages.py:241 msgid "importance..." msgstr "importance..." #: common/constants/messages.py:244 msgid "Timekpr-nExT notification" msgstr "Notification Timekpr-nExT" #: common/constants/messages.py:245 msgid "Timekpr-nExT PlayTime notification" msgstr "Notification PlayTime Timekpr-nExT" #: common/constants/messages.py:246 msgid "Your time is not limited today" msgstr "Votre temps n'est pas limité aujourd'hui" #: common/constants/messages.py:247 msgid "Time allowance has changed, please note new time left!" msgstr "L'allocation de temps a changé, veuillez noter le nouveau temps restant !" #: common/constants/messages.py:248 msgid "Time limit configuration has changed, please note new configuration!" msgstr "" "La configuration de la limite de temps a changé, veuillez noter la nouvelle " "configuration !" #: common/constants/messages.py:249 #, python-format msgid "There is a problem connecting to Timekpr-nExT daemon (%%s)!" msgstr "" "Un problème est survenu lors de la connexion au daemon Timekpr-nExT (%%s) !" #: common/constants/messages.py:250 #, python-format msgid "There is a problem communicating to Timekpr-nExT (%%s)!" msgstr "" "Un problème est survenu lors de la communication avec Timekpr-nExT (%%s) !" #: common/constants/messages.py:251 #, python-format msgid "Icon initialization error (%%s)!" msgstr "Erreur d'initialisation de l'icône (%%s) !" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:253 msgid "Your time is up, you will be forcibly logged out in" msgstr "Votre temps est écoulé, vous serez déconnecté de force dans" #. TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly #: common/constants/messages.py:255 msgid "Your time is up, your computer will be forcibly shutdown in" msgstr "Votre temps est écoulé, votre ordinateur sera éteint de force dans" #. TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly #: common/constants/messages.py:257 msgid "Your time is up, your session will be forcibly locked in" msgstr "Votre temps est écoulé, votre session sera verrouillée de force dans" #. TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly #: common/constants/messages.py:259 msgid "Your time is up, your computer will be forcibly suspended in" msgstr "Votre temps est écoulé, mise en veille de force dans" #. TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly #: common/constants/messages.py:261 #, python-format msgid "%(n)s second" msgid_plural "%(n)s seconds" msgstr[0] "%(n)s seconde" msgstr[1] "%(n)s secondes" #: common/constants/messages.py:262 msgid "Internal connection error, please check log files" msgstr "Erreur de connexion interne, veuillez vérifier les fichiers journaux" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:264 #, python-format msgid "You have %(n)s hour" msgid_plural "You have %(n)s hours" msgstr[0] "Il vous reste %(n)s heure" msgstr[1] "Il vous reste %(n)s heures" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #: common/constants/messages.py:266 #, python-format msgid "%(n)s minute" msgid_plural "%(n)s minutes" msgstr[0] "%(n)s minute" msgstr[1] "%(n)s minutes" #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly #. TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly #: common/constants/messages.py:268 common/constants/messages.py:270 #, python-format msgid "%(n)s second left" msgid_plural "%(n)s seconds left" msgstr[0] "%(n)s seconde restante" msgstr[1] "%(n)s secondes restantes" #: common/constants/messages.py:270 #, python-format msgid "%(n)s second of PlayTime left" msgid_plural "%(n)s seconds of PlayTime left" msgstr[0] "%(n)s seconde de PlayTime restante" msgstr[1] "%(n)s secondes de PlayTime restantes" #: common/constants/messages.py:271 #, python-format msgid "" "Feature \"%%s\", which is used to detect idle time, cannot be enabled!\n" "Idle / inactive time might not be accounted when screen is locked!" msgstr "" "La fonctionnalité \"%%s\", utilisée pour détecter le temps d'inactivité,\n" "ne peut pas être activée ! \n" "Le temps d'inactivité pourrait ne pas être comptabilisé lorsque l'écran est " "verrouillé !" #: common/constants/messages.py:274 #, python-format msgid "UNEXPECTED ERROR: %%s" msgstr "ERREUR INATTENDUE : %%s" #: common/constants/messages.py:275 #, python-format msgid "PARAMETER PARSE ERROR (please check parameter validity): %%s" msgstr "" "ERREUR D'ANALYSE DES PARAMÈTRES (veuillez vérifier la validité des " "paramètres) : %%s" #: common/constants/messages.py:276 msgid "Command FAILED: access denied" msgstr "ÉCHEC de la commande : accès refusé" #: common/constants/messages.py:277 msgid "Command FAILED: communication was not accepted" msgstr "ÉCHEC de la commande : la communication n'a pas été acceptée" #: common/constants/messages.py:278 msgid "n/a" msgstr "s/o" #: resource/client/forms/about.glade:7 msgid "About Timekpr-nExT" msgstr "À propos de Timekpr-nExT" #: resource/client/forms/about.glade:18 msgid "Timekpr-nExT" msgstr "Timekpr-nExT" #. Please enter GPL3 licence text in your language #: resource/client/forms/about.glade:19 msgctxt "timekpr-next" msgid "" "This program is free software: you can redistribute it and/or modify it under " "the terms of the GNU General Public License as published by the Free Software " "Foundation, either version 3 of the License, or (at your option) any later " "version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A " "PARTICULAR PURPOSE. See the GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program. If not, see . In Debian, see file /" "usr/share/common-licenses/GPL-3" msgstr "" "Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les " "termes de la Licence Publique Générale GNU publiée par la Free Software " "Foundation, version 3 ou toute autre version ulterieure.\n" "Ce programme est distribué avec l'espoir d'être utile, mais SANS AUCUNE " "GARANTIE, ni explicite ni implicite, y compris les garanties de " "commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la " "Licence Publique Générale GNU pour plus de détails.\n" "Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même " "temps que ce programme ; si ce n'est pas le cas, regardez . Sous Debian, regardez le fichier /usr/share/common-licenses/GPL-3" #. Please fill in translator credits, each person in new line in format: name.surname@mail.xy, name@mail.xy, nick@mail.xy or so... #: resource/client/forms/about.glade:25 msgid "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )" msgstr "" "Eduards Bezverhijs \n" "(Translations fine-tuning by JP Lord )\n" "(English fine-tuning by Phil Hudson )\n" "Nicolas Loozen (Traduction française initiale)" #: resource/client/forms/admin.glade:155 msgid "Remove excluded session type" msgstr "Supprimer le type de session exclu" #: resource/client/forms/admin.glade:385 msgid "Timekpr-nExT administration" msgstr "Administration de Timekpr-nExT" #: resource/client/forms/admin.glade:403 resource/client/forms/admin.glade:409 #: resource/client/forms/client.glade:261 msgid "Icon, isn't it?" msgstr "Icône, n'est-ce pas ?" #: resource/client/forms/admin.glade:432 msgid "Notes, read carefully ;)" msgstr "Notes, à lire attentivement ;)" #: resource/client/forms/admin.glade:435 msgid "" "This is the configuration app for Timekpr-nExT. It allows you to set time " "limits for your individual users as well as general Timekpr-nExT options.\n" "To use this application, you either have to execute it as superuser or have to " "be part of the timekpr group.\n" "Please note that the \"Timekpr-nExT Configuration\" is available in superuser " "(administrator) mode only!\n" "\n" "Please configure carefully: do not lock yourself out!" msgstr "" "Ceci est l'application de configuration pour Timekpr-nExT. Elle vous permet de " "définir des limites de temps pour vos utilisateurs individuels ainsi que les " "options générales de Timekpr-nExT.\n" "Pour utiliser cette application, vous devez soit l'exécuter en tant que " "superutilisateur, soit faire partie du groupe timekpr.\n" "Veuillez noter que la \"Configuration de Timekpr-nExT\" n'est disponible qu'en " "mode superutilisateur (administrateur) !\n" "\n" "Veuillez configurer avec soin : ne vous bloquez pas vous-même !" #: resource/client/forms/admin.glade:465 resource/client/forms/admin.glade:3047 msgid "Users related configuration" msgstr "Configuration relative aux utilisateurs" #: resource/client/forms/admin.glade:476 resource/client/forms/client.glade:298 msgid "Username:" msgstr "Nom d'utilisateur :" #: resource/client/forms/admin.glade:504 resource/client/forms/admin.glade:516 msgid "List of usernames registered on the system" msgstr "Liste des noms d'utilisateur enregistrés sur le système" #: resource/client/forms/admin.glade:530 msgid "Restore" msgstr "Restaurer" #: resource/client/forms/admin.glade:535 msgid "Restore configuration from saved state" msgstr "Restaurer la configuration à partir de l'état sauvegardé" #: resource/client/forms/admin.glade:586 msgid "Information about time left / spent" msgstr "Informations sur le temps restant / passé" #: resource/client/forms/admin.glade:610 msgid "" "Continuous time left. May span more than the current day (realtime, available " "when user is logged in)" msgstr "" "Temps continu restant. Peut s'étendre sur plus que la journée actuelle (temps " "réel, disponible lorsque l'utilisateur est connecté)" #: resource/client/forms/admin.glade:612 msgid "Time left (actual):" msgstr "Temps restant (actuel) :" #: resource/client/forms/admin.glade:626 resource/client/forms/admin.glade:657 #: resource/client/forms/admin.glade:688 resource/client/forms/admin.glade:732 #: resource/client/forms/admin.glade:763 resource/client/forms/admin.glade:794 #: resource/client/forms/client.glade:411 resource/client/forms/client.glade:425 #: resource/client/forms/client.glade:456 resource/client/forms/client.glade:502 #: resource/client/forms/client.glade:728 resource/client/forms/client.glade:786 #: resource/client/forms/client.glade:857 resource/client/forms/client.glade:885 #: resource/client/forms/client.glade:985 resource/client/forms/client.glade:1011 msgid "Format: " msgstr "Format : " #: resource/client/forms/admin.glade:641 msgid "" "How long the user was inactive since last login (realtime, available when user " "is logged in)" msgstr "" "Depuis combien de temps l'utilisateur est inactif depuis sa dernière connexion " "(temps réel, disponible lorsque l'utilisateur est connecté)" #: resource/client/forms/admin.glade:643 msgid "Time inactive (actual):" msgstr "Temps inactif (actuel) :" #: resource/client/forms/admin.glade:672 msgid "Time available today (saved stated, not real-time)" msgstr "Temps disponible aujourd'hui (état sauvegardé, non temps réel)" #: resource/client/forms/admin.glade:674 msgid "Time left (today):" msgstr "Temps restant (aujourd'hui) :" #: resource/client/forms/admin.glade:716 msgid "Time spent today (saved stated, not real-time)" msgstr "Temps passé aujourd'hui (état sauvegardé, non temps réel)" #: resource/client/forms/admin.glade:718 msgid "Time spent (today):" msgstr "Temps passé (aujourd'hui) :" #: resource/client/forms/admin.glade:747 msgid "Time spent this week (saved stated, not real-time)" msgstr "Temps passé cette semaine (état sauvegardé, non temps réel)" #: resource/client/forms/admin.glade:749 resource/client/forms/client.glade:717 msgid "Time spent (week):" msgstr "Temps passé (semaine) :" #: resource/client/forms/admin.glade:777 msgid "Time spent this month (saved stated, not real-time)" msgstr "Temps passé ce mois-ci (état sauvegardé, non temps réel)" #: resource/client/forms/admin.glade:779 resource/client/forms/client.glade:744 msgid "Time spent (month):" msgstr "Temps passé (mois) :" #: resource/client/forms/admin.glade:861 msgid "Allowance adjustments" msgstr "Ajustements de l'allocation" #: resource/client/forms/admin.glade:885 msgid "today's time" msgstr "temps d'aujourd'hui" #: resource/client/forms/admin.glade:889 msgid "Choose this to adjust user's time allowance for today" msgstr "" "Choisir ceci pour ajuster l'allocation de temps de l'utilisateur pour " "aujourd'hui" #: resource/client/forms/admin.glade:901 msgid "PlayTime" msgstr "PlayTime" #: resource/client/forms/admin.glade:905 msgid "Choose this to adjust user's PlayTime allowance for today" msgstr "" "Choisir ceci pour ajuster l'allocation de PlayTime de l'utilisateur pour " "aujourd'hui" #: resource/client/forms/admin.glade:934 msgid "hr" msgstr "h" #: resource/client/forms/admin.glade:945 msgid "The number of minutes to be adjusted for today's limit" msgstr "Le nombre de minutes à ajuster pour la limite d'aujourd'hui" #: resource/client/forms/admin.glade:961 msgid "The number of hours to be adjusted for today's limit" msgstr "Le nombre d'heures à ajuster pour la limite d'aujourd'hui" #: resource/client/forms/admin.glade:977 msgid "min" msgstr "min" #: resource/client/forms/admin.glade:1004 msgid "Add specified time (reward)" msgstr "Ajouter le temps spécifié (récompense)" #: resource/client/forms/admin.glade:1020 msgid "Subtract specified time (penalty)" msgstr "Soustraire le temps spécifié (pénalité)" #: resource/client/forms/admin.glade:1036 msgid "Set this specific time limit" msgstr "Définir cette limite de temps spécifique" #: resource/client/forms/admin.glade:1101 msgid "Information about PlayTime" msgstr "Informations sur PlayTime" #: resource/client/forms/admin.glade:1134 msgid "" "Actual PlayTime available today (realtime, available when user is logged in)" msgstr "" "PlayTime réel disponible aujourd'hui (temps réel, disponible lorsque " "l'utilisateur est connecté)" #: resource/client/forms/admin.glade:1136 msgid "PlayTime left (actual):" msgstr "PlayTime restant (actuel) :" #: resource/client/forms/admin.glade:1150 resource/client/forms/admin.glade:1181 #: resource/client/forms/admin.glade:1269 msgid "Format: " msgstr "Format : " #: resource/client/forms/admin.glade:1165 msgid "PlayTime available today (saved stated, not real-time)" msgstr "PlayTime disponible aujourd'hui (état sauvegardé, non temps réel)" #: resource/client/forms/admin.glade:1167 msgid "PlayTime left (today):" msgstr "PlayTime restant (aujourd'hui) :" #: resource/client/forms/admin.glade:1196 resource/client/forms/admin.glade:1212 msgid "" "Active PlayTime activity count (realtime, available when user is logged in)" msgstr "" "Nombre d'activités PlayTime actives (temps réel, disponible lorsque " "l'utilisateur est connecté)" #: resource/client/forms/admin.glade:1198 msgid "Running activities (actual):" msgstr "Activités en cours (actuel) :" #: resource/client/forms/admin.glade:1253 msgid "PlayTime spent today (saved stated, not real-time)" msgstr "PlayTime passé aujourd'hui (état sauvegardé, non temps réel)" #: resource/client/forms/admin.glade:1255 msgid "PlayTime spent (today):" msgstr "PlayTime passé (aujourd'hui) :" #: resource/client/forms/admin.glade:1306 msgid "" "Brief information about time spent and everything related to time management " "for this day" msgstr "" "Brèves informations sur le temps passé et tout ce qui concerne la gestion du " "temps pour cette journée" #: resource/client/forms/admin.glade:1307 msgid "Info & Today" msgstr "Infos & Aujourd'hui" #: resource/client/forms/admin.glade:1348 msgid "This lets you configure time limits." msgstr "Ceci vous permet de configurer les limites de temps." #: resource/client/forms/admin.glade:1350 msgid "Week day limits" msgstr "Limites des jours de la semaine" #. This is meant for very short (e.g. one letter) abbreviation of hours #: resource/client/forms/admin.glade:1370 resource/client/forms/admin.glade:1869 #: resource/client/forms/admin.glade:2271 msgid "h" msgstr "h" #: resource/client/forms/admin.glade:1374 resource/client/forms/admin.glade:2275 msgid "Choose hours to be adjusted for selected days." msgstr "Choisir les heures à ajuster pour les jours sélectionnés." #. This is meant for very short (e.g. one letter) abbreviation of minutes #: resource/client/forms/admin.glade:1386 resource/client/forms/admin.glade:1885 #: resource/client/forms/admin.glade:2287 msgid "m" msgstr "m" #: resource/client/forms/admin.glade:1390 resource/client/forms/admin.glade:2291 msgid "Choose minutes to be adjusted for selected days." msgstr "Choisir les minutes à ajuster pour les jours sélectionnés." #: resource/client/forms/admin.glade:1410 msgid "" "Increase daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Augmenter l'allocation de temps quotidienne de l'unité de temps sélectionnée " "(heures ou minutes) pour les jours sélectionnés.\n" "\n" "Veuillez noter que vous pouvez sélectionner plus qu'un jour pour l'ajustement !" #: resource/client/forms/admin.glade:1427 msgid "" "Decrease daily time allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Diminuer l'allocation de temps quotidienne de l'unité de temps sélectionnée " "(heures ou minutes) pour les jours sélectionnés.\n" "\n" "Veuillez noter que vous pouvez sélectionner plus qu'un jour pour l'ajustement !" #: resource/client/forms/admin.glade:1474 msgid "" "Lists day of the week and additional information about the day's limit.\n" "\n" "Please enable / disable days for the user." msgstr "" "Liste le jour de la semaine et des informations supplémentaires sur la limite " "du jour.\n" "\n" "Veuillez activer / désactiver les jours pour l'utilisateur." #: resource/client/forms/admin.glade:1552 msgid "" "Hour intervals for selected day available to the user.\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead.\n" "\n" "Please note that if the day's limit ends at 24:00 and the next day's limit " "starts at 00:00, then the user can work continuously past midnight.\n" "\n" "Please note that multiple intervals cannot be configured within the same hour.\n" "An interval can start or end or contain a specific hour, but not more than " "once. This is by design, not a bug.\n" "\n" msgstr "" "Intervalles horaires pour le jour sélectionné disponibles pour l'utilisateur.\n" "L'option \"∞\" indique que le temps passé pendant cet intervalle ne sera pas " "comptabilisé dans la limite quotidienne, il sera plutôt comptabilisé comme " "inactif.\n" "\n" "Veuillez noter que si la limite du jour se termine à 24:00 et que la limite du " "jour suivant commence à 00:00, l'utilisateur peut alors travailler en continu " "après minuit.\n" "\n" "Veuillez noter que plusieurs intervalles ne peuvent pas être configurés dans la " "même heure.\n" "Un intervalle peut commencer ou se terminer ou contenir une heure spécifique, " "mais pas plus d'une fois. Ceci est intentionnel, ce n'est pas un bug.\n" "\n" #: resource/client/forms/admin.glade:1585 msgid "Hour intervals" msgstr "Intervalles horaires" #: resource/client/forms/admin.glade:1607 msgid "" "Create a new time interval that will be available to the user.\n" "\n" "After creating the interval, please edit its start and end times directly in " "interval list." msgstr "" "Créer un nouvel intervalle de temps qui sera disponible pour l'utilisateur.\n" "\n" "Après avoir créé l'intervalle, veuillez modifier ses heures de début et de fin " "directement dans la liste des intervalles." #: resource/client/forms/admin.glade:1624 msgid "Delete the selected time interval from the available list of intervals." msgstr "" "Supprimer l'intervalle de temps sélectionné de la liste des intervalles " "disponibles." #: resource/client/forms/admin.glade:1692 msgid "enter hour intervals" msgstr "entrer les intervalles horaires" #: resource/client/forms/admin.glade:1746 msgid "verify" msgstr "vérifier" #: resource/client/forms/admin.glade:1750 msgid "" "Verify configured time intervals. This is a mandatory step to ensure that " "intervals are correct.\n" "\n" "Intervals which have problems will be highlighted." msgstr "" "Vérifier les intervalles de temps configurés. C'est une étape obligatoire pour " "s'assurer que les intervalles sont corrects.\n" "\n" "Les intervalles qui posent problème seront mis en évidence." #: resource/client/forms/admin.glade:1825 msgid "Weekly and monthly limits" msgstr "Limites hebdomadaires et mensuelles" #. This is meant for very short (e.g. one letter) abbreviation of days #: resource/client/forms/admin.glade:1853 msgid "d" msgstr "j" #: resource/client/forms/admin.glade:1857 msgid "Choose days to be adjusted for selected period." msgstr "Choisir les jours à ajuster pour la période sélectionnée." #: resource/client/forms/admin.glade:1873 msgid "Choose hours to be adjusted for selected period." msgstr "Choisir les heures à ajuster pour la période sélectionnée." #: resource/client/forms/admin.glade:1889 msgid "Choose minutes to be adjusted for selected period." msgstr "Choisir les minutes à ajuster pour la période sélectionnée." #: resource/client/forms/admin.glade:1917 msgid "" "Increase weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Augmenter l'allocation de temps hebdomadaire ou mensuelle par l'unité de temps " "sélectionnée (jours, heures ou minutes) pour la période sélectionnée." #: resource/client/forms/admin.glade:1931 msgid "" "Decrease weekly or monthly time allowance by selected time unit (days or hours " "or minutes) for the selected period." msgstr "" "Diminuer l'allocation de temps hebdomadaire ou mensuelle par l'unité de temps " "sélectionnée (jours, heures ou minutes) pour la période sélectionnée." #: resource/client/forms/admin.glade:1980 msgid "" "Weekly and monthly limits for the user.\n" "\n" "These limits are applied to user together with the rest of limit configuration." msgstr "" "Limites hebdomadaires et mensuelles pour l'utilisateur.\n" "\n" "Ces limites sont appliquées à l'utilisateur avec le reste de la configuration " "des limites." #: resource/client/forms/admin.glade:2022 msgid "Apply daily limits" msgstr "Appliquer les limites quotidiennes" #: resource/client/forms/admin.glade:2027 msgid "Apply limit all changes made in this page" msgstr "Appliquer toutes les modifications de limite effectuées sur cette page" #: resource/client/forms/admin.glade:2048 msgid "Daily limit configuration for all week days" msgstr "Configuration des limites quotidiennes pour tous les jours de la semaine" #: resource/client/forms/admin.glade:2049 msgid "Limit configuration" msgstr "Configuration des limites" #: resource/client/forms/admin.glade:2070 msgid "Settings for PlayTime activities" msgstr "Paramètres pour les activités PlayTime" #: resource/client/forms/admin.glade:2090 msgid "PlayTime options" msgstr "Options PlayTime" #: resource/client/forms/admin.glade:2114 resource/client/forms/admin.glade:2153 msgid "Enable PlayTime for selected user" msgstr "Activer PlayTime pour l'utilisateur sélectionné" #: resource/client/forms/admin.glade:2116 msgid "Enable PlayTime:" msgstr "Activer PlayTime :" #: resource/client/forms/admin.glade:2130 resource/client/forms/admin.glade:2167 msgid "" "Enable PlayTime override for selected user.\n" "\n" "This setting overrides time accounting in a way that time is accounted only " "when at least one of the applications on the PlayTime activity list are " "running!\n" "\n" "This affects only time accounting, intervals are still fully enforced!\n" "\n" "If no processes are running, time is accounted as idle thus effectively it's " "free time for user!" msgstr "" "Activer le remplacement de PlayTime pour l'utilisateur sélectionné.\n" "\n" "Ce paramètre remplace la comptabilisation du temps de sorte que le temps n'est " "comptabilisé que lorsqu'au moins une des applications de la liste d'activités " "PlayTime est en cours d'exécution !\n" "\n" "Cela n'affecte que la comptabilisation du temps, les intervalles sont toujours " "pleinement appliqués !\n" "\n" "Si aucun processus n'est en cours d'exécution, le temps est comptabilisé comme " "inactif, ce qui en fait effectivement du temps libre pour l'utilisateur !" #: resource/client/forms/admin.glade:2138 msgid "Enable PlayTime override:" msgstr "Activer le remplacement de PlayTime :" #: resource/client/forms/admin.glade:2186 resource/client/forms/admin.glade:2207 msgid "" "Allow PlayTime activities during unaccounted (\"∞\") time intervals for " "selected user.\n" "\n" "This setting allows the user to use applications configured in his PlayTime " "activity list during time intervals which are marked as unaccounted (\"∞\").\n" "\n" "If this setting is enabled, the use of activities will not be accounted towards " "PlayTime limits, otherwise applications in PlayTime activity list will be " "terminated as soon as they are started during unaccounted (\"∞\") time " "intervals." msgstr "" "Autoriser les activités PlayTime pendant les intervalles de temps non " "comptabilisés (\"∞\") pour l'utilisateur sélectionné.\n" "\n" "Ce paramètre permet à l'utilisateur d'utiliser les applications configurées " "dans sa liste d'activités PlayTime pendant les intervalles de temps marqués " "comme non comptabilisés (\"∞\").\n" "\n" "Si ce paramètre est activé, l'utilisation des activités ne sera pas " "comptabilisée dans les limites de PlayTime, sinon les applications de la liste " "d'activités PlayTime seront terminées dès qu'elles seront démarrées pendant les " "intervalles de temps non comptabilisés (\"∞\")." #: resource/client/forms/admin.glade:2192 msgid "Allowed during \"∞\" intervals:" msgstr "Autorisé pendant les intervalles \"∞\" :" #: resource/client/forms/admin.glade:2251 msgid "This lets you configure PlayTime limits." msgstr "Ceci vous permet de configurer les limites de PlayTime." #: resource/client/forms/admin.glade:2253 resource/client/forms/client.glade:1253 msgid "PlayTime limits" msgstr "Limites PlayTime" #: resource/client/forms/admin.glade:2311 msgid "" "Increase daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Augmenter l'allocation quotidienne de PlayTime de l'unité de temps sélectionnée " "(heures ou minutes) pour les jours sélectionnés.\n" "\n" "Veuillez noter que vous pouvez sélectionner plus qu'un jour pour l'ajustement !" #: resource/client/forms/admin.glade:2328 msgid "" "Decrease daily PlayTime allowance by selected time unit (hours or minutes) for " "selected days.\n" "\n" "Please note, that you may select more than one day for the adjustment!" msgstr "" "Diminuer l'allocation quotidienne de PlayTime par l'unité de temps sélectionnée " "(heures ou minutes) pour les jours sélectionnés.\n" "\n" "Veuillez noter que vous pouvez sélectionner plus d'un jour pour l'ajustement !" #: resource/client/forms/admin.glade:2380 msgid "" "Lists day of the week and additional information about the day's PlayTime " "limit.\n" "\n" "Please enable / disable days for the user and set time allowance for PlayTime " "activities." msgstr "" "Liste le jour de la semaine et des informations supplémentaires sur la limite " "de PlayTime du jour.\n" "\n" "Veuillez activer / désactiver les jours pour l'utilisateur et définir " "l'allocation de temps pour les activités PlayTime." #: resource/client/forms/admin.glade:2431 msgid "PlayTime activities" msgstr "Activités PlayTime" #: resource/client/forms/admin.glade:2453 msgid "" "Add new PlayTime activity.\n" "\n" "Please specify activity mask and user friendly description in the activity list " "directly." msgstr "" "Ajouter une nouvelle activité PlayTime.\n" "\n" "Veuillez spécifier le masque d'activité et une description conviviale " "directement dans la liste d'activités." #: resource/client/forms/admin.glade:2470 msgid "Remove selected entry from PlayTime activities." msgstr "Supprimer l'entrée sélectionnée des activités PlayTime." #: resource/client/forms/admin.glade:2514 msgid "" "Please specify a list of full process (executable) names without path as case " "sensitive strings to be monitored in the system.\n" "\n" "It's possible to specify RegExp masks for processes too, but please be very " "careful about them as misusing this setting may lead to killing unwanted " "processes for the user!\n" "\n" "NOTE: RegExp is an expert setting!" msgstr "" "Veuillez spécifier une liste de noms de processus complets (exécutables) sans " "chemin, sous forme de textes sensibles à la casse, à surveiller dans le " "système.\n" "\n" "Il est également possible de spécifier des masques RegExp pour les processus, " "mais soyez très prudent car une mauvaise utilisation de ce paramètre peut " "entraîner l'arrêt indésirable de processus pour l'utilisateur !\n" "\n" "NOTE : RegExp est un paramètre expert !" #: resource/client/forms/admin.glade:2556 msgid "Apply PlayTime configuration" msgstr "Appliquer la configuration PlayTime" #: resource/client/forms/admin.glade:2560 msgid "Apply PlayTime limits and configuration changes on this page" msgstr "" "Appliquer les limites et les modifications de configuration PlayTime sur cette " "page" #: resource/client/forms/admin.glade:2579 msgid "PlayTime configuration" msgstr "Configuration PlayTime" #: resource/client/forms/admin.glade:2604 msgid "Additional configuration options" msgstr "Options de configuration supplémentaires" #: resource/client/forms/admin.glade:2639 resource/client/forms/admin.glade:2662 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account. This varies " "among desktop environments." msgstr "" "Sélectionner si le temps de session inactive est compté.\n" "\n" "Si cette case n'est pas cochée, le temps passé dans les sessions de connexion " "en console (pas l'émulateur de terminal) et lorsque l'écran est verrouillé " "N'EST PAS pris en compte. Cela varie selon les environnements de bureau." #: resource/client/forms/admin.glade:2643 msgid "Track inactive sessions:" msgstr "Suivre les sessions inactives :" #: resource/client/forms/admin.glade:2679 resource/client/forms/admin.glade:2702 msgid "" "Select whether to show Timekpr-next's padlock icon and notifications to the " "user.\n" "\n" "Please note that checking this will disable showing all information and " "notifications to the user!" msgstr "" "Sélectionnez si l'icône de cadenas de Timekpr-next et les notifications doivent " "être affichées à l'utilisateur.\n" "\n" "Veuillez noter que cocher cette option désactivera l'affichage de toutes les " "informations et notifications pour l'utilisateur !" #: resource/client/forms/admin.glade:2683 msgid "Hide icon and notifications:" msgstr "Masquer l'icône et les notifications :" #: resource/client/forms/admin.glade:2754 msgid "" "Select a restriction / lockout type for the user.\n" "\n" "NOTE: please be very careful, think ahead and read every options description " "when changing this setting from default value!" msgstr "" "Sélectionner un type de restriction / verrouillage pour l'utilisateur.\n" "\n" "NOTE : soyez très prudent, anticipez et lisez la description de chaque option " "avant de modifier ce paramètre par rapport à sa valeur par défaut !" #: resource/client/forms/admin.glade:2758 msgid "Restriction / lockout type:" msgstr "Type de restriction / verrouillage :" #: resource/client/forms/admin.glade:2780 msgid "terminate sessions" msgstr "terminer les sessions" #: resource/client/forms/admin.glade:2784 msgid "" "When time ends, user sessions will be terminated.\n" "\n" "This option is a restriction!\n" "\n" "This is the default option and most likely is the one you need!" msgstr "" "Lorsque le temps est écoulé, les sessions utilisateur seront terminées.\n" "\n" "Cette option est une restriction !\n" "\n" "C'est l'option par défaut et très probablement celle dont vous avez besoin !" #: resource/client/forms/admin.glade:2802 msgid "kill sessions" msgstr "tuer les sessions" #: resource/client/forms/admin.glade:2806 msgid "" "When time ends, user sessions will be killed.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Lorsque le temps est écoulé, les sessions utilisateur seront tuées.\n" "\n" "Cette option est une restriction !\n" "\n" "Veuillez évaluer si vous avez besoin de ce type de restriction !" #: resource/client/forms/admin.glade:2823 msgid "shutdown computer" msgstr "éteindre l'ordinateur" #: resource/client/forms/admin.glade:2827 msgid "" "When time ends, computer will be shut down.\n" "\n" "This option is a restriction!\n" "\n" "Please evaluate whether you need this type of restriction!" msgstr "" "Lorsque le temps est écoulé, l'ordinateur sera éteint.\n" "\n" "Cette option est une restriction !\n" "\n" "Veuillez évaluer si vous avez besoin de ce type de restriction !" #: resource/client/forms/admin.glade:2845 msgid "suspend computer" msgstr "mettre l'ordinateur en veille" #: resource/client/forms/admin.glade:2849 msgid "" "When time ends, computer will be suspended (put to sleep).\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Lorsque le temps est écoulé, l'ordinateur sera mis en veille.\n" "\n" "Cette option n'est pas une restriction et est plus adaptée à des fins " "d'autocontrôle.\n" "\n" "Lorsqu'il est réveillé alors qu'il ne reste plus de temps, l'écran de " "l'ordinateur sera verrouillé et remis en veille après un certain temps." #: resource/client/forms/admin.glade:2867 msgid "suspend / wakeup computer" msgstr "mettre en veille / réveiller l'ordinateur" #: resource/client/forms/admin.glade:2871 msgid "" "When time ends, computer will be suspended (put to sleep) and will be woken up " "at start of next available time interval for the user.\n" "\n" "This option is not a restriction and is more suited for self control purposes.\n" "\n" "When woken up when there is still no time left, computer screen will be locked " "and put to sleep again after some time." msgstr "" "Lorsque le temps est écoulé, l'ordinateur sera mis en veille et sera réveillé " "au début du prochain intervalle de temps disponible pour l'utilisateur.\n" "\n" "Cette option n'est pas une restriction et est plus adaptée à des fins " "d'autocontrôle.\n" "\n" "Lorsqu'il est réveillé alors qu'il ne reste plus de temps, l'écran de " "l'ordinateur sera verrouillé et remis en veille après un certain temps." #: resource/client/forms/admin.glade:2889 msgid "lock screen" msgstr "verrouiller l'écran" #: resource/client/forms/admin.glade:2893 msgid "" "When time ends, computer screen will be locked.\n" "\n" "This option is not a restriction and is more suited for self control purposes." msgstr "" "Lorsque le temps est écoulé, l'écran de l'ordinateur sera verrouillé.\n" "\n" "Cette option n'est pas une restriction et est plus adaptée à des fins " "d'autocontrôle." #: resource/client/forms/admin.glade:2924 msgid "" "Select a time interval when computer can be woken up automatically.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Sélectionner un intervalle de temps pendant lequel l'ordinateur peut être " "réveillé automatiquement.\n" "\n" "Veuillez noter que cette option n'est effective que si le réveil par horloge " "temps réel (RTC) est pris en charge et activé dans le BIOS / UEFI !" #: resource/client/forms/admin.glade:2928 msgid "Wakeup hour interval:" msgstr "Intervalle horaire de réveil :" #: resource/client/forms/admin.glade:2940 msgid "" "Enter start hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Entrer l'heure de début pour la fonction de réveil automatique.\n" "\n" "Veuillez noter que cette option n'est effective que si le réveil par horloge " "temps réel (RTC) est pris en charge et activé dans le BIOS / UEFI !" #: resource/client/forms/admin.glade:2959 msgid "" "Enter end hour for the automatic wakeup function.\n" "\n" "Please note that this option is only effective if wake up by RealTime Clock is " "supported and enabled in BIOS / UEFI!" msgstr "" "Entrer l'heure de fin pour la fonction de réveil automatique.\n" "\n" "Veuillez noter que cette option n'est effective que si le réveil par horloge " "temps réel (RTC) est pris en charge et activé dans le BIOS / UEFI !" #: resource/client/forms/admin.glade:2997 msgid "Apply configuration" msgstr "Appliquer la configuration" #: resource/client/forms/admin.glade:3001 msgid "Apply additional configuration changes on this page" msgstr "" "Appliquer les modifications de configuration supplémentaires sur cette page" #: resource/client/forms/admin.glade:3020 msgid "Additional configuration" msgstr "Configuration supplémentaire" #: resource/client/forms/admin.glade:3021 resource/client/forms/admin.glade:3695 msgid "Additional options" msgstr "Options supplémentaires" #: resource/client/forms/admin.glade:3048 msgid "User Configuration" msgstr "Configuration utilisateur" #: resource/client/forms/admin.glade:3058 msgid "Timekpr-nExT related configuration" msgstr "Configuration relative à Timekpr-nExT" #: resource/client/forms/admin.glade:3085 msgid "Control Timekpr-nExT Settings" msgstr "Paramètres de contrôle de Timekpr-nExT" #: resource/client/forms/admin.glade:3112 resource/client/forms/admin.glade:3264 msgid "" "Timekpr-nExT log level.\n" "\n" "Please do not change this unless you have to. You likely won't find anything " "pretty in the log files.\n" "\n" "Values are: 1 - standard, 2 - debug, 3 - extra debug" msgstr "" "Niveau de journalisation de Timekpr-nExT.\n" "\n" "Veuillez ne pas modifier ceci à moins d'y être obligé. Vous ne trouverez " "probablement rien d'intéressant dans les fichiers journaux.\n" "\n" "Valeurs : 1 - standard, 2 - débogage, 3 - débogage supplémentaire" #: resource/client/forms/admin.glade:3132 resource/client/forms/admin.glade:3180 msgid "" "Session polling time granularity which specifies how often user sessions and " "activity are checked and accounted.\n" "\n" "3 - 5 seconds are optimal, don't change this if unsure." msgstr "" "Granularité du temps d'interrogation des sessions qui spécifie la fréquence à " "laquelle les sessions utilisateur et l'activité sont vérifiées et " "comptabilisées.\n" "\n" "3 à 5 secondes sont optimales, ne modifiez pas ceci si vous n'êtes pas sûr." #: resource/client/forms/admin.glade:3136 msgid "Poll interval" msgstr "Intervalle d'interrogation" #: resource/client/forms/admin.glade:3148 resource/client/forms/admin.glade:3251 msgid "" "Specify the time in seconds when Timekpr-nExT starts continuous real-time " "countdown before enforcing a restriction / lockout to user's sessions." msgstr "" "Spécifier le temps en secondes quand Timekpr-nExT démarre le compte à rebours " "continu en temps réel avant d'appliquer une restriction / un verrouillage aux " "sessions de l'utilisateur." #: resource/client/forms/admin.glade:3164 resource/client/forms/admin.glade:3214 msgid "" "This specifies the rate in seconds at which actual user state is saved to " "disk.\n" "\n" "To improve performance and still have great accuracy, Timekpr-nExT accounts " "time in memory at \"Poll interval\" frequency, this setting defines a frequency " "at which user state is saved to disk for permanent storage." msgstr "" "Ceci spécifie la fréquence en secondes à laquelle l'état réel de l'utilisateur " "est sauvegardé sur le disque.\n" "\n" "Pour améliorer les performances tout en conservant une grande précision, " "Timekpr-nExT comptabilise le temps en mémoire à la fréquence de l' « Intervalle " "d'interrogation », ce paramètre définit une fréquence à laquelle l'état de " "l'utilisateur est sauvegardé sur le disque pour un stockage permanent." #: resource/client/forms/admin.glade:3168 msgid "Save time" msgstr "Sauvegarder le temps" #: resource/client/forms/admin.glade:3198 resource/client/forms/admin.glade:3233 msgid "" "Number of seconds left for user before enforcing a configured restriction / " "lockout to his sessions.\n" "\n" "After this is reached and user is still active, the user's sessions will be " "handled according to specified restriction / lockout, and almost nothing can be " "done to prevent it." msgstr "" "Nombre de secondes restantes pour l'utilisateur avant d'appliquer une " "restriction / un verrouillage configuré à ses sessions.\n" "\n" "Une fois ce délai atteint et si l'utilisateur est toujours actif, les sessions " "de l'utilisateur seront traitées conformément à la restriction / au " "verrouillage spécifié, et presque rien ne pourra l'empêcher." #: resource/client/forms/admin.glade:3202 msgid "Termination time" msgstr "Temps de fin" #: resource/client/forms/admin.glade:3253 msgid "Countdown time" msgstr "Temps du compte à rebours" #: resource/client/forms/admin.glade:3270 msgid "Log level" msgstr "Niveau de journalisation" #: resource/client/forms/admin.glade:3281 resource/client/forms/admin.glade:3297 msgid "" "Number of seconds left for user's available time before sending a final " "critical notification that time is about to run out.\n" "\n" "NOTE: the rest of the notification times are configurable per user by user in " "client application!" msgstr "" "Nombre de secondes restantes du temps disponible de l'utilisateur avant " "d'envoyer une notification critique finale indiquant que le temps est sur le " "point de s'écouler.\n" "\n" "NOTE : le reste des heures de notification est configurable par utilisateur " "dans l'application client !" #: resource/client/forms/admin.glade:3285 msgid "Final notification" msgstr "Notification finale" #: resource/client/forms/admin.glade:3339 msgid "Control Timekpr-nExT tracking items" msgstr "Éléments de suivi de contrôle de Timekpr-nExT" #: resource/client/forms/admin.glade:3372 msgid "Tracked Sessions" msgstr "Sessions suivies" #: resource/client/forms/admin.glade:3395 msgid "Add tracked session type to the list" msgstr "Ajouter un type de session suivie à la liste" #: resource/client/forms/admin.glade:3410 msgid "Remove tracked session type from the list" msgstr "Supprimer le type de session suivie de la liste" #: resource/client/forms/admin.glade:3439 msgid "" "List of session types to be tracked.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Liste des types de sessions à suivre.\n" "\n" "Veuillez ne pas modifier ou expérimenter avec ceci à moins de savoir réellement " "(et non hypothétiquement) ce que vous faites." #: resource/client/forms/admin.glade:3474 msgid "Excluded Sessions" msgstr "Sessions exclues" #: resource/client/forms/admin.glade:3497 msgid "Add an excluded session type to the list" msgstr "Ajouter un type de session exclue à la liste" #: resource/client/forms/admin.glade:3512 msgid "Remove an excluded session type from the list" msgstr "Supprimer un type de session exclue de la liste" #: resource/client/forms/admin.glade:3541 msgid "" "List of sessions to be excluded from tracking.\n" "\n" "Please, do not change or experiment with this unless you actually (not " "wishfully) know what you are doing." msgstr "" "Liste des sessions à exclure du suivi.\n" "\n" "Veuillez ne pas modifier ou expérimenter avec ceci à moins de savoir réellement " "(et non hypothétiquement) ce que vous faites." #: resource/client/forms/admin.glade:3576 msgid "Excluded Users" msgstr "Utilisateurs exclus" #: resource/client/forms/admin.glade:3599 msgid "Add a user to the exclusion list" msgstr "Ajouter un utilisateur à la liste d'exclusion" #: resource/client/forms/admin.glade:3614 msgid "Remove a user from the exclusion list" msgstr "Supprimer un utilisateur de la liste d'exclusion" #: resource/client/forms/admin.glade:3643 msgid "" "List of users excluded from tracking.\n" "\n" "Please specify actual usernames, not real names here. For example, \"jsmith\", " "not \"John Smith\"." msgstr "" "Liste des utilisateurs exclus du suivi.\n" "\n" "Veuillez spécifier ici les noms d'utilisateur réels, pas les vrais noms. Par " "exemple, « jsmith », et non « John Smith »." #: resource/client/forms/admin.glade:3722 resource/client/forms/admin.glade:3741 #: resource/client/forms/admin.glade:3777 msgid "" "This setting controls whether PlayTime functionality is enabled.\n" "\n" "This is a PlayTime master switch, if it's turned off, it's turned off for " "everyone regardless of individual settings!" msgstr "" "Ce paramètre contrôle si la fonctionnalité PlayTime est activée.\n" "\n" "C'est un interrupteur principal pour PlayTime, s'il est désactivé, il est " "désactivé pour tout le monde, quels que soient les paramètres individuels !" #: resource/client/forms/admin.glade:3726 msgid "PlayTime enabled:" msgstr "PlayTime activé :" #: resource/client/forms/admin.glade:3756 msgid "" "This setting controls whether PlayTime activity monitor will use process " "command line, including arguments, for monitoring processes (by default only " "uses the process name).\n" "\n" "When this setting is enabled Timekpr-nExT will perform a match against full " "command line up to 512 characters enabling enhanced process monitoring " "capabilities.\n" "\n" "Please be careful and double check your RegExp patterns in each individual " "user's PlayTime activity masks!" msgstr "" "Ce paramètre contrôle si le moniteur d'activité PlayTime utilisera la ligne de " "commande du processus, y compris les arguments, pour surveiller les processus " "(par défaut, il n'utilise que le nom du processus).\n" "\n" "Lorsque ce paramètre est activé, Timekpr-nExT effectuera une correspondance " "avec la ligne de commande complète jusqu'à 512 caractères, permettant des " "capacités de surveillance de processus améliorées.\n" "\n" "Soyez prudent et vérifiez attentivement vos modèles RegExp dans les masques " "d'activité PlayTime de chaque utilisateur individuel !" #: resource/client/forms/admin.glade:3762 msgid "Enhanced activity monitor:" msgstr "Moniteur d'activité amélioré :" #: resource/client/forms/admin.glade:3811 msgid "Apply Timekpr-nExT settings" msgstr "Appliquer les paramètres de Timekpr-nExT" #: resource/client/forms/admin.glade:3816 msgid "Apply all Timekpr-nExT settings at once" msgstr "Appliquer tous les paramètres de Timekpr-nExT en une seule fois" #: resource/client/forms/admin.glade:3836 msgid "Timekpr-nExT Administration Configuration" msgstr "Configuration de l'administration de Timekpr-nExT" #: resource/client/forms/admin.glade:3837 msgid "Timekpr-nExT Configuration" msgstr "Configuration de Timekpr-nExT" #: resource/client/forms/admin.glade:3866 resource/client/forms/admin.glade:3883 msgid "Status of Timekpr-nExT admin client" msgstr "Statut du client d'administration de Timekpr-nExT" #. This is one of the notification priorities #: resource/client/forms/client.glade:27 msgid "Information" msgstr "Information" #. This is one of the notification priorities #: resource/client/forms/client.glade:31 msgid "Warning" msgstr "Avertissement" #. This is one of the notification priorities #: resource/client/forms/client.glade:35 msgid "Severe" msgstr "Sévère" #. This is one of the notification priorities #: resource/client/forms/client.glade:39 msgid "Critical" msgstr "Critique" #: resource/client/forms/client.glade:133 msgid "Timekpr-nExT client" msgstr "Client Timekpr-nExT" #: resource/client/forms/client.glade:164 msgid "Status of Timekpr-nExT client" msgstr "Statut du client Timekpr-nExT" #: resource/client/forms/client.glade:196 msgid "Save all changes" msgstr "Enregistrer toutes les modifications" #: resource/client/forms/client.glade:213 msgid "Close the window" msgstr "Fermer la fenêtre" #: resource/client/forms/client.glade:297 resource/client/forms/client.glade:314 msgid "Current effective username" msgstr "Nom d'utilisateur effectif actuel" #: resource/client/forms/client.glade:371 msgid "Current statistics" msgstr "Statistiques actuelles" #: resource/client/forms/client.glade:396 msgid "Time spent this session or after Timekpr-nExT has been restarted" msgstr "Temps passé cette session ou après le redémarrage de Timekpr-nExT" #: resource/client/forms/client.glade:398 msgid "Time spent (session):" msgstr "Temps passé (session) :" #: resource/client/forms/client.glade:441 msgid "Time inactive this session or after Timekpr-nExT has been restarted" msgstr "Temps inactif cette session ou après le redémarrage de Timekpr-nExT" #: resource/client/forms/client.glade:443 msgid "Time inactive:" msgstr "Temps inactif :" #: resource/client/forms/client.glade:469 msgid "Continuous time left to you. May span more than the current day." msgstr "" "Temps continu qui vous reste. Peut s'étendre au-delà de la journée actuelle." #: resource/client/forms/client.glade:471 msgid "Continuous time left:" msgstr "Temps continu restant :" #: resource/client/forms/client.glade:487 msgid "Total time available left today in a row, up to the end of the day" msgstr "" "Temps total disponible restant aujourd'hui d'affilée, jusqu'à la fin de la " "journée" #: resource/client/forms/client.glade:489 resource/client/forms/client.glade:974 msgid "Time left today:" msgstr "Temps restant aujourd'hui :" #: resource/client/forms/client.glade:548 msgid "These are the days and limits that are available to you" msgstr "Ce sont les jours et les limites qui vous sont disponibles" #: resource/client/forms/client.glade:573 resource/client/forms/client.glade:1171 msgid "Days & Limits" msgstr "Jours & Limites" #: resource/client/forms/client.glade:609 msgid "" "This shows the time intervals that are available for use.\n" "\n" "Option \"∞\" indicates that time spent during this interval will not be " "accounted towards the daily limit, it will be accounted as idle instead." msgstr "" "Ceci affiche les intervalles de temps disponibles pour utilisation.\n" "\n" "L'option \"∞\" indique que le temps passé pendant cet intervalle ne sera pas " "comptabilisé dans la limite quotidienne, il sera plutôt comptabilisé comme " "inactif." #: resource/client/forms/client.glade:634 msgid "Intervals" msgstr "Intervalles" #: resource/client/forms/client.glade:663 msgid "Daily limits" msgstr "Limites quotidiennes" #: resource/client/forms/client.glade:691 msgid "Additional statistics" msgstr "Statistiques supplémentaires" #: resource/client/forms/client.glade:715 msgid "Time spent this week" msgstr "Temps passé cette semaine" #: resource/client/forms/client.glade:742 msgid "Time spent this month" msgstr "Temps passé ce mois-ci" #: resource/client/forms/client.glade:755 msgid "" "Select whether inactive session time is counted.\n" "\n" "If this is unchecked, time spent in console (not terminal emulator) login " "sessions and while the screen is locked is NOT taken into account.\n" "This varies among desktop environments." msgstr "" "Sélectionner si le temps de session inactive est compté.\n" "\n" "Si cette case n'est pas cochée, le temps passé dans les sessions de connexion " "en console (pas l'émulateur de terminal) et lorsque l'écran est verrouillé " "N'EST PAS pris en compte.\n" "Cela varie selon les environnements de bureau." #: resource/client/forms/client.glade:760 msgid "Track inactive:" msgstr "Suivre l'inactivité :" #: resource/client/forms/client.glade:773 msgid "" "Select whether inactive session time is counted. If this is unchecked, time " "spent in console (not terminal emulator) login sessions and while the screen is " "locked is NOT taken into account. This varies among desktop environments." msgstr "" "Sélectionner si le temps de session inactive est compté. Si cette case n'est " "pas cochée, le temps passé dans les sessions de connexion en console (pas " "l'émulateur de terminal) et lorsque l'écran est verrouillé N'EST PAS pris en " "compte. Cela varie selon les environnements de bureau." #: resource/client/forms/client.glade:820 resource/client/forms/client.glade:918 msgid "Additional limits" msgstr "Limites supplémentaires" #: resource/client/forms/client.glade:844 msgid "Time limit for this week available to you" msgstr "Limite de temps pour cette semaine qui vous est disponible" #: resource/client/forms/client.glade:846 msgid "Time limit (week):" msgstr "Limite de temps (semaine) :" #: resource/client/forms/client.glade:872 msgid "Time limit for this month available to you" msgstr "Limite de temps pour ce mois qui vous est disponible" #: resource/client/forms/client.glade:874 msgid "Time limit (month):" msgstr "Limite de temps (mois) :" #: resource/client/forms/client.glade:948 msgid "Current PlayTime statistics" msgstr "Statistiques PlayTime actuelles" #: resource/client/forms/client.glade:972 msgid "Total PlayTime available left today" msgstr "Total de PlayTime disponible restant aujourd'hui" #: resource/client/forms/client.glade:998 msgid "Total PlayTime spent today" msgstr "Total de PlayTime passé aujourd'hui" #: resource/client/forms/client.glade:1000 msgid "Time spent today:" msgstr "Temps passé aujourd'hui :" #: resource/client/forms/client.glade:1027 resource/client/forms/client.glade:1042 msgid "" "This option overrides the default time accounting.\n" "\n" "If it's checked, the time is accounted only when activities in \"Activity / " "application list\" are running, the rest of the time is considered idle." msgstr "" "Cette option remplace la comptabilisation du temps par défaut.\n" "\n" "Si elle est cochée, le temps n'est comptabilisé que lorsque les activités de la " "liste « Activité / liste d'applications » sont en cours d'exécution, le reste " "du temps est considéré comme inactif." #: resource/client/forms/client.glade:1046 msgid "Time limit override:" msgstr "Remplacement de la limite de temps :" #: resource/client/forms/client.glade:1060 resource/client/forms/client.glade:1073 msgid "Number of currently active PlayTime activities" msgstr "Nombre d'activités PlayTime actuellement actives" #: resource/client/forms/client.glade:1062 msgid "Running activities:" msgstr "Activités en cours :" #: resource/client/forms/client.glade:1086 resource/client/forms/client.glade:1106 msgid "" "Allow activities during unaccounted (\"∞\") time intervals.\n" "\n" "This setting allows to use applications listed in \"Activity / application " "list\" during time intervals which are marked as unaccounted (\"∞\"), if the " "setting is not enabled, none of activities are allowed to run!" msgstr "" "Autoriser les activités pendant les intervalles de temps non comptabilisés " "(\"∞\").\n" "\n" "Ce paramètre permet d'utiliser les applications listées dans « Activité / liste " "d'applications » pendant les intervalles de temps marqués comme non " "comptabilisés (\"∞\"), si le paramètre n'est pas activé, aucune des activités " "n'est autorisée à s'exécuter !" #: resource/client/forms/client.glade:1090 msgid "Allowed during \"∞\":" msgstr "Autorisé pendant \"∞\" :" #: resource/client/forms/client.glade:1148 msgid "" "These are days and limits that available to you as part of PlayTime activity " "restrictions" msgstr "" "Ce sont les jours et les limites qui vous sont disponibles dans le cadre des " "restrictions d'activité PlayTime" #: resource/client/forms/client.glade:1205 msgid "" "This shows activities / applications which are part of PlayTime restrictions" msgstr "" "Ceci affiche les activités / applications qui font partie des restrictions " "PlayTime" #: resource/client/forms/client.glade:1228 msgid "Activity / application list" msgstr "Liste d'activités / applications" #: resource/client/forms/client.glade:1292 msgid "" "Configuration for personalized notifications about available time.\n" "\n" "Please configure notifications as you see fit. However, please keep in mind " "that there will be two types of notifications that cannot be personalized: a " "final warning some time before time ends and a countdown notifications when " "time is about to end.\n" "\n" "The configuration \"Time\" value indicates a value of time left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuration des notifications personnalisées concernant le temps disponible.\n" "\n" "Veuillez configurer les notifications comme bon vous semble. Cependant, gardez " "à l'esprit qu'il y aura deux types de notifications qui ne pourront pas être " "personnalisées : un avertissement final quelque temps avant la fin du temps et " "des notifications de compte à rebours lorsque le temps est sur le point de " "s'écouler.\n" "\n" "La valeur « Temps » de la configuration indique une valeur de temps restant " "lorsque la notification sera affichée, l'option « Importance » régit la couleur " "de l'icône et les propriétés de notification comme suit.\n" "\n" "Information - une icône verte et une notification d'information seront " "affichées\n" "Avertissement - une icône jaune et une notification d'information seront " "affichées\n" "Sévère - une icône rouge et une notification importante seront affichées\n" "Critique - une icône rouge et une notification critique seront affichées, cette " "notification est généralement affichée par-dessus toutes les applications " "ouvertes et reste ouverte jusqu'à ce qu'elle soit fermée, cependant ce " "comportement dépend fortement de l'environnement de bureau utilisé" #: resource/client/forms/client.glade:1325 msgid "Notification configuration" msgstr "Configuration des notifications" #: resource/client/forms/client.glade:1347 msgid "Add new notification threshold to the list" msgstr "Ajouter un nouveau seuil de notification à la liste" #: resource/client/forms/client.glade:1362 msgid "Remove notification threshold from the list" msgstr "Supprimer le seuil de notification de la liste" #: resource/client/forms/client.glade:1411 msgid "" "Configuration for personalized notifications about available PlayTime.\n" "\n" "Please configure notifications as you see fit.\n" "\n" "The configuration \"Time\" value indicates a value of PlayTime left when " "notification will be shown, the \"Importance\" option governs an icon colour " "and notification properties as follows.\n" "\n" "Information - a green icon and an informational notification will be shown\n" "Warning - a yellow icon and an informational notification will be shown\n" "Severe - a red icon and important notification will be shown\n" "Critical - a red icon and critical notification will be shown, this " "notification usually is shown over all open applications and stays open until " "dismissed, however this behaviour highly depends on Desktop Environment in use" msgstr "" "Configuration des notifications personnalisées concernant le PlayTime " "disponible.\n" "\n" "Veuillez configurer les notifications comme bon vous semble.\n" "\n" "La valeur « Temps » de la configuration indique une valeur de PlayTime restant " "lorsque la notification sera affichée, l'option « Importance » régit la couleur " "de l'icône et les propriétés de notification comme suit.\n" "\n" "Information - une icône verte et une notification d'information seront " "affichées\n" "Avertissement - une icône jaune et une notification d'information seront " "affichées\n" "Sévère - une icône rouge et une notification importante seront affichées\n" "Critique - une icône rouge et une notification critique seront affichées, cette " "notification est généralement affichée par-dessus toutes les applications " "ouvertes et reste ouverte jusqu'à ce qu'elle soit fermée, cependant ce " "comportement dépend fortement de l'environnement de bureau utilisé" #: resource/client/forms/client.glade:1444 msgid "PlayTime notification configuration" msgstr "Configuration des notifications PlayTime" #: resource/client/forms/client.glade:1466 msgid "Add new PlayTime notification threshold to the list" msgstr "Ajouter un nouveau seuil de notification PlayTime à la liste" #: resource/client/forms/client.glade:1481 msgid "Remove PlayTime notification threshold from the list" msgstr "Supprimer le seuil de notification PlayTime de la liste" #: resource/client/forms/client.glade:1540 msgid "Notifications" msgstr "Notifications" #: resource/client/forms/client.glade:1564 msgid "" "Select whether to use speech notifications, if available.\n" "\n" "You may be able to make speech notifications available by installing package " "\"python3-espeak\" or \"python3-espeak-ng\"." msgstr "" "Sélectionner s'il faut utiliser les notifications vocales, si disponibles.\n" "\n" "Vous pourrez peut-être rendre les notifications vocales disponibles en " "installant le paquet « python3-espeak » ou « python3-espeak-ng »." #: resource/client/forms/client.glade:1574 msgid "Use speech notifications" msgstr "Utiliser les notifications vocales" #: resource/client/forms/client.glade:1593 resource/client/forms/client.glade:1615 msgid "" "This sets the logging level.\n" "\n" "Please do not change this unless you know what you're doing." msgstr "" "Ceci définit le niveau de journalisation.\n" "\n" "Veuillez ne pas modifier ceci à moins de savoir ce que vous faites." #: resource/client/forms/client.glade:1619 msgid "Logging level" msgstr "Niveau de journalisation" #: resource/client/forms/client.glade:1641 msgid "" "Specify whether to show a notification when limit configurations or allowance " "changes" msgstr "" "Spécifier s'il faut afficher une notification lorsque les configurations de " "limite ou l'allocation changent" #: resource/client/forms/client.glade:1649 msgid "Show limit changes" msgstr "Afficher les changements de limite" #: resource/client/forms/client.glade:1665 msgid "" "Specify whether to show all notifications.\n" "\n" "If unchecked, then only important ones are shown." msgstr "" "Spécifier s'il faut afficher toutes les notifications.\n" "\n" "Si cette case n'est pas cochée, seules les notifications importantes sont " "affichées." #: resource/client/forms/client.glade:1675 msgid "Show all notifications" msgstr "Afficher toutes les notifications" #: resource/client/forms/client.glade:1691 msgid "" "Specify whether to show seconds in notification area.\n" "\n" "Some desktop environments, like KDE5, do not support text besides notification " "icons." msgstr "" "Spécifier s'il faut afficher les secondes dans la zone de notification.\n" "\n" "Certains environnements de bureau, comme KDE5, ne prennent pas en charge le " "texte à côté des icônes de notification." #: resource/client/forms/client.glade:1701 msgid "Show seconds in notification area" msgstr "Afficher les secondes dans la zone de notification" #: resource/client/forms/client.glade:1720 resource/client/forms/client.glade:1744 msgid "" "This sets how long a notification is shown for regular notifications about time " "left and configuration changes.\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed (not recommended for regular " "notifications).\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Ceci détermine la durée d'affichage d'une notification pour les notifications " "régulières concernant le temps restant et les modifications de configuration.\n" "\n" "La valeur est indiquée en secondes.\n" "Une valeur de 0 signifie que la notification reste affichée jusqu'à ce qu'elle " "soit fermée (non recommandé pour les notifications régulières).\n" "\n" "Veuillez noter que l'environnement de bureau que vous utilisez peut outrepasser " "ce délai, auquel cas ce paramètre n'aura aucun effet sur la notification." #: resource/client/forms/client.glade:1751 msgid "Notification timeout (sec)" msgstr "Délai d'expiration de la notification (sec)" #: resource/client/forms/client.glade:1776 resource/client/forms/client.glade:1801 msgid "" "This sets how long a notification is shown for \"Critical\" notifications about " "time left (when the icon turns red).\n" "\n" "The value is specified in seconds.\n" "A value of 0 means show until dismissed.\n" "\n" "Please note that the desktop environment you use may override this timeout, in " "which case this setting will not have any effect on notification." msgstr "" "Ceci définit la durée d'affichage d'une notification pour les notifications " "\"Critiques\" concernant le temps restant (lorsque l'icône devient rouge).\n" "\n" "La valeur est indiquée en secondes.\n" "Une valeur de 0 signifie que la notification reste affichée jusqu'à ce qu'elle " "soit fermée.\n" "\n" "Veuillez noter que l'environnement de bureau que vous utilisez peut outrepasser " "ce délai, auquel cas ce paramètre n'aura aucun effet sur la notification." #: resource/client/forms/client.glade:1808 msgid "Critical notification timeout (sec)" msgstr "Délai d'expiration de la notification critique (sec)" #: resource/client/forms/client.glade:1830 msgid "" "Select whether to use sound \"bell\" (short notification sound) to announce a " "new notification from Timekpr-nExT.\n" "\n" "This works only for enabled notifications.\n" "\n" "If this setting is not editable, your environment does not advertise sound " "notification support." msgstr "" "Sélectionnez si vous souhaitez utiliser le son \"cloche\" (son de notification " "court) pour annoncer une nouvelle notification de Timekpr-nExT.\n" "\n" "Cette fonctionnalité fonctionne uniquement pour les notifications activées.\n" "\n" "Si ce paramètre n'est pas modifiable, cela signifie que votre environnement ne " "prend pas en charge les notifications sonores." #: resource/client/forms/client.glade:1842 msgid "Use sound \"bell\" for notifications" msgstr "Utiliser le son \"cloche\" pour les notifications" #: resource/client/forms/client.glade:1862 msgid "Configuration" msgstr "Configuration" #~ msgid "" #~ "Select whether to show Timekpr-next's padlock icon and notifications to the " #~ "user.\n" #~ "\n" #~ "Please note that unchecking this will disable showing all information and " #~ "notifications to the user!" #~ msgstr "" #~ "Sélectionner s'il faut afficher l'icône du cadenas de Timekpr-next et les " #~ "notifications à l'utilisateur.\n" #~ "\n" #~ "Veuillez noter que décocher cette case désactivera l'affichage de toutes les " #~ "informations et notifications à l'utilisateur !" timekpr-next/resource/locale/fr/LC_MESSAGES/timekpr.mo000644 001750 001750 00000227063 15122253261 024476 0ustar00bezvfedubezvfedu000000 000000 Þ•»ô QÌ%%,%$G%<l%*©%Ô%?é%0)&HZ&£&Q»&� 'Š«'56(*l(ó—(é‹)™u*%+$5+uZ+]Ð+9.,Nh,D·,8ü,5-;-KN-š-L¶- .($.uM.3Ã.*÷."/$>//c/“/ ¬/Í/ß/ò/+0Ý402$3):3d3„3*š3Å3<â343;4'o4—4«4)¾4Yè4/B5.r50¡50Ò5269665p6¦6·6.Õ6 7ã7§ö9ž=¹= Ñ= Û=@é=e*>�>¦>#Ä>%è>*?<9?v?›…?!@#*@N@j@…@+˜@ Ä@Ñ@,Õ@ A¥A¡¶AsXBGÌB™C!®C/ÐCsDtEŽEŸE§E§ÂE©jFG&G%5G*[G<†G!ÃG3åG H:H‡LHÔH,çH>I%SI'yI9¡I ÛI*üI#'JKJPJ*mJ˜J§J\ÀL M>M NM¥YM¡ÿMs¡N O "O.O#IO1mOŸO(°O)ÙO P P,P2PFP�]PšîP*‰Q…´Q«:RsæR ZSdS0ƒS´S ÌSÚSâSûST 1T.?TnTß„U<dV¡V¨V±V0ÅV2öVR)W6|W³W0ÊWûW< XNJX5™X"ÏX4òX'YCY[YrY#‚Y¦Y6·YîY2ZN9Z%ˆZ(®ZP×Z (\6\0U\†\ž\ ²\4¿\%ô\-]H]+e]/‘])Á]ë]&ó]6^Q^m^Š^ž^ ¯^¹^0Ø^ _®!_¹Ð_æŠ`æqaåXbµ>cýôc°òd©£e MfZf wf˜fŸf¶f!Éf�ëfU|g]ÒgŒ0h½h#Åhéh!i)i%:i7`i˜i+·i2ãi4j7Kjƒj4�j6Òj5 k7?k;wkY³k7 lžEl(äm$ nÆ2nQùnzKpZÆq»!r·ÝsL•tËât&®uÕv6Úv2wDwC\w w¯wÃwÖw çwôwxDx*`x)‹xµxÊxÞxôxyy31y@ey¦y2»y.îyz /z)ç‰+&ŠRŠ [ŠeŠ”�Š€‹—‹­‹µ‹Å‹Ì‹xæ‹6_Œ–Œ†�M��뎈î�‘w�( ‘2‘3Q‘;…‘<Á‘8þ‘7’9’N’a’i’Gk’³’ ¶’ Ä’ Ò’Þ’à’ä’"è’ “"“2“D“^“o“‚“¥Š“0– 6– C–O–WV–¨®–W˜r˜/�˜G¿˜:™B™ZU™F°™^÷™VšisšÎÝš°¬›C]œ=¡œ'ßœž£#Ÿ/ÇŸ0÷Ÿ™( p <3¡\p¡oÍ¡>=¢ |¢†¢b ¢!£c%£.‰£-¸£™æ£=€¤4¾¤)ó¤-¥>K¥Š¥)¨¥Ò¥ë¥¦;"¦]^¦d¼¨!ª:=ª)xª¢ª=¼ª#úªS«)r«Lœ«@é«*¬"E¬Gh¬h°¬=­<W­>”­=Ó­?®TQ®Q¦®ø®& ¯@2¯ s¯•�¯˜³%°·Ö· ñ·û·O¸†a¸è¸(¹0)¹7Z¹>’¹\ѹ.ºËIº»5»T»!t»–»H­»ö» ¼I¼Z¼Öj¼ÓA½™¾V¯¾Ó¿1Ú¿< ÀIÀ%YÂÂ’Â!šÂÓ¼ÂÖ�ÃgÄxÄ0ŒÄ9½ÄW÷Ä3OÅQƒÅ4ÕÅ ÆÆ!ÆèÆ:üÆX7Ç5�Ç9ÆÇWÈ4XÈ.�È&¼ÈãÈ'æÈWÉfÉš{É�Ì+¤ÌÐÌ çÌ×òÌÔÊÍšŸÎ:Ï NÏZÏ*tÏEŸÏåÏ?úÏA:Ð |Ð4ˆÐ½ÐÄÐÞЩöЪ Ñ9KÒ§…Òà-Ó•Ô¤Ô3½ÔPñÔ.BÕqÕŠÕ’Õ²Õ,ÒÕ ÿÕ1 ÖW?Ö—×XªØÙ ÙÙ>)ÙChÙc¬ÙDÚUÚIlÚ¶ÚPÉÚmÛKˆÛ-ÔÛJÜ(MÜvÜ ’ܳÜ(ÄÜíÜKþÜJÝ@jÝK«Ý8÷Ý90Þ­jÞà43àQhà/ºàêàá7á0Oá/€á"°á.Óá;â/>â nâ;xâH´â$ýâ"ãAã$Wã|ã2‘ãOÄã-äÞBäü!å"æ"Aç!dèö†é\}êÚÚë÷µì­í*½í(èíî!î"<î2_îlMï�ºïÂJð ñ1ñIñ+gñ “ñ' ñEÈñ"ò/1òEaòH§òEðò6ó:Só<ŽóJËóKôLbôn¯ô:õùYõ7S÷4‹÷ À÷¹Îø÷ˆúp€ü-ñüàÿTéU«?ëJñA<~E—Ýí$@Qj\†4ã:$SxާÄÝ<õD2w?’=Ò +18j"ˆ«Ê5Þ3ùHB &\ ƒ 0† $· UÜ 12 Nd <³ ,ð  = T e S} _Ñ \1 ZŽ Vé T@ /• "Å 7è > #_ƒ8�@Ö&8>sw�ët|UñsGV»EcXF¼NkRO¾SQbn´R#cveÚL@j�Mø<FZƒ=ÞI=fj¤‡k—@^DA£Nåk4O Fð<7ZtSÏO#lsPàC1auD×.'B½j­( Ö  ö ! $!#1!•U!Në!£:" Þ"ˆ#-%­6&¾ä&4£')Ø'?(EB(6ˆ(G¿() )))A)G)TI)ž)  )®)À)Õ)×)Û)1ß)*-*@**W*‚* *¶*Ï¿*�-•-©- ¾-jÈ-c\qKŠŽ§Àp%‰Bº°g(¡<w®oª3t¨$œ©\c° 2GLè­‹~uõéD€"{�1íxœ,ZÉt³ /¶�•F9¥ƒXsi a¼'_È‚•‡¶Õ‡&»LëªaT?1%Rà6 äùP𯋉OkND!÷b¬ÜIÑgnJòl8MS¬<_�îʦe¤Y"Ti ŒU?‘OûÌ×ÚrE®óf0K«(:8�ºŸÞ›`³46·ˆŸ—±™ôR ¤Ç†–+ÙsYNƒ Ò“�”¢*Åy`ž©ß|’=SzÎB™¢4WF#U¯}ËmزAï¦H/«â›öár“¨ý�nzmµ|€5)ê­]h!Ö[¡ Mú—+]ÝC¸Qñ)j=^Zµ ;�’‘X5I£237½k¥�ž¹-š…0±v¹b�·Žf:» ²H´{#P„@ð ã´¿ŠCdG>ì¾9ÏøÿÁ~V7jÍ-†æ>,˜E¯Ó§J[W$lq Œ*ü;d…w„&}ÐÔ@ÃçVou.vˆ˜e£ Ax¸‚åÄ^h–'ÛQ�”þy.p%(n)s minute%(n)s minutes%(n)s second%(n)s seconds%(n)s second left%(n)s seconds left%(n)s second of PlayTime left%(n)s seconds of PlayTime left%(n)s user in total:%(n)s users in total:---=== NOTICE ===---==> get realtime user time information from the server, example==> get saved user list from the server, example==> get user configuration and time information from the server, example==> print help, example==> set PlayTime activity process masks, for which the time is accounted, example==> set PlayTime left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example==> set allowed days for PlayTime activities, example==> set allowed days for the user, example==> set allowed hours for the specified day, or "ALL" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example==> set restriction / lockout type ("lock" - lock session, "suspend" - suspend the computer, "suspendwake" - suspend and wake up, "terminate" - terminate sessions, "kill" - kill sessions, "shutdown" - shutdown the computer), examples==> set time left for the user at the current moment of time: "+" (add time), "-" (subtract time), "=" (set exact time available), example (add one hour)==> set time limit per month, example==> set time limit per week, example==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example==> set whether PlayTime activities are allowed during unaccounted ("∞") intervals, example==> set whether PlayTime is enabled for the user, example==> set whether PlayTime must be accounted instead of normal activity, example==> set whether to hide tray icon and prevent notifications, example==> set whether to track inactive user sessions, exampleAboutAbout Timekpr-nExTActive PlayTime activity count (realtime, available when user is logged in)Activity / application listActual PlayTime available today (realtime, available when user is logged in)Add a user to the exclusion listAdd an excluded session type to the listAdd new PlayTime activity. Please specify activity mask and user friendly description in the activity list directly.Add new PlayTime notification threshold to the listAdd new notification threshold to the listAdd specified time (reward)Add tracked session type to the listAdditional PlayTime for user has been processedAdditional configurationAdditional configuration optionsAdditional limitsAdditional optionsAdditional statisticsAdditional time for user has been processedAllow PlayTime activities during unaccounted ("∞") time intervals for selected user. This setting allows the user to use applications configured in his PlayTime activity list during time intervals which are marked as unaccounted ("∞"). If this setting is enabled, the use of activities will not be accounted towards PlayTime limits, otherwise applications in PlayTime activity list will be terminated as soon as they are started during unaccounted ("∞") time intervals.Allow activities during unaccounted ("∞") time intervals. This setting allows to use applications listed in "Activity / application list" during time intervals which are marked as unaccounted ("∞"), if the setting is not enabled, none of activities are allowed to run!Allowance adjustmentsAllowed days for user have been processedAllowed during "∞" intervals:Allowed during "∞":Allowed hours for user have been processedApply PlayTime configurationApply PlayTime limits and configuration changes on this pageApply Timekpr-nExT settingsApply additional configuration changes on this pageApply all Timekpr-nExT settings at onceApply configurationApply daily limitsApply limit all changes made in this pageBrief information about time spent and everything related to time management for this dayChoose days to be adjusted for selected period.Choose hours to be adjusted for selected days.Choose hours to be adjusted for selected period.Choose minutes to be adjusted for selected days.Choose minutes to be adjusted for selected period.Choose this to adjust user's PlayTime allowance for todayChoose this to adjust user's time allowance for todayClose the windowCommand FAILED: access deniedCommand FAILED: communication was not acceptedConfigurationConfiguration for personalized notifications about available PlayTime. Please configure notifications as you see fit. The configuration "Time" value indicates a value of PlayTime left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for personalized notifications about available time. Please configure notifications as you see fit. However, please keep in mind that there will be two types of notifications that cannot be personalized: a final warning some time before time ends and a countdown notifications when time is about to end. The configuration "Time" value indicates a value of time left when notification will be shown, the "Importance" option governs an icon colour and notification properties as follows. Information - a green icon and an informational notification will be shown Warning - a yellow icon and an informational notification will be shown Severe - a red icon and important notification will be shown Critical - a red icon and critical notification will be shown, this notification usually is shown over all open applications and stays open until dismissed, however this behaviour highly depends on Desktop Environment in useConfiguration for user %s:Configuration retrievedConnectedConnecting...Continuous time left to you. May span more than the current day.Continuous time left. May span more than the current day (realtime, available when user is logged in)Continuous time left:Control Timekpr-nExT SettingsControl Timekpr-nExT tracking itemsControl sessions types are not passedControl sessions types list is not correctControl sessions types list is not correct and cannot be setCountdown timeCreate a new time interval that will be available to the user. After creating the interval, please edit its start and end times directly in interval list.CriticalCritical notification timeout (sec)Current PlayTime statisticsCurrent effective usernameCurrent statisticsDaily limit configuration for all week daysDaily limitsDayDay time limits for user have been processedDays & LimitsDecrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Decrease weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Delete the selected time interval from the available list of intervals.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson )Enable PlayTime for selected userEnable PlayTime for the user has been processedEnable PlayTime override for selected user. This setting overrides time accounting in a way that time is accounted only when at least one of the applications on the PlayTime activity list are running! This affects only time accounting, intervals are still fully enforced! If no processes are running, time is accounted as idle thus effectively it's free time for user!Enable PlayTime override:Enable PlayTime:EnabledEnhanced activity monitor:Enter end hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Enter start hour for the automatic wakeup function. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Excluded SessionsExcluded UsersExcluded session types are not passedExcluded session types list is not correctExcluded session types list is not correct and cannot be setExcluded user list is not correctExcluded user list is not correct and cannot be setExcluded user list is not passedFailed to connectFeature "%%s", which is used to detect idle time, cannot be enabled! Idle / inactive time might not be accounted when screen is locked!Final notificationFinal notification time "%%s" is not correctFinal notification time "%%s" is not correct and cannot be setFinal notification time is not passedFinal warning time "%%s" is not correctFinal warning time "%%s" is not correct and cannot be setFinal warning time is not passedFormat: Format: FromHide icon and notifications:Hide tray icon for user has been processedHour intervalsHour intervals for selected day available to the user. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead. Please note that if the day's limit ends at 24:00 and the next day's limit starts at 00:00, then the user can work continuously past midnight. Please note that multiple intervals cannot be configured within the same hour. An interval can start or end or contain a specific hour, but not more than once. This is by design, not a bug. How long the user was inactive since last login (realtime, available when user is logged in)Icon initialization error (%%s)!Icon, isn't it?ImportanceIncrease daily PlayTime allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase daily time allowance by selected time unit (hours or minutes) for selected days. Please note, that you may select more than one day for the adjustment!Increase weekly or monthly time allowance by selected time unit (days or hours or minutes) for the selected period.Info & TodayInformationInformation about PlayTimeInformation about time left / spentInternal connection error, please check log filesInterval removedInterval start cannot be the same as endInterval's start cannot be later than endIntervalsKeep control of computer usageLimitLimit configurationLimits & ConfigurationList of session types to be tracked. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of sessions to be excluded from tracking. Please, do not change or experiment with this unless you actually (not wishfully) know what you are doing.List of usernames registered on the systemList of users excluded from tracking. Please specify actual usernames, not real names here. For example, "jsmith", not "John Smith".Lists day of the week and additional information about the day's PlayTime limit. Please enable / disable days for the user and set time allowance for PlayTime activities.Lists day of the week and additional information about the day's limit. Please enable / disable days for the user.Log levelLog level "%%s" is not correctLog level "%%s" is not correct and cannot be setLog level is not passedLogging levelMonthlyNotes, read carefully ;)Notification configurationNotification timeout (sec)NotificationsNumber of currently active PlayTime activitiesNumber of seconds left for user before enforcing a configured restriction / lockout to his sessions. After this is reached and user is still active, the user's sessions will be handled according to specified restriction / lockout, and almost nothing can be done to prevent it.Number of seconds left for user's available time before sending a final critical notification that time is about to run out. NOTE: the rest of the notification times are configurable per user by user in client application!PARAMETER PARSE ERROR (please check parameter validity): %%sPeriodPlayTimePlayTime activitiesPlayTime activities for user have been processedPlayTime allowed days for user have been processedPlayTime allowed during unaccounted intervals flag for the user has been processedPlayTime available today (saved stated, not real-time)PlayTime configurationPlayTime day limits for user have been processedPlayTime enabled:PlayTime enhanced activity monitor flag "%%s" is not correctPlayTime enhanced activity monitor flag "%%s" is not correct and cannot be setPlayTime enhanced activity monitor flag is not passedPlayTime flag "%%s" is not correctPlayTime flag "%%s" is not correct and cannot be setPlayTime flag is not passedPlayTime left (actual):PlayTime left (today):PlayTime limitsPlayTime notification configurationPlayTime optionsPlayTime override flag for the user has been processedPlayTime spent (today):PlayTime spent today (saved stated, not real-time)Please reopen the application if you are superuser and Timekpr-nExT is runningPlease select a day to set the limitsPlease select an hour interval to removePlease specify a list of full process (executable) names without path as case sensitive strings to be monitored in the system. It's possible to specify RegExp masks for processes too, but please be very careful about them as misusing this setting may lead to killing unwanted processes for the user! NOTE: RegExp is an expert setting!Poll intervalPoll time "%%s" is not correctPoll time "%%s" is not correct and cannot be setPoll time is not passedProcess descriptionProcess maskRemove PlayTime notification threshold from the listRemove a user from the exclusion listRemove an excluded session type from the listRemove excluded session typeRemove notification threshold from the listRemove selected entry from PlayTime activities.Remove tracked session type from the listRestoreRestore configuration from saved stateRestriction / lockout type for user has been processedRestriction / lockout type:Running activities (actual):Running activities:Save all changesSave timeSave time "%%s" is not correctSave time "%%s" is not correct and cannot be setSave time is not passedSelect a restriction / lockout type for the user. NOTE: please be very careful, think ahead and read every options description when changing this setting from default value!Select a time interval when computer can be woken up automatically. Please note that this option is only effective if wake up by RealTime Clock is supported and enabled in BIOS / UEFI!Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether inactive session time is counted. If this is unchecked, time spent in console (not terminal emulator) login sessions and while the screen is locked is NOT taken into account. This varies among desktop environments.Select whether to show Timekpr-next's padlock icon and notifications to the user. Please note that checking this will disable showing all information and notifications to the user!Select whether to use sound "bell" (short notification sound) to announce a new notification from Timekpr-nExT. This works only for enabled notifications. If this setting is not editable, your environment does not advertise sound notification support.Select whether to use speech notifications, if available. You may be able to make speech notifications available by installing package "python3-espeak" or "python3-espeak-ng".Session polling time granularity which specifies how often user sessions and activity are checked and accounted. 3 - 5 seconds are optimal, don't change this if unsure.Session typeSet this specific time limitSettings for PlayTime activitiesSevereShow all notificationsShow limit changesShow seconds in notification areaSpecify the time in seconds when Timekpr-nExT starts continuous real-time countdown before enforcing a restriction / lockout to user's sessions.Specify whether to show a notification when limit configurations or allowance changesSpecify whether to show all notifications. If unchecked, then only important ones are shown.Specify whether to show seconds in notification area. Some desktop environments, like KDE5, do not support text besides notification icons.StartedStatus of Timekpr-nExT admin clientStatus of Timekpr-nExT clientSubtract specified time (penalty)Termination timeTermination time "%%s" is not correctTermination time "%%s" is not correct and cannot be setTermination time is not passedThat interval overlaps with an existing oneThat interval's end conflicts with an existing oneThat interval's start conflicts with an existing oneThat interval's start or end duplicates an existing oneThe command is incorrect:The number of hours to be adjusted for today's limitThe number of minutes to be adjusted for today's limitThe usage of Timekpr-nExT admin client is as follows:There is a problem communicating to Timekpr-nExT (%%s)!There is a problem connecting to Timekpr-nExT daemon (%%s)!These are days and limits that available to you as part of PlayTime activity restrictionsThese are the days and limits that are available to youThis is the configuration app for Timekpr-nExT. It allows you to set time limits for your individual users as well as general Timekpr-nExT options. To use this application, you either have to execute it as superuser or have to be part of the timekpr group. Please note that the "Timekpr-nExT Configuration" is available in superuser (administrator) mode only! Please configure carefully: do not lock yourself out!This lets you configure PlayTime limits.This lets you configure time limits.This option overrides the default time accounting. If it's checked, the time is accounted only when activities in "Activity / application list" are running, the rest of the time is considered idle.This sets how long a notification is shown for "Critical" notifications about time left (when the icon turns red). The value is specified in seconds. A value of 0 means show until dismissed. Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets how long a notification is shown for regular notifications about time left and configuration changes. The value is specified in seconds. A value of 0 means show until dismissed (not recommended for regular notifications). Please note that the desktop environment you use may override this timeout, in which case this setting will not have any effect on notification.This sets the logging level. Please do not change this unless you know what you're doing.This setting controls whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name). When this setting is enabled Timekpr-nExT will perform a match against full command line up to 512 characters enabling enhanced process monitoring capabilities. Please be careful and double check your RegExp patterns in each individual user's PlayTime activity masks!This setting controls whether PlayTime functionality is enabled. This is a PlayTime master switch, if it's turned off, it's turned off for everyone regardless of individual settings!This shows activities / applications which are part of PlayTime restrictionsThis shows the time intervals that are available for use. Option "∞" indicates that time spent during this interval will not be accounted towards the daily limit, it will be accounted as idle instead.This specifies the rate in seconds at which actual user state is saved to disk. To improve performance and still have great accuracy, Timekpr-nExT accounts time in memory at "Poll interval" frequency, this setting defines a frequency at which user state is saved to disk for permanent storage.TimeTime allowance has changed, please note new time left!Time available today (saved stated, not real-time)Time inactive (actual):Time inactive this session or after Timekpr-nExT has been restartedTime inactive:Time left (actual):Time left (today):Time left today:Time left...Time limit (month):Time limit (week):Time limit configuration has changed, please note new configuration!Time limit for this month available to youTime limit for this week available to youTime limit override:Time spent (month):Time spent (session):Time spent (today):Time spent (week):Time spent this monthTime spent this month (saved stated, not real-time)Time spent this session or after Timekpr-nExT has been restartedTime spent this weekTime spent this week (saved stated, not real-time)Time spent today (saved stated, not real-time)Time spent today:Timekpr-nExTTimekpr-nExT Administration ConfigurationTimekpr-nExT ConfigurationTimekpr-nExT PlayTime notificationTimekpr-nExT administrationTimekpr-nExT clientTimekpr-nExT configuration has been savedTimekpr-nExT interface is not yet readyTimekpr-nExT log level. Please do not change this unless you have to. You likely won't find anything pretty in the log files. Values are: 1 - standard, 2 - debug, 3 - extra debugTimekpr-nExT notificationTimekpr-nExT related configurationToTotal PlayTime available left todayTotal PlayTime spent todayTotal time available left today in a row, up to the end of the dayTrack inactive "%%s" is not correctTrack inactive "%%s" is not correct and cannot be setTrack inactive for user has been processedTrack inactive is not passedTrack inactive sessions:Track inactive:Tracked SessionsUNEXPECTED ERROR: %%sUnexpected ERROR getting configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR getting user list. Please inspect Timekpr-nExT log filesUnexpected ERROR updating configuration. Please inspect Timekpr-nExT log filesUnexpected ERROR updating control. Please inspect Timekpr-nExT log filesUnexpected ERROR while loading configuration. Please inspect Timekpr-nExT log filesUse sound "bell" for notificationsUse speech notificationsUser "%%s" configuration is not foundUser "%%s" control file is not foundUser "%%s" is not foundUser ConfigurationUser PlayTime limits have been savedUser additional options have been savedUser configuration retrievedUser time limits have been savedUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correctUser's "%%s" PlayTime allowed during unaccounted intervals flag is not correct and cannot be setUser's "%%s" PlayTime allowed during unaccounted intervals flag is not passedUser's "%%s" PlayTime day limits list is not correctUser's "%%s" PlayTime day limits list is not correct and cannot be setUser's "%%s" PlayTime day limits list is not passedUser's "%%s" PlayTime day list is not correctUser's "%%s" PlayTime day list is not correct and cannot be setUser's "%%s" PlayTime day list is not passedUser's "%%s" PlayTime enable flag is not correctUser's "%%s" PlayTime enable flag is not correct and cannot be setUser's "%%s" PlayTime enable flag is not passedUser's "%%s" PlayTime operation can be one of these: - + =User's "%%s" PlayTime override flag is not correctUser's "%%s" PlayTime override flag is not correct and cannot be setUser's "%%s" PlayTime override flag is not passedUser's "%%s" PlayTime time limit is not correct and cannot be setUser's "%%s" allowed hours are not correct and cannot be setUser's "%%s" day limits list is not correctUser's "%%s" day limits list is not correct and cannot be setUser's "%%s" day limits list is not passedUser's "%%s" day list is not correctUser's "%%s" day list is not correct and cannot be setUser's "%%s" day list is not passedUser's "%%s" day number must be between 1 and 7User's "%%s" day number must be presentUser's "%%s" hide tray icon flag is not correctUser's "%%s" hide tray icon flag is not correct and cannot be setUser's "%%s" hide tray icon flag is not passedUser's "%%s" monthly allowance is not correctUser's "%%s" monthly allowance is not correct and cannot be setUser's "%%s" monthly allowance is not passedUser's "%%s" restriction / lockout type is not correctUser's "%%s" restriction / lockout type is not correct and cannot be setUser's "%%s" restriction / lockout type is not passedUser's "%%s" set PlayTime limit is not correctUser's "%%s" time limit is not correctUser's "%%s" time limit is not correct and cannot be setUser's "%%s" time operation can be one of these: - + =User's "%%s" track inactive flag is not correctUser's "%%s" track inactive flag is not correct and cannot be setUser's "%%s" track inactive flag is not passedUser's "%%s" weekly allowance is not correctUser's "%%s" weekly allowance is not correct and cannot be setUser's "%%s" weekly allowance is not passedUsernameUsername:Users related configurationVerify configured time intervals. This is a mandatory step to ensure that intervals are correct. Intervals which have problems will be highlighted.WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...Wakeup hour interval:WarningWeek day limitsWeeklyWeekly and monthly limitsWeekly and monthly limits for the user. These limits are applied to user together with the rest of limit configuration.Weekly and monthly limits for user have been processedWhen time ends, computer screen will be locked. This option is not a restriction and is more suited for self control purposes.When time ends, computer will be shut down. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, computer will be suspended (put to sleep) and will be woken up at start of next available time interval for the user. This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, computer will be suspended (put to sleep). This option is not a restriction and is more suited for self control purposes. When woken up when there is still no time left, computer screen will be locked and put to sleep again after some time.When time ends, user sessions will be killed. This option is a restriction! Please evaluate whether you need this type of restriction!When time ends, user sessions will be terminated. This option is a restriction! This is the default option and most likely is the one you need!You have %(n)s hourYou have %(n)s hoursYour time is not limited todayYour time is up, you will be forcibly logged out inYour time is up, your computer will be forcibly shutdown inYour time is up, your computer will be forcibly suspended inYour time is up, your session will be forcibly locked indenter hour intervalsexecutable mask...from...hhours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)hrimportance...kill sessionslock screenmminn/anumeric time values are in secondsprocess description...session type...shutdown computersuspend / wakeup computersuspend computerterminate sessionstime...timekpr-nextThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . In Debian, see file /usr/share/common-licenses/GPL-3to...today's timeusername...verifyweekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)Project-Id-Version: timekpr-next Report-Msgid-Bugs-To: FULL NAME PO-Revision-Date: 2025-10-14 19:19+0300 Last-Translator: Eduards Bezverhijs Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); X-Launchpad-Export-Date: 2025-10-14 06:56+0000 X-Generator: Poedit 3.6 %(n)s minute%(n)s minutes%(n)s seconde%(n)s secondes%(n)s seconde restante%(n)s secondes restantes%(n)s seconde de PlayTime restante%(n)s secondes de PlayTime restantes%(n)s utilisateur au total :%(n)s utilisateurs au total :---=== AVIS ===---obtenir des informations du temps utilisateur en temps réel à partir du serveur, exemple==> obtenir la liste sauvegardée des utilisateurs du serveur, exemple==> obtenir la configuration de l'utilisateur et les informations de temps du serveur, exemple==> imprimer l'aide, exempledéfinir les masques de processus d'activité PlayTime, pour lesquels le temps est comptabilisé, exempledéfinir le temps de jeu restant pour l'utilisateur à l'instant actuel : « + » (ajouter du temps), « - » (soustraire du temps), « = » (définir le temps exact disponible), exemple (ajouter une heure)définir des limites de temps de jeu pour tous les jours autorisés, le nombre de valeurs ne doit pas dépasser les jours de temps de jeu autorisés pour l'utilisateur, exempledéfinir des jours autorisés pour les activités PlayTime, exemple==> définir les jours autorisés pour l'utilisateur, exempleDéfinir les heures autorisées pour le jour spécifique, ou "ALL" pour tous les jours, optionnellement définir les minutes de début et de fin entre crochets comme ceci [x-y], optionnellement spécifier ! devant l'heure si elle ne doit pas être comptabilisée (temps libre pour l'utilisateur)définir le type de restriction / verrouillage ("lock" - verrouiller la session, "suspend" - mettre l'ordinateur en veille, "suspendwake" - mettre en veille et réveiller, "terminate" - terminer les sessions, "kill" - tuer les sessions, "shutdown" - éteindre l'ordinateur), exemples==> définir le temps restant pour l'utilisateur à l'instant actuel : "+" (add time), "-" (subtract time), "=" (set exact time available), exemple (add une heure)Définir les limites de temps par mois, exempledéfinir la limite de temps par semaine, exempledéfinir les limites de temps pour tous les jours autorisés, le nombre de valeurs ne doit pas dépasser les jours autorisés pour l'utilisateur, exempledéfinir si les activités PlayTime sont autorisées pendant les intervalles non comptabilisés ("∞"), exempledéfinir si PlayTime est activé pour l'utilisateur, exempledéfinir si le temps de jeu doit être comptabilisé au lieu de l'activité normale, exempledéfinir si l'icône de la barre d'état système doit être masquée et les notifications empêchées, exempleDéfinir si le temps d'inactivité doit être compté, exempleÀ proposÀ propos de Timekpr-nExTNombre d'activités PlayTime actives (temps réel, disponible lorsque l'utilisateur est connecté)Liste d'activités / applicationsPlayTime réel disponible aujourd'hui (temps réel, disponible lorsque l'utilisateur est connecté)Ajouter un utilisateur à la liste d'exclusionAjouter un type de session exclue à la listeAjouter une nouvelle activité PlayTime. Veuillez spécifier le masque d'activité et une description conviviale directement dans la liste d'activités.Ajouter un nouveau seuil de notification PlayTime à la listeAjouter un nouveau seuil de notification à la listeAjouter le temps spécifié (récompense)Ajouter un type de session suivie à la listeLe PlayTime supplémentaire pour l'utilisateur a été traitéConfiguration supplémentaireOptions de configuration supplémentairesLimites supplémentairesOptions supplémentairesStatistiques supplémentairesLe temps supplémentaire pour l'utilisateur a été traitéAutoriser les activités PlayTime pendant les intervalles de temps non comptabilisés ("∞") pour l'utilisateur sélectionné. Ce paramètre permet à l'utilisateur d'utiliser les applications configurées dans sa liste d'activités PlayTime pendant les intervalles de temps marqués comme non comptabilisés ("∞"). Si ce paramètre est activé, l'utilisation des activités ne sera pas comptabilisée dans les limites de PlayTime, sinon les applications de la liste d'activités PlayTime seront terminées dès qu'elles seront démarrées pendant les intervalles de temps non comptabilisés ("∞").Autoriser les activités pendant les intervalles de temps non comptabilisés ("∞"). Ce paramètre permet d'utiliser les applications listées dans « Activité / liste d'applications » pendant les intervalles de temps marqués comme non comptabilisés ("∞"), si le paramètre n'est pas activé, aucune des activités n'est autorisée à s'exécuter !Ajustements de l'allocationLes jours autorisés pour l'utilisateur ont été traitésAutorisé pendant les intervalles "∞" :Autorisé pendant "∞" :Les heures autorisées pour l'utilisateur ont été traitéesAppliquer la configuration PlayTimeAppliquer les limites et les modifications de configuration PlayTime sur cette pageAppliquer les paramètres de Timekpr-nExTAppliquer les modifications de configuration supplémentaires sur cette pageAppliquer tous les paramètres de Timekpr-nExT en une seule foisAppliquer la configurationAppliquer les limites quotidiennesAppliquer toutes les modifications de limite effectuées sur cette pageBrèves informations sur le temps passé et tout ce qui concerne la gestion du temps pour cette journéeChoisir les jours à ajuster pour la période sélectionnée.Choisir les heures à ajuster pour les jours sélectionnés.Choisir les heures à ajuster pour la période sélectionnée.Choisir les minutes à ajuster pour les jours sélectionnés.Choisir les minutes à ajuster pour la période sélectionnée.Choisir ceci pour ajuster l'allocation de PlayTime de l'utilisateur pour aujourd'huiChoisir ceci pour ajuster l'allocation de temps de l'utilisateur pour aujourd'huiFermer la fenêtreÉCHEC de la commande : accès refuséÉCHEC de la commande : la communication n'a pas été acceptéeConfigurationConfiguration des notifications personnalisées concernant le PlayTime disponible. Veuillez configurer les notifications comme bon vous semble. La valeur « Temps » de la configuration indique une valeur de PlayTime restant lorsque la notification sera affichée, l'option « Importance » régit la couleur de l'icône et les propriétés de notification comme suit. Information - une icône verte et une notification d'information seront affichées Avertissement - une icône jaune et une notification d'information seront affichées Sévère - une icône rouge et une notification importante seront affichées Critique - une icône rouge et une notification critique seront affichées, cette notification est généralement affichée par-dessus toutes les applications ouvertes et reste ouverte jusqu'à ce qu'elle soit fermée, cependant ce comportement dépend fortement de l'environnement de bureau utiliséConfiguration des notifications personnalisées concernant le temps disponible. Veuillez configurer les notifications comme bon vous semble. Cependant, gardez à l'esprit qu'il y aura deux types de notifications qui ne pourront pas être personnalisées : un avertissement final quelque temps avant la fin du temps et des notifications de compte à rebours lorsque le temps est sur le point de s'écouler. La valeur « Temps » de la configuration indique une valeur de temps restant lorsque la notification sera affichée, l'option « Importance » régit la couleur de l'icône et les propriétés de notification comme suit. Information - une icône verte et une notification d'information seront affichées Avertissement - une icône jaune et une notification d'information seront affichées Sévère - une icône rouge et une notification importante seront affichées Critique - une icône rouge et une notification critique seront affichées, cette notification est généralement affichée par-dessus toutes les applications ouvertes et reste ouverte jusqu'à ce qu'elle soit fermée, cependant ce comportement dépend fortement de l'environnement de bureau utiliséConfiguration pour l'utilisateur %s :Configuration récupéréeConnectéConnexion en cours...Temps continu qui vous reste. Peut s'étendre au-delà de la journée actuelle.Temps continu restant. Peut s'étendre sur plus que la journée actuelle (temps réel, disponible lorsque l'utilisateur est connecté)Temps continu restant :Paramètres de contrôle de Timekpr-nExTÉléments de suivi de contrôle de Timekpr-nExTLes types de sessions de contrôle ne sont pas transmisLa liste des types de sessions de contrôle n'est pas correcteLa liste des types de sessions de contrôle n'est pas correcte et ne peut pas être définieTemps du compte à reboursCréer un nouvel intervalle de temps qui sera disponible pour l'utilisateur. Après avoir créé l'intervalle, veuillez modifier ses heures de début et de fin directement dans la liste des intervalles.CritiqueDélai d'expiration de la notification critique (sec)Statistiques PlayTime actuellesNom d'utilisateur effectif actuelStatistiques actuellesConfiguration des limites quotidiennes pour tous les jours de la semaineLimites quotidiennesJourLes limites de temps journalières pour l'utilisateur ont été traitéesJours & LimitesDiminuer l'allocation quotidienne de PlayTime par l'unité de temps sélectionnée (heures ou minutes) pour les jours sélectionnés. Veuillez noter que vous pouvez sélectionner plus d'un jour pour l'ajustement !Diminuer l'allocation de temps quotidienne de l'unité de temps sélectionnée (heures ou minutes) pour les jours sélectionnés. Veuillez noter que vous pouvez sélectionner plus qu'un jour pour l'ajustement !Diminuer l'allocation de temps hebdomadaire ou mensuelle par l'unité de temps sélectionnée (jours, heures ou minutes) pour la période sélectionnée.Supprimer l'intervalle de temps sélectionné de la liste des intervalles disponibles.Eduards Bezverhijs (Translations fine-tuning by JP Lord ) (English fine-tuning by Phil Hudson ) Nicolas Loozen (Traduction française initiale)Activer PlayTime pour l'utilisateur sélectionnél'activation de PlayTime pour l'utilisateur a été traitéeActiver le remplacement de PlayTime pour l'utilisateur sélectionné. Ce paramètre remplace la comptabilisation du temps de sorte que le temps n'est comptabilisé que lorsqu'au moins une des applications de la liste d'activités PlayTime est en cours d'exécution ! Cela n'affecte que la comptabilisation du temps, les intervalles sont toujours pleinement appliqués ! Si aucun processus n'est en cours d'exécution, le temps est comptabilisé comme inactif, ce qui en fait effectivement du temps libre pour l'utilisateur !Activer le remplacement de PlayTime :Activer PlayTime :ActivéMoniteur d'activité amélioré :Entrer l'heure de fin pour la fonction de réveil automatique. Veuillez noter que cette option n'est effective que si le réveil par horloge temps réel (RTC) est pris en charge et activé dans le BIOS / UEFI !Entrer l'heure de début pour la fonction de réveil automatique. Veuillez noter que cette option n'est effective que si le réveil par horloge temps réel (RTC) est pris en charge et activé dans le BIOS / UEFI !Sessions excluesUtilisateurs exclusLes types de session exclue ne sont pas transmisLa liste des types de sessions exclues n'est pas correcteLa liste des types de sessions exclues n'est pas correcte et ne peut pas être définiela liste des utilisateurs exclus n'est pas correctela liste des utilisateurs exclus n'est pas correcte et ne peut pas être définiela liste des utilisateurs exclus n'est pas transmiseÉchec de la connexionLa fonctionnalité "%%s", utilisée pour détecter le temps d'inactivité, ne peut pas être activée ! Le temps d'inactivité pourrait ne pas être comptabilisé lorsque l'écran est verrouillé !Notification finalel'heure de la notification finale "%%s" n'est pas correctel'heure de la notification finale "%%s" n'est pas correcte et ne peut pas être définiel'heure de la notification finale n'est pas transmisel'heure de l'avertissement final "%%s" n'est pas correctel'heure de l'avertissement final "%%s" n'est pas correcte et ne peut pas être définiel'heure de l'avertissement final n'est pas transmiseFormat : Format : DeMasquer l'icône et les notifications :Le masquage de l'icône de la barre d'état système pour l'utilisateur a été traitéIntervalles horairesIntervalles horaires pour le jour sélectionné disponibles pour l'utilisateur. L'option "∞" indique que le temps passé pendant cet intervalle ne sera pas comptabilisé dans la limite quotidienne, il sera plutôt comptabilisé comme inactif. Veuillez noter que si la limite du jour se termine à 24:00 et que la limite du jour suivant commence à 00:00, l'utilisateur peut alors travailler en continu après minuit. Veuillez noter que plusieurs intervalles ne peuvent pas être configurés dans la même heure. Un intervalle peut commencer ou se terminer ou contenir une heure spécifique, mais pas plus d'une fois. Ceci est intentionnel, ce n'est pas un bug. Depuis combien de temps l'utilisateur est inactif depuis sa dernière connexion (temps réel, disponible lorsque l'utilisateur est connecté)Erreur d'initialisation de l'icône (%%s) !Icône, n'est-ce pas ?ImportanceAugmenter l'allocation quotidienne de PlayTime de l'unité de temps sélectionnée (heures ou minutes) pour les jours sélectionnés. Veuillez noter que vous pouvez sélectionner plus qu'un jour pour l'ajustement !Augmenter l'allocation de temps quotidienne de l'unité de temps sélectionnée (heures ou minutes) pour les jours sélectionnés. Veuillez noter que vous pouvez sélectionner plus qu'un jour pour l'ajustement !Augmenter l'allocation de temps hebdomadaire ou mensuelle par l'unité de temps sélectionnée (jours, heures ou minutes) pour la période sélectionnée.Infos & Aujourd'huiInformationInformations sur PlayTimeInformations sur le temps restant / passéErreur de connexion interne, veuillez vérifier les fichiers journauxIntervalle suppriméLe début de l'intervalle ne peut pas être identique à la finle début de l'intervalle ne peut pas être postérieur à la finIntervallesGardez le contrôle de l'utilisation de l'ordinateurLimiteConfiguration des limitesLimites & ConfigurationListe des types de sessions à suivre. Veuillez ne pas modifier ou expérimenter avec ceci à moins de savoir réellement (et non hypothétiquement) ce que vous faites.Liste des sessions à exclure du suivi. Veuillez ne pas modifier ou expérimenter avec ceci à moins de savoir réellement (et non hypothétiquement) ce que vous faites.Liste des noms d'utilisateur enregistrés sur le systèmeListe des utilisateurs exclus du suivi. Veuillez spécifier ici les noms d'utilisateur réels, pas les vrais noms. Par exemple, « jsmith », et non « John Smith ».Liste le jour de la semaine et des informations supplémentaires sur la limite de PlayTime du jour. Veuillez activer / désactiver les jours pour l'utilisateur et définir l'allocation de temps pour les activités PlayTime.Liste le jour de la semaine et des informations supplémentaires sur la limite du jour. Veuillez activer / désactiver les jours pour l'utilisateur.Niveau de journalisationle niveau de journalisation "%%s" n'est pas correctle niveau de journalisation "%%s" n'est pas correct et ne peut pas être définile niveau de journalisation n'est pas transmisNiveau de journalisationMensuelNotes, à lire attentivement ;)Configuration des notificationsDélai d'expiration de la notification (sec)NotificationsNombre d'activités PlayTime actuellement activesNombre de secondes restantes pour l'utilisateur avant d'appliquer une restriction / un verrouillage configuré à ses sessions. Une fois ce délai atteint et si l'utilisateur est toujours actif, les sessions de l'utilisateur seront traitées conformément à la restriction / au verrouillage spécifié, et presque rien ne pourra l'empêcher.Nombre de secondes restantes du temps disponible de l'utilisateur avant d'envoyer une notification critique finale indiquant que le temps est sur le point de s'écouler. NOTE : le reste des heures de notification est configurable par utilisateur dans l'application client !ERREUR D'ANALYSE DES PARAMÈTRES (veuillez vérifier la validité des paramètres) : %%sPériodePlayTimeActivités PlayTimeLes activités PlayTime pour l'utilisateur ont été traitéesles jours autorisés PlayTime pour l'utilisateur ont été traitésLe PlayTime autorisé pendant les intervalles non comptabilisés pour l'utilisateur a été traitéPlayTime disponible aujourd'hui (état sauvegardé, non temps réel)Configuration PlayTimeLes limites journalières PlayTime pour l'utilisateur ont été traitéesPlayTime activé :l'indicateur du moniteur d'activité amélioré PlayTime "%%s" n'est pas correctl'indicateur du moniteur d'activité amélioré PlayTime "%%s" n'est pas correct et ne peut pas être définil'indicateur du moniteur d'activité amélioré PlayTime n'est pas transmisl'indicateur PlayTime "%%s" n'est pas correctl'indicateur PlayTime "%%s" n'est pas correct et ne peut pas être définil'indicateur PlayTime n'est pas transmisPlayTime restant (actuel) :PlayTime restant (aujourd'hui) :Limites PlayTimeConfiguration des notifications PlayTimeOptions PlayTimeL'indicateur de remplacement de PlayTime pour l'utilisateur a été traitéPlayTime passé (aujourd'hui) :PlayTime passé aujourd'hui (état sauvegardé, non temps réel)Rouvrez l'application si vous êtes superutilisateur et Timekpr-nExT tourneVeuillez sélectionner un jour pour définir les limitesVeuillez sélectionner un intervalle horaire à supprimerVeuillez spécifier une liste de noms de processus complets (exécutables) sans chemin, sous forme de textes sensibles à la casse, à surveiller dans le système. Il est également possible de spécifier des masques RegExp pour les processus, mais soyez très prudent car une mauvaise utilisation de ce paramètre peut entraîner l'arrêt indésirable de processus pour l'utilisateur ! NOTE : RegExp est un paramètre expert !Intervalle d'interrogationl'intervalle d'interrogation "%%s" n'est pas correctl'intervalle d'interrogation "%%s" n'est pas correct et ne peut pas être définil'intervalle d'interrogation n'est pas transmisDescription du processusMasque de processusSupprimer le seuil de notification PlayTime de la listeSupprimer un utilisateur de la liste d'exclusionSupprimer un type de session exclue de la listeSupprimer le type de session excluSupprimer le seuil de notification de la listeSupprimer l'entrée sélectionnée des activités PlayTime.Supprimer le type de session suivie de la listeRestaurerRestaurer la configuration à partir de l'état sauvegardéLe type de restriction / verrouillage pour l'utilisateur a été traitéType de restriction / verrouillage :Activités en cours (actuel) :Activités en cours :Enregistrer toutes les modificationsSauvegarder le tempsl'intervalle de sauvegarde "%%s" n'est pas correctl'intervalle de sauvegarde "%%s" n'est pas correct et ne peut pas être définil'intervalle de sauvegarde n'est pas transmisSélectionner un type de restriction / verrouillage pour l'utilisateur. NOTE : soyez très prudent, anticipez et lisez la description de chaque option avant de modifier ce paramètre par rapport à sa valeur par défaut !Sélectionner un intervalle de temps pendant lequel l'ordinateur peut être réveillé automatiquement. Veuillez noter que cette option n'est effective que si le réveil par horloge temps réel (RTC) est pris en charge et activé dans le BIOS / UEFI !Sélectionner si le temps de session inactive est compté. Si cette case n'est pas cochée, le temps passé dans les sessions de connexion en console (pas l'émulateur de terminal) et lorsque l'écran est verrouillé N'EST PAS pris en compte. Cela varie selon les environnements de bureau.Sélectionner si le temps de session inactive est compté. Si cette case n'est pas cochée, le temps passé dans les sessions de connexion en console (pas l'émulateur de terminal) et lorsque l'écran est verrouillé N'EST PAS pris en compte. Cela varie selon les environnements de bureau.Sélectionner si le temps de session inactive est compté. Si cette case n'est pas cochée, le temps passé dans les sessions de connexion en console (pas l'émulateur de terminal) et lorsque l'écran est verrouillé N'EST PAS pris en compte. Cela varie selon les environnements de bureau.Sélectionnez si l'icône de cadenas de Timekpr-next et les notifications doivent être affichées à l'utilisateur. Veuillez noter que cocher cette option désactivera l'affichage de toutes les informations et notifications pour l'utilisateur !Sélectionnez si vous souhaitez utiliser le son "cloche" (son de notification court) pour annoncer une nouvelle notification de Timekpr-nExT. Cette fonctionnalité fonctionne uniquement pour les notifications activées. Si ce paramètre n'est pas modifiable, cela signifie que votre environnement ne prend pas en charge les notifications sonores.Sélectionner s'il faut utiliser les notifications vocales, si disponibles. Vous pourrez peut-être rendre les notifications vocales disponibles en installant le paquet « python3-espeak » ou « python3-espeak-ng ».Granularité du temps d'interrogation des sessions qui spécifie la fréquence à laquelle les sessions utilisateur et l'activité sont vérifiées et comptabilisées. 3 à 5 secondes sont optimales, ne modifiez pas ceci si vous n'êtes pas sûr.Type de sessionDéfinir cette limite de temps spécifiqueParamètres pour les activités PlayTimeSévèreAfficher toutes les notificationsAfficher les changements de limiteAfficher les secondes dans la zone de notificationSpécifier le temps en secondes quand Timekpr-nExT démarre le compte à rebours continu en temps réel avant d'appliquer une restriction / un verrouillage aux sessions de l'utilisateur.Spécifier s'il faut afficher une notification lorsque les configurations de limite ou l'allocation changentSpécifier s'il faut afficher toutes les notifications. Si cette case n'est pas cochée, seules les notifications importantes sont affichées.Spécifier s'il faut afficher les secondes dans la zone de notification. Certains environnements de bureau, comme KDE5, ne prennent pas en charge le texte à côté des icônes de notification.DémarréStatut du client d'administration de Timekpr-nExTStatut du client Timekpr-nExTSoustraire le temps spécifié (pénalité)Temps de finl'heure de fin "%%s" n'est pas correctel'heure de fin "%%s" n'est pas correcte et ne peut pas être définiel'heure de fin n'est pas transmiseCet intervalle chevauche un intervalle existantla fin de cet intervalle entre en conflit avec un intervalle existantLe début de cet intervalle entre en conflit avec un intervalle existantLe début ou la fin de cet intervalle duplique un intervalle existantLa commande est incorrecte :Le nombre d'heures à ajuster pour la limite d'aujourd'huiLe nombre de minutes à ajuster pour la limite d'aujourd'huiL'utilisation du client d'administration de Timekpr-nExT est la suivante :Un problème est survenu lors de la communication avec Timekpr-nExT (%%s) !Un problème est survenu lors de la connexion au daemon Timekpr-nExT (%%s) !Ce sont les jours et les limites qui vous sont disponibles dans le cadre des restrictions d'activité PlayTimeCe sont les jours et les limites qui vous sont disponiblesCeci est l'application de configuration pour Timekpr-nExT. Elle vous permet de définir des limites de temps pour vos utilisateurs individuels ainsi que les options générales de Timekpr-nExT. Pour utiliser cette application, vous devez soit l'exécuter en tant que superutilisateur, soit faire partie du groupe timekpr. Veuillez noter que la "Configuration de Timekpr-nExT" n'est disponible qu'en mode superutilisateur (administrateur) ! Veuillez configurer avec soin : ne vous bloquez pas vous-même !Ceci vous permet de configurer les limites de PlayTime.Ceci vous permet de configurer les limites de temps.Cette option remplace la comptabilisation du temps par défaut. Si elle est cochée, le temps n'est comptabilisé que lorsque les activités de la liste « Activité / liste d'applications » sont en cours d'exécution, le reste du temps est considéré comme inactif.Ceci définit la durée d'affichage d'une notification pour les notifications "Critiques" concernant le temps restant (lorsque l'icône devient rouge). La valeur est indiquée en secondes. Une valeur de 0 signifie que la notification reste affichée jusqu'à ce qu'elle soit fermée. Veuillez noter que l'environnement de bureau que vous utilisez peut outrepasser ce délai, auquel cas ce paramètre n'aura aucun effet sur la notification.Ceci détermine la durée d'affichage d'une notification pour les notifications régulières concernant le temps restant et les modifications de configuration. La valeur est indiquée en secondes. Une valeur de 0 signifie que la notification reste affichée jusqu'à ce qu'elle soit fermée (non recommandé pour les notifications régulières). Veuillez noter que l'environnement de bureau que vous utilisez peut outrepasser ce délai, auquel cas ce paramètre n'aura aucun effet sur la notification.Ceci définit le niveau de journalisation. Veuillez ne pas modifier ceci à moins de savoir ce que vous faites.Ce paramètre contrôle si le moniteur d'activité PlayTime utilisera la ligne de commande du processus, y compris les arguments, pour surveiller les processus (par défaut, il n'utilise que le nom du processus). Lorsque ce paramètre est activé, Timekpr-nExT effectuera une correspondance avec la ligne de commande complète jusqu'à 512 caractères, permettant des capacités de surveillance de processus améliorées. Soyez prudent et vérifiez attentivement vos modèles RegExp dans les masques d'activité PlayTime de chaque utilisateur individuel !Ce paramètre contrôle si la fonctionnalité PlayTime est activée. C'est un interrupteur principal pour PlayTime, s'il est désactivé, il est désactivé pour tout le monde, quels que soient les paramètres individuels !Ceci affiche les activités / applications qui font partie des restrictions PlayTimeCeci affiche les intervalles de temps disponibles pour utilisation. L'option "∞" indique que le temps passé pendant cet intervalle ne sera pas comptabilisé dans la limite quotidienne, il sera plutôt comptabilisé comme inactif.Ceci spécifie la fréquence en secondes à laquelle l'état réel de l'utilisateur est sauvegardé sur le disque. Pour améliorer les performances tout en conservant une grande précision, Timekpr-nExT comptabilise le temps en mémoire à la fréquence de l' « Intervalle d'interrogation », ce paramètre définit une fréquence à laquelle l'état de l'utilisateur est sauvegardé sur le disque pour un stockage permanent.TempsL'allocation de temps a changé, veuillez noter le nouveau temps restant !Temps disponible aujourd'hui (état sauvegardé, non temps réel)Temps inactif (actuel) :Temps inactif cette session ou après le redémarrage de Timekpr-nExTTemps inactif :Temps restant (actuel) :Temps restant (aujourd'hui) :Temps restant aujourd'hui :Temps restant...Limite de temps (mois) :Limite de temps (semaine) :La configuration de la limite de temps a changé, veuillez noter la nouvelle configuration !Limite de temps pour ce mois qui vous est disponibleLimite de temps pour cette semaine qui vous est disponibleRemplacement de la limite de temps :Temps passé (mois) :Temps passé (session) :Temps passé (aujourd'hui) :Temps passé (semaine) :Temps passé ce mois-ciTemps passé ce mois-ci (état sauvegardé, non temps réel)Temps passé cette session ou après le redémarrage de Timekpr-nExTTemps passé cette semaineTemps passé cette semaine (état sauvegardé, non temps réel)Temps passé aujourd'hui (état sauvegardé, non temps réel)Temps passé aujourd'hui :Timekpr-nExTConfiguration de l'administration de Timekpr-nExTConfiguration de Timekpr-nExTNotification PlayTime Timekpr-nExTAdministration de Timekpr-nExTClient Timekpr-nExTLa configuration de Timekpr-nExT a été enregistréel'interface de Timekpr-nExT n'est pas encore prêteNiveau de journalisation de Timekpr-nExT. Veuillez ne pas modifier ceci à moins d'y être obligé. Vous ne trouverez probablement rien d'intéressant dans les fichiers journaux. Valeurs : 1 - standard, 2 - débogage, 3 - débogage supplémentaireNotification Timekpr-nExTConfiguration relative à Timekpr-nExTÀTotal de PlayTime disponible restant aujourd'huiTotal de PlayTime passé aujourd'huiTemps total disponible restant aujourd'hui d'affilée, jusqu'à la fin de la journéele suivi de l'inactivité "%%s" n'est pas correctle suivi de l'inactivité "%%s" n'est pas correct et ne peut pas être définiLe suivi de l'inactivité pour l'utilisateur a été traitéle suivi de l'inactivité n'est pas transmisSuivre les sessions inactives :Suivre l'inactivité :Sessions suiviesERREUR INATTENDUE : %%sERREUR inattendue en obtenant la configuration. Inspectez les journaux Timekpr-nExTERREUR inattendue en obtenant la configuration utilisateur. Inspectez les journaux Timekpr-nExTERREUR inattendue en obtenant la liste des utilisateurs. Inspectez les journaux Timekpr-nExTERREUR inattendue en mettant la configuration à jour. Inspectez les journaux Timekpr-nExTERREUR inattendue en mettant le contrôle à jour. Inspectez les journaux Timekpr-nExTERREUR inattendue en chargeant la configuration. Inspectez les journaux Timekpr-nExTUtiliser le son "cloche" pour les notificationsUtiliser les notifications vocalesLa configuration de l'utilisateur "%%s" est introuvableLe fichier de contrôle de l'utilisateur "%%s" est introuvableL'utilisateur "%%s" est introuvableConfiguration utilisateurLes limites PlayTime utilisateur ont été enregistréesLes options utilisateur supplémentaires ont été enregistréesConfiguration utilisateur récupéréeLes limites de temps utilisateur ont été enregistréesL'indicateur PlayTime autorisé pendant les intervalles non comptabilisés de l'utilisateur "%%s" n'est pas correctL'indicateur PlayTime autorisé pendant les intervalles non comptabilisés de l'utilisateur "%%s" n'est pas correct et ne peut pas être définiL'indicateur PlayTime autorisé pendant les intervalles non comptabilisés de l'utilisateur "%%s" n'est pas transmisLa liste des limites journalières PlayTime de l'utilisateur "%%s" n'est pas correcteLa liste des limites journalières PlayTime de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définieLa liste des limites journalières PlayTime de l'utilisateur "%%s" n'est pas transmiseLa liste des jours PlayTime de l'utilisateur "%%s" n'est pas correcteLa liste des jours PlayTime de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définieLa liste des jours PlayTime de l'utilisateur "%%s" n'est pas transmiseL'indicateur d'activation de PlayTime de l'utilisateur "%%s" n'est pas correctL'indicateur d'activation de PlayTime de l'utilisateur "%%s" n'est pas correct et ne peut pas être définiL'indicateur d'activation de PlayTime de l'utilisateur "%%s" n'est pas transmisL'opération PlayTime de l'utilisateur "%%s" peut être l'une des suivantes : - + =L'indicateur de remplacement de PlayTime de l'utilisateur "%%s" n'est pas correctL'indicateur de remplacement de PlayTime de l'utilisateur "%%s" n'est pas correct et ne peut pas être définiL'indicateur de remplacement de PlayTime de l'utilisateur "%%s" n'est pas transmisLa limite de temps PlayTime de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définieLes heures autorisées de l'utilisateur "%%s" ne sont pas correctes et ne peuvent pas être définiesLa liste des limites journalières de l'utilisateur "%%s" n'est pas correcteLa liste des limites journalières de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définieLa liste des limites journalières de l'utilisateur "%%s" n'est pas transmisela liste des jours de l'utilisateur "%%s" n'est pas correcteLa liste des jours de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définiela liste des jours de l'utilisateur "%%s" n'est pas transmisele numéro de jour de l'utilisateur "%%s" doit être compris entre 1 et 7le numéro de jour de l'utilisateur "%%s" doit être présentL'indicateur de masquage de l'icône de la barre d'état système de l'utilisateur "%%s" n'est pas correctL'indicateur de masquage de l'icône de la barre d'état système de l'utilisateur "%%s" n'est pas correct et ne peut pas être définiL'indicateur de masquage de l'icône de la barre d'état système de l'utilisateur "%%s" n'est pas transmisL'allocation mensuelle de l'utilisateur "%%s" n'est pas correcteL'allocation mensuelle de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définieL'allocation mensuelle de l'utilisateur "%%s" n'est pas transmiseLe type de restriction / verrouillage de l'utilisateur "%%s" n'est pas correctLe type de restriction / verrouillage de l'utilisateur "%%s" n'est pas correct et ne peut pas être définiLe type de restriction / verrouillage de l'utilisateur "%%s" n'est pas transmisLa limite PlayTime définie par l'utilisateur "%%s" n'est pas correcteLa limite de temps de l'utilisateur "%%s" n'est pas correcteLa limite de temps de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définieL'opération de temps de l'utilisateur "%%s" peut être l'une des suivantes : - + =L'indicateur de suivi de l'inactivité de l'utilisateur "%%s" n'est pas correctL'indicateur de suivi de l'inactivité de l'utilisateur "%%s" n'est pas correct et ne peut pas être définiL'indicateur de suivi de l'inactivité de l'utilisateur "%%s" n'est pas transmisL'allocation hebdomadaire de l'utilisateur "%%s" n'est pas correcteL'allocation hebdomadaire de l'utilisateur "%%s" n'est pas correcte et ne peut pas être définiel'allocation hebdomadaire de l'utilisateur "%%s" n'est pas transmiseNom d'utilisateurNom d'utilisateur :Configuration relative aux utilisateursVérifier les intervalles de temps configurés. C'est une étape obligatoire pour s'assurer que les intervalles sont corrects. Les intervalles qui posent problème seront mis en évidence.AVERTISSEMENT : L'utilitaire d'administration de Timekpr-nExT a été invité à s'exécuter en mode GUI, mais aucun affichage n'est disponible, il s'exécute donc en CLI...Intervalle horaire de réveil :AvertissementLimites des jours de la semaineHebdomadaireLimites hebdomadaires et mensuellesLimites hebdomadaires et mensuelles pour l'utilisateur. Ces limites sont appliquées à l'utilisateur avec le reste de la configuration des limites.Les limites hebdomadaires et mensuelles pour l'utilisateur ont été traitéesLorsque le temps est écoulé, l'écran de l'ordinateur sera verrouillé. Cette option n'est pas une restriction et est plus adaptée à des fins d'autocontrôle.Lorsque le temps est écoulé, l'ordinateur sera éteint. Cette option est une restriction ! Veuillez évaluer si vous avez besoin de ce type de restriction !Lorsque le temps est écoulé, l'ordinateur sera mis en veille et sera réveillé au début du prochain intervalle de temps disponible pour l'utilisateur. Cette option n'est pas une restriction et est plus adaptée à des fins d'autocontrôle. Lorsqu'il est réveillé alors qu'il ne reste plus de temps, l'écran de l'ordinateur sera verrouillé et remis en veille après un certain temps.Lorsque le temps est écoulé, l'ordinateur sera mis en veille. Cette option n'est pas une restriction et est plus adaptée à des fins d'autocontrôle. Lorsqu'il est réveillé alors qu'il ne reste plus de temps, l'écran de l'ordinateur sera verrouillé et remis en veille après un certain temps.Lorsque le temps est écoulé, les sessions utilisateur seront tuées. Cette option est une restriction ! Veuillez évaluer si vous avez besoin de ce type de restriction !Lorsque le temps est écoulé, les sessions utilisateur seront terminées. Cette option est une restriction ! C'est l'option par défaut et très probablement celle dont vous avez besoin !Il vous reste %(n)s heureIl vous reste %(n)s heuresVotre temps n'est pas limité aujourd'huiVotre temps est écoulé, vous serez déconnecté de force dansVotre temps est écoulé, votre ordinateur sera éteint de force dansVotre temps est écoulé, mise en veille de force dansVotre temps est écoulé, votre session sera verrouillée de force dansjentrer les intervalles horairesmasque d'exécutable...de...hles heures sont numérotées selon la norme ISO 8601 (horloge de 24h, format : 0-23)himportance...tuer les sessionsverrouiller l'écranmmins/oles valeurs de temps numériques sont en secondesdescription du processus...type de session...éteindre l'ordinateurmettre en veille / réveiller l'ordinateurmettre l'ordinateur en veilleterminer les sessionstemps...Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation, version 3 ou toute autre version ulterieure. Ce programme est distribué avec l'espoir d'être utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails. Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps que ce programme ; si ce n'est pas le cas, regardez . Sous Debian, regardez le fichier /usr/share/common-licenses/GPL-3à...temps d'aujourd'huinom d'utilisateur...vérifierles jours de la semaine sont numérotés selon la norme ISO 8601 (lundi est le premier jour, format : 1-7)timekpr-next/resource/appstream/000775 001750 001750 00000000000 13745331025 021023 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/appstream/org.timekpr.timekpr-next.metainfo.xml000664 001750 001750 00000003523 13745331025 030240 0ustar00bezvfedubezvfedu000000 000000 org.timekpr.timekpr_next Timekpr-nExT Control Panel Track and control computer usage of user accounts CC-BY-SA-4.0 GPL-3.0-or-later timekpr-next

Timekpr-nExT is a program that tracks and controls the computer usage of your user accounts. You can limit their daily usage based on a timed access duration and configure periods of day when they can or cannot log in.

This may be used for parental control to limit the amount of screen time a child spends in front of the computer.

Please report any bugs to Timekpr-nExT’s bug tracker on Launchpad at: https://bugs.launchpad.net/timekpr-next

https://git.launchpad.net/timekpr-next/plain/resource/screenshots/timekpr-next-screenshot-admin.png https://git.launchpad.net/timekpr-next/plain/resource/screenshots/timekpr-next-screenshot-client.png https://launchpad.net/timekpr-next https://bugs.launchpad.net/timekpr-next https://translations.launchpad.net/timekpr-next https://tinyurl.com/yc9x85v2 timekpr-admin-su.desktop edzis@inbox.lv
timekpr-next/resource/icons/000775 001750 001750 00000000000 14575617135 020155 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/icons/timekpr-padlock-unlimited-green.svg000664 001750 001750 00000120626 13573525204 027051 0ustar00bezvfedubezvfedu000000 000000 icon lock security secure padlock signs_and_symbols AJ Ashton AJ Ashton AJ Ashton image/svg+xml en timekpr-next/resource/icons/timekpr-padlock-limited-red.svg000664 001750 001750 00000117777 13573525204 026175 0ustar00bezvfedubezvfedu000000 000000 padlock icon lock security secure padlock signs_and_symbols AJ Ashton AJ Ashton AJ Ashton image/svg+xml en timekpr-next/resource/icons/timekpr-padlock-limited-yellow.svg000664 001750 001750 00000117772 13573525204 026731 0ustar00bezvfedubezvfedu000000 000000 padlock icon lock security secure padlock signs_and_symbols AJ Ashton AJ Ashton AJ Ashton image/svg+xml en timekpr-next/resource/icons/timekpr-client-128.png000664 001750 001750 00000030723 13716566163 024127 0ustar00bezvfedubezvfedu000000 000000 ‰PNG  IHDR€€Ã>aËsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/Æã½ù IDATxœí�y|Õ•ï¿÷Vukß,É›dyà 66 ÞàaÆÆ˜I†$$™,o/“À�}&€É2C>É$™„�É›˜À„à��¼�1cŒ�d¼ay·¼È’¬­÷ªºï�ZººÕ²Z« Ͽϧ>ÕjUߺUçwÎ=÷ÞsϼϠ@¬…±\,`œ‚1j€J Ü9r�çg!q 49ÇiG€ƒ(Ø}# ÎÁc Ĺ®@_±ª0˜+àJ`š€"DçÇëî�3JW)÷mÀ; 6KxxýF8ÞûÚŸ{¼ç°r0߂Š–H˜xÂvHhÁ!CÈ:”ÜÊJ¥¥ä¡¡åæ åå�˜á0f,†ÑÖF¼£ƒø™3D‰54kjB™&à#H’{�VµÀ+wØ–ä=ƒ÷ V þ^À¿À…¦Q4nE'R8z455ä�…Ôõ~¹·e„�#|äí‡Óþî»t8€e)„PÐ <-á7 ac¿Ü|€q^`TKø(ð) «pAM C.»Œ²éÓ)ºè"d08¨u³ Úëê8S[Ë™íÛé8rÄ%�kOðË%°P+ל—X—÷E vEó†gèܹ ½ær++»-Ç’„$¡0¤Ž¥iöYJ°‹MB)¤e¢Y&š2ÑLƒ '`%Ð-³Û{ÅiX¿žS¯¿NäÄ ¿eP ^¾½ÞìÉ{ œWx®¶à«nqµ]ËϧüòË:w.¥S¦dtìL©ÎÉ'Ì#ÌÃÒ!쟸g÷‘Eòá“ÂrNJÙÚ¬ìÏÂ4Æ#äÄ£äÅBäÇBè–Ñås„ëëiذ�S¯½F¢­Í³ Êv¿»žïÛ›ê?œX7*xPÀÁÛVÀ~RûS»Œàr ©õöGŸæ§[ËòΖ™ü¬â Ú)jk"?ÚžúàJq¦¶–#ù ¡#G\"t(øf9üh&$ä…ŸƒN€•0_ƒŸS„h99Tßt#n¸¡“ÆGr i­¨"RR�Ô¤}Hé}Nj¾Dº‚—éh? HÁyêw_ÚÃÁõu\úwW0ü’‘x‡”öŸ4á[–BY–ýÙL%�wv>ë¡Jë)êhB¨ä“RЦM›8øì³vù°SÀçn„WOƒH€u ÇáÂÖz)€!Ó¦1æöÛÉ)+K¹6TXF˰â…%hš–~: ¤t¬�H’@ˆ4? ]ø‚“»ŽóèµßC)E^i>_Ûù0�Ü€;¶ÓÉ LÕ~+£°,…roš–iÚß2¢¸ñ8%gN"|̓säÏæÔ† î=•‚Ÿ”×ËôÏHI7xjâð´€9Br‡eÜí·S±ØC0 ž­¾ Ü�B ¨Y²„aW_ `›R!h«¬¦eÔdN�€®¡iZ 44=i:7®ð}Úï#A&¤ï–Õ’‚Oö,ËB¹‚÷·ý¦æA3-LSbiÒ´ïaify%'ŠËÈ?q˜!Ç÷#-!%5ø…£Gs`ùrŒh´\*õü*øÞFøúR°º¬`0 x‚%ðð÷Bò*+ÿÑ�’?|¸gîcy…4]4³¸]·…î?<­÷´¿_Àí÷„M€ZjOÀiì&ÀÖ~Ó´° [û¥©ai&Ò°ŸÁÒL¤&15IdÔ8êˇRQ·ƒÜ¶fʦNeê°aÔ=õá'„Tê+s`Â:øÈ{ºº_ÑïX…qxVq£Ê.¹„ñ÷wÈ@À3ùí•U´L˜† æt¾¦û4ß± R“‰p.àBjøÚÍñLLÍÂ2%Ò´°Üúšf �†,¢á’YÞGÙ‘½ö XYSî¾›ø͵µWjÅ ø›%ö”t¿¡_ ð ‹Ã !Ä娘1ƒ1·Ý†�eš(M§é¢iDGŽFÓ5ô€žz \óïÀnJÓ{ W JW^3 uËÐ�¦é@C&RJL§ë*|ÍWxÌDâE¥TìÙŠ�"¤dü‡>D°¸˜“ë׃ 4¥^^ KACս߰Ƙð¢â"Œ¸újª¯¿Þž3MâùE4M›…U\J  'Ð;52åo· �'×]Ãu05]C3%¦ÓöÛ°Òš0Û_‘>2˜•Ã9Yp-åïl"·¥€Q×_O°°�#«W\¡”Z¿n¼ õG�û…+ RÂ*Wø£.dØìÙ(Ëö[¢%å4͘‡ÌË# ;ÂèèžÖë�,€w¼Ÿ Òq`¥!±4 é´ý®éO¾Ûu5E!�3®¡dçf O`è•W¢åäpèùç±,k‚T꥗`Þ pª¯õì3V@±f ’Æ~à ™6ÍsöÂ#h™1-7-`›}ÝOÇ djÔÔ It l�KbwèÚ¾Ð: ßß]m½ä*L=Hñá½ ™:)%ž{ Æ›J½ð'Xp´wS…³¢OoØñöŸw¾Q 0ôª«¼ÿwŒCûes�ÁzP·Û|Oó�s: tm@�;Ã0ØôâFÂ*‚ž Ú¡fÜh.¾ìâ÷-”¥0 3ab&fÂÀpÎfÂÄH ç{çÈÛ¿›²=Û¼´ÆíÛ9¼zµ;XµÎ„›–@¬·uÒº¿$3–‚¼þGq«†ÏžÍðÙ³qÆOi3™ŽKg¡ç è›� Ž 8g9Á@—}÷þ€išlÛ¶�¨Š!ö£ëùB±áp˜¡C‡ؽÁñ4-Ùeõ¦¬Ób|G¼¤œ„ ·¡,‹üaÃ@ÇÑ£ ÄX—Ü ¿_ÞËhå^à_à{>#„`È”)T/Xà ?T=žŽsÐ]Ẃ¡»$pIè4:78zô( ™èp8Lqq1yyy^wÓ?:ÙYøÉ)ìDÉR'÷T=(Eau5V,FøÄ €É¹�óx©7uéÕ[_·ÿ)„ÅcÇ2fñb»-QŠè°jÚ¯šŸ~@O#�î#�N ´þü�ˆÅº¶–º®S^^>(uÂGH’œ™«ätµ3u©ÄK+ %Øt ”¢¨¦†hS±3gæ} 6ÿöõ´=~ó«aðB‹Š¨qºzÊ4‰–Urfö´œ€-hWø]’``M~:‰³O°u÷ÿþ†³€~ki7‡ögÍ÷þ:.�E¨z¼í`[5×_OnY™èðä 0º§uèÖÙ½†ß"D¹”’Ñ7Ü€îŒð% Kh½zzn®íí»O!�¯  ÊDä{ÞûJ~†÷×qå5D+F€i*�Y¸Ð™¢L‡§ß‚@�îÝ“‹?ßp§‚ªÙ³);ÖÖ~MçÌ‚[�%%>&|Úî?�|°îÐÑÑASS---„Ãa”Räääô¤º�P__�atÌYPP@eÑÆ]!‹±nÝ:V¬XÁk¯½Æþýû)((`È�!ÝþVºXŽàytiR Atø(rîCĢ蹹èÁ íG�T‡!ðdb ³&ÀJ˜/áçBQTSÃÈ9s<§¯uÖ¬Qc}æLÏ@ûûlœ½¦¦&Z[[1M¥¦i�F‰Çãtûû®0�ˆD"<þøãìÝ»—H$B"‘ ¥¥…;v�ŸŸOUUU·e¸“Z] ßù�¥iÄÊ*ÉÛ¿,‹¼ÊJbmm®?0÷£°îI{]c÷÷Ìæ¢u Kø1B=/�𫝶'vL“ð¸‹ILœê ò$Gù|ý~w áG":::ºü_{{ŸÆ= kÖ¬¡±±±Ëÿµµe7‡#5-Õì;ïSóÞ§ýkÄHÚ§_åÉ¡jÖ,8ÑV?˶)ÈŠqø’°]2âŠ+�ºŽ2MÅe„gÏONì¸#}¾¡^—Z ;cvÖéu…––,k@¦Æ{�ãÇ�óöÛowùÓ4Ù»woÖå¹ïS÷ ^÷)–ÐÐu�èô™DªÆ L©iŒœ9ÓíENm„/ds¯n °F øW!C‡R2z´=³§ mþÍȼ\o7•zŠ%ȦyöU8–eÑÒÒ’uy ¥«V­òB̺BwÄN‡;4ž®Pšo(]êtü¯E˜� Ê4)ª®¦¨ªÊp‚‡ÖB·íN6à?¢PHÉÈ™3=“š:U9Ô¼®û†r“¯÷@ó]³Xã×ÞÞ>è]¶®ðÎ;ïpôh÷¡{½ñ-: _w‡Í�÷¬ëÈÂBB3¯ñä2â²Ëš†¢È€vw�³`5,𷨘4‰`a!ʲ0ó ˆ]yµoJ×7µ›f z:¾^XX˜Õoš››{Tî@ ‘HðÒKÝÀ•––2qâÄ^ÝÃ/|Û¿òÍ£8s'ñ©—¯�²,TNžì6·¯†ëÎVþY  àA„ �›KÅĉË:®YˆÌËK™¹óOíºŸ¥ìùŸ®ëu{]4í±Yío¬_¿>+çîúë¯GïåRu;ÆÀm÷»˜:è„Üd7C¦IÅ„ òóÝ¡ÄÏV~—Z×J¸ZåãÇ#„@™&±ªÑ˜¦$ƒ6:UÆ5O½Û/)±×t‡3gÎtÛöÚÚÚxã�7º½nÔ¨QL�:µO÷’šì4cšþîÕ°D¦^îM×�ïZ�kWÁ5]–ÝÕ?ü+B ƒ”ÔÔØŽŸižSZÄN†£‡í~§JIIiii·×†qκ…«W¯îÖB°xñâ~™fî*fÂ8�»S³{h¥55蹹éªÜŒX W »ýgȘ1¶)·,âã'ÁÐá�nœÎÈþxà¬BwÀh0qôèQvíÚÕíu3fÌ`äÈ‘ývß³*�®! ‰M¿, WvŽX¼ff*3#¤£ýR×)5ÊÑ~“èìk»¾ß*ô²Bìn¡ÛíëÁ`� ôë½¥&SÞ·væþ­Kb³ÿ–kF�B ATV VÚiÕnÀ�Q£lí7Mâc& ªG§6êÉ›{ñ{ýˆœœœ¬†~;::Î:Í۟غu+Ç�wŸìÚk¯¥°°°ßïŸbq� YMs YXDì’ËíÉ"`Huµkþf%ŒI/¯|ܵáÅÎBešÄæ]ç…f{•ðÝØ�Ýïo”••eÕ¤œ±ÇÁ±XŒW^y¥ÛëÊÊʘ5kÖ€ÔAHá¼oi ßot‰Ô%ñ9óQØN{ÉÈ‘nŒ�pò-¥ >�_ZŠ´G˜ê°ÆŒGóÝ$ÝôH}`‚:4M£¸¸¸Ûëb±¡Ph@êàâÕW_íržÂ�Å‹÷»5ôC: f¼& M2„ØäiÞqa2Èå*mŠ)Ej+aŽ€I(®¬ËË"qÙUiË´ý7•^Ôë@¡¤¤$«~ô@v ›››Ù´iS·×�;¶×ƒ>ÙÂ�-ÔÒäáš&I̸ʓ_‰G(`¸Ê_–Lûãc8ëë ÊÊló�À¼ôŠŒÂO:!Ò%„Ȫ[hš&­­­R‡U«VuÛÛ�R²xñâ>ßË0 vîÜÉ®]»ºœ¾–Þ²¹ K椆5~VAÊ4É+.F Ü.á])å¸V@vF �vW™&ñ S ¨(e1¦¦ÉTgpµßEAAAV!mmmg�óï 8À¾}݇Û]yå•}Š,N$üð‡?¤ººšK.¹„©S§RSSÃO<ÑéZ7¦0ã¢YM":ñKgzáceeÀ‚;Ÿ±ó$>`¾€!EeeÞ°¯qù¬NkòÓoÍ;ï¼ÓéûΉ³Ü…§Î‚ÓÉSí‘A¥Ès”GÁõÞïÖÀH×ûÏs´_™&æE“|Y¸ÜÂý©Y}¾¦i”8æìlˆÇãYuÙΆ—_~™H$Òíu‹-Êú]˜¦É/~ñ &NœÈøÃÅ5drBý²HMže“Àšp±'Ïü‚·7pÕ:(„¤˜ç˜“››$Àä©N¡Âc–›‹Ç½ao�ÇyôÑGY´hsæÌáÞ{ïÍÊÑ(**"è>ä­/ác§OŸfëÖ­Ý^7yòdÆ�ŸU™¯¾ú*3gÎäî»ïΪYñ£¤¤„K.¹¤Ó÷nª<¿lü)sÔ„‹QÂÎÏ�ã¤É1¸(¸ÚͤtâüU~!bDµ/‰�ïìj/­GGóçÏçóŸÿ|¸Óÿ�@VÝÂH$’µ6lØ�Uý.\˜q`jóæÍÌ›7�»îº‹úúú¬î™ŽéÓ§óòË/óì³Ï2vìØn¯wKxJêÈÈU^F�óäpæ(”¬€)a²[�®i¶hYˆš1©Éýìêƒù/((èñhÙòå˹øâ‹yà�:Møôg·0�òúë¯w{݈#˜>}zÊw'Nœàþá˜={vV¡b™PQQÁc�=ÆÖ­[{K�ªœ©2£¸ÄÖ}“T:L‘ƹˑu!l°°UPØ9ãfJúõÞãÓŸþt�‰Døö·¿ÍäÉ“yê©§¼IŸlÃljD·N]mmmVqþ0¯X,Æ#�<¤I“X¶lY¯z�@€{ï½—wß}—{î¹§W3‰™d…ï³Q¦iËØþÀX©œ ÷‡Ê²°*‡ùòÕ¤LŸ ðàƒ²hÑ¢^ýöرcÜu×]Ì›7�Í›7Ùw Ï&œ¶¶¶ŒÍL:¦OŸNMM üã™2e _ÿú×{›¸hÑ"Þ~ûm~ô£Q––4»'èœ?™([�*¯´-;)ò#…³¦\s"”ib•Wú $¥PïÜäææ²bÅ {ì±^'dxã�7˜={6Ÿüä'9qâDVó]A)E]]]·×®»î:vìØÁ 7ÜÀ?øÁ¬z ™0qâDžþyV­ZÅÅ_Ü«2üHj|:ì¿­Š¡ÞøŽ–l2ÇH @:æÓ„Ò2o™²· á}…”’{ºº:¾úÕ¯fš˲øõ¯Í„ xä‘Gz„ÑÐÐ�•OŸ>�|�Ë/¿<«žB&òÐCQ[[Ë-·ÜÒ«22!}s Djs­Ê+=ùjIùUxÐÀcˆ**ñizzÎ}ѯyûJKKyä‘Gرc7ß|s¯Ê…B<üðÃÌ�;—?üá=ú­išÝj±eYìܹ“O}êSüøÇ?îÕt³”’�}ìcÔÕÕ±téÒ>ç:È„T9á)° ‹<ùÊ4 8#B®(*ö„ì²É)Ïgú'Nä/ù /¾ø"S¦LéUG�åþûïçÃþ0{öìÉê7GŽ!ï:Wà�øùÏÎòåË{<|ë⪫®âõ×_ç‰'ž`ذa½*#;8rr-€o¤âÒ¤PÊýÏ xÃiî`yy)š.ÜR…èOåψn¸�íÛ·ó£ý(«IŸLxã�7X²d ÷ß?MMM]^�F9v,ó~MÍÍÍ,_¾œ'žx"e~¾'¨ªªbÙ²elܸ‘Ù³g÷ªŒÁßd;{›dåç'å›D¾.ìH „“è MwÊ^!¡Ævj_݇ ó† gCNaÓo›A° {“çv‹îºë.¾ùÍoòÓŸþ´Ç‹?,Ëâøk׮峟ý,ŸùÌg:]³ÿþN=ƒx<Ά X¿~}¯#‹òóóùüç?Ï7¾ñ�^…†[†ÅŽç·Óqº‡= £f�¡xd‰Oy��@R¾NZ@ŽX†B+‚"×aøî£®™O07H 7ˆ&%�-øZŽõnŽ}ò©|nÍ{õ[€mÛ¶qß}÷e57߯�Ç=÷ÜÃÌ™ö™–––”¤J)jkkyñÅû4�|Ë-·ð“Ÿü„1cÆôºŒgïû-¯ü狽úmNA_XÿUòÊó‰G$¢qâ±8‰C‡àNÛÇjWŠ{'Óë(Ǩ šÖÑÐÖkáÜØ·­sg̘Á«¯¾ÊŸÿü笆F3áÀ�|ùË_æK_ú‡NéöÕ××óøã�óÇ?þ±×¿üòËyíµ×xþùçû$|€C}x_±PŒ“»Otú^‘tòIFN+‰»Ý¹ö쟦Ašé+©.ã²Û3.-ëR“ÜøõÞy÷éøÀ>ÀÎ�;Yºt)ùùù½*cË–-|æ3Ÿá¹çž£¡¡�ßÿþ÷üò—¿ìÒèÇçñÇgóæÍ\sM—‹p{„뾸ˆ`~ï6Ã3{<㮾Èù+"/‰¤|“N|L¬†3RˆÒ))qúÑÖƒß%°p1�Ü ÁÜÁ»)À)!�“}å¹yý¿³w}}=_ÿú×yòÉ'ÏÉñ@ À=÷Ü÷¾õ­¬®ôfÜ êÙr7Ã0ÑstâÑ8‰XœxÔ>щݻÿûNZ-‹�ib)uFÂ@©%¸)ÑΚÉÍ�`~À!ÅànÕž UUU<ñÄÜ}÷ÝÜ{ï½lÙ²eÐî}Ûm·ñý.º¨û‹{ -¨“ìYR‰D,A"ìíî’[â*ˆF=ùúz! 4+ì-©\!ÚÛ’›(‚—Ð%¹JÊ� îœÀ²eË>|ø€ÞkÒ¤I¼ð <÷Üs*ü¾ )xwdûPí­ž|-¿G€mÆÿñÿ‘½{÷òÙÏ~¶Ëð±`0ȃ>È;ï¼Ãí·ß>ȵì;2îsì}Ùp4Í–1¸¾ÂA)ÀËvd†m„@=Ü©0Ë·�ò{ eeeüìg?cíÚµL›6Í›ÑÔu� °{÷n~øá~w  þý�;‘ FžiDh ß Ÿ€�ú�ph ´ (N˜¦ÝNâè!Ô¤É ¶°œïs·�þÂüùó©­­¥¾¾ž#GŽ0eÊ”^Ï:žOpw5W>+íÊM=èEq'œ¡Ñ‚eàIDAT~-7Â1)ì&a‡¢±˜ç)Êû2æßEû½Œªª*æÌ™ó¾¾½�½r3© ®Å–ûözr�Åã®°C8s›Án,¥š†¾owr‡l·0¯pë=Ù ¼_á—“g |Š«íÛm'�Éà—×Á °Áucñ8BÓКP� NÛo¡”½Mº»]º2ßÛàý„¤ðÙø×0м‹Ð4¢®ð•BÂ+�\è­†ˆD"vO@ÓÐÞÝ�e:™ÉX¾óœ[ØÓøŽLLË‘‘å‘@Ü�HÄAÓü«£â¬‡7Âq{jo÷Ú -¥°Á[ްoxç–iùäãÈÊLžå»;=y†ÚÛÝ©�7AR³„­»�0œ¹ã@Ý,Óô1ÌgÌNñepà*¢åSJ˧¬�º=MÃ0 ÉUO/»ü)bVº~@G«=q u´!ìK-8ýf¬À9ƒrÑ3ÿ¦O9M…j9ƒ~¨ÎÖ~7O‚-ãÎh�W,hhkjòÌFpËÆ¤™É ü 8wðË “rZ�­�t1mΊg§ËÁ[½êàˆ xF±h”X$‚Ð4rvnCÅb©73M,ÓÂt>_èž({QKg$¿Ëݾ¡iÄ£Q¢á°ÛÿÿíLð2f¤g ý�Û ´5ÚC‡ÒH í®unf$Á`çë¿€táûÒ>ı#è�§šF«»Ÿ¡RX𤿜,„� ö* ¥¡儉弽Å+ØÌ` ,Ó:杻ßoH¾ÓQÂTy·oMCIIëéÓ8Q_ïÞä ú¹È”-ü)3‘ ÔÒbû÷Âé簾ab–s˜Þqƒƒä;·e`¦s8Ê��»kBÓ·¶b8Þ¿„NéF;À´›  éða»�’¼7Ö¥0ÌeŸ÷�qaxxP H{÷fŠu6M“àæ h±(BÓhrs(e%åö£n‚C þ¬€PK a§K˜·ûmÔ™æ�O±æ+0°ß³ÕÙ»dˆÅÈß²¡iDÚÛéhnv�¿çn†N02FGøŽë žÞ¿ß¶@þ¦õ�z)„pØxe©4L¶ÿîß9Û7£GÃMãô~g…‘üño™ÊÌH€á-kÐ~ú4Ç äïÜŠjmI©€Ûþ˜†‰™¸`�…o¦´ÿ*nP¸õ {â§£ƒ¶S§Ü¡ß‹ ㉳¥×ò¬@þ} i Ó_;W$ýHôo¾þ p…oxJfúÏÓþ7Ñ i4¼û®ýC{æïß»*·K,‚×üU­'NnnFh…»¶£Õ=«ð ãBSПpM¿‘pH�fqMÃDµ·Q´åuÛóoi¡õøqWû×-tfþ2ᬠö<ìZ�c[·: H%Åë_ÄLi‚÷UΩ؅±�þ�‘¦ù�Þ½aR´þ%4#RR¿u«ÄkÁ7ÏVöY p#¬Uð¬"­­4ÖÙ 9gN“»ëm¯R3ÉÏFÂþûú÷=Ú$0œ÷ëZZ›ú±ÃÞgwûöï'|挫ý¿»É üè ݦØ4á>”ê8^[‹áÄ –nYŽÖ»•t…ïT0a\ðúךº$0ýï×õ¢1J7¬EH‰�sÜIz!”jס۬Ý` ¾¥”ÂJ$¨ë-{ªØ4(]¿#î~Â/|3…±Ð3X¦åS"3õ³Û$$L ¶l Øa÷ÒŽmÝŠ·×sXðÐõÐm²â¬2>à jÐtð gŽM#ïä1òwmw*”Yø†Sñ Naö°,ËyoIÁ{M�¯IÙOÉ»µ i´Ö×ÓTWçšþwÊáÑlî•€!à ®WwðÕW‰9¡ceµo¢�¨·ŸÙ7R*n`Ä/� X–…ÏðþüÂOÐÖFù›¯ ¤$‰pÐM«¯”%áÿ”ïÙ�uº¯ßÀá�B¾€yX¡†*.¾)%¹§êi¯™€Òu/=)^šR§7×`7›x?#Eø ÌNJeÅ *^[I0Ô@ÝÊ•DZZ\Óÿï‹à×ÙÞ³G¹U? ¯˜p=BÔ$B!,àtìX4Ó@ok!T5Ö¼—²’™EÝÔe}Øoàý Ë´’Z߉©M@Éö�?Œ�’£o¼AÓ¾}®éÿk|rY–ïöˆËÀú¬‘öãù¡“'):”üŠ ‚ávd$LxXu2e)t>ÎR${ƒƒsCË´XþOOòì??�²cfg·éÓ@Ö§“À» AÁ¾] Ùû6BJZæÐºun—f ‹®‡¥sëqvå§ í.Ø-àÃBÑrð ¥55ä””�ÛfoÞ)wÒ¡v!|?sãI{×îâ÷÷þáæ{_ÜÅ5ÿçº^gåê+ìq_;ä®cèŽM)ˆ45±ç¹çÜ´o–êj¼ÿlèÕÛ_±à{J)ÌD‚=Ï=G¤¥4�²ý;)Ø·+ã$âÎçx‚D<�7HăGjJæ´L‹HKxPïö‚÷ùí³ý^ŒDÂ>{ï.�‘0œ¨gè;›A“ÄÚÛÙýûßcÆbn»ÿÈb'¬¿§èµú-‚¯¿Q@"a÷3Ï…šFE]-¹Çe~¾‘|ø˜}þÿ©‡`™VÊó§¿OðŽðõÆF¼½)ÀˆÅس|9ñPÈ óúíFx ·ué5¨!ðiK©Õ ˆµµ±çw¿ÃŒÇ‘R2|×fò½ëÓö4¦û,€O�ˆÙû~Ÿ?0& ŸL|'O�`ä¶õh(LÃ`÷ÓOv‚<”R/[ðÉ¥}ÈÙÒ§x&$bp»Rj‹B§O³ë·¿ÅŒÅlÔí ¸n§óp~áÛ‚OÄ\á'ÿNÄïË‘CË´ìç‹'0böá!–Nûsîñ#Œ|g#: +gÏÓOÓqò¤+ü·‚pÛèY6É4ôÙ» Úƒ°X)µWíõõ¼ý«_s‚H*�ÕQ¾çmŒXÉêè`äÎÍ i°çZÚ�çíÿú/"MMžÙ7a^¦àÎÞ¢_;á‹ ¸V)µÊíìøÕ¯hغՎ#HĽç-Šë&…ŸþRº CÜ÷ù| 6QÊŽØIÄvbæ´úúÉ`øŸ/lj`Ì®7) ÛMçé·ß¦ö¿ æxûJ©—M¸~‰“س¿Ð³lÄY`„ž�ÛJ”ZÜi%ìùÝïh9p€ úZNÃ�ï'7ÜΩѓ±r‚ÉåÌn´±n!ݵš†4L¤®ai&R“ö!í³pϰ�ÑÙàæOÊ´XÖ]­c9!ÜÞÙÌéÎï[ ƒòúýT4l rà…8æLî(;¢÷Y>ÚW‡/ú�`/4] � ‡•R_AqrófÚfê'?IAUeíMîÙLÃð±´W O®%��4#cþ3)ðô3±•§ŽPqæ¤}CMãäÆ�ìuÆQá7ŸX +JF0€p±^Z W¢Ôo�yV"Áž§žâÔ¦ML¼óN «ª(Œ…h e#i®¨Â �štˆà³šDºÍ€”× ¤X{{û”ín})"視ˆÛ{ëØ/>I†ŒY7½DLþsæuú®ö»‚W†Aió)†5C³ Ð$á†Þ}úišvíJÞþªÃ‡³‰èé+œ‹àè:˜‡o Ô!ÏìÛǦï|‡Q×]Ǹ[oEÏËcDëI*;i,®¤yȇ¶0ýÚ/%RŽð]"¤înÞyÃkp7ÁôvÍs`Z&ñho£Ò/[é™R}Â73�Àk lá+ਵ‰agŽ““ˆÙ$4Mެ^ÍÁ+° Ã3ù ~R_Ê6 £¯ôÈŒUp�€Ç\â¶Ó¹eeL¸óN†]q…8b Isa9�å#°‚9Ú}× ôµûRÚinÓ·O÷ï� „šCóï³)$ðYÿÖ©iV Úåô»§¨º´p¶Rñ SÊu:V¿ðUšˆ„)mo¢¼½ Ý2œ²M;vpðϦõ � ÝÑú�‚ï·Â¿Ýánà5ˆ8§±Y+ Zƒ¸Ý¿+i~e%£.¤êÚk‘z²•Šr8SPFKq9F0/ƒÈ´ö?Eû³ØöÖsþÜ 32dáöçáóòñ%·7SÚÑLa,”RÞé-[8ðÜstœ°·ss�‚ßéðÅÁhë»Âyœ·®p­Ÿyå区á†Ï™C°¨È÷ AGNíyE„ò‹‰æ œ1�Lí¿»}ª¯è”árÁÕ|œ“·”LM€-t“ÜX„üpE‘vŠ¢í_ï"ÖÚÊ©7ßäØË/vöVÉ›½bÂÃÝ-Ú œp±æ)øš€›I]•ºÎÐ3>gC¦NM± `79ùtäÊ+"ÌÅrTSº€¤žSà|P ,“œX„¼HˆÂh…Ñvt+uÖÒŒÇ9½m'7l i×./�¢Oã_\äKÓv®q^ÀŘ©à_ÜæÚl·¢�¼<*gÌ âÒK2e zHÆô ±@.q=H\’ИZSj˜ÎÞÈîY³ìÝ4¥²ÐŒºe¢'âÍ8ÁDŒ#NŽKÑpF$BóîÝ4nÛFÃÖ­Ñ(à }SÊRð'à;½ Ùhœ—p±ªuø�‚O ¸4}÷r!%¥ãÇS:i%]Dé¸qèZ'#¡µ®Ž–º:Zöî¥eÿþ”Œ©>mß Ïÿâ_mo~b*5·œ_þÅ›ï<¨ïý×ì·{£ý¶ñ{‹ç{ýùõ†ç¥ÀßpŸ–þ}¾ózúë ?çpãï¯?õ{Ç×ï@ß? :³çÁú}‘¼îïëî[ÉÓö}�[-¿/uøûwþ,¹þõßùYV¹ôüùý…X°ÒJœ(x¿ƒ ¯ý®wáþ×ù¯ðÛ…ÈçÞÐxB{ì�Ÿ•`�¿]ÞÏß÷ýÝ@3òÏ£çŸÖÿõèÆ÷ý{=üÖù³þø†K6¾™ø·‡_+ò£Eïþår~Œ|V=gß«ë1cÑüE”Ûý†Lìk™ŸÂ‰ÇÅ~?õíïÄåë�ïàgºæ<^9�‹n¹îŽÛöwºÉ£ß¾ð×û都VCñÍOƒ·ôãŽ/xl…Š/§ß®‹ÁÿZ‹³ó6;ßt•3/ÇG½ã`ޝüÛŸç?½ù?ùyΙ2‘{ë/[±.¯¸fòœ~ó)âÎç·dþùùÜÿþ? ÕÈÇdæÊöwÜCŒäþŠ­`~|.ñ÷¦�{Êú€‰8wb1.à�7»�\voñ¾8‡+ê¬Ü“¸”üb‘>†�ýS|õ:7ß)Î>ë“Ï^/ƒM8"…LnUåΊ1?%Vb¨§�bJ)§’ê“Zê9ä˜Sιd�\/¡Ä’J.¥ÔÒJ¯¡Æšj®¥ÖÚjo¾00µÜJ«­µÞýÓ9QçX�Ïw^~„Gy”QG}>3Î4ó,³Î6ûò+,`båUV]mõíž Rì¸ÓλìºÛî‡X;áÄ“N>åÔÓNÿåµÏ«ÿòó?ðšû¼æÍSú\ùå5^}Jù9„œ$ù �ùèðx‘h/Ÿ½ÕÅèå9ùìmž¤HžE&ùæYNÃ…q;ŸŽû廿<÷ßòÛ“êËoþ¿òÜ#×ýÿð܃ëþÕoðÚR�›æ±›…²éÈ>Þßµ?¾vµþïþ®yøp�¥Î�=Ì+i�žYx8#mÎóì<ר{µ¹óh¹T®îÔ’ÂÚ“…:®˜KÛ§ùÅruˆB‹kßg”ÓÚ‹Kxr|/pœ²Xçb@EάK;ª¬úÍÅ¥Ý1ìáéÜË^s!Ìœûù„s†ï›7Ijn[xlk�á yöH¬i¤÷1NãCõ¤À?Á§yüîÏIéT·CË‹óåºÖ {Ý«í»æÅÁÆ}}s%ïpvª»œ“3ë\u³®Òž³|ux£ŽC€Í#ç“Fh#¯^ø^w;‘+\�u¶ç&³•¯–âä­tiÁ™5fã{öAõOC¯`Kb·ê‰=Lg¥0ëf+žíà+ó<•”0£â¬³£àäÄÊ ÔÞ$nõª½É_ÞÜC׬ ®¨užpiz\Oï¥aüÝËÊX ß½\{Çnìx¿�\À5øYpÖ©„Q‚l›Ž6Öm{±&0yåe:G‚OÜ ÇžœÌ„}'PÖ)«pU‹ Vœ:ÇiÀ#2ŒØ` Zjé$_X'¿„Ù)ccz‹n,êê,ƒ,dZ)ݼ�é{Ü‹‘*/ŸL\Q´Ý)M‘/ï(Lqö2Ûn¹cñ:þPî²L…SîÄÄãÒl~׳"ÐÜþ®�ZY-ä²O({Ï“Äi®ŸÀ—Åp¶ŸÇý< ° Ëq@�Û`¡ëK‘ý–IºÄ”¹øeLŽS$·ßªGâ ûûüó…ï/±(×ÉCÿÌ9zsµO»Ï�ß>¶gE›%—QZ?KàV²ìL�Ù9í9ñÏVR¬Ì’vm»ÈzÙ€·-§×Ã|HÒX�sÄ̰ïT²…s/—Ï¹ÓøMÎ[‡Ê¹ÃÊ\$BÀöõ<$>l©ƒ½|ë­{ø"§¤32«d)¸ZAI ïkâIXÚÅ@\uîlÏH¤ypu+jt9(×Ç’6–'Õ¶!;—¶'&œAo‹�OÄ“Ø*Ñ…v88‘ ¾ÅÓ…`X!“z«ðV$0¤uOB.a>ýsÁå_Ÿ0õ^ú&å$åj VŒVAŒæ9îÍÔA¨°¢n×NF,LŠˆrÖA`í¥ ä´+�‘—<´hrëpÅ…f§ °åš®Kˆ¶ å4#æÈB*°©ƒ%#:Gà³õñæ_k xº«<ÙŽ9/ÒÐèÔl�cžHqðÄMïê?_§ÆcºvM㫜ìé?o°Pa­ßŽ ÍSg‹»ˆ`ZÔõ„BÄÑ¢B+vª ˜ñà6Z'š@¸Bu¦òQeÎÅ—°*‘ } &¨AMÅJAØ¢]^x€ÍÁÙN1ÅÞ©ràá tN+Ãð �—ÚAI81Û-{ ”;OÈÀ£Ð‘r¡œ{R4Î>Z�ʺ“ë*@Àq;ò „¡Þ¬ôåcóZ¡Ju_~¢ c8.'ŽS9—*P*gƒ/cÈ=XaŸ1)»4é!edØALÆÉ”�º\•l?ænåJh OE^M±N–›AJЋ�ÎKüfCÙZc}dd½ÔÅn�ß¿ý]ªg„¥tYNU¨õXÌ‘cŒì�¥…ŠâLó øPü¸MåWõ�œ”S—…„ˆ/e´Ü(ÔÏù ƒ~pg¯8ñ_�R�HÇÛö)‚A�Çó¬ìW<ÁçôeÁb»<¡šiw!ÿ½¨àÀ;#ˆ“´Ì �KÄÁõ¢Âž>ûo'tXõˆ˜gÝààžØ«,ê´83AÆZv/zÄž kñŽÒìbÑC›’új4ĤHÆêqI9pDûPØ �1E¤XA¯|Ê/·¯ZÓA&ø�8"è–QMØãå«x<_8‚-c|âá{Ù^¬¯Ïê]Êvi­ô”0Æï8é7>ê8%geÙ^VT)—Ž.‘äºB"b‰K´(¼l<2 ‚ƒ¸‡ÆC™8 e5%!I�”-h΀•CrïÞ�øÉNûæ$à÷æ‡%ú¿4P,º=>…ký¼ÙÕh“¬L¿eì¨m%°qÏçXí- ¾’ô JrøPŠ„Êo‚çlÕj–~™0®â}ør‡ë§þŽ?|ä_æ|C‚õ@X¥Å©â6z/O‚•5 ˜Y Ù׸x4ü†;Uðabù�N­‘VÑŠ ÂîæãXkxouhLüÛ—’Q"Á%ë¡tÔöx(�SÕ¯ �棘u˜X ²8„^¥ñÀÁ½Œz–b•�r‰ÕŒ¥È~KSRs´——£˜*DIZ’~·îîÛC@F…8­-ž9t¨Î’ž]SDõ$ð^¿¢Cî]t­áâ¾J®èÞH¼ÁtTiˤŽBR!6SíÃe±\ÛKííèà¨*ÞZð’C¸]Å5wB)‚`ÔŠf<­ðúCôz²Œøs‰úK¶�ç0À±ºDïM�Å�ˆíÄ9Y]ëŠè7ò¾®ÄýI9BfJI©¨N{òê#�ժĮ„i±‚‚IˆÀ9’´”Õ&)°æ×À+ŒÉzy¬Å×M� §â\ÒÂ8�„w§Ö8ñ%�€Ejþƒëöu¼k‰AÀd‰æ-á¥ÚÃU‹aeEí¥k/<)-ðhª¿H"‡\NRƒš§#2ÇiK…¤·AFlH6L¢ªbÃDHZ•¹ "!½ °£8µÇ¢|Įֈ!4e”aŠè#Èy�ÚP42ÜËûPÞ®}ƒO$Ó’l–ÚѹŸ Vãí`ïâÙ8޵"³¥Áowëõ�ÜY‘*ƒFq Ök«p¢Š‚ÞJŸJâÞƒPs‡ê¦Òž˜Ì6ŒÚ1À�ÔmøCñ»R8‹°fA‚2:¹ÕSi—WaxG|À‚üÊïÇÒgH&¨c¤:à$P¹¤‚Ž(KÉyðChµ¦TAüG^Òä€Ùk5ÙIÝžC@º×ßTóÃ÷©H3r«ó Šf»)ÇJºs;ÖU•ÃDµ�æ=­Úà—Ä\ê‘Ì‚œºYÝW¯~þòùMÆa•aËã{]8½ƒnXq0K©‹í¢@5Ù‚˜\Ý\Ø!×Ô" b�€Ò¾V‚�ÜB#Fv¦ZrÅ(=YJþþ"ù¢�ž›„•Ã?T€D˜TGìDH>L“.¬/ZàãPbgHr‹Ÿ�ýÅXL±êüÔs95Ô†€ÒÁ:ì,S™,%Ex81þÃ;Ös @^þ(&3ldÕ>¥ "öEà‘_ �®REra}½#ºÖvWç�Œ'tÆ£d§”1舧d» Ñ©sÙö%øYm C÷!N²_Šù6e©Z6Ò@�pëal‹ú@2ÏzEæXÁ&º™^DÖ ÄËâ:J8‹E·<,û¥¾§Þh¼7»5‰Jå7yG ¬Q}ÛùC넽HETæ³�}ø¥˜½f͹$0}੩ß²ƒÈ"ªDÇLé¯ÜvŠÖ߆á­Ô§ î9W;ÚÜåŒçžG%l©gƉ ùr@¥Â`ãRk1ø‚+(&éÕLÔ{¶ 7t@ÉRü€Ø!„3òGÉCÝqu]gÉòª6¤]JªuåLH‹¼ㆦ©•¦$°­”q·R†‹ÐÛCIF§Ø¨0êƒ\y”{¥jzªê%çùIdw  TaŸ|HTŸ�7<€5�¨Æoq>Ô¼¸&‰àt#'¡Æ½Ê‡¤†ÉÑ‘ÂR/7’®'5 S³œ½ä�¤=p¢OM #Gøºw¨Q-ˆàˆ ˜à ø'$‚€2›’TYÉY¥Æ©#|°~�±fŠx¨ë1 ì~ôsS9 ø(G"ǯr`Y]šj©Ôo�ù˜N¶æxmþVø‹ò^N¹a2Þ'8ùÓ>ŒÓÅTų̂°��Ü­©Vú2Š´nSV¯Ãð‘§dk£fz [ûD})¯¶m¹U$›¿Í©YïV#Œ ›ú \Ó˜þ‘½¨ÏK»ƒ‚“%pn—Ù]jBýàÀ@*pïL‘�˜i+ÉX‘ÒýÜ&Æ*sÖW‡Z0ÚËùcõ\ê«NåE8ß¡h*ì[ÝhÐsàmÐqC4uè"mâ¾ÄË� €îù@—Lum"U“½vfîÍ%2E^|È2ð ûPª%ò9ã’~ÉNŠâUÓ«¥|‹m. ÔZ2–�²¯ÏŒè;Ñ bß«ÎÂU‚öB@o�°H)@’ýNIôåÝ„Öå:¦¶Ñ9�´uR»öÝ#ïp¸6Œ¦Ú‘”©dõU5,’�FÕm§(B?•¨”ë�è‹JnÐnB«}©°ŒüƒÿXªxBª Ÿ(=æQ…ôBõ¤mªîöMf[RSÛ§8ð¯ ÍøõÞQ�ÿîulû–ñ�GˆŽ-nEqÿ,4{FH}ÀbT¾…5#ëó×âçÈþ)$8ÐoH‰”©H " î¨_ …/ÃŬRÉN¾T…ÖxµÑÔ‹:¥YmµûvEÀI…PsŒ3£Ú±\W¾ð�TþÉt¦¿ê?um€óÅZ‡ZÅ»ªÐœÚ÷ëŠùjÙŒ*âç�íÊðÌk³1�zšj;Ý,û2¥(�l×û‡üQùn⃘�±ÁÞ/Æ´ó a´ßŒÒ,*f”5e‚qB†ªˆj…c³¦ñWêâ~r·ÜÔý²~�_™Û~2÷$µeÑÛ;Hq¨Z$ tÑ Éq0µÁw¡ä]Í-Q�Úž¦ �š%É6{ׇ(})“ÕÅÀº€‡£»ˆ7àJªÇÉz•ð—fà­nÑ+�·Žf¾M�Þ�¥‡cí$qHñ!D }ˆ<êÞÅå÷H ƒR€ßøßùv®EõYÊ´.¨¿]Pâú(|„­Y¹ˆ­ªh‚TYæñí5Üô7~õh1,zJN>B~RQ,o›8Þ£ßz’Z%Ô›ÚD&©§Juѱ8²¬fœ—šù(H00Ú3W¤˜¨N=vö%}‹ã�ê\0(Ë`s‰Á¤;¢áÍ k?™ãÖ- êI2Ò©@A²Že/~FJªiíºqÊÂ›Š‹JX6ºàÃý¿ÀGR3˜â½µÎº�tÊQ’2^%ø²}ÒìC–}åN--v¢¤{Vsom°Sc¨Zãô|”YuÀºm-! cä¤Uy5i NÃt¡«M«©bânnú6Ÿ­.„mLK~ö)Èß®Þyž±ªñ[ÔB Úl¸·¾ÔYúmÕ§¾ ½ ’³“¤…ÐH�T�‹àÆ$f©ªl[å�ÌR»¶¤MÀó¤ãà<ØñÛvÒÈÄ­ÑÊa5χô¹¯aØÃܾ±‘âÕ¬¿%¡&kÔJ£ ¤ÔˋՑê»nŸû ê[«ãt�ågiÒ„,p7Y|½¡úZUIáñšÑ^^¦xæ…–;+#5©[P&¾ ³x•mS­ œDpm‰­.m5`[‹þdáöWµ¼ÕœéÖD„—Ū©š£ êð|;48�² ½½3•l¹ýàÞ£í�)nYõÚ‹ šÆ™&ye5õÂ"Ù_&ëôê+ÚÜ‹0ö±é»M÷m£|%v~½Ëµ¿Am"¤Ÿ>Ê?öRÞ,zÌå'àZš�g¯VpÙÇWÑ"§@EÛçmâ'J“Çy»n�½ÌG¡¥íרm›¨ bTØ#‰@Û5³-ü?È_®¹ö…:zE¿TŸ¼¶#î¾úiîNæX±6¥ô5Þ¦WЋK¨‰Ë—lœžmÅó‡8ú}~•£E9â¯Ú² å„GDƒÃW¢�öþÏ_¤ñYæû�5j#t4¥JlwÕ$ Õ•ƒÎ°Ñt©x7Ú~Š@‹óœ_5ŒšÊ�–ˆïo —D»…šo—­ý44Ê ì“j‚�(Hu1ão£]è®Q<ª¥zwÈ Ð Wk¤¼°D»+ý¦ Ï£¾e3¬—µv9™zz#í_ÞÀŒ»aê¤9·=(HBsmùùgFSŒË®ßD˜•c%@3m×ê QFû…Ö5Ý…Ö‡JÖ5@¢ñÉ2¤´¼„ž† á. ¡ûAB€F5B•U­~fÁ©Ú„!<·óNÚ6–P[;ê.@ Û;¥¼²„ø;^¨’¼feˆã²L¥žá|Ëñ!h«ôB0 8 C¨I#ïyQ3§Z *Ur·5ñæW¸„-r}DEuÊŸ¦A‰†ÚPuÕúRÖàÓ†¸Õnæx'AØ#²ôW7áv‹Ÿ?Î¨Ž ôËô Ôò£—¶éš ÅùmSÛɈñGæ‡ßjøñú/E’¿Ø´Øš2ФE׾銡b�ôê…ë@±¾ržõ©}oóœ²KÕ §XÆkZßzâ¿�BI6æt>ÿiÒ¨æË¦«Œˆ¦xÁiwÊ‘Mx( 4€Õ¶ 'ð°é0õð 1×í0BU¦ñ¸)¥V»+Y›ÔVË1û=TŠI\ �Ðâ ͤ!¸ê×ÝÂÛ0CWÉ�—»KåN ™[KºkCBŒðxZpÚ²}Ù‰dX2¼‡{ Åh‚ðJÿ¬îƒ!‡`Õv‹tDâ9ÃjSûÁ�q$r ïx QçÇÇa×8¨vój±mX ÚJªýªœ éC÷�„Ê�b+ÆŽgj×5íö“îÇù_ðÄðá|fü®¬ÿ-ë]¡™À0,Cyþsóú¿õ÷ù�Ð.«9‘©f³oË}y›—j*³Ë£½K®Ò�/80Mm¶W´„¤ëî±Z«ÖÆØðCS-b�Òvý½=›ü›ÿ�ïý�y°¹º"›Î‚!pZ¸[>ÒL¯£wR$¥$Ûò?w Új»0£f !¤ })á©Y˜ˆgAÚ\æ¨ µžR|/°Zè� ¥rU ‹¢Óˆ >}ÕNÔöE”6RßGâW¹ Ö+`Û¶në@®#€ï4�:ZKûÊ]ÁÐÕÕ7R$Óø@µ(µæáÔ,Èú6xw�GwgZïZ ©ûí$o[v^½ý\`Ë¥Æk±:ú?¬s¶…4Ú¦Ñ*mc„7Þ³sA©K-�Q»Ø¸'Õ†õoCåùßKjS9�¿ÑTTBl{L£ ÖÛ J³ÃðH/²­£­6ÕÄäŽ†Ü Xú«ƒ©‰÷ GÞ™Ê6-/C^"2öC+¹—"Ó†íÖ©#yÃlÊTàAÒæpóº#äÑ@ëÚªŸëõY T‰H1‚7Ùèä§½SÊR¸‰¯ ›¢­Ú嬡?X¸ÇoH…�PÉjS¡»ÜÇÖ`ž^ÿU“)ÏÔ ÙU¹Ç`=]XWu�ÅIÓ>Ã>òµ5?lÁ’Éà'vƒæRÐ!ØÛ=Ý/MPŽ¢C@÷‰ .œxMK-…Æ1´—Õßv9­P¶õÝœö´¥ œz~‹å š†m­ì+,¼v1R$Ž{¶¡Û ¯×¦´ƒ†/8ZÔ¡rÏsÏ@j/ÊéÁ° @³e3\ô,Ƹ­ºÁ‰Š‚:²bâDCÕù׌ڡ?�Tµü¥Z«‹/Y7y¼€ü’õêm��ç³{Á}­h™})m¡ä©þÛ%”3Ç *ôè�¦EšMwè2ƒãr¢ÅúmrP`;4Í•ó€-H5‚LûdG±Ï! oÔ½€ãß_“!$×� ž­]×¶³Æ•¿dÑqõH„©¤Ußµ4R`£–DºZú7Ì„@÷ë¿âêó7`u5v >ö5cödEȼæQºÝ‚uñ¿5{¸ƒè½–é¾Áè±R‹Óîàß¶•QÞŠ™*kÄpiY®›²@7-Ìçä¸Çkÿý% †7j’ÓðŽ0‡;¼(£jË6M}mëHÊ”šÒüµi~›ªLßàØµÈ±‹�À¿¦‰E¹-ÞººÌŠ¢Ÿl±li`v‹š‚³}Ô¾xœŒz\:lµw n«E?]qâ�þؤ€‹šÝNÂæêWxBrê9hÅÖÖüVÜ Ä­a"†êÕ:jN :5ìg7�´Ô?íQÄ <®Zš�ßOÅb?O’:u‘cÝ'cú¨íusymãí±$<À`½>¼^·™\5Ò±ÜII�,Í ìü^®¯q5ô{€DNà!çWuÞ]Õ4º4æm"ª•Š ‘¬Ú×îú°n6¥:±Xò"PûžóQ¯ñíE¢Q�ÅË̪Èk�8±ÙÌ… ïµ–Æú÷Äq˜Ýžûñ¥‰/¯{�w»nÁ„ñKË­Y�SLj PºF¶{CH m:¯¥x�ù“¿Ú_›€KõapÕ56Št×XwWk[“.ÄYÝ@Nº…Ê{UdÀ\cªA:â± {ë üÚ­' ù˜”ÆÖ^#ª5Ù�A¨™"mHÃŒ€›ªÍÝ{«Ëc|ïvqß´æ�û&¼»æ‰‰NC‘*eF¤"Œî^š9¦D:ËÍç· åìoN×ݴ=®Û�Ú®}“èÅA¨ që¿Lk>!'H]füîB*RÏÕB`å>£b‘j&ÙÞø›µÙÌQ'ÖG®§ƒ(Qš8'9—eK±É…¿WNô˜´¥&ˆŽ2¸KÔ›J¸JÃðà�ö„µçò_å`A ³ ¢ØÌ'ª@n5 ¶ø„¤ÔðO¹Ý R=C§‹¥zQªSj§æ¬•aêöèÆ5س?Ú!óI •Çî"wöBÃGÒ_ÃxߦC§m>hÔñÖc(îÈ»÷Eçk€H=Êw�¥ù¿’]-Óý…ô„OÍy LFnECâѯî9Ñ®FïdI|àm>ô�´ã!þ‹F¬Mó+Áròå>üê9éÞ±¬ëC4ySÄjÔ+ç©K]¨e Äc=Fáå)ióÆŽæ’Jü›mÓ³(’í&�oÓSÅX}þЫI••A·j´:«÷‚Ã0�öhÆwÊ0o×O·™÷\òG�FËÎöE`«®¢ãª*R(þ$¤‡ê¹¨®ƒîÙ)pâqú[Zènl¤ëå—qMs¿”r%ð‡Zˆ~%¨ƒ"àn„øçÜY³Š+¯¼’â в²p•D$3’‹ÎÆEª‚!ı·K�RúÍõÐ,“°9H$%b ¹6n2IÏ�´½þ:±�;û¥”OøõBèý»ðˆn¸MñpÞE•Œ™?Ÿ‚ �ŠÂ`n1y%$s PtUSQUEUŠ‚¢âxþAJ¤'ñ<Ïõ›ë¸¸Žƒ>#§¿‹œèQÏ%zè‡ßxƒþmÛº¤”ÃSÃ|)l„ žÕKJ.™pÓM”L™‚«éDKF3PR‰‰ éª¡¢jZ€‚¢ª(ª¿ú¶ióâ¼@Ͳ9Œ›6)Azž'}7ÀűÛÁ5“d=B~W+šmÒÓÜÌÁÕ«I¶¶¾ܾšN—õ D~©b}ùÕWWO¹á²ÊËé+K÷Äoâ–”ÊÉ"”&”&œ&” Zð$„ =eíÿBåÜÑœ3û\ô�Ž2ü¿†Žnhh††jhhº†¦i(º†•“Ga9®T(P%åçÏÂÍÎ;ÐÔtË2hþ34œ?Ú©þp5(ð˜ Ý3~Ù2J§L!‘_LïÄiˆü|Âaㆆfè¾* ( B9&pšá¿ZÑTô�žö®!UHI€åK€“´±-ËÐ1Óh/.§à@ã/½”ÜŠŠüÏ<³zc"ñ_Ü;¼³Àë`xð¤QVvó9·ÜB¤°ˆ¾ªo08áŒH#b`„�´Ô UUÏHÉ„"P8$¸×r°4CÇ2-l]£7ëBÌÃ(´¦­XÁÇùË=fkkÅF¸µ¬Ï ÀzÐ]X›5a·&_{-z~]3jð**‰âŠèáCGQ•³ê¨UUE�¨h!=i£6š®aé*ЦbM¬¦3·€âúÍL½ñFš^~ù¦Á�?ξ}åI@PO&öx&kܸkϹ攂Bº/ºQYA8;L8'L$;L8;B8;ŒÒÓÄ|$ŠöD¨JP6ºœñS&œB ÙU Tߣ!pCaŠ*ˆôtR\5ŠhWWµÕÛ;é»°ö¹<Ĉ,‡_EE?¬þö·Q Šè™³­¬”pv„HNÀxN„P$tZ«nš&{›öQ0ªÂEQÈÏÏ?=ѵÀ­Š ®O7,©$ÜÙNayý--Óåà`Þ³°ñ´¨ƒ¥Š¦ýºú;ßÁ((¤÷²Åóá󑜈¿êâôýèÑ£tuu¥>;ŽÃ¨Q£NO3„ðÝ«¦ï@PuâÅdµ"¯²‚Þ}ûj–y^ã³°o¸q”øùIñÇÑ ÎΦ(åe„³Â¾ègGˆdû¾þxJ$Äb1\×qòR¦K¤ç�l°=Ï£©©‰½{÷bšfºÓµÔ¢„²ýùi%ÅôÍYD(;‡Ñ €+ëà§dßaÁS…3gæVU1p^ Œëûôlß·‡³Â¨zºðD£Qz{ý¨´¯¯�Q£Fù^àld”7²cÇÊËËY¾|yÚØª¦Ê #eQJI¢²‚èE—Q�4‰Íš•×S_ÿÔ0÷³c†Øp›_RY]M²rÖy犄Ž4Ù™Ì ¤­ØŸ—ÚÚÚRÌtttpäÈ‘L]ÖÔ ð ¸Â8S¾IbÂ*ª«Ñ²².í�ï�¨¡!.¿è"]'~É<ŒH8ðõ>Ÿû!2 #íóàà Édòs1/¥dãÆtû¥iÃ4]ME›¡ˆA("ñ�s¡^B<² G’€ —””�ø‡ËQJK1"Fj0ÝÐO8Ùüüü cØÓÓó¹hhh ¥¥%­ïòË/';H¯‡#]× EŒT€¦Ÿs%ù%%„KKK�»‡à5ÈBÜ]R]�g„±fÎÆ‚›¡6’µ×u�ÜÜÜ´>˲<#æ“É$6lÈyöìÙ' œô°‘ŠN�°�3m&Nn%“&!„¸»r3PàÎPnnann.æ%óÑs²1BAt6NÉÏçççg¾ÞÞÞ“Zùáhûöíiv ¶¶6CÕ†umŠ‚òç­‡ ôHˆäœäææÊË+’ðÃLâ¶ü±cñT gúÌ ±ÑS±ý©�¢(úéº.Ñèéoz{{y÷ÝwÓúÆ�Ï”)SN=Ë34Œ�ŽðàN�†É¡`ìX„·ËãjxçæfeaÏžƒ–›‹dtºqêá-@NNNÆ*E£QÇ9å1Þzë­´XBÁÂ… GTA)%G�MÅBô�žâA�„±k.#7;!Ĺ›à‚ ÜœUT„"ö¹Óýü;ÈÉU];mñ-**ʘܩºÅdzgÏž´¾Ù³gSYYyÂgêëëY²d ¥¥¥Üpà tww®QKÕ4]Ç™2 !%YEEH¸)€bqV~>^vŒ›€ª«hºŠfhg”Ù…B¡ K�Ç3¢¸á"¾×^{-ýΙ3gØß·´´ðàƒrÁðꫯ°fÍÞxã�TΠUW•£pË«Èö=Ö¥F+PVUœ™³Ñ U×Rm$êèèà�wÞ¡¹¹9㻂‚‚ ‘=™ìÞ½;#ȹâŠ+ÈÉÉÉP©U«V1iÒ$~õ«_eŒs¼úÏ‹ª©¸ÖVLߥЄ‹EAää©(A‚¡jꈫßÚÚÊùçŸÏå—_Nuu5�=öXZ‚£iZF†gY±XlØñâñ8›6mJë+..æ‚ .Hc¬®®Žššî¸ã,+3Õ¯­­eþüùi†Y=Ž'oô8T!PTUH˜«ç†�t¼² TUñ ª_Æ:íÝ»—ööö”Žßwß}L›6�5kÖ¤"À¼¼<4-]Šúúú†M–Þÿ}âñxZߢE‹RÏïÛ·�›o¾™ÚÚZ2Ë~%%%¬^½šuëÖQVV–ž:EYUU‘£Ç m›�a `–"`ª®iHO"Ê+PTÅoÚȺÿÙ  ««‹¥K—²hÑ"¶mÛ†"Ã-zž—áûûûÙºukZ_uu5“&MâÈ‘#üüç?gúôé¼ð æÅ�<ò \ýõ„ÃáL÷¬*(�D+ùxٹ蚆€)Šb¼*ny%Š®@€ššV­Z…®gÆo¿ý6555üèG?¢³³“P(4búÛÐÐ�Ö'„àâ‹/æ¹çžcòäÉüô§?ÍH¡n½õV¹ï¾ûð£ÜÇ'Š"R¯j¬oý…˜ (W\YVq¬º¢ˆ“ú~EQ¸ýöÛinnæÁö7�?þ8ÕÕÕ<ýôÓ'4€ÝÝÝß™¦ÉM7ÝIJeˆµ3fÌàõ×_gÕªUœsÎ9§TAŠ¿#¥( ²r4Н†å P YX ‚Ô¶Õ©VyÆŒÃ/~ñ êëëY¼xñ°ù'?ù ‹/fÓ¦Mض�& Ç{�îînÖ­[Ç/ùK¶mÛ–1V$áOúï½÷óçÏ?©”/QÇoÇÉ¢„˜hB¸.„ÂØ´r=±O£Ã‚P5c WÞ¾(£Ö¬Y¬]»– 6°bÅŠŒ,®½½�åË—3gÎîºë.*++ioo'‘H�ÇÙµkuuuÊ:ÀC=Ä�wÞÉèÑ£‡ý¾§½›×~û¿8æð笚MÙør"p]„5#ÂK•I\Ë¡þÙDú†èÓ…mÃ0”.Y²„9sæðì³ÏrÏ=÷dXüÍ›7³yófn¼ñF*++ikkã•W^ÉðCtÝu×ñ³ŸýŒ3fŒ¸Ê}GzØñØ{xîð‰WIueãËSûÒ·9’:!wêºÜû½årÿÎ&Ùþ·6Ù×Ñ+±„´VFó\Ož*577Ë+VÈ`ÿó´ÚäÉ“åúõë¥ã8§ü>'i;gsÀ”Ñî¨üô@»Ü_ß$÷þø!¹Ó0d� Ð+5 ÑדڢFh! =¬g´ÓIŒ&NœÈO<ÁÖ­[™7oÞ)=£ë:¿ûÝïØ¾};W]uÕiÕUcø9k!íoDO7øãö*:¥¢ tAzÁ}ð÷lQMM ëׯç…^ ¤¤ä„¿»÷Þ{Ù¿?wÝu× Ë^gZZ“Þ1¾”ŽOñ|:¤<è�ÚÙŽç:x®¿1)]�³Iáp˜¥K—ÒÐÐÀÃ?œf`çÍ›ÇöíÛyôÑG7ng›<×óÏ[ïJë!™O4Ù¶�"%ng^nŽ8á,0D¥¥¥Üÿý,Z´ˆ>ø€ªª*.»ì²a#¸³ €ëá¹.2C‹öbûn°Q“ðW˶ºŽèèÀ?Ïqýæy§ìkO—f̘qRË~¶Äßu]<×ÅsYI +a¥OkjDíh£³¡¤|¼b™[c¾͸ßÌ„‰ç|õì�çzÁ"™~K$Ñ6“Õø!Ÿ|ø!žçm)„§3RèÏv< Ü ï:ýýß÷²²Â•Âa b,^8|ì„·¨ÁÉï¯ ófÜÄ41ãI’ƒ&nW7¥ï¬§u×.zvíê÷હí¶Úðgè]Íñ––볪ª(6cÄ*Æ"µc%p)@UÔ3>ï‹óȼ§°º˜òñŸ[ìS šØ}ý”o®#ÚÜÄ¡ @Ê[já½a«Û'¸ÖH)ûÛºu ¶µP¶íMì¾(æ IbÐÄH�ô¦3ñÑÎ~ŽlkçÓCígèëÀ¶ìÔ<Ì�æ ‰�Q¶ã]Ì–ƒìñE<)[kNXÞéEp¿ëºÏ}üüóØí-TþßÛ8Ý=þK$b ±8fÜ>GkoeÌî­ôíÛÍÞßÿ;‘xÞ…k®<Çå{`­†ï¸nÇÇO>ùãØÕW3ÉuèçèØI89Ù8¶ƒn9؆M nzè*Šª¦¶ÝN§ˆé¹žŸÎÚ¶åg§C±½eZ¸ƒ Š[›Ék?@ó–-´½ôž”ÿéÂ}ß:›&–úÞ['åÖ¶W^y²ÿСü©×\ÃÄD?ˆ•Tb‡íàºKpa"À?k ¢j¾ëŠÀ ΠɀI¤¯ÛÒ JXއë8i7Fl+¸5’´Èéî¤ìÈA­‡©_»–ØîÝýHyG-üÏéH×iZ/n”òÃ�Ý»Ÿù`ÏžK«®»ŽIsçRÒ×AwQ%ÑÂR¬�¬þqWf‚[cJpmNjHEÓ5ûӮ͹A3íÒT 9ý=ŒênGëéäÀÖ­´¬^�ô¼-ÀÎäÒÔ_›{ „ · Ä£Z$R:féRÆÌœ‰RTB_^ ýyÅ8‘ìã8¶í>¤‰þ‘¥ýJð©8ø®b�€é€WT�3y2YcÇ*)ASU”@¼ vovw?tˆ�¦&Lÿ´˜”°GúÌçkƒ2ÖÙ¤/€ãi”º0WÀ,Sb image/svg+xml timekpr-next/resource/icons/timekpr-64.png000664 001750 001750 00000031427 13716566163 022574 0ustar00bezvfedubezvfedu000000 000000 ‰PNG  IHDR@@ªiqÞQzTXtRaw profile type exifxÚ­›iv¹Òdÿc½„À ,ã9½ƒ^~_óHRRIUõÞ×-V‰dfdàƒ™¹;äÎÿùß×ý/þÔR—rm¥—òð'õÔÃà‡ö¼ºýíŸdÛŸôy‹ßyÝ}¿x)ò=¾¿Öñ¹~ðzþñ�¯gøùëë®}Þ ís£Ï_7Œzrà‡ýó"y=¼¯ûÏJ\?亮úóRgx¿¯¯%·ÿ߯eÕ÷›~w?¿�*VÚ™ÅNôñ±¿Û»‚øþ?ø¿ò·�‰ëžØù9Æîø–bý¬ƒü²½¯ïÏó³�~1ò×Oî¯Öÿþé/Æãózü‹-ËÇFüðÇ7|þ³ñÍÄ?=8~¯(üúÆzüúm;_F¾»Ý{ÞÝ�T°hùD”Û݆ '&�ö±ÂWåÿÌÏÕ¾:_íÏÂå›'N¾–ï>à•ë|òÛý±ïË/–˜Â •ï!¬íµkèaá%¼¥/CÅc;6|¹Âq¸.Åð½oÏíö¼åOÞžKƒçfž�üí—û§7ÿ›/w¯lëýÓ¾mź‚âšeÈsú›«pˆ¿¿e3ð××ÇýÏOñ£PM\&3768žùÞbfÿ#¶¢ù9r]æû›BÞÕý¹&âÙ™ÅøˆžâcöÅ?5„ê=vl8h°ò@nL<às›E†c ®†ôl>S½]r(A/ƒM8"ÇBn5åÎJ)?55bhä˜Sι䚛Ë=�K*¹”R‹@nÔXSÍà^­­ö:Zl©åVZm­õ6zè ̽ôÚ[ï}ŒàÜkpýà•fœiæYf�mö9á³ÒÊ«¬ºÚêkì°ã&vÙu·Ý÷8Þ�⤓O9õ´ÓϸÄÚ�7Ý|Ë­·Ý~Ç·×>^ýíë¿ðšÿx-˜§t]ýö¯ºZ¿ná'Y>Ãc!y<^å:ÈgOó)yN>{z )r`‘Y¾qÛËc¸0òõß¾ûá¹ÿÈo.·ÿÈoáß<çäºÿžs¸îw¿ýÁk{êEó›²P6}"ÙÇû§ Ú©�ý>ÇØ~dÜsŸz¹Å¨·ç“˾·»çŒ}Ý;SܰdÄb;ݳŠ]jßö~0ŸyQñøx»¿¥éÕÖ÷9Ë�­_zÍ«ý4k>m–~ü¼ÓŸ«×ÒÜwN°$¬ëÛª'&‚3„yÞ9ñîp]ìï“yä®ctÃw}Øp=k={Ž`�«Öµ�ÝÚ:F]‡hY°yukFû,Ògù®Ï>ŸÎ·�Æœ÷Ö{²œ»f°+ò¸¸z÷¸æÞl�PÇì¸má(ŒºJ §ÉŽZv}WÍÏZûÍMþ<{—†™¸Ó==NÇë=¹]¾Êlm—yð ï'Ï2õ!Ûh8|*ÙM1zäS8s?\�{ò�±î>ï ò 7Æ™Å7}¢ŒÙêÜ3ÈîëîSîÖ ü*‘+®´Âè)û”�Ž~øøžËXÇ­{v�Zní3âËYØäÈ“¿³ÜÞ/Öã-ñ†XP¾) Šâzúɶտô�,"(¯9øäV/qsÐIOÁqI;!š§ ta„­ýËySwe{Œ[º#±ï’XÁ¼zxà ñÜs… }žÕg=Y�¹Í·µ¯2°«–]{¼Ž0ÖŽ,R€-ÞŸ�ú¸€þË!Ò€›ÜFдwåÛGüB@­™HŠêf®a“ÜzªwHíõÏm‰ö2N•ˆ&5ypaXëYSñ1¢¢cNLxaÇÎ@ÑD^á#·4j*qmî=Ðß㜽ô)b.Züó„F6·ki½¦ NJoR Ý^ ýâ»{‡gqor�‰cg0‰ïƒ¶û‘VÜo>�]\{·L¤Å7~Áîh{ÿzOH«cÙc9fËú¼^É’[xy»h1ôãþ½�òÄA~··4¥6S01Xêþ�ÀâggQ.$W䦻êçÒ3„ÎÙÏI4Ü$Ä%a¦Òt\ð�•ø¨Ìõ‚M´¨býx�½]Y«nÏËB�/ÏÓ‚R­ ç ò!tÁxf‡EæóüµûÅî#ì–Ø <‹x�C 1®ŠþݸbH$‰a´µ P¬ 6‹áPÍ�(ŒeEÈ]袽™S•bb“Â=Û´$Û“e¸(uÏoeÄ02ÄOh;¹›pø:®<„;ü€‰zëÐÆG¯‹xN£v^ÐH(ä&$Û$¡X0|‹×Ä¿ Q�»&<.qã¢Ñ–BôðÄý àÖü Ô¼0ßJ<8¢kf#öÂþÀO8NYOª´NJ±n9²j»yá¿4ù|ˆ‚`ÿ“¢Ææ7�Û}qO ¿Z v¹˜xöIp?ÙóÈ/»W«²Õ¢ ŠŽ»Yyù ¾` Ï´Å1ä–íÎL{Ÿ~=\Îîi}Ð>7jõQ¹ZǹqEá4võ$BJbpì DMçNFu±ÓËÕÂG–\I;„«'?ÂkK+Õdà*vÿ5þÊÎ{[8“¹øý*ÂHšÇLB0Ï–� ÉMÔ‹Y %{ѺDP˜H)¨Ùw HäS>†„‹zB�à-±±¤Ï:y Ö�zõzËht.8a†[ã_�Ð2æ^�{‘{ïËÙEÂ3:¢šØ 0Á&å¸)ÙµJ˜<³�^šH2½¹~Ž~¥E ‘l& ¨ùüðûwHã•„�p%ôɽ‰ŽzJ�@â@µû>æ—2!Ä„;ÃûÀqÅj,ë”<ÅKÜÀ2Êè5 ðhu‹î�éFâd£cJ2”D”H¼¼(fÛCøIú4“wxO×À9ìíø~¨Ëÿ‰P»Ò˜ð$¼¾‡‹òغèL¹».“c§r�º7îŸ,”5Hïâà ¿�˜ &`û¹NÌq�iª|s$³XäÔ�-€ë¢šjëXe†¡Îúãw÷ÛÄ ·¾á¾¾p¯Ä„˜ ˆ i FX؉è;Á•Ýܬþä©UÈ쵃e¥C}ÑOÍ»1ƒÂ’28¦£\£“béa!]IÊ �üÏbNxÅ+ží†fË$[²Z˜pX9Áõ ªOnHnýóöÿðð¯xƒ;-\1U§¤ƒ%<1†z >O ¦— ¹7‹�¤”ðs)Ÿ r@"øæ,øãFÙ2àãÊÜáY#þ—aåþ”QPý}ò+2Y¾@èÛ;õ7çd“Ü=oÐ}ù&Ô&ÍGFˆ§ª”䂆¥“Ý0¬ÁH¡è»lÞ�ˆ¼Ûè;•¹E5WûŠHûïÐá×ï?Áˆ¬}ð2 §åÛYi”ê©D9ù$I”¥Õ%¸‰ÚÈÂÖ×™°ûÉÚEÖ¶��É)8å÷rþŸë~èã·¸¿2-–Ý?[¶¢jýˆ¯!Ä‘jÞNF!ö®Zí©ï&&U�V·5O—¬pº’TNJâGZ ¹Úz¨«—¼¿œÐþÝ îß¼áQ=¥juå-�%¯ÔÖI2‡Š·ï f dg¡<®¸3Ÿè(rËû-¨´àðG�½R]S{> 79ªzT?’,<s6’j ÕWb«ˆE¾×Ó¶¤|”âŒH²ÿyeÉÜ-YÕ$‰¢¶2�H‘^CFI’’äè<äBè©�8|«èôJfÕ”ÞíB ÛA+úM?Ã5Š�·Jå:,öT°L±¢.y«:„Òöž_õ+–‰@tó”®9$¢…r†—6]¥4*¥…·?j‰»Âs!ÉAk§Qªöm›¨Bâó…àme“ËóÖ%žÒÜì=ž‘�roÉ ÈÛJ¿€WHíBÒÖª "X⻨E¥:ëQüñ_� Z€²,ýþ¼^Æ@ñŒ]£¦´ž Ì{/Rí³BÚýcª±¡ùi�›úö¾^ ~ÓCõZâEܯÝSèt£–D–)gíÑz0�…ð`ÆÕÛ)ˆ›h~0õÛÓP”¨bäT„ÒkÉ«x!S(;%0Ôn!cVƒ¡OŸ­gÑý$Ó\ޏ‹c!”õÉ�êN*ÄM™¨)W€º@÷Pßèè‹R‘ òò‘₊=1äI÷ ý~åèó.ðií�%°ÊÍ(@»ˆWÄ=Êë~”×ó*/¼¦Z¦ä Ò)~Šj^«©Œ=•-ÒzɆ@[o)çÔÜ;£¨œC;±.w$)jË~�&ªèâ¤R[‰M^•OGÕ�ºdf/_T{Ï>zäbzGx©ì:RÒà)IÉÜ{{i]ëÇè[€¢h=&C©ö=VŽPdHe6?²KüLAÁgÓ• ù:Þ~ÉElÆ…cœ�OŽIÙhMı¾ß�@ÓpÚnªj›˜Ì]ÃKóS ›S‘M­æ@?á %ž¯¾‹(xv��dOÐ~´àñéò)ñëZf¢&¢ÔçGlmvµ5 |�ƒ{^RéD £Ø‘ת¶°\쓾G.-ሾ�y7«®©ouu)ü–2TÄ�•5dAÑÎ’˜Yªª«¨ Óo5ê¸`€näpQw¾‚ 5r…2 &+ÞÄL$ª9¼\ðŒWù6-AšÄ7·Ioqbü~ÚU}|ŽDY½Z†Š«Õ€N5t?h—xþÛ{D§ª_Ø™:óp9ÃÞé¡ö Ô–ªÒ0Ò½ªtœNô`CºŸ’¤â—4˜*(âà ¢°N´:eUvÐÑÜÍHãÃÀ£ÃªD÷æÖ—ºã$¬lõ)q…gѽ×½ªY঺¯�ªjFÏ·ôÀ¼oŸ‘Âo ªbU_ðmjÙdbÎdÊÓ·#¹'”L(n,–G²Æ"�#«ÆÍE9€ˆ}� ¢)j v´áزŠ<+`o~P£ ��•›Êt4¢VŠKT¤²�´ÃsÁæ'‹†öéÂ+$ŒM´ßB�N�ߥ޲Xþ3‹Ðøb­Ó¿úz×Ài!D®ÖëÑXÓÄ�ÔÍRSÚŠKºIâálkMl€Q€ô°Y3ˆ:¥§R™>ÏÒ^U«€åýJ4ymеM"½Ã“‡ìljœ�¿*óñ% Üå6D¦Ýqïôå\ëfxô>y¢W6q×4®˜2¾º¢VÍàL4ŸSm ñ®LЍLæq\CÑ)Ý¡†‡®5Ázù-ÎÇ:¤ŠzßK�Ó–ÏRDç�ûß67ê*¯Á`m2 m4±vbj®‹ ¨$¢´Þ«™;5>p½Z€mõÎ8i�ZIÛï7©é øV ǹ«95[¹^VV†C¥«\ÇgKó••)_¶pÿ&NL ¿¬Ä<°Å¬V[«Ò¨jõ¼�ê†:¸]ìG¥S½Æ °úu  L} (R!¿ˆ™®‘ZµL:RTJäã$áÑBêÙ¾À�lmÊùÒM\w)Ø}ÇTç7g¡E§`­‡@êÕÁà�©† 11ÐÙc@¾l‰Ê«šH¥ìCYVK[BEY²FLëÄî6—0óÛ8!M�§mögci0ÄBÊŒ� ý0€æYŠƒ¨®¥!>¹&Œjr¤]5ty‡»©DV§t]FX‰4YV™xe3z¬Ï¯›“¤}‹·ÒxØ‘$>Ú¬ë÷7c¢ðW…U²VÕyéËßú"`è…­Y©D¤MÃapÙ0KQƒF2x~ILµÝ�(#IµÖòy«¬,:�%(†æy‡ãðñ>D€ööv)†­È©õNŽ‹Ú@ÒEx&¾ècÓ‰w`uÕ@ô²*bw wùïB Ä@Žï4Îiz#PÙŸ‘ÜÔÝ: bõhrŒu* ¦µ¹¦Šì¨a4!CdêƒáT÷u´¢¼G+õ”†/-ð¿*"¨Îc÷—ÓÕOqÚÖEç1Öiɱv›½5Žm׿`M�¢iÜ´Š�‰mF£ihÿ hÜ‡ìŠ ž5ÊÃÛäUç-Ʀ R+Í«`F8Z!@¸M*=Ÿ æ!‘š,SG8T: ˆ)ÐŽ²«Ûøm�ÊiBðB»•~à- ÑZßÁ#§¤ŸT¡®¡¦oÃp}Šèdv+ôÙQG.j8)ó)e$µcy~µ¶Y¤^#‘r|š_çz½V¾ñ`z‡«`sê@¬O»Q“Á�˜ËM-V‰µ ±ö?“jÔ0õuGS:ׂŔĜQÏöp4þ¶ÝP(…" �U“ ƒAK]P·Ý÷6I#õñ5ÜL\Râ+SÕXÅt%Ù†‚Ts•Õð_+õiÃГÝÛúÎ &Ç ¦6†o'š%že¥¥DήÇW›×/57oȯ££þP3E$e ¶þ0m`§{ÔÏ(Ö‰@†N™ “#\aŸîo jHnë-' Z¤ƒZ/}Zq�ˆCðF÷'dQÁ;¶è׺�RæÚ‹$@P;Òhj Ži"‹öäOzó§’ – QgÈJ½%Ø+ê�)7m2•Ü[ÕOÿ IkÂTÕ…û©("´¨Úm:WG<¯ä"•Ï<ªhà­ ½NºÓÀ:ᢥ»PôÞúiW<_É¿)êE×eJÜ\òÁkÕZ=z‰/ŸYo½+|À½¤%hï!¸Ù÷FÝ/#81 ek—àÑ àš5ú bÅýFqVÃRMA!”ˆÃÅü`µ°ÅÐPÛê¤ñJ�øª‰2³Gõ·¼F?©ªü “IQ}W£ËGrÎ"{©/ð Ãd0·d �%gÆú²/Á„þ•êçŒY2œN�Ç H—,ÔtµÚ&í`E”Ö™÷è ~S‰´ºBP á‡8v¼]_¯#kE‚´ß9#á§0?•P�‚é'Ñ5vz{ƒï4à{è ¾ÏvjÕYcâù½f¬Ÿ’©«ÝQé¦w¨Rdßs÷7ƒ—ÊÞP´ddÓH¾iæ;V?œ®Š[ ýÑè¤ttÜ¥9Ú‡|ƒrU×XUÓ�Ðm¸MÚ?!^ð§õñ`X•ˆÃj!…âŽGŠƒÞŤõA”È•ŠŠ¢_“XbX³‡´º”¡A³,›ˆïJ�ñŠ“âš"Q}ýc§Pá:�s¶j0Êu‰îLÒú–ìð~Jï6ÂBöp{`l%À툗’së,]ˆ*X•¶Ô¾a1YQúšp”ƒç!NŠ%#õÏ@\QµìgL9<:)9ž®0v~dèÌ^îÓpQ™µ Ú5R!qþÔsä XÐå2É'y ¢jÇÔªÈã¾G‘€·ø„NªE˵, ê>éÙ®I&-1jwÖh:(‘m€õžæDŸ'¹˜„M3kÌ1í\ÚŸ$S±ø!R[?y9—T›oO%û#ï­HÊ$uµˆYÕ¤Ö?Þ:*¡’Q BéT.…�µ§àT&àâoZïSêüZå�žÍ*¬J=Íg©ô•t®ÿt¼]� ý°cÓ!‹ùDz@Ȉ[�z> r~d¦Ø´;a{‰/sý#ºÿþ]'¹ U¥€Ù¿ž,N=�r eÅ…·QŠÖ8ö{"k|¥Ý„ˆÉÅn—úêÍ´Í@ÚTI†£ýtH a¼4ŽôPH%¤¥óòI}¦“ª¶˜é‚®¹iŠäHãÑyèÔ¸Z:¬¯aím  yhT P¾ m£ôí쀜 €ô9aI­U$)Xª2é=ˆA>RøÚ‹|Ó!©êê_Gð)qfp¦Ñ\ãðõÛ«�½¡À`¯vxÌî�…¡ØïÐì<>BFÆeW_‡c92t®AC×D�v�øÖ½iAý«Ç<¥(Å"¡ñ¥Ø‘ým…«£¡�ITÍ ¹{§”Z`“VŒ�feA‰ éº:Óƒˆ/ŸÏÉÝñ}87ÚÙ6ÍQCÑš–M `S’‹¬ÏA3H�5Îz�í¦!h°Þ¤Ú8T§÷sŽ\rÌ,Ï—Ɖ3«Q<»j§--)rvþ¨¾Ç¿Ï}O„ºÇvl£@yTR³¸è¯â_>Cù[íLã[b­¢“Foûg«›øQ�C=ìUŽ*;¬XÄ%Q¯jÌ-­ú×(ïé5MÐÄa ù]ìäxЩ •Οð\×éß´Td]$¿Àû04EFzðýW":0ÒÕ;VcK2~µ¯óÚd¹ ÃÉšOCõ“_¾hU6ÜÖN¤QLÅ"6ì¥f–6íù)¬†ÉƒÂÏ«ë¯CàÝ?ê­‹{§TÚƒ²‰��¬^ ©,E¥B:×Q-uT4�Ø:1 ‘ÝúÑŽ®Bñ¤›¿°þ{á|Þ G}PýÁ‚pb…(°ý8:Äpá˜�µ,ã‘rbÀÂù}41Ûul�Ô}I{Ú6úkWIbŒ¥ÆD®Ï#غÎ� GW¢˜—�í8ÑkØù9íÿrÚí¢Æ¾ƒWwÓ?˜!u¸Q7Ã7˜2õ·„áÇq|ý›¦}uX=wChÒÓZÙ…Ôì�^�¹sCŒÅ†…yp·“:$�–ìLã‘xíÒ‹”QØ¡O¨8€!Ä¥ž±mTsx'8¬˜UÿÞàk` È^šÛØàa•Ï4áe®)‹ÏÓpEÝ´øiLéôÁsýñÐ(`ñ„ñ¥c�d³û¿¥Å5U¸K*�„iCCPICC profilexœ}‘=HÃ@Å_[µ"U;ˆ8dh;YqÔ*¡B¨Zu0¹ô š4$).Ž‚kÁÁ�Ūƒ‹³®®‚ øâäè¤è"%þ/)´ˆñà¸ïî=îÞþF…©f×8 j–‘N&„lnU¾"ˆô Š˜ÄL}NSð_÷ðñõ.γ¼Ïý9ú•¼ÉŸ@<ËtÃ"Þ žÞ´tÎûÄaV’âsâ1ƒ.HüÈuÙå7ÎE‡ý<3ldÒóÄab¡ØÁr³’¡OGU£|Öe…ógµRc­{ò†òÚÊ2×iŽ"‰E,A„5”Q�…8­)&Ò´Ÿðð�8~‘\2¹Ê`äX@*$Çþ¿»5 “nR(t¿ØöGîͺmÛvó<WZÛ_m3Ÿ¤×ÛZäÜ.®Ûš¼\îÃOºdHŽ é/€÷3ú¦0t ô­¹½µöqúd¨«Ô ppÄŠ”½îñîÞÎÞþ=ÓêïhÛr£Ä.é³bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä'0ëo¦l·IDATxÚå›{�Õ}ç?çœî¾}_sç¥ÇŒ$–FÌh@ Bb‘b ´11�@plÖ`»v½$¸jÿØrªb¶Ê®MUlªâZ’MÙeW‘ÀÆedâ` ![ bPi„Fb„F¤�¤yß;}oßîóØ?îh ;`i$§rªºîí¾Sçœß·¿ß÷÷8ÿÁ‡8_ õôôt·tvv~¤V«­›ššº(>Pimm=¹|ùòÁ±±±ÝÓÓÓϽñÆ{÷ïÑÛÛ{ó�7Þø?®»îº�vww«ööv<ÏãÈ‘#ŒŒŒ ¥déÒ¥¬]»­5år™¡¡!úûûßܽ{÷·ß|óÍ¿=tèPùß½½½î¼óο¹õÖ[¯éîî&“É`­¥Z­2;;Ëèè(Q!„ “ɰråJššš( (¥HÓ”ãÇ�³cÇŽ©gžyæÁÇ?200`~ç¸ì²ËÔ5×\óÐg?ûÙ?߸q£ô}ŸhnŽ“Ç�396Fµ2Gj ÐRâ„@Z‹ï Ì„4/[ÊÒU«h]ºk-‡fÛ¶m/ýà?¸w``àèï,===ùûî»ï‡Ÿþô§·,Y²„zstÿ~fúû1“ĵ*ÓqÌdª9%‘µX) „ ÕZ–KI[&C1“%h.‘éêbÕÕhio§R©ð“ŸüdâÛßþö­/¾øâ+çjÏÞ9|ó…x`û'?ùÉkr¹§ÇÆ8ôÜvÂC‡ÊsLÍU8491y¢=þz¹¼ó­Z­8-¥Ô@ k»®,–>ü¡bþÎËÛ–\½¢ÔŒ9Á¡Ã‡iþÈõtõörûí··777oWJÝòüóÏïú�`ýúõêóŸÿü¶O}êS×d³Y޳ïÉÑzô-dTe¶Z˜�þ‹oxtddľÇsÀèØ|ý®M›ún[ÞùÐ¥ÕÒ'ÔÜ#³³ÌÌÌpõæÍÜxã�ù8ŽŸš™™Ù¼gÏžÁ³Ý»:|æ3ŸyðsŸûÜçš››å…ü>êð³ããîhyöÿüÍè±�çç?ÛS.—ß­8qâä þ¿•íK^³I²ÕU«Ù““T”bÕE±bÅŠl¥R¹addä{SSSú‚Ð×××÷…/|áïW¯^-O�:Å‹O?ÍÉ}ýŒ;¦ß˜™½ÿ¡¶ÿå±±±ßÊ{¿8|ä�(¿o’øÒ8n«Tˆ´fÕªUh­—�ŒŒxƒƒƒÏ]Pxà�ïßpà — 9ÂË/ì`ðÀ€;:Wù/�ÿë+��íüoŒ�˜1…“Õ(ºKC)×Ö†RŠŽŽ¦§§¯9yòäãÓ¿íüòl6×ÝÝ}SooïõÍÍÍÔëu†††xe_?oÌÎþÕ¿ìÙóø¹r°/ïß?287w×k¦#Ç�Ç1…B�Ë/¿<þülæ>+ºººþ¬³³c 333üâµ×811q8¶ö+ç:¾Øwðà/f“äáö3&''™››£³³!Ľk×®m9ïôôô´vuu}<ŸÏc­åÈ‘#ìÚµ àï8ç~Íš5A±X$ŽcöîÝKÇžçýãb…׃ƒƒÓÀßïÛ·�©©)J¥W^y%RÊ­ç€ÖÖÖëW®\I.—£\.óæ›o<¹ÿþd‘¬ 133ƒ”’îînÂ0¼þ¼°|ùòžb±ˆRй¹9Nž< °sÑÓW!^6Ƥ“““(¥X±bííííëÖ­[z^(‹—äóy„$IBE€yÿr4I¬µ455±jÕ*¬µŸW‚ (A€c išLœ§úÊø¼6�Ífimmh:¯H)C)%B¬µgžÕϱçyH) ‚€b±ˆ"¼ Ùày¯å �R )%ù|þÂeƒRÊ Â¼9^˜HðBçξf*ÏÅÎÅF.Ô�¿+oâB­}VXk/¸ðg»¾w¶8C�bœ‹µ½³ÝÀ8üÞõŸÈnèk~¹P ããh)iŸ�åþ+®àæ5]Ÿ.øþ¬s Ó°Îáœ�ÿtçpXp8ãpZ fœ %$B4¨U"¸¾Ay(¥øçVtêøq@°ÖÁßÞvÛÖ‹oýÃ¥ñK»ܽkçé÷M¥€C7Ü8§¤Ì«Îü‹/Fæ ˆLfAǼàÖbßÎ’V*D££è·Žx>~G²PÀ¥)fj =>ŽéXFnÙrò«V"¥B1/¼@ˆy ¤À% ¶^ÇV«èJ…ôØ1ô±H’;×î~釋¦bÞöý•«È^v¶^'9q‚xï^Ò‘ð„Y\˜�L€ ´R$'NÐté‡èèê��ÝJš-�úœRgQZã%1Þô8õÁ¦~ú:Ÿ#ð|Hd’"êu¨×ñr9®.2_D¦sbr‚äÕ×Î"•Z\ˆã˜ ¹™pÃTK3”ËD r9â#CèÉ ¬1�R�šféÍ7³ì�ï%Zy)•¶%¹?ã“ñvígÝu—c�C§š(^�^ÓKëÆëñö0úÜOÑccdóE¼L†`ÕJ²]]xK—âµ·!K%Â%íÔQ{í50zqð<� © /Ì •ÂI…S •Ù,"—ÇÅ1Ia³Y.ý¯ÿ�򮧣ºb%ù¦<ÙB–L6ƒò$BIþõ;»Ø|Ûu(_bŒE'š8*Qkoe®s%Ë/é¢úÌ?1»ûrKW“)•PžB)…�)%�W*!¥@ØEÖ!ÎS8!vn Ú´Ñ$IJ’¦DQ„W*±â®?¡zí ä—µQl)æC¤’ï2*!BJ<)ñ|�0’/削9*…ªÔÊ’B‘±v°dù2¤µ�kaO rY”ç#…Y|”žßHDœC �’+*©£tŠò<–ÝqñG¶Ð¼¬•b[?ðß5O¹\fÃÿÜÌ©ñSt®è|Ço~Ƨ´¤D� ˜ ÍC=Äúõëyâ‰'ظq#;wî$›ÍâùA6ƒèÛHÚß�riJH|ÏÇóüÅ dð=xΡ¬ÁÖëÈe+ðsY¼_áû 6ÐÛÛË£�>Joo/ßøÆ7˜ Z­°gÏâ8fÙ²eìÚµ‹µk×òàƒR(xôÑGÙ±cþð‡V�`‰¦úØ1œÖ¸4mP2ñÏV~p�á,BëÆâµS«áZÚ�JR�Š(Ÿœ¥|r–´–ÐÝÝÍîÝ»ùîw¿K&“áK_ú›7oæG?úÕj•(Šaxx˜o~ó›Üwß}DQÄW¿úU¹÷Þ{Ées”OÍ.Ì‹²!vf†zT%©ÕWš’.v.Ðp4):®#=…‰kèj„_l£:ñã¿|rÁÖÿA×þÑu î¿ÿ~¶lÙÂ#�<Â׿þu¾øÅ/²nÝ:>ö±�±sçNöîÝ ÀÝwßÍ—¿üe®¸âŠ…5Gß8ο|ãŸî7þñµä¥Âi�œXZ‹§<�‹œ Ôëud-Æ�kÏCGND­F¶”ç³�|á]xf¬X±‚¯}íkÜ}÷Ý|å+_á©§žâÀ�twwóðóeË–…"È™±rÝEü·ïüéÂýÌéNoE†!ÂZ¬±8­1Ö€]dÃ�@I<§œ•6BàNŽ`´Æè;ïëëcÛ¶mlÛ¶�U«Vñ­o}‹Ý»w³uëÖw ÿ^qˆI5D¢¹—¤�&¸4EJ‰’bq5Àó<¢A=€‹c¥¨Uf1ãã¤md Ù÷5ÏwÜÁwÜñÁLPÒzŠ81ŠX²7˜Ä¥)Â5ÂáEÕ€8Mˆ£ˆ$ŠH£ˆ¤!¤$Ñ7|”zµŽ5‹W(Më)õZýòN‚¶6l\ÇÎÓ±1­9lÔä$$ ƒL5žRˆ¦&Ä+?'ž«‘Ä‹sHÄ9G­RC=J<4HS¡€Ð)hƒÐÈÅ„”§ð \ª±qŒ‰c´Öd Eª¯üœdø-¢ÙhQÊåõj�j9B½ò‰ï£ZZ°RÎdu!Ù<ÏG^¡Ðˆ ¬EJI˜Ï371AðÂ3ÌMW¨•kçTx£ sÓ’£ÃTž}Š–­FJ‰çù<¾�„~€ï‹ë�"µFƒ C¼övTbµ¦½TbrûÓ´^y5³áBùŠ0žµðÖZ*S*§§ðž~’zšRljšg„¤ÂxŠzRo˜Äâ¦Ãó}ykÁÚFcÁ÷™¿Ôùɶ 9|„™ÓÓÄÑo®Ð¼üÄÏÅŒ_'¼±T&ËÌœž&xq;cÏ>MËê5 %Ö9lš¢ëul�¦št±³AÏó�B€³X­1¶Ñù1Ö¡�!·|G†�O‡›g"©Tƒö…!ðòyl\[\<ÏÇ÷}¤ï#”B…!"°ÆÀ|³Ô8KÐÛËÌ[GñþïÃtÜv•ž>¢¶VÂù¾€úxž‡’z‚H:Õ$µ„z5¦VŽÈ���ÙùSŽüøŸiíîÁÏf}C¥J�”`ƒµ+FÛÅÀ:‹Å�1�64ÌÀÚF#t¾'hŒ!\¾œ4Š8ô×Ųk7“¿æ:ÒKÖ0×Ô‚ÈeQžâãq;£ãXcÑIŠW)“›'Ûÿ N<û dZ¯¼�À8°Î!Œn8#'Î5¾¦šÄZÌt‚Þoã‘­g-Â9̼3l4Dæ`�·ãÀ+(­¿‚òÉœú»¿&ô3´n܈߲ÙÜJK6ÛH«£ jf’ÊÐaN쿳“ÂÅ«z …�b¾$R!|o¾ ìpR"Ü[›6m’ããã¢T*Ér¹,‰FùYª†�N„1�Ö"æ»Â¸3Z!ðK%D!�6šÑÁ¤Õ*F§8cBJ‰ŸÉ�ki¡pU_£É±ÐþRH¡�R •‡R¡r¾ôf­Ã!°žGMàwwwg<ϳÎ9;00`ù ÿ�ú^ˆžžåû¾Ÿ$IP­V½ ‚4Mƒ0 ¥<áùÒ÷Hœc²^'Šcæê1•zB¹3—$DIB¬Sb­IŒFÛHWçÕ,Öºùö÷Û®ñ „�xJ(EÆóÈz>YÏ£d(fW.�Ï„4‡!Y¥p:%ÑšãÕÚ)åŠ$IêRʤ··7õ padlock-clock icon lock security secure padlock signs_and_symbols Savvas Radevic image/svg+xml en timekpr-next/resource/icons/timekpr-padlock-limited-green.svg000664 001750 001750 00000120537 13573525204 026507 0ustar00bezvfedubezvfedu000000 000000 padlock icon lock security secure padlock signs_and_symbols AJ Ashton AJ Ashton AJ Ashton image/svg+xml en timekpr-next/resource/icons/timekpr-client-logo.svg000664 001750 001750 00000033742 13573525204 024564 0ustar00bezvfedubezvfedu000000 000000 image/svg+xml timekpr-next/resource/icons/timekpr-logo.svg000664 001750 001750 00000147572 13573525204 023317 0ustar00bezvfedubezvfedu000000 000000 padlock-clock icon lock security secure padlock signs_and_symbols Savvas Radevic image/svg+xml en timekpr-next/resource/icons/timekpr-48.png000664 001750 001750 00000034536 13716566163 022602 0ustar00bezvfedubezvfedu000000 000000 ‰PNG  IHDR00Wù‡(…zTXtRaw profile type exifxÚ­œir丒„ÿãsìËq°š½Ìñçs�©’ª×g6]Ý%µ’Écñpdöÿþç˜ÿáŸVm61•š[Ζb‹Íw¾©öù§Ý¿��÷ïûOx_âÿüÜ|½àùQøueéïõ�Ÿ§_oø|†?nêûНï�Þ>7 údÏ7ëû"ù¹~îâ{£¶Ÿor«åûR‡¾Î÷»”÷¿óYVy¾èÿÍ÷Ä‚•V⃂÷;¸`ïßõYAxþëüWøÛ…Èu64¾�é…ü®ƒüx¼ÏWk¿臑?ߙ߭ÿõÝoÆ÷ýýyøÍ–ùµßüé .ý¹ñ¯‰†Ã»"ÿóW|úÃã|Œ|V=g?O×cÆ¢ù�¨kl÷¹ LîÛ2 ÿ%¾/÷OãOµÝN\¾ì´ƒ?Ó5çñÊ1.ºåº;n߯ÓM–ýö…¯ÞOîÏj(¾ù‰cð–þ¸ã [¡âËé· �û¯µ¸û¹í~Þt•O^ŽK½ãfŽ·üåów/þ7Ì9S&r¶~ÙŠuyÅ5Ë�çô7Wáw^¿¥kàÏŸ×ýö[ü(T#—ÉÌ•ìv<·ÉýŠ­pý¸.ñõI!gÊzo€‰øìÄb\À6»�\v¶x_œÃŽuVîÉ��\J~±HCÈÞ_½>›÷w¯õÉg¯ƒM8"…LnUåΊ1?%Vb¨§�bJ)§’ªI-õrÌ)ç\²@®—PbI%—Rji¥×PcM5×Rkmµ7ߘZn¥ÕÖZïÞt>¨s¯Îõ�Ÿ ?ˆ#�<ʨ£�> Ÿgšy–Yg›}ù0±ò*«®¶úvfƒ;î´ó.»î¶û!ÖN8ñ¤“O9õ´Ó¿¼özõþ ¯¹×kþzJו/¯ñSSÊçNp’ä3<æ£ÃãE  ½|f«‹ÑËsò™mž¤HžE&ùÆ,'�á¸�OÇ}ùî—çþ•ßLªÿÊoþŸž:-Wj:±·}FœÍ§Úv°2ý8`ZÛuìµO"g9³t_Î*Àœ™•¯a[z#ó…\°öÔ¦¾}D Õ8÷ç3¦\CÚíœRÂýIé£Ã;66KþÀ’>”³C^iûG\­/3SÑÓ~ÍüÈÛιš)Ö™]-¥o³Æ éØÂ—ÓóîÁGàuçž¹¨ðn§Š£rt{¶�›fbµžÏ¡ºê.£{k¸ýi ÚrFØ‹§8 î]f ®ïÈm«Ý¡¶õ0Ûû^ËneVy,SR/ÍÇ\jsºèÔÚO/þà‹,©gq«SÆŠ„N½åêr?ÅvÜÊšŽ›šÞNÆÑǦ¶«{¤b78¹û®†9©‰�‘åqÛChg¾Ÿ£´žsàÙrjÁ\±ˆ<AHšÇ¶ÈŸÏXŒupkB'u·†«Q®áµ¥×ÆêÕ†�çhÇðRßñ´÷‰ Üåá‡wXÛúÁz³={n=^  +ëŠà7+P�䆔LÒ˜¤X«T%Ç 1©ŸD¤b;/,­âŠtjXÛ�•‘ºI0*#à†1QIY¸#ÃZötˆ^©¤±#T‰§©àçœÔ\¬¸ˆ ÃåÙl<ÀˆãIzf½D$LŒ`î1 ^άàŠöXÕ�Ôy|•; vj!@]""ê&mrf(¼ÓÜä™/¹…8ˆ$R›‡qzù& �ëR'ð3–ç}[± XfÄý®Ïýðo¾š“Æ*eÛ|jSØûHt�áÞœø'eÀñ6&ÄÜŠÇ‚ª¤‹]Ëç´që‡ñsù¸�™®|éAHÀ €ß G¥±}<Ž˜Jäì0_ÒR’]p-ýf„ÉÄV%(v-,Ä�ìŽ=6!YI×�ÕC¥ 4'`ní´ŠSy[ÈŽ.ЛÛЩ7R¼aMnOBä<+¦¸,ï×êDª­”…²€A6˜µñ”à�w=Q¦ è'ˆ1l¥,(ÙÈ„ÝÒìÄ ž³fŠT"Õ{›dg $Aƒ{¼×=M¥Ä2)+–O'Hp ÿAFžwí¶EjÈÉɧI…ti–EÂ{.è÷>Ý,,Ý<A\Æ zv©©h'ð‹É•¿5“r™º£÷FäBÚÇ-;„ËEôÚ|�„3s#«¨Æ©]è \ ;`·Ç¹À3Ðp< œr¬›n~»²MæyyêÖR2ê$�CM ”Éênä�)H".¤6´\a¹ìlã.`õ‡#‘6ÏFãcp¡3î:îÿ¶Þê¶À?É“n…9E¸'5dvâBv;×üoP'„®•�*RÐV ¼Ú²a#oÞívÃ#0PS6˜w|yX,Æ#„5·jýÈÄñVÍçÞkÏ0A©ÑÉ(‘(TÕz£Êí5¬¹d„ë–àZ=o?ñºq l‡*Üq”û�„qÉ?¢Ž ?�*’÷¤\ËÀ‚%‚J| †Ãš¼(8ù.meè³'u¨DL $FM¯Ø %‹b„° Ȱ–)´„ ®A`,d)“K„ ub7KÃÄS½ÌÈ”.Hp«ªåWÍvI‹§Œ! €½c ¶¬c ‘7%"T0>¨jöS½¾*›VΛI2ø ð[u¥°Rtr8�@„ ò�pS�€Ÿ@´Ô‰ Qê—3Ïu‘ñ;"ÆXSêR%‰ë[º/ÌZº7WÀNƒy0°d| _&1]©Ç ˆÅ¤ êÊ0ËõYÔòÜG˜’¯¡£©¾ ãnÉ€ÄB>à|¸Ë”.á1;;>0§ôV§8TÆ…(¨dw”C(¡dn˜9%›7Dœ€'P�/Žoa‚–´w¢pÇ [] Ê"– �~ÝæÖÉp“¤ðw:5®P’‡ VDuO ]“tVÀž ªÊˆ£¤²#£§’!S0&l·YP­ØÔFj…ÐÕ2 &¡1�#<ÞZ/nÅ<.“”è5'ô„\"©aãP¾ A 0éI žÌ=H8I·A�Ä&H°2÷DÑ‹6‚Gâ³¥'1ÃNQp¨T®MþÑ$Dg¢žM0æ^¤ˆ?ýŒÊfI_Bîcª^…²ojе*ùr†¢R'^d!1x)¡IW…Épµ0 áé0ú]4V%g“R[ŽR„œ‚3¡k‘Ð1READèjÁP¨uv�Æ”‰íÚ¢ÎQûeƒ·‘ù6g E¬Ï¯(Khó.N:ŠàôÈضo¢\¯@^Y7*ÏDXxõ¨ihi *Ji�i 5‚ ɧ¿"ÖîÆÐVµÅ ¯¦»À °ýbØ?~ ”'L ²µh¤0Qo–z„Ì�)�¬V%ÛÙ¬ÊíÉ£ˆÅ�&<å¬G˜b €ʹFG ”#ië,*W…FFd¿5—ôTÉ”±1% ôD»,Ðñ”�ä%< u¯ðlV]?pV ]`p@.áé± û%= ~»Ug‡‚ª�§í– ÞñÊÙhBÞ‘´D.KH棧."ds"AdšÒIz �—º¿/“À!î=f0”JÞï%*)î»$×TDaÛ]¡_w†È�²pjD}) ðƒ ³}ó†ùéE4d³‹·{«; M{F¿ˆRK¢º'ˆÝ„ÌÙ®�¡&¡ì*)(]�çf”ÂS7&”F”ɾš¾p¢©¯µ  TÔ[(fvIìI+xYjMEði!€ 6Ç7Èe �,Xe�HMï!s>—jQ��ntß g;ä8éHøIÔ“äkì̳Ŋʻ�R„pkÉ7]Y^±Ñ!õU¨ )!Â6ø‡²AÆíÃuÔXP¦²âè2RIÐ2p Ç"2<¬ >p̃;¬jF|86œoªè!›·éo¾šo? ž�MéRŽUžÇžÈ¡°IÚAž§ƒJˆ„"Q„:�€KÂc¼³�ë]Xá£ÅdÑzÔÁAAX*Jˆ.éêVÈà¢�áÙAI—I„ЫuWÀDõ(d?OwìÇ:ë¥êÔý«:„µàâM™ 1TÞ=vâÍÏ['^óÀZ$ç©möö–nÂ�ÈJ”y ¶_7”J۩Еý ÕžŸý8ÿHBúŸ(Ïu®#²_I·Ü-/“xÓ*’˜bt ²Èš|ù6-ÆûuYjëf u„Ú£>¯£ŽÑðï-ãÂ#a¸A]3Ê>ë&2O„!‡ Š�-æ*1õVùP˜ú#S .Ǻ�Rë0¥éé(P‘­(lGø-‘™€¤ÇiÔ”Ëb´œDMñTe*ºîü©»Š4†E}ÈÁÉ)Õ*%S(¥Â&\í?8«ùgRK©Ýƒ™©{ëõè›ë£=ÉOËu`d MòYÝ··<]„§È£ˆªø–ª{Lôô`¥X¬‘eç9x1rfLW=‚6Kæ]é Z`ï�<ÿá)} Ÿ˜T@…¥>¶™P2¥ÍÏ�¬I¡ý­JáôͽŠõ'µ =ú|üCvOnlÊãáW¬˜7XP¶a<TðÌy¢ì 1êÓÓL­Y?}"ô�OÙœë½ñgÞ¶7»éjÃÓ`¯m‘~z#„Ž7òŒT f×%^)yê¾Ý|6Hžý®E{.¼x¼^´C=4%�Î3œ/ãñ7›ÛO¸3o‘’€Vr¸Û# 6• þ¼;ÿë$Có³ÙX ô@ù�ŠR'¯å"t`}p|(u$úÛvY<à‹y@‡=OáZÅ!°BC(üêÛUpHoA@Z*>aû¯Ø�jR7²$ÔàŒúvwÑ•#ŠÝczÿàâ5^pöü4Õg,F»ñÂåêwß l(?Þ�ÌÈ5êØS0ŸˆW»Ÿƒ"òb§"RÆþŠI”vòX©.ÉHÔ/k£³Ì¾ŸV‚É`¡~?¨~uŠ’–ÜbÙn[w˜wwGñv£ûC>Óß®9•â$ÑÑ£���´óðòq_2éÚäyõv­áw(YøsÊÈ,©ôìÄæRèTœ€¡Þ£�Žšèñ}ÍüÙ‹I÷òÜké^ˆvŒšt=̉+�˽>]¥ùiÝ7ƒ·\Ø5}ž¶ž_[õ¬ö³¸¬ÅáT‹xºU1<Ïú<�yˆ,A û,û=ÖÓýêg |Þ|oùx2ÅÔU ÉþÜïj á³Ì¢›'N7m½=�±¾n‹äžñõ ªEÐ0̓ ¨^0ž¢²ìÅ¢¿Ãñ!ãêuÐ8Úæ­]ÀÑzj½·OËðEgûÒ2©Z¨Õ…:{>¶½ÁùÁ󘙗/_x&ÜÀ5�}ý]SÓþ}™·P]XxÃ)¡Î| ^`^¦!.ê ¸‘Ñj}ÙÑes£føB.å¤ÖÖBænŸ–Gô!6· d·ÆÐ‚% ŒôáâjŠ�Ei->ÄÍDµ€àQwÐâ¨Ç“É[÷pA¨þ/7ê��úˆææ¨4uH †"ÿ)ÎU¤d öiŒ‡{… íÈyÕk5;Äx•æyü¬±½B= 5ƒ6ÿ ZõRƒb†­"‡Ènufdø 1*{QGwC”£¹ás7R-0Œ(c!ÚQƒ�œɵQËE½Ã¬‘ɹ‡d@¢0Xêêîed#e1APº�ÙV5ÀѹÐàÙ8T* C® ­¸µJOÝ(“7 ¹XU,îï‹”=5„R–è±f«÷ÊgŠƒD 2}ŽÕýÅ¥Æs#a’öŠkH<¢ÚéU°ÛÓÑð£g¸ºŸË’ö¶ôÛ¬nM‰—¸²z]Ô>õÛ¦*XÖ•öy"H‰8PF»?s¨ÒR�X.ê(ˆà‰‚~Á�‘P#Œ¨ÉP´³f–Æc‘ˆ}…,•yûÃÈyÈ-dAVsªêÚä ‡§›Ú¡gÎ2ÐÔF–G8Å£5ÏTXtUd«{»7´P(�Çüчñ°Ï‡!‹ïgµÑyÿ$‹Âí$«-¨w›ÔBÀß·º«¤zqàKï·"‘·ö µVLÒg#75ù¥™•T ßRhQipÚÜ‹¡Pa¡žò¬“«QIØóB Â̧÷_T�¿¾Þ Ͳ†�,?�ýH ´wnõaešg+Ìw$êÓ3#ÒœCZ– ÖaMÝ#“ގ¼$²g"“ªuZžçÂOÃk¶TÚ¡J8¨°!êyÅŽí)x‰#wIñÁ¢Æ.(”]TQ'Q› ‰Ó0Ö�D2œ¤ÂlšH£,.›—‘%nnûNr¿}å´H¼Tg®—ê|!Wi[è&ðºõÆv‹Í¼ZÈ�„¾A—„…,—èhp ("øWv®¢ŒSD·ž‹Ëê�ŸF�ÄI˜òÒ×Û-Ž¢ßO� .©C»fRé¢ì°<<ÓÓ@²g¸…cᑉ? ©®Ý40+ QHr+ðLø¿àš$Òî×Q‡dN"2!ˆt6…Î4DWõKWàNá§r.j÷¸V\²“ÐAÄ¢zAp2à×¶žÄŠ?7WyMÌØµ·¬¨à#ò™çíÔ&[,ä¥ ¥8¨% áX×Dÿ;·MJ£iKdƒ1 ŸqÌIJ–z•ÚßU;�š�öµŒÕƒg’X»}yMì*%9›rå»ûƒO% rgÕåb-Àú‚~kHà–Õôê³fCî˜�̱lŽÅ ±Gêj†CÂa§ª-eW{Iê‰Ê[MeY£"+�ºÐkx�âõO[öqFr�8HjõMuúH�E$¯ñhE$Ê} À°ÑÏ€Z3ÕØ¥þà‚€4ø`´�jQêÑ-ëÕ#ŽC^�¤luŽQÕÛÀ¼¹�6¡;î´t+ïÅTø’HW’V›¢T6™7r±”xÂÚ“…äÙ¨ä2ÍYŒ¼˜¯Ø¨6 Hk–±Ú}bn\—¼4â°p­v¦Ó¸€Õ޳vA¹·6[ñå±®ÕQQ´�‚T¸ ñ”¦æêÚIþk÷@¹Åo‡�kD…¼£Œ_Z¦F¹×IEAó(°Z4ó¾ •Ñí;«ÚäA}g¸œä„%g T.Á™;D[{ÄX’:3Ì¿o?f¼“Q´�ÿ¿-ëÎeÊÛ‰%û® Ú�JÖÌÿþÂ4„+ f@5Ê�–4%Ê=Ù ®µG®\Éú4¡bvƒê ¬ð£ �¾E¸!f(SÈèþ뎑ô¯½ýç_ Ý^ �2ŸÛ^µ‡üo€M‹Ú éïHÅÕd†´I¢õãr´Bu¶øëÒ*tõYÏ32´<Ü5ñÙÚ²%‘�®ä5£ÅƒC‹ð,¶j…ïxYû/ã,T„6�@/`r>ÝtàneûJ^þQ9\VK&ï˜4QT­&àƒšÅ ¥`yx¡®b©«Ä ‘-Ù¹¶Ù¨cb®98¶®¢‰�”y ’s»\õaR¨>)9%ž'Ù6Œ—÷ …9£Š×Àƒ˜´%ˆ�I`ÉìYJ´Ãö2 @¢±Š N¹?™Ú(8EséUÜmê[b%O6·Š€Î¦Á¤Ú,ŽdfJSí\Ê Ý§à>0ÇXØËUÕ€ÈuHO^ç¼4?^Ò¶¾Õ°ÙÝ�_�L�¤¼¾ü\•K‚`úDL‰Í¢”2v×1\ÈÝÁ/r]W4­'T©{ò,i‡æ|ræó _s}¾ó1Ú;„ïäêT›Q𵃟0³®®þà,ÞG†.m7Q‡´aê§:é59 }2ÏŒZTß »FcÔ²JõM…árÈjC„�Àa0#ßËÜV[%Ú×¥R˜ o TÒF>A/&Tݼ$ÞQEB¦ž�3Š6Ißg›1²ØiŸE`A¼k(Uã0Ýâõ‘ÑA;� ¢vù Ö�§5¶JºJHÉï5ÖÓ㽄¸·W[ª6q¡—%…»{‘GI¥LT€g›'j³`Ž„'0x" ¬KUðö�ý݃«[gêOS�Aµgp.°H1é‹BX–x§4P’*(çAÊ~9!a‚fi,„ðlãøhI¬ #iríí³‡8�’ ZT2ÕŽè”×¼Ý#ŽO~Å7ö—Jsíö¥á=`Àï$ïÏ9ž¹$�ÚŸDò|ü’ô_’·TCŸe»}H`Rí¤‰d]ͨ#´´'éêÄ}�AƒÅR]-8ür.Š(ïOzš âÌÉÖ†á'é½(_ÀY;¸24ÚC©�Ø]áq*ÙÚ€ó ¸œØbÑ5è6“!f¡vP?»¨k†$ÐxÈ,ü$Lm\QgÕÜÅd#!Xg5%¾hþÙÝ~Rþ´5�΋íEtÅ–¿À#„•—À…`(—sÖÑ–®YÈ(i¹t$ב¼¢ŠCJB•:HW@ïLq9N[áb/‘*ë5Ϥ­²b3ôÕ�ãÐV| † M&Ø¡¡x7a°A¨GµzJ aÝjÛ].æÑì:å 2=„j$ ã�ˆe�Ñ> Ù�ÁÚ¤64…Úµ=?(•\ŽÀÚˆdÈy'\–«³©d èÚ’O‡ $‘˜¨R•ô†ŒO‚8G.)§ZÖ`+¡N‹.…eh»w¸ÖBľ °l5vyD_à!CêñGI¾›„šþ‰Ö}Æ [Íøu ÚÈxoCüÕ`ŽÖ8h£$\‰éÕ+ƒ ¤ðHñ %¡­µ7Z–Æ™" šdÃS-)fÚ©�6³p«qŠ­yt͘ˆÇk�°W׆%J¦]ðixX ZÇ+ª:OY<ß�}ø-…À¾Ô_Øì+0È[ÐÔ!{TqÅ$3Œqù€ch…À\#�„¹’ø‡œ�7ƒ:­s¾¡f*Ü@ƒbSÝ‘DS-çÌ‹ç0séY»&"œæD«.NV „v!ɦo«I�\e�%E”,f÷j`K[”�j¡X vCéBêÇ-DW9x™ê *âB!O¨< £ú.u"»!Ûy*PõáápžàÞÖœy[OŒí ¹^u@ŽÖô4¸ÊÅ m8Üê­¹“K{Ù/àÇàI;÷ÑÆFuͧ={b'õW¥ŽÍ~KRAøóh>Fzuå5@p{¸Ÿl¦É9Õâ�\Ǭ0;°^c„óÎ'L4›§ª=cµç–ÐþàWHR0 òÅNj4(L‚`±ý– è,ôÙ€¸ÁœÕ@áë¾J…ð:ß-††˜_öçÒåTÌåËþ_þ[ºì�ú¹¶Û5þâ„ µRHõ°«;ò÷V*ûÙ|Ãù,µçQ›€qhK…;A,ö31þaNFËKf/æ+¿ÖÜüÖö;&}ÚÔKÔe.·Ú %¤'Xí !ZµÁ²Ý×ÞŒÆü)Bš'œärÂô0Hm^Âf »´É"D�‡]µï+ÂÞ©9¤5Ú’á®f|OCŒÏiõ56w*­�GÈÁ 4ºPnkühBca¤�‡<´q¢&!àD{¡g5ç¬)äí(OÞIg·½$U›¡‘™w·/öH%�äuM47hžK’ãuð/�*ñÔ+Ávé’€èò@†‘l˜(È0¤ lµrƾj¢í¢”BqùÙ}/áBáaMÍ~Ê/ð#lZü�¦ØâO+Mo£Ç Z#D*ÕRÑÜp9>¢4jû˜—Ô6•6s¿n5[Œ­—Õd(‹iŽldm§ª‚Cþ µ¾4Öº`lGÍV°:9hŠ&‰e?H…µÅ«XϤ­!¬NúH–¢WÁ0Ÿà®š ­a!£Ø£ ’ "cƒD1XÜ£“B�ò·ª&é­#x„:$ö™8†·ët 5C#Å{Öå�uR†€°ªÍíbá�Š>¸C;¢ žýrÔ‚¦"«^'êÔÈ¡æ$[6:í� ‡�ÒävQùÃù:Ö³BðöYP¸pÖ$l†ÖãèE<¤Ž4oš¿ fÞõÍ€,tãÒ ¥¶n®Uí �ôÜí{$è3w´-®=—á£W"@k®å"þ¦�­*ØÀ�{ b.)æ¬Å"t µƒO�l;Ãq†Ä&jP¨ðª¥�£V/¯Fƒ6Û¢Sg&±zðe=Ÿi¸ ŽÈ¤Y&üqyHÛ\ª,F»®çmú�Q»—M?»Ý÷¢_[á “£�ãM@Rš�zØúEBJ}Øw3è¯ö‚�ã6?ó ßqÒ(QiumV#œŒŸ±¡ï]… ®ÂUŸ®‚NAW«¡rBe˜¬òg…™à€0&®¢VïÛNÐQ“!¤døAe‚*#ÿREq1B™÷Ìß�‚ly�‚�9hfV« Þ�ZñM'­F^)Ø�ð‹“ ];*gµÓ¬ùƒXròîõ¨Æ¬öЍ †Ÿ'žÄu`~ǯYÍsð|XíÒðyÜ v³¢¦‹É5Gè ºzSáƒï!&¹¦êˆŠ{Çס"CdznOpÝ¡í%Á .n†ØC`Ô@X�¾��ÿUs;Ö(2Ú‡z‰1ëÔq¯¤È‘Úu&’û1Ãì!¸S @Ö=?¡árå[“ÓX"l“uÜM2ÿ$ßãG|Np¡ÚΈQ°vkbS�&IÓø.l­hðM[ÎJ?ÒqŠ_’7Ŀׄð†QèHÙª!¾�;˜R´ñ®§‡„Ðu#1’B{:ׯÀ¼W ´FÒ>Âó™Ûq/“Xw·–$G <ùGPp�Źß Vƒ]ðÚ‡OˆNâÿŽN¤;Å RôG&ó½ý¶Õ~+S"Eô Rý :+¹¾…ZËáP5̹]~— úmú;ï4î»Tzßpë‘bœå­Y4À½ öM= Bïã1j*£¤¨°¥ÁÇ=a%&7Å\’ÚÉ@YðM]gâƒï’ê ͳ£ïãžÝ4¸ ¢*V§JšW³¤��õ4_ø«#'cwÈ¡�Ü隀jV£ÒûÉ‘; ˜€(Ú~£úÃ/GN(Gªw®Úù$JÕe]5H–e*¯m©'o;±ô9—ÒÉ~@oHƒù{Ì�Ò{-p…¬m]¼Ô"›8Ó@HÔ–êº •/ÈFœwlØh’xÆ{`„Ǫ?�‘ú}›Z»ânÒ+ÎlìÝEoä!/SVTÝrª«¼Žf„mtMŠì;ЖE¾ùŒL1­Î¡„æ�Ó^FóIbMjÈÛT¤^'ƒ2|«"€tˆÀÖ»Y,o×ïthÈ�xx¿¬ ± [0iÔa�Úšºûòj}¹S�W>M;Qþ×þSž|.+ƒ°>/7í7ÓøsÐ&Î$®¸cY÷ˆ�}6þ4m$—UÄSÎÏ–+ÁN*�yK]zè�öó‡JGVðD¬tËA�lí_&èxÒ¤lÜŽuÛÆD0Ô~Ì¿%K¶k@Û-±?RWÎU¿#ã˜� 0«í«¦]^r -‘š¡EpK‡Tƒ±k¶á9c—Ð!wGŸâžVдÝáÀ?CE5ñ ^Ýþ1a‘H`åí‚+YV[øUZ±8%š:u‚“\û*M^¤ˆeˆT!áW«V €å(Óä7Ö Î8ZœÄªC{â)£ ƒŸ¦By4sG€vÞ;3!¢6bðûXøŠ·u¨ÂæÖó�u‰‚ {ÏÒq!ÀMíïm@”Ó?$â5,«C:E#t”, `�‚& ^+$X�Û…¸°è‹jîpZ(níT#+ni(—5FÕW!ÕŽŠzf5Vxèlüéo¿öxSÒE,âPGþ¬ l¿ƒÞ`™°àA&kg_N~oJ"Š©2»äO5M³×D&9+ ¦É5÷T¹Âp¨ašë~N®àC��"ì5§ð9/4‡ÑlVpš Ü¥.�¿¿ÝLd¡è¡|t¨‹ ÊÏ.9« râ|C×µ­ v˜ۨÇ73´Òúî¦þÇ$îöG¹›zù° J*¶Y-=ý µ÷©p¤uM¿ å9µ$»P(\m7äÞC7% ( _%¶ßG\Zgº¼�qÛªJ«¹°¼T^KÙËà9v9:¤'0L ÿ¬ÙA9ÌühÍ$`ª‘8‚Hä.|*jm‹êw&ø®y¥ ý½t·ïËÚzÖúDžÂƒÕHMеÆt60†”©§¢HæQ´üCýuœ~dí�>JåüN)5mDNut£Š·+£±~H§;íÆ¯~œî*ª ý'ÈÁlÍ8�>ŸSåjå:/Zƒ’ÈjK% œ×q''Êu€ ¢aw�iÆ{{ûR•`uÆ.ÞßJP3î_¨]âðìd<ãðÞV¾Íöê7t�qÄ÷lÙ&ñ´) òKøc¸eU›æŠtŠ‘z¡._›uì–0ĺc!+Þþ‹GŸS¢A•B�T; Ò�jš:‹ÐÔ±¾Và^T"òÏ*:yÄŸ8JI˺S*NÃî*Î� M£×V‡>Þ´éiÚÚÌ.>@¿ý#Ãxï»`Võ¨¡‰óºÙŸÕô–¶ó„:6®n–$�]©µÐ[é·Ÿ!&©ía”€jÀ3îe4õ±ÊÚy~�‚ëýîó�$µµú»4)b+K€(i€RGˆ`$€à/ô¹+ϸžz¡ž…:ÄjuÖ'g8íjëp]²çN ©®ÝXLhˆêVÞõt{ÑyÄ ¥"q”ê8·[6gWšNýF�CáFdUmŸÚ4¬ñ VÓÓÉú¥Txòt/îvî¢î­µ¯)j.êWŒlíһ﯃d*ÙŸõ D>²5y'„ÊG§1"�“ÿà*¡†"ŸýØ„gÖ™rs^s"ÃHóyùª0¤C§ÅRåÁÁoµ ?| S„Ÿ¯5ʱ”‰ªªöÍŒ¸�°#Äï6�L9²Èg%æ¬÷H|œÇø~Ï'M«ãd*cx(ªó0ë{^]¿¥Õ¡&‚YU&¾aÒâs sñ -¾Štèùy£NyêìüB�«ßz.BCö@ eâeèºÇÌ®ƒ‚ú%j²öÝí�ëªE~´{òlÏé×蜎£¦ŽéƒÅⶦd zû««U_µ[”•Í•WôIU¿$GCiÜUŧנVÄ#Ò”A¿Ò[&Rg¿c˜†‡�¶vÏ/ù9ìEy#üÍÿApòAD¬„iCCPICC profilexœ}‘=HÃ@Å_[µ"U;ˆ8dh;YqÔ*¡B¨Zu0¹ô š4$).Ž‚kÁÁ�Ūƒ‹³®®‚ øâäè¤è"%þ/)´ˆñà¸ïî=îÞþF…©f×8 j–‘N&„lnU¾"ˆô Š˜ÄL}NSð_÷ðñõ.γ¼Ïý9ú•¼ÉŸ@<ËtÃ"Þ žÞ´tÎûÄaV’âsâ1ƒ.HüÈuÙå7ÎE‡ý<3ldÒóÄab¡ØÁr³’¡OGU£|Öe…ógµRc­{ò†òÚÊ2×iŽ"‰E,A„5”Q�…8­)&Ò´Ÿðð�8~‘\2¹Ê`äX@*$Çþ¿»5 “nR(t¿ØöGîͺmÛvó<WZÛ_m3Ÿ¤×ÛZäÜ.®Ûš¼\îÃOºdHŽ é/€÷3ú¦0t ô­¹½µöqúd¨«Ô ppÄŠ”½îñîÞÎÞþ=ÓêïhÛr£Ä.é³bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä(ÔJ¬ÊIDAThÞ½™{ŒÖÕ™Ç?çœßå½Î ï à Å ˆ»ÈÅbÛM³kbu­5XC¶Í†Æf¡Ö¦m²¶nlM“ínÜzÙµdk´E�”n¶* n‹hq‡‹3Üç~yßyïïrÎÙ?mŒ¬ îIÞ¼¼9—Ï9Ïåûó™%%]'OræèQ† ÄJa¤ÄIÒZ“ÏdiœÓÌŒ¹sQžÇîÝ»ãW^yåžþð‡¿ìm·ÝÆÎ�;?Yk-7näÍ7ßüëµk×þbîÕWçº:;éÞµ‹à�vÞ¢'Žö�E¼3è¨n­”Î$ɤ©q<·Ñuo™‘«òs3g2éÖÌX¸�Ó§OóÒK/}ýúõß;ÿ¢—4Ô¥NH¥RìÝ»÷s�<òÈæY³få½±‡Þ-Ïá>Fooÿöã}=·êèøÉOvî|þÅ^x)²vÇÃ?øÁïº��}®*í<)Ã(¬../wtr: ˜¿x1sæÌYñ³Ÿý,ܾ}ûî9sæ000ðÉ …É_ÿú×ÕÒÒ2­½µ•½?ßHpöl¹­¿ïkÏ{ðí‘á¾ÿêîGFFÌ?=ñ¿Ù¶ ÀöêJôºçŒ,¯ªÙñÓS'uU¢ï:}ºúT’°`áBáûþmƘß‹Å÷ªªªèë뻨óÈ‹=ø¼yóX³f K–,ùûÆÆÆù'Žgۦʹu;ûÜÉ«,<é*ÅÁJÀ™3g.¼HÇqÊÚpc6{ä+;·]÷ÖñÎ?¼ñâ‹lß¾�I“&É3füú©§žúdLÈ÷}víÚ5ëÁ|¦¹¹™û÷³yÓ¦Jç@ÿ—gdr;ËZóÐË¿ãTW×Ç®óû�L­›Ì¢†i•}}ÿ}®§gÍ´™33sZZð}¿vÅŠ#uuu, ô÷÷_™X°`Ë–-céÒ¥�655Q*•xu÷nŽu�{q~SÈeøék¯^ô­mÝ¿�¶R‰QÇ9ÓÇߨùûßÓ××GSSÀ7xà.Ö¡/ Š"¶lÙ’]µjÕgóùPÑ:×:<ôµ…·Ü’µÆrbÏžCÓ{{_ˆŸÝú„lžÙ{õk».àØ§V�µÖ­©!só¬r°A`ã(F ¬”X)°JNTAùiL®€Í× òYÌè(ŒŒ Ã"¶8D’Îâù>ÂX„Öcñ|™Nƒ�„ïRi=„Hô*ÿ3çc„â¸&V*`-©ë¯Ç[´=4Dröœ0G�nGÇ1ÚʃLû½$ËVb§5‘®Êáe|N´v2sÕlâJDX…®säßú#gžÿ5 E*•ÆŸ5çškpëëQµµhÏ%nmÃÆÍ8þ0.€R !%^uÊó°Ž‹pd>¹LpÓRrõµäª2xi©$Ï|ó?¸iËRŒ1ÄaLyzC³›™Ö²€Á§ÿU,‘ª­ÅIùÇAº.N¾ éyP ™0€!ÆLÄ3æ¬Ö’TB’J€¨­£~ízôâÅ4L™D*ó'i¬aêmMh­QJá§}ü´O¶:ËPU–\¾šÒ¿>A±¯—BÓUcûYPŽÂõ}¬Œ pqy@J¤”­Q”7( ôS}ÿßâ/¹‰†õ¸¾ÃèèèÓ†‡¨›_O±Xü Lvvv¢\I]c�ü¢È|ùkèwޱÆ`’£ ‘Nƒ`Ì„' �FƒÑE$qDT¡»­•§þï–[(L­E:’ èééùâý¤÷~rêèèà±Ç£T*!•¤fréÅ7�ºo-¥w�bâEX�€�¡BN @pÞ„ŒÁF6Iˆ‡pÞmEÞq75 µ8î˜%f³Y|ßgppðCUAE<ûì³Ü~ûíär¹±Í•¢PW…³òS˜ŠF$1ÊZà{¾ï1^a3.€çyxž‡(kqŒ%îíÁ_ýéÙ³He¼´P(Çñfó¾ùå—¸ùæ›QJaŒáÕW_E8‚|Câæå;;ÎûVHœ$DaH…ˆ¢ˆ(މÃ�¨\&,•�ÆþÙ-¤óéÔiww7‡Æu]òù<Åb‘$IBpâÄ Z[[¹öÚk™6m@)ÅŠ+$;)OªeCÇ!‰±IŒ¬;Q'¶œ·ã$�(„ôž}8³šI¥ÿtû;vì`þüù<þøãôôôP*•0ưgÏÇ¡¡¡�Gy„E‹ñ�ï|‡Ö¶V&OžŒë»¸��DG;QÆ ŒÅS®ãà*gbaÔs=„ëâX‹Ô‚ ¦¾7å�Æè@ãe=î¾ûn¦OŸÎ­·ÞÊ“O>ɽ÷ÞËwÜA©T¢½½�¶¶66nÜÈÀÀ{÷îåúë¯GZI8TÁ*�F[KX%)—‰¢£°fbcfqPA”Ë$¥"FADlùþ&”£h^Ò²/ÞÊÊ•+)•Jlذ� 6ðè£�²fÍžzê)/^ÌÚµkùêW¿J:�Æ$š7~ûï¾q ?Ÿâº?ŸƒuD�9³�H!Aª‰h­B` &ŠÐ£eDWÊsø›Ç×~DMe³Y¾ýíosç�w²e˾ûÝïò£ýˆ;ï¼“æææ?Ù®£Xz× –Þµ€³ûÚÒ’F«±§> �N#”µ ´FUB îí¥\*“Ég.8oîܹ|ë[ßbݺu¤Óé�-£0F !‰-c ҂Uäó@%Ž¢�J±HT,�1“rض· F£qCpUUÕ¸5nX®P9yßwУ£è ‚Žc’D“$zbR)”ã"¬ÅF"ŒPM-˜ç71Ú;@ƫ´¡Ô3H¸/¹ºº±†XcQJŒ÷“È|<ßÇÍåÆ *!~&ÃЛ{‘¯ì`d¨<¡Kq°ÈèÑw‘¯íÄ©ªBù)¥ð×õð\b>&1‹“$8™dM-©ê„)ÆD¡ë ¤cˆúûIY¦S»îÊ´µµ�ÿµµµL™2…ûî»�mÛ¶I!„XPS­�–±ˆTcþ �e0v ©Rèl†h ›d÷)â DÛ±®… éLåzdšf¡”ƒ’JJ¤r�ŽBz.ö|h•©EG:7\·¹w¯\¿~½Ù¾};¾ï£”bß¾}}�ºº:ÑÐÐài­ÓBßZ›jï�¡.“!£$vpˆ·¸ÿ‹Âþaž�±ã8!D„RJ}ðàÁ�¾€ïû"I©”’ZkW)å3õ*ÿd<¶ÿÈ‘ê·{{\!„'­u¥Å®µÖ±eÏÁ±Ê`¥5H‹c‘LX„0ŒA˜t%ÑÉ@$”ˉ$¶[!âÄØ¸¹º:Z–ÉTö+Õ… ƒ1ecLì8Ž padlock icon lock security secure padlock signs_and_symbols AJ Ashton AJ Ashton AJ Ashton image/svg+xml en timekpr-next/resource/icons/timekpr-client-48.png000664 001750 001750 00000036534 13716566163 024056 0ustar00bezvfedubezvfedu000000 000000 ‰PNG  IHDR00Wù‡+ŠzTXtRaw profile type exifxÚ­œY’$7²eÿ±ŠZæa9Ez½ü>W݃Ì$ù^U‰4“™1y˜ÁÕ;(îîÿý?Ïýë_ÿ >Æêri½ŽZ=ÿå‘Gœ|Òýç¿aÿŸí_û/}Ä׿}ßýñƒÈ·ÒŸ¯lóûúÉ÷ËŸ¿ðs�°~ÿ¾ëߟÄþ½Ð÷?Lºsä“óë ù~ü|?äï…Æý|RGo¿uÅÏÇý}¡ åû÷ý «}>èk÷ë7rc–NáF)Æ›BòöoÿŒ }þNþ6þ )ó:ŸŸ§4búyV&ä·Çûùèý¯ôÛ$ÿ|æþ:û|ö—É�óûýô—¹¬ß9â“üA(ÿ<ù6Å¿‡ÃwDñ÷¬ëßçg’ßéïÝÏÓÍ\™Ñú�(›ìðs^¸˜òd¿VùÓø[ø¼ÙŸÁŸî§ß,ùñÛ/þì0BdUž 9œ0à ×>î°bŽ76>Ƹc²ïõÔ∛Ubµô'¼ØX±“:‹µãu,]Nñ�±»ï°ûíйó ¼4.ø•ÿñ�ûß~øßüqïmMQðý�¹b\QqÍ0´rú—W± á}×­Øÿüù.¿ÿ%~ª™—iš;8ýú\b•ðgl%[çÄë ?)\;ß 0EÜ»0˜�X_C*¡ßbl!0��šŒ<’‹¥Äà cN©F×b�º7¿Ó‚½6–X£¾ 6±%Ur«+§X¬œ ñÓr'†fI%—Rji¥»2ʬ©æZj­­ äfK-·Òjk­·ÑfO=÷Òko½÷Ñçˆ#��eÔÑFcÌÝäF“kM^?ùΊ+­¼Êª«­¾Æš›ðÙy—]wÛ}�=O<é§žvúgÞà.Hqó-·Þvûw>bí¥—_yõµ×ßxó�Uû®êßþü«¾«m¥ôºöǪñ]×ÚÏ%‚à¤hÍX±˜+Þ´tÔšùrŽZ9­™‘¤(‘A­�;A+Ææbyá�µûsåþ£us¥ÿGëÿÝÊ9-Ýÿ�•s,Ýß×íVíˆç¶­Ø' 5§>‘}üüöébŸ"µùûÇyϸ£¥sÌÜÔÁ×·w~¯·uÊ\å€ãã–8÷‹ZþÚHŸ·ãªqßÓŠ=ïF�³¬Ööno¿YZR�k··Òe"rii¬¥ì–Cnçœ}ÃåÉ™DFo¯�ºNroí£ëï|ê<óu€À ïnX$hÞ×s^\ñ!žÒæÜŲbkÖ\"ƒ<—ÅãâŸÇ#ɸ ¿s§+Q‘6_ÓK^�Ê1&@¼ï¹ tðÀ+æ»ÙįϽo©/å5îž!¸Hn‡Õ­F"“ŸéÌÉD–×À¬ ô�i )Š?kÝÂÂ(”Ã% ¦(1ǹvÏ.°ŠùŠ�Œ¨‘‰-ÌÍ€MF¯°(éÖ×Ù/Už3ða¶Q ö…4rq?Ÿüö±<ÅßA;x �Ü”ö`0�°¬Ci\Y¦ÝK^„y.ŽWƒ^Q#ˆ$X^‘a)ŒáˆÓ@œº60 r<å/±@¶ÇW;ëx."5¯æ]\ÎÌÙ"a÷ `3’¡³}ìÛ|:zõ¾ DaUF!o ¢­±†ð•†èlŸ¸4ï%î�:ÎFc$ †/›ÜíØ–³æHß™i,é„ÊØT®J ÇR°„&žHú. ¨¤ÖÊç¤K^Í™ÿ#C&ÍÓíZÕW&é‹ÎÜk3@qkîÁÜ>r´y Ä ùv®Â¥HßÑ_JÇÏ4Ëkq!(ô ôK Ÿæ€32¤N½`µLâ‚;³2-‡paZ ?eÉÆ©#?IÛ3×mtéÂËg^ŽK02ÁëÍüàä{EÒ©³7 ÈØ€ÄýPkOÜ9ûmâaøt�øµÍ£¶Ó‰k•te÷Øøm Ó]BKA(tÐù|VÑw‹BF¶9ŸààjšE€ÔJYk@�Ðï…,N\´‚&ü¼´—VVлžWœÀ/Øõ bv·B0œyŠ®?I€B¼9*£¨ú-M F¢1´|6é%¢€˜¹�Ö¢±…9ŽüS¯Ö=’•”S ïÀ?6÷O³íÕ3Bow�1m#6ålÍb¿ÎÐÀÐA�ú‘o$Â+"À‹¬a9sƒÏã9‡4Å�§TM“X&î'pc¦á( m‚/_ˉì Ý‘e�F"*½²Ò‹4&º7ϰZÀX¥Ï„èæœ dCÖ¤OP&Û;È�MFÔ�í#“¶+Þ,0ÅÐA˰'TT„Ì,‘ 0!ÇŒ®³*Òï&t·fµ%ï&A‰I $–²Œ-éÓ”M&ê”âf ÑŒèXä:BªdêëgO/²XÇ0œ»¥jÊëf-úi:Ìÿ|Œï$/ÜQùM‡d^è®vÁRR¦ö½^Ac,â.¥-‚þ‚d„ê@ã}S kôÌü°ŒDrsL †¾däÜ~/cÓÊ­âšzÔfˆ‹5%[˜h»'P$¢@¼^S­è¿žáWE"¾|:ÏûáÊÏ_$|'4í=ÍÈ3Õ»j½–CŸø×\0¨"‰Ã>£€®9×¥!×P$·Ä ÆŽÛ$ÄÒɹR[+¸)²1fÄúV'KQ°ºÌ&i01H#²“˜/¬ýâ§ø»%>&^.SŠËÖ—S_.BµU@þƒpä(š8IŠf�цˆä‡�áÙç•ãì?’Ú�Ôõ­žtkÌ<¨¬ëòY*À°Ì2$Šàba­ÃÈøŠàAÏ1# hÂIÄ ƒIØàfµôŒªèÙ<)幺؞„ß�xÞ§?#*wâ Eèö†çÁ/"}V^¬…� †ï8¡+]@˜,’º¨ãlÜFb`ÆVΈz2ßò û2ï$¬A“€I_5¯¯ g¨&ôêD*¬ 8Õ;òI Ru9h�ÄT± EDŸÏ==Ãþ×UŸr%¶–ÉÖ1‡` Ä'—”ôK  …t”Ø$p~[3J[äz�£ù-ojÈÑ"ZÞ„¥Ð=H¿Ì÷ˆºrÑÝp!{*óµ>!ÛPœ�ø@'£Jê-1t"€<ê„|�&H:2ª«ÊZ‘ÑGä ð�Æ@4N„°à޶BH²:Ì)höpl„"pèL„Òû ljL�p�Jï¯üBaHAB@à5ë4¯'@ÆÄu%É( ©"YÃ7HɈ$ÏF‘�l”òÚd¶±Ü @ž-tGÌ€•{ʈ{\Çu›HþÅë}ÒÇ <¦¯G„þ¤�ÜÞ ¨ÆAÖÃK¯#Å«5‰iG(ï‚ >—Lr6|€¼½<íì‰ûÖL"(èÃ-û(zhXŒùïniqq8ÜGxTyóYâ., ˆw!ä'¤EëV=–Ò®¥džy&zÉ9®B¹u3„ŽÞ†½�ýW·%ª-É~ÌÜ ¤Zf…ű®ÃŒM½NC^r”P‚«…ê9Ä„Úh‰ÏÌÜÈä?7ñ8†ÑAÚêôð2&x™1Ü¢[¸½Õ x.™c¼‘éº0�œGû��Á1ÆaÀ ñÊ’‡#Blà à�nýÝdÿˆpr®ÈïF\ÈÆš ðùÅ{¿éäê 9¡ ¸¶;ê,4¬&ñò�¤>Ô†Ü}ݬ'y ‹âÃÎhD4dú` ‚ƒGã+9ˆƒk9@ˆ9þdLdõú$ ƒ€Õ;bZà>icFLªö7Pé� š ­£�Ó È4[l»†)ˆw$&7Ìœ3² f#Ø`-$½Co ‰ý&Àà bÂ}îhÔ£Jù«’Û¸Dnw>°´ƒè÷ ��_;ì”È‚•¬bøÑöD(¢zÚáÙ˜'d8K´�z•¥V†ˆ(‘ÐCGŒYǯÃ%fÀýŒ¨0©8ìËdTp LN ?áféýòJk¢ãÈ�-,æ'‹³ø¯wð�e—hDÏ@t»p9ˆcó$e3i¨`9’9.zº†È_¬² Lñ9¼ ^“ƒk}‹x×SÙKÀ¸¸MRɇK#bКˆ‡•¡Ø_½_ñN‰]˜ñœIiÅ�ÇxyT´"œ\T˜LO>¥’ÄX+а`ð‰ãºÛ$Rû‹XI€”ãšD‹bFV¢ ζâÆ'§Ž©f¤Ý€4.Â[  Â#îKBM'¬}ï,Y®àjR�k}¦Žv¨H;õc1U0‚|ÑÙç�/ˆöHŠ‚¿Ä êAv ‹,–e SHy|Ò`KKב¨pí ©ƒ±®PU/AtD Óü HcAyxÅU È#ÂÐ0ð «@X è¶d#ˆïÖCê=ôçK�à*Í5šaž[ƒ¡ ¦Po„"–µBp ß"3 �3ÙÈaU$_Šh S¬,Dà‰n'RÆÚÈì†E:3nüY'J¶2ÂÁ¡®P=Š«ÈŸD†]5U~|6o�ƒo«Ä=’­ƒê‹û šé†Ü?ã�chFÚž1¿!š„¤a?ŠO¤ŸÊT¸ª'*ÎdúC3>Èàr,}ÁÈ­Îw01°å…ŽN¶´…fð(ÈQB¸‹ù>; º© œtå¥d9SÐkõ§¯Íê�=½€Î?¸x$…² ÓfX*?nP1Ëú mÑèða;•IÐ}ªŠ#5Qu(—}YœtTѪÝ=’ü¡RX!>Š‹  œÛqŒž×�†„º¸_šÊÑóÀ…Úg#ótýU7/™"ÞaÕV‹ŸRƒº—%…»Ìœ!iò’$†4ab…‘>°Dæ! Ò:–Ã�…x¿ˆë"±ÆeäBü½Q\ >(â8>^@^É!�‰Ò‚‘@ÒªfòÏEn°\ž9z�ñ žy>‚Å2ŸÕ•ž›Òsý¹P²Ê‹â£¡:  ÷T~ž’Õ¹ê« ®ZQ•ÃN’0fiµäï€Sœ$šª‚EÙàû�9X[L®Ô-kT_‰ÀœöÛD["Ôg1•«ˆsµÑpõL2°ƒ�2…Ú{ðÃk±6¿7Ž„ú!G½Üª7í¹´6GÈå‘ÍÄ‚¯¥JpÄ„è£è67ÿ¨b{™/ÿNàÝçv 8UQ ‚¬­Ê9¨ž�‡FåVú·í©eLiβ ã°© -¨Ò¢9±ÍƳ#´MÎêa M†Ë·´=³ “æ@z°ƒ‹†5«Æ5ËDtÄ¥F× DªÇœûù”ÂýãÖèkêç¨:ö™ðþr¶Â8ò6¡àÙx \1ý¯‰£1:ÿ^­pƒƒ_ã¶ÿŒ$Þ°DÛÛ�±”¤mŠLþžƒœ`¼dBûQ# ~)Ì.ŸXj»³5lÕà%lŠô nÿT]ÛÁ'HÆ/ÕN”¼¬Ë«µ)>'p=0…àÝ‹ûdÄUÞ2ù]ɬí]´ƒªDRÍ’ }wW:ĸ¬pŒ&¿G¬4^�s£3‘–ÒÈä1¦iÛ֮ɸ-T¥eÅ�|ÈÞU±½¤¢"©V?�¹gS£zöâ“qÛL5Ѫµh;€ë{Ì òt_E¥zr¼#Ô¡6ì…¤>9‡>ª,òЉ{c‚Û—>\£"£�JúTÐGÚ]šèŽm¬eÔD÷øVPg ÊeÈ3Ž‚M^x^=ÓÕT Έ=¬ŽSýq‹ÍÏÓ %×yb�â ( U9�¶:UK@duy}„Ê3¿0fãKíx�&Ý«mËY„ÚÞ%W_<5Ùl;ðÁj5B²¥8ßI¢Ôí«9•U#7'ü1A7™µŒÈf� ÷ÒŒCzq =8$AüÔE-öÔìcâ]ðª1¢>ñ®m�’=d@‚k‚¹G<ΤzIÀ¼aEÁ1<¢„ëÄž2µKئ¨ò9–ËWų¶¬º„21=h’G!Î$Z‰/"•‘mÒ̳.Õ2Ô[ôù]ÏóXd ƒo–N8¹TꎺҖ߬£ ýð3²£3V²¸lUTXp8U›’à5 ‚>Bㆪ”th ¸‚àA©lîV )îˆlÐòT¸j ì"mRª£læ‘&Ì'J§¸ÆÎ©M'ä�Ø1“šZ¢n­e„Ò”:p–9P~ûÔS=ˆä¦!¦æ�lÔ þhoá ë=è!2@®UDzAE÷šTà€¼«hÃ� ¨½è1�•v±JSû-‚“ÅbJnWÕC¸ÍÒ¿,ëòqçŽüîVY`’ÝÍ÷’ÒàöÇ¿.‚¡5 Š_'D·Èg´µoÈÌ!ID  2¾cuŸ)NU,qà/ùqÃG FÒ.ÄuàLÐxâ‰Ô Õ½)¦u ]œˆ{’âèö­½§Œ7Ûˆ¿Mû�gK¶@ž÷ò©Ë,B“�à%��§Ï8hUŸ‚Çßž„Ž 5W“ˆ£Œ¿´í™Ó­]›ºš 2Õ R`Ýn7ÅÒQ¦Åˆ{ÂC‚É~D!#úTIßïï—äJNí=4³ÚTðŠÒ†ËʲÝ$§ûÖe‡Õe™6T|~¸ÏxdoíUR†€®j`1�±q“D ëŠ|ºËhã >Ãò!Íí9‹™—·ª¬X:œpóÀç”Á±­ÒˆÔ5Ò­„'àψ"d¨ "ügC�±&b]Vd÷O¤ B0ox@ùÄ´6ÓùÏ]åY”A9„SW“gˆmÍ Ö$2H%âéÄÇtÌ 5¤ZAS<3d‡§öêÆÂF@éI½)PôDΡˆô£ím\©«/³ìðâ…8G_D7Aú1;-3Ò �<=z¹ÄÓÄ�%ì'¼Ðó&Áê§mTWŒ‘`M"6Ì*©—°�á`E‹fÕWÀ%íu3‘µsµ³+ºE ˆó€ åašâ5°è¿€¾´qãnÔ¾‹*Ós*ƒ°•ˆüγ¾¨–åŒ ™Œª0å£2Ñ€¯¥Ë¸JP D(Å=T#¶£j3\Aýp:•ªŽ ÿ_H—Yk<ècœÜ $ùÜfš¹rŸMëp·lÅè„ST}8ëþ{j[�ÛŽ!²WA·bÄp18‰X0A¸4#£mŒH4D´4ui�¨[Û67Fm:Ôrº€Vˆ$ ’–z�9qV9,¼Öbî'ñãÐ]½«ŸˆHF%£eÉÓM.¬¾¼,�Ž KYV“®W$dXˆê¬�£@0g=7]­ÌªTc!X¤³¢Úy5‹ì1lÚ±, œR¹ÐÄ'V& ¸!™9‚ Õ TPÔ­fºˆåWUm&àßÀ\�ÇÅÒà‚š¢–*ºQpÖ8%#iQ.ç¨W~FÕf™ªùI^ÜB‘ÏÚ°ºò2d‘6™²ê  }$‰jÏ ³´ëTÛQО;ËT­Ãó¥²;,ްî$BR£gºÊÄUÛ¥N#æXTõù­Êe�…¸mÚ^*3£˜7ª¸­p‚ö£ü§;냄šFa¡{( A¶˜í-=‰r0-ÙbŠà|0€(Á¢J'‚4–ÏÎP«©gâjS=“ÕžVÇ Ê¿@K(rí�læ©R:.oÅs/�Ëâ‘6„½S ÕlfjÃÚoú ±•ȵljc±w˜>¡óô‹å±~€%µ3Á^¬‹C'«�M»ëMj¿¼@a´Û÷§� a•BS.muÚ zšŒì�‰VetèüFÖž\?V4'gX½, QÁD]IŸ€PÿT]ñµ ˆ[;ËØ?Ÿš^EŽ0Õq6{í (¦FµLÕ©U•«™À–úM <�ֻᑒɭ1�Οpaæ¢`ék·†¹À/Ù†4½òôª3Š]iVÓ]ªUHª<³ x0BYz³©•..n©"Iª>‚CäÆ� YвDð[ÛØöv<ÂÁD©ßϤ2H¼DEût�¢”å_7Ž!\m ¾@DÁ�Šw'<Ǽ¨Âà6º²($ Y2½˜©e|ª© ÁJ©“ ÂaZaP ÝÏlŽÃ!èÕÅŽ`*­ÁX´è«>Ôžš“Ô@ÁBWµ"’ãEòïëpƒö}í®Ì Ba1îÁ!!q8_ÂR{ÿ@‹¥Æ µà©ý L#®p)W®êòÅ!ItU4�^‰¹Xmu;c—9à1ÎLø3X¿«ò mš ã ož ÷¹˜8cþkÖ†2� H§_³pgŠV¤¶…wÚf*aÈ–à, cûà‚Õuþ fírc1d+Òüµ^L¢µvá˜pSYïù†…V�CLkßê¨sr MµMB¨ ̤d¥†À“«�^­ˆ:êó“˜2¢Ê]÷ÍM2“« w^õ¬«8¢®p`Þ>vujmµy(ÁÒnJÌÄ¿‰›åàŒ·º+ºqâ7ßer›àÕÝL¼hÐ ²Ù)¨ðÂòó@�‰Lv¶†:ð�øÙRo:’Ò �¨VÚÏVtê…K*.?eio, 4C]¨Zd1°`æbUçvV*†£sL„'ô˜q_;/D• ¡ÅÓÁžæ‚íÊ¢s�T}º¶wP *&z,L{Sñ2¼Î0ç.< ~9' ÆÞ¾Õj¨»®^ˆ(”&54µñ<‘Û‰¬kðžë«”6‘NjyÅ—d•iT»=¬iÑ%´ãgE˜¾k­A1ú/ÀýSld!ËF½Yã�ö, 5÷OG!9*yà®¶Üüî&½I¼4;ZLRõÆC ŽjDÑ“¡Õw ¨mÓßʪŒ¬v�­îœù°zBT¹ªoê/ªóbr®Ã1w�wc’”¢êLÕÿlÅEÃX)Bƒ%ÜE_Œeâ ckµØr.ùJ>¹¶žÔvλ‚_:Žçï�×û辟hÓÉÞU(ç$(KØçª.@øZmYh:•3‚méãÁÚ„qÍÏ»{–º³-Ô©“êxqYI–ÅKm °#Òþµø™ŸÆMÖþ¡Þ\Ø«®ÇL {ܗȽÒ�ZïyÝ”°Äˆ§¡+D>»3A;®t’4 ×,9 K•³ZVKAE¸�j*~«jÀz²ª¿¥/ÛS£G»²¦—X,ˆ©‰�ä°Ô0y¹½WcÐTnH<âkIæ=ƒ�ì-¸�€LFe°)Ud!žÿvIþƒ�î÷o §*B]šÕ/&'¨@‚óºêahI‡ Û92X œ»í8¨³nKO6¾ mË{¡'»:Ý hô¨ÞRÛGÈjóz.U!V5Þ%Œá²S³û±n|4œKœ¬ÎW $Û¿r&8†‰$‘½ÚôYȦâ¤@ýg×Åý¶í¢î¼ªÖL»ì¤®C\öiÒR÷z�OâV+¼²I²Úz 8Öý,ýÉWÕ_«�t ^¾X‰ZeIž±‰ÂÔÓDs2Ø@\ß ø§\˜–Žï Ø´_K!t:y§-×ٌƻW]HY‹¬(j¹QŠ Ÿ¶ªOÓ�.Š¥�Ni‡«#¡'D…¡Qú¾ú=¦ü:ÃǨ©ÿO¥¹ãBýôç¿õÿwÝŸß@F¢]‘ƒHZtz:ûŠDTIƒÛØía­Zl³ß«{&ƒà{œl›è}¦P³÷mÞyé2�•ñ#kÕa¿Ô%„ïèVfî¦úOÊÛ((æNާ…½b}y Ì�Y6ü³s„ÿÐñBoÞºuÈ£‰‡��ó�E’VÚ±òà4q{Ô ‰ƒ‘W�š>[°ý­‚eä™Jô?ìŽ|ø ¶þªOj±yªm辊òx]³€M_ÍÀ Ô€•Æ-Ûóê;å)3ºõµ"íäæF±©oçsì.©© 壺'|rðe%æ½D¯Sˆp §Ë�j0œêÈ"ܘš<Ð_MM$iŽVW‡«ª•pWi:îiÝK§Öàê±5µ¯K‰;”ÒÔFêìlÝT [-¬(Äôs´Ù¹TçCnÀ¯-.@›h…jýQ]rEÝä§K:¸Ôu7ìÔCCŽ]{£=«)ÕA0  ˜0D :Kø¡Î›8y178>Ý«‘ˆÒV6Ym · âb|u¦PxUxJ°(¥Õƒ›Ö¿T"Ú6~S˜½ýÑ¡àOƒó?�¨ímK1=â'ªqä,,UWhnV,Ã2µ°k¼ù¢ä!dˆ[·µ9¡3÷8t¯êÈÐ7ª�ßOff˜NM ÚËÇS$U“ Ð9mgw’]BÝŸD[hp:ؼ&g£ÎQ$T°Ÿ)xtc?1WjÇ�:‹«FWí7)H6†Z�ØŸž)p ÏåÔÊ,õüWMØAzPAÍ] KÐIG•MÀôj ÒH@í• EfOÓ™/g�Ô¸“”YÕD‰Ã%x«ÎV©a/XÙYý!¤¶Ž­ì}/×:ʲ1Õ¸çH5îaf…lRÅh‰”¥èYõ}+è4¬}yî¡æsµõo�¾O`,€„«Ä¥ìcGŸ� kytìÅöu7ÞªØu ís>d“ÿža#v½ÅæNì”Â?ö<¹ �š�ëUÅ×Gò_; ÙÊ_'¡G‚½íEp^]:õxI'm�©Ž•MûЬ©YsŽ“tظ«j±ÄC—™‰l°5ñéNçñŽ×6³Z†>5ëvÜârÑr|aù°b!Ú†v›_„ŠD„Ô@8�3ÛjÁ½jäáfëb‹£ä.ɳÓ=úªèTÞ®zó…\tÞ¬s°÷Ð$q_?·¥ö9Kñ‚ê>ç�Ìx7íÕÛX×Ðx°?^ç¬éäŸ_hýî|"  –±6¦8–Ÿv £¡¯ˆ;÷?R38ù¥ó²\ú/¼šÇÐHrâfX*Í:iá€ñâuÆQ6‹ŽeÑqåóÕÖW„‚�£pOÝNU¼†4ìz_xšÉæ¢=;ùZhW™e&•nðnÐ-žW½‰¶��•ªhßBº‹ià·êð$Ó`BYÇø.·ãQú ™Ÿ#÷-ߎÿ³­NP¨+æ>§Ãj‰öF'd.ÒN­�úíÍT¯-í½.¼ÏYŒŽGP߈�<Àfò %E�·Óν/ª€¬#›$ëÇYÕáo�šêØBÍ8ÂÉé­?Ç[éuÕ„Z<¢†ÎË“î(�€�fí쟆—_XÇ}>iU�;ó–lÑ[\TLÏèA½ËtµA»§N‡AÑFˆp–"ò�òK-ÃjÀ\¨ @lnÍQ ³�fý9üŠ·]ÒÅU} !Û:H²àÎË®w?èêL'ľ…mRbâuÊQu|mï¥âz¸dÃÞB0¤E-êb……t¤\Ú_Ýâç©ñ ŸÁZ�Ϋ¾„Ç­U'È´ÓɨïÖ�UqÿdØÀZ“çíYù:#ë|ž/£$†u/þED¢·µŠÐ¢Ž•£ª«†•CG/�™å �°ˆê4±˜z_àliß9ÛÉÏ%I!K¥#POç¡ûÂø©~«ƒ.ßÐr2�kM-ÎÞÎÖžPÔî†�‚e:Ñj:ãGâì,.{6p¥Ïµ‚±Ó¾†?„WùU/I4l›J_]oÚQìV‡iSÜà§©å¾õEzé°„W_ç½þ2Š«­…9Õ¼¦Þ?lÔ­†JX˜‡ÖÏsdÇFwDsêB¯dû ߋ㽞|0…*�2w¨—´ ‹ÝŒb¶s{.©.?VX‡Oöw¼§Ï6¸Ÿ—õ‚ë¢:1*Mo‰À’f;hrA»zœ x]Å€"+¿†¶Ø êjªzv�ØvÄ oDÎl4fæÖª”kº–å ª0ê@~µ—ÑtvJÍì)Ýÿå ì¯�õ¢qMð~hý$ÜÕÅ$¿vªÚ1$ˆÂ<&uÇÛ›€è’ªí�X?VMov¡Ž Sø’šv%†ËR_8¹v¤F#ÄZµå¦…·tÆ¥ð¸6‘äÐzàT] kÒFvÔq_�ŠÄ_ŽV½Å„¶¦Q¤ë�õ“ï×îøÎD Np,�Ëæ¢:n èbìyÞÒñÉX�É&¿Fz‘òÑž¤]z‹…–:E8³º}¼…Uš÷§ß>o[RtþWG'êcX‡ç.! ¢U=æÙ3˜¤ˆôv6“–ÔU�ðÞä*ØfÇÿ?EèMu"•­*¤M}ÓžÇ�ŒÈNì‚VÔ¹€RÝ7TÞz'蟜û¼S†ºº´ñzu`¹J޶‘£ºá‰æJúbMq0:€p]NfôÖ0IʘïÙ·Ôˆƒ j¼Uõ ^EÃÏ©ÿb‡30ÈÚõK:Q§·Eö&!ŒKwÖIÒ©CÉPZÒ ÿݧ:ÈZefß]R·ž¾Ï}™ì¦c{<æÑ»ï¼øÙ1ÎßÍ`¿TÓø¼1É©Ÿ]�©"ªºFU ½£Úeàû`IÍò�õü…pz…™O­pßngb禨>¹÷¹ÃzÎnqeÕo:%¢‰£ü]ŽÎGÁ™±GB3ÙÐ9“}µ[f´Õ(šfògQ=´Ø?†ÓÀ*5Ò÷–X^7º !ÔâüžÎ“‡:“ïPÕwwYëy`áæéÀo)AÇÕa\‚­�¢1ê½ Tó_jH]X^K2ÙÙ¼tÌݹ^HUì� â~èÄì q 4ôJf�gZ¦Êhà€$×%©—šèسë¡ϬuÃÀøaa1«û ·ŠvùT’ïßù©èÍ'ªÞW òå�—Uˆàµ.0U]H«Y{Koi„SÔÛÈDɘ"̨ýcêïJÚ«ûË~zg¸ÿxâ׊#‘Îê„iCCPICC profilexœ}‘=HÃ@Å_[µ"U;ˆ8dh;YqÔ*¡B¨Zu0¹ô š4$).Ž‚kÁÁ�Ūƒ‹³®®‚ øâäè¤è"%þ/)´ˆñà¸ïî=îÞþF…©f×8 j–‘N&„lnU¾"ˆô Š˜ÄL}NSð_÷ðñõ.γ¼Ïý9ú•¼ÉŸ@<ËtÃ"Þ žÞ´tÎûÄaV’âsâ1ƒ.HüÈuÙå7ÎE‡ý<3ldÒóÄab¡ØÁr³’¡OGU£|Öe…ógµRc­{ò†òÚÊ2×iŽ"‰E,A„5”Q�…8­)&Ò´Ÿðð�8~‘\2¹Ê`äX@*$Çþ¿»5 “nR(t¿ØöGîͺmÛvó<WZÛ_m3Ÿ¤×ÛZäÜ.®Ûš¼\îÃOºdHŽ é/€÷3ú¦0t ô­¹½µöqúd¨«Ô ppÄŠ”½îñîÞÎÞþ=ÓêïhÛr£Ä.é³bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEä'0ÔoºÃIDAThÞÍšy�]U�Ç?çÜ{ß}kw¿^HgOHgí(ÐMeHB¢IYÄAˆÖ8hÊR`´´J‡²†¡J­±´”PŽ2S‚5#‚  N2€’–ˆYÈžÐvC“Nº;½÷ÛîzÎüñ^^è¤ ` ¿ªWýn¿óÎùþÖó[žàé h,=ûW�2aV¤ºúzcâÄf„˜!¤¬R&Ð*«BÕ…ÖÇÃŽŽ}~_ß¶Ž ÈX�×¥½vÿz‰xÄ¥,Þ\ú«�¦°"i˜Ëª>}Ó‚äøqñDU%Ñt5ÒŽ!£1°¬—>Ê) ¼N?¹Áar'Oæ6nÜ‘óý­ž1‹ !€¥4ÿ|�ÅÇÊ~‡“¾õ­êÚ©S„ŒÆp*kÉ'Ò8±$Ú4R‚(m¯5Z)Db;9Ù~¢Ã}hÇ¡¯ýMýæO6�sÝ?J¸S°û 8#õl kcsfÿ|üüÔ_3� g¨ªž\õe¶…e˜¦�0$RJܼƒe[HÓ@‡Š0T„�"BÏ#:ÐKº¿ËÍÓý—W騹çС;Bø•WËÞ+_nTÑ\>jÅb÷�»é¦õs ÉV�ÁO׉ÙD"&fÄÄ´L ËÀ0 t øùí?åwÞ@ãµ!ðÂ0D!�àû¾à8Ö@ɾÓDZÓuè §þ÷é�Îðð×L8 �À.€Ó¼7¥Ž†/ÚÉäÎúÊ—ãöäËé�ÝŒ¨®!’ˆ�ÙD¢"vÓ61MiJ7ã�Í ã¹.ÑD× A…Š ¼Ïñˆ9nÜf¸*�®C]²ŠªúúùGùÐ+ÞÀÀW�_]÷0G“ü-¥ˆ0¾›:õ�ÆÏ^ø“§sº±™h*N,ÅŽG±c6VÔ´F‘ƒEo/ù�ÒÀ° ì˜M4aã9>vÁű#8Q›žäBª’•\ùµdüðã¿}(×ÒbgáÁ?[�uçcœ{îJ’¯ƒ¯¤¯¹æ�™Ë–ˆü'×x‰ª$‰Ê‰Ê±Š8vÌFrTÉ„~È‘C‡™4s ã&ŒºFJ‰±°l Ó4�†D¹t¡a3®"JA…+tÇÉ. {¦¿~'6—B¤†/Æ&Oþ¯é×/C WΘE¢*A¢"A²*‰�bÆ;:WgW'Fu7¨­­Å:R/ÀÈR@ª §²†z'#†{zVúƒƒíÀkÿxeŸš‹{…iO͹õV«ð±Å¨ÙsJRO’¨J`ÙB´ÖgMãRJqâÄ N�&•J‘L&Ï[§µ& C¤”!0L3b–žÁ‹&ì8c"’¾×^[(õŒ„n<—�ŸØ)Ó°jeƒ¸òã8óþî¬ÙT$ʶ®”bpp�l6‹a˜¦y°žžòù@!•Fä T™ÚúkÛœ@«ß^á£g´ð\iqÖÖ67-°&N%;1ñбTŒxEÃ:k2ù|žL&C¡P``` ¬�K¡'N°qãF>Ì–-[pç¬Y˜‰T‚X*N<'ÿñ˜Ó©iºb�„/Èfù�3NVMÍÏ«ëêÈÝði¢©±dü¹QÆ4Ͳé8ŽC6›½dÖ¯_�mÛ!H¥RD£Ñ‘ÎiÄ+âÄ“QâÉ8¹¥«¨®G¤¦úÁ*¾È¡³·ÙT�×-Å7–X"J,Êœï|Ñh”X,†Ö)%ýýý„axÑà·oßÎÐÐB\×eåÊ•£®³,‹h*F4ż¬µðÒ&Üð@./†Í™¬¨™6¯ñ£Ø‰8ÑD”H,2ª“ÔÔÔŒø¬¯¯ï¢À÷öö²{÷n"‘Žã°|ùò²ý�–'ØQ;ÅNÄñgÏ¥¦a&¬aæs€B áÆšY³Òaýx˜2;!³1LãC_uuuÙþÇaÇ£‘RŠ}ûö‘ÉdÐZ3fÌæÍ›7êÚ3ûJCbÇ"DcĤI¦P;kV5p£©´ŽG`i*p„;o>vôLz`½«4“É$¶m—Fk}A§îëë㥗^BÊb²wýõ×—¿ÿv:~ü86l`Ïž=E<ÑQÛ»vI7+LXj“ RÑtzž�žó,K‰F�¦ñTTT”M)ŸÏã8ÎÍî©§žB)@:�fîܹ#>Ïd2üð‡?dõêÕÜrË-|ó›ßä­·ÞBÈ"&Ë2`úLtE ñªÊk�”4`Vd` ®Zƒ‹bF,Ì H¿½½�M›6ÑÑÑQ’H$Ê·¬‚ÞÞÞó¾g ½½Ã0ð<�åË——ï�B¡ÀöíÛ©¨¨àî»ï¦µµµð¬MÓ¶ŠØ"&jÅgˆ U ˜&,²5÷* ³x‰Œfû}}}¬^½šO}êSLœ8‘Gy„S§NP[[[>( CúúúFha``€^xÛ¶ñ<�«¯¾š††”RìÞ½›»ï¾›E‹�Í£Â�µk×rï½÷2iÒ¤²LËÄ4 ÔÌ9˜E^bJ)› ¥`òTL)0,cTð<�X,†išAÀÚµkY´h·ß~;kÖ¬!�NÓßß�”’\.W6%­5{÷îehh¨¬±o¼‘®®.î»ï>~øazzz�R–µºiÓ&/^L"‘‘Œˆ‰iH?£x 7K´ž b1¤)1 1J�3vìX~ô£±xñâòÿ¶mÛÆg?ûYæÏŸOgg'RÊRp]—–––²£755ñÄO0vìXÖ­[W6¹ &p×]wÑÓÓêU«F‚CÊb½a™P™­gH¡u½˜Ú€0ŠY`$½NÓ°páBž|òI6mÚTVm$áÅ_döìÙ<øàƒ´µµ ›R¤immE©bÓÞÞÎ=÷ÜÃm·ÝV¶­5wÝu7näÇ?þñ;Þ –m!…D&bîU¨[!¨kþ˜ý÷°kÓ¼ö‡¿Œ(Dt¨˜Òt9W,n£³Ù,=ôßøÆ7FœÓØØÈ²eËXµjìß¿ŸžžvîÜÉÁƒËήµf„ lذ�+¯¼’H$RÞ#p}v¬ßF¶7{V˜ZS3©ŽË›Èv÷ãüà»ô<½!4Ï´IàåömÙ�•޼ ¬ÂþÎä/_ÿú×Y²d ÷Þ{/�>ú(¾ïsäÈ>̆ Xºt)ííílÞ¼y“ÍÍÍ|îsŸãŽ;î �Ÿ'l7ïrìµÃ vžÅ¡4ã&2ù£SA@)fhž‡ÁýSgèã;öé®7:µïøúRÉq½}ûv}ë­·j@›¦©ÏÖFhÃ0Êï×­[§[ZZô{!ßñuw{—~ýÅýzÿu‹õó0Àó‚c@Û¶GŸj=©sÃ9ý^)—ËéǼ VQ~ÿÉO~R·´´è ÞóþùL^w¶�ÒÇwìÕjëõópDjÄq hÏ! 4*ßS~�ÇY³f §OŸæÛßþ6MMM,Y²„õë׳eËÞµ½i­ ƒ�0ÔhÏGõv�-¦ÖzŸ‚Õ¢ýMÔĉ„%.”\ ÕÕÕñýïŸ/}éKTTT0fÌÞ7iƒ†ÐÕ‰”Ö»¥†m �$‹M'„ïû<Ó4™>}ú¾t¯„~@(äëÇðŠ_xE@FJ!ò ¶ KÇþ¼×õñÏõ>4 xž‡ç¸¸^Hì• E+t›¥YŠ8ÏöµµõËoÀ[í¸¯ðáЂ ^ÁÃ-xè“o¼Nok[¿ Ï¢5rY1«;®àÙ‰=Œ—+àæÜ‚[º¦ÿ¥ïx897ç`;B÷ÑC(xFÀëKã{À„b&±ÕwÝIkn3ÄâÅ&“m¾çØý¾×ÈåÈçñO÷`>þKN½¶ßóæ^`ln+2à†ž×%±•u@fú„Q¬ ,˺`÷oEa’ΓΓÏ䩸ãFzþ¼“ì‰ŽÛ xE_>ÓZüui„¤áP®«{AE*69•L‘3¾Ø§”Ó2GäûsðÙ…á¹Lžäî]8[6qâå];4ü3ÞpnoÔ®†PÁÞ¡Ö¶/Œ¹¬Æ2Òµ8©ªbF+D1Ï¿XMhøÍ¿=Le]šÊºªK_ÈÈçÈ ç‰´ÇüÓs{òɼ‚› 8õðÛš»e4O–².h)ï<òôÓØ;þˆ8q‚ìPŽÜ`–ìPßõ/ʱݬÃчèh=qÑ ûž_>'7”ƒ“'‰ïÜÌÑ�ÿƒ’òNQ9=v¡ ͲbÓT Ô#^ooôõíz`–m ÷ºed¦6† å‡D“Ñwm|�@ÈâëbB¥[pq² Y‡\¶@ü­7ˆ½¸™ãÏoÖnoï�a”ìy³¡Ç@ß TO›ö‹á#GØßÝýÀG¤!jÜ<=Óæú¾çc'üâˆÉ¶Þ…‘w(<×Ç+88y7ç�Ϩi;y‘ƒ�üŠÂéž;ÜË/ÿ…ÝÖÆÖQö8ïäýÀãÀö(Ï{³û¥—–¤k*#5B“‰VàA ý ”!ª¢ ˆbµ&„ ôv>±�éóf1qƤrŠ®”"ôCܼK!›§�É“Ï6èâ²#{q^ÚÊÁûïÏŽûe¡õ/£,^¾ÊmC`v1߯`Óé={•PSêƒ< ;F!Ôä”$ôŠñ]ŸÀõ <ŸÀð�€­÷ÿ�×Ϧ~Ê8ܼ‹›/™I&O![ Ÿ)�É:ˆþ~ª»Nßó':¶mæ¯�ýv§†›…֛ό¾^~¿ƒn6p[dü¸_Ô]3�i‹?c'Ð]UO!U…e›˜¦�a¥Awß©>*k+0m *T¨‹Cî ˜UF3Ã\6Љqº“Öž§g×.ÜŽŽ¯*øo£4è~·Ÿ\TÕò™Ò¥!-e…Vê~+¦Üü÷éIÍMRÖÖ“¯¼Œle5~,�6%BC‹o­A)CÌBžäPñ¡T÷)ÞÚ³W·ÿþ÷žÕRþ“T*c¿ø ìñÜÛ£žeÍ}ÿ7T5]umåÔ)•©1cˆ¤*�éD<…0Œâ*@岄}ø™!2ÝÝ ½Ù>4¸gï˶¦ù¬ ‚ã%Obùßê×*gÆ:ß93W‚P똆”€i–˜v¤Ù¨;]ØöX�NC¼ÈhÏí Ou¶ž·Gà ­2†­5Ë€ï–^—Bÿ!E ÄyUVIEND®B`‚timekpr-next/resource/icons/timekpr-128.png000664 001750 001750 00000034331 13716566163 022652 0ustar00bezvfedubezvfedu000000 000000 ‰PNG  IHDR€€Ã>aËsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<tEXtTitlepadlock-clock ƒ‘*tEXtAuthorSavvas RadevicC3ÛŽXtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/Æã½ù IDATxœí½y”_Õ}àù¹Ë{ï·Ô¯6©T%´€„Pi9 A,0&vâvÚÆ§�ØîI2Ç>éIÚO†ìîv:“Lœ9çäÄ™8ãNâL{=‰c'Ml ±„Ih_ÐVû^¿å-÷Þùã-UBdCU‰à¯ôΫß{¿å¾{¿÷»/ðCø!üÞ¸ –z 7n\¯”z3°Ñ9· X¬ªÙÑæœ›BÌu`8 BÐZ?¶wïÞ‰¥ÿBÿ:ضm[5Š¢wwK)ïX±bÅ•Xk`vvöe?_*•X¿~=µZ�(вCCCÏcþñàÁƒv1že1à_ ˆ-[¶Üi­ýP{{û=›7o®nÚ´‰k¯½–åË—S*•ÐZc­åùçŸgïÞ½”ËeÊå2J)â8¦ÕjÑÛÛË-·Ü‚k-Íf“©©)ÆÇÇ9sæ ‡æèÑ£gÿøëƒ^êµðzG¹iÓ¦ŸÐZbË–-Ûï¸ãnºé&zzzèèè@k�”)%B„c8}ú4CCC8çBÐÙÙÉúõëñ<k-Î9¬µÄqÌôô4£££œ>}šcÇŽ±{÷n·ÿþûêõú>|øð÷–r^ ¼n ¿¿ÿÝårùS7ß|óÆ÷¾÷½ô÷÷ÓÝÝ�R ¥T±èù"cH’„¡¡!Ž=JÇç}Ÿ‚+¯¼’U«VRÊó¾ÇZ[|ÏÔÔ§N�âÈ‘#<öØc|ï{ßûæìììùägœs¿±ÿþ—4.#x]!@ÿG¯¹æšÿúá¸të­·ÒÑÑQ,<€1†(Šerb‚úÔ6IpÎ�s$Æ`H%8 Å¢K)�Ρ…@ �Ì~SJIP.SëêbYo/•jß÷‘Râœ#IZ­‡âé§Ÿæë_ÿú©“'OþO¯¶ðº@€þþþZŸ}÷»ßýþ|à¬Y³¦ õI’Ðh48wŽÉsçHêuˆb’8¢†ÄqBä,N)à¤Ä �ñ<ék‘Q„p.Ek))…§5~PB(…P’¶åËé^³†ž•+ DÈ)Âøø8Ï>û,ÿôOÿd~øáßÛ¿ÿæ2×.{ظqãú•+WÞÿ+¿ò+ëwìØAµZ-;c Íf“ŽgâäIÄì,ÌÔ‰f§1õ:0€ÓšD*O–JX!hC¢u�JÊ€Žcüf•´5(c‘Öà{>^µ ¯£�$ðñº»éÛ´‰ž¾>|ß/Ì$I8tèßþö·ùÚ×¾ö÷£££ÿîèÑ£áRÎáËÁe�›7o¾vóæÍßþµ_ûµ›6m*øpÎã8õÜ^ÄØ8rbÆÆ0Æà!i% ã³3ŒÍÌ0Yo2<;ÍÑ©)&Â�†1üžzkmlnïàŠö:«ºk5:+U|!QÖ¢xÕ6ܲeDÕ Áš5\uݵtvv¢µÆƒ1†ááazè!þæoþæÑ^xáÇ�?>µø3øÊpÙ"ÀÆ�oÛ±cÇ}¿þë¿ÞvÅW*�µ–z½Îá½{™9z 1>AypŽÄ:&gg›žfªÞ nš­è\«ùÌ ­ÖÃõ$ÙBŒcA4â8îPJUœs+�1=)¯[UªÜqU©Ô¿ºZ�¾Ow[;Ëk5Ú*e$©f@G;ኢ®.ú¶]ÇUëÖáû>�²¥™™yä>ûÙÏî?qâÄÎÇ�.í¬^—%ô÷÷o»ýöÛýÍßüÍêŠ+ŠÅO’„ÑÑQŽìÞMxê4z`�ö™”s¸Ä2Û˜eºÞ ²†SÍfôB³þб™™?=43óÍ„ oÚ´iÙÊRéž«*Õ_ØZkß~U¹"+Ú££ÖF¹\Æ 0J1»²�¸§‡òÕëÙzÝu´µµ!„(´�]»vñgög{†††nî¹çê 1g?(¨¥À‹¡¿¿Ý-·Ü²ë·û·;z{{Ï[üÁÁA?þ8ÓÇŽãŸ>M{£�6Ûh’4�N5ê3LŒýÑÿwäðOÜ¿wï;28xh||üBz 0::Ú<98¸û™Ó§?{\ð¹)“¬X”¶,SJÚVˆt©ý@LÏF!Í(âÜôÝË–Q*•PJ¡µ¦¯¯�žžž•{÷î½yÙ²e_¸lÃË ¶mÛVݸq㣿õ[¿µjÍš5xžW,þÐЇ‚¡C‡ éˆlÎÎ"�a6N’o�ŽþéLJïúO<ñ­éééäµÛøøøô¾³gÿ~Ÿ5ž8»åªJõ‘XÑŠ#ð4²2SŸ%¦§Y6 ”R,[¶ ß÷×ïÞ½{ÅÀÀÀ?¾–c{5pY!À5×\ó×÷Þ{ï�nݺµøŒ1Œ��qð{ßãijÏâMLÐZ³³ÌÌL“XÃcãO}nàÌMûè#_YèÝ5>>ÞxüÔ ÿý´§¾]VúßthU�ª×±B¢�clf«#33…"§mmmDQtãððð�±±±ý 9ÎK…˶nÝúï?ò‘�üÖ[ÞòÚÛÛQJa­ehhˆcû÷³o×£$33tE1㣣ÌÖg™ŽóÀððÿù?üà¿;50°¨Ö·“CC§†ª•?k„ñö.­7Ì6ê$|!šžÁjÍÐø8Ë—/§R© ”¢\.熪w†aøåñññ%w3_°uëÖ¾·¼å-ÿüÞ÷¾×ïéé!¬µœþ8ƒgÏ¢Ã�±s瘩×9ÕlLm5w~óé§Yâ¡ppàÜCº£}¤ªõ;g a¨J…Ùf“Žž†‡‡ñ<¯@€8މãxm½^?<::ºw)ǾäÐßßç;ßùÎ?ܱc•J…ŽŽ&''‰¢ˆ‘�öïÙCFŒ�z�Ñ©)Z­™3­Ö�<óÌÓK=öùplpðIQ«MJ½c¶QÇ�ßÖFä=+V055EOO��� ±|ùržxâ‰[ÛÛÛ?;>>¾d–Â%G€ÞÞÞ/~ìc[U«ÕèééÁ9Çää$Bv?ö³33œ8r„¡áaÆ¢( ßx|߾ǖz܃3ÃÃOxíí%)ÄmÓÓÓØ  ««‹Ræ]Œ¢ˆžž|ßgff†³gÏÖÆÇÇ[£££-Õ˜å+¿eá`óæÍoß¶mÛMy‡çyLOOãû>k9þ ;s†á0dÔ˜_Û½ÿw–r̯»Ÿþ7O5ß�"Ž;ÆðÐ�F­uaêë룳³“�7üÇþþþÚR�wIÀ9÷·ß~;A1x¹kvdx˜ÓçÎqðØ1ÆÃ�é$ù§g÷îý¯K9ÞKk•úÙñ(ž˜�eß�4›M�¾ï3;;‹1†õë×Ó××Ð |t©»dÐßß¿­¯¯og__mmm…' `tt”Ùz�§öìa2 âl ÄÜR�÷û�}ûö ø?Bkæé§Ÿ¦ÑhÇqk¨µæÊ+¯Ì?òK,ÑZ,!>Ôßß@Ec ¿ú™3gxî¹çÌâö€ß;pàÀ K5Ö<ø7À®Ä<ÈÀÀ###ų¶Z-’$Áó<„kúûûw.Å8— ”Rê6l(¹rÿþìì,ìÙ³'§cJ©?Y¢q¾pιߨ×ë<÷ÜsÌÌÌEq#„ ­­� 6 „øÙ¥ä’ À–-[v®]»ve­V£»»› ŠàÍ��Nœ8Áèhê9uÎýñë)Æn>:tèà1çû÷ï§Ùl2==MEA@ww7×]w]þö÷mݺÕ_ì1. XkïZ³f ]]]”Ëå"¾. CÆÇÇ9pà& ØH<Ï[2Kßk Ðl69vìÄqŒ”’ÎÎNÖ®]KGG@-Žã›{pKÅîXµjEv’$„aÈÔÔ'NœÈß÷?öíÛ7ôr_t¹CµZý0c­åĉ´Z-¢(ÂZ‹çyttt°~ýz´Ö(¥îXìñ-:ô÷÷×ÊåòöîînÚÛÛ ‚ ¥ÊŒ#ÔëEÌÄ{|¯5ìÞ½»|à…^ ŽãB#ð<�ÎÎNÖ­[G©TÂ9wçb�o)(À¶åË—ëJ¥‚Öš Šè™ééiFFFò÷9­õK0¾×œsߘ��eff†V«…µ– èèè`õêÕ¹äúÅÛR @ÎûµÖh­Ï‹¯Ÿ˜(<¤Ï¿ÞÉRÊ‘''' ð`µZ�ŽŽŽÜÞ±uëÖ¾EÛbþXý���”J¥ ,â8fjªžÝ½c[Èlc�"€µ–$IPJQ­Vñ<�ynð�‹9¶EG!ÄÕµZ­ 9䆠(Šò·¾îòì^„aX°<Ïó(•JEô�µvÃbjÑÀ9×™ûÆóäËòÔ®ì}G{l G�Âdm¹¦µ¦\.S«Õò“®ÅÔ¢#€”²æû~,)²Ìœ²……âyrÄBP.—)•J‹ê^ PzqÑ  ‰ÅÀ¤l-öØœs�üïù@�ÖšR©”;†*‹9.½˜?öCH!—}òM�S�¼:ÉbÂ’„¼Q!_ôœúå õâïÇ%G€—‘Þ�¸xÃR€ùrÀ æ?»Rê�‰?„¥…"ÀÁåÂò.¸\&d1ár`}K\±�?ÿR"ÿeC~K—ä~€7ÌÞ7,¸\&a©á ‹¹ýÿ�JÞð2Àü½o4˜¿ø/v„-&\6à�y9zxƒS¸ÐüF€ËEþ¹,à�Hæ³¾74 Xj¸Tp¹È?KŽ@øF‚ùÍEŠV/&,¸ öùÛnÿ¿pô«jEµ½õG—½Æ7´wwY-@¿TÂÆ1QÑj¶$‰"®êèÚçkÙ´Æáò’ûù®I_`€ÅYpÙ¿´!@Z&LQQÂeŸGdg ‹DbZu­ªµD @( )æ&IHTÞ[@Èbâ”’ÌŸFÁùîm)BÁp½±r¬ÑX]i«²|Ùr´çQ*—h5[ÄqÄÄÄ$" Gúª•“ÆšOï™4§Ïþå¦]ùµ\“ù°àpø­;•½RJн²oÕ*¼+®@¶·ƒ�8gÓŵ.û›y‹í²—®èü‘¾¶¤Ô3e!Å3'W¸üMBãä)šÇ� ��á¢;—‡€ô}„ïã÷,Çïí%èë£|õz*ëÖ!•B Hÿ ‚=ÒõÎZÐÌ›Öù×ç‘ÝÌ%{^Û¨ Ÿ=Ktæ ®Þ“|þšÇýÐB­Ï‚Ç cJ`bÆ�œ:MëÌ„” %²½ÑÖ†ªÕ�Õ*¢ZAV«ÈJµØéÎe;ü<pÅ=È6vþ£l1ûì³Ì<½‡Æ±ãø• �[·Ò±þjÊ·ÝN©¯].£ªU¤R8kIfgIšMZƒƒ4Ï�£~æ ƒ=LÜhPÞ°�ö·S{Ó6”¼æ!A1šy€m¶°�®ÕLÏÓÓ$“Äãã¸f³@âœXednÁ`Á@©”\ )@J„”¨Î‚-[P]]8cI¦&1CC4�#™žÂ&&�`ÏG–D©„,—À÷Áóž‡ðÓsþ­ˆ'&˜xèafžy–j_};vÐõïÿg*W\¤�$Bå)ŸP*œ”©�Î"; Ê*k×Óa"´KYOãÜ9&žy†ábè‹_¢ö#?B×m;ðº»qQŒ‹"\ãââbQˆ C#lØ„0‚V áyøÝÝx«W£–/Cõôà'†xàáóÒﲇKY‘ZØJ~‹Â„s½BkÊ[·R{û]ˆ k±a„ [ÐlbMÌÈ0á §HΞÅ4›`-f¹wÎa‹]’’ë,¦2{îÉl�oy WÜu•Õ«1BR/·Ó(׈Ú:°¥2R¥ˆøâp´B2·k,"lRš�¢Ô˜¦­5ƒ²†ÆÙ³œ»ÿ~†{U©Pî[‰.H©RÙAH„)Ò¿U kmøk×â_y%º»Y)#+•”íh¤ cæ¾N<4”R8ë�Î~~ý#ß}ý²€f³‰’)º£½y3v^D¬�?éÖâÊô•kå2öìYìô4¶ÕÂYK¾ès¬Á�µÔÏ�£52Jïí·³úÇ~ ¿«‹F¹Æ`ç Z]+P��ò�VH%‘J!e&ä90±AzÞ8R°¦Œéì`:1LDÁø(mºÌÕèaÍ;ßÉÙo~“�ï~—`Ù2*½½/Ò©RŠ'Ûj¨î.ü5kÐ]]øXçö|õW8m5äÆ�Ä##˜fgr�{N-8!2é[d¼½R°çÈyDḢÈj½|9‰1H)RޙİÖ×ëÌœ8I¥¯�kåWh»òJfjÝŒô®Åvu£}�Š¯ÑžFy¥êEð­?¸�'>÷¿qà¿ ”ÄY; &1$±ÁÄ q¥ÌÄŠ•LNMÒ^>ÉU÷¼�·Ü±/™©Ã‡éÚ°U® „DúºTFuvàõõ¢JAFqd>1Å!¤H ¾ÙV…R [ŸMÕÄ$¾È¬¾v°2€BåÉÕ*:�B¤‚—s©pJcµBh�Q ‡Àf¤ÓU*©¤îûX› ’Í‘çX}÷ݬ|ÛÛˆKέíÇ®X‰Wò(>ž¯Ñ¾‡ö2$Ð ¥SR ¥¤1Ö >VÇ/Õç,Ö¤`20qB%ÄqBÆÄ%Ÿ©ÎN¦ÇFéR>[~ñxàÎü˿йf k®D"ðÑå Jy)”2e?JlH "ÛR¡Ëtàc¥Âaja#……!pB¤‚š’ D!É[k1Ö¤;ÏLc¬Åš'ÄÆ;‡I’”ßÇ13gÎ@²éçžÚºõLö¬¡±a ^9 T ðK^àã^†)x¹Ð3‘íD�BΓ»œs˜Ø�Ä q“„1Qãµ<"ßc¬³›Ò±ƒôýè�Ò¶z5Ǿð¢0bÙ¦M(U �UIÕ“´/á|�&×(œ³à{äR ÝŠi ŽÖÚÓ¥Àdl­MyžsXgSaИb‘cp‰!6†( ‰ãE$QDãØ1´ÖôÿÜÏ¡zûÚ¼wÅjÊå¿”}¼’�Ÿ!€T¯ÎØ)„@gHä—}â0ÆkÅD¾—^÷4á¦kî\F·lþ…_àÐç?ÏÐsϱüÆ7c£çLÚrÎZ\NÅ"çp¹ÑI{Oƒ8³ð]'Üìy)ùSž�Ò:%B œËì!9 T)i%BID£•ÂS íy„§NT*lúð‡ËW0ºý­È5WR©U¨´çG•j{• \òâ+ÿÒT­´�l@¥cî·Êµ åZ¹j#7Ý�[±’Mü J+ÆŸ}a ÒX”H!PÙs*™Ë"éó*2véiüR™Àó)>• ôƒOþ¥<Ó‚~;é��•*ôZ‘Yp$©(3ž,3yA%m<¥ð¤ qò$ÂZ6Üs¦»‡±[ïÆ[ÑC¹V.¡Ò^¡T-]òÂÏÌÌÐwÏZ~ò¾ðÂéK¯D+¥¤T-Í!^6†`Y7o¹‹hyÞ÷>lØbìé§q�&Â:”H‘@f$??€Â(eŠé\,¼«fÁ!Š"¢8&2 .«Œ‘ª[)é/œaÖáLFð¬Åd¥âl«Éô §'ÆÙðž÷à:º™¼õí˺(·•Ó£V¦R«àùߟÀtüøqT%Ï �£Ñh¼ò‡æ�öõ¶•)µ•ñ»Ú™ÞñvLw~ò'i0þü~¢‰ Œ±“åpœ18c°‰É®[Œµ„qB˜Ä„QD+ZØ,ùEñ¦¤>õà(ç¸ìœQ!p³³©ã¥Ñ$™žfêØQ®¼ë.dgo}'þ².JÕ¥lÒËmåóvý¥zÙæÕ#ºèëC^ão>H)ç±­L¹Z&èlgêöC.ë᪻ïfüéÝ´††0³³X›° ÆÚLàMegR×W:þĤ…³\ô< (ßËŠB‰ÌÛN¤DP �“©€µˆ(†°qÄàÓO³âMo¢º¢—É›ïÀ[ÑS,~9;χ(ŠÆC¹\fÅŠ¯És8p€¿ÿû¿'In½õVîºë®óî—ª¯.üü˘¼õ.º¦§Xñ¦71ø�¸zõ*dïŠÂi$ÉX¡Ë½�Ù— ™6A.ð]p �$)És6uêædÏ$ 6IpÖÌa{fý‚©i†@û>=[¶0³ùGW_CP)¥P¹pñ¦§§‹Ýßl6™™yõ•fšÍ&ßøÆ7ˆãÔµk×.fg/¬_]ª–ò£ Ö^Éô¶›èÙº­5ÃO<�i63•×α‚ÄsQÉd”`¡aÁ ×ókIL‚I 6Ž µ/ILœ`â'DõYâF�ÆÄ8Ó'N°ò†HÚ:HnùQ‚r@©TJÕࢿ÷b]?¯Ë÷jàÁ¤Ùl¯ó—ƒ9³1VÌö[ˆºzXyýõŒïÙCýôé”äçvcp.S‹mê —J¢tZG ù:§J)´ÒhÏCi Φ¤?Óq.%‰\Ø‚$ÁÎÖ™:r„ŽÕ«©tuQ¿ýíxÕ2~%Óõ+AQcçÅÐÞÞ~Xk™œüÁ Ž�ŒŒðÔSO�wíÆoÌ :]Bˆtñ3»„_ hÞñ㔺ºè\µŠñ‡Fk…§$Z)´”…v dzÍ÷|JA@àùþÂV�_!0ì óp‘kƤgk‡k…ëHf¦i ±lýzZk¯F\ÓOPòÓ£ ½—]òò«ó!oÔðƒÀ7¿ùÍó(H¥Rá­o}ëË~FiEPöñK>~)@®^Msú¯¾š™Ã‡ ÓÈ¡ ù¥ËÔá, Ij…ʨŒ^`wð‚#€Ik06 ä°—±€Üû†Í¬‚­¦ÕdêÈj+Vàá[vâ—2ë^ÉÇ/¿òŽèèè@½hâæÕ ¾d8xð ÇŽ;ïÚ�wÞù’»>øå C¿ä︯T¢ÖÓÃÀ7ÿ›$X“ò~c2˜¤æï$Iˆ’„(މÍÂj Ï´Æ×žÖ©å‹¬.Žs©õ‹Ôo®¨$A¶BçÎÑuÅD«¯B^µ/ðð¯ä_R*yÞŒa>´Z­ïKÏ7Æpÿý÷Ÿw­¯¯�n¸á’¿#G\/ðP}}„ë7ѱr%SÏ>‹ […@ìŒMýIRˆ©&‘:¦Å\ÚK=ƒdH�ZJ”³xZÓsFÍæ†[(U*(!˜ÚóLÆ3›ˆ1…:(rùÆe¢„EÑ’$Ád†k’Ìð‘KþéÕÄ�ÇŽQ[¶ §4nÛõ™#ÆCÞ÷]H¢»»û¼×yO‚W‚z½Îw¿ûÝó®mݺu~›·ó`zzš{ï½—ÞÞ^z{{¹÷Þ{‹{^�Ž]û6oÅ–*Ôº»yâqâ("‰c’(Âdç$ Iâ˜8‰‰3­i!aqìÖfÐ$ŽÓ#I0Q„I²×�áÌ �ÑQÊÕ*ñ5[ЕJá‰{9Áï¥ ‚¢uSSS¯h%üÖ·¾EεóÕZ_`ø�¹?÷¹ÏÑßßÏþáÒl6qÎñ©O}Šáááô³Y,‚ö5:ð‰6_G©\¦qô(6Ž3�¤±É¢£�Mc"¬Å.°?pQœAi|vv¶Q�¼Ìþo-.Šhœ;‹0ßó°×lBy™4ì)”~iiøøñã|âŸà/þâ/hµÎ·�wuu]÷÷rjáÀÀÏ>ûìy×n½õÖ dŠ]»vqÓM7ñó?ÿó žw¯T*Q.§F*©d6~�òvã|ßÇEÑé”Ý©Ì;¨¤D ‰çy¾OÉð½‹Û;^+Xx-`^CÈBêÍ�8Æ&i7MÓjÑ (• ޱ[®Ë"xÒÉ{)˜��eÇŽ|ò“Ÿä#ù[·nåïþîïŠûZkÚÛÛ/øÌüžƒsŽþç>ON¨ÕjÜvÛmÅëÓ§Oó�|€Ûo¿�Ý»/ìiÑÙÙÉ_ýÕ_�§Šæ‹¯´Bl¾g AP?ré\v0' ™~&«¨¾�°ð, ÎyY‚µ™ÉÓ¤A.7Ç1& ''ñµÆz>ªweê7ϸ^ 8pÞ<~ü8÷Üso{ÛÛxî¹ç€T-|±åîbjááÇ9uêÔy×Þþö·ãyÍf“O~ò“lÚ´‰/|á “J)>úÑ�räÈ~ê§~ê¼{R§»\*…lïÀ¶w¦ïÀ@a œS cŒ³™y<=^ ð}ÏOká*�Fd?¬ó`kðS¯£³lEjU²ˆâ})¸öÚk/*œ=ðÀÜpà üâ/þ"ccc�ð¼oOÖZvíÚuÞ{V¯^ÍÖ­[ùÒ—¾Ä¦M›øÄ'>qQUrçÎ�ìÞ½›Ï|æ3,_¾ü‚ûJåÑÈéa—÷¢C칦IDAT�phgLê-u)k”€ÊdJ¥ó³�°àE‡�Ì왟Ӈ™¤sÄõzê%ìéMãóò@Ê—±‡—ËevíÚÅûßÿþ ´c ŸùÌgظq#ù—yÁ÷ÌO�:u�ãhÕªUìܹ“Ÿþ韾€2¬[·Ž¯~õ«|ç;ßáMozÓKŽQH�T¢ˆDv+úP@82’RÁyF!›$çå',4,8œG*çé¼óƒ!laÛ$©/ Ò––RÏc÷_a¬ZµŠ/~ñ‹<þøãÜrË-ÜŸ˜˜àcûo{ÛÛxà� ;Ñ…aÈéÓ§‹×�Fƒ§žzŠw½ë]¨ƒ�šƒ?ñ‰OðüóÏsÏ=÷\Ò<ˆ,òWH‰«TI‚iµˆÃ�¨’„aª†Q™ÄDIBl6szQê“[›Yº2 M£Ëª„' & ±Q˜’Ã$� •|…€Ñ#ÃŒ_Dÿj%Vl<¿ÃÚM7ÝÄ£�>Êç?ÿyî½÷Þ ¤ó#GŽðs?÷sÜvÛmüÎïüÕj€cÇŽ‚ê“O>Ƀ>x�6‘ŽGð¾÷½�?ú£?bíÚµÜ�›ƒà"ƦjOÛ\>hPBd»Ý& BéÌhS•°p’ÁB{„œsE Öáò¼?¥ÒhXg!1˜f:á.IpZƒ{èÿýCŸ{Éïþ_ïÿßé¿kËyׄ|èCâž{îáSŸúðp�ÄÿÈ#�ðã?þã¼ç=ïá½ï}/###?~œûî»ïøÁ¾¢%òÎÿínÖl¿¸µ°sM7yñ†8)Á””›E9 ûHž¼Ð–ÀG€¨‚ivOØB„!ÒD–„1ÄÍfú R¦É#aüj‰ÛÿÃ�T;ª?ðï_sÍ5|ýë_ç�àcû{÷î=ïþìììE£{|ßç£ý(¿û»¿{�á¥àª[®æª[®¾è½ÆtƒÙÉÙ4à#la²ž‰i]„Tv&c Yn„I’9\Ô¾GàyøÚCg1ÿJÊ9 ÀZ”sè<]L)d³‘Nˆ}íjèÜyç�<ýôÓüÉŸüÉ>‚Ã=÷ÜÃÁƒùô§?}É‹ÿJ�KöÖ:D£ž‡òýT%Î’DDv–¤iõZ©×<€—Ù“Â8‡ßÑQhFÂY¤µ›Ú¤�RÕq!añ"‚ljñ"Sõ\dÂ�$аqŒW*“jl¤Xø×rèêêâÓŸþ4>ø 7Þx#ëÖ­ãWõW9xð ïxÇ;^ÓßÒg°s‡"t{;I«EEÙ·B’$!1 0öu.h��dqoà°™õ çRi8³ x• �©ITØÄŒ�bjå4xÔô õöÛoçÉ'/.µ¿–`’,ù#1Øzrœ8I¨´µaâ8+ã…(ì%ÿ¢‚å¼8Iªêä¦`I*H—¦MUººˆÃ§âÀ>Lb³ôì¥-¥öjÁd‹oö�DaHÛÊ•h@‹Ôü«Hw¤O{xJ£8=|Á Câ$!jµˆZ-’0µ~Å­VjýÊþŽÃU.ã”"ŠcÔ‘i=M°ç{éä…1qv¼ž ‰²qgTÀæIê338!h[³¦Ð„H .ICåmn „E¨á¶Xµ‚…@–J %.NІ)ŸÏª€ÄqL”Ä]]Œ�:EùäQì™ÓDaLFD­h1ã× ¢V:î¸aFF¨ÚÇØ™3´­YÕ ´µa„Hc"ÃG˜($Iâ”Ø…Ï\œ°pí¥E¢ººR»~–&¬M}Î~)$íW¬¢13C}j’à‰ï‹µ"ÂÖ…¡\—#äã�Zqã?öõñ1ê““tmÚTT Óå2^­†Ô éRm@ ‰'%¾§ñÔŠi‹“˜å*­ñ::Ð¥RfuEd�žT«Tº»:tˆ¶cq'OÌMh3ZpÉ«k Q3õóG­38HÛá½ >LûÚ+)wv¡=�%Êh­ jíèÌüëi…ïyøž�§_çj 1&µl% qœÆÁ;σj§5ÆÚÔ –…Šç•?Û׬¥>1ÁäÙ3´?ò-¢FHÔ ›!a#\ò:û/a#$lF„ÍaÛ¾{?S§Nј˜ kë–TÍËæ%’µÎáÊå47 IÕ?c>&pá½�Q„+8cP&‹J„RP*¡º»ñ•J]¤qœ¥CYt§£cf†³O?ÍÖuëð÷|�ð¦[Ó@Q%‘JPª^X`©¡UoÑj„„�Q#Dï{†àÌ ŽîÙCg?ª­V”†#3 »8.dD©„K½‚QŒt¯sPYU0�[å\¡$—WÊ̪‡9óYÊÔŠë¯çäÐ /<òWwt0Ú{áúõH•ÕôËR±/H©S‹°Þ"l„$CC¬Øó(Ç}´fùµ×!²`—ù1�EÕscå2BëÔi .ô.JL @†sj_^*Ne…²’©b,‘¾ÏÊÛngâÌFöí£û©‡‰Ç'Ó]VoÑœmÑj¼º"J�‰:gŸ;ýÊo|!­Ù&Íz:¦pršå»îgô¹g™8uŠ•;n›·ø²ÈüÉã"]–?a��R9eY¥Ò…„§I’ lÊï¤R¸Ä¤N¡l·›$­ ‚³Ylê3'/™^­Òyíuœzä*½½ô”ÿ…‘·¾³¨Ì©§±T)>¾ø§ßù»þŸù£™Ï ƒï:œséâgHÙª7 §,{ü;´àÔ#�°ì†í¨Žö´5Ž”ia I’70IbM‚-iQÍ,Np!aQŠDi�J¼ùËìáÒÃeic„KŸw^ç„ ¶añì,‡¿ö5¶V*,/W½ùŽ ª{•—/q1ˆ&6EÅðïLbR�¯‘ñýz‹p¦N÷“#ïçð?ümë×Ó¹áòf!y]`„ ¯«”BZ Jáíù¸¶6ìì,Ò.,‘^w°.¡…RiЌēó¹â5a±B¸âtlÛ† [<ÿå/³Õ÷é•’¡ëwà\G–[Ÿ’R¿à—/­ŽÀ ιB%͵’°Ñ"ž©³ü™Gqžcß¿HiåJV¼ù¦´�€)ÕÊ_H J"µNYà’T4Ö´µaÂùz§q§‘¯Ö‚IqF¼ó Ð¬V^þwÑ+Eˆ9ê'R*ѵ};O=ž¿ú+6ÿìϲJ 6]OcyOánÍ�.ya†×œs…I:E€TÏ!ntŒ•wÓÚ÷,û?ÿy‚½ôÜtKZÍœÉv~^;9+™c­M9K Íc%d¹„"kޱp°(aáN�µ@i�£µiº—XÈÊ·Kd.¤¥³q& ” MžtZѳcÏ<Ãþ¿þk®º{€µ†Wm ¾f=&6…ãÈ ã¢@ƒöõËf¿˜Ä�8Љ[1Q˜R€¨Q>û}§2ððÃýúש®[O÷ 7 ”.´•¢‚” EZ1¿—õDʹžð¼BZHXÀ÷|´ö���� á¥lÁ“ö0AÞª%“z�ÃéyÀòÊâÀŠ›nb²£ƒ÷ßÏô©Slþà阙`xÍâÎ.’lñu^.~~ȼkH–yôbÈ;—ý2?~’9tâhŽˆéúÎ&8Íþ¿ý[ÆdÙ 7ÐqMV#2k�‘ÅùåÝR„5×8£‰)âËÌd¾ÀŠÚ"”‹Ÿkëæ²Î!"×õsò,ó>|v®�ˆKBçLš4#@8™M€ÚÆkð—u3òÈ.ÿä'Yÿoÿ-ëñö&V¬!ªVÑ�N«•û�/þ‹ mZ!hÖ›ÄI|äCò~9PoÐ9|šeÓ# ?þ8Ï|éK8!è»ûnJ]]EK“É4 „);W�¸4ÊI—OVÚ%ËŒ­�èu^*6Ib”s)y7AŒuiåp1¯p´Éµ‚<[À¦5rLÆ#�³s=qÈövzî~;3røË_æÜ#�°þ]ïbÃ�72Yéb²³‡ÙŽ®yÝBæ(@Jš%7ÿ/;XÿÖk›-Z ŠñÌu ±YÄŽÁŸ™`ÙÄ]õqFŸzŠ'ÿñ™=wŽÚæM´oÙ‚� “ ¶)$`³E{c59ÎГOrøÛßfvp�êUWrÅ¿yº­m®chF¶ áSæ #³ )Ô@ Êçòðt#pR 3mÁú^QV¡`GTÞ%«‰�I³€œµçI¹ysHër�Èsíe E€ì/TÆ?�sxí,»õâÙ­Ì8Ä¡/}‰Ã_ü"˯»Že×]ÇŠM›(÷õ*Ÿ–ˆü£<ŒTi;çPÖ L‚‡q‹’‰h2q𠇞{ޱ}ûpBP½ê*Výä»ñjµtžïƒ©å+W…²”©"¶]æHw7äÈ“’Cë\Á.rõ°Þ²ïŠDYs¦Ð\g'tv‚³YnB:ŸÆYdbP~)Û�ÙÎ •ÆI‰•_{ÙåŒÔg*E¦QdŸS¤d>mDÖ¡t~±‹œ¨‚8—>Ö „Ë®9<­‰”Ò6lhSJ9­µ+•JvllÌj­]GG‡Ý½{·%“š ·oß.[­–¨×ërÙ²eùâË$Id[[›ššš’žçéjµ*£(ÒâEdæøyzYF"—Q‰ØZZIB=ŠhÄ1õ8¢'4’˜fCh"cˆCÓ¤õˆ““Dy½½Â²âæd�y(ØFºkó]˜ý=ïz¾=…”tÚØ*POI|¥ð•¦¤¾NÏeíQñ<ªžOÙÓ”=�ªïSšç Ò̱ƒÜd³LacpZQ‹z+ ‚ èŒãØfff&±Ök­���µÛ¶m³žç¹±±1[­VmOO�}ðÁs¤xM@bçÎ�òÌ™3j``@­Y³FzrrR—J%Y­VUE:ŽcíyžÔZ«(Š´1&5¿e¾ïB �‚Ø9ÆšMFffk4˜n6™C¦Ãõ8Îø¿Ë$ó9êWPˆüï̤êŠÅÍÖ9ÿDáSó¶ˆHEK1oѳÝ�½¹ø ä÷Z&�Û–1r=à ³óIϾTÔŸö D-謔é©TèJT=�¼bXJéqbhÄ‘—$I§ÖÚH)�RÊ”ËåÄó¼$Žcc­5SSS¶V«%íííÉáÇÍÖ­[“KE„KA¨3gΨJ¥¢­µzjjJû¾¯J¥’ ÃPc´RJK)µB)¥¼0 =k­–J O{8)yazš“SSœšžb¢Õš[´T˜3‰ ’ÊDióÄtqE±›"w¹9²™Ñ˜yUZÜÜ÷f¿7‡ù›æµŸ‡…îvrÌû›ó¯ÏC…t|/Šëެa¬Ùb¼l&FIkVÕÚX[«±®½ƒvßG ‰“Ê3ÆT€Ä÷ýÄ‹ â8ÆA¢µfzzšZ­†RJ<øàƒÉ¼|I¸T`Ž=jwîÜiÆÇÇ-@¹\–aJÏó”RJI)•µVÇq¬…ž”ÒÔ‰8ùGpxõ³ãc½uc¼L:A€á¬dçLÖ¥>Pg`±.�­Keç\$DÖ ëŠy‚Ô©ˆËå‡t-òm�É"›÷¹%ÊÉý¼I›ç±-L²bî¾Ë¨†C ‡±!\&C8™½OÈ|¸’4$· âH]9‘’47Þh0^oÚg‡†Ü¦Jezy³9yDªG³�%Ò¸Êß÷]’$®R© œ”Ò5›MÓjµ’•+WÆé4¼2¸Ð~q(„½œ÷ÏÎΪ8Ž¥ïûZk­£(ÒRJ¯T*yI’è$I4àû¾¯£(RÆíû¾<眴Öjk­ÖZkçœB(k­vÎ)çœÌ�HXkµ”R !”sNλ¯áœSùû²ç‘B™]G¡Œ1y>j¦š0o‹çĨà5pJ)›]7Îe‘ éÙ!œÂXk­¾øo!„1Æ$ùë$I¬"ÉîYç\¢”Šã86B+¥Œ¥”Æ9[k�s.‘R­u”½ŽµÖ‰çyI†Q’A©TJšÍ¦)—˦½½ÝŒŒŒØ ÜþýûsxY$¸T€Ø¾}»š/Ηö«ÕªŒãXZkE©T’Æ™$‰L’Dù¾/ã8ÖZk¥”ÒÆ�N’$gJJ©Â0ÔJ)9I²E—J)©µVùBççl±u¶PJk-œsYC®¹³œW "»~1pé.N!_ÐìzqN’Ä !Lö:G+¥4B›-˜±Öšò{ιÄZk¤”‰”ÒZkÏó¢$Iœs.6Æ$¾ïÇQ¹8Ž�RÊxžg¤”N)e[­–õ<ÏÖëu+¥tžçÙ ~`AðRà¥>+wîÜ)Μ9£’$9R$I"rd¨V«Ò#’$‘•JEc¤µ¶8A ­µÂZ+�sÂ÷}aŒ‘ιâZ~=¿f­•žç cŒÊîK—²‰|ÑQJ‰ qŠ�ž¿'»vá á’4Iµ@„$Iœ”2_ô¤”&;Ûì=VJi³÷¹(ŠÜü×J)ûâëÙ¢:¥”•Rºù �/ðÌÌŒÓZ[¥”{™Åþ�ì¯.òÝ&·oß.æS�LˆI’ägY«ÕD† "C áœÕj5'ãÌ¿nS"_\J¥’Èß3ÿz/~}1˜Oæ¿–2uÛµZ-7ÿÚü¿ó×RJW¯×ÉÙˆçy ß¹ÙB;­µSJ¹jµjܼE=�}ÿÓ~iðÿÇÊäÏ*†tIEND®B`‚timekpr-next/resource/server/000775 001750 001750 00000000000 15122253261 020331 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/server/logrotate.d/000775 001750 001750 00000000000 13476006650 022563 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/server/logrotate.d/timekpr000664 001750 001750 00000000160 13476006650 024156 0ustar00bezvfedubezvfedu000000 000000 /var/log/timekpr*.log { daily rotate 7 notifempty copytruncate missingok compress delaycompress } timekpr-next/resource/server/polkit/000775 001750 001750 00000000000 13716566163 021652 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/server/polkit/com.ubuntu.timekpr.pkexec.policy000664 001750 001750 00000001435 13716566163 030125 0ustar00bezvfedubezvfedu000000 000000 You need to have administrative privileges to run Timekpr-nExT administration application timekpr-client auth_admin auth_admin auth_admin /usr/bin/timekpra true timekpr-next/resource/server/systemd/000775 001750 001750 00000000000 15122253204 022016 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/server/systemd/timekpr.service000644 001750 001750 00000000536 15122253204 025055 0ustar00bezvfedubezvfedu000000 000000 [Unit] Description=Timekpr-nExT daemon service Documentation=file:/etc/timekpr/timekpr.conf After=multi-user.target [Service] Type=simple User=root WorkingDirectory=/usr/lib/python3/dist-packages/timekpr/ ExecStart=/usr/bin/timekprd StandardOutput=journal StandardError=journal Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target timekpr-next/resource/server/USER.time000664 001750 001750 00000000654 13772711236 022006 0ustar00bezvfedubezvfedu000000 000000 [USER] # total spent time balance for today TIME_SPENT_BALANCE = 0 # total actual spent for today TIME_SPENT_DAY = 0 # total spent for this week TIME_SPENT_WEEK = 0 # total spent for this month TIME_SPENT_MONTH = 0 # last update time of the file LAST_CHECKED = 2020-06-15 19:51:49 [USER.PLAYTIME] # total PlayTime balance spent for this day PLAYTIME_SPENT_BALANCE = 0 # total PlayTime spent for this day PLAYTIME_SPENT_DAY = 0 timekpr-next/resource/server/timekpr.USER.conf000644 001750 001750 00000007215 15122253204 023430 0ustar00bezvfedubezvfedu000000 000000 [DOCUMENTATION] #### this is the user configuration file for timekpr-next #### if this file cannot be read properly, it will be overwritten with defaults #### all numeric time values are specified in seconds #### days and hours should be configured as per ISO 8601 (i.e. Monday is the first day of week (1-7) and hours are in 24h format (0-23)) [USER] # this defines which hours are allowed (remove or add hours to limit access), configure limits for start/end minutes for hour in brackets, # optionally enter ! in front of hour to mark it non-accountable, example: !22[00-15] ALLOWED_HOURS_1 = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23 ALLOWED_HOURS_2 = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23 ALLOWED_HOURS_3 = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23 ALLOWED_HOURS_4 = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23 ALLOWED_HOURS_5 = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23 ALLOWED_HOURS_6 = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23 ALLOWED_HOURS_7 = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23 # this defines which days of the week a user can use computer (remove or add days to limit access) ALLOWED_WEEKDAYS = 1;2;3;4;5;6;7 # this defines allowed time in seconds per week day a user can use the computer (number of values must match number if values for ALLOWED_WEEKDAYS) LIMITS_PER_WEEKDAYS = 86400;86400;86400;86400;86400;86400;86400 # this defines allowed time per week in seconds (in addition to other limits) LIMIT_PER_WEEK = 604800 # this defines allowed time per month in seconds (in addition to other limits) LIMIT_PER_MONTH = 2678400 # this defines whether to account sessions which are inactive (locked screen, user switched away from desktop, etc.) TRACK_INACTIVE = False # this defines whether to show icon and notifications for user HIDE_TRAY_ICON = False # this defines user restriction / lockout mode: lock - lock screen, suspend - put computer to sleep, suspendwake - put computer to sleep and wake it up, # terminate - terminate sessions, kill - kill sessions, shutdown - shutdown the computer LOCKOUT_TYPE = terminate # this defines wakeup hour interval in format xn;yn where xn / yn are hours from 0 to 23, wakeup itself must be supported by BIOS / UEFI and enabled, # this is effective only when lockout type is suspendwake WAKEUP_HOUR_INTERVAL = 0;23 [USER.PLAYTIME] # whether PlayTime is enabled for this user PLAYTIME_ENABLED = False # whether PlayTime is enabled to override existing time accounting, i.e. time ticks only when PlayTime processes / activities are running, # in this case explicit PlayTime limits are ignored PLAYTIME_LIMIT_OVERRIDE_ENABLED = False # whether PlayTime activities are allowed during unaccounted time intervals PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED = True # specify on which days PlayTime is enabled PLAYTIME_ALLOWED_WEEKDAYS = 1;2;3;4;5;6;7 # how much PlayTime is allowed per allowed days (number of values must match number if values for PLAYTIME_ALLOWED_WEEKDAYS) PLAYTIME_LIMITS_PER_WEEKDAYS = 14400;14400;14400;14400;14400;14400;14400 # this defines which activities / processes are monitored, pattern: PLAYTIME_ACTIVITY_NNN = PROCESS_MASK[DESCRIPTION], # where NNN is number left padded with 0 (keys must be unique and ordered), optionally it's possible to add user # friendly description in [] brackets. Process mask supports regexp, except symbols [], please be careful entering it! ##PLAYTIME_ACTIVITIES## Do NOT remove or alter this line! PLAYTIME_ACTIVITY_001 = DOOMEternalx64vk.exe[Doom Eternal] PLAYTIME_ACTIVITY_002 = Talos[The Talos Principle] PLAYTIME_ACTIVITY_003 = GTA5.exe[Grand Theft Auto V] timekpr-next/resource/server/timekpr.conf000644 001750 001750 00000004732 15122253261 022657 0ustar00bezvfedubezvfedu000000 000000 [DOCUMENTATION] #### this is the main configuration file for timekpr-next #### if this file cannot be read properly, it will be overwritten with defaults [GENERAL] #### general configuration section # this defines logging level of the timekpr (1 - normal, 2 - debug, 3 - extra debug) TIMEKPR_LOGLEVEL = 1 # this defines polling time (in memory) in seconds TIMEKPR_POLLTIME = 3 # this defines a time for saving user time control file (polling and accounting is done in memory more often, but saving is not) TIMEKPR_SAVE_TIME = 30 # this defines whether to account sessions which are inactive (locked screen, user switched away from desktop, etc.), # new users, when created, will inherit this value TIMEKPR_TRACK_INACTIVE = False # this defines a time interval in seconds prior to assign user a termination sequence # 15 seconds before time ends nothing can be done to avoid killing a session # this also is the time before initiating a termination sequence if user has logged in inappropriate time TIMEKPR_TERMINATION_TIME = 15 # this defines a time interval prior to termination of user sessions when timekpr will send continous final warnings (countdown) until the actual termination TIMEKPR_FINAL_WARNING_TIME = 10 # this defines a time interval prior to termination of user sessions when timekpr will send one final warning about time left TIMEKPR_FINAL_NOTIFICATION_TIME = 60 [SESSION] #### this section contains configuration about sessions # session types timekpr will track TIMEKPR_SESSION_TYPES_CTRL = x11;wayland;mir # session types timekpr will ignore explicitly TIMEKPR_SESSION_TYPES_EXCL = tty;unspecified # users timekpr will ignore explicitly TIMEKPR_USERS_EXCL = testtimekpr;gdm;gdm3;kdm;lightdm;mdm;lxdm;xdm;sddm;cdm [DIRECTORIES] #### this section contains directory configuration # runtime directory for timekpr user configuration files TIMEKPR_CONFIG_DIR = /var/lib/timekpr/config # runtime directory for timekpr time control files TIMEKPR_WORK_DIR = /var/lib/timekpr/work # directory for shared files (images, gui definitions, etc.) TIMEKPR_SHARED_DIR = /usr/share/timekpr # directory for log files TIMEKPR_LOGFILE_DIR = /var/log [PLAYTIME] #### this section contains global PlayTime activity configuration # whether PlayTime is enabled globally TIMEKPR_PLAYTIME_ENABLED = False # whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name) TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED = False timekpr-next/resource/server/dbus/000775 001750 001750 00000000000 13716566163 021305 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/server/dbus/timekpr.conf000664 001750 001750 00000003243 13716566163 023631 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/screenshots/000775 001750 001750 00000000000 13772711236 021375 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/resource/screenshots/timekpr-next-screenshot-admin.png000664 001750 001750 00000317232 13772711236 030003 0ustar00bezvfedubezvfedu000000 000000 ‰PNG  IHDRfA¢i1“„iCCPICC profile(‘}‘=HÃ@Å_S‹R* v�â�¡:YqÔ*¡B©Zu0¹ô š4$).Ž‚kÁÁ�Ūƒ‹³®®‚ øâäè¤è"%þ/)´ˆñà¸ïî=îÞB£ÂT³kP5ËH'âb6·*v¿"ˆC¿ÄL}.•JÂs|ÝÃÇ×»Ïò>÷çèUò&|"ñ,Ó ‹xƒxzÓÒ9ï‡YIRˆÏ‰G º ñ#×e—ß8xfØÈ¤ç‰ÃÄb±ƒåf%C%ž"Ž*ªFùBÖe…ógµRc­{ò†òÚÊ2×i!�E,!2j(£ 1Z5RL¤i?îá�8þ¹dr•Áȱ€*THŽü~wk&'ܤP¼ØöÇ0н 4ë¶ý}lÛÍÀÿ \imµÌ|’^okÑ# o¸¸nkòp¹ >é’!9’Ÿ¦P(ïgôM9`ஹ½µöqúd¨«ä ppŒ){ÝãÝ=�½ý{¦ÕßnEr¥x¥û pHYs.#.#x¥?vtIMEä 1{Í*›tEXtCommentCreated with GIMPW� IDATxÚì�w`EûÇŸÙvý’Kï !!�„@B“¢ (6ŠbÁ‚½¾¾ïkEÁòbõgçµa�" ‚ /Š€ EZ�RéåúÝîÌï�½$—äîrID˜�1\nwfgžyfö»Ïì΢…‰ƒ  @ä�È߸>´þI¹’´Ñî�¶/‰„1 ÷oäž%ñ/…¯ „B|çCü=ò¿~õÜŠž÷G¤{öé¹e{•Wûÿ*ÛË"µ; B�6 ê†û•?ò±s÷ŽÒ£Ê’n·G.A=”‹˲€qJRÀÚ·‹ú’näßó.F|ì Q™xË«»ù3^S’32¤tï”!Ÿ5–U*¹.ó'œNQ¥Þœ/üÝ7°§ ä«Ý{’?ê¦kù]èžV–œ&ÿqEI ‡JU×.'Z’°Ó.„�«‹¡ùÄ …ŠåX¹¾G€A ÿÉp¤�4D„`÷oiQ“HþLÜäc›j$Þ[V$’ç¦Gm’ŽÃT/T#i;á¡gª‘ô¦‹¦ Ì�Gv®@Ýìí�ïüP�$ ª‘ÖD­Å#gä,Hº—9 ´D„ã¡nÖߟ2I„ cLt!ê×þÄÿ¶èÅøI¼eˆÖë‰�úÉý꯹íÞþ!^`EÜuÿu8EÑIBÐùCRi?ªô¶ÊÄlj¤G™“nEUˆ_õííxBe8�£(q‰0›Sâ8Öã�‚:h$ñ*Á`L0!²„X1bÀ µèKrIF—:Ä@Ü"‰K>Bˆëà\Ñ·.T£[|ñ4Œz^÷˜j”Ý“&�P�ЛXc¦ À¨G­A¤KËv³²Ý¸p €jìîõnà…TûO½j_ÒÓËafÝŽ‚�îݯ2ñ¿q»Ìœ×lŠcOÖìiþ$0ªñt©¨^ô OñÓÀ¨Fyg/Â"ÐÓ#½?€J)H¤ëýEQr:±[ z«ý>ehú‚:ÖHzݽŠ5xLìï�Ò ÕˆX#@à´¥b:ìßiøE@\3 ˆ†uyå(#$Ç ƒ€$ G@ŽÁàšŒ–å£C!ï0Å3áAŒ‚ …B¡P(Êù€Ó)4Õ%4W�Òˆ<ƒ€A„ä‰éV½ˆ�4Iâ¡d½".AÍq,‹Nÿ5…B¡P( åì@%HUqxôñÚS—ÛJÖ0@„8â¦�˜ê«WLJ³ #Š’Ã§ãîr …B¡P(ÊY bÄñœ³¦nËx†;!(ZÖ‹„ÀAÎ�Òc†q8DLÕ‹ …B¡P(ç„"I˜eQ©6VW')0Â"nyü…bŠÑ«Æá©Á( …B¡PÎ[‘ãØãÚ‰TŠ6aÂÉzѵȎA'aÜÕz„ …B¡P(”s cQl=UÆ `ÝÙÁ„0 KT/R( …B¡œ�ØN‹Åf·;$ Ç"A¡Ð¨•‚À<-ÁxA"!„äÇ_B\o<Á´=(JO Øf²ZXÐë´üyRcÑfs81§Ñ,]^‚B¡œNDIjhlf>­_jtt”J­«ÅRYYYxä(‘Lƒžei5 {U¿Ø�Q†0µj-ö=• ßU4IØcZ—4�0±ãƒ¢Z^÷•1Z„è°G¡œ?"ÏÙpª®ªÑ�TJÓ{½ÈE 6rxuùÁ2;/0çºñ°hsj"ÓÒã…êòFÌ1(€6÷c7B°Ó!a†é™¥=$ ?P(”€âp:ëêšÒÓ3G�Âq!€(BxxxFFš$âã'J×yHp8�uu�פÅÍž–gPF°’Vrh±3‚‡Ü0íåi1&;NœR|ç´„�þM•òû9ùå.òÓ~¼X™B¡ü½À¦šÚZ«‡ H©Ñóñ—Íyf’áø— ÞýÝ¡Õõ&4HÍæØé×O­¬YóÛÊ?°Zs&Ʊ±²¾ÑÙ¡bBXl°–é®5ôqJ¶[5¶˜Ó®{íÁ<æÄªG+vª9¦Ë*gccä¥]ÚÜ�݈d­©}T¨ÊÙìd9®›û’ûY6 …ræÇqŒë뛇m±X:K5„PZz?­V»c现Ð`÷x!Ƹ¾®é‘üä‹¢tÄT'uJË!tSß�85÷ê%aa†±FYb‡ à–÷)SÉH¡œc㌹֚uÿûäy8ù;÷~tÏAúèTLú€$öû±–ëÅ$C‡¡ãLŒ%bcµæ’y ®Ml¯ôœûÞ¹gá¾ }'ÕØ…5îzcoP˜Òÿài· Yë»T}ât؃Rº¶y—»a{MsöƒïßžÏ_üè‹›œÁAÝ’w“ûY6 …rÆih4¦¥õ‹Œ ·X,Þ@E1*:¢_jjqqqHˆÞ=í5)a£CyÉÔÞF)‡í¢PÕñä°Õ¥�îiå±"¿‘�“_Ýò.i Š‘B9‡@€`Ñé`XŽeÁ’(a%"UýòÑGÊá†ÒM»!H/ëLf‡ä”Äò‚VÅ8,6›H€a•ZMˆ¶õv=l3šM'& Ç«´ƒ†ëð¢X‚EcMSƒ�€ Ž S Œhª7™Ø)aBËsj�&H-KÉÒd6ÚD§ˆ1Ë«ÂÂ5ŠvZE4Õ›MQÂ`X^¥Ó4îr†`‡Ý&¶”Ài—$Ëš�„WE„k›ëê­„å”>¬!ëÞÖ—ËÚšš,¢„ †S(ôA �°hj27[AB»�U4Öwe@N©oþµ½Í=U­ãnÈi574Ùm¢ˆa9…!„Â0òL8OÕ4)´Ña*u6¦š4wªK<%ïxPB°Ýhn2Ûí0,§Òi‚5<ãW‹P(”€át:búöícµZ}_™Z­RßÔ¾Å%Ç‘ç99­ð´x­dlèBá9l×$è6”Ö·¦m�`×Ó€ ÁˆF)”s uˆêÀÂû®·—wï��RÚ·¿{ë[»DP(•LÚ„.­¬!ûžúª,æÂ[n»¸_ldˆVÍ8j‹÷lü£1iØð :0Vþùã׋~,WéIÆzH?óãs“ƒsÕÑík–}µ»)Xç~åKìͪÿ~nVŽÚ~dõ³/o¨–"‡ßzûØ”èÈ�Šq4”nýnÕŠÝ AÁœ­Y•~ŵ—ä$'DkgcéÆ7žÿ®&XÝ¢ESCð�[o›¦×jÄ\S¼cíÒ/w4èõ­2/vöš*×ûM¯×0A>òöõ)\Åúgæ®*—4y÷¿~_¾²ìÛsß¼ïzÑ£5´1¡ 䉭Ù{鿞¤b�ÆÊÂ�«–¬þÓ®Ô#±Á2âÆ».’Æ™+ëÖuÉ�Í úa7we@íÉ×¶ØüëÒØ oóT5qÛmÎòS¢¶ï¤™§gmƺ“|þƲ?媳}nø¿�n –<°`‹•3d¶7æëÏ~Ç_Ý©"¶Ó¹'Ÿÿ‹‰d´tEÇQì¸î—›Ê[kŽýþÝŠ¯·Vk ¬Õk‹ðT5R(ÇbµÇÇÇ;�’(ú³l6Š��;YQÁq¬œvr¤†·™±Ã.oþOAñ•19AZØ×dZ}²zNF²¼I d\¤ö»Z»œÖ-Ê@ˆƒ–g_轌ʹ© !j ¶FSÛˆ¢ÔĈ8êëÛv“$Cúà̾*â4�¬6ºŸý±ymÖ  ¢‘B |”1$ÄàtÚ1îzMBphˆáxÉqy{H>v4·t{gŽŽ_uÒé>Ê+éÈwìp-PÓÇ_(”s˜ö=›´vx·¯\ÿÖþ°`öç¹÷ÿß½£õÒÞ}a3?îñîÌÑdçôqî+’ÔÃï͉G—<±`e¹zñ?_¿½ÿà‹ó>ݵÅìʃO˜xÏEC¢Ù¦??\°äR³b½KÿÕ®Ÿ?û³"eÚŒ‡Ÿ¾")ýÊ ™›>;èÚTóý‹³?;J8¥Zƒ,�'Í.ñ©R -i˜?û³£†‰OÌ›•mÈœôé×¥-÷²)׿¸ôz—Ö;¹zÞÃkêô ë?X•?ïÚŒÉB(å†WÞ¿¡u� #’+pÇ 36mûì£MMB¸µUu0.Ù°åÈeIYÚÄä0²¯Êm“A#X,}g½óØ(•|Ÿ�iów,jÛA¡hdu¼TÞðäÐ!<ƒþ³í÷‡c 9š–ùRk—ZÓ¶�­±Å–{I˸@5#…rNJÄö·ý¹^-ïÇÕmû¿œ,+•H§j_õs…�NÂZDž×ä†qÛ‡;®ýçÕ}ßuÉ“/m¶èZ'cŽK£=|ìÀ¾,Û©ò‚ÚËA§:¶è¾éï¸R ¥R€t/âŽ@§:6›X­^²±y³î*•ïÙ…úçç^{︣Ïon6hXÏÖpC”HPd„š©dëÊõÛÙæþ×_’Á"å'JÅáéÚ㇯}ms5Ó]v¡â½l¥F*Ý´ä�MËã¦ÎyzFJüàœ�oÖZ-"Eh|¬ÂüG£•Wé;ZÄ{Eì]$''ŽsÏÑe�Í×½¹­9â’aé,"–ǪÚWÉ·))J¯á9®¾¾^¥RJ’õî7¡w‚e¡®¾�ã8¹/ò÷§ÑÖ?„€äŠ&~Û`��Ÿ—a©Bfçç­*8”ݺ"-B{Œ˜ã„QÆÖ+J®uä¥Óʹ,;KÈößùÕó§lغrËÅ�\6xÖ³]g²`¥NíøßËÿþø˜Ûv–£ËßY™1ô«îžp๠õ.‘Á„NœýúP#Ök$Uþ²i/æÚ=è„túH]ëWΦæ. É$O{ú“«Z7:÷.zò�ƒÙ÷ÏL*×|ðÞR¸òŹ3®™9þÏW6Y4ZΓ5ܳcQýñÒFÜ7$óšyóWZÔq×ÃØ\ãö¿Œ{llø�»ž_4£ÙÎë9ì·ý:iAìOœ‘ãž™;VUWSká#â ÖªêfYÚFæêF<¸ ³Ñ©°m}aö c{cz¯°¨ÄgrĘ~_µñ’Ì Q#˜Ÿ7ËÉi”8Š×¯ß#vh2Ÿ¦¤P(½—ŒwêTuTTÆ]ˆ4ù~UUÕj•Ò%nS#™ ‚å1ÿÉ�9RC•dn€t‚Ÿ˜í,/’Û0ü¯ ßñ^F€€Èë2¶©F*)”sT2v:±û¼ …x‹"�B'|üÒ •S¦^Ô?9B§“,ue%u’À‚$º ŽšŸß_‘÷âu)ý®ºîÂm¯ol’“;êª�BX(˜«ömY¹hi±RÃXŒËåSëzÜ1‚RݶF"§àYSfŒ0�Æ-+W�Ö}±eØc¥N»~ض·v‰Î[F-#´B}tÅ+Ÿñ7OÌíÓ'= D[sõ±ÒÕ6^P‹…ŸÏ©vêÔ ³û„ô¢¥¾²¬t¹�gAôÇ€„øvl¿ËZ*+Ìýbbû„‹æÚc[6­übÖ«m[?ú fÖÔ‹2¢‚ƒ ¶ÎɳòÃÛnöZA¡°úNΪ˜cK^~±éškÇf÷ á­U…;7|³dc¥Z�Ì&-BÏ J€a!(+«ˆ‰‰–$Éמ,[ZZް¬ë.–aLŒ°¼_où¡iGéáÖý%cƒdlyê�å–Ö²V–ײÈC”‘ @ÏÆäH@$B$ »³Âzú¶R …r¶«F‡ÉÔd'HP…êZk%Îæ«�0ª ­–uûÌk³Éä^­ R1’ÅÜ`•@P…¹b‡ÕnµKN @,Ë*5*5�ÚåÆ�dµ4XD‚8�žwXÓîz÷ÁÑÊš5Ï<ùY‘€8…R§áØeà·kÀCœ™îéÞ4=Èß=I÷Íuz»3¥ûpÔ”³êŠvýóÿþ´@ìø=ŸsÇk×y¹êQ"££CÔ]_ýø¿§T¼öÍ7�Oz©œê¬1�xlõÂ/ÅL¿û±ô V�d†¨èèP ‡Nß1;ÛÁþõV»"F`'¼þ쮾Çê4ý<ÿ¡Eû�îÃ~ß/>{y4Ó­º¿ùÈ=êœóçŠ;Þûçг±Ëœ~Î@­}âÌwÏäïž¤Ûæ Dw¦PÉH9gAúÁ3�·©lû‹‹³n¾ó¢h´ÑØäyHŠÿÐÜñ~ ^~ïyVŠéÂÃu!C—ÚÒiGÝ;wÔ™.ÆYnCV ¨êâ Oâ2¦<:½?ßò§2<ŒénÝÕˆŽOg;§»{ö ÿÞ) ݙؑ„¾'�r6Á‡$¦‡ˆì.*Bû¤g$³€Ëpýoÿ}øuuv.8aÐ¥3oš�¢F¸lÅSOÿ–óÔ‚É,±ÿߟ~»³¸ÎÎê#]óÈ}£ÃÚNtþï -ù÷ K@òÀ» ÏG±vÏê/Wþv¨¬ëûäM¾ñÆqÉíÏ®¸ñàº/¿þiOi“¤é3áîǦôã7î_³xéÏ{K›QP€q3®Ÿœi`€ÔïøüýU{Ë«ŒvPZDv®Z÷ìMë\Q¢§‡ýùü#kã~ý¶þ�¦‚ï¿ZúÓž’:(ƒ¢âRÆÌ¼wB\áǽ||ÒKÏ\‰HÍÏ=º.á‘×nÍ0ýùͧ+?ZVctrAù7?ûÀ(ý©�o½º|�IdtÑY͘5u@ãÑUm6èv-ÜŒRéñˆ¤aç’Vï.­¬3:‘&"%ï’é׌ï§CàsSÛ9¦£•ž½<šñZÈÆNvF]9áŠÙ­.$×±¬ªÁäUDú艃ùÿl?p¢Á¡‰Ê�pËm“ûiåÂuå!Ärdé 6_?硱Ѭ x+°œ‹/›3š¨Ô´~ ·c6ï|÷É…%Ãî†4ˆß½ô캠Yóîæµî~ĄڹÊ0¡‹¶ö�ç&sì_ôï—�^ôܼ©I,€sßÿx½zÊ«³Çãæÿ{àsþ®7ïŒþÝ[¿vìyï¡×NŒ~ÞÕñ ಕsžÚ”þøÿÍÌ`¼xˆxÈsÊä|ÕÚ›¿µÙÞËàãÕO¼Ög÷ œ‚ç!Ô¿üÝ“t.ðPìkLw\»{9ƒÏ§ )@8 o—¦ü}PÄ ™613Õí]ûåâ7–D¿|ûÁ}@ûþýOÿ4L¹{În¬´†yëÏ~ìÉ%]öÐÝ£B uïõèJ{áÒ—ßØvùÌÞbÚ¿ú“Ï_[±àöm3(Î⯼ò½4xÊíÓ“µb£QÁ8�._ðêztÁµ÷̈ƒò_—}ýò«Ž9s§% @Ìå‡ ›â§ßw[g«Ú³öëÅop-ÕDáÝ÷¯‰ñ Ep8cs;Ä7/Ï_g4åæ«S‚HÍö/m-ªÅâ¼]»�íÞS9åÞ[ÓÔ’™�Ö#@A)c®»w’A ×}ºüÝÅI¯Þ?X>mx°Cëq»] eÛèãùˆÄTv° !vê½·öì5^¹ø¥RóÓO]�ȃ�MíǵvVòUÈÎvèVÄ\~¸°)áÚïHâLÅ?~ñõ'_&��>ãþkM{V}²ìÝ•© f¦s^<¤E¾çÉ� ßú‘™øè½c¢9ìÃ> ìÍæ /áÄüëgyjáÇ«†<;U»éÓ§rn»o¨¡W'@o®âû<âµÉúf¦ð[Ž›HR’*‹Ž™œõE%Îqœ%EÅ�|u¿Úï_õÚ¯ù´œ4~{ÁáÆ«âCãÑ#'ù~W%sΣK½xHOjíÝߺ|¼ø ï»zßÔKÿTÊÿ}™ —­êjî}w\»÷rÄø;CÄÉÊ‘ªFÊßbÞEÓ'oØÀd =¸êϧ·ì-¤¹ AS³‘¨û§g¦$* ìÒIÇ IDAT1ÉWÃ�=ù ¨øøH× €=='þ�ï66äÜòÔ”!:�tkÍŸÿZµ½ðæ¹-÷e÷Ú ñW=×e1lÛ`»kÝ�• W=û%1 @VZ¤µü©uëö^úÀ5RF§çd%³�™R»ÿ™Öj"NǺB-ÙYö¬ÛP3ù¹{/OàHlõ÷hk—–TÅõÏÍl‹©ròäOIš²ßçl.:) Ná<Û¡µÈh=… ïGDʘÌÜþÉ,@vvšûÜßíŸtÏ e›ÚÎ1í¬dÞî³�íÐÝËneT¿þÉ,ô ­Ú±gmlþØÁÙ@ üöZá‘jœƒL^<$G¶gÝÎE_-®xÿì©ýÚD”�j¶+°ä°ÚEyðæ¥›§8þXxë [ܘÇß¼-›Ó¾aæà'ÿ»hQ³fïɳîfèí°�«¸Yɇwy’"^ýJ•Þ?–9Ææ �‡ «•TTp\Ô•*´Æ�ÊÔ™~ôÞ¯‘*kP:óÉî}Íã. BÎâÂ&õÚT¡ 7î^­‰¹y|ˆ7?éïð¾ºgoý3—ˆÿ3> ,v=÷¾;¶Ý{9bü½U#i¹—ÑP#åo&âÂSsû'˜¹Ô±“³v.~éñ’ Æ^<þÂÁ‰zoÛÿ=}]:u¢Ôn­ýàÁ[>tu+IDB£•ïO·‡äeD¸ç/U–œp„äeD¸ÆS623ͰboÉ)iHrûÓÞ©š�N·‡ ÌŽéÅí>Îê]«¿Z»£èd£�×ðV‰Iuv™¦wµðïˆBBN†~Ý¡âSÒ $ä}€BöÒ ¡ÁÈÞltplpˆ[,{õÀu›>x×:ù™›y›àòapîûøŸ¯üb" ýÇ{Wù°9ŸyÍ“7º"òˆÕE²®Hã × xlá/U9·½:ÔpÚB&Ýó._Mœ�›´ø»Çœy ‡•§\6Y±nûÁJœÂª�È)Äøê×H7`xóÑ®}Æ G©K±'�Ïòu¸îWÕWn¬¯ÁGòå'‰ò(ùw¡íæ8ܳî|Úýü¡í¢ŸªFÊßÄ pG—åã'<òjîÁ_7|÷ý{O­[?ýÑ'®ð2ÍÐåžÈ¿£&ø‚;»²Oëå4RkÝnÇñÂ÷7®�ÆC5;ä…% ,Ët.1B$,‘.j¸ì»7ßÞÀŒ™y×Ì>A¨òç÷ÞÙå—z^ _Gì”Øëq|lê~!{{NæX "ÆbYaL|zHÒ¥ éS±uýÇ+³Ÿ–îmªÖk5¹ÔËÿõÔh‰èã\áÝæH–˜˜¨èÐ;QPjW©àØŽÝÕ£ÇEöîA[Ô}ïên“¡°œ�q_oÞ{Übû³(2çÚ ”‡Vo=P3Šû³,4÷æX8ŸýérGäpïmßÝ4<åàÁú¸!9!}xˆ=ußß< >Œ�‘uÛæ�ðÏù¿ïû?b÷¦;ŸŽv?oƒ5=ñ> åìÕ’ŠÈþãf>ú“‚ŽmØ|DìÙž¼ÀƒÅlírõZ6*!Ž5–žÂ1­D‡º­AÁF%Äqõ…Õ’{ªè>‰B}aA�+©ª °AHHŠêÑlÅÔÕu}°žÔž¬ê2`è,/)'i㦌쟟”­eü±CojáýˆäFuQQ£—ÁvgÓi3uOZÇ—‡ !nìý³oдî�…›N‰Ý´ mL¿ŒŒŒÌŒŒÌŒX}·õ1íýò£mú)Oι6þèÒ�6Võj±f¯®â»­Ý/©äÏ>›Œ‰ÎÏ�«ßóÛ÷;éú÷�0ä ˆ?±kóÆÇBó'r]ök¤8f˜¦`óo‡vï9›ŸÍø<\×=¨c­ýõ·N…ôî'>ú ¿ÃToF0_W¾qÿGìžw瀷ûùe¤±Eʹ®Úós‰KUŠu‡ÊÍ Õy»XîbO6ºO¿~Ûš )Ç“ºfýÀá}½]¾æMó킵o½Ã^ya¿0Î^[aŠ=2U…ZwÈ¿tÌš—V¾±®�b`Ì5Žˆ¡y y“ÇGÏ[ýö‡Êi#ãHÙ¯ËV—Ç\zË u�j�ôùㆭx}Õ?S^54ª÷l/“ ˜¨�ù±+¿ýjQ‚8*QÕeF/ç.&>Šlظê·�aqZ¶¡ÚLü±Òô¼^�€ëw¯[5<5 Nn]¹ª4ü¢ësÕ]oòbM MÝ£‡iõµðw>X5ïùÅ ×&?uU’УjvÝ5Œ'ðm§éðä¨SË>ß®½lxfÖÕ;ç,ÿdsî£cÂ<öbüãý9 z`ÞMý•ÞNæ\%ÕÕ¥¼¶5£ÓkHí¡ûNEåFº}ŽòÕdLÔ�á‰+¿^[}ÙÜx1yùñË–®%Q—ߘÄù3éc/Œ|úû«Íq—ÜÍ€é²y¨u×þæ±�^ýÄ»aý¦z⟭vso¦ˆ^^?u,ðP}ÑFÿFìÞvçÀ¶ûy-åÐôùa$Ä~â„¥°Ð~ü¸­´ÔQVëëÅúl³‡[,À¨ÕH¥’ 1p!!|h˜§LLT&%©ÒÒ €h˜ö/Fl*ݹvýâj£ÈjÂû ¼ñÎKÙ퉴CfÜ\ðÞÒåoü!©"LKæu,Ve]÷ø¿t_~³ù‹×WXA’0dFþHp{ÜP™1ã±ë¾\þÓǯ-s0úè!×g JI™öÈÊÅ_}»p¾ô ¹W>|ýå}ùViÝüðmÂ’ïW¼½Ñ$Dõ eà `/»ÿnã§ËW/Üf&œ&8"%+)ÈC0ŠMœ|÷- Ÿ­ùâ•õÌ)5AQ}#4¨k;=®…×#ʱÎtàÛW×9ÔÑYãï¿qZFÛ„ª�MÞÎ�4uOèÒC@Ñ÷Š»§xjùGkÎ�ß³jvÕ5 WÍŸ·ªmÜO¼êÎA{6Ã…�\šÈ@̸.ÙüÜŠov¹3Oƒ¼ “>M�]¥EÙx÷®°WOÚýѦ%›e_—âö9ÕW“1‘ÃG§//i2,�€ˆÁC“—•H£Gųþ�\âØ‰Y?|x¨ïe#\Ïføð�®z�‡ZÇvéo^ éÅO¼¶;ÃT/üÓ½™®Uöîú©c�óü±{Ý�Úîç1è‰Èl‰ òlÑÖó¤ÚŽ“•Í¿o7þþ»y÷ËÁƒØd€šÏ›$�†R`t:uf¦fÐ@ý°aº¡Ã„è(ê[”¿&ÔZ±zÎS¿d>9ÿ†”¿áò·WqóoÓ9Õ~çG5ÿÊÑÿȳ_¯¹úŇFÑ«|ÚîX22•CˆEîo9×g¨±Ýnܲ¥á§Ÿ6üh?z´U#"„bY!$D¡ 烃:§Ó±J%°* $Y, Ùíbs³Ãdr44ØjkíÕÕöº:"IÄd2íØaÚ±£ê¿ï€255ø’ñ†qãt#G2‚@Žr:‘ÊwþT„£" ÆR±kíúŠðÑ·$Ð×%P(í$Cí‰r ØŽmøüÕøÙC©n íNé6çÅyŸcGíW_×®X!54¸d"BˆeuÉɺ~ý´‰‰š„u|<ÃõÄX-åå–ÒRã‰Æ#GLÅÅXmG�ž:zôÔ; Yƒ!lêÔð×j¦ÞF9-kMÑÎï¶•×6Ûˆ28.cÌ}w\™J¯S(”vV•¿~øÂÊ2.¿ž¬s¯ø9i„¿ªR¤~Ç’�wD̸w|,}V“B¡œ ’ñÜ‹š6n<0aâÁ‰ׯG©""Ro¹eÈ믧Κ”žN0&’D$IÄÄÄ««ô‘'¢R‹ã²ª£“Ía1ΠV£”¯äy¥ (^!J×ßò#(äM¼ü¥¼•S«$½ÁU•\’�u<ºß© ¨f…N$‘H’***qÊ”üW^I�5K…2ýþ{áŒ'MjÚ¼™ºc;Ä¢¥OÜóðâ‡ÿI¤êÝßÿð{©•ø“ÜÇîùtÜT¼{Wa�ý¼[çÔ½â示U©x¯WÉh.?x°¤î¼ñ(b«9²g¹[ï  1)J àÎ�ñÈQ^^òøã kÖB!ULLüĉaC‡"†�$ ¥Î¨³èCË2 ƒ$0 bB¨ÝoW˜QŽ/º�-ñE€ÖÛe!L0!˜ž·¨µfŒ±„U–fmS­ÎÒÈ BLJÖ¸éš5¦ãÇ�Û¶\qeÈW$ÎICÝ€Q"££CÔÌiJÞËü)R·þùZÐi>�Ϲãµëÿ~ÞEš~žÿТýàúÎxñÙË=EU}ÔýÍGÆè{嗊׾ùæñI/õ�SÑ®J¡œ¥’þΫë§óä;ïTÌ_€­V„�&..~òdCn®<¯L0» 2…›ô¡DP –a†aÄ"Y5ÊÿµŠE„´üh[…ÜE#‘'¦�!¸E9b×oŒ±üKØ)„Öé µ§¦¹V×\§¶å|‚û÷ÎÊjØ·¯tíZsiiýš5�?ÿ÷ØcÑ÷Þƒxþ|wI&vüCsÇŸ¾ä½ÌŸBAúÁ3�·©lû‹‹³n¾Sž´ÖFëâ Oïâ2¦<:½ëè£ cº[w5:»† …(­å.;|õw¡iË–ãÿ~Øzø0BˆS(â&MŠ71 `,×ŪÔ6…ÅZƒÂ–qý0 Ã2ˆ‘õ"ÃÈb‘a„#‹Å½Ør7㑟—l9:`Z^Tÿ—^h½‘Üô"ÆòÿKmªcŒ9Öªˆ1‡FqfSPm…ÎT‡‘…cPVVÝŽ%ß|#šL¥sçÖ|¹¤Ï+¯êGŽ8¯}Ó})cR¿ãó÷Wí-¯n0ÚAaHtéÌ›&¤¨8*·/ÿâ›_ ªlŠð¾ ‚™p“Çí{ÿ¡×Ž�Ÿ7ïêHÃÏ/ýsiÐ}¯]^6Ïm©doùˆ‡>~èåã“^zæ²H@j~xîÑu �¼vk&S¹ñ­W—ï¯1‰Œ.:뢳¦ññ–I†xü_|úíÎâ:;«�tÍ#÷�C ÖîYýåÊß•5`}Ÿ¼É7Þ8.Y�HãŸß|ºò÷£e5F'”ó³ŒTžð˜¼Å‚žKHlǽ¦rì_ôï—�^ôܼ©I,€sßÿx½zÊ«³Çãæÿ{àsþ®7.x*ž-Úýò¸¢_ßµô§=%u6PEÅ¥Œ™yï„$Ö‹•¼»ŠŸV¥?åoËò!‰é!"»‹ƒŠÐ>é®u·qيټ·¬ªÁäUDú艃ùÿl?p¢Á¡‰Ê�pËm“û¹Þã!vaXb9²ô…›ƒ¯ŸóÐØh¶aç’Vï.­¬3:‘&"%ï’é׌ï§Cà¡Rnwåú0£‰JMëçö’Ò¼óÝ'– {ü¹Ò V|÷Ò³ë‚fÍ»˜×º·kóÆýk/ýyoi3 J0nÆõ“3 r/ôZx±hÉ¿oXÂ�Þ}hHU»Uͽæé¥^]:…Bé¦jü[.RDD±âåW*, „ „B²³“¦OW @ˆ< mÖ#Ú –eùV½Ø"†A¬¬eµˆ�ü㦠S‡N~yËÇ„�½Ëþxüà³¼R �q 1âQFŒ ‘U£„%IÂ\P½F×h5ëkO5œB#€°üüàÌÌÒo¿­ÚºÕz¸ðÐäÉ‘wÝ•4ï?4Ü@Ìå‡ ›â§ßw[g«Ú³öëÅopÑ/ß>@aÙ¿ø•…[U£¦Ý{SÛpä—ÕÇH'WÒdÛn¼*!X(AýnJW@™Û©Ø�|:†Y‚RÆ\wï$ƒ®ûtù»‹“^½p÷,¸ìû÷?ýÓ0åî9 ¸±Ò*¯.k/\úòÛÂ.ŸùÏ[CLûWòùkK"Ü>@a<¶{Ouä”{oMSKf6ZOÊV{JÞE ‰çƒºlÕ73…ßr¬ØD’‚�TYtÌä¬/*qŽ3à,)*†ä«ÓTöÂ/=¯ë…ªzPpóòüuöASn¾:%ˆÔlÿrÑÖ¢ZõX¼ì®[°åËžuÊc&?wïå ‰­þmíÊJž\%Þ_«@ï[Öƒ÷Fõ럑ÌB¿Ðª{ÖÆæ�œÍ¤@Áo¯©Æé1ÈW�pÝÎE_-®xÿì©ýÚä+RÆdæöOf²³ÐÜç~ønÿ¤{)¡c¥$‡Õ.º¢‚Ò³‰¤8þXxë [4þ˜Çß¼-›Ó¾aæà'ÿ»hQ³fïÉ³îæŸ`$æ]ë~¬L¸êùÛ/‰a²Ò"­åO­[·÷Ò†¨»(<ðAQññ‘®ÃàîäÙ©^YÄw7¡P(Ýæo&¾ÿáØ=÷ˆ��¡ðüü>S¦0 …YyE}L_KD ˲<Ç2ÃÊ’‘séE—Xìel 1ºßÑ!–k›qa^P -!FpEqûßcW c©%Ö(I²jd$KfYF’$VÛ�ÜßÔXVzX°[@—””ýÏ–­[WùË/¦ßß?rTßwÿk˜0�úh+Lxd8cj6éTi…285Ô÷ ér†e1ïÞgºp¤âð®ö´©ƒ´IF?óéí¨Þµú«µ;ŠN6Úy o•˜Tg·{]êØÉY;¿ôxÉc/áàD= �:Qj·Ö~ðà-ºÎ’’ˆ„F�o{LÞe }§BÁÙ¹I‹¿;pÌ™—pøPyÊe“붬Ä)|Á¡ÚˆÜ‘äÔÿü,žŸó]édñq{ÈÀì˜#”ŸVrs•~;-ëÃy ¡ÁÈÞltplpˆ[,û*!®ÛôÁ»ŽÐÉÏÜ4ÈÛºOBBN†~Ý¡âSÒ ¤Ž»8÷}üÏW~1†þ㽫<šHþ“ϼæÉ]!cÄê"YW¤ñ†ë<¶ð—ªœÛ^õ3 U–œp„äeD¸fõÙÈÌ4ʽ%§¤!ÉÈ{á”gk½¸\ßÝ„B¡œ»’‘HRéÓOW¾ý°<Ÿp饑#GÁ˜ ÔןÊ(žcY–eÛ$#Ër®@cû¹iY/¶„[TcGÍáö�œÐCÁ\b±å?Œ‰,[â‹XbeáÈJX’ÌbFb–Á,–BÃ+õuå‰�“Ç,!†I¸ürmbbñ²ebCCáµ3¢ÿñ`ÂÓO»ý¦ñF†a»g—c¼]$ÐåïÏ,ú}¯q°~ÇŸöÌkò‚Q»›v}åƒ KÄíù'Àeß½ùöfÌÌ»fö B•?¿÷Î.Ÿ%ð˜ ðñy5÷௾ûþ½§Ö­ŸþèW$3€ ¾àÎÇ®ìÓÚÜH¬EÐÔ1WOÉ….Kè3 °œ�q_oÞ{Übû³(2çÚ ”‡Vo=P3Šû³,4÷æXJ¼¯¶‹�j�ÊC°„�e;uIðÏJm®â·U»Ù²Ý׌ DĘ @,Ë!ŒIW%Dº´!}*¶®ÿxeöãÓÒ½M’#<û0—zù¿ž-}ƒ+<šÈ KLLTt ž((µ«TplÇîêÑã"ýˆéN¯nÛ ϶zùvx …ÒƒqìoQJìp½ýŽÊ·ÞFêððÌûî‹>\^òÐ&¨Nf iJÎäTJ^ày�çò�À+x^éöYþ‘¿q-¸Èó žå9ù™˜ê„–ayV>´ x%/(yA!¯ãÈ Jù B[I„¶"qJÁŸ\‘=ܪ ’kdÈÊʺÿ~Mt4¨|ý�#7Ý„m6ê©î°Ñ}…ºƒ*Å®G;ptž¢à×_ݲGÊ�×a _ù0ú`=©=YÕ!Ðä,/)'i㦌쟟”­e:\?ø“‰¬ "û�›ùè OL :¶aóب„8ÖXz GÄ´êm�‘NÉý*¡÷TLt~~\ýžß¾ßqH׿„!g@ü‰]›7î8š?8‘ë¢xîï`„ž•‡�Œ�bꊊê:…îY©;ûw¯eè̾Jˆ„¸±÷Ͼm@Óº7n:åÑÝquQQ£—Ázòÿ˜~™™±únöÄ´÷Ë�¶é§<9çÚø£K?ÚX…ýïžõ…5®Ý¥ª‚Â!!)Šõ]x^àÁb¶â^æé_7¡P(çf”›Í‡oœÙ¼iBÈпßiÓž—'£�á±�©ÙŒ ày–åÚý¸â‹+OO³î�Föt e„b‘œË�Œ,–0+I‹±Ä0Ær$,µ=”ƒDFWݨöD‘¡´( †Ì»î*^±¢~ß¾†µëO›žöåV§£þê²³&òøµó¾}ý-¸zlzg+:åmÁceÖ…Ãô/._ÂèF=œÛ1Jã+&j`~ìÊo¿Z” ŽJÔ@u™p1ñQdÃÆU¿… ‹Ó² ÕæÖýuz ©=´cß©¨Ü(ò™ ®Úós‰KUŠu‡ÊÍ Õi ]ÞÄ1ß.XûÖ;ì•ö ã쵦ÈÑ#SU�{„§äm]ÚK }§&jÈðÄ•_¯­‹¾ln<‹˜¼üøeK×’¨ËoLâÀ[ñÜ+éÁ=+Òç�¶âõUÿýLyÕШ޳½L‚ 膕ZÍþîß½–  3wUB6|Ä�VÍ{~ñµÉO]•$àúÝëVG O ƒ“[W®* ¿èú\u/‡YãÉÃ|›Ö OŽ:µìóíÚËæNJŠgf]½sÎòO6ç>:¦ë‡Ž‘&oòøèy«ßþP9md)ûuÙêò˜KoÔRB/…g£û$ðë·­Ù�rq<©kÖÞ×ÿ<=ÕÈ“ƒãïÏù hÐónꯤ#)…rŽIFguuÁ´é–}û@ØÀ�IW^‰†Ha¹º”l[L"˱Ϲ”"ßA2ʳҲddŽAèÌ=3'ËAÂynšá$,²Œ$aY¼ŠÃ0ÃÈÏßȳ䖤~]pØáݬƦïÔ©‚^jË–æ-[N¾¦ûzùO‹_[iÆœ6$*mpŒÇÓ¹�6æÂøŸVJ£ÇfÝʇM¼ìþ»�Ÿ._½p›™pšàˆ”¬¤ †��|÷- Ÿ­ùâ•õÌ)5AQ}#4P؈«'íþhÓ’Mƒ²¯KméWž3›Jw®]¿¸Ú(²šð>o¼óÒDTY×=þ/Ý—ßlþâõVP…$ ™‘?:‹/É[鹄¾S0‘ÃG§//i2,�€ˆÁC“—•H£GÅËûy)^»Š§t6B˃´ƒn~ø6aÉ÷+ÞÞh¢ú†2ˆaP7¬Ô‚¿û{+§—– ]—PÑ÷Š»§xjùGkÎ�Às¦ß~¸ºÎ¡ŽÎÿ�Ó2½,„X¸jþ¼Um'†Ä«î´g3\øÈ¥‰<ÄŒ»á’ÍÏ­øf÷�;ó4]Ž¢BÊ´GV,þêÛ…ó� OȽòáë/ïÛö´çÂ#í�7¼·tùHªÈÓ’‡õíFžàw7!§/bL¡œóñšÇ#³%B0‰�çβwLÛKK]y•½¤D�wñÅò÷µ®.{(Ös<ç’‰<ǹ‡Û>Ë�K³Ð#­¸ë«ß?¹î=ùóÜ¢—ÂS"z~/I’ˆ%I¢$‰X¥–QrJ’(‰N×gb1‡Ø¡ltÝ"Võûï¥ë×B·-Ìn IDATÉÉ™«V*¨×RÎ7pÅê9Oý’ùäüR¸óÞeíV+¤…§P(§™Å#R9±è,Ž2:kk ¦L•õbüøñ‘ÆÉos±…Ö Á¨T<DZ<Ëòç .rl§éé‹Å€Ã°,òŒÈ`–eX©uJšiYW¼u­ ikŽ :¸S{ª"fŠãkÖØ‹‹]qeÿ ëùˆêÁ”s©|çOE8*Ò a,»Ö®¯}KGíB¡P(କŒ’ÑX0eªíèQÐçòËC²³åe-aÑ�G°J˳Ïq­ª‘cYyzÚM5f¯œ&G@ê%«X¦ „X¦ãÚ�‚¦þC$NП(€�¬,†aŠW­²?^0ýš¬ukY­–:0圞¬5E;¿ÛV^Ûl#Êฌ1÷Ýqe*}Þ•B¡Pþ:Õx6NLc‡ãðµ3š7mBñcÆD "oŠI2ægž8ŽçZâ‹×A5rl@pEqÇ�Û-ÄÊ©y[�5!91#7#PwCLÄ–)iÉ)Š¢$9EÉ)‰NQtJ’S�¢èUÇ ‡÷ÈëKÔîÝ{býz 92ý›åŒBA˜B¡P(ÊieñˆT!s¶Ý L0>zÇ�²^Œ6, zQ’¤={ö8T"§æ@ªªnª>tèP ª‰äZHà9yÙY »jäú±öͨOD0&’š�sÁ yË–¢Y³ä°+…B¡P(Êé¤eèÞº«§�Ò¹sëW­B!™™Ñ\@0&›b“Í9ƒ9—¨âx�ãxÞ¥®.±Å <Çlž½¼¼Ül6wø²¦¦¦¾¾>€•e9–Sp­b±½^ä9žçÎÞ7½!c�l‡ÈaÃ" B kו=÷êÅ …B¡PΈjD­+ñž%jøîûÊ·ßAéûôI¸øb�$�$[xŒiÐŽçäùh7ÕØ“Sp¼ÀvµÅºººn}ßc†qéÝ–¸©ë‡w)cVàl©Y¦>é²5bFŽ NIA�|ã�Æ ¨S( …B9´É¬¿\4Ú+*ŽÝw:]ÂÅ!D’l†ð†acXÏñœwÕÈ÷øÝ-Þp:�Ýú¾WÒ¡Õè £ºô¢À±-õ5 jŽëK$ 0N¸øb¥ÁGï¸Ó^VF�˜B¡P(Ê�ŒgÅ"4D‹fÝ&640 “8nÇó INmPÓÈ œRÉò¬K,¶©Æ–i\þYwÃUGw½Ø¾¾¦Á£laÑ I Ã$�ÏpœØÔtäÖYä4¨X …B¡P(wd½…þò cé³Ïš¶oGÅ ª'’D8¾ñ‚qŒZ%+E¶U<Éz‘ç8�c9¯ËÁšL&£Ñ(Š"Çq�F¯×ÿ%õ²Ûí¿üòËáÇm6[ddä\�’’âU5r¬Üi»[€ @i1žûn)knVÇZþÛoæ�;Ëž!á™§©+S( …B9}´NLÿ•±Æ¦-[*ßz!¤KHÍÊ’õhÊ¡á®Hß²’Ž[¬Ñ‡^¬«««««s8c‡ÃÑÐÐP]]}æëeµZ?üðí[·Ö××[,–’’’Å‹ïØ±ÃG–c;Æ]Š™åxiÔ�#Æ@ã�Œ ù¦ÆÊ7ÞhÞº�º2…B¡P(”3 ÿ2ÕHDñø£�§R%Œ)?äaIÎpöË’uRË+^ÚÅ}èE«Õj2™:i4ÏpÕ6lØP[[ÛùËææf_M²nz‘e]+PºT#ŽŽ1æ ‘­;t(¯ÑBJþõO:=M¡P( åÌHÆ¿†“o½e=xDçå1G$É©7X†]Ärl«NâZ^ («F–÷õzR‹ÅâñûÆÆFŒñ™«×É“þùgçï%I*,,ô�V®{Ërå­ÕçXžå8Ζ“o�M"’İlL~>°®|÷=êÍ …B¡PÎMÉh¯¨¨xù„�&""(1‘H!Ð|ÑeŒJ)¿úÏM5¶ê§.žw‘¼¬q�1nll<3õ"„üðÃÄËÚEÞDmÕØA.³-/HäÎ4z‚Ä D’tqqºØX„PÅK/9NVR‡¦P( …rJÆã�=†-Ä01ùùòd«9k �`9–㸖º"‹\WñEAðú&Z£Ñè<#¸(ó¾üMxx¸?™´Ó‹œüFD–å8–ã­Öœ?J¶Xtn.bYÉl>þÄÔ¡) …B¡œk’±iÓ¦†5k@XZš ÕŒ%•Æ>x¤_lù- &—^ôçÏZ­ÖÇn�}}‹GœNçO?ýämkppp¿~ýü̪U/²¼K/ÊÖ`9Ö‘•ë�&óMxz:¨_µªé—_¨OS( …B9§$cÙüù€¯T†õë'ÌL£Æ3*•,‰XŽm‘G.�Ä0~•–ã8�Nçm«Ífóg^¸7lÙ²ÅÇ._|1Çù»–$BHÖ‹×"[ŒÃòœyÌ$BHRXj*¯VBåóçSŸ¦P( …rîHÆæ-¿™¶mG¡}û"„ˆ$Ùc¥ÔL†s 1¶}öõˆtg‚‚‚XÖëþ ä´½!±¹¹yÛ6¯KÞÄÇÇgeeu¯…X†ãØ–9úvÆ!‘ÑÖ¬AD’@6#€qËotÁ …B¡P(�—ŒÕÞ导±‚”�@$‰HØrÑ$†sSŠ\;ÕØ½Z1Lpp°·­¢(ž¾wÖ¯_ïívI„Ðĉý™[ï€K/ò�̲¶ ÆH,G$)8!�S*¡ŠW_¥nM¡P( %À’þŠ¿˜vïnÞ´ „$%1 ;ú¦AD”»r�¨õ@fiµZÏÁ455y{°º7”••:tÈÛÖ�ÆÄÄô,gÖ‹˜f4Z{Î`ÀX6&húé'óž=Ô³) …B¡ôâ.ϼj¬øö®;>Šâí?³{-w—Kï½7H…Ы (]©Š (Š ‚J^Pù!Š( *Jï½ Št�$”4 $!!½\ÚÝ–yÿ¸KrIn/—BHÂ~?÷‰+»;3O›ýî3;3ß|�…‹ fÌ0]ûÔå‹UIÇÆÕbiiÉuêi,¸£YX‡ë¬H$êׯ_ã©=ITé„ I‚$ ͱ€PuíÍj�..¤H¥ó‰FØÙ� íOK†´ô±Ñ‰Åb™LÆu¶¤¤D¥R5£\QQQ\gûôé#—Ë›R~uæU@’-o$I’�›ª:„ÖÎΠàè1Uj*ïÜ“ZŒÌ\CŒ›0,Т†‹Ðq¿ÍYýð¥•_ µC8çä²O޹Î[;-€~øÏÖ-‡o$ç©H…]ø«óÞím�€Î�>´ãÀ¥¸´Vá1lâÄžµh)�´ýã×·€(röOs"€Í¿ôãÜòòTs×ð!“&ò–"6mÿÂ%—‚®çIâ ýuUF@æ¹ï×콓SB¦A}ǽ1:Ä’À7¶ÿr(*53OI!™­wÄ‹c_èkŠÀà©¡¥Ó` c�íØõWtj#¶ô4cþ(_RÕzÄ̪UÔ�#úÔŽó¯ÿùóÁ˜ôì¥ ÄUÚÐcSuôÆ9k \±|¤ lÚ�E ÿö_ð¿IGá\¦ Ô R½æ«¥#-ÈU.¼µoË�k÷Ór””À¬Ó”¥³{™ëZS_QzM¬ŽþyÎÚ‡—/éJ.8»òÃÝfï®›ÕYÐ@'ì*â´H�›êk¢¼±ñó )],{ÝO ôãã+—3{cù{]-w,Ôu$Ï$ý¦ñÕ×TÃ!fØX]EõE�ÁXÓ{–³‹PŠ2#}£[ÆïMï »g0¶YGVy{׊�’s)©C`ïÑGw¶P{µ} tŒ\S×d¼Î€¶Õ*5›uléäc ð÷ÕÒ—ˆç†4¶(eT^¼È „L-,€a€ï¢!‹U¬‘¨¤nÞª---333õófŒ ­­­C‚YÖÀÂ:&&&}úô1¾´'N|øá‡‰‰‰Uÿ’™™9eÊŒñ”)Sª_Îu™"I„–;ÒÝDg�€Ü̬8;›ÉËS^¿nÖ³g»pTêþÞUkN¡î¯Íç éöìZ½F½hñÏú 1›vâç-·,FÍXbÁf–[™!UâîÕë®X¿<éÃi–%wýþçÚí¶«¦‡Ôc¸�3£—$µÖöcbÇÈ1ƒÍQ^ÌÑÛÖmwX==DTo]Õ„ßÌ»ßøY/YH¡ öØ–½?ms_ó^g)Â%i±ñN£gMó©rbÏض2µtÉ‘nB0pŠ[WÉû¿ùæÓyÔô±žrºP)³€þª9Ĭ_í¸4=!±Èeì»oº *²¢�îÚ¶Nà°zzˆDÏk€_°Ÿðj|BáKXyÿ^†Ðw„§€º¿»‘6å4Ÿ¸vÿf”%\¥)DEgÛ�š5ÍOÊ”’µ?ŒÐW”~û…ˆ®Ä%ŽpµDå wS�ïd±*qGC�И@à§Ó„I‘ 7üv0réhùß[ö? ~óÝ.È@,èw$O“šM5&Äê1–�¨Ác­¾H¬õ 0eÆûFF3ô?†\Î@0¶QGPÓò/¿9 ?¾|pÏúoÔ –O×ï<†LÆÕÍê5—×n?²éûîGƒ]@bs›ç‡/€ %—dÌ?sF3*-–É0Ã`©Œ V“E�ƒæ¦Œ"‘H.—sÍP)--•Ë剤¡Å^¿~=''‡ël¿~ýLLŒúÎ!11ñ£�>:~ü¸Þ³óæÍ›0a‚P¨uèê"Aˆ ‚`�i;'2#U"“!‚À,«ü÷Bû Œ¸ôæ±3™®#VLÑ‘ò³+O_xìXÌ�Ù‘Òz)cI±K;øz»‰Áͽ²Ãùïø¹‚à© GEš"÷i9·>:x5qJHh Î$4³wq±Óö¿,2�ˆ®až$€¿yÖ­%cRè¿zêÒ}øI]ƒ#4‡î²´k‹Î'e0�½HâÚÁ“èØÑ-^vòø�—f†Kê9¥eQGO?v±â�¡ŽºS®¸«®+¦‘jGÿà O-sï|q1&… ¨Ë*�IP¸?ñ{Ôíâ}Í•œ˜Bø¼æ#j‚M9Í\‡®aÁ`¥&ÎB=õM^Óç ½z6 ó'~‹¹­ØW�T‰1 ŒÏØ Yiƒ�И@àömEç×'uþüÇÍ›‹e1!oÌìj� ]ï«Ï‘hƒcºM5.Ä8�U_Ô€ÁX«/ëB”‰KŒö º9ún—«ÏômÏQ5m³ :¼¯' äL=þìð™˜1]LŒr®ŽÑ@7«Çdz½®Þ®O`jçìâLÂs‡Í2ýuLd2X–ñôCb!AˆÔp„ÈJ„šÿÃ5ssó²²2–Õ?£¿  ÀÁÁ¡A–——ÿûï¿\gmll"""ê-¤°°pÙ²eëׯçÚfrrrîÞ½V#ÑXIA$"ˆñ"Ó"¹¼´¸¸ðüyçÏ>mnÊd¦�Ý$óäQªª<÷—÷§nÒv �D…å„FzamoM”ל‰¨·.Ý7×웇v½ž”Q¨Ê„å á£Ïè"×àű¸ä'L¸;â>ÅÑ0:#ù¡Ê2"À¶1U¯öš #lìlêh£ºk7 éDüzó¶²O/ijÂ=•ûÀŽf† ¯·aœækª,ØôÒtœA¿ž‘ip× â·¨Û%}zŠnÞUù�3gî„Æ‚!ßVtz}|Èü ÿf¿¹F“a侞ÑŒŽÙ&‡˜a×5kõE¢áCu”97Ù7Øÿ4C0¶G­Ó8[osõÝÔ,¦‹KCkÔíÉÆôuOCÛíš2b€§¬uæÍ\i™ 3 0Þ~¡Í�!B›6CÍú£.H’433ãZ‹Q­V—””4hµísçΕ——s�4h�aA†Ù¼yóÂ… ä)u/®\•Š"ªõ†‚`}ð©Ã •ÉÊŠ‹KoÞdKK îõÌÛPžÑˆ>! ËÔöe¡Ë ykBc/œ>~bãÂc§Æ~òé+ž Ì»¿=¸G•��Ø\^ãFƒ�D[»Uúêªþ&+íøwëOý&½3Éà ežÝøÃMîÒ9%6pªRUXÏèwÕ¨‰j×4ŠÐ£ ÎÚ#X°ñjTQ7ïØØ|çÈ`K… ç0eu»¸ÌW�° ‘¥Q§ž‘ih·Äæk1ÊΊë·T�¯F˜#Èm„a¾�KŧªLLàÁõ¨ìÞì×Ãc½uq›Ý ýJäÈÒq©Ô`¬qœ­Ï¯êFY|£YúŸ¢¦c›qT="² I5ÔytLÖ€nÖPÁ¯QÇAìkDøÓ„òÚUÍ�X"ѬàÍøA�UýÕÈPFµZ½~ýúAƒuëÖíƒ>00LMM«†wõ&ü¸r�z3QQQ\gýýý½¼¼ Ü~þüùN�:½óÎ;ÆðE33³:ÔŠ|BGi•´aŸŒÌ0b‰0E_¹ÒÜ”tðpå'ÆW.úÊdÅ'ˆ\Ýíu_X …¹çfdéy£Db»&}òå§/™=8}þ ¤½«3©L}ÂÚ:VÁÁªÆÂ2B‘ÊJ˼Ìl�ºª³%é)éØoÀ¨ž<�]Ü=ä~Îf'%Šœ]õ¤wꜪËI{WgA~b|¶îKwÕ†Ä4JíÆ)EÖ¯«,þü¥¸¨è §N„Á ˜²JÆzÌ× Wšq 1N=#yXïqü… .F3¡½#¨1NhŒE¸‹Å%1;~½¢õù¢×\îïþõ\kèz½ŽÄmš:Mm˜V9�e(j¸cMÿÙúüªn”5@Šfîž^0¶G­Ó¦Ô; Å7{²áúÑ1™±Ý¬A¯k^m·Ç,ãÓGñ•«€BH$Ã`S3äàŒ]Òƒ´)F£ó�%%%/¾øâ•JVtõêÕüqöìÙ‹-Ò»nŽfÁ.–¦YpǘªOž<ÉÅ/I’8�s툇~òÉ'{öì1^u_|ñEÝï,‰Zª#A 3.äýx¡PHòE.˜ÐÖÝÉ"† tX~hý&ɘžÎ8ížCéŽC¦†×ø,†°ëätàðÎÍ®t/7d§)Y6+úlÃUxêÊ‘ÓÞ/¸à¼bEX7¯úÛ©·®ê`st±Ç§Ï¼dÙÕYNd—ê²=6?êØ!ûn>Ö�qùÀÁT›¾B¥†O¦ Î�»~û‰}¨­nF¯Ó�~GVX·Fôö¶ JsÔ¶]B¹ª6(¦Qj¯E)»?]zÎçÃõo…Ôè\DþýûØ-9±)»ÔùÅ·0P8‡)udä0_­^ß8 Uš‘ý©K‚útU|µw;aÚkn¨@#œÐ§~‹p‰#)�ÝóçUùÐÅ/¹»oŒ¼±hïïçC?égÍ)¾>GŠpå0�¾¦Ö#�acùhC‡K¥†cMÿYC~ÅeÆûF³ô?MìÛ”£jÞy+2nÇ©ÅꜸ³û�g¹ 'XbL�Ü&c u³Æz]ój»]QÆ˾–FG€X,–ÅŒo"ID !DÚ¿BDÈ-Zt¥f�¢¨ÿýïþùçòåËß|óͺ{®H¥R®e¥R)—Ë d"5ˆ‹‹KNNæ:Û­[7KKK=(-]¹råš5k gׂD"Yºtéœ9sôÖ⋈@"¿@"ñ®FÕeååÊk×Ú…£Š¼ÇÌ›+Þ¶óð†¯• p >wÂË^µÌDº }o†rËÞC®”b�ÌÜÖ;ÈÝŒ ‹Ro=µ-[I“2�°‰oq#À$hü‚�Lwì;¿õÛýå`bé9®SO0ÑÉ‹EŽ›¿q÷Þuÿ1&v!c<»A9êªjß°S þ8²õ›Se¬@"3³÷²•U¹»PPr÷ð¦Cyj©CÐÀ÷&Ž ¨žý«ÿ²î1ò¥¨_ÿÞþwxÇ×tß($ãælºcï_¿­Ý£&‘‚»sT]�˜Æ¨½Ö#€RSÈÔ¬îªë·þƒƒNnŠóÚѨ¯pý¦Ô)­>ó5Ì‚F”fd:Ü�‰E~ýú¸üu€éÝ?@d\½uEðq2Â"z‹¥³Oî8}æ q€ã€×_<¿lÿ¾¨È·#d\ÍÐçH®–úM£¯© ЪžÛµo.•Ž5޳†üŠ#�÷�fíÙ¶)GE2ç_³›G¾ûº”!ä6Þáã¼ö¢»Ðxµë5™ánÖH¯k^m·' y6Á,`cðò—žV=_wvÁ¥¥¦ …¥•¨_‹:\$ %B‘D$‹D¡æ/2n`clmm�ŸŸÏuAhhè·ß~[w™Š¢2331Ç· &&&¶¶¶×®]ÓKìlmmýüü6lØÀU¯L&›={¶X,®ÕÔíÛ·ÏŸ?ÿñãÇÆëlÔ¨Qß|ó�‡‡—ø”ŠRW¨© µZEQjµJMUPtÔ Ñê/ 0?¿¨¨™šF¦>„x_o½¨½@�q§Z%péÅÿÍÞaúþÚ·C묕£¾·õ³osF~5§‡ïŽ<ÚFòàMÆàÏî¾B„HÔR{LW<|È–”€ˆ$�a€aÀÕ!„„¤=Ðþ¯±M*++3À &&¦oß¾¯¾úê£G�j¼š…¦¹”——Î^¾|Ù@½¬ÅoܸѣG�‰'σƒƒÏ�;·oß>.¾ äGÚD#BH›dDàæ©Ñ°�$€-.V¥§óÏ£e@=JI·êÚ+P—/ªs%§>Šû{Ëoÿš م狜¿8ÙØ�$‰Í-é_vŠ$"‘D$ E‘P"Ò R „ x¤|öÙg_}õ•‘;;;¯\¹r„ šYüJ¥Ò@²0##Cïƒ>¬•³ÔÅ´iÓ\]]@¥R­]»öË/¿T*•F6O(Κ5kÉ’%Fο†f(•Z]¡•®: }LÄÝfY6=;¸³Ú~útÞÝyðàÁƒ ÅŸÝýH„Zj`:5*ÇR1˲6všc¨J1"„hè Þ‹/4h�‘§§§Oœ8±G�7nÜ€úÜÑ;º¸¸Ø_ ÖðÅ~úé§ÆóÅAƒݺuëÛo¿5ž/VéS«F�Já' IDATÿb+̲´úT¥¦òσúè£ñãÇ'œVœššªVëÉL%''oܸqÏž=Æìû§Addä¥K—þøã;;»æP-ªR£–q#…¹6ˈ1 ¹'€?þî4pÎâ�_rã§íòàÁƒ B =:™Ê•±fZ‰‰IUNQKyP³-6=`À€˜˜˜ 6,Y²¤¨¨È˜[®\¹2dÈ�#F|þùçu?‹¬¨¨H¯³´a~~þÙ³gccc�o˜““Ó—_~9iÒ$ÔŒ kW îkT©Q«TŠu¦ï°eåmÍ-é¤í¿¾D‘³š lþ¥çþ“—§˜»†™4y�·�}hÇ�Kqi¬Â#bØÄ‰<¥ÈPQYÕ Àâüëþ|0&-« D &¶þ½w&ü{õÌ>tÐÔ7‡ùj·¨¯\vo÷—«Î›OX4§¿Ypcû/‡¢R3ó”’ÙzG¼8öÕ�¾¦pá­}[\»Ÿ–£¤f�¦,�Ý˼º\bçî¿¢Sò*@bfïìÝoÒ¬AnJ=·°…wŽlÛ}6&µ™¹† 7aX tÜosV?|iåCíÎ9¹ì“c®óÖN Pr6‰lذï¿ÿÞÝÝÝø[ÌÝõϺ3F^,–‰ß¿8ßÄJ U´Q(]ʨV·9¿šÙ»¸Øi „Ì#¢k˜' àožukÉŘ:Øå¿ãç ‚§.iŠÜ§åÜúèàÕÄ)!¡BƒEéIì};x’àk•u=ú¨S§þ�; ¼!þÒÚÄ{Ù¬¿#*á¨E³d;›wcóÎmÙaï}6Ú·:óˆ$Ž�¡øàƒ””cnINNž7o^DDÄìÙ³«>R|üøñ‰'Ò²ù^xxø·ß~Û«W¯†*êaCdT•ªžÄgzôôªÖ3€–2"Tý·½€°¶·&JŠK0óäQªª<÷—÷§nÒÊÍÐHTXŽAØp� +s¤*Vª¤¹¥ÊÊ0ËY °yÿò“ÚjØ“ÃÍ9ê¹(ŽÅ%?aÂݹ›Åd$?TY†ut¬7 ™Ì”Gjˈ[ígȤ] ŸÅþ˜”'L¤§‘²ê6‰ßŸ•ýÓO?ݺu+6â‘IÓô¥K— l*­§…BáÌ™3ÿïÿþO¡P4Z[ac;S•ªŒh!# ÔjJ¥ÖjP”VÏ, ÓÖ(£P$„²ÒrÀp Œ´wu&O§>am{8 šVTcja‰œû¿7%`ãò_Öm°Z2§¿}Ýv°ÙII…"gW[²î°¸N-vNöÄÙ¤¤<ìmk˜í‘n¢3‰ñ9¬·LV|b�ÈÕÝž`æ œ›‘E�£¡¯}u›Äƒü›o¾ñöön�‰RQýÖ¡T¥R`Œu8xETQFR*mK¾I:x¸ O]9rÚûœW¬ëæ¥ÿBd1¸ßáUG¿ÿ�ÞÇ×Z Ê}\b×»§� jpQÀYKU%6=Þ~?kùŠmŽz.á.`󣎲ïæc —Lµé;!Ô° �¢Ó€®û¿=øã’]!;újz·B²ˆa–Z¿I2¦§3N»°çPºã�©áR ìÃ:98¼s³+ÝËMÙiJ�yóz›„•ÿý¼è—¤ðÙË'wà¿käÁƒX£ .‹|XXPO²XMö )‹1®¬c¨ÌøaŒQ‹|x§ÙiúÏ?ÿœ?þ“'Oš^ ŸŸßÿþ÷¿!C†<Câ*=‚ft+‹’–¢0€ !û">{ yä¸)ñwï]÷cb2Ƴ+'Ï3 ¿à#ÓûÎoýv9˜XºFŽëÔLS”ÔW €Øë•£ï.ÜûëѰţ\„‚’»‡7ÊSK‚¾7qL€¸^©Ã§Ì}S´ýÄþõçJDö^V"8†©EÞcæÍoÛyxÃ×JP¸†Ÿ;áe/ÍŒÒmè{3”[öÚp¥ dæ¶ÞAîfÚñt®&aÌQóàÁƒ�úY#šgÌf1f¯xpé)Õ;t¨òÒeIÚÉdÀŒ�D¾9K(Š$"¡D$‹Dm–µì\�ÒÒÒÕ«Wýõ×�+ÁÂÂbþüù~ø¡èYŒÿª+ÔT…Z­¢´jJ¥¦�&×}Ù¥¥*†Qôêxä0ïî-6­zéÇF—ñøÐ¢…ÿ~þõëÞ‚VÒ$«!2ooïC‡�;wîÃ?¼}û¶1·ôïßíÚµÁÁÁÏÐx¸&_¬ú/ÊÍF$‰4+�‹Ü\yGoíÀå9I7Ž_IÏ-®Àsç€~ï¾5ÜGÄë…{šQÕ’ÈÍF$I3ŒÆ¤bWž2¶ —Q_þ:ª¡w!yØ„…aZS“xðàÁƒ݇IËT#vsÓLÏ 1’„‚<¬Rk©[IYŒ1ûŒ´@ðöÛo'&&Θ1£î’Š"‘hñâÅwïÞm |pï®qDö IZ;ÃWñu.±2ñ¯]û®g³m®ðæomþõmkÖŸyÜþ�Σ5w,XyïÜž7rØç¹_âÁSÆ–©FìêJ˜šÅ0Ú0i«¹Žö€e[ k€¾}ûÞ¾};--íòå˹¹¹çÎ�óôôlUÆÃl%×Ö(ŽÅ˜Å(-"IŠa€03;:¶oe‹’£n&æ¨Zõ¢0¸"ç^ô�ôrÜ”[paì¹S—“KpÓ+mzáU ïnž5õóC�+®­›:õ«¿ ¸  “v:sî¶øfØÝ—¦ÇÆ¦ä©ø•€pyÊ™�ËÞkÚë§~vð1•zxñÌ�6G—á–tæ&ZÖ€ 5£ÏÕ�êŒéXpáÝ¿N\| ÄMì—ZXL<š-5%!iPPɵk*•fiF"9‰Åƒt¹ŽæÇb–„V´ˆ“““““Sk¤O,«Ñ\ÕÖ°G")Q£a•Z�äA�ml�i\rõÇ?]-¢X b¹¥“WH÷¡¯ °h#ëÃ0ÉG¿ûîáK+;8›<Å[Œ/¡é…WC(�€ˆˆ’y§–ÏÝO×¹*ø­µ,ì,¥D[r¼¢³_ÏÙ|‡Òí½Æ}µôeB_béÔŠ�õËþݼ~ŠêˆÃªÇ7Ž>u56%[ÉöA]‡½6"Ä¢á1I?8´akœãØóýÍH‘•©¶°wp°’ PK:3!mšekº�P7}!mQŸiáêžy½%XÌ›ý™‚�™Ê…¹)!—Ë%H!5ë8i�K`ÒNÿ´-9hÊÛ}�;˜:[ÌY<°-vˆ£>Û¡ŠÉHl¬õ?Ú‘¢3—ì:[�㲄Ý_­9òIJSÿ—ßð¶‘Ð…éIq¥êFup8/1!ϲËÛƒ#|*{í^³÷jqpØËÖr! j¶’[X�6W/m‹2švéòdÃ�€�J­–‰Åd^6ÎÍÆŽŽlad´AÈÛ¥~TòE�þ*É7M ’ï!’¬(/ÀجWÏ6INL|}}ÄîBÏ_vöüÝñÁµÒ.¹Ñ‡v¸—VÀ*<"†Mœ8ÀSŠ€Í<÷ýš½wrJhÂÔ!¨ï¸7F‡X¸âá?[·¾‘œ§"vá¯Î{··5â,¤ê9�ýÏŸƤg(U ¶p 2iò o)¶ðΑm»ÏƤ#3×�ã& ´¨¤tÒö�_ߢÈÙ?Íé*ª§–º·D›éǹÿä婿ÕõrH§·Ò^Ÿ6+'wÖ^LZºzy•ÙBK7Kš¼)€ÇVþÚµÂÙ´ýŸU.®ÕaZVA‰Llý{î,Lø÷êÝGj™}è ©oó•#ÕaMe÷v¹ê¼ù„Esú;�7¶ÿr(*53OI!™­wÄ‹c_èkŠÞÚ·åÀµûi9JJ`ÖiÊÒÙ½Ì�²)!³÷ñóÕy7ÁÅ7~ú|CJ×Ë^÷ýøøÊ¥ÇÌÞXþ^WNÙ«¡NÜ¿éh†Ëè…óGzh‹ìÔ­esøWó°Z¥f³Ž-�| 4éÏ%]o­˜wÔyî·ov.Š?±s÷_Ñ)y 1³wöî7iÖ çÄßæ¬~øÒÊ/†Ú!œsrÙ'Ç\ç­�PRG?Š'FúUdV�eá*EmÒíÑtœçŠÖÊKõE�:úç9k\¾|¤+¸àìÊw›½»n†óe}¢q®oo ÄXåí]+ntÎŒ^V�ÔZX-zn;FŽhŽòbŽîضn»Ãêé!ýÒ!ŽXx½í4‰|ka$@ïÙs�wÖÒô„Ä"××ÞË]P’|fë®ßw¸÷;î½WÅEÑßóÓŸU“üœZª¤o˜Ê8·áû3ÄàOfõs°%i±ñN£gMó©rbÏض2µtÉ‘nBÀÊQÑÙv£fMó“2¥¤ƒÕmO]›Š9Ò‰�&LŠ\¸á·ƒ‘KGËÿÞ²ÿIð›ïv1j\YûÏÅE·ÉC=êÍí?\ͲéûîGƒ]@bs¢z¿**yßê¯�©ÂGMém†s®îØ|9)—äÌe‘ºúiœ_5\ ‰Q.Äê�Öj£èm­_H€èJ\BáWKPžp7ùNö#’S4ýçV¨iy‡—ßa…_>¸gý7êË'×Þ Ô˜`¯·{1RµJãŽÎàªë  ±ˆñÅòhGYÆ–a�"{‰¯oERR©Riãì dR<Ý£oUdY3¬†ñ”±ž#SE±1˲úˆLÜ‹Õ|ÈXªTby§B*m›¤˜Q«Õˆ./ÈH8¿ë¯4¡ï þ&5»ÇÿŽŸ+žºpT¤)pŸ–s룃W§„„ ¥®•éHwYÚµEç“2˜ÎÞPR¬ÄÒþ�Þnbps¯·ÝGˆÄÁ?8È“„À@ËÜ;_\ŒI¡ƒ]o;“é:bÅô € ?»òô…ÇŽÅ ™©Q·ÐÌÞÅÅ5 –· „Ì#¢k˜' àožukÉŘ:$@ W:AÝj˜ƒ]Œjg£€$ö¾›wcóÎmÙaï}6Ú·úq�$Ž�¡cƒä!nÑôú*·*«ð¡Ãûz’ÁAÎÔãÏŸ‰ÐEj\¿ÄÜZªOúJÓbCÁUÓèX_,�öD[Œ5šxáIR¥VÓ%”H„÷Ô ƒ˲ՉF†Å,¿XA}]*˲ ËV2ì*Hî' ’¤T*J¥³Þ}Ú¨€ê›ß™¶ ä.a£çLîo�@'ÏÈ=NÒTG„³¡àj¼E˜&Ë£­RÆ–a�j>g,)*²”ÉÈ’b"9‰õ¬¦>:É'9žD,®R”æP–a1ƒqa�àá}D’¥EEš'–¢wï¶ê—£ç� 6JäÖÖ ±¾)«„y÷·ç÷¨:‰Äærœvä»õ§‰~“Þ™äa†2Ïnüᦖ ¸ š·&4öÂéã'6./´°·f3$…3Á>ÖoSMŠÉÚÍÍM\'+ø(>Ueb®Ge÷`gT×DXÚÛˆØ{�Ò)饓Æd�j6�£C`X I¢®ZBÀ° ®ÇëWÍ*Eͬ¸žhÕÛZdÚ­±ùZŒ²³âú-Uà«æÈ�h UE½ª³E‚H�–ôëÁX³VG„¡à2ÎgÖñ�év„ã–œþ¦={’VVl~~q^ž•‹ ˆn^Uûøk‡¤u‰#O tjLmz­�0êªf@¿8?ÖÖ¦‘�Û¨Œ„ÌÎÛÛK¬ÿ1…€´wu&O§>am{8ë:±êVJ:ö{cTÏrØÄA®ãEHl×aÀ¤½ºl_¼üôù{C<ƒ8 ©¤ƒ‡›èLb|ëí@“ŸX ru·'h¡He¥åU›_’õ×RûÎH:—tJ0¶p²±ÚhpÖÎ9÷oJÀÆå¿¬Û`µdNûºíc³“’ Eή¶d�ÁS�á厾ŽÕ¤ ¡ïh%1;~½¢µpŽpëÿíþõ\ÇùÆ‘FQ`�N¦×/ùg�Ï‹Bcý§áC,¤�“=q6)){ÛÖxÌ sÎÍÈ¢ÀQÜü~ÕÌRÔyBÕŽÖ‚z[‹äa½#Ä?\¸pÁ,š �¡@ Nçîôu,”‘×S©wŠ%nö$hF? ÷KÍ©#ͪƒ«VÏË]¸ñý'?LøÔ>bp¿Ã«Ž~ÿ9¼�¯µ@•û¸Ä®wO‘£‹=>}îà%Ë®Îr² »TûÒÎfEŸ�ÇήV:/.½ä¦rÈT!&õù’E è°üÐúM’1=�qÚ…=‡Ò‡L —j¤®ÂSWŽœö~Áç+ºùÔWKÝ[¼8•C:}•V&6Œ.¼ÑÚhž'#WíUJ²éñöûYËWlÛpÔsáw›uì�}7kȸ|à`ªMß ¡Müt—Uf$ÄÇ «Ÿ’6žöOöüyU>tñKî.Ä#o,ÚûûùÐOúYׯ$ ;©[ü�.[ñpp¿P7K [’ý()ÛvðøÜþÓÕ): èºÿÛƒ?þ!ÑŲ£¯¦1„}X'§‡wnv¥{¹É ;MÉ6Ù¯¼Œ‹‚&ZA_´ÖßZ�õéªøjïv´×ÜP)2|±¾Ž¥£¡ëqEFÂí8µX�wvÿñ,·áïKŒë—Dúõ`ȬQ_pé¨Bá ë?ùÇt;M4 –Î&ØŒ{-kÓ&@¨87×ÄÌ Ñ› �d†dH]ÖH0Œ€ðVª¾È° ËTrG”ž*ÈÍ’,ÊÍÕ¼óÚ¼öj»óXë#_Šúõïí‡wï4~ÁG¦;ö�ßúíþr0±t�ש'˜¸ ›1µà�#[¿9UÆ $23{/[ ‹Ro=µ-[I“2�°‰oq#ÀD!Fd�¼ÇÌ›+Þ¶óð†¯• p >wÂË^BM¦#rÜ”ø�»÷®û�1± ãÙÕÇ©žZêÞÂÁêHéôUZù�5ºð&h£YPíb¯WfŒ¾»pï¯GÃ�r JîÞt(O-uøÞÄ1M]º“N<øõòƒÕìÄmÄÛáÑç¡ÏÕ¸T IDAT¼!nBpðú‹ç—íßùv„ÌÒhÙeÆR ŸCGþ9·ãra9&eN^¡ƒ(Æ€ÿ4&.äáSæ¾)Ú~bÿús%"{/+Òmè{3”[öÚp¥ dæ¶ÞAîfD“üÊ˸(h¢ôGk}­ùõëãòצwÿQ½ëéX¾Ï¥ ™s€¯ÙÍ#ß}]Êrïðñ ^{Ñ]hl¿Ôœz0dVŽˆ0>´õÞÜý'�6ûžkÌf3™|©ªŒéÔ¹âþ}�PèÛ½;"µOPÙäw„b¡P,I„B±æ'Ò Ä'k€RQ”JM©(µŠÒWP”ŠÙkrí<Æ8éÊJ¥{y…Ýü�W�v Îuõž{Å<>´há¿�Ÿýº7ÿÊÍGÍ€?ºû“H„M²±%ë¶~u,0UZXˆHR”’9Ùš´C3 Í24ËКc†7U�#]­"–fXšai–eX\Q.‰‹F$YVTD«T`;a<¯.<ž“Ž!ýÆ©¿¯ÝŠ»w?!æüŽßN=¶ééÊóE"^/mÝâ¼;×oþ'“5äÁƒ�V €á™-—]•hÌNJ’DÒëj#ÝE?÷|‘Ö°g¦ŠLkSŒ×Ȳ Éì{÷0vþè£ö@ˆ’ÿ¼íêãr£?ce²£Nœ¼–Ú�½ªè¤ÝŸÎœ»-^Ý”kpEνè;é�Ú#«)÷POböþ²ûvÙÓ'��ÐmƒÀ%GÝLÌQñûŒñàÁƒGkÆ3£ŒŠÝM»wÃE™™eùùˆ$åq1äã4½|‘¦ŸßáiÍ�4M1 M3:™W†f°²Øôæ%D’e……E@Ñ«—i·®m_æüK{φ�$}ŠSŸ©…�ƒƒ¥”hÊ5LòÑï¾Û{«¸QT¬ ÷‚È}ȸ>ÄŽg3žƒÀ(»°æ�ÉËOåñ¤’<ž1e|F±ó‚šDczT „HBqñ CÑ:d±’'Q C3?�O Z'¿XC94czñ/’¦€ GEaŒc§óÛ�ÈlÆ…¿âM{ ŽP<Õ¹ò„ÓÀ9‹?~ÉMÐÄkžÄþ/öwIûûï¤ç:σtÐÔ7‡ùÊQÍ•oµ·¤g(U ¶p 2iò o)ªqMÅön9|#9OE*ìÂ_�÷noÍ®qtÒö�_ߢÈÙ?ÍéRvkß–×î§å()�Y§)Kg÷R<á¡Ö½]EÀÞ9²m÷Ù˜Ôbdæ2`Ü„a�àÂ:ÅšÛGD8ï?ÿßÃq~º‹6)>g]t tnô¡.Å¥° �ˆa'𬙠æ�CÉÕwª£7ÎYûhàŠå#]`Ó,Zø·ÿ‚ÿ�æ×ÙâÁƒ�g…*†(¨þÿgÁݾ^Yxö,.+˸}ÛÒÓS(•šß¼˜íáË�¦Z¾HTóE„B@ ŸÖ¨I¯jX£æsFºêsÆ •å峈 èòòŒ[·€”ÉÜV¬hr«>HGƒ+3{ÈÌ»ßøY/YH¡ öØ–½?ms_ó^g)Âew¶}³á²I¯1³&;“÷þ=ô Š2–¦'$¹¾öþ[î‚’ä3[wý¾Ã½ÿØqï½*.Š>øûžŸø¬šä_Ó‹4·¸Œ}÷MwAEVôÑ]ÛÖ VOÑYÜŽM;ñó–[£f, ±` 3Ë­Ì*yŒÀ}蜽¬ ©µ°òATt¶Ý¨YÓü¤L)é @\"Ô½¨û{W­9…º¿6sœ3¤_سkõõ¢Åc:x5qJH¨ŒAŸ’}«›mîOüu»x@_3D%'¦>¯ùˆ‰D$A‹Å|‡Íƒ­�2>+8¼÷nîîÝeqqy))æ^^&OÒ¥q1ÃõòE@€"H¢[…eYZ3MÑt%_¬¤¦>0»wH²(55ïþ} ``ÿö[íDx¬V«±H$¬L)QÙ7íý‡ÝضrAJ÷þ/ ìÓÙMaô‹‹~ê‚ÉLy¤¶Œ°Õ:7ièg±?&å é©WN$‹@­R7B|–».WnÝ2O¥ªÊsyê&­µ‰ Ë1híe¼z•ŒLCº¿Þ¼­ìÓKššpOå>°£ÆD&‘rŸfäÁƒ�ç™2"�À}Õª¸aà åüy©µµÄÜÜâöµlk;ÆÑ¹’("„ ’/$ Ú+kdY–Vk™"Mi¿b¬b�P\luíDê’’”óç!äù¿µH(l'ò#¡H„ÔjJC%Ø´ãß­?Mô›ôÎ$3”yvã7µ—6fF! Ó,‹ ’ –­ç6D$°µ¯º š·&4öÂéã'6.xcÌRTò¹s€@Èúê9¶´¬Š*UÒ&ZK§Ôt»\v§š/jYc¥ÔMS4«¦­.ÿ% )@(åìYº¢cìðá‡íaa�j—´°±BŹyšyÀTzJ:ö0ªgOgwOyeöÊÁÃM”{7³E§ #±]‡“>ùòÓ—Ìœ>�¡He¥å|‘K„º÷’n¢üÄøí¿0Yñ‰"Ww{®|&[�›Ö6–�øPÃ@]tKÚ»:“ÊÔ'¬­c¬tÖ j°ÕLSÑ<¬_WYüùKqQÑN�" ì¼?oˆKûÿ…LÍ®ÜÉ: è”qøÛï\¼Ÿ{'ñÉS^ šÍŠ>óOT|ò£”{±qé¥ 7•#ÒÁÃU˜uåÈ騸»7/\NÒ³ —uïYİ�©‡Öo:ujóúC鎃‡†K¹š”ó ¹ÄÂÓü¶ˆ».ºE¦ƒûÙfýþ‡ƒcâîF_[s2•ߊ<žZËìc$øüöë�ž½èüü'11 KooyÎc6úrADíØtÝÌ€@Oo6 ˰{goKø+®÷»ýû~0ð©óE]šX‡5Ê’âÌS€$ SR2£¢0€ÀÜÜç—_� �M!'ìBÃ÷_úïá8_oé6lÆÔ‚?ŽlýæT+�ÈÌì½le@è=æ“ù¦»öþµmí�RV ·´÷ëìhòô¾v£‹Ro=µ-[I“2�°‰oq#@9nJüÆÝ{×ýǘ؅ŒñìêUûFNP�{}œ¼ÇÌ›+Þ¶óð†¯• p >wÂË^\Ÿ°Ù7o¦™…¾îÑ8q×e@·&Aã|dºcßù­ßî/K×Èq�z‚‰QÅr¿u�‘/Eýú÷ö¿Ã;Ž÷€À­ÿà “›â¼†ö¨š¤Ä/â̓Ïœª}lÂ`Ìf0þ*åâ³mMÁÉ“‰ãÆ#R( 3Fîä¾ÁÅ�a¡@ èþ%…�P  H!)x:+ï$œ‰ýáÅ5@�ÄŠ'ßÊ­åOIp†fª?[¬Í)š¢%ïÛE_Àe99wwîdT*@ÈoÏnóÚ¡Wâü³«ì•M_ýn¤œŸñÀu VÝëóˆ;µ·�üÔ÷¶~ömÎȯæô0ãíσÏ[ºù �µ®g�ÅàÁš�ŠJ8x°¼°HÒâA¬,)®Vâ�RÓ´š¦Õ¥¦h5M©)Ì6"¢4¯DsÀ2lyaÙSaGkÚO«5BiÇÜuù¢0ó±íÝ@*¥2~ï^F¥Ò|ÂØ>ù" Ë^£_PÜܳ/¾œÏ.q€J=±óo¦Û˜Žíˆ/ªs%§>Šû{Ëoÿš Ù…ç‹@¹õãÜs¬s;“‰tù›Fò¶åÁƒ�V‰ÖH;�Pè÷ÇiH(Íɉ۱ƒQ©‚°¿Gq?–VÓÕc¸jšRS”Š¢Õ¥ÒS*Š¡[uvŠeXJEQjŠVQ´Š¢ÔÚcÍðtÕh»$#ÕñîU`V­Nع³äÉ õß¹ƒà7ÂàÁƒ‰·7P>~|kÓ&UQ"I›ôûV ·h•ºŠ/Ò* Ç¢µ L­ýQjª.܈YL«i ¯¥TÕÍ®< +Y#-”ä”M"D••ÝÙ²¥(5ˆÝÝvï"d2ÞqyðàÁƒ-J[íô�•UÀþ}bOO PžŸ{Ó¦²ìlD’–9ivñQlEEǪ‘®SéüÔ­¦Y¶UGÌbš¢)•šªL+V¶¶ŠìVòE•Úê~¬ý£DªÂÂÛ›7kò‹bOÏÀ#‡…¶¶¼×òàÁƒ%vqá}—»2ƒÔ(ÇÂÈ(êïȨÿ#ËJwŠ¿o¢ÎžÏKN¾½q£*>^?êüþûn æ¿è÷ÓA!„P]FêMdÂqî‹>Vvîô`ümJJnròß_}Õ`ÈçÖ­¥LtM¼Ÿ›•œè죕›EF‘Š<Ç 4òÇóE‘‘ÃÔHá ÿ ¤ „”:‹­¿ dÑ?cÅÿ( ‹úÔH)£”êƒc©±ÆÂ˜hø7¨ÕvI1¶Oðü“‹£vî5 X[û®ûÖòÕW±Ÿ"„Bè¿Ä >EF=ËN��úóÞØqª‹©V{gë֤˗ jæâb¦Îõyt3ÙÊ9ÝÖ…J%ÏQ‘r|Ñ@#ÏqúsÓGô�%£ŒúÌHŠã"¥FQ«+Þ´V£Õh˜Av,º…xѽÄ)¥¥þ. ‹Åc�º’àÈt:Ëô$‡Ô8žê€çò’“ïîØ‘¡_­y›Ö~~”:;a/E!„P] �:<ûÅ™‹KБÃñ˾Œ_º”1–qïÞåŋݺtñîÛW05uÊzb§JMUÚ¥[;Q©„ãyŽÅâ!FŽãxRõ£Œ¤08âŠR#B€AÉÙj‘Šš-”ÄÅ¢ÿSÆ£úìXœÅÒ©±ðô´HEÊt:ó¬4‡Œ™V DQŒ9~<úèQªÓé›ÁaÒ$ÏOÿG$ì�!„ª xžÓ�2Ö³ÔHÁuîeÇŽÑïÏÌ�ˆJc~ÿ=ùêU¿¡CBCF³’ì²SÒÍlRmœ´RYá#g8ý¥èF®p�±8/BÑ_àêffo®JÎqkî¡°QhÔ(“KW¨?+]n”‘RVt-#Óé,³R²žHtZB’ÃÃïíØ‘Ÿ–¦_©iP ×—Ë•mZc×D!„P]Àq ð!„Ì´ £„QF—DÿU¿ŠÁtº¤ïˆ]¼XT©ôã�æ..¯½æÐ²¥~Êåøt…U¦¹M�ܼè¬tÑ(cIj,k,º”  ² Rî&¹»rЇ‹ò"ž˜.n,œþRr9£$?Ï2'Í&'M :ýòi7oF<˜ €35už6Íùý™œTн!„BuÄ–vA¾tddK¢ÏÖǨÏ�—¾?M{–ÛÙ¹uëæÒ±#'^¬©–È2V™J�Ô´ô(cáÿ Ãbñôã9U?ñEÿ?Zj ‘RZ4†QJ9­V™“n©J7Sç/›rõêÃýûU‰‰ú°ŒÙ à±x1^¹ˆB¡:�QÆ–<:[‹”uæLÜ_äüu®8ë™ÚظuíêØºµÔܼèUD%S䘚çÊ•& Âså/d„¸HŠ®c,\�~|Jòb¹ÓŒ2JEu¾‰©©]Ó¦¶ÁÁÖ��‚\^fµ UKL4‚T#Hµ‚Dä%"Ç‹¼ú¿y*c£¼N+PQÐj¤¢FªUËt™NMJ?‡P—ŸŸ™ž|íš® Š¦B,{õtýàEHöB„BÕ›È8Ã&„¾p‘±0&$d8˜¼eKÞ­[†W&޳ôñ±lØÐÂ××ÒÛ[P(jesºüü¬û÷3ïßÏŒŠÊ|ð@?¦EÊ&~~¶Ú}ÃÄË ûB!„ê…�­ü%/|d,¦ºz5eÇÎÔ={Ä´4ÐÏ…6ø©©­­™««™««©��©��©��D©ä+�¹L5MNN~jjAjj^r²*..7../- ŠÆ‹þÃxÛAƒìÞbŠÝ!„Bõ;2ŠÀØ‹ ó›V›sérö™3™gNçþ}•iµåãc1^*•š™A0<…-æçS­V«Ré4#ë/ЉD"Q4µìÐQÙ¡ƒyË0¼)wí5aÚ•�Ûÿq8¦“>u»¾6\­4"˼}âD´ã«½‚-Iýê‡,ýò¶�—í‡NîæÂá{ !TO"£þÄ´P6ñ¼¸ˆD¢l×VÙ®­ë¼¹4//çÂ…Ì3gr.]Ê»A³³ ÓhÄôtã¿KË~Í€³°P˜·liÙ¡ƒyëÖ\¹k%Q- Y¯]�jÑ»>öU–ýûÏ›ý�–Ï<-^Ôìêÿ–œò˜ð騦rRo¤¸PުݤÏÇ7—?µáj¥ÅäkÇ~½ûJûžÏ/2²‚”{‘Oäþ�\MI-öC–wûv4¯fõê½VÕ†~ÆŠEÕmÂËYlN.·xå‹W^Ñ©Ž�Í�Š*xôH£‰�Ó¦¤èÒÓµé4/t:Q¥ÞÌ �“›J¬¬++‰½½ÔÍUæáaâáaÚ°¡ÌÍ ;S-ªU¿�³îb––'È̬]|‚ÛôêÛ5ÀŠ¯Ï¥Ò=8°vK„óàI³ý-x©�¯±rtr²Qä)¨eΦ/R?^½úÑkŸ7r5}éß“µÚÐF*6ïìò)ß翱b~wL‘ad¬ãdnn˜ùêα:7;—úöŸ3´‰LÌÏ|uöÐŽ%7?øtTYýÍÁiQwÒ¬[NèêWô–k?ù£öõ<Ü—/z!?ÅaC#„02¢ºŠ3wjÐÀOMš¹éfòÇé[Ú”™A¤K ?°}ß¹ˆØ ªô í=|xWo9šxòëå»o¦¨tœ¹SP§¡c[s¬àÑ©-›^y˜¦æ•͆Ìz·ƒ-©p%hæí#Ûwþ“%ʬ½ºOš= �hæÍC[wýq=&›X¸wúfï@+XúåÍßí¿—œ‘£™•{³ž#Fv÷•¦QkhÒ‘E#�€à3tÉÿµº±xÖa×VŽk$ËŠ<¶c×ïáÑi`báèêÛyÄäî®Q§/{ôÚç÷r ,å×O><â>kŘÕ�=›ö]º›’£,š�Z4µ½%©I)ø **³ªë/W¨E¯el2ºÏ �6²&|ýô�»-þôu7hì¾… þôŸ½(àì¢ïï5›úéÈF&¥^žxq÷–=g#“ dv>îÒ\fp“Õ š£$ôTÐ.OYVwoÛûomiØÔuÓ[U0%®’5”¯v_ƒ�Ê»»ë³¥§-ß\8½‹“PY�ÌùjDWÁVtUí'íL×ì-P¾¡û\àH«¹c ÊW,àØ"Bª�ø(5‘ªÑˆ¥¿­ŽÚµlÕÛ>#fŒ±VÝ<ðÓæÛì—¾lJ,|;›üš•2nÙ´{ÝVÏåSZÈYì±ï6ݰ0ia°ÍLÌ·± •­¤x+Ú‡{¿üò˜ØbÀÛƒ½Ít™9 {@{÷ÒåÇI›7Þê qgÙ¹l¹fáGƒ¼¥ÀrãîDe¹ ~wœ§P�~xçÖU‚Ó²·ƒ¥@ì:½;³‡DfiÇlbϲ/ލ› õº¯K¹¸}Ãù{©´»kEC>9®…'; ˜<¦¡\Ìå�”¤†¥£Eª¾~Y¹BAFuVÒ°ICÉÅÈ;™ýݬ °œûw$ ú{ ì”(Še®õcy7·~¹ö¼iûA“GºòwÏxP+nŽ’Å+h“Ê—<{MŸÔÞ†‘ÛV4‰­’5¯öÂ=Ò&œ\ûõo\�'wvžZ'Úû»žVƧõ{ò›1 IDAT o�²+.ÓÐU)~eÇ�2Ëó„ÇàˆFF„ª�‰�†èò3îœÞù{¬¤Á+þ¥. bª¿�žÌh2zÁ€0sà9&åÆÌý£F‡HäîEÑžŠØK OßK[ø‚*;‡ÉùúzÈÀÃó©+)ÜLÞµÃ'âÝú/žØË™/‰W�ü–èÞñÛ¯:sA òã9r½çÔ091qòoäÍC` uêÍ�ÿº­ nD0wpusÕ¯‡GƼð#'âœ{2¹�»À\’�‘óOMѦ®�B½ùg(­(¡êëoR¶P «VÓ fþÜO×þÉîÚÉ‚hFEs~oøÉÌ-'Ý¢lwP];~6Ãgðì·»Ûh¨x|úÆÝ*5GÉæÊ·K÷§,+±ptss¨$ÊT¶u£Õ®¿[+M»²aÇÖä¦Sæ lPjDÏx�H«ZÆÊú‰.¢:o�Æe«TCWõ½PñÇ…RK¤RžÓÉdø{!ŒŒU—æêú‰cÖëUfnMNÙÅ–€Á8£øäqŒ:?õûi£(ʘ:"ÍÌg)Wì8|ù^B¦Z¢�䋜Ÿ¿.½ƒ®lý|Nt›.¯tëØÂCÉW¶‰þ`¦KxøHm`ox¤£k¬Cì ÇZx‡À†V{¯G?üK‡ ÎÎÁŽSe«*›+&<|¤¶nÚØ¹ÆoÅš•@›l¬¢ª³þgẼ[q?^ý'§c{yÌ�»jÏn�-ˆñ}ˆ‰­[ø™QYsT0cª¸]*[¶Š•_ñÜ�W;д?¿_§±éýñÈfå&|­“gßÏ꿞µøÞÕé¦ ¹”7“â0#Bªv¿ 8{hS‰‰™•­­RfäÎp €³l3av?¯â™¥‹=´zÍ ®óˆ‰#¼,Hâ뿹Z8¬áÖ}Öò�ÛgO=¶~Á‘ãƒ?œÛ×›«`%%G.ÆŒ;Y¨„ãx •¿˜Q‘Ïså�–„©ÈàiWzÕ¨4ö¨ñŠªÆú³j¾ÏEù(¤maýÅkY­}oßNw kb]ÁrD_ £uɪ^ Ú¥Òe«T†Š×À*ú1oæþøÆ}�ç ò/s“%£u’YÉ~V¹Î«÷H­Z]ÖhÇÊ~ÍYZYYXâ ªãðMŠêd¿T8øúúx{¸Ø—Ë‹ú1ïèîÊçÄ<¡öÎÅœläœ6.:Ž5ì: ]#oW7Oo'3ƒ¥‰Ì¡Q×~6÷5‹'NßÕU¸’â%xGwW!=*2Ùð:JÞÉËCš™RøDH1)2*CêîéX£»ñ.Ž\Ú½{ie½œÒRÉR’´O]C�JQYEUsýUÜgÃUôobÖ´s+Eäés×Â\š‡VtÛhÞÉËCšvûV¢Îø�jØ•.+‘J /7ŸV+YƒÑj×—ZêÚeʼqÁYGV­ýóIÙ"©“Êö³Êý¤oö´4^£+_±œc×i³zºñø‹!ŒŒÕRo5W*XjÄåžäƒyh�Îö ‡¿þfÿ_×#îÜ ÿëøÙ{ù g7Gv÷äþs·î?zô(&9·ð˜G“Â;u-òáãè»·#ârÁÌÜŒ©`%#>Í{v¶¼oÕÚCnDÞ¹ù÷Ù«1¢íÝÍ)æÀš~ �ˆ¼v|ÚqÎ=z5«ÙÍ�‰²y×Vf÷öûóŸ7îDÝ8{ôb¬XxmÚÜ%ÿ⎠Ǯ܌ˆ¸u;6‡V4fU“RTTQ5X¿á¡ßø>43ü7Hý»ttxxì‡ã�]Ú;q,çïõÓ'~ðó­Ã}P4ïÝÍ%áàʯ÷ýu#òÎí›QOŠn†ý,ÍQÙ²¼“—»$é¡×"n]={þžÁå†ý°â5­ö’°e×v´¾¶[×~TöYRåꤲý¬r?©Þ[ L3Õ +Ú±òK_½pÞò_cDü‡P�†'¦QýAlÛ¾þÚµÿÜög³ÆÃü‚†Í™i¾}Ïé-+÷惩µ{ØÐæíÀÔ£÷¤Ñ?Úòåñ<*˜(,}ì@—såðñ­É9:^açÕtø„ž<˜_IÉ&M†Î~ß|ûîß7®øEÃ)�ÂÞ jæní;hÖ²­;®ý"”î!ý>x³�OM IÌš�ú`œtÛ±½kNª¤Ž>6á8¼G¯)“r6í>°öB.–ö¾AžF?ãÕ¨mŒWT�Ö_„Œïs©†ó5lD�.=‚~ý!§W[ç’Á­r1Eâ;èÃÙæ;wÿ¾už\*˜Y;6lá¬|ˆôš£âe‰YØÐQ‘ëwí^õ·hê<È»•_ѹþÒý°â­«vƒ‰ð2Ÿ¾“ÞZ°ûÇÃM?àaø«¸|�TRƪö“ê½ Ëø†IM*°ÂÎP®b}¸ÿác½áâgLSÆ>¡Ÿ1�PÝGã,\p&pþoù¾4ç4w·Ì[™òú’ém-pþÖ B¨®ÙØÒ_àŠž1�ðúïˆqW~¿G¬\^üÕÃÇãí:Œvò¢&õq\<8±ùŒi·y-1a� „ê*€'¦ú¯ß‡ù)÷®½—š]ÀL,]:¿;¾ŸŸôeˆÊ‰gøl_¬`×°ÃÄ÷úzâ¯"¬„P]>X1 3lBDÆ(0‘±/ðÄ4B!„*²±¥?Oˆ\&àuÇ!„B¨BG8žÃ›ì „B¡ I¥”Ü—ÇB!„P™¼(“€·òF!„Bá8Ð?è##B!„ªážú,{„B!ô’Ó�2bjD!„B*¾W,¦F„B!d^ˈB!„02"„B!ŒŒ!„BèùFF¼‡7B!„zJd|ò B!„2†FFý×B!„�ÑÔˆ×2"„B¡§¤FŒŒ!„Bè)02"„B¡Ê¨ÕZ¡üw �¼üܬÌÌü¼\Ê£Tÿ7cÿÆåŽF·B©â+ŸE·bôeµŽB8Ž+úÛT®°°´”›*0`Œ‚qÕú»ûB¡²D‘RÊÊFÆÔä$•*ÇÊÆÖÑÉYfbJˆ>º}†ÁZûÞ @ÔcL]�Ÿ••™”˜`ffnkïÀÃÖ@Ï£×a¿B!TúÐZ�È(óróÒÓÓ‚›µàyëè¿E Åí ‘HÌÌ•ŽN.7®]‘+ÌMLdXEè9übÀ*@!TŠº@ËP:2ædg:»¸ñ<ÿFÕÅ󼳋[Nv¦TfÇÆzTË(£Ø¯BU*2ªÕj'WÆ(ÖKÝÄSZX¤§¥bU „Bè_Œ ¥#£HE Ž0Öi„©È(6z¿°_!„ª@©ÈHE*ð<^ÐT§Œç©H)¶z°_!„ª822€¢9’”Š@Gë4”ŠÿÙ‘�¥_Þ¶ñ²ýÐÉÝ\ð^,/ |ï#„ªÇ Ž"¥Çc/Æ–{ÿ×Õs' 2`Àà™»b´Ñ»g�žôí{~¥yÉ‘WnÄä–lB{gëôQS6ÞÔÔÒ&8Ž)­Þõ¦º{»æ¾óÁÖHM-DŠÜ¸Û·£ÓÔ-X~ôoë?™6~Ì[ÃGÏÛ¯�9øÑ;37„ç=Çša)wÃoÆå³çѲú-àuÌ!„* &Fƒ±F#Ç<·{öÌ#^s¿ŸÜ´èL¶øpûÌ96ù¿µã‚„Ú=,Æ]:°ûÈ_7&eë¤N>�Ûö1¨™uõï§»»gÅ�·\‡Mû(ÐB�Ù9qjk'g[3á9¦ˆ÷÷-[ÝwUc7yQ&—[;9;Û(Hín´üºXÚñÅïoŠÔ•ý¾¤ÉøoZ989YËëÓ¸ Ëúã‹énj ûªÏÐ%‹ú8)E%e_=«³²¤ï0uü•Ã�_¼�œ#J”Ž^A­z¿Ñ?ت½ëÁ�µ["œOšíoÁKmx�•£““�BxŽ·5^½úÑkŸ7r5-î]µÜ²øQ!„P%‘±$5?-]üÍ’Ÿ>…«Åà ˽½í“Ï÷%Ú„u0¡¡�©6#&êV®š¯ÉÉr–‘jÓzJïæ ‹2m§÷>íTakóˆËJ6A\{ÌZÜ£¶7j¤Ò‰²Åˆ9ny @Œ=±nëàQ:9q`ædîj5ý£nõ±w øpp#IÑ—&v¶Æ³Q%e—äż;»–,?ôĺy—>c}íLt™q÷"r55º§ K‹º“fÝrB�P¿¢ÞÕ~òGíÿí â\ºÕjË2ÌŒ!„*LÊ|«‚cFqœ,0Æò£ÿiþK÷S ¥Só·æ½×ÙŽ€.åêžÍ»ÏÜŒIgJŸýF�îî« ,3|ç»ÏGÅ$çh$–aã–ÌìT<Æ£ŽØõíþx·7-äc¢ÿV‹vÝ 7G3þÙ·iÛ‰k�²ˆ¥gÓîÃGõkdÅK»øã7»¯Å$§ç€‰µghŸ1ãz6PV ÖÐ'ç 9‚ßð¯>m{íãiûÝæ­›ØD–uûðæí¿^}�šOL-Ýtó^O÷Èï'-Žî»bq_GÀ’/|ï ÇüµãƒTåöÙ"ñÄWŸï¸‘¬Òòæ.�ºŸøFSkN_Qº¨MïÜÒV37Îjýä—çž ùdåp_ª[Š Ú�ŠåO J¬=ü­tüUâm¼ü¼õqˆÆî�÷çš,X:Ô›gé—7·ÿzlR†J¦öþz´�Ü9sñÖã �Â1¤ûèq½˜é·ªK ?°}ß¹ˆØ ªô í=|xWo¹áþ°¼»»>[zÚòÍ…Ó»8ñW¶}àZLbZŽ–(ì}C_<¤[s,óÆžMû.Ý�MÉÑ ÍG-šÚÞÒ Çé÷'.9#G 2+÷f=GŒìî[¸!Náè×°�Á]ËYö•uó×F·šóÉ[ e ‹?úù¢#c?�Ҫ²—ÐDíýáp‚ÛÀ³_÷*\eóÖ]Š*4óæ¡­»þ¸“M,܃»}³w ¾]*Ø=¦QkhÒ‘E#�€~øóÿZÝX<ë°ë+Ç5€eEÛ±ë÷ðè´0±ptõí@.ªxg R¼Nõ­“§“•mÇõñ6)·!ÍÝ‹—%íßœ:Ü bNíØöÙõ¢O‡úJ�ªb##3݇½7Ñ[Rðäïý[6})q^ùNSû.Óg÷vç€È¬ì¹üâRhîï\¼ø`Aè q³X²”s›×ýu7…öt+]Ìâ¿iù}& ºŽx¯�•2nذcõ&Ï5Ó[)Á«ï‡S;Ùà¶R`†uXýR˜ÖöhË�»•åþÆ´ñž‚êáo[vþ´Ý³Ëà¡S†È²Â÷ÿô˺}~KGø ê¨]ËV]°í3bÆkÕÍ?m^±Í~éÛÁEñ�iN®ýú7®Ç‡“;; T{;2Ãeàä1^RuÊí?ömý<&÷ÿ¼î!–óàZx²Ã€ÉcÊÅ\ÞIIÊï�ÛàwÇy Iá‡wn]%8-+ÙPÙáÄæoŽ[°vãþ°EÍþÜ´÷I“qﶬÒyeÍíS¥([�ìåU~ÕÚû»—.?NÚ¼ñÎPWˆ;ûËÎeË5 ?ä-­p÷¤@ì:½;³‡DfiÇ”¬íáže_Q70êu_ –rqû†ó÷Riw׊Z¤|ý ßÎÃ&¿f%‡ŒÛG6í^·Õsù”ú„'xöš>©½ "·•wg\HcÀÉÝ›4mä×Þ"M�‹ËçÜ}=%åNâ2Õ•ƒ¿Æ{ X6ñ5 (À1/îÃC‡®öžÑJŒ1u nìÃCP uò�ùg®EkCü"X8ºº»n( K‘{õà±ç~K¦½î)°ì'‡É_Åc¨ÅçÚ€A©Ëì3È=‚›ëwÎ{Øã ³ÿ¼¯kå'cKG7wG}Œa´d8–Ö �Æ/}¶ 戉cƒFÞ<4°Iº~Ø¥y—�_ˆ<·"ên2õw&ª¿�žÌh2zÁ€0sà9&åÆÌý£F7Ñ7UÚ• ;¶&7�2o`ƒ’±*bâÒÈ›hÜØ�|ôɯGo¾öN3ÎÔµQH`áÀŸ¨ÉWëôµ"HM€˜8ù7 òæ!0Ð:õæÇ]�Öûhþ^;æ­µ…k·è[)„ZíW!„p”±ÌÀ[é¡G¡A×~�/ýü¿÷´íöj�.-=•<€˜ý¸ /eíÄ7¿-J–:"ËÈg¬$‹•;ª3 @ÊÿHLxðHmÓ"È�ÓÿˆslÔÐú—ð‰ºV¾¤Ô 9{G{N•�àü†ŠvXŒ¿]`ÚÄU(S¨r¯ƒäXzŸµIWöl=p1*>S#Q"×@cd[¥¯a)jw”±tR±²±$êì €À[Z+áN^ OǨóS¿Ÿ6ú‡’æ“fêçêÒ´?¿_§±éýñÈf–d ©{“呈‡OÄfže_¢ýgãŒ/ϨH[¾·¾©²s°ãTÙªÂÒI‡Ì,Õ§ÞÜ�/i|kXðìµg’šŒ[Þ²Ê3WXQï*GLŒ~¬± °/<÷Ë;6´Ú{=ú‰æ]úåevÏ(1áá#µuÓÆÎÏ0+L›|õÀŽÃ—ï%dª% I¾ÈùiŸºL­”GBU}”ÑXl$¼DÚ‚XÑ@-((�€1‰ûksW5½yæ×Ç×Î>ptèü…¯ûp €³j7yþëÞ\É(”¥ £è^v(‘X;ÚKiÔ£Çh$-w$c¥æÚì,\!áx "+÷ý’Ã!£T¤Às\ñž’Mpˆ¢Žã ^_~U4æàW+�q]G¿;ÆÇ‚$üþͪËEwÁRøÊr�…Õ¨Ìè#kçÐÎ <0¥ €áy�Pý°(à,ÛL˜ÝÏ«¤ùd–f²ˆyÃ0¯øóÇ7îkŽŒQ›šÂƒË×’;tu¨ÒtaÎÚÑNJï>ŽÓB Ôhœ¬‚2»g<šR‘Ïså«…"ÙÓóhìÑÕkNp�GLáeAÿXÿÍÕ* ÖB)j«_!„zñpÆÊý+W¹æî?wòо£y|ýf†àâæÀé_ slÜmôÜ/ô²¸ìd”–ñŽînBöãDÑÁÙÙ¥ð�“�œN›)ûGÔ.L™qvÿñš2?â�¼<¤iwn%SýwtO"î¤K=<9Vv…F‚¢aAã\œ¸Ô»Q)¬L�#JK%K‰¢)ýúò«ÒÄ<Œeþ¯êÐØÛÕÝÓÛÑŒ¦¥D*…ÑM=É÷îeJ]Ýí�LG&fÎ \”Õ¾= S]ßþãå€ù ßp»¿ëÇ“IU¬ i`Ûææ™ç�J,;bÇ;yyHÓ£"S ×$&EFeHÝ=k4—šwpqäÒîÝK+¾8¥¥’¥&$=uÀPÇvЮ‘·«›§·“YqI¤ÈËÍ7ZâZ)ÅóîW!„ê/#gÏŒ�3Hƒzôð<¿gõÒÿÕ`G>3êÔþ# ö]G…™Ÿ\û=‚ºzØšèRoÅæ‚™¹0oñZ—}K®XÅ ìÜÐFФÅå8tìÐ@^É\"o6tTÛˆ5›>Zô¨ç+M½lLhNrôÝ$‡žoµoÞ·‡ó¢ý+×›iïÊbÎìÜçÒk\¨¼ô9óòç“�~”aÝÚì^¾gÍFÓ�­œ!éÚùÇ"0ΩY ×ݶ~ï¡mïaɱ9´Ôéâ.nŽì×ß÷œµjã¦äÓ“s‹®}ä�½<$ÇÎ8æ×Í�¥f+CÛølWQ“Rc„ç~ÿzÍÓ�ûú•…»:òagÛ§Ÿž&ò¦ƒG´Žüvó'‹õèâamBUÉ�ï%Û÷Ö6´w7§O¬ùÁdP;W{ö—qÎ=G7«ÙÎeó®­ö®ÜÿíÏ&ý[:CrøÅX€slÚÜeßÁÜuí=úÞeü=éìæÈNœÜκ•«Ÿ¡ï]…©Ð]rü¡¾¯¸±´leÓÖ>ÛUÔF)p�!„PU#£‘3Æ�×çΓoÛybÿw's©‰­WÈÀ‡õmdBÓf>ºtàØæä-¯°÷õNoŽ3iôÖüYæ[9õÓòÝù`jãÑêͰöL^vè®ôáÖªÕäO­ì;pò�-ç2ò© °vñmúšVdR¿Á³?”nÞ¾ÿë³Ù`áÑ´ÿ‡#úùHŒŒ–ÿ²dЮø?ŠÐ1Ž—n9²kåï¹RG[žèOSs}Þ›œóã/{ל˥…•�_�·%)¿*ޣnZz,� & K'_{9a @ÑjØØˆowü²ü²ÎÔ!dˆOkÃekZŠòGöçþTGÓ asfšoßszËʽù`jí6´y;0œÀ-óé;ià­»<Üô£nAuëàÒ4r§ nS† �=ãNè¢öñéþ’ÎêÑB³ðÓÐqVO 8w}ëÕÓŸìÝs-lB¨¢ ¡Ñºå¤EV~�:¹ý|f>ãV.>!ݵ"H}Íú@¶uÇÁµ_ä€Ò=¤ßoöñ‘Ô4n›5õÁ8é¶c{לTI}l8Âqx�^S&ålÚ}`í…\&(,í}ƒ<-ŒŒ²ò½'�ÎøùЖ/�çQÁDaáèc¯ @ÌÂ†ŽŠ\¿k÷ª¿ES‡àAÞ­|J}®{öR0|Z(B¡ŠŽoïY5�RÆD`ã~ý¶Q“�—í°Aã÷ÍŸs*ð£å#ü„zÐ`„Üú纃ƒ“•µu]ªÄØR7D%½ëÀÂgçñ–o=è]ééu«_!„ú¯mh Â�2<ÍŽ=χ£ÔbÜåw©“£µÉ�ûûà±8»ŽcÜùzRpýp^sV‡{וßïQG+—õðñx»£Ý…z²óدB'ö²$F–Ÿt÷Êá ±iYÔÄÒ-°Ë”‰¯ûIêSb¤O ÖÝÞ•rïÊÑ q©ÙÌÄÒ5 ó»ãûùIëI`Ä~…B¨¢2ͪF�ŽûõÛ ÆÁŒâHCn0Ž»}ó†��½�­Öª]i©)دB*ubºÔÀcx |�ŽŒúÛ&b¡çûB¡ŠNØÄÚÂ~…B¨ì¡¡è¥®Êg”!xبÓa”¶z>™ë!„�ÑÔX*25u:¬šºLÔé‚c= çÁÎÁ+!„�!žãô'¡J�22–’œ”�•¡ÕbpD!„zII$‚ÒÂÊÎÞ�¢ŸGQ*2¦$'©Õ^~‰€•…B!ôrÒju‰ q)ÉIÀó<ÅRÏ+ËÊÊttvÁ¼ˆB!ô2“H'—ì¬ ý—‚À—ŠŒ:­V"H°šB!„^öÔ(H ¯Täðþ:!„BÈ(Vô`0ïʈB!„Œ‹ Èa] „B¡ŠètbéȈc�!„B¨Qd8ʈB!„*ÃÅȈB!„ž‚ÃÓÑ!„Bè)‘«!„BU52âp#B!„*ƒ•‰Œ!„BM�B!„ÐST32Òøý FOú្'‚øè—Ù#§mŽÔae"„BadD!„B/%¡6WÆ �Ú²éà•‡ij^éÐlȬw;ØÐ¥†ؾï\DlUz…ö>¼«·œ°Ì{6í»t?6%G+X4µhj;zeówû¯Ç%gä¨Afåެ爑Ý}åhâɯ—ï¾™¢ÒqæNA�†ŽlͰôË›¿Û=6)C¥S{ÿ=ZHxëq†FáÒ}ô¸Þ Ì@;9·ðû{ͦ~:²‘ v„B¡'2ÒØcßmºa5`ÒÂ`+š™˜ocAÔQ»–­º`ÛgÄŒ1Öª›~Ú¼b›ýÒ·ƒe9®…'; ˜<¦¡\Ìå�”„ÅÇ݉Êrüî8O¡ )üðέ«§eo› ßÎÃ&¿f%‡ŒÛG6í^·Õsù”rÂrãîDe¹¿1m¼§ zøÛ–�?m÷ì2xè”!²¬ðý?ý²nŸßÒþBE;И(Š"NG!„úW#£*;‡ÉùúzÈÀÃSÿM¦úûèÉŒ&£ 3'žcRnÌÜ1jTpàL]…zó…Ë1qòoäÍC`  ´Ù… IDATuêÍ�ÿº­ äîMBõ¯ñTÄ^Zxú^‚ØÂW &Ž xóÐÀ&érøa—æ]Z4|!òÜŠ¨»ÉÔß™T´!-&Ý{B!„PÅHíGFÁ¯Kï +[?ŸݦË+Ý:¶ðPòâ“Ç1êüÔï§�þ¡0CŠ:"ÍÌêègç`Ç©²U @›|õÀŽÃ—ï%dª% I¾ÈùiË¿ÜÊÆ’¨³s4oi­„;yy €V¸‚Ý!„B¨ ©±š‘‘ h Ô´ä[¬ @ /‰[÷YËCnŸ=qôØúGŽþpn_oŽp–m&ÌîçU<Õ†È,Íd=eSÇe4öèê5'¸Î#&Žð² ‰¬ÿæªÑˆ)ðÀt”2„çB)c ¿•�Ñ@!„BU"�j<ù…X»:˵·nÝ-hQ8gDûOD&ïâfφ1‡F]G4jßrÛGŸž8}·§w�£»+"æ µoëZ*ŸÒªnSÇŽЮ‘fêdV½YÞ|E;€B!„ª«Eøj7� û¿YJúvmâÀgÞ=sðX‚]—áÍÍ Ð¤ð?"™«»�‰.-".ÌÌÍóÐ�.=üõ7|¿Ž luj¼Ê¡C;?Ӫ›#;qrÿ9ëV®f|Frnõf¬T´&*œ1�B!T)Vx5£ad¬Ò©Z‰GÿçÈwþòÇÁNå2Ïà×ߣw�)ÐfÅ\9||krŽŽWØy5>¡§¦AÃæÌ4ß¾çô–•{óÁÔÚ=lhóvPõÈÈ{ôž4:ãçC[¾<žG……£�½¢:§•�ï€ c 'L#„B=55’)–¡ (&26îØš€ ÆX3!„B(òöÍ¿F¿!Âà W2"„B¡—+ Šœþ¿˜B!„�Q´ðZF@05¢z÷Á‡þMŠþ­ÿ6¥ÿywf@Ç~D#„ PÅ‹†B¡:E(9¦!TŸò"Õåd$ÅÄ?Tg¤£L¥„ç9Žÿ�?�Q‘‰"á8Âñ„ç�p2k;Sgo™ƒ›`n „ÃD!T?##¦FT¯òbæß§4IJŸF-»J•V„ã Çž'WW†ñcŒ2QÆÕ©³3òâ¥]<.³²·lÞS#B¡zª'�± )&/þ¾ß°÷ˆ )ŽgúO=Œ²ºôé‡/G¤¦vrS;« °û;V™ºùÊÝñ 5B!ŒŒ=7”Ä>° íLx�1õáÞš…7%„“HlC;åÆÞ—Ù»‡‘!„FFô‚EZ­×¢ŸùQþû5LÚœ EÓv¬8ŠÕŒ€ÜÉ#ëÞ?Ø‘B½‘1;;çvDDvvvAAAAA�Z­¦”bm¾ üüüªŸ2EBÇqÇBÌÌÌlll¬,-d2YM‚#¦QA€z2ÄX/H˜Vƒ'¥B½à‘‘rõêµèG�ìííÝÝÝ---õ9€ã8žçõÿÆj}QݻձSçê.¥ E‘1ÆËÏÏOKK‹¼ennîãíUíبÕð«ŸS¶ˆ 5êÂ{!„B/jdÌÉQÝ»¿k×®fff‚ ‚ Ï‘ú?æÅ›……E�Ïó<¯ï!R©ÔÂÂÂÝÝýÔ©Sv¶6J¥²ºÝFÔ¾¾Ž2r‚”j °/!„z‘##!äat´¯¯¯¹¹¹\.Çê{ =ãåƒúÅ !‚ øùù¥¦¥+•Êꮂj5D(¥ êcdäE­¦>†]„B«|´ãøÄÄÄÀÀÀ^…†^ˆÌX;¹“›„„�D*V+1^(|æe}Ì] 8^†×þ"„z�##Ïët:Ì‹/ub¬½˜ÆqD§Óq/jÄêï0`µ?ÊÈò“£"ž(»ÉÉóª@„B¨~FƪÃ!¢(J¥Òç<Í¥ êÐŽ(¿�}üÍŸ{2¥©g¿[ù—ÓÛ³ûy¾Ü�ã(ˆ9¹ë¢eÿÁÍ”¤ÒP‹'T9Ž×ét5¿£µá(#S�ÿzÆšs™ œ`jfëÒ0´Kÿ¯4TV³Uu|ùetŸ�]ñº „B¨äHË•ùú©‘‘R*•ˆI‘—¯=Ê­ax`yO".U²¸æÎöåëÿ|œWq’ÐEü8~ÀØu7ÔµP9�®_»›ZPÿÆ~žV�Õ\œÓÄ_Þ¼|Ãߪ§­O?é¤6þH$­V[Ã3ݬ �*K%6üÑâÏ>]øþÄ~�u—6|¼hû�VMÆ×^‹ð*F„Bõ15 åSäSIÈãMŸ,z0hCˆ§¢&Dº»;}\áâ4õ�Ÿ¤·zodHÞþƒ¿¹©-·ùæïo�hëêæj§¨Oã‚,ãÈÜ7WümXÁÿíïWu3R š¼ïýQÆË¾}Ék–äéÕXíV�ú~»û‰› æÁUÖojïÄ4áDQ¤ÏtU3ügîÔ �¯ ‡Ø©¦~vêtÔà†MÐ¥\Ý»e÷Ù[±éTéÖoô¨W}ä„åGÿ±iÃþKRÕ‚Ò±ù›s§u²#ÀtQ?Oü3H[ÍØðAÐŒöÿ¼ý·ðGY`éÑôÕ·FökdÅË ßµa÷…»±É9‰eØØÅ3:Z£Û*úÌ…¿wBÕSÕ»–‘1&ÇRtc�šIe‹Ó¸‡®+_YÖÞ’‡S–úä21zÿgßF…N™ÕÓ� ænÞÖ¯îW+P¸5-Ku¶’&#�m&-ŠLr'Þèfyë ËnÎ.Aj»Lƒûõòiñ½ÎK×Lll º˜Ý³¦ì²™±n^ç Ëþ<[Áµm[¯Ÿ=oBã@¡’� µÖû{†'FV².` ¨¨ÉÏHˆ8¹íd’Eè›þ÷»7ôæ€1ªºbt[!M%P2ƈ¡!„ÐKyß!‹g¿jG€3³—ÜÜ0÷““o¼»hªmÎÕm«×~´ÎñÇ÷›'ïYöõE›‘s¾ ³a±¹vÖœñÅ‹åß�xÄ5è#©úžä<ºy3ÃgüÂü$9wö¯ýaÍ~½ÆŒŸ7Ö4ãÂÏk6|±%`ãä&’Šö0¬(¾1mÌáÏ>9À øl~o7 ͉¾~#ÅcÌœ÷HÕ‰×n^7û�jåÊᾀ̨ œGÎy¯‘™NŹYqå÷Çsì¼ ¤ùñvnX·h½ÛÆ÷[˜¶³l;éÝ—¬ÚÒnÍåÑU›ãæ/ìhÍý7­À964ßu7�Ús&µ ÏòåË,XhôG ÌŸ?¾aÁK²^Í"Taºc%Y@syõÈ!«oÙ ë¤yo†)@wïQLA^ÊÚ o~[¸¤¨#ÒŒ<¾}×þ�/múßÚ¼Ò­{ç0O%_ç+z¦ýXmÓ"ÐDÊØù[ïºö0Q×Ò‡è7M-)Œo‹1ƒIE˜B½$‘Q&Sfíæåí¬,ûÜî#©¡ï­ÙÑ‚øMO¾2üçÓ·Þ •ef‚yhHÓ ?€i¡Ôâ%hú“jÙØÞ¤ÔÉÖâ'Ë�âs²Pü BˆÜ­Qhˆ?�íÎ^ÜáѶw‡€ øçä‚[·ž°`wRÁ¶ #…Cƒ_}÷]B›ù_�nlÆm‚(ӗгîµdûû-$Víß™ú×Ä%+Vd›_Šm1}~'¾²²— ]µÝ ‚�£\ILaÄ�T’Õ*ðþÌ÷�Á‚…eSã‚ùóçÏ›_jAR¥Vš §’0ƒÈ(iôæÇ£šÉ4÷÷¯øá¹{CgiáÏ9«ö“ ð)§%2 ðÊsW7»uúØ¡ÃßÎ=tlÈœùý}¤ŒÑOÎa%`”2¦¯'}<$ÀŠoñS2m¦Âm1ÃSè˜BÕ¬ð¨-ÔÊÚĸÑùùO– 鱬dpE–žËwë3¬ÙÙu³ÆÞíÒ»oÿží|-ù§ì–Z£fR™¬¦—rÖvÖ$?3K à­í,áŸÜ\@+ØC}ÜH9²ô µýЯ§¶®h|OêÛ<ÄjWxT¼ØÆ¯ìÎi¯¬zkþñlÒŽïYj‡\œHvVNaJ�4÷Õ;-õêD°pˆU»I[Œ[rìIó÷t´áþËV�ÉL@­®lþxåç‘gΜɤÆùóçÏ›7¯ÌRŠ0Æjr1&ƒR“œõ‰ÝÔÆÕÍÅ\ÆO‹ÿèÓÍßöYØÇ�wtwŽ=JÐØ´ñ JÁEÞ6°ëÈFZo™÷ÇOEõòn©òT¹"cúZ✼‰¸“.óðt䣬¨…Åã*Ü{ƈŒBý·©±¦‘‘”ÍÀY¿2ë‹7§Nn£$Ë×?û9ìꉻw/�ôËÞ1Ÿ/}«¡ *ž9JdRѨÕ5>ª �0¥ €‘aúéí!d€²qG¿G¿ï]¹9té˜&fÆwŽ®‚Û£�Ã>ýª»Žgå)ÐG†K %<ˆÜÑÛ×·ì9j–sÿŸjS9Ü9}þI�¾ÎÜ× jµ*�ììiœgΘŒ-üè#˜?oÞ¼¹sŒ-B®(2’ê÷^V&2þ‡R õüNß[íýéXÓy½]B_{ÅaÉ¡U«IÿŽ l$š´8•CÇv~²äð?"©«»­L—úOŒ Ì•fÀçèå!9vþà¯>¯¸³Ôle³Ö~Íútw^´ÿëïdÛ»²˜³»÷ŹôÛÔ¤dÓP Æ·eJ01"„ª§ 'oVûÓ@8©‰ Tª¼¢éÆ ¸y{Jö>ˆgÎÝ<Ê^…Hä®-ú¿Û¢{Ço'ÍÑÇ‹7¸Ã¢á(¢Ôè¶LJ½ñ04"„ªj4ÊÈ»øùH÷þ±m_@_o–œiÙºsP»�=·ÍÞ¹h1?¼G#iAò£lç&^8t�zy;˜è’®?V�¹…’à\Ë-^<9À´¡¿'=ùP×¥‘P›å$Æ÷PQ\ŽÝfý_üŒ™koo¸b„Ÿ €¦œÛµÕµs€ÄþñóÖޝMl¥x¶Ý`Y1ÿ\¿^<߇3uôs�ûñë“Ê!_öóæfŒ<ûÎ�_kõY/‡§�4ò®µÞ ,éNT–m“†¶•Ý—±jœçÎ�óÔO5©IM 4€ò•y[^�VW8¤Ëßá_mÉt:¥ lÜJð€Âû1ªu”ùõ_¸r !@£¢NGõg·íZ�û¤ÝxŒét:Ê(3ì7õ³×9B¥¢(ê7BÜ|±yÕjEÃK�m«øÇ/eD!T‘êå2Ac„³è4aúÍ%?üôñY�Ü5l¬çFžÍÞùr±ÅúŸ~ýæãM¹`fïÝqB‡W‰4óá™�»×Ågksç­'Ïê+–å· Å9¨M÷M¿�»7±q Ä`l‹”º… Á”Ãé!¤Ì œáP$˜ÝC3ƒÅMFÌ}mÒ�Ëw¶Y3Ê›™$ëê¶/·<ј»…ô[8ulS9)³ucq¥~ZzDR{sóœ›KêÓwäì¶ç�“žŸñ“�×'86uÓO;ÎnkNŒ—½dC–µÝ æ‰çþжi3¹¡¤¢ÅUe¬bçc”RJ«»BB8uŒÑâ›3Ba6S—>ÿ-ŠZ±èÙÕŒŠ”–y�5Óé´:ciÔpÁŠ׿T«.÷íŠ^\ôSF©¨ÂᯄBõ)3N±¥„‰Œ�ÿuM@PãJ^­03ß»wo×®]ÍÍÍŸ×ÑäC³ÇlT~¸qAG‹ÿða4zÓ„‰´\½q¼?ÿ’ô…‚kÞž}³Çºo‡Wø¸íˆÛ·<<Š?-Vˆ¢L&£”>çÝ3 01ð¿­!Î{Ô¿�z‰º„‰×«ã½ªÒuž5¢é38Q§ãyžTsº4 )U«9Eáz o¢T§ã"!E÷ðÕ"‘Öh–8B!ôŸ¥F®L„¬œN§333KMM­G�¡çÐsjþ‡ú)=)©)R©´º£¸ˆÜÁ=/áA™)Ou:1BÉt­ü¸û…9ÁĈB¨>àð'ð\õN 2Fì¯_¿áçç'•Jàe9m‹ŠÓOͦúG$B!át¢y§iHÇWo# ð Œßý�²a(/•B‹o‘X?Ç”*5Ç�V�qù„ëÃfF„Bõ�Àó ռɥÔÖÆÆÙÙùì™3vöövvvJ¥’çyŽãŠæÀr"_`Œ±ê^}È©È(ÓQ‘Š”1–‘™™””œ˜˜èìädmmUÝCÇ›Yš7ŽÙ´Xî w÷—Ù»€ !Ïñày 俾… c”‰:E&jAÔ$Çå=¾“÷ð–™W#™³7Þd!„P=ËŽÕ]@§Ó¨ RSSãâbsrT¬è^'ú¿ñœõ‹íì_窙ðJ>Kè?]XZZ:;;µkÛF¡Pð|�n4C8«6½ÍÂ2/ϾrB—›¥Se‰y*`´ŽÔ!áyà 'HÏËì\LýB¬Oå-l1/"„ª/c"T¨Á’Z­F".Îή.®¥†ˆpxñ%�«R=[–*¹®�㸯/X;ØöY4û…ÕÁ>ÈJ—ºèñ‘˜BÕZ‘ HuOL£”>ÿyÓ¨.’H$ueWWœëæ§ü …Bè…�!„B##B!„ÂȈB!„02"„B!ŒŒ!„B##B!„ªÇ‘ï»�B!„ž¡N>™!„BխȈ©!„B¥O‰B™¯£hVI­Õ’—Ÿ›•™™Ÿ—K ³ý¯=b»ü†J=¼±â—=»ªoÈè+ŸÇþýC¬9Ž#ÄT®°°´”›*Xá³±K¿ŒïSÀv¯¿KBõ%5 åüsViP#R““Tª+'g™‰iÑ“‰>½`-ýû� �ëŒ1¦.ÈÏÊÊLJL033·µwÀ.ý²v Àv¯û¿KBõ&0–�ŒxŠú©µ–—›—žžܬÏóXu!€·†D"13W::¹Ü¸vE®071‘a½œ¿Ý¶B¨•�Œ”Q0 Uˆ2š“�éìâÆóü¿vÕÏóÎ.n9Ù™R™vé—ð} Øîu¼�°�ªo‘cO5©Õj'WýÅR¨ÎbŒ)-,ÒÓR±*B¡ÚˆŒe´#d¥A„2‘Š@8a¬'R»ôËù>ÅJÀ6B=ŸÈXôæ¥8êX) ŒŠTày¼§tnž§"Å.ýr¾O±°�Bµ«Ü=^Èw1˼}|×ᙵP8”Š@€1üS×ÿJÅjwi–veÇš §ñʃúü–¯�_e•üÞ¨Å_)5Ü·úßK11"Tß#ã³\¢Çò£[ÿÉ´ñcFŒz{Ú÷çÕ�RŠÉ׎ýz)&¿"ŒŠ”r_�䢽³uú¨)ojj¶ÍK޼r#&—=ÏxÅrïÿºzî„áC Ø©©›í[ÃGÏÛ¯�9øÑ;37„ç=Ç:+H¹~3ÎàýXÛUÄ­…«�+ù½aø#Ã�þE«ý^ú¯ísíkBÿ:U½ÉËúã‹é›eã×ÏhSñ Kt¬ÝáVœ®'ë†<\Ú¶%ÿwºÛ'«g’¸èÂo?l�IË+ÖèAâ>xLoúNô¹›w‹ �îcŸŸ?!ÔÕ}0ÿÇ+“ÿAŸ××½õ˜YPÕÞÚûçÆÃWî–²"GÿÑ ßŸJWrcכޯÜ-CJßî#gÍ�ÐÉž€ªÚÓó‹Ëu rðí9îÙy£ƒ¥ëô.wï;Oí*hÖ7Ë‹ùhÑnïw~žß…\v{ÿú¿_I.¬Db¥›wð°g_­Šýß‚å©ãW-ï†pþþ÷_Ûëóî�/Dh®nùeûùøôür­Œš÷ùëƒ9G¿ùbóõ|�‘´óì4lÖüiÝSÌX—¯¾¹f\C³¹°XWiÂÎ=88Ha]zx3K?9qêÖŒ.=ë<Ý,m §,jiÆÎw><×å½ÓýÉ*óÉÈ+Ñ@ì:pT$wú­´ƒÔ­ÛÈgæ� –™8a ¯îùk×¹;%œÜ¯çØY³†ù×�!q¥·üµåøÕô2Vèà7rÁÒIÁ4X³8›ÍöÃ>×—¿µßëÍÕó:Q€ËbmÞzüjj‘D 7¯ÀÁ³_é¿nñWwŸøâ£1®þdÉÕ[«ž Ó\ßñÇ®“2 Ê�”¢×Ü��çZ�^Uv‡Ü›x IDAT3qÓOoAÔŸGåí|¯ZD&»nÍétý�£'ræ¼Õãß/·¹:>0JVCª߰þ—Q§ñ­ÌšE l$¶F¿äÒ¦ÿí‰IÏ)*7"©K`ÏSŸlWÍw«¶ëîFoøc凜"=)wíñÔ[¯ tjvñàÁã 1€yÔØôÌWdÆÅ—yO}ež/¥Ë»ºËÆo)÷¯žï*ä<è•×Gy€„JgŒIÛW|}õ›öÒt/È<³mËW_Þÿ`Š¿Àœé";qötfïw7+è41ÊÅÖåëô±öæÆ•?ž˜òò/²$áôžä×��ƒg¼ü„½JnøcûÏ}¿~5RÒ%„¾W:ÑÛ.OJȦƒ'úSÖ²Œ�¤Íüjþ=§Éˆ�-õ}úõ—ýéò¤C¿oüeƒÿðé³Ï•^Ùöë¦ï·ûlUç ”ßø% 9" ¤N3ú†¤­Ÿ}¾Ÿí=uÁŒ@;c±ZêJ6$l^þùA4`æÂYÞ�½yÓgŸë?^6=PPU»jÆkóýi]îåÝþXI{¬~©»�Ë�ÅKǪ@B{¢²¦vCÒ–åË÷êzN™·4X‰ έÿùlB7ÚÛ¼yfÿreI—/çº=µè…0 «!=#Eð°Ù¯�³—@É­=¿nþîß5‹ûHQ#|ah>â{Jf‘q[/yx/ÚbÕ|TÓ½àKiRŽmØòû_¾C¦Nõ)aÙÕÝ¿oûyWЊ١€>~ëWßþã4nöžuÐÜÜóûúU›\V<ßµ–GcÊΕ+±‘“žŸê/cJË¥.T£a³Ùê̪ØñÕ—ô=&Í}2P� .üõëùÄBn¤—5ÖÊ“c®æ»NzùÙ [AºË‘eé™"<ÊwÌâ ‰m³][áBÔ¬NÇê+'.@Ÿ…�("wÿpüŸ¢Èá¦�¦¿Ñ˜K©ïT[•µFdØ,—¨É¸[â9ùågýú‚Û'vmü"½âÃ÷žô¡[½Í�óý÷�ëö“¼ßÕž+Í©tT >ËȃÇÃ’e¬Mµm ½HäÚ%Ÿ„ðp‡Â›�½–Êt DÙ¹zy{‘Uƒã…ÇrT—??ƒˆq­Ì|ïÀ�k£FÕÙ”'Ž=Âûý­¼ºßã±¹oÏïgëÎ"\qÅ}±&æÈ™’€©KŸé‚ DšvêzBuã%ªêD’¯4ãß÷O%f³‘�∡Äï17ÔÃ)�1%>•š$hÈycÎÎÚ2Ƶßc HìÚ9<€„‡Ü®ìöŽÞ» ŒoŸ^›Ë†yõZéæ­r«_{Åå=‡2¼'}õòxÏš-xœæÒÞÃY>“¾šÿ„'æ¦Í\²oß•±ÿé#5ÕîÞµs áù×ß=“jìŠ1 Jáæ¥ò®ê»JS4ˆqÅ•½‡Ò=&|¾èI_ «s÷£³5™T\½pŽpmk ‰ªK÷NdµP$>]{™ç?#ퟥ'd1}‚¨†|qµ\·„‹pË#xcê„YƒÁ€˜Ê’ì¸S[ŽgÐÁCCëž÷¤-VÍÇ-¸S˜? ÁŽy¯î÷ì5$²3±çVÅ'äs¡HsùàÉ’.ϼ7)Êø>[pýõÝâçvíV=œkcöÍòž¸|þÒ‹�Øn¶5!£öê�£™c?yyœŠÀžù‡Ðù&o±W§náþ5M²(=S?Ñ 7ooתÞál²k«\„QÍéô‚s'n({7Lˆ¨.ƒûÙqòTÆ�É*[÷¸1—R­ËZ#2´Ý%VÑ÷ïÖÉŸèÜY…>øäðÁ›O¼ÔCÔÚmŽÀêr,éè#_«fÀ¿@’— ÷ÞÙÂä¸é,#¶”e´øÂÞÑéÕåz€P:*!¶B‹-”‹•2YI©:ÇÈWÒì'6;ù®Þ12•0}I¸u qØv59‡éˆêÐ$\Ü\�º[­ ›•”ªsìÙÅ‹ÂV2©¸ïõH�1ïÒŽ�{.Äg•h)¥c‰`ƒe¾Ìžm!ÍLf®¬�ÿìZDɼ»O^D {æ•g(ûøß^l‚¯Ú{›É¶¬ÖUš ›¼tz1-’Ù;9É…DkkKÓ1#Ef8ƒI(Ä™R­€Pö{q鿚F!¡²vÇ`k:vïf[M‹c9 I¢!_!`97•(²*½¦Ò€÷Î…õN7&�:—aÈK{kÎæZB¥§nO é&lÄo4öSs2œÍe­1Þ}Sf'ÏZµ;hï‘o}Ýíö™£­}ïÀ‘©Kþo¼¿ }ă�4j¬?JrÐj[’Iw?Aq|lAE6/6¾D òu3›r²…yùØÑÃU€da“—¼5Vø÷ªÕ'èÇGtÞ}ÒÝÏGPtûVÓpÄÈLÍÄ!Ã&õïäïåíëï.«’eÝ÷‘Æž:w'æj¶g¯žsœÕò±vytݘ§Î÷–þ�ëD†VŠÑh5Z®YÒÍÇ›.Š»•Çšéîç#(Š»•_UžÉ½W,ðñu#,¶,µ ×D¿¤«§;Q˜_€ërH®”ガ\CÝò IÒS2pèˆ);û{©|ýÝd`°ÊWõ³-䢾Øqã*MH]ü}<]Ä‹¦à൥å¶ã¦ò"ËÓs9�¸;šÝyBº©¼¨âøØ|¶™׌6¸zºE‰‰EõvB®”ãÂì¼&†Ö¥G hÐVTr-õM‚Îr¿ëPøäÿ}öÙòêÏÛ4—O_ÓàÆüF#?ÕE+³f]†&Í Ïå'&– ¼T.dÛtºv6{Égÿ÷„"ù試_ʃ�Ûîel�´çØáîËö¬ùE4¥¿Î8³mO¦Çègz˜od¤ü»vÿ÷èÎBžêåF–eå–cR ‹nŤŽ÷ ¡–Ò—ö;|ÿ²½«¿‡'‡„:QºÄÜê+o)o7|ôäîs}¼ddI~…ÂÐ!�»~xè—ü ¯/X‰prâÔ·nܬÞqF(¼C}õ—m-þ¬ýDzøùЇÎí94\… ÕòžýªÏÔ‚]ä˜!»–ï\ù=L~<ÈžÐ\úôòé5~”ÇÇ»W¯?5À §ŸÞ²+Ós̼ž’¦j´ø=È£†÷ÛþõŽ5ëÄ“ûx@^Ìù4"0áÞ#Òkûž�ÿó1ð‘A~F9g™)ÊÓÛ >¾ãŒ}?o9Yl¸e¾Íê•¶„ Ëéžæª4a'—âÂ;oäºu¾Gmi±íØõ5xïŠýßÿ@Nx<؉Òfi\ö£š½FÞ÷Å®o„‰퉊ƒK¦-®m�÷ÖgçêÝ?ý)šØÛò¯^È`! ·î½òϾ£�C½q‘ZÞ½o@óü†­‹(  ½qþrEà¤Aá¾µ[¦±¤·ß�g¯¨£WXõȺK©aµ*kVeh¦¥Ýܪô¢)ú\qÌ�=n}ƒœ ûü®Ýé΃fv“´A›¹¼«'b±—ÊQÄÝɬ™� 5£�xðàÑaBFÜšWâ §¼õ¦pãæ½?~YrU· oÎPç8RôyþÍŠMí\þÚ+‘ÄÙ¿Ë€ç—-’œúòËÿôÿô…î2ÔBútà”%Kí¶l?¾qÕ® Ž’9¸…Dzˆá3vÁ3%îÛ°òˆ–£DR…[€KÍý,”Ï�Q‡¹0æ1+c#‹Ï&~×—ËvÕ¤z¼üóÒ¸NÌüñÚ?ë.k×)&í3ã¹;?mÞöõEFìÚí©€¾A5 †Ï|g‰ÝÆ­Ç~Y¹Å@Ê=zÏŽè©r šºt‰`ý_»¿?£…O÷‰KfO ­½S5)O�ö|vÉ ‚ ¶®>^!p p"‘i™šð÷ÚËå¿mÛ¹æ\GKí�ƒ"ü•¨!)Ògü«Ï•¬ÛûÇŠCZŽI•î�.d‘¯óg-äÂZ—5#VrzìÉ'b~û{Óß=>ŸqOÚrGÌxûu»¿vœÚ°zg%ˆTQÓ{õ³³9¢°éKß°ûkûñu«¶¹{Ô̈*‡&-®9r�õ˜ûæ<Á¦C;לÔÜ DHŸ1¯.(ÿcûžÿ©À”Téá«° Òš­!YÔô¹±k·nÿö2+ví:Å¿O@óüFÓ£åuûò«ç®ê&÷¬³#9÷ŠòߺåìÅâ�íù�F\J=¡µ.kÖeX«¥�gÔÜ©Ù}šÒÜÚûËž"ƒÄ=bø«³¦„ Û¢ÍLYú¥ýG6æ—3¤ÔÙ¯û¬Gû�­a˜,šäóEŒ¸2/áÒþ2ŠÊtœHé>äÕùOÑ(bl•¶Y[:z×$^:øOf¡Z‡EJ¯°Á¯¼0ÁöË'ï/Q?Ö¡À÷õ¦]\Ý�œy¹XCQaAAA~D箘ã§È¼rÄí›×��]x•~íø~Àûˆï <|4¾0ÍÏüCÍñ^P d4]qÈ÷Ô#k§<ø>âÁƒGë�y7Çw¾Óyð}ăkæZµÑ«á½Œ¼7åç8âý]B˜ãx•~4í”—ßGdäÁƒdäÁ£ýo½^_RZVTT¤Ñh0ÆÇq‡1&IÒâ#,Ë"„‚ !$“Éì•B¡Ð|¸m;Êd|ÈaШ åF£hšHí2¹•¤Jyü‰ƒ·äƒŸŒriYò™ã8£ÑhM)Š¢(ÊÚÁσaY’¤L‹Ðé+Þ{z~ÍŸË6®m$óB$ð6RnfÈXK™GkWÆúý8;äÅq!‚¶­É¢V †^½z5,œ••…1¾uëvpp°X,n™¾a£!ÿ›å•NË£z*§L¤ìÀX\¢�KÊ\ü¼ä±A΋ßE4Íë�&f;Ñ¿l¹Ûù¹¹ýÐ}°\|ãàád·Q{:´óîZ\tãà±t¯‘cºÚ·Œñös/â3ÎqãœË§.ýøÉ™¥3£Ž�^8þìÒ™—~ü$÷ò)Ë X¸ôöÉ#çS4-Ó‡²2ullÜ�ظ7oݸyëNl\ll\Y™ºu92�$I6¶T€�UëþUëþÅÀš³ö¡iÚh4š ›¦ÜœO å‡H¡˜¤íïÎsclcÉ,¬Í�»›chã–$Ÿ?øo íH·¹YÔ Ó=8• Àqœ»»»D"‰��Õët-Ð7¬×ß}ež!%Éyò�½Rýïż�›s7ü¥¾pQ`¯pš2U—˜p÷Õç°Áðè�{Wp=úŸtÒ^Žî�í”];°ýLaׯñbC‡ƒ‹cöm;“‡d-fܼ¤-NÏš“lgØ^á„YÈÎîa‹ãv®»üÃ'ìÕclq¸‡Ë±;[Ì]=vqÍÇwvüÚŠ£ ÆønZÚ�›7¥2Yppp¿~ýúõël'—߸y3--½µê³,KD#Á½Áh4�FF�FÕÜWÒ$åf}j(·Ïð�¾ë�¹ ¿]ë×pù鯟yöË“¥­ØÓ Ï ‡FRÐ8?zíŠß.–µíi.7!Iëh�Ú܈,j…)dä€a¡PèììL’d|BB ô-ã«å¬Á(�袻}'mÏñâ,5Ù =h‚Z'HÙv¨$úŒ"¢ £3f|óÅ}Õ7­7û¹½î•¹ïîÌàªuN_’“S¬ÃµóøS_Ï{棽9\3u·291ƒ ö¥î�í“RÁ?4 �—1-8Cr|òño1ãuJÚàô¬9Éöq†í5>èì°ÑkWþ~¾Ø6Wˆ‹oØ´ëJqK'®Œ;øÓš}ñ^�s6õðfT¢²£$B‰H( $B•í�JîÞ’s¦µê*×h²²²{÷îæêê*•J¥R©««khhhTTTVv¶F£i­!œ ˆ*åµö`�‘aŒ Ã0º& ›ÚD¹YŸjÊíbÊe‰q¹tH„™6&Å&q!ÁòVA–|0¿¿k#lU&ǧ“A¡>m:P`uR|Ž 0XE¶µ\­hg ÃÄÆÆK¥R­VÛ\}Ó&&ž:£ -þ÷_#&ûõ«Ì/Rå2snàêÖü¯ #¯èâEehháñ“•ÉÉ÷Mßx´¢Žéôz$–ŠMvŠ+®þþþ’wÖþ£ÆÕáË™“·Qç¡ÝšÙ¹lZB ö ÝÛaÓ“ ÁA²6ŽL:&->‰ñ ” 2^·¤ NÏš“lgØþxÀÙ1e×Ú6ò™’áö‹¦¶TOMé±S«2Ò~u!|ñO‡Ù$$óòX›_¢ˆs¿/{!Œåg;0j;‰ˆ$!±¸¨À�ŸÎiËå4vÒ–gœ9ìÚ�–ÚÕxñ¹ŸÞŒ.*ÒSJU�ѳ猬oz |Çegçøúú*Šz»þ)ŠR*•¾¾¾YÙ9ÁÁ2ÂüÆ8\|qýw_ËÈ+Ñ@ì:pT$wú­´ƒÔ­ÛÈgæ� ¶êm06¿—äÿ6<¡3hk~ E£Î`4€�Ò‰„¢Å¿¬ýU ù|Ö!sR�PÞ7z´A[i««�ˆÇûÂè`)íùÕ¯ü/¬YÜO€ /[²ÏãõÕó:QÅ1[ÿØ)%»°¬’ |ê“÷ÆxU™Ì÷>ü§ËûŸO÷'qqÌÖ?\MÍÊ-Õ!¹OŸÉ/>;ÈSÀ¤Æ'é+K¾{á A÷¿c€š”èíÛ_ŒÏ× \º�aþ�bج$·#ÕÐwÉêy�(ÀG>]rÀûͯŸ� ¹ò”3ûö�¸›^\ b×^3—¼2ÐɘŸ ¾Óüi¬K;µqý�KÉZ$qí>íÍWwmõÀ©®V@Í;Zêtuu­R3‘(77×BίQ}ËÚ¾Mêá¡ÏÎÍÍ,À™þƒ(CCo¼ôR·õ(™LðÍš[ó_ÚgK<<³¶mX²äþè�Vá zÄbSdÇdÝy¡„à µƒ“þþû®$êõ(¥;°ü=—›�¨qìh�À˜~tõ›‹û¾ñî¬Y�íàÂß¼¹×ãõï^èB€áú/‹WeŽþ⃱f±©Eë+¶lYBô¾ƒ§®$d”hYŽS 67F\³åÏýWS²óÊô´sçQ£#4×Î\ŽÍ.'�»M˜¿`”¿YuV¶;iabb “{ä‹;ÊŒ2ïÞ“^xn°·ÀvÆÍÜK}§×dûÍË7h[:½í�UG ™Ûë^[‘4tÙ§“¼‰ªìzn1¶ws¡êìú7o¬+ŸðùãÝ›#¤ªìú¾¶5Ó” ïÛâd¸)#ݹu2Ò‡|—¬ s¿/�jÔj*“n8K„”€ $v#fÉêóûKŽl@Zµ¸Âä›�ºAÈB�¨)£Â•¨èÚþ¿6~»Éý«ç»Še›e9Ž3-ÆYP/Šrrr*))a†0ß³�+2ãâËTÓ½àKiRŽmØòû_¾C¦Nõ)aÙÕÝ¿oûyWЊ١”µô8¨9gª3hç�a>tjtÙF†�.{ÎÐ�æ‘êÚG«Dõ�ªÖ£lÐVÖßF™G?Ûå6s7.Ñè=$DQÃ(—[D…úR€Ëoüùɪ ²!3>íÅÝÚñÓÖµ»ƒ¿|:R㓱ϦCºä„4ä?Ø—\q'úð-jì¢7ºK�åàZm¯X“’”-ðŸâE‚©Ì bÌ«‹»Ê i'Öÿùç¦�noRâì„$�ËàE‹Gz"DÙ9Û!¬�ý볯Nr‘g¿$¼³íÇm[Îô~g„#˜×¢.»spÍQ½Á$3.ûüÙ§Çž¡�Y¯ùr}œ²Ï˜)/ÍÝÞðÝiBj‡€ÍHHÖ»õ ”#`¶ûÇ-ÿ¯¼fÇf3^Îmà‚ëiEMÈÈqV× 9ŽcY¶îQè¦õ-ïÔY¯@ŸÒÔt:(ÄyРÄß~ ê)²“ÝøÏëÝ~þ‘¤,4DÜ©sÉÝ ‰·wÖé3þKÞº/úÆ£•‹12Q´à²K»Ž”„u ˆË(+ç\qõèÙB�a#: ¬Ù‘µï5I‰Ù‚€ÉÞ†ÔƒkVî(Ž\¸ô陹í �T‚t••&6$ÆÜЪ†÷4;÷hÅú°Æ²í#CÆñoWlLvè?nÚ˳åI›¿: ¯“`Ãw¢�Ü Ç,üOWQáÙõ¿îÜPðؤñ/ÝýI€PeÞõÏ^Keº6šeeYŽeY‰Db­€D"Á3 K×?æ‰DnÁ�ÂüIvÌ»xu¿g¯!‘�)€@ˆ=·*>!Ÿ õ É«¡7êÕÚD Ù7c@NÍŸrIPíƒÈ&ʬV§KˆkRà¢àP›(·Mž"?!¡Ä�²eÉœ-æÂ¥Ã‰À�¸÷ÏhC¿ÅoÎê&Cªá]|w7Mƒ*+ì;9"SЙ�Èz�� `îÆ§b¿±ƒºTýT›€OHß)~4€©ŒÿØAÝC�ø‹ú¿x!·˜EyR|¶0hr•WUrݘ°ë×£eÝ,_ÐG‰€øÛŒÓ0[§CÅÄTj�4èï>™2î5HÛõÓúÕ¬�^âNƒáê…BÂh€pQbb‘4 ȃ\–™^"ôï= ³¿ÀÛ·mwh2ËX¯@ƒˆ± Êš¢2ð‡ò² ûÑ‘^Ó§—&¦&ž?ë×%4-6ùÖ§Ÿwþð=°ëUx'^  )(½OúÆm_«µ IDAT£U}5ËI`H>¸ë–çØ†¤/ûA]Îàü³G®0�çñá7Y´#c’ûbRSÁ{pé–Ï>O ãÿ¦†Ëà’Û¡\!Äy¥å‘!rß'¢jÇg&mŸEë³fû²Ìý?mJñ™ýákCÜi`î\ÉUd ¸ÎÄÖô`·'$ë{ìÔñ€Á£ú†QÀÙ8qöHn ŠËÎ*Hj«Ãcj|*ö7"*ÂA ¸ß‰ gr‹X°/µ•qsYtz�´ß×–ÇêzmkWgõà‡Œíœ]7w’Ö’á “ê/…_^ö¨d¤EQ$-$I„Iš­“X ˜¤IZ@˜¢pã¯#œÜœ�º©óÓˆ@$I6²�Š ’$ÑHe„½£éÕå €T:È!N«ÅÖ «^|Q=fŒ:clzýÖ¨ƒšwfXY(¬G™Ñê}Ó‡åmS”Û0”Ñ$ÆeÒÝg0µ&+kŒÝöå_…¡Á dŒ;w¾P5ò�.U6Ã1 "‘4×rèÀI* €+HJ,—9ÀfÆ'V8v RÖë.631Iç GlN|b…c·ª�äXS®…½œcJ\*øNó«™ãÏž/p¼0RÁhr’.Ú]ªßÃ¥A-„B)‡är qÑ™}ÿýÿ3ÀÉ·÷D–jÌ«ƒÜi`Óã“ôýCätIñiÈ�?€ì"úDP¿ÿïÓ5¹OMÙ͵�v�4ЊF²Œ¿Ÿ``*€$Dðíúc£úf`�©¨4°€iÆ8üÿ–ü» 3íf¢»�Gbô9‰ß&ÿÙ3XŒŒ ÇTè ì}Ò7­<Á@’$°9Çÿ:�-êFïVp ÅåØ�äH¢â±¥}•LüN‹vdŒµf_Ù ILî�u)þS>\:ѧzÇŠ™íáäâˆb ‹XpÐÅœº¨ëôt_—£7Ä�°l}VlßwâDŽjÌ"Sy.'>¡Ü±K°ùI“:bmEHe2Ó’¤VS�ìäv„1Ѳ³B6;`s’*œºš §)/Gr¥œ´�ñ:%­:=Ëí6­¶¼¡~ÛÚÉYµéœµZÈØÎÙu³ ÀJ2ÜbR�?*iZ Û;²„Ñ”®(/ãìaÏþ£ Ìs‡qQ®€²˜)(ZÐD,\“I4Mët:�À25½^oº¡±±ð”"3‡ ’¤ÇYM¯¼³M`£NDyÔj£ÖK@H+”¼AÈÈUâ×=þÕ�²Q«#ݽš¸QÛeQ\TèàèÔ¼gŒÉ±ÉØ÷ÉÈŸêûÏØÔ‹ùF»�`O’+JM«P‡8×LŠâ’X�Ç}Dlzr¨&ú L>/)!‹ ãK.IŠÏ{Õë-\–œX r'MóçÎ;c^^�Ÿ- šbîDê8 ¬¾›Z$ôñu%«SSŠD*?W(ºnÙYÙìp—'Æç kJ¥$—Ëüý“h#ãuDdÕéYn?a^žÍ¬ß¶öqVí5¶N–±]³ëµÝ›f9n-©þÈd¤)‰LÐYŸ|EBÑ4Ç–žÝs1æȵ…öˆE­×±Ò€Î 72¶$I ‚òòr;;;Ô oÉqœZ­¦iš$©VT\lvn@H‹·Ÿ½^󣀌èácJ:Òµ÷ßXƒ±ö¼�×YOÄ�Q¦Ä¢Ë I¶Ê\,jŒ²mhv¼ÀfÄ'ê\¢‚j72ⲤÄ|2`‚?X§Óaš¢ª6Œÿsð|™ï¸¾ž„án‰)íM—¦±Ùw3°çp_!€1%á.øõñ¯w™!%á.ø=æGCu™Þ¦2¸")>‹ ëC�!'«<<]k l0�áo,£’HdA�©Õ¯)ÝÜeyé×v½ì4þã�ŽX½N�‰êÔ´13%ûUQ€ËórÕ”»—S51R8hÎÿI5¯þx-N=ÒS‰ÚÂQâºçT,.L¯Þ7@o¬ Dú<£3É¥¿ú iédzoبoÎýûýí(Ä^¹]t;Þ!<˜‹ûý÷û£SŸEÆ2O)}ö­H@¡ aAI¹ãÐ!÷®o<î7EÀªc¶o�SMXÞKޤ..ÒÒ¬³»¯Ü’ Xò¸3ÖŠYû ɉwÁÆãc"ý‹>\ùËúNŸ.è)G€+ëØííë�O¤&\‹?˜ê9l^g³Ý_ØŠõUù�¶�3«w"›V$îf"U/?s'RÇiSãïâjû7$Çß¿~4.¶â¬ŒWmt8`L69 W&%d£|©f0n^ÒªÓ³Üþ:å¶­�œUGY˜n×ìºyòÜR2Ük%©�JFšKÝú�HJ‰U’INœ¸b�±�ÃX ( ßJ"kŸ‡ÀÙÙ)5õ®««+BÈdZñ"]Ü�Ù“'NKºÍ!ÒŠYûžÉHHÒ»÷°C²ˆ©sú_ýú¯½ƒ;Ï ˜ÙN_/A¸øûÊvü»îw-<öÚð:ûÆ­YŸ5Û'Ü|¼Ïíû;b¬¯19zëùRˆ¨>Ù`Š"ÍdÒã“ ýjþ0z �!’²ì¬Ø$[ŽK•c1•dR㓱Ϙ1 ½­Œ›‹È-׊ӳÒ~&¥¶<àºmTròïöpV&dlÏ캕äyM2ÜjRàÊH+Â{¹—}怒fÅ"E‘À0l¥ÎPb@îƒÇ)#"[«.™Têìì|õêU•J%—ËM+ÔƒA­V§§§;;;K%’V¹d!Äqæ0®l-Ó´¦Kv¤­ÉÕ£‡«w¤ÙHÙö–âFOÔ¶^8£MŒKCþÍÒ‚LZB²Á)*Ø€¤ç´ù£þ»~óЉKPÔì÷žä#*tììÁ鶬\&pylø¸~gï2Œ�I‰EÒÀàú·àÒĤi@�€K’‹d�Áî$›“�¤uê¤@ânOŒ_{à×çÅ.¡ã^Ô„�žZ8M÷çÁÿ}¹�(Ü{ªTQ¨[ áäë-Ñg{Î|qœ� jžÕ{ÚÜÛ?oùó‹K"·Îƒ‡ ïr®Ò¨Å u?­×O;wE÷sq¾ýÏ�-ÛKõ„Ì%0òÙE“[û¸™5­°2Vj¹M>ER€åX½ÑX©7TV˜'#›Ð7E ŸÇˆA‰ÇÏydrmÅþY ]»F¸÷‹ä0G:8&äªH ÄÒD5ãõÄP…¿�EÊ<:XšQ"#ÒaĬ1*ª:çîê&‚TçQOõ¯ÚjbÙŽ¬}�K“KdAîHºŒ"øü¶=çF‡ v¨±�½g…@û‡Q_â"_�Ü¥îUjV¬­Ø>’EN{.öç�›V|B»„ :2ò\�±ƒ°z£­¹ÓÀ%‰‰ÅÒªöáâ¤ÄIP�aÍYáB[N·:Ž…ËILÔ8t²G63nV2rÔ]ËNÏJûÍ�dƒ¶õWf´µ³j?�] ‹dæ0æ€[pô;‹èÜ\*ºsß,øÅØ·Wöeõ¸åK‡¹ÀÜ^÷Ú×…=ûæFßê¼dÅ3�„lÚŽ÷>ü·Ó› ²ëV¾ýåŸþ ™±úÍÈŒ??\¸Ð”]¯�¸$m~ûÓ˜¨�>ŸêG0·~[üMÎÄoÞf—ü×ÒO¯÷ýxùd_ÀóÃ+ßëæþðF —µ÷£wN-žcømMÚ°eM¨�ÝpyôÊ…íý¸  úË?¾úCÅÓß¾9HŽ W~~uMÙ´UK†*b~\ø½zúꥃô—\´F3ó»·^©-_yî›—~¡¬]اA6QéÇWTO_µth»d¤1ÆêØ+Å—£�‰œV „DN{9F² ë‰Pk¶� ­¶²¸¸˜ÃØ4tA äàà ‘ˆ[k0cYö¿€­Y}{ãȨ`™ÁXÚîb‚æ‹§�XŒ‚ òô™3½£" IʶÇæ”[ý-Û<Ú Öôíø‰“={ö¬§Õoÿ:@gÐ ôô ]9ŽÛ¼÷†ÑȈ„’ÿ½yËv}c�ƽ³ßÐ$¥;c„8VË0„!ƒŒ¢X‚(DXè3áÏošâõíÁ½ìe¼�`rŽ|õÑ~é3Ÿ.ì«|¤ŽÝ?²Œ· ±·oÀÉÙ3(„Ȫ½Œ÷œjÇìzm”b%n-©�VF!¤ï%õ ã*+X£Š&%2J,mõº8Ž‹EîW½—!’$L?µnlÊ0 �P#¹@½^ @VÿÇj–c0�5×�ÛBÙæ`½eµÂô¢—z%?{ö¼ümTnq6Ëbu9»í“dsõ³Eߊ÷ÇÊèOÖÄí9!áH!Є ãRW’LèÄaƒÞQd�Ui^ßxØìœ´wR*i6'æÀö¿+‡¾ñZŸG$lzdoe´Ž—iÏìzu7[K†;Y[ÒBð(f¤)±Ú F´˜Ô‚@f÷~´þ+Š¢ ƒH(´Ø hñõ´Jó?­4`†ajÚ&)Ûn õ(óèÀþÑ’V�$c±¼QOmÜšBºîq(›õ� ©!Ÿ.î:çÉ«ö§üý¯¶¨¤Nö~ƒ{wŸ5Ö1PÕÀ²x}ãa;tñGûîL±Ð9¤Ï¤·§ò“ žq¶e¢Í—E²€1`s ޵paº£€ÏHwh°,{ýÆÍ��`©TʱlõPÛÜð!dJ‚’ZmeBbb§ˆph#ÊüB!¯o¼¾=Üè  Ó#ÝAA„‹‹s\\ðA$aÚùO"„ý˜•$H‚ H†eccãLß·e¾×x}ãõ�–}¶¿ˆ»ÏûzÝ<¾»‚y …žžG�ssssqqV*asID ’ žÇ³‹9Ìp,Çrã’ÒÒ¼¼üœœww{{Ó#mG™¯o¼¾ñàÁ£ãclà8AÕ^F0‡¹—ö½Œ<ÅeYV£ÑÄ'$–——ëõ:­¶R¯×7²¨W} aÚõE„½Réîááîæ*•JI²jln;Ê|j?×ú;\ðÏú߯ºÏ\0ÜÓÖ9.¾±ÿ@’ÇØ'{Ú£vf¤ãv¯Þ�lËy½âÑŽ3œ´ôôŒŒLooo_gg™L�¦°°ðÆÍ›*oo•Ê»C«ö¬c·s]Òþ� ]¡ʼnä:¶X}õØÅ;1cg†Ož×Q£é5NApÛÈ‚‘ÑŒF0Rzht©�@„é~°…²í0§Ü" àßðH©¸øúáÝÑIj •p¥Iÿ^¸“¯kFýlÞ¥½{Χjñ½3ÂÄmX4ëåßnZö®Ì‹½t-]‹ü.àÕ›�yðhc”k4YYÙ½{÷ suu•J¥R©ÔÕÕ5444***+;[£ÑtÐêòcΦÞì�JTv´ƒD( %"¡ƒD¨²£ýQÉÝÃ[òcδOP^õî%lýÀ0:#ÆatM6´‰r³>Õ”[Âfõ¨†_ݵš/ÊÏ®Zôí™$-‘»¨‚»ö>vT¤§ˆ·aÃyŒ±%Á–þèù¯;¢‚ç|·bŠ'Ñ’.³TEc?µ€ZcŒü"\´á��ut‚;xxz:JÛk7„MÜõå)¾ïª·U4sNÖ.Ë%¡{.üõƒá ô «7.Ø÷î‚ÿÝj°;›îþêoŽxPÚÞ ZqÏñè0`9.;;Ç××W¡PPT�MhE)•J__߬ìœà`Q/gȹ°}ÃŽ3±y:¡s€JP�©6­¸âs?½]T¤§”ª£gÏ(i\›�åg;0j;‰ˆ$!±¸¨À�ŸÎiËå4vÒ–gœ9ìÚ�–Ú™çJ.®ÿïîky%ˆ]BŽŠ¤ãN_¸•Vb�ºuù̼±Á²–™Ææ7!ü߆'tmÍ�"¡È`Ô™²ŒJ'Šÿ:°öW�äóY‡¬Î)ëRÞ7z´Akë«Ìñ¸ƒ[g¶Š£ª�Ý£ÿ²Ð ÌjÊÊÙÐiÍîF+J²¯œØùùN }ý£½ùÄfÓ¾¶¸å P�f|0«« º¬ØÅ57m]ãY8ˆeú¦Yg´ªK6|¤qF,<‚TO¼ýåhŒ›Q»ù#f-i«.h…û“ô²¤$2wÙƒsìŠl•}ŸÿÄ·°w®Z—ØõÅ…Ã= dç!AHf®U´·ÍnFþŽõÀ±,ÇqÎÎÎ�žPåääTRRÂ2 AÓfD{sãÊÏ‹LyyŽY’pzO²M!c «¡GÔ”QáJTtmÿ_¿ÝäþÕó]Í/µšÊ¤Î!% ‰�ÈYòÇÆ€úüþ’#�V­®0ù¦A£®2VdÆÅ—©¦-zÁ—Ò¤Û°å÷¿|‡L�þêS²«»ßöó® ³C[rÀ£:‘WeØ:ƒvþ˜æ^Z£Ë62 htÙs†4·ÖµŽV?ˆæêQ6h+ ëoc«¢�Ÿm„rË¢Fªí¦§„�ghX˜ºô0|h—•K¿_óßð ·9à¬#+>Ût-¯ÜHʽ:ŸûÒŒŽ„þò·/|~wÌ7_Oó!€KÛòÆÇÂ?úù…N�æë£ !ó1 ¶¶pá?¿|·õJz^‘Z"G¿Èñó^"EÀYu•�«¯þùþ?©‰ùF©g§!3ŸŸÑÇ�nX“yÛï[OÝL+â�½Ÿ|nÞ¨ )CÖ¹�¿üõ÷íœJ¡k°¯@ƒéæ3bÉëÜÝòÆ[§ºöýœ ²Š©´Ü¢r=HÜ"†ŽëKß:yöFj‘AêÙcÜ‹/?n‡ê>ÀÄ­[0qú¾µáíþ¶è‚–”¤$毵[ÏÅ§å© ´}ïW¼5ØqÅ×wü¶áÈ•ÔRdï×cÔœçžìì@ÔjTSÂoMÙÒŽ~Ž q‘†tgÿˆN¦®øú6K�|À óQÐ+)ËÈr,ËJ$k$ ƘaXÚ,†Ãš˜#gJ¦.}~¤ €iÚ©ë mV�É]IýzöéîO„*ó®xöZ*Ó5¬±�ŸeŒœV#V I<üeýÆÑn ë7Nsó<—+&8¶TÃ2 ï”A"·àNaþ$;æ]¼ºß³×�ÈÎ@ Äž[Ÿ�Ï…z´Ü·˜Y¶Þ¨Wk1srjþ”K‚jD6Qfµ:]B\“m‡ÚD¹™ š÷JÎR1éòøÓ£÷¿¶åØ?E��qT†ŒœûúD)ߨõ¿�«ÖùÿüF_IX�ÁÙ›wŠŸòqB€Õ ±™‚°§Õ#ÝÍKD`Mú�;¥>³^9€Öå\Þùçºë<×¼ÚCŒ,‰ZŠªtWÞuò+S�pÆé­›¾úÔðñ7Ïwª7³ÓÝYÿÉŠ³.“æ½3ß©üÚ¶µ¿|±ÎõûW{ˆ+®ýöé7§%Cf¾þ‚Š*Š=±=ÁjÈØòŒŠ‰)¿9o-  ËþúçÚ?F>=÷�Y¢ÒË[þ»áÛ­!?Ì‹h¨”ÿ“ï,â„€�: Ú¯ 8âX–e«òOA Àe‰—.åºÏøÏ‚p)«!=” ñ›>Y¶=>û?sT�ö÷Æ Ÿ.Ó/ÿbf� ¥Âo%Ùbsi½‘’ab]i�†vp’R€ êB5R:ÙÑ¡^ñè8@"I²‘íkA�$‰ˆ:C?››žÅ:D9¢v©®~'7'B£Ö4i#ˆ¢(’’$Â$ÍVg1`’&iI`ŠÂ�¦Þ {G%Ò«Ë ©t�Cœ¶¥ûàqõâAµuŒ:clò9ƒQWã�Å)eÊŒVÇ蛾^‘Ñ6E¹E ·ÓÂ-ÀOÊ]ÍÌaÁIêÛ=Êô­ÿì´sÿ9—Éö ‘t‰Œ ×^¼V6j˜’î$¡sB…�ªµ7Ò¹† _O›ðu•Ý(G|ôë+Ý@b¯ˆî]‚HèÜɱàê’¿¯$3=:QEM™l³÷“S†’Ý»ú3í8xeF§Ç¤æm(ÿwÏÑâîó?ŸÖÏø/È�™¿ålìüîA÷ÿ]üôÇ/�uE.»{ârl›¤T�Ø#¬kD aN9ç/íTõÙ··£—ÇÆær^ ý“@é®R¹£¶ì‚†WÍœ´ÊôÒ{Ê—ßÎB@H|ºöì\•¼Ãš‹»fúMýöå1ž@ç�ÊôÅ»w_žðV?iK…ßê²mª‘‚aⲘß>ùþl¥„&Uc&z_Ú|¢±F·‰o¿;1PÈ'yÜ'�AÓ´N§,ϯôz½éÊĺN×iàvª®aÜ \“uÓ�ØÞ‘%ôˆ¦tEyg{ö…ež;Œ‹r´�ÅŒHé@Ñ�M, ŠÌp@€H’B×BëÄ€1æÌ_Ób0êD”G­CfÔzc)i¥€’7¹jÑ#\÷PrCÊF­Žt÷j²IFm”[2šæóíºïʘ{qëŸ;ÏÇg–èi]É!F@òžý»?_ˆQ"½{+NðDsî}ØBFëè.³—=×SX5Õ²s%ÍΟ˜,ÁÅÍ•(/Ó`k¢®?v!×�ýµÔö±@óéfvJšN›ÿý³S×T=À2HP¢e²ïf2N}Cœ� ƒà½î ÃÕ3B'¤+Uë«g„J¸]Q�ïS<ø :Ïúô™î&‰„ö^$WGI€ÍJº«wêÝ©ú¢%­S¸ãæËIÙl¿ Զ·]¶�5’|0 «/í;!ŸùÓ×÷}sÙ­á+ÿû¤[ú¦7>=;6°õPéÕá‹8$Tã IDATn<–î5rLW{~ÿf£1I ‚òòr;;»†×Íp§V«iš&É::JºûùŽÞ¾•ÃySm_] ý›D& è¬O¾"¡hšcKÏî¹säÚB{Ä"ŠÖëXi@ç:ÛÚ/˜�SÒâíg¯×f1hÁˆ>¦¤#MQ{ÿ�5k/Òâ::nŒ2%]NH²UJbQc”[2Þ+-›NÝrY )ZÂÝË ¥íZùÕbäó¯= DÙG¾]yÁTÙõ|¼;õÝ™K¥‚oÜ(ôé×Ý à‘u¯Øêqf$qñõóYƒ0 ‚ �Ãsi»-‹ºaOq „êý„‡Ç}8%°fpF"¥ eæ0W÷’&+ç@qËÎe×o$I€9ŽãL3BªjFˆë7A3�{7· ¼É…¥o©«`€Èº<Í8Äfç¡Z,üV”-®§$64ò¾&È•‚‚„‰¾Ô¥$­¾yázxHvŠÚÎÇá«Wm%>mn||‰""̽¥ pq̾mgÜ^ŸÌÇ‹M!pvvJM½ëêêŠ2ã0ÆÇeffúùùÖ‹î�´×Øáû—í]ý=<9$Ô‰Ò%æêqÛU×ÂÀE,uë7")%VIR$A8!pâŠDÆBc5 €~#(‰¬Ý#F ŸNßkþë’õà ½ÑÈ€�ÐŒ†³�Õu ؆ˆÀè½{šé®p«FŒ­òö‹c®;p39o<œ&鹨¯£ñVr{iÚ .2XìnGÔ„:v=Gö—-?}³ìr¦ªwoOô(GŒØº`±…SUõ"1À`H³"êzå�w¯Ý.ûzlmí¤»¯ŠÚŸšÍ¹T™+ öôî¿y-‹ ñ¡ÖÞ F 1F¬0Uÿ§:ÿP¡©ä0�mÔ"b´EIH�@?á�Ø›y\°'lÎíØ"¡o€Q�’lRøm*[ €m$~@ SÔköëëwüºN:ö£ï]nnÜôë*`ÆÂ'ý-5²cèU[‰/?zíŠC¾KV…¹·”„!9> ù?îÏ¿¹ÌȤRggç«W¯ªT*¹\nZ26 jµ:==ÝÙÙY*‘4Xƒ¦§,Yj·eûñ�«vUp”ÌÁ-$ÒCŒÚªºBÞË}иì3”4+ (Іa+u†r‰ñÖÔÅ}<€ã87W¹�]qqqII‰)b ‚@ÈÏ×W"[Ž!EØ/¾ÿD»TGxOúì·I5Jú¿±Î¦KdB#ž’y_Ž.ËHäÔj $rÚ7, r�]XO ¯~©[¹ð÷ßk~òœ¸ì·‰-  ‚`9¶æEË!£Qg0ßFºFBF„0Çq$Išo e›ÛY‡ò}Í2Z)•Ûg·/{;AKÎÞ�]'½óú¨^B ~“^›_üËÎß–ï¯à(±ÌÞ3È­æúLÊwä¸.ûÖÜ ~r ç£}�£uý`îlýä½­µ]è7ãë¯úXîk¢FRUD˜òâΕkÒÎ58jîGsÆøÓÈåñi.þtô�cQÝæ†tzæãwä¿o>ñë—[´ qòë7§Ï  ‚g~ø�üÏ¿ýöÅV GÛ9y„÷ñ¶âÃa$vÛò·ÕØo¯EëÞt�ó(»¾sæßúnýæ//0÷3‚»‡�ñ8§ žùþ{ÂßÖï\õq(ýzNyï¹Iís¹²½�lNËë,5qüaÒ+¬I‰Þ¾íðÅø|­À¥Ûøæ?(F€‹c¶þyàjjVn©É}úL~ñÙAž&5>I_YòÝ  º¿øýì�u ì¿”’]XVI>õÉ{cLW˜˜XÂäþ?{×UÑ…Ïܲ}7½÷-¡HiÒ›( vš¢ˆ"Hµð)M@š¢Ò«HoÒK0t!=!½÷í{ï�ïÇ&1@6HÈîûøø�Ù9çΜiïœiÇLø«Ô s öÑûÝÝ\Yì‰m»þ¹‘R¨9µðÞG¯ùK¨#–¼>Z5%L€ ŽÍÿê óÔå´ Lè!Y£X,rvv⸠Ú�"IÂøS“þBÈ¢y;©W3N£b z (š”È(ñs=GÃ0Bµ;�N @VþÃôÅ ôCÕEèuÑ\÷~«ºæ§·ù8i0˜nÒ??@³ –u—�Œ¸Ð½W¿š Ót—úÈÏÕ~ÔÇnøüÇÜQ+¦¿bñÒN#I’L»ŸìâæQÃ͇ªnF„På_&Lmº*«1fµxµixªŒ`Œ+‚«'½Joµ<Õ­šâghdµ¥¼ÎN;ÖµáêI­­¯†Ì?d¨ âáâ}¼ñĶ�~ÀD"ͨa>/ õ[ß EY9{hÓcE®�Ž#¿¦­Ÿh½«c¶Ï_|šk?dð+~Â{»×A¯/™ÙÛ”—M^¯éÿÉðÖ2}ê©Í›®Ú¿¿ôËpKœö÷œ9¼'Néã‚%·s²¤kÓ°A;àÓ‘ÁRC98´ô5Þ'‹•—MÞ ì=nx[+.ýôæ�‘Öïü4½§5”ßÙøí²e=ÞæÊÝýë—½¹]g/|Ë¢7|¾8­ß¹¯9 MäŠÉ¿Þýyj©ªfýOƒ¢Âk[‘H¬Õj€ÇK–eoܼժUK‘Phêçoö Óþ«Zü͈½5u{I:½áîÝ»­[µ€Çj®3·~@3I>Á¾­˜è(8õöh!AƒíyìDûáŸuy)éÐÄ^wZÒÿÛ0‹—|ÙÁ¤ýL­ó>\íϺ Ôò®ƒ_¥a2RK:jqêÔ£ÀMù!ä'(ó:E6iüçÔ=˜Ma4xÞŸ§ÿI«ÊX?ݶ…�´Óˆò¤¤ì�?¸O\ù$|3áï?N”Oøß„Ž–�·üH¬V�Øûq)Ø{@xp -oQÇ“WþÍ)âÀ¢<1.Kè7<ÄݵÂKlˆ¯Mƒ×€ðV]Ȥĥ`¯�½;Ù ð‡�ú÷BN! ²ä›Îêæ|ùvpïÕúðŠû©J죊OPYµ¨PÂÜ�O`]{ûH0&ôóàñ4³5†a°PXåÏ{hCʼá=®¨pÓË0U”ëDkÒüÔ¨ÊX= ›yvõœ]©”CóžŸ~5Ü›zÙï¡À/ʱʦ›ÜTOLó¶5ë”›KÞ1—µý;+™“£¡4_îážñ×)0Ä]ŒÈwê>¹½£ÌN¼vtÛÙ÷A!ö°q *›6¾Æ;p°²\ V  ɱ)à9Ê‹®«¿‡oYcsâU¶m|�ᜲ¼),¤!áRD�{Ÿ/ZUìp↑HÊÛñÙ´ï0ãé=.?1¡\áçggZ?O+KË‚‚B™LŠ` Æeä'¤uÜ!”_�/ ZóÓSÆzèºê¥÷#¼F-Ù1 áŠXù›Ë^#4ÝŒ4ÑÓ¼mÍ<åæ‘÷‚’†|…_gMZ”ÀÖC™’"rkö$ ¸‚”Ôr6ûðüq5z¤pñöÕÈÞ®$àâĸ\�¯¿ Àå%%+-ü=-›–�¤w óS ºjp}È%‚Ëâr„Uš ““ÊeÞ^6¸ðjªÊÂ?À®bmÙ�›È:wó±iI©à>Ä[€Õ‰ñ™”OOʤ~<ž˜¹„½½ÝÅK®®.Iâ0ƨÊX{KG•7b#„"Á°lLLlppã#: §ù©ÇÊ|Œ9ž)V+!Ìg„O9_½_¼”›CÞË£.”^Ýç9 ¿>;™* jMΕ»Ÿ¯}¢|èõz¹×_õw—HdAÕ@dHŽ¿^¡ÆãtX•—Iù ð @Ÿ�YÎ.d5tô~øÅEC’1Üø…&1>�ðéëIá<­ÓUqÿ|Ñå#¥ž;¹úûÅjdie<ÇfÝOÇ.½<…¦õóàñ¤@ …Bç'þqtt´··³´° ‚ ’ �H‚¬qß>˱˜Ã Çr,‡1..)ÉÍÍËÎÎvvr²¶²2Š4œæ§õì® ~\å½0¼;©ñ oÛ&–òFÏ»>75g÷÷¾¯2ÅÙœªŒ²vË]€ýÅ¢ÿô(øeiõ’$\]\ââbbbu:­Z­Ñétµ,"¯æ!¡Š‡¹­,-�œ�»t“J¥Õ÷26�æ§n(žù™ëÈ„ùŒð)ç«÷‹—òÆÍ;§S§ý6ñS{Äjt9©'+аŠàîOªJØâõÉ£´›Žü¾p+°pôíüz;Àʼn …2_'€ÍŽOTÛ†øY q›~ƒš¯=üÇ¢±}àÀ‰áÁµi�úú;=´€ö`8—�� ´nég…$mG�ïûÛæ‹æ1{¿cf¿î!*pÀ˜îi[v.™/° èÜk`ØÅûŒcCÍúyðx* „(ŠR(íÚ†TÜÆúÄ;+¶ ßsÐüô™ý¨Ú%;?Õ%;¯öÀWšzGRBœ�_Ÿ‘&�òçpÉNm}/s­h¸¼?¾¾aœ¾v†Hª´ôrW%ß¡d–ʬ2¶÷ød1 ž@=%žî’�„¸ŽŸ“òxî ø<Á®eã%;'ßM!DÔË%;Iñ±|14Èàô¢¶éfÄüSÎÛ¶)¦¼±òžb3”¥X´h«I¼KÐBuVQY–Þwη<_l¢É{[ªPRThimÃÛá9çä±CÏ"^”Ñvýg|¡òàñ(RÂ'7ô'øÖÇ£îõ­àè�ž­5©1X§NV“ã3{=!–ñ¦ãѸàÏ6ãðO»óàÁƒÇËs htˆÅ§–¿¤‚‡y°"¾6ãð”‘<^ Øôy+ïü§¶þ†œ JHÚxX¤üô¹ß÷[H ïhl*À%To(óÆ©£¶gÔÀoaáÁƒ�—öýß!�ÚÅgP–Ö¸¼Lj!� Õ©+gæ^<>¦‰=ò˪ƒqz¾Ø›}æmÐ$ŒÃSÆ—©âè L©ZW¬Ö«õEj]Qå¿K5:��á[-O1sgi‘F¨P J�¢œ–—Ór¥@¡*ÔB9K‹!óIªÛÄïÊ‹)Un!Q@I©�»›r=g×Úzú“¸gÖø/·Æ0µõCêœØ›1Ù Ì嘤ˆ#‘Å´ ]wÓ›øÁǼ�S™„¦¹0�l¨°AdÁ>]\1_ŸêãürMJnqAiæ0W9uA‚ l,d^öÖv 1�ønyð¨[GJ�erÇL§Ve¶Þ@�,Žã€ p¬)zŠ VÁšÜØ»ÙÒ Öî’&áƒ6¯Óõš„Öˆ°ô¢OÞÆV­ÃÈÃEÝÊ@RŠYàÑ8@I $ñ e$¥ÖýÞ•†�¼½b"Ú¿H‘]gKºŠ ÇhË\ýÞ‘¼¡R®?Ì�œü½ØýŽfÇTVcGõúDüÉ-]Æèê ‹M…×—lS�‰¼”žÖü ¨’{O·*`2 u’}nö{Ñ]ƈºt$óh¯â?A2¨5jüªh–¹¼FW¨C.¯ŠzMkî+ÿI2�£úîÍ)&H¡Ph|’«—žP$…)�¹UÇ7'ªîæ%ß°wC™ÒB.ɺ}û�¡LNÌx�p%°êÞÙcwˆþŸLi-Ó§žÚ¼iÓ¶€6_†[â¬øD¥}÷O§ôqAˆ’ÛÉVÇlÿañi®ý�1_ø ïí^³{ç…Й½m@uïì±»Ô€O¿–ÊJïYuB§7–—q1Ù¶ó[´!ó̪…›c-;ö1ñMQô–ç ©›Ÿ¤sìè«@ÀÄïùyã]ï7?žÓLÎd1®vfĩޏüâ²O¾P¬ç€ Dr[7ÿ¶Ý†Œè×ÂúI¼¥„ØÚÙÅÅFB<Ù8\ùÿçßý!Œkú..9ö͇넟n™ùŠè3X]„Mø{á‚äÁ+[»‹›ÄÀ]³qžVÛ3 RPŸ„@ k(Íäl ›RG•MvyƒÒdp’V&—°¡º�…v e˜Ë¾¢?ö›.©ÙÒ¾z .+Rh�.M @¹Ò}&ˆ‚[B-—žŒÅU9'ˆÐÙÒ^!„„ƪtæêÚ“W9NH�Ü,uÚ¯\µ•å€ {®’µ¿«Z¼†yY)+L$)(B{kïß3äg)UØ /éyó÷QÌ¿$A6loAµ„ùáÈišˆ{À2n²1C.Ç´Ù¾”Ÿœ9÷§>> �=æGOêJÙ‘LqGñÇS©˜ùʃ7±)ÙáÏ"›Ñk‰©À… …R?gpiFZ±Ð;´kKo1€›§™{�0«,-gF}óNˆˆQgÝ;³wãÜë³,­ó`�ÜûÍXøÆø‰ÎMTFÆÏý´B€kܰ‡ÿ3~Æ V©–Ó&@Mçiµ=ã䆪¨+¨žÒ#“CÎfmþqx2z;ËÈ» Û[0‡Öà¾S ™@ ${Í—„aÃñEÚ\ BÞ½û=Zû¹6CHNxµ@9ªÿN�3Õí}Ñ[²K—3z)5`¾¤�Jb¡!�!<úÝÐÕ)õˆvÇN‹Ÿ¢ÞÓDYï«ïªØø(ܺ5)߯–b@¤‡+NÝʾÄ.N@R”Eh_‡±3Õ 7ó·-bUåöcçH[tº½ë7qÌy¡D”§ÁÒUoÝŒ”©˜Ä„Š’K¹Ér=HwkÈÊãŠ0íßž¸|�c ÂÍŸPǰ,�‘dE57%«7^ü ²ùM¯€­—$£{ަJ*oæU´Vs±Ç]œ^~ÙAüÐ,˜ôŽƒ.ÏÒ$’¢êýLUÊÿ£�Âw0í¢4¹‹ëb�újV”D픘Ÿ—H©Üï‡ßSNϹsGØÊû«ϤŽÍHHÔ:tðQ 6;.AeÓ¦âô V–+ÁÂJA€!96¹½£ÌN¼vtÛÙ÷A!ö°q *›6~–F»– H*Wb^8x™èòyW[Cì�S™îý? w¢€M‹KÔ9w P Ð&Æ¥"ïpo Ƀ:Qþþýªœ×Göiã hM™P¸ˆ EpOfòŒ£'o¿&&ïÚî?w�‹J-ä,|C‡¾ÿA_?)ÂÅ7¶¯Ýu).5·LO[…Ž[4­[Ù®/¦� þaåX?¸¢Û­ßrüzJ ²ò é;öý¡-+�'é3/m]·ýLt¶Fèàï)PâF;_þDœˆ»¿³*ƒ¸àòº»®§æ–ë@âÔs`'úîé‹wR õR—��ã& m.GŠ0±& Ù‚NÓ¶Ìè"4ë aÜÖx\–@ó‹z  $cusa/Ûn´ÀoŸ&NOvJ•QEeÐÝI-” î(ìèÆ�ž¨‰HHÉDk„¯„ê¶]ÀÆ„åßaãn3¥ô¤ž´ Åäv„Ø0'¾ÖDd¤(‰¶í©*sæ\3.³±YåD«Õw7¸ƒ“"YöcÚÏR­(Ò³Çî½Ìû("(ŠR²ˆÅ kÙ†~BZÙ‰üÚ¤]:�¯—‹,Æehؽ2+¥XYy SˆÕˆ”[— ß¿Ž3NöYC*AJôÛ´pQýãÅÇÈš W=ƒ,4AÊøØ¼X÷´¢ »TLœÌÊ>5÷‰Ñy²öªÎ'öÿ/¸zÊ�u;xž|d'„XîÖb•‘?·”Ó4EQ¦V¥!D’$A›)U:¹.ßV?eXš”�/òñs"�§Or¾þn$——”¬´ð÷´DlZB’Þ1ÌOQi,® %µœÍ><ÜA�)\üC†}5²·+ ¸Ø¨ÁµbE–´²µ‚ëE%¬*sÏþTÿaãš ¹Œ„$•]› ãJ3.Lˆ+”8ÀÜOHb]_õ• z|þƒû…}[v-Ÿ}û�oföuiR‘@$@¬AÏhïmþnÑEûaÌo[~k÷Úu 68¬ü$DTšpõjŽÓ›ŸOh.e•¤³%‚²j ôqÛ¾›uóùXwH=³uË÷óuÿ[0ÚOXuký÷KÏKzŒžú‘;UsjO|£QƧw£aeÚ½{%^c§Mö¡ËŽü±iíFŸ>o½óÅÛ¢’k;Ûòó®€Õ=ºáŠò:sJ[„ÔÖܧfuœœªÁóøôµ[†Ä€KÕ¸ô¦îö’®=tiù‚PGöÄA–R:@R€�)È7¤Tnc粘û¢‚¸ð°°8‹Ã $F`ãM’ù†Ô¼ûl¢ùhQ·®¤�5bÊAHâT@©Oš(j‡®ÿƒ�ZR‚D}b ¼Ä@I©îFÜÚ°8hôdyǾ�•b›b-D¦)]_°ƒL†[¸Ä}ÃÕHκ¼è�`ýýsW7Ùgùî Uµy”ȶý¨ò3ª˜Ò&cEÑ+2ý¦ý,û˜ dqÌ/ª5{ çN‚^_HG”»/áç•r‚¤)’¬�2R$‰¨ÿz@}rü}ðêìE€!9þ>x…zÓX•—Iù ð @Ÿ�YÎ.U;ó°^¯'œ{}ñUw‰D&T•³QCGïJ»!KGGAinÚ­¿N\³ôí+6X�V‡ ¢Âä ìÙÓ�\ž›SF9¹ÚV*#¾ác¿–*?Ys+¶¬�‹¥Ù·zÌèõzdPeDŸÚ|$Uмos .?¿ÿDQðøG…É€÷„¼ãw^Œ „Ä£uÛ–~f媪+ûŽdx�üyR e�³&mʾ}×O “”_9t¦Ðÿ­o' p@Ð\vÿÔµ˜&éGCbçf­ƒüHhf›qu¯{hŸNm(€ˆ>û¿˜˜.ÈõÑþC`éäîîÄyÊXc– t-sñ 7y¨¨ ÅœVß.°Â:„ß%¿; IDATD’'‡8ƒq¥ š×áFHÞ WÕŒÇØEðúÌŠ,á2æÖ5Ñ�–�a}ƒQîCéK}X! iÚB*Õ&]�ýë÷ Q½.nër{M!-p˜¢iÔ œQY„ÁÉ€²FbÌ•—€8L<¼'>þ‘æj!À!ýÍ÷¥ã>Ý»¢¾§y¼¬©ðº|·.²Mµç…ð¡[:sw—2Ì“È6¦} èFKÝ`Ü_Bc§A’Ð÷w…ÓÿÊv]~8®6�ÍÈc3î2zGùˆ!ô‰ýóJ9¢h²ò8z-kÓ@¼ð—½0éñI§.>2À¦%$é;ùÉ€!%.{ öh�ØŒ;ÿF+,J³9¯îÁNŽþ~òƒ×NDøöifCi ÒJ¬:v �W¸#;ùV¹#�ttväöï^ Žýç¼êBáàæB‹8|>¨Ÿ‹:æÄŽ«ºƒ„@´DLé“®]ÉðoYvù\‘C3w (¼{)^oê.k$Aùó˜‘?«—ܣÛ3Æõ¶Gl\rªV�·ò½‘«*F8–A‚b5®ÕãÃf&Þ×Ù†¶¨<#N8¶hn³ãZbæ•u?ƒ±í`‹Ì€™<ëþÉ iÂÊÖiKÊtiim Ñ*USøÍêžsª>= H‚DëµÇuñ¯KÚ:²Ç–3Ðb€X�ŸÀS^Ž�–@8Sž¶8;�ãLûòXÃÊÏ ÒRþ¦£‰¢5'ÿaÔ�šUsÿ-XÇ1h¾¥ƒÛ @7.:‚{ñÞÄz�¢i HZ.$Ëâ#£÷I ïù²Å¤¨òÔ˜�¥)Š$²K-Ša•oS>¾È3˜$s iE ð$DJ&¿Â†³î²ºa„•@óxYSáuùn]d› jÏ‹]{ʪ„‰M|2ÙÆ´ÆQËËïWî`$<…c¿"ïÎS_ŠyÌÈ�(DÂsK9A�8Ž3åhä8Ž"I¾è”—$$K}ü \œ˜P(óõw"ØìøDµmˆŸ·é7¨ùÚÃ,ŠÛœ ¯O¥Ýtä÷…{X�…£oç×ÛA…©¯¿Ó#aëé&Ñe¹Œ7Ðø’ˆä¡£Þ‰þuç¦WEŽ-»÷èÕê’Æ Æ`!j3hT»_öþ}6ÌÞ.úòá�{Jt„ÌÞ·ý{Ÿó5¯;gk>ñAµýÍ;ÁbZ,·±³·!Œ0‡ënŸÎá[U—�ÈR† ¸VmÆÓ¶ø¿ÑU€ñUâ!‘Fò¤™:ÿRK’ðCÿ&)0ÇqDR⸇É઼CSyr›QRë·‰‘°^€K g6è5rÃÕLãô,ˬ¹¬»œ.í1S¬ßdÈEDÈ;B‡TýþÈÚL¢¹¬‹H•†Ï•À}J›“ŠÞçßgÑ`A�žÜíû˜³%DÕzmC”þZ–¬ëB”ªß“/7(’�Ò„ZÏÈhZ.Ü>ë&¤I�Ðøä9Çaµ^'¡ šhÈ�>Ì]}DÝs²¸àOC¹‹àµî(y­>“êS:ZÐ÷=öøiN/'Û�¡…éú”‚ÎÆš’Å&ŸE¶IzyjÉ BnÍ.^—UÍÇhþöÑæsÚ* Æ,e6W¦yð¬w  {3œqë² ô …Ôu†b ÜsJ9©,ª‹‹ ­mlŒ›«®òÆ3 STX(Ò”�ªýÑdÛoîú~•ÿî;g}ß*yŒXøçˆJ¯BÀÐK‡> (óï7i~¿‡Ô= Áºå¿lþàÁ çWÆ÷Êøª¿+%î½&ÿØ ZüÐÇœÝG5q< ¤N~~~³¥Ê{¡H'OwêPJçðŠûÃ6÷ˆ¶jÿ �}½„‡c¢r9Øìè˜B¡§�3aüéPÔ­L&ÀƒªQü¹’"lÊ5P;\¿Å��LSѰ@(•RÃah39ŒÍÈÏX¿ ÓB$ÐU^¦—yXóWµ\ëµ`%Ctì?sÔ†q¢ðé)pÙWt×êÒuµªÖ±'g©Õï ;Ž—ô”#¦œ+ˆ2䫲vkö[‹ºM�†I�Õàò ¦HY5в‘û˜.S¨ô=†ü—ÛÇ@`+&‹uÚB�!à•i4e€�ñv+fíD í aØ óÕ‚OD½g *6v‹úÀ¢tÃkoˆß‚H—wG¿}­6‹iuß· Y“áÏ&Û9£é¼�„½ *»Ä=ô¬oÓµOUÊ…2¹ÝɃ¸<ƒ½÷‹êäaŽ{Ž)ÏM±±‰+\VâˆáÊåiŒ1@€©Ò\ëÜ8”›Â¿aÀ㱌±2°&·’¢ÃÀ^Žßþ½ø'bdÏfv´.?­Ü©Gx€Ä´{€¬ý�×\gÿµdµxt¸;¾fëž4·AãÚI@ÖaÈkîsþZ°Fõ²£µ±YZÜXÎ7lâˆàÊÒïܾ]yD…°pkîii‚ špK>�töñºð×!ÿ¾ž8¿Ô¢}—¹9ïWÀætþ¥^)#sI=w€©ß˜½oü·ñž+`Nÿ <ýH,.E·bàäQ{J=ûTåOÅÌÅŸ˜‹5x Ù+ËUW–×üYu:[^†¯žã^úR�”kôÔãê?!4I’Ï¡ÝpÌ?ß(ÿy¤Uä�ÕþyVûP¨ê’fá¥ÇÊÖþ,²M&ó°GÞ+=bööa¯h¾h"kñÚ¥ƒjH¹êšvã5í“Y£^¡.FŸs*Lç¬�0%ŠÆ$ ˆ5cƒŽ*ÉÁ9ÉX]Æ3$ÏI‹w¿�©øsÇ©?îTƒÄÖ+llÇj”Ñ„þ£ç̮߼wÙ·¥`éÕvÄì÷‡ù ˜Àô¼¹ŠMÛ�®_°KÉÑr[çæÝéAÓ¤ˆ‰Ùý¿y»+ÿ¢Û}ºaVø3Ž…òNcÇß]±yljSÈ›~�Í›2šÕùô¡4”ØüñÉåÐ,¨eÝå##.´?»Òül,$œ=ˆÉ°‰"Ç ª_^êy4®†O ëÚpú͵õñx1ë�QTX`mc+‰µZÍ5Þî½úÕ4&#T˵*l˜­ˆ†zè&–‡CªK=¤û¡¸�áÐ"I2í~²‹›Çãòû_ «gðÁÌ>`>ÓѪ)Æf}¥wmÆy*m'�z¢^"&: þyë- ‰õb6bÂ�¶HäÈp)Ç5[wð|‘}óçÛ†‡ÃéÓÿZ2ÀŠ_—idhÊJ‹ï]õ�R2ª†²°<Þ׷ݹï&iÊJvlãò#7,]sàZ†Fî6âÓ)o¶¶D€U ‡]½íLTŽVìÐ<|ôä‰ü¤¨n²&ÃëK¶itÒ¾ï¿Z­»sé`kcNpÑþ©#–\«lš¤Ç˜_7Ž $ÍÎ>¥œËØ>iÌšh¦zA·oÏï)2Ÿ”›K³âÁƒ�†®GÊHXwûl™�’`“÷~¿*¶Ý”Ü Bá.çù¢Y€,‰Ç6RjaÝï]iøÈÛ+f ?:Ï$oŸ;g‡:|¼�mÓþòû×ßKÿX<Ø •]ZþÕ²è6“æ®i#Ë»°~éÒé¬íæé�¤u�%L…×—l“Wžtv×úõ».¥k‰�êÍ\­Ö�~oþoF/[H`íFÖ­\ž—}jL9aß{úšVjÎø›uü§…gì: Ì*åæÑ¬êE…/pïgmcË‹wN ¡�ɹ¼iÍÆn$åsV]GOþtp au¡•Ë·œ‹ÉÕÒ–®�Ç/šÝÏ‘}úéßWl8~+S-tjî+(Çt刓¾î×ë¯f•ê) ÷��¿x¿£¡½üÃÈY‰Ã×­{×›.ùÏ?<ÔjéŽ)m^Ê3?c‚ I­í­½Ï�Ÿ ¤Ta3h¼8¤çÍßD1ÿ’Ù°W@îìÛg;dÅ´á-h€‚Ô·fí>7`¼oBäÕ²ÀÑã†vp" Às|Ü™ñg£ÒÙŽN—|´ ºów¿}ÖNbR¶æðqÎO/;¾YSÜvÆeY±&Ònø·_$Î_^T½è•åJpðmåïW�‚ãÒófc)Øx5«ðÌqÙûÖŸ,lûñ¢.„9¥Ü<šOªx˜²¥_û”.úC}9õÁp{ºï‡Tþ&͵ ÞH<ž„26fW¦½óÛ´¹'GúÃçveW7/[1s•ãæérwý¸ì²í{³Wv´ÅEiJ{°êÊÊióÿ‘öùhÎgžT~Ô‘Í÷ ’2"ë–ƒ&ÌyÃV† nlÿyÝü5~;æv“¶ìÐZpêæí±Þvà’{Qi–LgÄI’¡}ÆÎT'ÜÌß¶ˆU•Û��#mÑéö®ßÄ1ç…QžFƒ ]Â\Vô½bI˶Æ‚“´jDžˆ¾WÈ8¸8¡ÓWþÍ:Ô•æòïÅäY4r#�Á,˘’e$&t:?ƒl3û&èg$\G.Û5Š —|ÈìeÅe¡+È/£m‚ªò5û˜LyeJË/oØtËaد}lF)7‹fU_‰Ä/p¨Õj^Ê~_Nø“¬ð‘pK²YÉîâ9�§ò2bxþ}.;¿ó@~û©«Þ ·@~Ss#ߨpæÎÔvÂâ�·  òøWF¾°÷x~³—NîL@kyâ‘ËQ•Õ_êÝ¡‹7øË“Op4:•í$mÛ¹5µ4âJÉ�þÖH{'Mh)zig›AQ”’E,YËÎ0ôÒÊNä×&íÒ |ý¸\$`1¦(CƒÞ–€¥�Uå¨-´±U@ja1&†L�t{æª�Þ»Þ’»¡öíÜ0) è6û¯nƸŒ YÖD8X<½,û&YÆQ#Òë…,zÍû#sr¯NC'Ny·£=‰ÌÊ>&R^9Ó8ºý Óuæp_ À¬RnÍŠ'UMùêjY× õÿþgЛ¨f-fÊß´Ó-�ª+|9ÞÜ l©žŸˆ:“B%»_»7£ªÊ8‰\Ã…a½(/¢l·rí.Ž«ÉbNÄïŽC§ßQE×A§48BÔ½ål ú<öÞßÚ#‡X ®›¬é8u‘mz”a³ ›ž˜¬Ñd/ÚsA¥ÛƒAÂBÙgð[mϯþ|lÜ«ƒ† ðŠŸ% À¦'¥2ö][8Ô4´².nüuëÙ»é:ZA«Y²…�e§!äÒ ‘%¯õ“'ÝŠÒ mgùÒn«DE«îFÜÚ°8hôdyǾ�•b›b-D¦i}Cm¸æ© §ÊKËe½{ s̺pK›|þèµ�-{:’u‘5^_²MÒ®Ó¶t�¬2ãö?.[3g¶`í/c¼É¦b6ñè¡{Ö½–u±@æW²fÒ¬x4ep\V ¦üH;Ò�É~Âw?£’W¨ÎÆIáì‰TQlÉKòFEv�-é*6[ -sô{Gò†J¹þ0‡@H†Í–ô°a¯ÕíÝ•dâGù¢Ø‹î2FÔ¥#!à˜:鬄°•ðµž(æ/Í™\°ï.ê5IÂe*ÿ¾�ë"k2N]d›(elÀn‘° óH§Ž�°é5cÉÛUÃ!±U Úrø¢m¡×Žý½s×�îØóá’¥cIc§[“¥¹äó¾ÙC ølÖgV(ýÀß^¨ø®E§^¡ô‚Ó—Š{]¿žïjÿòÞáˆÐ4m!•j“®Æþõ{Ш‰Œ^·u¹½¦��¶¥hºAÝ!„•�s$€¾¨  ¬l¬@yqÍÂc¶ã¶|1À–€!#ú¬�4yùï];Íé"y¬,i"Õá»u‘}q@Ê\C†~9>úß¹ç/e¼åíA4 û°ñ§Ïd8v›D?A�zn)7‡fÅ£©ç$rÐ…t”Af)€Sg�¯aÕ•<ÏrHB:9BÎ^ÖH�H{ªûG¢àÖ„‚Ä™ºC¿ê3Tµ…WAÔBôÑ|AùïÊÍÕ)‹�¹Yê´_¹j+ËAö\%kWµx Ã6+i!óÑÓ4÷€eÜdc† \Ži3Xäùޤ«ûåS}a5:!í,þx*3_yð&‚h7QP ß¶’5 =VgqÇÿdu×5?O–ˆ½.$îÍ âKÔAÖ”þ“yi¢u•xd—°´¶„œ´Ì‡œî¤›�']œ˜Á9{TÁÍNJ ±kû¡“—¬ÿéu˘½‡ï€tðä^¿–úÈ-> OŽMæZ y¿oÛ@oo¿@×ÿh#EØÀîò[G�߈¸œæùJW·—øÖo’¤h‘HZ.‘Ðñ‘Ñû6F¬˜ëÌ EbB $B iZ(&òÂaÂ9¨¹•:êF¼±5w®E³ÎAÍmP^rŠRîæni,±_+©*7»Œ«ƒ,e"œ¨'ÙÍ¡QÓ9 s¶—y%Ûª}'?êIjÔsK¹94+M¥ñLI¸zUÔ© Ž(î #íD»P„éL²é €ˆêó?I{±áØwªß—è5Áâ1QÂZ«8“›`Ô,÷·jÇg㣰}kÒ8n" ÒçÞf‘ÒX7#e*&1¡‚O§Üd9GÒÝ�õJ_ÄÚ Þݤ˜·K>á ¡‡E¥SŠ„ŠYÇ]œ^¾j‘.ñÁ%|S:�… ¾HŽd4.ÌäpÝdMÅ1)ÛTAÀsX‘&Üúz*Ïüºx×¹+7n\»‘\j| Á¢ëÈ.©Ûç}·ñøå·®GœØsì® —ñ÷¡‹·c⢮߼_ HÞeôpÏ´-³¿ùóDäÍÛ7®ÜN×T$œöðv…»6¿z/>!!1»úFQ›A¯9Çì\¸'Á³Û+î/ó;1´TfÐFm`YDÈÅ"îöY7¦˜¤…˜¤9‚b€TX…k�TÑ�‰h5d˜þ¾Ÿ–¸|ãÒîE+ÿÑ�@.ÁÁ…Ç×þvâvBrü�ë֟S{„´±C¥ç|ýµ·¾¦6-k*?ƒì‹E3ÏmÞrèü•›·®]<¸vîÏgtþá]\‰&b\�F¶ðÿÏÇhV)7‹fÅ£©ƒMf3 „«?A>t kæÆŸúdKº•?€¥)U²ié’0A¨ sl±.ê.›vY·o7# £=i“áC°==ì;‘Í¿šM›XíC>ÆI‘,@ûYPþ¤ fï5æÂ©Ì A)VVz ˜B¬F„ÜÈÊSˆÓOéþž§Z·@WÜ\ôî—Kª‹ê‡”¸�+3ô:’­ä×DûODÎ º“0®›¬©8¦Â›œ#¼Ê4ýÝ@.ßÑßÌ,]¶~Ó÷§Ê9�ÜÆ©yˆ¿5 ™´ôG‹_6Y1gƒ dö>áºõº8éÜö]k2Ëô”Ü9 ì“oú’ lþÁ’%k×ý½bÖŸåœ@açÚæ üFÏþ¼àç­+gìQr´XaíÞ̹ÊÓHù Ùn÷âëÍÞìåöR¿,HË®ÆæœÚ[{8†ã¸2­¶ "‘”Ä¿�SÏa”LÞ�© ¼ßüþ;íÒ_ÖÍ=¦‘z†½÷ÔA΀°õG f«7­ùjO‰A`í<ì›ÉcüH(üßõ$&dM„cxzÙ‹2jŠïÿ»gϦÌRF`áØiü¢q#½È¦b635ƒ³íê"zh”3—”›G³âÑÔ¡aS“  9)Dœ}wZr]ŸËwPßÔñÖ¥�ãõ[’–#¶Z ¯ð†‰…Äd8�ÚO•òtkVÊkêU‘ú¤‰â vèú?Ø©%%HÔ'–4ª5LìâÙ޽wÌ�¬öÀfªù—ts[}DþÓë¬B¢Ãti'ÃŽº¦Î²è™¿kþ@P}/cý±FªÕäݧzùZàþêgË^}ôvÊ>ô�y¡ï<ØbÌò­cjòVZ·~ý땯?úƒØoàôU§×ìâ´ðp·VÐ{8¼ÜoQ#DXùµ�»xêËK0ÇU¿(!„B ·¤$²Oa×ñƒ;~ðHoàÑóãE=?~(Ôâ•™»_y¬l�áèd›øä ÓׇNUkb¾Cæ¬òh}0Cû<”r*hÒöÓ“Ì7åæÒ¬x4m`.ù6Kö£\¥¸E·ŠÑaŽ<‘öÛž(k£ÆÃ6.Ôûo3†òr°7Öß?Ï8ô y›Y¿‘Ñ<2Ôã2æÖ5Ñ�–�a}ƒQîCi£žÎPa°@2€ ¬‘så%À$‘hôœ (© ÿéu>ÂHˆö_Kû;2;¾ÖÄ=�¬©8uýnÓp4b@/0�Òæ$Ä$%Ü8´tÉ1éðwº[óûÏ€’È$®R'w™³GÕR'w‰ƒ+?°ñàÁ7+�ƒÜ›l™‚ )ÃÍ[4W ±@·A{[²I·+¬&³¬%iCpùé•ÿepZÎd¸q¬Ï=¢Y·Œ‘�”ŒêG�Õ'<OŠâ˜#M+:¸ èÆEGÔxmÍóCQ «”R>¾‰ô &É6­til1�ž�C¹Ôƒ”3\aþ3é|hèõžd€³s¦&¦ðÉdMÅ©Ûw›^\ÊȦ_<åÃñs¶å…Îø~Œ?Í÷I­¨f=!Í2^ \tZ³mç=NÒÍ.Ä|^¡l%†(ýµ,ªë�Sª!º±ßƒaîê#PÇÉâ¨fCź£ä¿õ™,p‰ú+±ô¾¸S0éÒN8t4¥<«�)igñWÉ£§ÐY]ÙÓ=÷�J¬HgÒÙ‡trCtÝdMÅ1Þt§ÇFîÛ$ž@}2�~ïüvü¾'âÁƒæ={÷*ס7¾uªê´2N9e(yMH\a2«î”Q3G¾V©>µ›(yUÚ|.êæf 6^�5¦oWÿÓFÖû3Aì纬\ý©¿¨!¯‰;D”‰`ØÈ}L—)TúC>ר¦`Ø óÕ‚OD½g *6v‹úÀÇ]úAMOuŸ'“p\úYÍÆß i]v šÒYM–ô$]„HAXYZ––•ñ”‘�‡€qÅÍÝÿõ#ϼBM¸úùˆõq él¸? ÀÆm�¾øF›/¾H°é Éz‹Öþö<_l¤>°P $¤Œ¤Ôº߻Òð‘·WÌ@€øéH&yûÜ9;Ôáæ}l›~ð—ß¿þ^úÇâÁN¨ìÒò¯–E·™4wMYÞ…õK—Ngm7Oï$­ƒ,a*¼¾d› ¸ò¤³»Ö¯ßu)]K„Tº}ïékZ©+Þc³Žÿ´ðŒ]‡Àé tTÐð)£\DeqGÿücá·rï?>ð#á¹ØG}sÛêãÊΣ¾ãˆïŸÜ°~ùlÒuë—íE&rTc‡VreåW?ßÐWËV«5¤ß›ÿ›ÑËX»5À† ãâ¦P(4µÈ+ �Ñ«Vèuz ¾÷« $R©2/�·5²F\¿ Ó´�¿':›�¤Äþ€Mýôï+6¿•©:5÷”cºÒKtnåÿMÎÊ+Õ‚ØÎ/ìõÉŸ�’!Sª°:áÐÊå[ÎÅäjiK×ÎãÍîçHÔ¢¸ôýs¿^5«TOY¸‡ œøÅûííåFÎJ¾nÝ»ÞpÉ~øá¡VKwLiC5¹òÆA’ZÚ[{ÿž!?H©ÂfÐxqHÏ›¿ÿˆbþ% ²a�OîìÛg;dÅ´á-h€‚Ô·fí>7`¼oBäÕ²ÀÑã†vp" Às|Ü™ñg£ÒÙŽN—|´ ºów¿}ÖNbR¶æðqÎO/;¾YSÜÍÉeY±&Ònø·_$Î_^T,°ñjVá6æ²÷­?YØöãE\\zþ?û Y»·§´3F ö×\?·,1E ~RÃs±�¤Ãgþ¤h  S01/ún&×Þ‡¨9G¤ÜH„3üoÁÍàÓÅ«gÝªŠ¦,W‚ƒo+?iÃÚ�$Iã¶ÅZ~mÄjÁrœq­œG]вÉýó Jïìß~ÝrÐ;áÎT .÷üo¿\qû`j7¾ºð0íxªG]v�6lbLÀ&_¸TÚ«}éÅsñ± ¬k³í�ߦÍ=¤ ÿêŸg’_[1sU¤ «®¬œ6ÿ`Q‹wæ,Z8óí™ÎP¥¾<åöíb¯7æ.ZºäÛI]‰ÈÕsV_Q›TÅ¥ìúqÙeé€Ù+ÿõ§¯Çö´! výÈºå  s~Zó늹£\’¶Í_sA‰AزCkAêÍÛ…œÑ—q/*MØ28  .ò ’$-Bû:Œ�m÷æ4ÚÖ™ËíÇÎQt|ïÐ6qÌy ‰ˆ IÔ�ïFrYÑ÷Š%-Ûiº¤U» 2+ú^!G:¸8¡ûWþÍ2—/&Ï¢y� €Y–5žÓ1%˘ÒùL²M²-»Ž\¶ë·Ùo¶µ­¹zâòË6Ýröa ºm«•�*óê_Çcå^i%®¥¼ê;é|¸²Â"Fäâj‹jÉу)7$ïøa½rèìIí-ª×]®¬¸Œ"tùeú†=ã‡2RÆQ ›|N3 Ž#ùmulBñ¢QF¬Î¾{ùZŠê¿6€ oØ}2®ôáV�‹c/ž¿“­Á|=àQK_ ¸þ—¦|ƒûâbs¸7úlQÛ„Ñ®?ûA³dn\\±¬Y� €ËÎï<�ß~êªwÃ-€ßÔÜÈ76œ¹35´ù…½Çó›}¸tÚpgZË�\ŽªÖ9K<Ú„¶mFBH°]öÕ‰'.Ç3¼kVÕNX\òvÁ!A~"ÿŠFQV‹~$õîÐÅüåɧ?8�Êv ’¶íÜšZq¥dHk¤‹½‡‚&´5Á’FAQ”’E,YËÎ0ôÒÊNä×&íÒ |ý¸\$`1¦(Cƒo\qa XÚXUNT„6¶ H-,ÆDÀ�©“nÏ\õÑ{—Ã[r7"Ôþ�&ÝfÿÕÍ—1!Ëš‹§—Å`ßTG¼ÚøúÑíg˜®3‡ûR¨š}*æd'fÿßE ¦œ{ÍšÕÛ‘0m·³�!ýðÒ�ñcW‡W°¿šrô`Ê™û{–ì„QËßð ØêÑô:B!‹^óþˆÅœÜ«ÓЉSÞíhß Ì‰¢¨ZŽ7:kdY–÷2Öµ!Ä6Ò“yºsß šÝ{ñŸ_´¯îgïoýøÃ?¨ñÛVŒt|ªBdb·Í™•8jsˆ—´ÉìÑ®ek5ûÙÂ-gJŒÝ[›~CÖÅus'¾=l@ßþÿڛÎêõz@–�z„�w.D–``’nEi:´k’Ž(ŠVÝ�¸µa±º¤HÞ±¯$ maâ½üÛäˆA´QBš¦zhÃ5OP8U^Z.ëÝc@˜3� mòù£×rÙ:Êš ¯/ÙlâÑC÷¬{ íba*ÃÒΟýºvå‚/‡9^ÿaò‚sEø9ÛGwÿà·SWgu�ýí(oº®ƒKþ?k·+_ûxø£Ò®Ó¶ìÞwôÄám?}à—¾cÎìmÉ @BU”ÑŒx/£‰ôåÝ>¸íеìŠÂ1$DÚ¿sãŽm›÷GÜ74Æœ«1�\IA¡�Í=¼vOrµ“j¸ðÔïÛct\IQñËäû«ÜZýý’ÓßðÉ;´ðÛ­ ÆêÁ•'�þcÖG“–_*0Õ˜�Û¯³ÆÎûqÖHçØu_ ›«%Üd›–—±Úàùì-Î.8Ä�=x'Viuîœ&tj{)! íÞnÙŠc×>@Q1ŒïˆÖ €16½f,y; ª/#$¶ tßÈÊŸDQ$`›VE[_´-ôÚ±¿wîúñÃ{>\²tL ‰Lêç’wÌûf1à³YŸX¡ô?|{¡Ò§Ñ©W(½àô¥â^Aׯç{…‡6Íã;MÓR©6éjì_¿�šÈèuq[—Ûk i�ÐhЦtl#¬l¬ ¸¨˜ ôEe`ecÊ‹k³·å‹¶ Ñgí¤ÉËïÚiNÉceIá¨ß­‹ì‹ÂãOŸÉpì6#È4#¤Þ�Þ�­ZгGþ¸ç̇]‡>?ûÒ}3uuv×¹K? ³©sÃ¥‘'#KR#'÷ÛelÅ,ƒ×Ž˜øÝ¾Ù]*2JÊ\C†~9>úß¹ç/e¼åíAÔw³BU„¬–íŒ�Ýö͸F#‘ÌÊÊR.2vÍQçoäZ‡‡9‰Á€dôËb+\TPv®é{7]2¯ÂÉnˆÙ½)Rææª.).­lƒ\Áµ­«~ÛÿobØøv<á“Ñ!6Ôº×Ø»«ßè¶*®Jè8ïÄü·æåi(›bÑØ;øMm­†:ln~Ž[Þ_¾íòU^ÆúéÙ.Ħìæùí‡/ Wú´ y§ÞapéÐŽs7‹]BBŒÎuÒÍÇ“.NÌàœ=ªàf'%H÷Aîõk©uŸ\šR€Ä®í‡N^²þ§×-cö¾k€Zôë“c“¹VCÞïÛ6ÐÛÛ/ÐU^Õ‚�"l`wù­£ÇoD\Nó|¥kÝL’-IË%:>2z߯ˆs�™b¡HL„„@$M Å :¼ÎAÍ­ÔQ7â�ö×ܹÍ:5·AyÉ)J¹›»¥Ñ´b¿VþRUnvWYÊD8QO²/¸ÔÈ+ÙVí;ùÕ¥ÏG!`ƤÝêÝ>êÛ¿ÏZ™:û§ÏÂlŸD9²è>ýÏÍ›6ñÇÜþN´Ïë ×LhûP6¹;ÔEEQÇ™r1rGQ¿›°–2ôï1¤G�q¯¹² _)õjèlkaikk!|i¬À•—"Ÿ‘�^Ú²?…5²ÈS›–†½û^;Kmq±t÷ÖM›±%ÍûÍÙK–Ì~Ã3eóô¯6ÄèÀô^ ýÞ\üçÆ�7þñiÇ “Š<Âߟµ`ÉüÉáTõ˜F˜Íþ·V×esóóÝòþ²m—ÈËX/ ›uîh¹÷ÐŽ§+Zk§¤}ßnâi;ösŽ#¿ò&+z‰®#lùrû¼ïȱ¯µthóRÊœûõi!•w=Üó³-³¿�÷µv 5Qé�ÛŒkJ•8+bÿMÎÛÇAÄäÞ¼_ È´~ÚÃÛþ:°ñ¸mOoK2?»Úvaµôšóø� ³”žÃf¸7Q>AKemÔé12š–‹E·Ïº iR 4>ŸÅqXmÐ+ü[ ¤Š†LD«!Ãü�müi™ëG¯Úd\ó�.ø“�$avØt|íoãzùŠËc­?§öx½�*=ÿcÕ4΄,5‡?0õ|BÙn@Âe1Ñidà›þ4Ô85×ß;¸ù®°™�½„+K»¶ïÏK4)̉xNöár�oø» ÕýŠ’ŠŒ7âxØM¹«¥\jï^µõ‹ÕXPHhåìf+F\æ¹­gÊ=ü]„*ýú¾�gtþtq­ÿ¶KÓ´X,.**²¶¶6.@W-nbŒ†)**’H$4MË &ëòîóE�}_ 6î×ÑÄÛKÜyh77R™u÷JTJN© ‹l<šµëàg#¬É¾s9ê~n©JÇ·ö¼u·ÿ>pß¹ÿkÁ¶pË•EíÛ„MÈÀ¥Ç/7ï÷Z ¸ôÎ�c‰݇t|á.jÓ—–jh…]ûQ£ZÞ¸ûêˆé…Év]µ¸*Üíâ6ˆ/)å@ŽÊ/nÿ;Õgì†ÿ·wßáQTkÀß33Û[²É¦7RI ¤K±€Š‚ bçâçµ\ r½êµ‹�{-׎H)‚ˆÒ0�B �„ÒÛ&ÙÝ™9ß›²)›d“ÝÉû{x€gvΔ3çœyçÌ™™'o f†ÇÔåܽfí�ùÏORt8Öt €L8(´éeÈ"m丫ÇD±qù‡—ì8xš=¬å¤z9Œào?´ºñ­ƒàÒ yˆÃå]ðõé°ñIúÍÛtSg ij$e±3¦øl^+Œ7¸yuªáKW¾¢ûÏçÛÞ{îs#¨½Â&-™8TD}Ï›oê>úô‡÷žý¢F”j ñ‚Õ�Þ*èxQ’г{Ö¬[•_mæ4~‘cÿï©á,Ø]>qÛòGKß]ýþSjE‰B«ŠòkîiäÂn˜—¸þ�cQ ¦]±ï�¨µ3ýº±<㈼(ŠÕ Õ@Ã0„唃}¯žË©5.-o¡ ^|¡aå>]ñs½*dì]/?rƒ ‹»ïÕg™¿Zõä†J‹T’0÷ù‡F°P´å­?vÒÚ™N¡çiû!ÿüÑs¼ëV¿9h]mñé_vüðqq­(× ÷ð[÷ÜØgù#d§Ÿ6ÕÔ|øà¡–» ?úâ~û±)íò]Pb}ŹC6|•_ÅKuþCÆ<ðúýó¹àZ€eY__ßâââsçÎ5¼Øº…Ö^F™LæããÓߤÍyúq9Kê¨›Š˜KŠJYïq¾¾äØÎ}çµÃ’®§6]HÙ{ì÷#ê®òåLåùyF·Ä ã}e¢™ª”, !„±¶µ€h†LŸ2TÏa$r¶Ð�;WT\OuJ`*-­b}FxöûµÕ5 ôR²^‰ó§}óÜÚ�wõ^¿¹pø=sKRTP[UCÄÜÌ3&ïññMÁkøüPF®0)ªõ9²y¬×Ýä>>íæ´Žà_¹ïpåu×jÎOmˆœÓç#øUW=üß�n-<½oÝg/?ô*÷Ñ3õÝÛ‚K5ä}€ —w~C&õä{žl­Ä,ýö÷¥m×ì5úÎ޾³}ÖÇÝòôû·´Ÿºø³_·¨é¯ü:½³E ]øÎê…U;ËEĬeÌZÖq½Òéµ’YS¼¯ØÖŠÆ=b¨Æ?Ä\SIEÑöœK! #Õ¸qJ×ö€1$ÝóJÒ=m'˃¯~ðõ«l3U7á™õºLÛátÒ‹´W6ɘ§·üÚ¦²Å,]³{©ýüquÏk£îqäx9wƒŸÙ¶÷™nïQÛ#Û¾ ¹ÿ›]M{>û¹f÷Eµ"�F¥RY,Ú¤±N2™¬?°Ìyû°û Š"ÂÀ_,¸H½Føp¦ó™YuþWÍŽ äDJ¢Ç$äo8’[œäëG©»Ÿ�§Th÷¨ a¤J•Òúx/Ÿ`ö�üBSD˜„Ò’2â•hè�¹i¬­¥RA@>âæÙÁ÷nøø·Üô—¯ödH¹RAkk�¢#¯6ië]$#,Û2§M»ä#øÛ­¾©gßK5ä}à —Ç¯Hu®¡(+Çõéß¿û³ê¦•“õWúõ§T÷E\ˆÐ€a}fÀŽV¤Rÿ`_rèB�),Œ+Î+|übmEo1îûzuãS„Tˆ_CÓr* ¢hÿüOEJ•û’ƒyÂÂ¥Kxßþ8ÀQ4ÖÔR™BA˜ ëoýíKÛ †,y2^r… êj�€ Š “n8q¼@Œ b@¸p<µDÄZo7wX:¥rÔÖ»9˜·9ÌÔŽ�5YóôöÉU—zóÐênš~1ÑîuÇ’O[’b$Mï¯i¶Þ~:s¤Å�±òv¼ñÈg8ßøëŸzqá` æBµŠ}CÈç ‚e¹¹¼ïh?9…Bˆ2t¬XÏ–çY©ÀäèÂý‚ؽ9 ¡Eõnƒüý2ëë@!—·‰‹î?©©×ø‰BÁ‰5µõ¤š«Ì ~øëçßPÜ3}ÍþùÓorBnytlgŸ7b‡I7ìúæûèÙaôb¥ÛUS¢í…f:7-¥üöç…€¤¹„#øí ­¶—y½¶~©Ò^Á½N®þ¨ð•��¸óãwb> „��S¶Äop÷kNv–ü‚86HF�jõ:¶¾¼Â$ ÔÛœê)uøIQÊù ‘ïÈÎ.4åWêB‚Uý3 ëëëA¦”Yãkéàµ!%WÈiQ­‘‚ŽÈcî}ýù‡Ÿ¬~ñ OºãÕ‡n�ê´Û•è&-yìÄ¿?þì¹½¼2`ô½Q“í…ŒŒÏ´Å·îsó‡›Ç�\:”»t#øí­¶ŸäR y˜ÃåÉ]ŠÑ"P¨Héßw¿ Q1úŸþð�}S¯™‰­&BííúyËè±ã]·|¬}¨Ëò–‘y:<,Ìů¤å)ßïL¯c‘“ç$€Ë“7ý’Ný‡Å†Ô o¬2iBü$´*mû¦ÿë¯�kº7g;¥ý¯PsêÇm&™Y5kV¤‹‡Õd�938"Ü¡á§åe¥zO¹\ÑÐP߯*¯9õƒÅÏ.þò¥éz‚µk ž•ÒO¥ÀÏ·ÝÎÂÁÓ!ÔŸ5?Çíº®�ˆ(÷ô#tðƒõ®e<g^-?”’yø�¿, Q¹� …ž íцÇú�ÜS`ˆQ÷E^ øòÒßFð#§Ôqë?2"„Pÿmé éƒÏLSMܬ»GÞlâï=‹‚ÔkØÕ×Ç3 * ¼Å"Pp��s‚h6YšnQ›)¤Ý¯Ö…K5Z…Œ‰ •»x•õS�ý“Ü8‚ÙiK(†Œ!Ô�±,ÛM¦¼¹¡ÍC­TäÍæ¶ºŠ¼©Í|¶SÚüÊË+-`)Í8tF;-PJ]<ð^¤¿Óƒ#øQ'Q#†Œ!Ôo1 #¹ébUÎáí'+µÏ�qScÝÀ呯(н‹¡NqŸ™Fèràèz„º2öE/£K6Ý?û¾DÒrWÛÕúà>BWzÈ5”RSMU}U…H)4 ô¶Ž‹g¢ÐºË4:“G�Áx9�F­6ÖÕ©ÕWâ üÛßÅv­:£Q*•:šJïቕ ¨�ÑÅQ#­úkÓšcn7Ü9É•/$K“7nÌ ¸ùÖ$=^'v�=‚P”–’±ñ³¢Ã»D‹Eë£�„ð¬Dê=jÊ�¹wûÄ gp4Bý…N§=s6ÛC¯ï¿ß¹vR )Šåþ~~}³:?ÿ€“'’1ÛQóópJÈèJ´,yóú]£'.šäÊÚ(î_·6õÆknMÒc±hÏ\[•¶úýú¿ö ’ЬBXB@ D¤‚õen?Uotúm…›fBý¤W€ã<==róò …J©”Éd„†aˆ�•!Ö»+¢(RJ­·ìM&“Ñh4ÖÕiµ�¦�ºcƒaáDW^{⼈í↿/x÷„¥ítɨeë—bF_rõÕUiG‚Uœšëà áqãáá‰{^XZ_]åÚ�Q,9üùÊU›�^¨×„Œ½ùï�,ˆs#@�Y[ÿûá·¿¥5(¼£'ÝöÐßfF¨H÷ÒÚ�]É<=è™÷Ó>yúEÕÿ޸їTïçÉ·OÅ/]±*^]¼ï³•+— ž_/£êFZÆÞtg¥EèŠ'á8_oÌ„Po¢F'Þ˜–"â <û‡”äxGÆ' ±Š³hñΗnÿ©¸¸žóˆ{ËC�Þ£&–ä·nyüÌ­_8ߟ ×=tÇwao¬},¾æÐç+¿üídNA•Yê1þ‘ÿþs†òì–÷ßùfOúʼn[ÀU¼¾üZÌy»?yïóÇóëd¾ÑáÒÚt‘(æmZñôgG ªÌœ.hø¬¿ýãî$ÓpðåyÏž¹éÓO‡2 fqï½[bW~÷HüäC)e–•J´£§7œK³”ä«ÒzÜð€bøÕ)Ÿ¼BÒ± ëÚ¾Ë_?nÌôœýÞ7 • •ž¿ýÙõ›3g>žuøHõ�ÛîŸ3Ê—�È�2{à÷Ô|îào–�¶{ 2cÿ�ÿ»–?«ák˜ =ä|õÊÛ=ïZþ~’'-Ï­õò`€ÿ|ÿ‰—~Q͸﹇C¸’Ôm_§5�Šè‡Ý°ä¹ùžjZš¼æÝO_ZñÝŠ‰ªa£â¤¿¦œ([j`€V¦¥æÊ†Ý90…–eu£¯ñ^ôL]VJÉ·¯ ƯEÏ©†Ž9±îcEú^™R^\_OÀ…·eÅ‚SiÊa#"­‡I›Ãî<•V&Fzûû’Ý*˜3'@"–¤¥ë¢cYà© Öçtì¥å•v–é׋´Q^ØÏˆBµ ûj< ÑFŽ»zL ç‘xÉŽƒ§ùÑ1�ͯM3¼±·‡O®¨MbÂð˜9À`ë´z߯%Q÷®|â&?â4g¶LmJ® 5.k²wß³ýÔyabŒjÄUqÜÊVξ^OLe’˜%ÃäãH†á8®V õ°«`Îÿ±îyD|îþ�ôØ�\*PÊq—Ž…+Ê*ÁÍý)“yxjá|Ye"g?¶ôÄ3Üw×ÁIÃÄäusÿµb¬ L\þýDë¼¼�´‚�é ëyZ ^Ø4 „B¶ }ýJFÆ'À‡TUU;°ZnØ�·�¨Ýð袇_ûæ·¬Jë§ „¼³çy¯˜¡ÞuY þøtÅßî˜;óšëozrcž`6›€¸�™2œýkßáJ üÙã© ‘£ÊÀã$Æ“ŽþF]e¹&ée䈲3i%;¿ÕžHd„“I$W?=I;îÅ�Ź…Ð)3ÇúI(Ó�½wûÑ‹B7ÓÚ�!„b¬§Í¾Œ ˲@E @Ë€Àwã]­’Л^ÿö«—„—l}åÞ;þþu† ¬Ñ�ØÁ¶‹Ùßýóù #oöÍUï¿úà$Ÿ¦¨’èÆL-IÞ½¿‚Ï;v¬dÐèÑæ$! ‘Ht*•â쑌ï?i¨®¨--Ê\ýŽ®¾L"•N œ”“H\ÚËȸ{¸CEyEÓ·(Ìå¥ÕàîᵬzígÏ»_ùÇüÙ {볕s¹_Þùä`]wÒ²v¦'¥E!„PSÈØçQcÓÊÝônP”›oîVÈ£9ç¡7?{ë·ô�[OZ€ Š “^pÀŒYcYN"W+Ñ(•’Ó‡Oýøå�÷Vøñ2¹‚‘Ê© X‰D¦`]ùoÆ/&Ú½.5ù´õ�Õÿuô”àíAгsj5�AnÖ£¡ˆˆ¬2^,¬»‘–³3�qRZ„Bh€£­BÆK¯�RûÛßX·çÏää£ÉÙUvâV1ÿÀ[þ8‘ž•™z,å\ huZˆfÜm7…ä~³üù/vN9‘ü牼úÆô’àÐ8¹ùËGÒNge�)4Ú,WÃu~ék_Û�2qBÐÀ $*µ.2¾Î"„Ñ(äâ‰ßù V"£¬Dd8Ø:‹ 'Ui]¹±³ç.ùñ­·7LÞ¿þõ÷1%Ü<+’eü¼Ëv|ôñÎYÙ§“·~ðÙžºàáñRµ÷•[®»ãÝ£uöÓÚ›N{‘[„B¨�Kû´0~ÛóÏT½ýÙW/þZ#J5¾ÑÃë;8aóg÷¬Y·*¿ÚÌiü"Ç“í‰HôIDATþßS ÂY�Eßóæ›º�>ýá½g¿¨¥ZC@ü„`5`"n[þh黫ßjC­(QhõAQ~Í=�\Ø ó׿q,jÁ´ÀÔ�$Qkf.*úucyÆ1yQ«ªÀú)–SNô½z.§Ö¸´¼….xñ…†•ÿùtÅÏõª�±w½üÈ ~ €,î¾WŸe>üjÕ“*-R}HÂÜçZÁBЖ·þØIkg:…ž§E!„Pd±ƒã¶B!„†Œ!„BCF„B!ä ÍOËr˜!„B¨CR–uÎÓD£”Ú¾À!„Bõ1Bˆs?Ìõ8¸ãy¾¦¶¶¦º¦ÁdQ­Á¢Ó7!„B9Ä6*cd2™F­V«UR©´'!#@O¾.}±¸¸ªªZ­Ri´Zƒ\Î�Vð8!„B]ò¨š:õDQ4›ÍƺºòŠ …BáïçÛÍ…˜�#Dl¾1íPÔX___QQ9($„ãp($B!„ÐåÈڋDz�Ÿb–J¥jµZÅ윜ššZ�ƱO¾µ<1Ýý¨±ªºZ«Õb¼ˆB!teaÆÝÍ­ªººûI(íÙKvÌ&³J©ÄLG!„ºâ(U*³Ùìp¬Ùƒ5 ¢hG‰B!„®,,ËŠ¢ØíÙIÏCFQ›ï‹#„B¡+Ã0„Œ´1jìQ/£ `/#Bè²@kó’;r¶Úá7?к‹ÇÒ ê©ÓWÔãMB¡¾  Á‘¬!#iîrì&ìeD]6!£©"?·¤ÖâxÈX[�~*¯²ÓÑ@«Îœ*b\qZViD¼á2¾eAtƒ§ÌŽ-f^ì»%´J„ÁÆ!téq`5"„�‹ñ…§OWû$Î Ìþ)93/ÚÒøá*Z—wl_Z~yµÑ$€Lm?" '�ÿd³Ü‚ëöVD_{]¼Ž­úkóÏg¼'ÏNòj¾›"VŸO9”š]TkáÔ=g¢M¿Ðê¬ßöÏ7š"ÕyGŒ  ´üÄ›Ïù]]‚'ãЊZÂc›%PcîÑ}§òËk�f$jŸˆÈ ¶ølNQ¹Q�êü¢ÆŒŠñ–Bû•ŠÅGÖ¯9lÐøÛDžЊ¬ÃGO�/7òD¦ñO˜>6L�í7B¨¯BFŒB}¥!/#—„O ÖëeaÇÏ8o ŽPY[suqQ�û¨‰WX¡¦0íhÊ®róŒë†êÙNjiͼý¸sEÅõT§$¦ÒÒ*Ög„M¬g.<²ó`Ž,|äÔP7ÖX”öWióТôŽ9e¸JF�ùÇÛ›¢¿yl�€ai×É×åŠlÙ.ÁRSrÑä‘4y¢�5§:t4Ùcðˆ1õÒ†Ü#‡Žï=i˜;Ü‹m·RF{í„ÁjÀÊ8Z™rèÈÕð©×*i}EƒT‰-7B¨oØ4r8X!äj´æ|ÖEx¤'Yß!aªâ³g+šnÙDêæãååeð �Ÿ:#FS–™q�ïâ§Ÿ`¶$¿Ð ”–”/_c«fe×FLOŠ ô4ø… ³v$6¥uóõ3èµZ¿èQƒÝù²²êNn$w±"»"ÑyyzxzøÇŒˆ60ŒG`D�—§wððÄA²ºÒ’Ú›aN¦T*UJ¥JÆ5›Í wóòÒitn^ƒ|tøò „P߇Œ!äbbåÙœ2}x¨(x„F¸WeŸ)³}œ˜Š¢(Š‚À Z_?¥¥¼¼%vëä'ëïÒ€`_Rœw¡@¬¸XÂ|}d-«®­¨¦jƒ§”çQž·‰Ï„šóG÷l[¿ñ»¯Ö®Ý–^%Šbg�8w¾¢®‚æÆ½�(T`©¯3 ¢( ¼T¡‹ÅlçÊ�6` ÑÃ|Mi;6ü²ÿø¹R#�—ú¡¾‚߉Fõ¡,ûL_}tãÿŽ6O#Æœ¢áÿöm‘(RbûZ‡®¢R¿° voNAC¨GQA½Û ?…ͯ„P*t0 ‡VžÜÿG9nü8/%Tdü¾+·‹°¯Óu!¤ùæaC:ÿÚl,ÑE̸-  #=õÄ¡m'Ýã§Oê‰ïÌÀ‰”’n¼§³9a9Lf³Mœ+ f�yE%Έ 9òýö̬’(OŒB.CmCF„ê–‚³¹fïøpOuË BuØ ¯“Égó ’€X—›š¦ñPBõ¹©åÚÈ‘A\cƒeç'"“ËÀX˜S¢ñÓJ(x ¬Ù–þG­Ù-ê*M«ÕK‚¢‡ºïLݽŸ&„{©¾¤ªéµÜŒ›‡R3S2%ÁnrR_cêè:ºû+²�SÓ»,ctzw6=û¯Óú!n´Ö$ ’Ÿ¹Huî*N4•›@¦Pàó/¡>‰¹öQd·SŠoóF9¢!ÿ\®à5Ê_FE±¥½‘ò<úgNnmH†5�ܪV�êü£¦\g MŸ'°óQ‡&Äåï?•r&Ðg¸  �õ;¹§À¢nÓl}ÜÌé²CÇÒïK5‰ŒL¥ó ÒÉq�?Öxèøá½éfÊHdJ7OM»±‰Ý_‘íœ ²Þeš,hä„’½‡S÷î ­_¼W€{å…´Ôä“HdjÏ�Ñbݱp!„�©c÷˜)¹S6FJ� >úÛJˆŠÖy²ÌÓYÁAA‰s!Ôm„•Ê$À›Ì­ŸÙ œTÆo2[*Ó¶oÊ ¸áÆ‘>JE�·ð Uv ŒD"a‰h6YDZrâ§_jæ� ”´k ÃqËZß`c»†•p\ótJ…Æ7is2)Û´äî¯ÈfN°YB«¥+•KÀb2 '“u<a%R K€ ¼Ù"²R ×´�oáÇ!„#Šâ™³g£†Dv>[ú©TØ6!KKztcšeYǾKˆB@sCÏ!SÞÜÀ·šËÔÀÛ[@G?QÑb6Yxcy¥,¥‡ÎHb§Ji÷N¨È[Ì|Ÿl‹Yh?]ämÖØý5Í `³„VKƒVÙAíÎF‹ÉvËx³‰Ç„êUÈH)Ë:<º'!#Ã0‚ `Ž#„.§&°*çðö“ŒÚgȸ©±nà²ëÚ>[B¹¨E†qø5‹= ±—!ädÄ=vÎý Í7d»ùSKÃdˆŸ}_"* ¼Å"¸înmŸ­!„\C„> 5jµ±®N­Vc¦#„œxÝËÛ»%ÝÙOÍãêíD¡+@�Ñ(•J¾^îÁšt:muu5Ïc›‰B!tE]�‹byE…N«u4aOz9ŽóôôÈÍËS(*¥R&“B†!6ð� „B]*Ö×舢H)µŽ'4™LF£ÑXW§Õj4‡ï÷ðUÞž:�®´´¬ªºZžç­Û„G!„Bèr`°ØØ“GˆL&ÓjÔ^^†ž½'±ç_‘pœ¯�7„B¡þ€bÇ B!„ê"dÄ,@!„BÝ ©ƒß˜F!„Bým26ã$KG_ÓB!„B„…·H$œmØÈ´‰5Zma~>F�!„B6^,ÌÏWktÍQ#¥ÀÙÞ‘ÖéܤRéùì3 ¾©!„BhÀ‘H8µFg6›u:}óDk/ccÔhðòVÈåµ5U/"„B L _[S¥�Ë=½¼¿ÏÒü^F „ƒ·�ÁÛ3 !„B ¶cñ™i„B!ÔAÔˆïeD!„B]À�!„Bu2âÝh„B!ÔEÈøé„B!ÔeȈB!„†Œ!„BCF„B!„!#B!„Â�!„BaÈxÙ¢•§v¬Ûr¢G+B¡¶m9íW!#m(9�’z¡Þá““Pœ¼ýçùõxVë·e½>ç—�^øû}wÝ~Çâg~Ì·än^ñ·Çþ—RGû²4òYëžþÛã«ÓÍ—U�põVaåB¡þ‚ëÕ)É”dËæ‡Nå×­Ï ˜¤™·ÎŽs'—dW„ì-ï½wîÚW‡(𸺖˜ÿãŠgyìƒ{c› �pný3+ö }zåÂ(îrÛ\þì¦UߤùÍ[²lˆŽ•zx³fw__Gú²42Jwo__½’¹¬jDßoB¡+6d$´Goò¦uë^yë§"}â”Yw‡ä|å…¬4£™ÅëÛÜþ-HG=ôßG’¤v“› møæû}éd†° ©‘rXœ¢5œûý›/7É.3±Zïá·<ñàO»‡’VžøþËŸÉ+©±pºÄ;ÿõÐx·–οöGy°ÄñÒe6™Å‹[ÿµh+paó_ùgÒ‰?±%àñwîÊ­Jßþݺ])9e ×ù„O^¸tF@æç�¼qîÚWŸ¿Þ›Ð’Ÿ_xrkÐoßUÛnkµE»ßkCjI-Ïh|c&Í¿û¦8}c—]ëÒ8êâÆåÿÜ»üõù¡lêHKöv”cöÊy›m]×6íU5?ØnUËáŽüÈÛ禽ôÒœ hů¯>ºN÷à»KGrX¹BhilÌþf ùÔï”hÇ,º¾)^´a9³áõ·v�±·þm~\Ø·~ío™Ÿ[qs¨¨ñBFfUà¼ï á.¦lY»ú]Î÷�{ã¤v¦ËM™ëÞx÷ ç¬…�Þ¥¯MÝôÅ×oëõú½q KöÆ7ßÜ.Œœ{ï¼P5_Y£ò²îrý#KÆ{ JO €�äòºÔÕo®: óÒElÅé½›ÎâYÍiļíyÂ}î’çâÜÅÊÂz°{,d5g“Sнç.½+R)Y_­ÍÍâ�rJä»&�"s30 6«øþ�×¶š†Ï½sN¸Ž–Zó¿Y¥âŒ{Ñpû­%ºðÉ –^뮄ŠS[¿ÜðßÕ!oýßHk¸Ö¦4ö®ŽÈ;Ù;y+i· ¤­±ÙªŽ—%=˜–Q9;HOê3Næ�Á‹†ÈL™k°r!„ÐÀ  Ê ê™€°`Iû³ªñØÖ_ ƒfÿûÞé~ @L¤wý…å[·¿î¡QJ"÷ÊBt´¾4õù?Žçðq‘O� <ºmwEìâåsGi@È]%'ûñPæ�qƒ“·ìÌœýï®÷k¹ÎHt>��ÞÖ°ƒÖvœ<6,yÇ¾Š°yËî�áE Ru~ωÓXœ2ÖV×PåÐ!ÑáÁ2�N�E\,0Š€¡ñÑ¡mÇ4Ôup”{\º8�w@`ÛØ Ú¼Š”­;/øÍ|aé¬ €úo'ºÚ¿¶[« Šaý_ˆ*ïðs{² „‘áÖze[Aì]i5D´Õ6ØÍÛ¡nCëí·Ý*{õ%*aóùñ¿j¦MÒSæñ !b^ŒÊˆ• !„nÈèÈÔé(‰P˜sÞ¬åÕxwŽõŽŽtßx<§HÚzvÆàm`j«kÛöo6OŠÎçšêK?ùûâO×*ðDZYo)È>gÒ�ˆòê|ऽä|Qn¾ áAðø»¢HEL™sdõ«OåŒ�rõ´‰#ƒµ¬ýcÑIß6ßÑQî}éjUB ²Ï™ô ÃüzÑ f)>¶é»-fTš$*I½ÀDXºLãä½p =}·†4úªDMå�Ÿ~/lÛ§Âú ––g¦—4ÆÂÅôÌ iPˆ�ãÏR³>AlMn‘èå×Ì×Cɰ>A\yfz±Ðjv‰TuÆz±Ë侃‚¥e§NòXzXtô~JKÖÉÓÍwx-y¥U²þ��]‚Dæ=têÂ'_~úZÝÙ�{Nóv�EG¿ÝQvbéÖÛ߇)ËÊ*k×Ñ­uÓÒÒ‚‹]vZ.ä\ ‘SçŽê«fì•FpÝ^ØÍÛζÁ‘åu„²ô}ûöý‘"ÄO¡%X¹Bh ¡¶7¦ëh$Ê„y Ǥÿçëþ}îšÉñÁz¹X[|>«ØëšW�˜9Í÷¥M|*¿y\ÍÛ·~Ó¿ëWö 2ÑŒ¸fòæ×·¼ÿ!{ãÄÁžœ©4¿Ö{¸…&ñºÉ?½úû«`ö„pwÆXbö="ÐwP�dÇÁŸv†_H˪µ c"ì$W%Μ¶å¥Íï¼s¦ ñ䲊LØ)âIôôiÁüðurÃÔXo¶òôÞÍÛ SîHÔ/¦üšN‚<ä|YÚ#¨5jbÿPvvô;:ÊAN+]@´‰S“6¾óã¾’ÏíÅ)‡òˆÆ'!Ñÿ‡Íßý/ˆ¬‚â¼;açèCwîþq¿>)@ÍViKTئ4†Ù¬WåÔ½°—·�nƒË!ò˜‰IÚW6|ËhÆ?¯$ ÁÊ…B£›¨)Dl|›qýè%ÿr�ØôÓï»×¨¬§¬ÊÝ?,~†EiøÍO<.[ýÝæU¯Õ€6(þÆÇo›&éÑv*b<õ˜fÍ÷{¾ygc=(ôA£æ'ŽÈ£æ/û‡f͆]Ÿ¿½ÞÌh}GÝ3ÒÖ »Iº9­;1og“¨#`wVWGÐ]-Ÿv1¿s¶�öxåD"%Œ½}£j¨‰¸6‹Úî qd¹¤7Ùå‚’M\\Έ#Uµµ¬§yåä,¢ÝÛ_ç—¿žl<éy^]9MŠmÏ„ëªííö’ÎÚ~–4¾®X â•sÊ "í`~ꢭqhÕ±ÛpS£ÙÜ�ý¥N/IÝZq}+Ý£å“Î’Ñç'-u“Ø>úL€b} ÚúæEë°E›¿�0 œŒp`•@EB)€OE3Pxˆ”C¬_lÚÚX£šÚÚÝý%®Ë\ÚuÃìÀÐîÌM[8qô”D]—{­I�:ÜX(/'òN2†uùY»ƒ#Ý<¸= ,ì¼öž:ízˆXG\Ý‘ž×2ÒýUPW㎠ð•ÐÄ7Xb¿ö`ùÄñÊîò ÚÍÒâðòÛ�${»ý¤Ã•¦ó)B\[$ˆ#¢]-Ÿ©µ5oÚÑnnqpÓI÷â9Ö~NŠ”2ݺð&®Èÿ®[xÚ«&…Ø�J�¹ý¤[ñd›gW¬ïWdZŠ=†BÚÆ‹¤é Þ�OLS†‚H(KXX ”‚ÔÚãH�ò š)Ï7vFZ“P¦ù1kÒËtÑån¯I�”ƒßÍ¡ŽŽÄ)}ÄUµŒ2¤³UE¤õ"ßþpô¼Ê‘Uø®íèI�8xÕNzPûio.”ÚYêš]pàpêØ:H—+¢½jAí[u^ÔÕ£ïpQGO­ÄõM éM¹º¯‘tu Ä’Æ÷ˆ”°=*@Ž7)à¬;,J‰Ø‹¨±§}]¤“öD²¬ý(ßB¡“€’ô¦ “7Ô Ü]D�ÄÉQ£�:b[ i8Ze§7X´¾OÇz~·v@6‡�\Sbb�)‘C;icC ÂÒ¦¾FD�RDD¡éÎ5éÕ÷÷çèUò&|"ñ,Ó ‹xƒxzÓÒ9ï‡YIRˆÏ‰G º ñ#×e—ß8xfØÈ¤ç‰ÃÄb±ƒåf%C%ž"Ž*ªFùBÖe…ógµRc­{ò†òÚÊ2×i!�E,!2j(£ 1Z5RL¤i?îá�8þ¹dr•Áȱ€*THŽü~wk&'ܤP¼ØöÇ0н 4ë¶ý}lÛÍÀÿ \imµÌ|’^okÑ# o¸¸nkòp¹ >é’!9’Ÿ¦P(ïgôM9`ஹ½µöqúd¨«ä ppŒ){ÝãÝ=�½ý{¦ÕßnEr¥x¥û pHYs.#.#x¥?vtIMEä 8ÓÓ)vtEXtCommentCreated with GIMPW� IDATxÚì�w|TÅÚÇŸ9mûn²é B$€tDñ 6šˆ bGQ¹÷Ú®bÇ^_˽"XAÅ‚ˆ  ¢—¦€(Ò[B %$�¾Ùl=eæýc“°©$$�çûÉvÏž™3óœ™ùÍ3gÎ ù¿v=€` ÿ1�ÏPõ™ŽT~F€À)08¤2Ö¦B y�³ Ü„ØIpvëÀ«e„³Nkj–É›”5~ÒYÝ‚SGYã'3/ ßÜÈ5F]Š|NÊOni~,¤™7��–ÍBõìL+A3.Išy•3Ê,kVrkà'phŒiT;û&ë,š”3´¿$ð�ÆGÖ(9M~Y3â'g\ÞX#§¶P«ÌŠ«¹ñs †d-Ò¤O‚¨gÔ~Öþ@ªŠOÕ N}øJ0B*Ï$x!�3Z'e,Xì R}RýÀ¤ž*Áθ–¶Ä-¬‘rfE¶‰Å¬ž\гnHëO­ ¬E/Áj—­³•œFïGÀ,J„�5¯Ir+²BYãw„43Ñ- ú¬EUŸ�}ª7yìœuŒjg¤YU¬…»8§»"•1P©F›Ø,‘¿´I9mü*«¬”5E¥X3Òvæí'k(Â3kÏëïX4œÂ¦_E î“/ÿ *šÀÂUu-ž1¦©´Yñ“Zv=Õyb¤ZïY¥u G0à*…ŸÆa` Ø)ç> ã•.}µØ³ ™¯áåW»ök Õg­^õOïëÊØYºg¨úgÛ7oÌt-  ¬þŒèAäy­z©i‘+šæQUBί¢©½œPýæŽñ´¼ÖütV÷—µè kv~Oãˆ7ÚªðUO¡ìtWaM¿¹äl­ÙÔ €P0m9Õ?W*xõ¢¾ñ‹–Qý*ϸÞäµ€¯¯© € w*Ïie ·x¤ÖЫÿ+©’#€#•E”`ŒF©~B0B€cDÌgÀƈŠÒÎV¢AA�¶…¬èÊJíE=yUâ8 „cŒ&0Z¥÷Nªætâì:Aàyrž‡#‚ rŽ1HšÙP½²° An˜À3B8Æ„`ÿ>'9T×.œç8UÕdÎá¼AA΄㈠ZtÌoW—€£¤r`Ÿ1€lQá£CÀçWÐZ‚ Òfašš¦‰"¯DDþyòD?‘žå³Àؾ"qœ,«h*A¹�eUøÒˆHZvªgæÓP‹F›Fˆ ‚ HÛB£T¶„°²“ @ Œ%Œèxª¡Þ#‚ ȹÅ/+�Ïï—5�€ÀI§3õ’$¶xXF)“D�1"0Æ(0Æ€1ÆÅ;� çF}.¯G¦’Õb/Ì ú=>¯ÌD‹É„ïÿ"+ª¦•9œ'¦$wމ‰6�àõxNœ8‘½ÿ Ó\¡¡Vžç kâøë“ãzD‡†uPìño;Qöý�¼r�Ö¶Rß(0þrKtà½üÂvBð­<iº†)e'K 21èuÜÙë½yI¿Kûw5ß“ë%î³õ{8[çn={¦˜Nî?¡ˆ"ië1FY£ÇaiDÚ²¢”””§¦¦40,Ì.c€étRDDDZZЦÒ#G�é$¡n¡–¥¤Ä1>¥ÝSýSz†ê#yͬÉfªDŠÐ=Ü|MJ¬FÙGOê$±nXÆXri!(0ʪVãÁùRê**.öÖóÑ›¬büȧžý[è‘ÏgÏý]6[ÎÆ5g²Ó7nâ˜Áú¢ï6|ó'5šþŠº¨:N”:j½ C¤ð¸3×\kXÛEêùF3X^Ñqì]“닾Ûöãv�àwF]}vÖc𷍬ÑaÅ©ð‚€ ÒÊ[JKK�}ûö���ñxüPß?ôØš­`³j%.·¬)£@xQ28Ùãó© 8^o6ÙÍ_)jÔWáv¸d…2N fS¨I¨µ× £jEQy™��dŒ 7Jœê*u¹eªh”1‹‚Ñb²"©yÊÝ>UQ)àECx„IWC=UW©Û%«e”Ç‹‹)Ô,°ŒÊ~ŸZ•ůqD«pä:&"#Ì:BÝ¥e¥^Æ úF¬UûtœòëÝ®r—ìW)ãx�©ÆãõVç¯AÖ#ŒÕg–FÒÏ0ŽãK쫎“Eå:sL¸}}¤u¢( !\§N½^oã=z¯WëÔ¹SÎá#²¬Š¢k:6Þ¬U”�F§eßøËOÇJ«ÃVw¹)ްÀ{ùŒ2ØG�Úí†ÝsîŸè¡ç}o>6Hïß4wʶ¨ Óë¹”7_=X_ÄvÎø"7ö²Ûî¸"9.Ên6rrqζÕ::ôëß-Á'vüüå?7X%žh¥�0|òCû'†p›¾ûê‹­å!–béwþóùÛ3�þýËž{õ§B-ªÿ”;‡&ÅDÙ-N.;ž½ñû¥K¶–ÙBŸÓ�zí�Wf&&D‡˜8Åqlõ›/~_b¬R}ÕUÒgÊ�C“¢Ã­f“޹‹rþX¾èó?ʬÖênÍYüÜßTí¾)ZMœí²Gþ;1IÈ[ùìÓK�k¦žÓÞ¸¿—>÷ÛÙO¿uÿDµ^k˜cÃtäT BÝ¥Š}ÀØ;®ê™c!žâý+?šý]°�®Tøo¬´ÞSKÊÞUŸY¬ÄÝPúÍU×â;ÞüÞ  îûì�Ù!ÔÀ£ê#­�ׯ(šª6eñß.?//°¥¸Çëe}n*û?¿°/çºØÈL›v–»–å>•–øIblX”ùûbðväUÓ÷@8µWJ>‚ÔUýP»˜Ïá:Uõ¦ØParié©Ó4-4µwz'Sܼ9"eà„`ÔçòPShB¿q÷ªùO¼w@3øý±cžü×ÈXAu•ÊÖØ.WÝoýï³s÷µœ1õ¦ûoÍ0Ñ‚õÿ}ãÇ"½¤:CSz¦u20Ùã,gF{‡×NMIúô¥—~-#rûžWôîbÕWQî—LÔSF UU™i~-$VñTTøŒ¶è´áwLc…O-Ì—xVcà/°™œ`6˜MPúóüE=ŸšœrÅ]×nyõØ•“{šÕ#ßÍù&×n%õY#ШTwYʽa×<òÌ õÀdw…_g7±  Á P��ˆ üØzÍ¢@CéÏ«z†Àgq‰K­Ä <ÁV iµ^¾Ýª(~JOÿfc4Ìzäð‘@qV%Ó¢×<. Zà„1]Òžß´ù±Ä8�#/<þDŸ^TvVU'%Ó".ÍW‚«cŒ2F j'=Àé{ÒH¬¡ŽÕoµªü¿øÇÙO|’×}ÚÿÝ7تmïÑ—Ö‰ÃéîLSFfGeçÍØÿþá1‚zð³Íþæ¸vÅß߸³kï+z.زÞ]‡˜pÕÔ!}bøòïÏþl71†ðjie-^9ë‰�èS&<ü̵R¯‘¾æã=•?ýðòd‚Þh"G¾»²ó`ÐKUaœõÄÇC¯ú×ÌÛ3B{öî°àËcUšÉ'M|yÑÄJï;Ù̇¿+ 7—­|oi¯™7¦�zàE¿ÙªùòÝ'Mæ�ºí«­ßLó»t}ƒž9·ÌŸýúÿNÈD2‡ðD™+8UM}Ç5n–ºéÏ9\ù‚=þÝË/,+à8Én“8Àf i�hEAUÕ¦PJ©(‰Õ‹ãi ™ú}Põ"} /<=°ÿÓ¿n`@žØ¿«ê¢²¯ªÎ…Vka½ªÍt@Ô=Š’� �H~í@#3_8Q=¼?�¶ƒA' Žœœ–k´ˆª²ö�:J„�¤›ÿýîÍÕÕ;<"œi•Ž3Ú­_(P×o¸¦\Š0“šµ’3†ÐÃ?­ß?²CsûÄp¶³ è§P“äñtºýíÇ�¸]ëÞ¼ëƒS'ètŽý‡JYFŒ5Ä ZõñLõT”ûÞux)½Í±jÞW=fMN±•C‹>Z^ µÒrš©†LQhÇÎI:B�Û\[hˆ°Ù 0*;ìC9­YêI?ƒSO*ys¨Å,Ô�AZDQÆø@ýã�?ë=©OŸ^@QU5¨rª*Œ)Õ’Ï*Ê´òrÂqÀ@-<®ñZÐu8�pµ*fõ�uº±¶ HS»¬‘_5Me„pRùèŽp€Â0ùØÆvž¬Þcîƒn½@}tê-)¥¡á¦¾7ÝÜ'ûƒ]ªÙT{<UUG*'¯9Ü�?Å&À©ª�åÔT;zdéËO./ æ ¦0“Àõ«¦íÃ$ |DrbÈŠß5fà›Ô!"Œ€Q¸P%®ä´f©›~ @±ŽTÎNÜði­pñx¼f³10°ùåCê=Íé,Žã"G^øí÷‡cC3MRÕ•X±_«[]I«½üÊOèå#Hƒ"Îj¹µ XSö–®)@„@~î1�¥V©ø÷¥«ò|Œ –p;ïQE*µ­â·÷?’oüû {ß3í𓯬óXªŸ¹s‡?bh�N<0ßÉãEŒÔÔQÉb8ôÁýãÞ® Aôz RguòÔí.ãÍVÍÇ÷¼ý®AaÚñm[H×^Ýo¼oØÁ×9CM|ýÖ¨Õ¶å?¦±KæýWüç×bð›�0ªR` —ü¹4xý=vz³ÔI?ð{=*]X|œÎý§Ã+m6Q@ÕGZ%¢ ”–– zMÓ 4x*PxJJËAT.QvTøºÚh•Þü·eÞ'zõLócOôê¹tßÞŒêwbÙVAAªíå3 ÀVãJ>‚œÖ�­gL¬I5‡ú²�߬¿â‘ËÂ{ßþ܇7¹!ìÄwïÍ[×½üôUiã'ßñï5“Y¨Ï5š+Q_ºñ»ß†u¾Ô>`꬞·VøˆA—µàÞÿ;˜wBc�Mý¦¾à~ã_ïí:e¾äôf©“~NâïÎö]ÚÝ2ðÁÙéEçÛøÒ“ËŠ¬z|?i�’/ 'OFGGRz© ,ƒ[PPh4è+%_Ö8ؘÐ1hyžì‘©•hn'¤2úd� åø�@`…µe ™ÄZ’øPååãKzÒ°ä×ѸFƒ±ýj�EÛ÷Ñ+/�=fH×ÄH‹Eó”ä.Ñ$´ )û„+Zõî’ž/ß””|ýM—ýöÆêò@p¹¤°B wÁÎõß|°(Goâ<µÓÕh_¥Þ“ 'é�Rõ‚NÐu=a`(s¬ÿféQ�`ŧëû=6¤ó؉ý~ûϵöúøõ´:‹ºóÃY³ Fß0¨K‡p‹ÑW–ë¤&¡äç÷?��2²oG¥¢\ öÅycSÌRÛÈ:ƒoã‡ïÅÞ>fHZtˆ ŠK‘‡À¼dimðG俿ůÆhšÖ¨‹Ï;vœàùÊ©<<ǹ8iq1� �Iûò±¬êóµŠ2­¢¬*°°¨˜÷ò¢™'u¼|„�Ç£ºjÀ(c»2#p¥jiHad—«Üψd³ˆ¤Ê‡v–yýŒ3ØÌf>è³À¼N—KÑh²8Íã.ój Â+RÙë÷ú5E£ Ïóz“Á(’±  y=e•ÁbeoÊ=s¬/úîÙ'?> A§·˜¾VêÝ«¦æ j�ÄP·Ãå©ÝøÉl2ªn‡8�ÞnI`QIjyÒ€5jCe¯ßãWU�!¼No5Šœ¦¸<~¿J V“‰¯•ò&™E­eLMu¹ý~U£@x^²Øtèâ#­J™ËåŽ�‹ ±5ôªÇqeŽòùùf“)x²¥ÌírßêlôV¿ªW'0¿ÆcxÏa¨(¥#�ïª]ôò¤±q9“9ÜTsŒ K¨ÅRéM}f ·˜õUõŠ7à Á‰¨×‹úÚž2ÔŒ�ÓÂç0UÒc½Å\éfWÆV#T}Ô8¡fbˆÑf1ÖH2‡O]E4V}­ºJ}Ö¨Ýuõz›¾¦cÎ f‹`®ÏbM4Kmcr¼Éb4Õ € ­BÀhÔççç{½¾ðp{`¿²ôW}.((,-u˜LBjgBÀ`ÔÏsÀQÆZÜzÐN ã>à•~tM&}­°Pk`?h\ë ‚´¶ñ…Z“°š"H[…ã8£Ñà,/w8‹ÅhÐ󢚢z<Þ —‹b6é !uë9Çq£á'ÿ«G¤÷fH¾0^€�ßéׯ÷<œd6Iõ†­|¿€<ÕE¦1¶£kì#H«T}ÕUî—§·Œ<šAÚ«\“š1Öø’@‚ ‚´ExžÊ€ÊÅxV¬X‰FAA� �ºð<©ØÇ}A¹`!×ÞAA�‹BõQòAäGÕ4@/AA.ÕGÉGA�‹”|AAÉGAä‚‘||;AAÐËGAäÂ’|ôõAäB…¡—� ‚ �ê£ä#‚ ÈEáæ£ä#‚ ÈEJ>‚ ‚\Ž>J>‚ ‚ —� ‚ J>‚ ‚ (ù‚ ‚ ä#‚ ‚’� ‚ J>‚ ‚ g*ù —×GA�‹ÄËGÕGA�‹BòwÒCA�‹DòA¹à%Ÿ Aä†@ÚîоRXèܸѓ•å=pÐð êphååÔãÎhäm6!$D—”dèœdLK³ FDà�GA.B„ªmÌ×wmÝZ¼x±sõjOö~S\œ©}{kl¬qÈÑfã ^¯ÍçÓ¼^¥¼Üsâ„ç×õùŸ.<�—gLM±1v¬©G¼ý‚ ÈE(ùm­¢¢à£ùEŸ~*9Þ»wÂÐ+BxP ©ôø9AåJ88FˆÀ4‰RÓÂ550Œ!;Ž={ʶïØûÞûRÇŽ“&EM¹�7›± ‚ <äሠLöÂÁ ­9¡jYÙ‰9ï¼÷žÞj�6,¬W/Á`PyÁ#™¼‹Ï`¦:á!¤rÌ‚cŒ1ª*ø½¢×eð¸L²KÐTÕë-ýóϼU«|NgôÝwGO½W¨ê7 ‚ ÈÆû}ÒxBÚ‚—ÏXá'Ÿ{æ£Ýž¼wo�KlQ®èÞ`DÁ$òÉçyŽã9ÂqGT¯òù] úß9¸óÐFcŒj”Rª©”ªšªjšQﲇ;ý>}A~H:tMI)Û½;çÉ' ?ù8iî\]‡X,A� ÒÚ%¿xÉ’ÃMKKKüqb4–ØãÜñ‰‚Ao�DA'¢(TK¾Às<ÇqáHAþ‰«²¢Sc»ßГ1Æ(£”R�jªV)ùŠªÈª*KŠÁp"º�ñøa{íöØcG–.Ý9ø²Äÿ¼vÝuX:A� Lõ[©ä3J�>ùdÑû´¿æšÈ¾}=æÐ²Î\HˆA/‰:QÔ‰¢$ ’ ˆBµäŸ¸�àxNÔ‰Áqjš¦)š¦jª¬ª²¢ÈªâW�(ëSó"bBìN=Ú¶ukÎ]w»6onÿ 8È� ‚\H´Fɧ²|pê}®ŸN¿÷^}TTiToç.’Q'é%I/‰Õ—DA‚•þ´ð<Ïó<P�*²¢úůÈ~Qöɲ(8Lý.NoÔëzo2&áðz½ªªÖŸ« qxÆêïÉ0ÆvïÞ½yófŸÏW}P½Io0ëu&½Þ¤##Ê��ÂÂâ ȹšïàA,1‚ H[vò[Éô=ÆÝs¯5,Ìž”äJ»„tHÔõ:“> úÁƒùN§³¬¬ 8Ž‹�� ÌÀo.Ë–-Û±cüñÇ÷Þ{ou$¼ÀëLzX´�QçÌìk÷z]yy‡¦MëòÃøÚ‚ Òvi^~áÇŸx·o�éÙÓ#÷ê¯3èô�ΨÓÕÔ{p»ÝÕÞ|@û›ËÑ£GzÅÅÅ'Nœþ•çy½I¯3êu½Î ÓºõòĶ�íÙÓ»m{Ñç_`qAAPòϵ¬ìسÏFedð’Î=h¸Î¨— :ɨÓt‚X{B zeÎívûýþfŽ&°ü±ú« v»½Ö9¼ÀëƒNgÐù]Itúè®]�=ý´V^Ž%AAÉ?CNÌyGÐ4[|¼+³·-$�AÒt’¾žùz!!!$ht½´´´Y×ÚºuëÉ“'«¿öïßßh4Ö=MÔ‰:ƒ$t’AÂí®KXããYΟ;K ‚ ‚’&h~˜HE�Úÿ2I'–Ø«Wï~¹Åb©þ*˲Ëåjâµü~ÿÚµk«¿šL¦�6t²¤¯\ìOÒIZß�šÉÖ©SÁÜyZ“/‡ ‚ (ù§(øh>ç÷›#"|=ú f£X\O/q|ƒ ³ÙlÁ³ömÚj9k×® î >\§Ó5t2áˆT•Q¯óõhçýþÂù °Ð ‚ mVòÏß[ùÅŸÃ8^í78°_ޤrñ+SÌq!!!§Æ 4ÍétžöB¥¥¥›7o®þ“™™Ùx�Êý{t¢¨iï~To´ÅÄ~ò A¤-{ùçCõ][·úöe™ìvJWÁb¥Àf9§_ÓÞl6KÒ©n�ÓéT¥ñ ?þø£¦iÕ_¯ºê*ÒÀwÁ/’$J¢`ÐûÓ»™ívÿþýîª ÿ‚ ÒV ä¼ìõ•Ájå9N»¤ŸØ WjíxÛÁ3íc‡£‘“srr8Pý5333!!¡îi?üðCzzºÝnïÑ£GAAAÀѤJÚ»?OˆÞj-^¼‹‚ Ò–ü{Žð<>%ß¹f�ÑlÖtHND^AHÓ–»ÑétÁ“í=�×ë­÷LJið‹y¢(:´Ö9ÙÙÙ#G޼úê«÷íÛÛ·oóÍ7?ô^ß^ 3™LÎÕk°ô ‚ mžãàœ§Ù{Î xBxž×’Ó8�ãžx^¬gÝtéÒeÊ”)™™™·Þzk~~~¥ ‚Õj=Õ‡P”ŠŠŠZa=Ï/¿üRýÕjµöëׯZÔß}÷Ýäää×_½ÖT€Î�;?øàƒ•=£@žx-9Màyžãœ7bÑAAÚŒÒóæå{²²DQY&�’yžçyŽçùzGõ¿øâ‹òòr`Œ}üñÇ)))/¿ür`G›Í<0àp8jm¥³zõêà½sFŒX¿oݺu½zõºçž{jí¶g2™fΜ¹cÇŽ¸¸¸Sã!BUò:§‚,‹¢èÍÊÂÒƒ ‚´4�j÷vN³ IDAT”�7É÷8(ò<Õ4ÇñÇóœPb:uêüÕår=ñÄ]ºtY²d !$ø…=JiðýŠŠŠ­[·VMHHHKK;räÈøñ㇠²}ûöàh !“&MÊÎÎ~òÉ' C�‘ž«ü � ‚(ò¼÷n¬‡ ‚´TÆØy|–ï?tH ¶P¢ÓqÇñ„ãêOÌM7Ýôøã�¯®999cÆŒ¹âŠ+:¼¢N°O¿wïÞj§Ÿ2xðà§Ÿ~:==ý«¯¾ªu‰>}úlܸñ“O> vîOI>Çq‰×¼8:øÈ°aömÛ6gΜgžy¦_EEÅÚµk·nÝZkNŒ5êÍ7ßLLL¬=6p°ð›~!{äàƒ<Ï÷¾m@»¾ “tDU)n®ƒ ‚ ä7Fi@Œ©B÷®ØYQP{©|Çñ²Z’¢(>ôÐC7ÝtÓŒ3>øàƒà=u>o6ƒ×K…1Æ#<1ØŒ‚ؼôôèÑcݺuß}÷ÝC=tøðáû5‚pûí·¿øâ‹ááá§�S2J’±ÆV~šª)ånÆ0à™ð‚ HÛâ¼ ì:'¹5�ã8µà ±P�Ö�4×\bcc¿þúëE‹}ñÅíÛ·ùå—õzýÙ'5�6J)u”IЬhš­3J>‚ ÒÖ$Ÿ�§ ÓÒEQ$‡Ф$ªjTÕcMÜ<·Æ�?~üøLª¦jTÕ¨JÉÁlEYQ ©©XtA�¶ÅyØ·@dMãöïÕT­ú¯µ(8m${Ÿ¬iÀ6`A¤MJþ_ïë‹ÆÔŸÏ'åÐTMU5UÑ4¥õI¾¢’§©š”“íóùL]º8}Ai;°óëå€õòË+ÊËy·“: )ªª¨ª¢Ö])ïü¢*ª*«š¢ÒùBq�Ëé´½K‚ Ò½üó§°ãÆÉ^¯,Ëâ¶ßUYUU•UV[‘Þ˪*+ª¢¨²Êo٤Ȳßã 7Ë ‚ Òæýóéå›zô0¤¥:KJôY»·[õ+Š_Qj®|w~QdE‘Õ¯*~¿a÷VgI‰!5Å”‘�EAiƒ^þy%ü¦‰Ž'ˆ×#nù= ¯­GõUYU|²âWYvl!åe'NDL¾ ‚ Ò–%ÿ< ïGÝ>ÌæÒ¼<Ó–�ŠÇ§øÅ/Ë>ùŒWâk1È>Yö+ŠOQ|²aóG^X,Q·ÝŠ…AA/¿Ùðfsô=÷>̹+Ä-›dŸ\õç?¿ óûü•)ñËÂŽ-BiQQNNôÔ{qu}A%ÿ ‰žz/1› ²²¬[7ª%¥²W–½~¿W>�Ãûª¬’!{eÅá´ü¹¾ + ¬Ö˜{îÁƒ ‚ äŸ!BHHü³ÏegËe¥–�«ý>¿ß+û½~¿×^Væ¡ \ÝïõË>¿é·µZqaÑþý /<Ï[­XbA”ü3'rÒͦ>}ŽnØ`Ì;,íÚ.{ý~�ßïñùܾ³_x¿yzO©Ïíó{|~�ÏïõóÙ{͇³¯_oîß/âÆ±¸ røsþ·øçCî¿b¦+ýcákÿý9�^ì6—ó~[²b·‹aék=’„tšûŽOQŽoÚdßýÍÏó{|>÷_­ú½÷y|>·Ïïñk……á[7äýþ»OQ:Í™g½ø?‚ ­æ+Ú¿m×q/;7Áåœoß]¸)ÏÛpK¢Xô¯©/Ü'·@^ÜÇ÷ì9\âgý]PNn_üÞ¢�}€ó¸“^-ô;&¾õæÁÛ¦˜ãã#�« .é'á‘eŒé�z^䛕§Ìýï¾3¯šqMŸ[𱾦j~�? ÷>�_.+�úmUYvÖÉÝ»;ü±®}{,+ÈE‡²mÎ}ÿ·Þ«0ý�i½Du×ûÎ^].öy`îô~Ò…–_-gù[oùÛ+]ÛZ>8+ݰøgG�ÛG§{šyß‚}uÖ3ïz}bhTLŒÝȵ!£±òU³¦°+xê•ÐiÂËÏ]SO.XÉÊÿYÞßzär+9wAêpõ„Ë~ù÷âU#2®‰ã.ú:-´žžOØõ×»¦ý™3ç�4«5J¿úä¥#€1`”1ÊtF�¨›Oyž£è@Á±-Gš.ùЬÈ¿/ð4Áãó—WDmZí?¸?gåÊè°_3 AΚÿëÿöYþ«§•ƒÞ“�÷0-÷§¹ sºÜz÷�Ì1–v¡ÓŸÞ…$mô£ãºV7ÐúˆðúÅ•XÌ»ñœ £êR¯ÿÄš5þ6)E¸ØË¡­GõÛ¿ð‚\P˜ýÍ7]ŒÆI:Ùs ³3J)¥TÓ4U'$ŽkÉŽ£Löùý�×<~ŸÇ§”WDoùU=˜µoñâбcÛ?û,¶VR¯?U²í›_­Û“W¡é,aq}nþû¤K¬4Çîï¿X¼jë‡fŒLî3ê¦ ƒô€žÜôÅWÿÛyèX¡ÃK%küðfô;þá§k�()wydbŒèÔ{äĉC:øw/ú÷Ç¿æ9}T4Ç$÷uÓøKãu å®zášÇ K]^*Ù;ö¼¬WȱMvåV€%6cØÍ·_›ðHóì[<ë??•Æ];ý‘k:Õ3N¡øìŸ7RåH†Z¼mÙçßlØ›[F­{Žš4iX¢‘0ß‘µŸ.øvsN‰Ÿ·F]2þ‘û‡“zƒW)~ÁÖ­yÖî“E°·Oµ¨üòÂ:¦¦%1iî’'žÙ�9cö„Dž•þñÉ»K·ç”¹d0D¦¾ª·˜õ˦ÝGËdSt÷·Ý1*ÙÈi½) nå<û½4{]Èħ¦�áË6öÞ²­ÇN”T(Ä™ÔóÊqã‡'[0ÇŽ¯|óûÁÜ¢ E°õºõ¹…� QŠ?>ywéöã…e~Ð…&\rõä[F$U^ˆ3EwNIÖ]Ó¹yî“s÷{üù›St æ}ÿÊs+l·ÏœÖ¯Á¼ŸË»ݳg»%ëþ<2!%éb×üÊü·Õ'$iÎÛYÇžO?M�81Ž#'2ûyÃÂ)¥šF5UÓUÔK’N‚–è*~¥òå{o¥êÓ’Ò¸]›<{wí]¸Ð|ùå�þû|„� õw—ËÖøßeÛü¼92.Zç).UE#ðíûòåW¿ÏSEK¸]ç<±û§wg;Å™ô!Ú‰­kþØëAoµê|nÎ`ƒâÕ[÷ö‚d°YônÇɽ«>|�D̾½«€ç¼Å¥ªd Óû¥¹;~z·Dûâ¸DVœýçž/HF›‰ºŠ÷ÿºx?^g6pî²£|õ_>vö´ÞfÒ`2,'wlÎ)÷jî?÷”ŒìTÏØ³Ðaäô{… ÆpÀŸ½èÕ7 ¿fòß§Ø]»–ÍÿäõÏ"gß™Qôû v„޾÷©n¡ÔqÂf#õ¯ÆäÐqÒñªöMWæ>ž•]žpãƒwu\9?úåüÏ; 7aÚx]ù¶¥ó¿šûMçÙ“S…†RØ­J~™’¿zÎ~æ®zô¾ËcêÊݳ¯,nÌ}S:Jþ¢=«¾YøÊ1÷33nh/«8´u[aÔèû¦¤57c%uÓ?îþ;:¾‚mË¿\ø¦óê© Õvç{MœÜgÆœ�–öynŒyÍ‚%'3︿ohS[Ó¾ \dR'ÓÒœCå,)ì"oÐ[]—‡ˆbêg N½oï'Ÿ$�“À“¢¸$w‡Î½WU”UE§ˆ:Q”DÂ�ÉícŒ©~E‘UÅ/Ë�õþ¼²ßç—ò�·;¼§è�ßöýµ}ìØNÿýElÙ¤^hYA¡Âˆ”>~Æ?‡Ùy¦ªLVºaéÏùªØùÆþum;¡dÍk�~°sËêÍ¥ý†Wn8M"¯|tÖ¤d^U5�í öȬI�?ÍzlÁžÒ­›ÝÒ5]!mòkïMRÝÎ Ÿsó{Ï-Üu2+ÛÁm•‘ {xÖͱÛç<ú様yûë�VWÏ~äÃ]{wÖzgð '£ý7Ž*ùµ$vè èúÇ E[t||T ea®?¿_]–yÛŒÑ}, Ã”¢ÿXº)ûÖ.’³‚»¦¦'µ×Aû 6Va ³¦„5³A!úèä®i‰<$‡ü±my\¯¡½3€$Ø·áõìý…45–4�Ân™�ë–lþà‹……=¦=1&ù”çOô±éÝ»&ò äéçü~×ߦ^¢à íºvO¯t¼5ÙëWþ  é€ècR3»$ò�žn/Þõìúí‡Õn©òŸs¦Ü<§2vÛå�¿uG†`í}óäÞO¾óÁNÓöün·Oíڌ溅ïn‡E%„]än~kÌ>Ťwç�ŠÌ~{ŽóèÑÎãÆUøÜÅíST‹I•UQ§Š:QÔ ‚$ ¢À‹¼ 𤠣ýŒ2MÕ[ô¶ÈSüŠìWŸ¬¹=öcûC rs–/Ï]·.úÁÚ?û,ú÷Ò|»nÝ£ÈÏÛõÑ?ÿ±¾Ï�«F�è/¨Gæ(Œ±_æéßcŒž_ök¾&G÷N¿¶Öô=>¦c‚¸ò·ï~Jº"ž•8­=úwîyÕåßÎ^þŸ·ùë.KüÅy®¨Á—vÖn[µ�µKÓ«%{�»Ál1®npsUƒ¢ïØ)Ž­>tLíŸÜ¢�.±ÔŸÂêWÚùˆ�w?X0óÅ…s–'θ¾ƒ@K·®XÝ¿s8äoüf鱈!»Ï.´"?kß>ñ”G$FŸüê“Mæ‘Oÿ­CmÒØ4ÝY&BÍ^:kæÒSºÒþú»/Ù¶.{äêö"Ä»ùÊuÏ/ùzkŸ»{žö&¶ü]0nÙ’kë~sG«4ù{x&¦1úRΆ֟\Íå*œ¿ èÓO¼YÙº��ðŒŒÐ´4{jªd³©ït /R^Ð8ðTã¨&jª^õ T•ËËK³²Êöí+ÞµËïpÒR#&MŽºíVÜA�s+]5ûñŦ;_½¿�ù<:›4wÉŒªWÿ/ËËY?>{ÿe/<ÝE½úÞÜ^]ø çJmcÀƒ7›c¦Ý3í~÷ŽÅ‹—­^sü½÷c’ÕjŠŽ6ÅĈ‹ × F#x=ÕçS**<'OºNœ��Nà8czzè-“ÃÇ�3ed`+„ È_å^Ù�¹â§¿úz_Æ-éaþ«PŽýðÅ­ÿCÃbqµ]h«¦nÝLݺÁ  ;7nôfey÷(ËÉQŽÑ**¨ËœÙÌ[,bX˜.33bìCjªmÀ!, ï:‚ =RÒõwM€C¢†¦ø+‡5¸°.7ÜqU7ö²‚öÙK9ëÑ‚ ráØÇ¡A¹(œ|”|A¹(àZù z‚ ‚´ŒäW.Ùˆ ‚ ÈîåUAA.xÉGÅGA� ,ù‚ ‚\ت�’� ‚ (ù‚ ‚’� ‚ J>‚ ‚ (ù‚ ‚ ä#‚ ‚’� ‚ J>‚ ‚ (ù‚ ‚ ä#‚ ÈÅ ¨ÜIAA�‹ÁËGÕGA� ¡)' ¯»ÜáðzÜ”1Fià_ÆÎ¼·P–R÷`i(lðñæFH8Ž«ú×`4ÙBBŒ ì0Ì(!ø(䯆1 hy´-Zì°š®µK~qa�ËU«Ó È" èãW"@ 3Ãc~Ÿ·¼ÜQp"ßl¶„GF1Æ.¸·•›hy´-Z찚)’ïq{JKKº]Ò›çù‹Á(„R�WQÍktLÜŽ­›�&‹^¯ÃrsÞŠ*‚¶E‹¡õ�sêåW8±qñ<ÏŸÍ~[‡çùظø §CÒEpÀc¡ù‹¡ŒZm‹»¬‡¦kÕ’ï÷ûcâÚ_ÕB+Ì¥¹YÌYÂ4íBðïyžØÂ¹øT>¢]íŽ)cV›­´¤‹ ‚ Ò¦%Ÿ42Ú¢Q W×Ã×rvhy‡ø„4®Cw"\½6¦jà*Ѳ·°ò¾S·:=N££8,u>n šm‹Cë!-çå7¨úT£Ï×úU+ÊÓò ]/%| ø…p‰ÀAHo Uw¯'¶0.<®†™xžj”ⓨóšm‹Cë!-×ø- TŒÕø£Çöññ]€joÞ-Ý´hî;ëNj-xæYÿ'pñéêÑ}µ� Tk�âÊ{V.Z¾ÃÁšõÓ_Ô/ÙüÅ?X{‚žöà_�°æ÷*[C²ÛD"ΨB‹ýµÖCγäWÞ†úßœÐ(å8¾–0²òbb±Ÿ‰¢*?›ñПgÉŒ�V~pë¶}E~vÚPÁgÇp¥ÞÂý;v÷4rQÎbgI탯QZæ¡nýáÇß�yYã?©ýkêà ÷ÉÀ|Eû·í:$ø×–ì�—çlÝ’]äg <ƒë6ž‘&¶¬ù–¯7/gù°yµíé#=M‰eÞÃ?Ï{þÁ»¦Ü<é¶'–æ)Ǿ}zê?>Øæa-z•s¥YçÂbõ^¨E¬ÔÊLúטi¡)�¯Z?2ª1λqÞ3ÿý£\¦À KxlçôÆéÝèklœ!4*:6Ô@‚úÊMé4Ÿ:³f MëÕÑŽ,}{Î᫞ψ34x>Ï3MeÍòõ¯?2oW‡[_ý×°ð³|÷”3†FÅÄØ�h9ËßzëÈß^éÚÎPϯiÿ°ù×m<#gé0צwŸ»©\¡À :³=®S·#¯–z¦“KXÉÊÿ¹`ŸZû¸˜y×ëÏ­Í[�mËWÍúûgÞ‘�=6:ÙXUš•msî{«lükO ·7VÀOSbÕCËæ|º7vܽ�¥Úx),Š—C£cbÂLBó*Íùª�7þ¼ÍË¿]¹iÏá M´FwìÒoÔ�×w m~{ÐBVjm&E/¿µH~£³úŽh® —ÖiÔScÓÕë(8¼õ×g?³aè=¿ë’ÐË{մǯ:«–±ù1œA�ÊÑüºÅµ‘KóÖþ´SÑg¯üéàe;‹g'qç?=üÌ~=‡’ßüë¶DR6»ævºiÒõ�OÈÔi^ÇÉì_¿ûâå'žykæ™- @¬½'?ïaZîOsæt¹õî!1˜c,íBÏ©Í[�m€y-{óÝÈgÉ·\îXIvV‰½ïÝWõì\Õú ºïéAçdž-j1æÉZôòkß�´÷zÍíIzÕqüÀ^·|F¶;wV:¯&e¨ù­_òëÞ$VõgŽJINÒ@zÆÀA2æÎšóÑg©‰S/ aùkç½²do¡[åÍÑ]/sÏõ]í=þÕ³/ý’ñèã:ð§\wÿ–÷Ÿ}lè«ÏŽJà€[6óÑ_’Ÿš5¡‹PÛɯ+ÛôÙüÅ;Ž”¹ý �J8²§°wýŸ»Ž•ÉÆèWN¼çoIR÷¢ZöOŒýÄ~Sßx¤=üË¢–o9Xê,Q½Æ>øÐ¥a¬�¢Iµ†G¥ü{Zu2mì#—ü>kñÊm×&õ1W÷Æå›úõ¯û |ºˆN ’›�2zC?ÑÜ%3žÙ�9cö„D>0¾öÙ?oþ ¤>Ì�Þ§ Æ¯Ô±ë»…‹Vm?æ$¶„nÃ&L•Ê+ýã“w—n?^XVá]hÂ%WO¾eD’‘=±ú?¯-ÞUäR9KL—!nÓÍÞ”n|pª*#Ï-(sÉ`ˆL|Uo1ë—M»�–ɦèî#n»cT²™œ.#}鑵Ÿ.øvsN‰Ÿ·F]2þ‘û×3>Ò˜Ù8KLrrg¤e^¯>öüªu»oÊìY#‚úò+o›7ýõ£Ã_œyC<4÷›§f¬I}üÿ&§  ò[È ë˜šH7ÐÜ%O43ï o[öù7öæ–QkÇž£&M–h$mÄxv IDATǶbûôèìo-�yjLR=�¨† ^ã%–É~™¬xî– tšðò3ýv¼øÈòv¿qGW¨cÏŠÏ¿üß¶cåšÎÞqĽ��Næ.®-Z/˜ïì,&g/yy~ü˜�ÝбÒZ½ú=�­LL£Vbåû~øbÑÿ¶.ñ�ÞÝ.éòÉ÷�h—ýÑôW�üí•gGFVôãó�®Hxäõ)i®_/øæ÷ƒ¹EŠ`ëuës ²žükLÚÌò†œcH½üFVàÃß0äûg–¯Úì<,ÄÖið仇‡IÙ¾?øæƒ /Mïi Á¡N鸘ڵ³ô{öÞ²‘ v̵ÿÀI)iT'>èœê Á1Pwnö~G˜Üž ºŽüðù’÷% ¿aÌôÑ:ÇŽå|ýáâN/LIæ¡öEùŽWÝÿÀÀPœ)L¤ÇW¼ýÉ.ûuw<ŸBËOzí6ÂÌuÃ]TæÜ²jô{``R'[ï¥oÿï·’ÞÃÍóìZøï9 ƒÆÞwK;¾lÿ/ËUéz#?Õé™u9ýÞAaˆ1¼Öø�rpñì×V’7N�ÐŽÿúÕ—¯¾&?õôØD ˜ûxVvyü¸ûïè ø ¶-ÿrá›BÌ«wvÓ[Òå7Ý÷·P#”íY±`ñÜ…^›ÖÛØ¼Ã@ä 7>xWÁ•óó§_Îÿ¼ÃÐq¦�וo[:ÿ«¹ßtž=9Uh<#4wé» v„޾÷©n¡ÔqÂf#gçp’^"T–k-Qo~ )™)â¦}YŽëãíXÅÁýùbòõ‰B æÝŸ½èÕ7 ¿fòß§Ø]»–ÍÿäõÏ"gßÙÍÐflËÅ ½o\ä‹oΙßá™»{ÖŠ¡á‚wš $bÈýÿ¸*ž¢ ‰à|§âÌYòïÿ õ}ç¸D³ê¨0E ÐpqmÉz‘QøÃYYLÞ³v}‘µÿ-#;Öí5¿’J�ZéëWg­ð_2úÖ’l¬hÓçl ô•Õër‡ŽIà˜këÊ_Ë:�{ìΑRLG×íØÔðOõø[¶èøø¨ÊÐ`uزâç ׿x畱@—”(ïñ+Vl¿ú�>F¢�IÍì’ÈCzº½x׳ë·V»¥ Æ„*7¸ƒ)÷÷§ÖÈ×z' Í/=úèä®i‰<$‡ü±my\¯¡½3€$Ø·áõìý…45–k4#ªËYÁŒ]SÓ“Úë }‡Æº¦�PM–e¢zËò³Ö}ù¿\1ùŠÔZ¢Jêͯ¡Ë%©Üü­;�Æ؈’“}˜ë|cg©åòN\~¿º,ó¶£ûX@‡)E;þ±tSö­Ýº‹mƶ@¬Ý'M»öÅ™~˜Öþ¡Á¶¦¼Kle»c‰jß.0€ÂªÅ̳uùOyñ׿xÏÈØàÑðFŠk Ö‹.ì¬,FKóó½\»NíÅzºpͯ¤)�XiÛŠŸŽÇŽzþ¾kWøÙxÚΰ¡]×îé‰ü_kÒniB3ËrŽK±3óòYÍ¿zŽ«ÛW,ü~Kö §,å:)µ'ì9ßÄ”10õË÷¶î®8À˜{ ÛŸ0"ÝJX}# uc¨üÀ…†Úˆ¿¢ÂÀ[˜öy<¬± BÒ ëÒ¶~üïçõ|åÐ�},<48¥°¡.ªv|ý/9íÝÑA1é²Áq?¯ûå൓RDÐNËÓì½;‡Õ-ë�üÔt´‡�Êöži‘•ÀG¥§„.Ù~ø¤Ö'±f¼\DTçrº€R¸eÙËÿ8�ïð‹&Ñ«q�•³|âBüÎ @àCìVÈòœ~j±Ðyè¨.›¾òøáC¯~YïöV¾ùž¨¼eÞ=SætÄßcÌôÿgï¼ã¢8¾þfw¯pÇpôÞ›(EÀÞ{ìFÔ &v�ÆŸšhŒšfÔhì%�½K,±÷‚½a¥w�Þ9»¿?(RîŒè|?ùnvföÍÛ7óæÍÎîŽêb„ Jœ¯¹½HäÕÚƒØöðiQÇö‚¤ˆ(…]@3=TmgÒ“òì-ÓÇl-Ÿ›¨7_Î5Ý×᳉ÃÂÙó×EçYÆu2¼·5#uj\‚Bâë^mçÀÛ˜ë[ô ÊûÝ4Vú¹MNí­:©ö¦¥Æ%($>Í,¨·ï°ïI¥ø^þ‡‡$¨×,ÞW»s_Õ³W�Ëç¹ q%ÈÌÜ^ž[ùçe¢ã°©ÃmôPÆÅ¿·Þ«²P#^GBŸÖMÈmî¶p ϱjîePÙ8jžKÃßE«¢†ˆ )Ä0,,Q­ªjy”e¯¿ú„ß9{îÂÆ_Î�8}A;Bƒi"`i�zRÅ\»™¬ÌHüvÔ�WÙó¯½êêÍ+-§ù ¯9ôsãº~ü À$Ÿ^»þ<Ñ9hb�½J»´yÃÃw¶$‚"�U3 €‘¥Ê¯}�„cÝãÛÞ/BΟ>³yþ©sC¿û¾ŸWCÿº&RîƒçzêpøºFFb^ÍØWk{‘È»­'µùΣ‚ÖN/^äZµð” úl; @è·™0§¿}…Pˆ§¯‹�nËUl0aøÓ{·žûÌ Ž†÷vÓXM�áuæZ¯ýâ5FHÌŒ¹LTbŠ špß]˜×4Œ¡ I¢fãB@34[›úߟJßÎÞ0 â³<U—][5_X£É}«3¯¹šÌoÚ¥¹ž*%1™uêÞ¯e3; [3]âU%•ï °À2LéߺžíÚ¢®ÜŽxø$ÝÊÇËU>cåœÚ�>[UÚê—f£¸�˘*Íáš¹w3cþüqÌ¥›‘jVs“д÷DvýN®ÓÀï/þ­ü¿¹¥®?–²@šÛÛrs^ÝEšÙX‘EI錉Eæ†5wú�uûJÉF¾Ù$õØ¿�u1¼×Yl-£r#Ã3é:™k=÷‹wÕ·I[?Qþ­WÓTõ#Œ6-™Zš9ÑÑ9Õí†ë‹ÙìÔŒZö÷ªÒÚî÷¿‚Ïá°uÚ¾§ei˜¢Ô°È(Žº¤ #þÑ­·Ru;�l«�X3K3öÊÅw ZXˆ‰üL«ae�Š…lvÄ£Ç&>¦:ˆëÒ­�ñçwg›÷üÒ´Êc÷•sk]§gk¬ýk8DšÚ[sÎÜ;wƱƒ ›[(òl%Š»ÅXYIøêÜç©Å ÔÕÕÔd¤}1DöôÖƒb§A�šØ½ÚÞË ZÚŸúçÆÃÂõüúœ\ôïêu0°‹›U�^þz$Ôz¨zW³áœ»}â¼SWk6§PìÓÚ±’`Bß¾拎¯ßÊÒΊM9|<Å¢÷˜æ‚×ÅlÖfìùËÇnJZYé’y™Åå'%Db!›vïiº™·™ª™hòŽ>°zCZŠ£/‡³V6†|uNXJ1èŠtQÝì¯võJìfÚÚ \·.M<³5³Øªûøúõø€D¾=;ÿ»ìäº dÿŽ.F”"û¥Ô´C;g¤AÈ^·È°í¨á÷~ØüPU»á½Öb_«1¿Þ�O,=ºf# èàd@g)MZzk»|õÝ/˜ŒÐKï¢1$ðÔ:üÏÝ¿ü–г³·­„ÏH3£3MzoûÆÂ¼NKb¿n­Ž¬>öç.þ€–�z'™w Ì|ü,�þ{àou{[!d&1o8Ô·Jë§/cê+! ¨ësùÕ‚dÕ¬@WH„Ÿ]ºü,AñÅsÇ&ݿ۾¹X¬¾™¿ýìáe—ä Éê™:é j{ï@Ò¾o·‡{nì¹æé9Ô�¶C—¦÷¼°hgŠªž±RÎÁ<�w*9y¶’Ÿ¯™MÐjP`Øöã‡76557�H°Ñ¼gòrs ¡4¯ŒÚ3ouÖÀ%3Úê!¬[LcÓóòø‚ù×›üðûH'ªQhÛÅŽ6Í)„ê¶c¿ªËG–.tÌ#BزüKzï:èf%§É¡$ærðU~Çù~ºè¿› ²´šy�œ|kDù¥î߈úo†µ†põÙ‰)2(‰=¿ûºNÀ¼–zëÓ84F§Ü¿͘™ Ùˇ'Ͻ4î0ƆÂÚÃÔîÊQ�Þ¾WÃýI,�qv Y»#] �ïö6N:óú®5GRHcçÖ“&ö°#à?ñø¬Z Ò<&5’0µG �ŸÁ{þO‰†P;�²uñÑdÊØµÃÄoúÙQX·˜F¢1Vž}ÿôí”ì–¯oåÞyêøþu¡¶·OÜë×éec57] û¦HOÂ$G±‰Ï@­~G1ôì9 ô¯ÄKL⤠Š]CÒÙ$æÚ7,b>HÛ�¿nˆõ€it ]Ÿó}F`E`ÞÊÑÕÁãkyvÜÀ˜ts ÍOŸ–ÞkÀ{Oþ›‹‚ÕŽu‹5†µ‡yO.ƒí«ëƒ5†µ÷Ñ»|–a!|�¡²waþ‹qëëk kÓà.ßÝ£ýηê?hµÚÝ£Ö±©VÖ-ÖÖ¦\~-ïsf٬̌‚<• ;~ ƒÁ`>P8J¬g`lbŠzË(?+3C¡(±µwæpð] ƒÁ`>PT*uZjJVf†‰öÕ”²×1j‹õ òÍ,,±¿Ç`0 æ�òÍ-- ò4e+»|m¨U*ÅÁªÄ`0 æC÷úç5wáÙ2—�7Qb0 ó±C``0 ƒ]>ƒÁ`0ìò1 ƒÁ4*—�°0 ó¶°òˆÓ®?©Äªø°¯Ë–FùØë¿mËÒ#BÃÓ”õœ¹fNuLðgï W×K~ ¦¡yS ¬œÿ�ºvê ÆÞ:}7�cˆŸîú°)Qª*ö? ¯ÏÆ\=°î§Ù_�ýrô¨¯¦ÌZ´é|œâ}u½Ì«›—m»W@Ôof 9–£gél+!ê#?æ£0ü—§OùjÌÈ/‚FŽ;á›~ÿûì‹Ü˜â±…á§þ\øÍ„1_Nš¹ôŸç…5Ÿb’ŽÎ5mÇó*'S ¬”ÿ�ºÕGwY5)ó†�·$=*F&qr2ÀÁã‡<ûcXúSú’+‹9¹zÕ?Q¼&�»ëm!"e±/2bî{:¿<62‰tîiKÕof 9¹Îý¿[X_ù1ƒíD<‰‘9üa„·€‘ç&?¿zòÐïO§ÿ2ÁOÕçinm_}<¿Ãع“ÌR�­ÜvðZ›&Ÿ™U³DG¤SŽŸ9T±ì7µÀJùeoÒ­>ºËªI™ï0ì¼ýL/&2�ë4؆Ä}íFA«Ñ§ãòÙÜÛ[V'Y}¾pFo�²aη-€ìÖê©[aüúmlöÙEß�°˜¹zlS*÷Ñ¡�'ïÇ¥fÈI§Ïšb~k÷«Ÿ¿Ìï­—p5øðÙ{‘™2®‰w¿ñ{9é `sÚu*4þez~ Û¶<áËN–\u|dŒBž·vü@\Ÿ ëfµ•IÁ–$^Û»ûÔýØ,˜ú ›=µ£¡¦ÌLQ\ȉ—î‡'åÊAÇÔoÄwS;Ñ5r “�Îÿñ¶ç‚%�D]j®”Ÿ`Šb®9rñ~tz¡šk0ýçîl�JLñz@ãBÏÚ hånoŠìݼ=ÄKæì;r¹Oó�Vh0­ÉM,šý¯Å̵ã=)P>Ù:cUJï¥ º)B´ƒ:îy¸ªÙØ¡-¸ ÏBåò¸¨†$áñ¬ý`g�ª±j…²¹�î:—šQ à7ëÙÛCú8äAxjiìÝ⤞|T%�nÕŽ“ôɘ«26<žµä¬o4ì°Ò8-Wùp‡Ä"²Z·zlS جs¿~wÊzöŠ/=8G!U\d<Ø sàhÍðpñ�@3,…Ð'âòUa'? ½'Nzåï+Æ©øÈXÖ¶—cé T•ˆ:ÛQÀ‡]=ûœê;}–�PU&z»ªüŒÜ¿xùeÆ@Ð,g^Øá�‡†´œ×݊îž}Jôùz†—®2ñÒî]»ö¹zÏî¤Ï¦FÅHM:OŸÑÃ!Jd,ª�B¼fçs‡áS¸‹ÔÙ©j+c‚I©‘YõòÊúßwGè·ê3dòpþ‹=k¯B¦Fµla\L*×aˆ ê¨:Ô\)?°…�wýºæéÿÙˆo\�©RìÈSGï©^ î;� u|x´Â¨�›Q…цM-áhÒK5X!M¦Eê¨D.gJ}Kô£§2›_IlðÜ×!Ò1OSÒ¤–iGþºˆºOm'©ÞÙ"¢•&m]+/³ÒJXvõÜS²Ï´ÿyñ³oìþûÈž¬¶ƒú�ï%Ê»¹gÛ¡½Wýæ÷4†JùkØ?ý ™«:!"ZaÒÆÅ+­ë°Ãʵ\åã[aAØéõçÊÒû2Lê­qFmGºr´ŒBtrT¬Â¬•“ispÿûP(ítÔ'ñæ=eøí{¹ú­Æ·¨y¯‰ÉˆŠ.6hêlˆJ{QT4mÕÝQ€@�ÏÚ÷íäYzHõüZ¥Ÿª¨½ßŸ/ð™ôÛ¤VúÔ\Ñéˆ% @'DƳ};ù¸!pà·ºxïNz.zE1‘©<çÁÍm¬ªÝH`‹S’òx-Û7sа¶6¿zfuâ‰?wGÙ|ñÓ7]Ì9  ½“M8tuä[P£ZUlT<Ø ±ç[X‡š+åÅóÃÛ®1gý8º©.ªX;¬Q ¦‘ÁdDEç ]Ü­*/»2j5 ’ÐjZ<±�ÍÈ/bÁ)#n?*²ëÕÂTþâõÆ`äè(:}â§Ù7]: š3¿µ5¿Zwc2£¢ò…În•%Q¿²ÀÒNçз“·«rÖm}áÚEÇÎ=[»SÀ´¿tã\z Æì«üla5{þ”̕ɌŠÊ8¹Y‘ªº;ª¨£k¸*Æ7eqRËe*(ÂÎ^ÎpýìH<ªyʉŽÎ::[�x¸hNŸ€Oà}»LNR¢”°wq¨yßž•ÆD¥qœ\l(&+&ºHìälL�]lèä¬_:jUý©Š¼q+˼s?=µ4-üê®]WómZ47©(U¶�…•IAÏ@L€*."ì\íknhE"�VÔý-¿®?ñ8£t[m�ÌʈK—^Úôù¢“9è¤È……««i¨–N‰Ž)1uv£:Õ\9¿âùÍ»E®½úyè¢×Їi\°ÒèˆdÒÉÝ‘S9->.,¬-Xm¦E™¢ÜìXé£k÷JšvnmB¼ÆTi·¶.œ»;Ç»½#O-roëoÍWE_³áb’ºŠ$)„£›CånPÉ«vVV\ B]ÝÒw‚ˤÅH$Uò×°çOÈ\YitD rtsä@݇�Ú®òáŽÐÓCQ‘”6;äÄm¢]¿öF*m¦R™ˆ\(<\4¯_Ë—ô>’Þ¡Vª�àp4l.¡“bÁƹt2ÀÊb¢^RŽ.v°…1‘\'—²È¨êO&;>±ˆN;µh˜/'¿îlºí ïfö¶"+²Y—fËŒ�“êÙÙé#:%:Viæê,Ö°WŠ0íò¿Å G¸eŸY=ÙÙ— ÔÈÌdDÇ{x”®‘±9Ñ‘9"WWS¢fN` b£³øŽÎæd�j®œŸÉJIQÚ;TÛÏU£L#C ¶î®ÂWV™xáüsƦ¥Ÿi¦ÓÂÈÌ”ÈKËTЙ!çóZvki€´ƒ:áøº-áý~ì¸i[ßpàIÔÅC§R íÌ^Ý;TņDz¶nÎÂÊËú•,¶J÷a âsx¶v¦°…ñq9|{S¢r~ ÝêÓ1WUlx,kãæ,@uvj¸Ê‚H#ÈÏͧ‹Oté×§ Oë(¤NˆŽ¥­\œ��Oâ^>!15&Õqá1J÷j�¾2/O†ô Jo­Ó© ɬe€@•ö­Ê㑪?Y¥RIXÌú®��@ +àVÜ®*ÍÖ²4[ù’rìkK�2íeXXšjÙÐJŠ�:�ú^(ýzããˆÂ’ê™YE‰‚%ˆ²~«J‰KaíºÚPòÕ*ã¢À¾mÅ´¾–š+çgY†e•J[‹x–úøAœÆ„:1"ZaÒʵⶺ*ãÎŽõ'_štý¶›JÕbZk; öR|ÔãÈÓñ–ÝÆ6ã¿Æ˜ŒÇ¡éF-Ç{êbŸ É}~]²â7dÑcv?ÇWŽNŽŒ.1òs1ªl@•-¶J÷QÅG&°å]N™öm9UòkîVŸ†¹ÒÉ‘ÑrIs#¢\‡uvj¸*†;@úffÜ‚Œ¤Çÿœ`Ôïç†h-£[”‘^H™[x¸øÐC_Xôi¸|$lÞ½£ñ²KþAõëÚÄ”OfÄG$ˆÆv·áêÒ�n^~n`[yùðålÖE‡@'EÇ*ÍZ;•Í�«ý$Í\œE'œ¿åÔÃÝ�’g'å´jï*BtRt¬Â¬µséBÇÚöwâÈ�è”§w^ˆõ ÒûÎ>eO.±Ò°‹WrMÝmô çùÍ(¥aK]ÄVÏlfjmI�½uêºG/KYøù÷åœÔÈiœ«2o程êVó«üÈÌ£‰äXÈ¡CöƒýMؼ¤LßÎöi—jT‚{N£‚ÉŽŒÊ! x²Øˆ0yafRؽkן˜tœø¿áMˆÕfZ„‰ƒ�î?w·ï�AÛo,�UÞÁttu!'êib¡…��ù4Q,b#=Þ+{as¢¢²#¡*>&¦¼_šZ¿²À*ÝG�£´hçXñCeÑÁQ©ã^å¯nÿ�œó.*æÊæDEeó�Ýl©jz{ý°óš�«Òø¤™…süðf0ë³ ›eéš¡fSA�¥Œ}p/Å¥Yáíkx¸øÀ çSyHO§éȹÿ8z=øÏs%ÀÛ¸ú÷È­oPç¤=ÿXÄ5vmðY› j)˪b¢s„N.åž9¯ÊO^Óϧ +ÙuzËïÁ4WÏÌ©íç~åÙt�\ÌI:-*FfÔÜYèx÷ê×dó©¿—ÝÒ1qûlr'Ÿò,+ùÅíSƒó„®‰“ÿ—Ó9QÕ3#QËa£_l:¸ké}¾Y³Î]ƒ]>ƒùÑñ»bûX¬ æã¿ƒÁ`0ìò1 ƒÁ`—�Á`0 ¦Q¹|+ƒÁ`0˜�жü»z æ#":2œÁsú�,J+}Ç1¾¬ ¦^gW÷�Ùå—z|ëc0¹9ÙþW×a=|LÜï4 ðemPõ~ÌsšÒÿa�ÿi£ˆ»|!¶øƒ4åËÛGN=—bÅ`0˜úqù˜º¢Ž>ôýäÙ{ÃÓÇ Ù’¬¨Ðg)rm^S÷ï_{ï¼”£SiªôÇÁ[=•a§�Á`0o뿊G‹nrÎý6kg¸ºz:Çsüª¦ææ-¹Lt IDATAcš+Ñq'×®Mèµ´©•Ž¦ÆæÞ ¾�ïóÕ �{Ó!x¥qízv¼þGð¥Í>³¬½&ïÉ‘íû¯¼H— ,|z�îã^ú}0méõUÉ7,Û§¸rn—jï©¥sînY´ñŽøóßêcZõ�*+ôôá¯?NÈUò ›÷9²«ƒ›yéŒmÏTeùHË~?/ùÜ�ÄýƒÁ¼%Øåk‰ýƒæZËX:ùü¦½q£'t2'@×\de0caÀGÔV&5äb¸¨í÷¾â†ÛÂIX¼‹ÒxnÝ»XÏ»r%º×®µ¬:ùÔÚÕ§å-§Ž0H»²?xåFÁâ9]Œ‘¶ôú* Lqò½3ÿŸ MW5fU…O÷.Û¦æjRqIĉý7‹›÷úªŸ!¤Þù'x×*Âì�±Myl‰\Žlû~;¾�Ä›c�Á`°Ë¯o8[7 €š|HÁKC{7÷²èŠI>2ïÇ›žó—:�lî½Ý{œœ‘'U‚މ[‡žþœˆëwž'æ)…fÞ=ÆŒíëRöÁhuvèñýGo†%ç1b{ß¾_|ÑÍ¡RHÍ–$\ݳóßûq9 RlÚüóo§v0BlÞý}[Ž?JJË)R!¡‰“o÷¡Ÿ¸ˆÊJi¬°Lž”̼"ð lš÷ÕéôDêè}³Fîn‹i›f´âV¸ªŒG�^нƒ8Z%Ñz:�bkJd’�Ì/W0ùÏNì=téqR!Ò³ñê8¢oƒÒ�¤j‘Ÿ0óõµ:ríAB «Å=økÁ–èæÓ�jʯvÝTQÏÇKºÍÛÝ…àB¥ÎZ}öR|Ç@kÍéÃŒC_Uõ.e�ɺ¶{ïIÏéc6î.¬¶È’~åÏ-aM&Œåí[^zÁ+7�ßlÔâÅEø4!ãC×ÅDe0Mm`eÅ2dhãbg'h\3fCªM?2û˜"2% vù lqJDd�Ͱéãí(iÜ…=wì·ë24ðëÏy¡ÇvÞtÔyY� ˆ<´|Ím£Ï‚þ÷¥DúìøŽÝ«ö™,çU¾ÊÎ$ŸùkçƒA“x0ùirC=¬4ùExžåà)_ÚsY/.Ý»4©øÇùm9Z+ä§DDX�:ÖŽ*É=ypïÊ|ù8/ (»>3&µ7D€FœJmP$Ħ ûž¶”vI´œ®Y–†ÌZj¨â–c‚—­8‡Ú ›h)!‡._¡\°pˆ·LŸ5åçaâä(<[À:°4MÓšîì3™Ñ1…:.ö¥-ä»5u&nÅÄÐ<Íé¬ñ«ªÞ¥,aÚëûµ½R?Þ\sÝaóyÀ·Ã›ÒG+™Nå&”ù{`‹ó Ô\S³²OÌK ¥$¡ÌÏ•RºÜÆó-aFµDݽ€]>ƒ]þG⛹4uw ÁÅ0ã^èIK¿.þÍ('¿¹*2*“q³@Ò§/çyŽ™?¨…Ø}™õdæ±;‘£½¼Ë\/#-,bMÝš8ÙòÀÖ®JåM¼›:�ÍšÙ …¿œ=ý¬×äæjú½h„»jû$y´¬R2It\¡Û�Vü1[‘‡÷HÖqZcDuýšß‡äIéˆã%Ç«KŸwá9r{�çyzœ&9Dqr«2UVײÚÒßNÃ!º3Ç“UìE©Ú7DöTѰ ó¾:c& Ë£‹ïV›ó‘„ç,á°ŽìÙqÒ�´ªe ¨6A<¿–¤±>È_ÒÏ–œ¹D«à%Á`—߀c€�¡>R)(R_"†™Œ`Ò“òì-ÓÇl-�ðÔˆ›/g�Sê$(ç.}=îï]:7¾M—®ýmÅÆu®�§»øTX\:ÝÜJk…U265&¤…¯º�U*•,—û:Ih-§#ÛjÈ\k[è´øD¥Ä×ݤ̅’¦M\ Ž<ŽO§[8 íò#� JE­[þÙ7L¯¯²ZJæÞ>pª¸Ó¬Öýú¼ª—W6þ¾7ÓwÊÜÞ6e½RÇï«å~´,#òÖ?;ö­ZEýòS›·wú‰%ˆ0áö ŒÛGWÈ#êÄïè†P �Gãž\—a“l?_Ð^GuviI¡·×hA`±tÛ)Dœþ¿êØ<•˜IË�©€¯uF“ÌÊUjEʲÚÒßV˜‚ËòM/Êß±F>Ót<³Õ/Uu*ûÖÂèØsÚñÛµ"¸Œº¦ù¹Lôó•ÆZTÀ¡Õ·7*rȲ?`¦ŽE«f"I 1 [öš#B¿Í„9ýí+ö›#ž¾î+DZîñí ï!çOŸÙ<ÿÔ¹¡ß}ßÏ�«aÄ&€eáuTÍN�/éÒ¶*Œ8\.R*Ë{¡&Im§ãˆ5ˆ]{[Ø:öÖ*ò³ … 8w¦hÿ?×ö¬>"‰M‹@¿vPá¡ÕI÷OžÛ›Y¤&…Æö>_LèmK0Júüß­Çs”s�€¯¿âΫK…5£Í�£Ã7 ^ó€Ö1õâÐê•Ë'L½›[¹ù !ÐʼnÒ,‰–Ó‘š2«´·¥Âñ8 ùv6oï�7þ^bïþ³G|æÈy½ÇÏ|ø0YÏ{¤=U>°h z)ë>Óg(vì;¼6D!´ô4sL¤5�­RÕ»”}c^•U'Å&(‹‹÷ýü¤bŠf9àçÅŸ[+ RŸ;{,SJS"SGïaßíaõ.»÷�.Ò¶@Æ„*ž ÚwQ$eq[šÑçOÐj¥$Ô0v&¹YªøòÝULª:!›ïêB!Õƒð¼T†#†$™¥JÌÔ¸ÂD4ÁïØž4– uðH6‘P|W;YÇÃ=¼Àš7£¸1ʘüF4�ך®gM ªûwIkàÚsšû(®1LÝÊÖ³0eÆDúö¢Š®‡¼YC^‡°Kè+P_—ýô›JýÚìâ.üºÊ]Çiº–×½²áoê7µ…®6I4žNSfÍm©ª( šöÿzQÍóZäWFœ¿œdÕy¼ §tÕÄoÒ?í‹û¯!3½†Ô)½zUïR¶LQÞ7oÓ2ö: [¶½ìïÊe9>“þÚ=IC›€) êó¥OHˆx 9@‰úÆ fÚ@~Ÿ|J}Yö$À€U ļ™ïah ò±Dã# ¦CÃûÃýMòQ,kÉý|^ù¬­Pýø éÈѽB;ù ŒUAãYh”æ² ‡t‰²=™”é°LQ>è´ÑÜ•=7^~?à¤2ô+á„©ü°{²0yíeµ¥¿µ0e¦ëÈifÁ<_©V¿IÙZ„QÓW,~H°ùµÝŽAȵ#Gh þá•ZIBÏ-bóß Ý®ž·$“NɤSž«•f¢!8ço)ßZ--^Ÿ`ñšþ§~ãAÒ~pWñÃÃÿ„Ë?HKP%�9p…n=¤›þ Ä»]hâ#VY�}N¥ÏñucîW«ØV #ÈŠ¦UÆ”½Y¹Ï° ìŒØ´h†Ñ^sV4­2¡œ­5œÓÌ™D/”/¨SèÔhZƼZæ?­’{r|¼)7kæÅ­×Õÿ¡‘NK…”£SYí|H2�NʱÁ—ÒYeñ4›úœV��¸Neµ¥¿µ0¥ûSùꈘ7+[‹0,›õB÷T÷TŸTÛJË>[]´rBÑšÉEk&­[ªÌUÑ7JÏ>®-¥ o¯Œ¶(«Ãu0>b9æî)†0ô8¶§—/ñ½#:ˆ ¬RÀ¨®lWÊEªû/Kã6PÒHG!`å··“…]æé(w©2Ñ|4Ï4QyüîëvùmÅ­Da§…Ø£ŒÏ^’Wv±Ø¬õçvéÊUîß\’Jƒ°òÝ-eµ¦¿­0$ab‰ o2ÕÞgр¼©MVôr]¢ §µ-Á'Ø¢:ìÏâ‹§æ=Jò Pº1M5ðaX–fyâõš™Â_zÐT}X†e–'áçò1˜�Š»·Bºõì‹õð1qñìIÀ—µáÔûq?—�£üÆ�:úÐ÷“gï W~Èu²%YQ¡ÏR*½Æ¿!ÄÆ`0ŒvðCz�6çÜo³v†×øÇsüª¦ææA}NßA=×IÇ�\»6¡×Ò¦V: uŠR˜¼'G¶ï¿ò"].°ðé4º�»½.½¡Ë–·?çî–Eïˆ?ÿý§>¦¨neÙÂð»ö]M)" ìýzŽऋ?4€Á`°ËÿèAbÿ ¹Ö2€N>¿ioœÇè �Ì Ð5YÌXP¿§#,ê½Î÷q uò©µ«OË[Na�veðÊ�‚Åsº#mé ]¶l¾Vøtï²�aj.z™Ù´ókW•µþrö8k:úôŽ}Ë6ó—Ìì`ˆ�>ƒÁ.ÿc‡#±u“¨É‡¼4´wsw KcÄä#ó~¼é9Y ÉæÞÛý×±ÇÉyR%蘸uèéω¸~çybžRhæÝcÌØ¾.e�¢:;ôøþ£7Ã’ó±½oß/¾èæ xåM˜ä#ó«Õ™’™W¤ž�MóÞA£z8 0i—×­~–%U"s�N�_ ö’”ÆìLþ‹Sû^ M* yû“æ ruô¾Y#÷·Å´M3Zd”ŸÂêé_3V%,Z4І6ïÒÒÿÒ›ºfŠ?¥AH(zðׂ-Ñͧ-Õ”_MIª¨‹çã%Ýæ�íîÂp¡Rg­>{)¾c µæôaÆ¡¯ªjˆ²$ÐéWþÜÖdÂXÞ¾Õá¥S€ÊMÐRösÎ�k1¼v³‚:¸slÇ�™±îòíŒv}ÍÃÍ8&ûÑ‘#‘VC†µ’à{‡ÌçòñÃù lqJDd�Ͱéãí(iÜ…=wì·ë24ðëÏy¡ÇvÞtÔyY� ˆ<´|Ím£Ï‚þ÷¥DúìøŽÝ«ö™,祣½Në¡SÇÚQ%¡'î]C™/çÅGzN�‡Oée €¼§voÚk·âkUÜ‘?þ8Cû7ÔAW�_$4)53ʮόIí  �§Ò ¸®^îÜÛaùl$@ñ<¹Œrã)"÷kÒXš¦iM&ËdFÇê¸xØ—ÖÎwkêLÜŠ‰) yšÓYãWU5DYÖA‚Ôɧ6‘|;¼)}´’Nk?¯�LÆ „Â2�ɳ±3c%¥ÒÐ8\~ÚÍCŸõï9¬•wJ Gù˜†ñÍ\šº;�àb˜q/ô¤¥_ÿf€„ß\•ɸY éƒÓ—ó<ÇÌÔB„ì¾Ìz2óØ�ÈÑ^Þ­uš»yz8�Ф‰$ûÙO7Ç«½Ü)��§oéq;aòÝ×¢Si'Jöèäù—Ö~›ØÇ‚¬¨@ ÀÑ3³¶.¿“]és©:î>nÄöÇO‹:‰‘"òqí<ÔCX¬MHÿ)ëü5;šÂÂBˆË�"G__—}™_ Ö’Ί^U¥n€² ˆÓÏn? =èmËEq¯´Y‡²ÈÒÅQçÂÝów;ŽimÎUåfæ*A­¦ßvrÎdO¾æ‰ªÆâQ‹9ÿüÑ×ß-xS}fÝݾrã¿Rä"»6C¦Ïî¥�€-Ž>µiþ+ÏÒKtL›t1mr_g!ª[Y­éuC{ì×ï6ÈG\Ù_RZŒÍ=>sÈʯ9i´iç7²Á…©& “²JÐÆU¶!q;þtjQWþ{P ¦Jø†]þG a`¨�…EJ €Ô—ˆ!B&c˜ôÄ$…<{Ëô1[˃N5âæËYàÔÚ™cScBZ(eT™�8y/:5_Árä4á¬uj\‚BâënBÖ}’"òlåAlôTÚ±/âás…ë`ý·’}Ãô†-ËæÞ>pª¸Ó¬Öýfe‘ÐoäÄîþÞ2{Ü&ÀðÕŒÈU÷mC|BÒñ›UŽR€Ž;òëú¿sûÚ„ØF„Ð7E·á‚²N“~œj”|âÏ-ßÿ*ü{ysTxsõw«^xOY¸Ñ[73dÛÊ•sh£ÝsZ ëP–Ж^‡éGQìÕCÛ¶º™\B4¯lX2™œtþÛÜ#ˆ+±&ëÖ�·F£$„I÷9=eeS|:õ܊߯·pã6¨$å’>Ÿ"�U3 €‘$…†eK½ ¡ßfœþö]ñôë´ À$Ÿ^»þ<Ñ9hb�½J»´yÃò‘†ÕâÄ^çó½[7%þ¾û¸È_|Éç¾ú²ßXHB¬'†ÂüB€Pçç#=}=JK:ѰeÅÅOn?-J{²h–QÓÌ¡¹“¦m˜ÜœSÛy @Ÿ Ö )ÌÉWrt7–Ï;¦ïlC¾­-pŒ�½ŒÔä .Š7uõö) øT�V œ3l÷†@K€I;4틎ËÎlÎuúí]w^x›Å¸¶1mz7!beÑ'×­Þs-<£„£oÕvâ²ù½ÌP&_Þ²vû¹Ç/e<ó&NÜ"¶¼�Lòñ…ßo»ŸZ ¤ôlš6yÖW­Œ‰’Û‹‡þ3xëÖ10q;Æ�;é¹òÀ ïLR==v$ÒhÀÚo7å4å&Žüáð¿‘}':Eß½_è6bÂÀæ¸ÚMŒ¼2ñê³dº•ùͥ㗾hûË_ßø ´–Õ’î^ëgRO¯Ýx×xðϳb­Î­ìò¥ER0uòtq®4ç` ®7˜0Z$áÚ»–åH;¶íbŽïÔe}-‰†”£}�Ä*ø!Íl¬È¢¤tÆÄ¢sÃ7|\N•ŸÂºvÔ®©ƒ•µ�ƒyyJšÙXQ¹‘á™UÃZ—²b9£Åçëútðå…‡„„Ü¥½;øŠÑÛI˜8;‰å‘a‰¥k™ŠÈçÑ´±““©%5lY}QËqK—-]ºø·%‹[²hJ'Žm¯Y?zPu8oYýˆ+62ÑW<<|&^¿M׿Â÷‘—<ýëÛ…'å-'.^¿f^?уµóÖß-&þÐ’U·…}ç¯Û²iÅ÷£º»Àß[÷í¢¹MG/Xöû¼/šë*^ÝC@’fý&-X±qÓÚ…Ã,c÷-Ú"e�׬…71ôIÀæ‡=Kâ5óqm 1“ú",OÐÌ×µtN#ðôó S_„å0¤©¥9J¸w'ULVXx¦^k²|ëûš²jmuÖa ·ºêÐ_ó‡ûUSS˜WHŠì¬BeåIxà £U’ò3ÝÞ¾ë±é q=L‰�„)ÉMÏ’ªXeAFf¡ õ8Êǔվ=;ÿ»ìäº dÿŽ.F”"û¥Ô´C;g�7q(”…µ{þò±›’VVºd^f1[^¹_ïÎ'–]³tp2 г”&-}­Íím8çnŸ8ïÔÕšÍ)û´v¬Zߣc+ñ’à}„¨ýlo-Bò¥Úwìs\ºu·»~tûNÓ¡­õ3.ﻥtÿ¢‹= Hsz•�ó P–@sA¹lt‰.ÅrDÆæ<(z°¹Öó+ËNNÍÌN‰¼wñü�Lóþ³‡yðߣ‘°…×þ›å?sý˜NzÀyfÆÝÀíWžÎôãååƒÈϧ¹‡3À¥vù�ù’¹~±zW•9¾õ ÅÛÕü€ã?mÇŽŠl–mðª‰×€©^´Å ZëA»YÛÛ•þi×yÜÂÎã4É(ñì?Õ³Õ4³¶cl;¶RJ•j«þ¿í¬VF“�"¿Ikü´G<¯!3½†Ô)U«ª!ʾš"9 [¶]s4—åøNÞ¼ã}¬ù ’Z­®9+Â0`î_¸Vx B`$FýÁËöµ|pöèÁCKÆ÷ÇÊ 7•n®Ö0câüøS0Ñ÷›¾q5@Éÿ.þ9¤ì¼z­Zr–^¾™àñða–}§–&�ã>#a`hy¹yåÛ/”¹Ù…``hÒ?k4aϬ¾F Òcó”i«·´o½ � Ö²¤–ôz˜�ºVÍΞøâÎÂë7SF:Øï, å1réÚ^jû:ÞU§£._I1ë8׃ó*­«ZOOŸ›áĹ©à<yèÝ,%¦@ä �ï]WS5Vói�ú}HOzYíc¤µ£'/&…±°­ÀÚ¸ô=HÇÊà´?¶­ø\?üÈ©ç* m\¹$Ö¼}ªŒ‹ˆc<|ÕÓ×ÍÁÁÙÍêÕHÜæ³Î¢ÇgÎ=ºu;É®C{ëF2M dÏE•6VþôÁ Ú£‰!ÊŒ‹—ЬmʼŒŽ³§‹°8#­�©CYJKz}©„Ñ´.ö¶Â ±m3o/»:úT&ñî½4ÿÖÎÔ›¨´ÎjÑi3qa/õéuëÏÁ�;~h�¼nËCÓ¯æ�pÆûüp”�Á`* ·6mÚÛíØ»i¹“ª‡“Òâ ØÒ ¼ýо{fïÿñrTïf¦Ü’ÌøB‹^=šê¤Þ:Ê88šòÕ¡ E Ö€DíF ¶ûfÏüŸàË~^¦ù³äò/(ql¬àŸwž3êê Of¥Wò=|ï~½-&ü=Uj7h®M£‰?8ž¹œÝ¹b•Õøn†)'6^Pø|ý™+I¨||Lw�Ûü—ë„'�¢ð“Û®Él?÷6F×—TlM×R-éoïä_^Û{¥ÈÖÅRL'?<¶óŠÂel;«ªûäß›0À†¿H"݆»¼ŠñëWÂÈwä<ß‘e¿lfÿ1÷lìò1LMH§?Í+Xµmׯ—Š®ÈмIs l>eå½?·Ÿ^»`{1èš8všÔ±;pòb¯í?´ñe¡’Y¸¶ùzîp'xMÆþñ‡Þæ­G×þ°£ˆáŠ�­¼;Øê"ÂyÄüÿe¯Ù»nn°”áèˆ%6î‘>åØo¨ßáå݇X7¢GÊaø¯¿”¬üsë³r¡]›/ÏègAð¼Æ/ý�ذkãwÁù*®ÄÎgÐOÓ‚œI(¨²uCsY­éoíòåy w‚ƒw½,Psõ,ÝZO\6a¨=Y}Ê{è—‰)ŒQ{˪[éþ I>uÐT}XšeþHº^ó°¶/ïb0˜Ÿ»·B>ô«+Ÿ­3/mÌÎEÝ%ø•@uáâÙ“ð¡_ÖÆ¬Þ–mÚ7ê&hóÚk½=Iô*ÊÇÝ ƒÁ¼7JÒ£ã‹AþÏš³ÂÁ+;c�Á¼(üA 󾡓Ï-Ÿ±#†2÷î3÷× üó~\>àÏèa0˜÷ é<ú¯s£±0˜÷ Qêð±×Ç`0 æcwù ƒÁ`>jØW.Çø ƒÁ|ä^U& æãBqõ Ìí�ÿ}Ç?MâËÚ åãMÑ+}.Ÿ]‘|­æaü\þÇ5Ç˹pÿS³Á_v2ÿïïè°ù/Ο�7ëÞÇK? Õ@4‚çò1o~.¿¡Õû±>—¿ÆÛ“DßËÿPQGú~òì½áÊz¬“)ˆ{ô02Kñú5Vaó/ÓÇ4zÜô-dlIVTè³¹†R¯9T+tæ£3gï&ÉñƒÁ¼ð wÿã°ûÜo³v†×øˆÇsüª¦ææÁ{Ÿ”©c�oÜf1tÒ7=Pð,t踃k×&ôZÚÔªÆÇu鸓ÚýW0yOŽlßåEº\`áÓ#htw1z]z]ÊÐ…q·Ï�»ñ("![Ò÷—}«­“°ù——ÎØö¬ü«2¤e¿Ÿ—|î@[~b×¾ ¡)E¤�½_Ï‘#œtQ�õMe‰‚ˆsÿ¿•^ÄM]Z~ØÎŠ‹û ƒÁ.¿‘‚ÄþAs­e,�|~ÓÞ8�ÑJ×ÜuÍEV3ü³�ȈIË =}Ë¿y¥nLk#ɧ֮>-o8u„AÚ•ýÁ+7 ÏébŒ´¥×¥,¨ϯ]q,×¹Sçþ㙚Ôü’["—#۾ߎoc€qÄæ$“v~íÊ£²Ö_ÎgMGŸÞ±oÙfþ’™ Qʲ•Šrê1º�)·(.äÈ?[× ¬b‹? †Á`°Ëo¤p$¶n5ù�‚—†ön:“|dÞ�7=ç/ t ÙÜ{»ÿ:ö89#Oª·=ý9×ï඘¶iF«ÊÁf�CLþ³{]zœTˆôl¼ºŽèÛÄ ÌE*Óîïù'$<£„gìhÃ-fËí�I»¼nEð³,©š™{t üj°—„P†nž±*1à·E­ `’�.˜ÅmÎÏî!?o‰n>mѨ¦üj-RE]</é6olw€ •:kõÙKñ­5§3ýkAyUÚÊ:�ÊÈÃëO A?þÜÉôUa‹¼* ÀÊŠeÈÐÆÅÎNPiÕàå�k1¼v³‚:¸slÇ�™±îòíŒv}„�j- HÐì³QewäÜíav$¥(ÁVçÃ1^&ûÑ‘#‘VC†µ’�±~ »|̇[œY`3lúx;JwaÏÁûíº üús^A豇7u^äF("-_sÛè³ ÿ})‘>;¾c÷ª}&ËÆyiöZ2ówš:³§5ˆ§oL@e×gƤö†�À¨ÚËQ«RÅ/[qµ69Ð RB\¾B¹`á.°²g{ÿØxK§ý�)£¬È¼¨ëÇc+\>Òsê<|J/ä½8µ3xÓ^»_ûë¸zºrî„Gä°– `‹b¢R9.(ö*MÓš¶0™Ñ1…:.ö¥"òÝš:·bb hžætÖ˜¥Ë«ÒV–µ§î�ºšEš^þcƾ|F×Ú+ pDOÀ«²ÀJ ¥$¡ÌÏ•RºÜ²Y#—ÉX�PXæ°x6vf죤Tœk/[©UòŒçBâÍF¸ò?(³dÒn:ø¬Ïa­$�²~ »|̇ ⛹4uw ÁÅ0ã^èIK¿.þÍ('¿¹*2*“q³@Ò§/çyŽ™?¨…Ø}™õdæ±;‘£½¼5¼ÁœÕ–Ù%2µ²¶*[CVpô̬­M5.T>Ä?vÜ›�ýÜIËBAɵŸüœ1f÷†@KTתά»ÛWnü÷AŠ\d×fÈôÃKŸ;a‹£OmÚ°ïʳôÓ&�FL›Ü×YˆêVVkzÝ�Çûõ» òQWö— &eÿ” �/ªÜ•ãvüéÔ¢®•æ�Lî“¶í>uëyR>#²jÖyäדzØóám…Q¥Ý>°u÷©»Ñ™ ¾©[»Ï§Là^içJ5 µ@g\^òÍ¢ËÊ ‘Í=>sÈ*vºØmÚ9Á ßßÂ.ÿ“�00ÔGŠÂ"%@êKÄ!“±Lzb’Bž½eú˜­en�V#n¾œNÍFkÍüNÐiñ‰J‰¯»I™Ó M›¸yŸN·°IOzIKü� 5õvUæÃãNÞ‹NÍWp„9M8«‰¼Z{Û>-êØ^�¥° h¦÷Ú�‡}ÃôÚó°ò‚|aåÛ¹…;lÇ z1ý¯›ó:UýØ«ŽßWËýhYFä­vì[µŠúå§þ6B¿‘»oø{Ëìq›WÀW3"WÝêUsY@Ð|ÔÏ?÷ÊNxxæÈ–_¶P¿LôÛ' +gGedt2ÝÉ… #÷ÎYþÈ{öï_¸QtrtœRÏËÅûûZQÇí_¸à€¬Ó¤§%ŸøsË÷¿ ÿ^ÞßÞ\ýݪÞSnôÖÍ Ù¶råÚh÷œÖÂ:”%´¥×aúQ{õжm‡n&—Í+®·I÷9=eLY¿L=·â÷+Æ-ܪîÿD\•‚òiµw¶?_‹„{[þ½uß­y¤¬$&+“ÉIçá¿Í 0B€¸kìïßÅåãG¤ŸÏ§Èÿ·wÞñQT]?wfv7Éfw“ÝôNzR BGTz°‹€Ø° t >ˆ¢ 4A}i"""ðHQz „N¤�„ôº)›dwgîûdž�Àn æ çûáƒrgÎݳgfïïž{ïܪ @€°,G�Rƒf1V‘S?Ñ¡æ§I$V–Ä”À?Ymlˆ¡žÑ‡ûë¥õ�I©±ãBú_+Vbú??íù ’uxÝê‹Õ&²�ž�¹uç.©{xÇĺDt®÷%«Œ\!‡’â€Ð—…•‚3QÎ4–å8–š²r b•ʲJJPiyX ûÀ�¯NH¼²ââåìanÎŒ2tÒ‚•cK е"˪SKçî¶òq3Ñb=` ÄBåæ©róôó5Ë{û‡ƒQãºV5SóE^¾䨭¤2ê« |âñÑ éYÇnMô`hyRbñßÁ�è³Ïn^³éïKIy‚µ_ïIo½=Â_J@›~äÇ^ÉÐH½Å¥Tt7s=¾rñ¦sÉ™¹êJ0·õ‰ÿÖ»cƒ,‰©ª¨æÖ¾•ßn9—S)²ré9í«ùO90õÔBúŸ 笿�©Ör ·°a¯¿ÿJw[¦òìâqóÇüôÓKž ɧLÙ×yÙ¶™!­šËè®íÞ•`3rŬ1EÅ©“çý¶'aè4ï[QJü'MáÈ€ŸÇ´„£ÓŽ]Oç»;ž^òÚ’˜žŸýðNW “¶&ÊÔ7!ó¯k¢lÇ|ú~âçßÞKéUTÕgdí^ÿOA—7¾êÌPõ‰{ÎË®ÏÍìj8)Ô·ââñå‰)•à#Õ5Ë‹ˆw6läD@�Pîæ™�cndá^Œqëxbè˜ÜÙóŸ%—Cgd¾zÞ•{ã‘¥e`ïÝÙ×GŠmKȆ ÝÀ:¸¹°¥iÙ‚�S Žªžò3ˆn#O6ˆ…Xšò ¡‡XÇîℸ¼»ÙEN\B‘ØÍÃ�5*ˆ¹‘õàº;)w¨ßÀѽ:zº¸zx:Þ˃‰ehÿîÒ¸ã§c/]ÎtîÚ¥þ<ƒ±óñ–W$ĦF«nÜâm½½¬‰rÒ["qrµ�Ô„¤ CôJ狼;U=ŽÜß«!b¹��UÕÅßö§XE>&­O³Mõ˜!„ üC<=ÁØúù«øÄ¸$=Ÿ|ò´ºÛ põ©ã7« âoñ.~r•×~˜µp_E·i‹W}7w¸,zÅÜUQå´üüÊYŸï-ìøâ‚¯¾œû\˜e•®¦úÒ”«W‹:<»ð«e_:£7µzÁêó“U );¾X~V:tþÊ×~3ç…'ýU Ô_?Qv>}Á7kÖ®X8Á9iëçkN–Q�tЧ^¾Z RÄØëi’N¡~­­ìîbÉå–׺%ÅþúÚ¼ÿ§Ür—'_sdX*_·â;ðI�lØd?®‡UΑ­g´Ï èÀ1^^§*“¶}ú{ܱ}ý?C½ô1»vÇË#ß“Biôº[!çü¾óG;KR‘óÏçtcº80T“Ÿž™›'áü?‡Îå:Žø`B�Ù}_Á”­6ñÈžD‰—«ÒŒ–eÝøû�Ëà31Ôö!fó9ï ñî„øl!Ì•Þf¾Õ PROýDêÑË|eÉG^Ý“Ê÷ ’véÌ-;s¾xä3JR-�MïÔÚ‹…¢‚b°RÝ} $*9¤QÆoä{3®Î]õÚËgûu.�ÑŒþta¤ô�ÿ{ßêa}¶¼©:Á®¢Ï0õuPöÿzTß{îo€(î9SÝY;4wÌNUPÎiмyO:0¦�¬q†¯,¯ÔS „3“š=ÐÕÐ¥ÿwÙ¦›~/¬îW­ÞÆ<¬ë‰þöί·Ã„oŸõ“øÚ§i«¹eÌšWÆ.dzŒz}æKÝípdÿá$U¿½`4qö{²_?¾åÛ]`®t‹x¶k/¸§âĦ稧.­?ºõhX§‰> œ|ÏÊ2âÙãÖíØù]4on<Ö³{�ä9äì=vÖ’_¶íYóe)ÈÝBF|0i˜—![y�ýð#Ùö�ÿü²ü�r�³T:ø…;™Æ}èô—Š6ïÝòõA�À™I^v5¹0ç>`HÐ�Ÿb½žééÄÔ T˜¸c9×gÞžYµqëo+NVI�CF¿÷Ò;b²œÖ©Ê”-ã4äí÷µ›·þ¹|a)cíÕcÊû“‚--­e+T©ï\9x`wnÏÉì½B&Ì7Ø…}ÜoÿYyYbçæ<æ£wû¨8¸ÿ+˜°¥åšÂÛgNþ�^X…ƒOØssÆ>ñpû$›uò†¯Ç•S‡Ûÿ+�x=Ü>Dº|Ý¡ë¯ùÅßHfý‡ù‹€OOL®¨ÈZ2ê‰%w³1=‘”ëÓ“Rõv½;Ú7èãàâHÔêjª*vðˆÉ]N¬~÷…„�ÃGŽÚÇÇŠàë«_—yjÓÚ_ŽÝHϯÉEží¨bÕc@»ìdTñÓOÉ’®\¯ôÕõQìßL�Ïu å¹i9¼ç€¡‘™'¯T&ŸØ=¬ÓlclM–?|âþ}±ÊAË{™\#íùÎÚu²nžÜ±~ñ[K¸usûÊpFw~Ùø�ö—P÷_tà³~uÖWÝÞ»hÖêÌÞ –Oð5¶•÷÷º_ËžþbŒ§€¯ë^ïY[zϾìÎÕ¿7._³`¾xÝ÷Ï{¢è7Cì +b .ßk+—Ãï¹o7×i5]G/^?úÁÿ…¿µqcÍiÎ#?_?ò^5Êà‘o�49 ïYèüÁ+CºÈ R¹×5ŠÖ_6gÿÁKê³i}z»¶¾0NA�Öš‹—n꺉*®EÇðNCU$79¥LêfepÁܧ³¯t{FV‰÷ÖȘ²åL”?ä·R£ÎgY‡÷ðiLCO! ×ëM:ÉÔÄܽSˆ»‘4Wœ·2­Û‚MÑ{ Šþmìt÷q!!eÇœEq}—|<®ã}n Ç£:¹Ä m>ëäO‹ÿHçlýúL{g¸Þª�( gw«]û¶e;Ž]ÑYáCúšÏÚö§à0îÃêáR¢è=nè–~ýø3ö…§;Ù‹+sSJœžÜQ*ë5iŒÇ;[æ/¶U\Ooè¡NSU™gžùó²àéeo¦Ï¹|»ä 9Ätý"wOø}Ϧƒ6OxZ±yYµW{˜… ÚiÚö/3˸î¿©ƒ¼ÍKãö­?®qbKÔ'¾¨YšnÂå-‰‹Icý'úŠj%ÔµÖÉkc÷þ|Càeg!”¤EïÞx‚fD:2ÍtFÈ9¸á�üί>e_˜t«ÀðD�»Jb*µ¯å‰ÔέfA>_¡àˆÄÚÉÕÆœÇ9Zêîë,gÊÓ/îÞt´Ê÷Õ^.˜â7«A%iÃ9©û¨E?�Â8´$âN½»+÷ü¥8Øÿ® H:à°g;ÙË·¦5�†ÍXö…âû ­X°¡,í¼úMïû$H‰$ðÕ¯¿V¬ûé�ó6– b¹­KHwËzG_ŒW%*J:þëŽ5%ZNæäùæì‰Þ,˜¬Ÿñ™4ÿÝüï~Y9{g™ 2—+Ýœj2}Îkø¸®¿-½0q�ë£Îsâ¢Ï*—}ÿÓÂR�È—ÏîÄH‚_[2�Y½y͇;‹ub¥GèèOÞzÞ‡u�%#ÆmM–?T#Ÿ‘zG°éí\wAc�3TS–{óïƒü�[&˜)Ý:özç›WG¸6Û>9îfUiéê7ÎÝVz~ÝÆ©¦û ¦åÔt#*ŠnŸÛ¹ss†Z/V8û÷˜öÕÔqp"¿yC>”²„�סPžÒeéÇ<ÉÔ›wiûD�9ùX¼X]{}ÕKs³^Úôù“Êv?ûóÏ�}ðX\Ö)¼Ý"{ÿOSªýmpg–àò=AþW©Ì¾•Rq¿w@:fY%®ö@�úAÉGä>ýàÒ™9Ç�gf/zÞW„A”|AÚ%¬Ï‹?|〠�—>"‚ Èc"ùç¿Aä1Éòq{Ai÷’O0ÑG�öIÕ±í ž=ÿ~È¿ÛN$ñ²Öü]þìÖo;†L—‡ @ ËÒ�=xŸËGªN:“VêÐgx„=®y¤<.Ïå?Nàsù­Þöý\>6Á-¤kÚ’œ´ôm­¢ÊøÏxõ­¥Óõ�µ·úäƒ?mܶçäMu#Þý­Í8³eé‡o¼ú /Oû`Ùß‚WA�¦6ûðØ>¤G5w¢ì;|>6%§¤ $VŽ‚"†ŒbÓ¬­iù©eo®»(txö‹Ojö¥ n^»]RÁÇ^K©|ÒÕ²íÌ�´aoµq;–¯=�ͱTaI5"©ä̲i÷»ÚPÙçvnÙu*.§Bbç9ê¹ñ‘Îâúʶ¥ù>ïç„{]!.à¥åskÙИS IDATïó&¨oûï_Ç¢Ò 4`®r Œ1qDÛZ?.}ΉUÿù!º�qóùç£jooÚ¶*+ú¯?öŸ¾–’¯ [ÏÐÁÏNäm‰“p‚4 ò˜J>-¾´añªÃÚ»Ëõ©1g¸ ÃCš[#åØ+šqêÿâ‹çŠÝúwkcÍt›õVŸráB®d‘o.}£›% e'O5éÝY´ìêÏ_®9šÇ³sV“yíà÷_–Kþ3µ‹e¹ñriØVF5š D¬°SވƩ¤÷u?4I§ÿ‰¾Mä …eyqnbÔî•y¢ÿ|:Ü™©®ùúÖeë£ jì¡X¶¶ñÛ–|÷w%œ™§+ÍŠ;¾é­ÕÒ(ú‚4Wõ?ɧ%Q[þïp†ÌÝŸ˜üÜ�`W+®2?-> o¡(vÿŽß_N*Ô™ÙúD ;~€·%àÓÿùaËѤ¬u™FK,l½ÂŸ™4©Ÿ‡yM ¬OÞ6ë…m\ÀóËç Véÿþuß©J;Ò1ü9¯,S¶´ìäÒ7×]¡žÏ~ñÉp'!vÓ{‹YöŸµjJgδ3õZñ—ÿØôÛñ˜ŒR^"S9GL~÷¹0ù:Q¯·‡úåè­;¹…e‚XÙ¡Kß®ViçN_O/™S§�“_X]_|ã¯m;_º]Ì[ØùF �ølo7³%ɔՔi(ÐÒ3+¦Ÿ`Tƒç.òxÀÕ'Íãw~¹òP¡ó𙳆yÕMÔiÞ©Ý'óyÆù©9ŸLöHßúÉþ{çìž#CÂ/+áçyréݪ<‹�Û†>£Ò”k(pã?ù°_M�jâ~»ç†ãÀw–v“(­%„j.¬}ï»Ó¥y9ù83 äŸú¿µ‡2‰DÂTUݵÝÙ°mÀˆÉCIa§g¨HÎþ%s¶Æ•ÆÇ¤ñ�-ý›¥êkþzÑjø‹ýœZqžOÈ¿´kW‚ËØ Ý•8›ˆ ÿ�ݯ�G¹XB‰ÈÜÌWú8+-¥r÷޽útT ±[—|ùëɸÜJ""š¬ÿløâ«=©:òo^ŠMÉ.ª ™™Pš{xýò_cªjõŸDr[GGGGÇ’À†m�ûjÚ™zŒŠN­_õgtZ)«rvVqe…z‘…1®×Û„è˜älµ–³”rÚü›'wnÝ{!µœ“0UE©ç[µ)ºŒTÆmÿbéöS·Ô¬BiQ‘uãÐ_ýp®¸¡¬¼!+ÂYªíåò «BöÕ Éꊂ›Ñ1÷- š›±)zÊ8tíécN̼º‡Ø±”OM¸Y˜`¼<õ^U¼ Û[”–¨K)m~b\rVIõØÐ}nprkíÙµŸ-˜÷áûkΔŠì»MxÚ Í|Ößë6G[u}a|èÝþIãl‰UÄ„†ªÄ8ŽÂZ«¬ZáK .íùíŸuë>«+d�Þ±ýhR¶¹ò/òØeù|vF¶žëÜ)HEŒèåé݇3uD9ããé=dy÷ñ¦«Ií»<è�ÃÞÄnà¬/Ÿó*>ôåG›b /]Hz¡c`õÖõéë�r®ÇÖ¸x›t&¼ž¦µ('WG‰8püü÷*Yª×S£¹1Þ~ðåd§+k>üît‰¨ó+Ë?ì£?òÕ¬õ×Kc¯¦ðá�ØÂÓ»ÿÎÔ‹|&,š3Ü…+8ú͇ÿwíâ‘ …Ý©L'ú´«êÏUõyó‹ç|9 e'tUþÄ„¡' œôv`îÀ)*(¹BÎc¥²&�%e/W[M®©Š”D·-J‹‹yJõq|óù„•ºFNzýÕ~®î÷»¡-LONJÕaÊò²‹*¨³ˆæÙø{l¥ªïŒWzò?ÿ|7ô�²½7žps×êßãuŒª÷È~ŽÍ•|!gçÛ¿»ú@wQñÑo3°lz<ó¢6,[³'úN…Ì#rìÛ3'[ å·þ»võ֣׳+ÍíûMzëõ¡>RÒ8[“å‚’ß|jZRcõ·“u”ȃû†«8Çž=ü¶^»¨IIÌä#Ük륵·—ЉÉ,S—M[ó×hÛzœ w0]½KpˆÃþÌŒëÞïTD¿!CwsmþU&RO'ö´Z¨¬ÐcÝ¡ƒ s=£¢¬L ©‰É:Jé­m½²­fÔ¨ ·€•éÔ×cÕÈøÙv™ðFãý _ÂT9s¯*!ÓÔíB,Ã_ZàQZ^œwçfô±#—ÒNmXcÛáó±îuÝ`\G/Þ0¼J�yiתuG“þÚ¸/|ÉÐüí¿ÇT(z¼61DF.šþ Fl¿œäÍ€Ptuë²ÕûS*åAß{ÉÈüL£‡ó”}ßYîU&ðÉ»­Šï:söP7€‘»ÉÈ^l›†>ù×… ¶iúMÿø ›ô½ßÿ8g‘ôÿ–Žp$%§¿ýpyLÈŒ…kB,sO®_¶ì#Þæç�zHa˘*Çh#(ùkgoÇ�|>36®p¤‹ 1Ñ!h8p"€ Ô  ÷þÑ4[†:�žB£�©ÏJì7qþ<—¿ö8~åÖ©ßo]¸”1áOQk‚·,Ë*<p"€R @*±[÷Á¡5ÏÛ32_Uý= z¬ôÆ· ®¹•‚!À—¨KP±‚º ˜a­¬­�—×RP“¶r"–ºxY@@çˆ^¡òOælKÊŠ‹/¦îŽeNbåÖíÉî{OìL-H¿StíÒåRJé™ï¦�¹{Jêïsg–Í[ö|W¿­†zË è҆ūŽd ªðW>z½ßƒO4‘­O°-€ž=%&)ö~!¡þ†+%$ÐÜCŸOÞ››[Á©|"Ç¿õîØ K¢»ôÍø'ü¼úYg@ÈÚñÖsÛ¼–n/¤ô܆e›ŽÞHÉTkŪÞ3×~<Ø"ißÊo·�Ë©Y¹ôœöÕü§ЦùqņƒW24Ç@oq)½{ é.œ³þB¦ZË)܆½þþ+Ým™Ê³‹ÇÍKóÓO/y2 $oœ2e_çeÛf†´µVJwm÷®›‘+f�é(è(N�<ï·= C§yߊºPâ?iê¨Gü<¦%�vìz:ßÝñô’×–Äôüì‡wºZ˜´5QÀ‚´�]’X‡„ûˆÕÆîX¹éÄÍlµ¦B£ÎI¾râbº€s÷öZzõø…=è²NŸ�×QbîîéTß�ˆ,Ì9|Azf z}¦EÅr…!÷VâýÏ­×çŒi+З•0}Ÿ�ùÅ·‹Æxs´*ýâµ\¡¥¼­íž‹›+K¨¾DkÓ}ظqãÇ�5¤ÿ€þ�ïWBBX€–VÒÆ[™v•Ï¿¼síÊöÜ(ºßobáíïÆ!;útR%­JŽºšÃÖÍÏGi¼Ü[\PS•)[os}QN~omáíÔ"cf.®í-JŽI+ÑPÍíèëÙ<skk‰ÔÆÅÍÍÍÝÍÍÝÍÍÍFÊ b+Gg«ZŸkҖГ~8’¥·êòòÜ7RïÆÌ½ß+ó–|ýù[ý¸¨Õ VŸ×Ôsnqüé3™ÎcæýíòÏfŽ QBÊŽ/–Ÿ•�¿òǵßÌyáI´üüÊYŸï-ìøâ‚¯¾œû\˜eÕ½Y¢ì4|ú‚oÖ¬]±p‚sÒÖÏל,£ é,N½|Õ°DƒÇ^O“t õk{Y‰�[dÑ©‹Ÿ¡cѹk›[ °öÎŽäöùs™:òbãr�A®,åyÞð˜Œ)[½©:Q£ÌòNóíú¿0.zñÖØÒ¤Cë>;TSlÕGÖqj¨uäðþãe�Yýþ¥ œ^S©±Ç“Ï„YÔ³jNäÙÑ×ììÕ’s«Þ�Wˆ«ÌzÎ^<Ñ»±WÀ'<Ìúø±ÂëfÍøÃB(»·��Ôã ˜´ÒßÞóé¢Ã•*;¥¹>ÿÄÜήîxðÃx['�½†÷úûÛãy7Î�¾]fN*Ë5’^³VL ®ûÞrÆÁÙ�#‰åQkçZH–N iœ•IWÇ3‡ýód&Ïå;„¯;îÉ8ôÖýàw§3þúÏGY¾¢J`”=‡÷¶çdFËmÒ÷/»W• [!å—Å‹©Íå2‰P¦.­â�µéþD¨yÚ_5nôŽÝþÕ†Xba%kK‹5Z b×þäÞÁŸ…Öd†Ñk¦}{FïøÄ[³žÖÿ6§![1Í?ôj¶*iÏ—I{MŸ7Ú»~´Dî×ë‰,@°*#júÁ³7õÝ‚ê;ßÒ³k�°ê T©¨d]CÂ|Ì| gÐ’“»æLY6kŒÁ²Ä¿Î^¿k.õŒèå ¾²ä#¯î�IåûI»ô æ–�9_<ò%©Š¿–@‚¦w2k{MˆPTP V*ë»÷žDe#‡Ô‚"Êø�|oÆÕ¹«^{ùl¿NÂ¥3šÑŸ.Œ”�¾óï[ýó4aË›ªìP¥�–��Çòå¹b·§f-ú`â€`K1Çpb©ÊÕ¿[O+ž±è8yάq=¼Ub¾Š7³óï;yöì1žâ††z½òúÐ`g£-)ÑZHź&tÎ̓'Ï|©¿¿½”jŠKµœ•½G`ˆ—ЍדV‚`éà$ÕeÜNϧJïãÞ~±»Œ´˜·ud"ìåù³&ô p�1Ú²r�ØÚÍÓF¤{à‘‡A¯¾ØÏß^ʘË\c­LºÊ8têÒAnfí¨bt)ü•�¦?ÙÑÑBÐR ‡ŽONÿèå®rb¢œ­S• [�¨¼üœdD£VkˆÌ1 ×¸÷¼&«cËË=B|œ,iyq‰Ž³vé4à¹�f�ö6yÓ0�±åÕEj€òš¢œ»äæ—êZ}ÜÏÁÅ�¨Õ%Múá:�˜Ü¥lç»/¼óå–£·Š #"|zRªÞ.¨£Ñ=–u™§~Zøús£‡yḟ»Òy­V Īǀ0öÚɨb ú¤+×+ý"º¶ÑlÔø¬›Pž›–Ã{é$¢Leò‰ýÑ9|#mM–#HKÞ¸¸Ç>‚´WŒí±¯¿¶rą̂Ak6M­™Ëß8嵿»­Úl˜7.?4gøWâ…û?íyãÛ ïÇŽÚ°ö9÷ºsùéuίnJ*îDøcû޽J}¦|½ìy6fÍóo�ì½âç9ýõ•“f^±aíd7HþyÚÔ_˜¡ïLâgMÒ÷,þôdè7Ûg†r@KŽ|2i‰fú¶/‚öM{íd¿ÿ[÷¼{ÛËJ„ÔŸ§¾¼Ý{ñ³»‹4‡ç�øOÉômËÇ/ž´¸tê–%Cm€Š˜u3ÞÚçùÙö½,´]Öõàtcåߎ±»/¸Ç~«ÒŽ÷Ø_Þ9˜#„Áç"b,ß·RZAvZF£Þo@Ì]ÂG½õõúoÆ[Åíúï °n~^✋ÑF¶‘Ð&Ç' �G¾2¤‹¿§§�¿Ë½A("�Ö_veÿÁKgΦyôéíÚ&G!§ @kÍõK7 _­âZt ï¨"¹É)e2W·êÍÌ}:ûJËs²J„FØr&ÊqÁ>Ò²p`òÑ&AgÉw‹ìí±ñ—µK½uƒ½e�•lj³!ãÌŸ—O/{3}ÎåÛ¥ WÈ ²^“Æx¼³eþ'ðòð`{QÅõôŠj{‘»§ ü¾gÓA›'<­Ø¼¬òZõš… ÚiÚö/3ˇ×A�6@eö­”r¨ˆûý»Ò1Ëú£Þ#H CÏ—ç"ÒæàÓ.�¹1‘s yfö¢ç}EiyPòi°>/þpðEŒ‚´&¸>AAÉÇõú‚ ò¸dù¨ú‚ òXH>‚ 푪cÛ@={0þý�·�H"H³!Óäa¥ÐåwŽ=xŸËG�ÿ]þ'ŸËGêŸËoíð¶ãçòYB0ËGA�Ç”|Ay\$7¹BA�ö�a+‚Kö¤ýáäìrãê%ŒC;»¦€—µUÃÛî%0×G�ö‡«{ ‚ 5TÏåcŽ� ‚ íZ[òAiߪ߀äs"‘N¯ÃH!‚ HG§×‰Dõ½-¯ÉW(¬²22PõA¤�ë}VF†B¡4qœ@ƒ/ϵµ³ÏÏÍIMNÔéôPAi›ˆDœBamcggü0 ¤É'„ØÚ;ØÚ;`4AäŠË÷Aäñ%AAPòAAÉGAäC€ òoA)¥·?`˜:)(Ï  !ÆÊ›³M>J>‚ H«£×ëKKËJKK+«ª@ƒØBš×v··®� ø×.9…a¹Ûûá ! Ã0 C±´´T©TÖV ‰DÒÔ›‡Ãî%‚ H«’“›«V—XJ¥2¹ÜÖÌŒ!uÀøÀÍ„øûJ† ‚a©îQj~C7Q£ÑÄÅ'Èd2/ÏMº…8Àwê ‚´MEQQqŽÃQÕ& 8°_ÃÄ!D¡P( 77·cÇŽÙÚ¨äryãUŸ1>ª>‚ HkägjµZ.—£Þ#-uGà8Î××7¿ °±†5Y>PÃæ»‚ HËB´:�•B��h†¶aêG©Tfddpœˆçµ#~­7éalAZ�RAî[‹Ž -Ã0z½žmÊŽ5!‚´b®*˲‰f„cP?,Ëêõú&�Ñ£ä#‚´"<Ïc–ßÅÇÁçõ›ãt:]“…’� ÒŠ`–ßlÍGê‡ažç©€’� ÒfÀ‡ï1Ëo•û (Ã0mÂÓŒ(ù‚ fùÿ³!jJ p†©1aÕdÇEÇdhðD¤]·ueé—Ž^H*i múïü¡yç¶,[{8ƒÿ·hŸ&‡¨›Š%œ¿ðÏ!~ÈÐ`@[’›]©ìÞ¯�-§+N»rîâ±(ùÈÞNœ‰r‘>÷ÒÁ)²N‘O÷´¬Ì¸x"úH”ldo'_påбXÁ½Ë€p; _^Á* ÷)£ ~º¯¯%`Í8SæÚ¬óO'K|ÂE*MVÜ•|\èˆ H›£2=>�x÷uW*%^WŽÅ§–»ûTîkKr³5Ö}{Ú²|iVlôå µƒŸî¨dë=tOì\�¸ÛÙ¹TaAªòóÕ¬C›GÙ¶®âÇ9‘+ï5e˜‡Hà…:�Œ:Y¾öÖöÅ_îgzO~ûyWH;öëÖ%Kª>Y4ÁK,¤ýwÍúËÊñï, S E¥¡P¿õ‹åglG¾üÑTUÙÕßܸt³Ý7ÓC-ZCñ›(æëºXåê-±V¢Pmjl¼Ú:lPd€‹­­«_¯AÁÖEñ±éºjWˆÈÊÎÁÎÎÎÙ¯kd�¼23£@0Y^u;>¡Ü9â‰`W…µKPÏP»ÊÔÔ´©±qEVaƒ{¹ÙÙØ;ºw°»Û…eͤRKK©¥¥ &Í+Ó’5¶]÷pµ³söèÜÙÕ§icÐÒÔ[w̽ýlˆÀ:ú{Is“’Šî>£M±•ƒ���­“wÈÀÁA²‚„ø;úÝCäàîÀæedUÒ´¼bçhûh¿׺ó…w2*7/7–9jø| T(¿°ç`¦Ç˜™Ó†„†=5ýÝQ®wì½X”/-)¡R—@/77ŸàÁ®*”]Ø{¸(xòÛc»ùzx‡�˜:Ò¯äÂÙm‹û_{ _Û˜Ë7Ì›;"¨ ŠxK7; ¾ºo%µs�êÓ J„*R}©«ß”l.“A¥¶fõèåBIQ‘^WvbóÏ'ªÏxÂVêuA!oéfgQÓ}«uÑš4™4/-R –î6’jÏC¤­!'¥(½{*(•§�u\BbAPĽ }*ÚLäŽN72 Kw%1}¨vK)vqw$gÓïTzy‹‹ròô¶þ’GÛ¡¡­Z9 F—èJ(JùŒ”Ô*Ux  ð `ä¯Üq)9KßÍËwàÈNQ›}�ùÄ Áý#<ä,Ÿy;­R“·fê¤ï«ëâõD\¤¡TÞ*YcMç¤kÔ ½ƒÖ’|b!—‰hNAïíÀY¸÷Ê^jr¤�aˆÑ7(Ö”báÙwXð½Þ'á$fPxßG ÓæEÕ]|©0‚ m¾ 9±H_½ëÿ¢ïµiå)Ùa¶Î6ì‚@ P£”&Q±“—{"%³ÒS•�YaÕÁÉü+~+J>±v°“ñ)iÚ~AbãlÈ) ‚@«Wsò?”RÖeÈœa7Žïß»ïû9{÷�Ÿ=o¤CëÞ3æ�öªÑ="QH[éËòûÆ)~kgù¬“§»ùí¤+‰þƒüuDŸQتØ9Ù%TeE@Pçd—‹”¶ æ�9 Zo×€‘«¬Øë…Å:sw%Sû‚ÉUÖì�œìAeu¯œpZ­¶FÉMš+lUì�¬Ìâ`%Ná#ÒÑgß¾­± ÙÁìnQEÊÉÿÆ%§‡8wx@ÆJóó4œR)3ÒÌÖ:TgT”rÎþf““³ª2ŠîÒGûýZ÷ 9QÇžáò³§öì;ØQô ¾P�R Œ£§‡ä@|LïåÈŸ_(qïàÀ¥”ç9›ÀA/tìÛcËœ�OxÆ+ÈÁÍ•Û;S§ŠtâjIJk}ZŸNWæ.' @�>õþK-ê #·³.M¾›p§\ ‚®B£Î˺��ª±rPÙÊiÚ�k)eb©H¯Î¸væJ–EÇÞf 2÷fB‘ÜÏ×Ñ‚€P”z#•ñvST/WY[jSbc’‹AÄQmYQö�\�BiÉr ©.åÆ�5‘ˆ¨¶¬ «˜*]NÜ­Ìr±¥¹^��_ei­P7g2šsíV•ˆA[^œsçv¦Þ>ÀÛÎ ³~Aš”ª*•Êßf_wçÊùÛ’€ž�¥±ØðÇBÆgÆÝT˽=­¹ª¼Ä¸Ìb-pÀWgÞˆº–%öíÞÍÉ‚ÔsHP§Æ¦—Š•v¶2 • )×âSŠËd>á�lÄ­¨‚‚|[[Û:‰x«>PM8GûœÓûöýs5Ÿ'BEi~Vâõ³‡Ï8ur7K?sðB®¹G€—£µ³½öâŸ{£òÌ­-ª2/þ±á÷XÅ3S'u¶f„œËÿDgTñ•%¹)×£¢bÿ§Z™Ù[—�ÿëÀÙ4j!áËòïÄ_ºYé즵ôW!†aSRR\\œ™FÄêÌ÷k ­ø\>5sï=r„ýåK ·¢n—ë(#¶°¶w ä)0ÊÐg²§£o=RfJ��!=ƒ¬Is&Ì)c>l ÙÙK çN\Ñ�HjÝ!ÂÕ DÀØu6PröRüéc—ybfåîäbméÑÇ÷ø¹«ÇöS‘Ü9ÌÖÃNbÜœeè°Á’scοZ%0©ÂÉ]!F½G¤mP™q;�·‹p–ÐÚk�Ì\;ØDŸOI+óð°UÙ7NÇ”ñb…sÀ€žÁ¶D¨ÎãM"–ž¡Á§c.'º:„Ù1rïÎN7ŽgÚ†xXþ ½¥ÖýEøŒÅûíÚ}øÈÖ3E+Uºx‡ÑéÁ©×Ø¡üç—Ãa�&ùxŽ�=[¼ù—=«¿(…{ب�^Ö�¥”êÔiQ{öoÉ-Õ±R;Ï®/½>Ô�¡”Š&ÍÿP¶eÇÑÍ˯s¥{÷‰]{y›µb’ßøñä5YW�R„ï2޶BOŠaY–aîvA¨ ðz=OÛ•!vIDATÃr,Ë@^¯ç«ïZŠŬ Óê 7&+’pTW¥L•Cݪ€ zÃÔ-§‚^§(–ã8† TàuxbÂÜà¹^¯Çe|‚4žn%&z{yµtÎJX±Dú*­žÖM^ÅôUZ]qìþ?S\†�wàP*ðz]uÛFÕ&F$±DÐVéšwuïße¡ãz¹ŠZµù»™øÈ¯a U-�x^ À°Ë‚P­„eYÃ9Tày^0H,a9Ž­1ø}¨u>Ðj‹÷›B‘XtäÈÑná×pöþu§P®U³|ƒRòz�7~@gìåµUµŠy]õ¿L•×W•‘rÊëu|#=1QŽ ò¯Cym¥±vK¯­Ô×mP+õ¦*0vˆ :m•@_^X¬]~ü¹DQçA®âGÿ*[ú(¶»¥ÆŠ×ëxý=Gô‚`,Ô:­Þ¸ãFÏoùîÊÝ}hÙpAù_DP§Dí¿QÄX:ø÷ØÙ ‰†= �xŠmj PòAZ=a%�øíĺ󨩡5ãó�‚ HkÁÂ0 fù˜å· Þ“»›Áëy=Ëq„4aΈ»›áã63‚ -¯\R©´\£±´´ÄX4QÛ0FßðT>BòóóÅbaHãÃÉþ» ‚ ­ÑB[+ä‰É)*¥²1û¥ ÷BÇàNìÿT‹=ažçãââCCB¹‚Ïð> ¼AZN$²±Q¥¥§›››K-,$ !„aR ŒÒƒˆX(Pžç©@y��RZT\œ““›••åäè¨TZ7þþ¡@ñ–Ci%lT*…B‘Ÿ_ .)áy^¯×ÚnŒLí¤þ¾‚Í[¶`T y=Ã0†>¢a{+++''Ç^=#¥RiãÒ#¤f`AiÅœ•ãì1�çÙ ã1F{P½Ç>iêf¤fÅ>ª>‚ Ò†:I"ØoѾpAAÚ¹ä`àî?‚ ‚ íXó«—ïa4A¤½"f Ô°|�T}Ai¯I>!,Ã0¤z`‡öA¤}Â! j=‚ ‚´oô¾¤AAÚ­ä0ÈÛ²H(*¥” @ úŸ@)€á}Oôn¹áù} @kÏ4î¹~Úàh�1’j} eBi _· ÅõE­µ®ÆýõÓæ»Ô/iË~_Ò˜O!-OÒÒþ“fƪ…n!ÚÀù-} 6õ-š¤)·iÝ`QÒô [{@³y?ø‡øD"bY ”êþ!¿/yØ“i‹iÌG�‡ý}ˆ#ájíêOê~ ¥e:mÓ.µü!Û¤�ºmTõÒ{5OÚþÉ1üÍTÿBC€#µ¶Þ0 @†¥P£ô´®§´öw!@¡ õoûC�²õF•ià6&ÆCIMÞͼ„„¶r“Ašÿã�ÂFï½H¦!0ö)-+ü-Ø›ŒžÉX‘–t‚4¬ú-ði´ñwKÓê'�kë_yÃFÅ]Ñ”\¢÷3,2.Òdç9¶æ�6ž¤9‰ÄC“´Füþ%Ò‡jR€˜eYb2p<½[Òb�idpˆ1½Û¨-ü52o˜¶¯ž¼7è}í�ýêhÕ¨¾á߀Aø }i @)�{‰~uÜï‰)müå®çÎ#Líg¨�%�™…hò~‚M¾Š´ /$jªz“¦÷IËþ~š „ÍU}ú°N7>-'™ÍÝ�š6©i4¢dMÍõI3®Oký^èC]Úá§Í¸�šú�I+� !l³T_İÊ’éDâ¨þç¿ÍmµBõ% k"‡§ å…ûbÛ¢‰ ­?¤ä�/Fj =ªOîæ÷„PC–ÿÿ�Í®ÅÍ”ÀIEND®B`‚timekpr-next/resource/screenshots/timekpr-next-screenshot-icon-system-notification-area.png000664 001750 001750 00000057307 13716566163 034570 0ustar00bezvfedubezvfedu000000 000000 ‰PNG  IHDR€^³f¥U OzTXtRaw profile type exifxÚ­˜i’#¹ …ÿó>7äq¸Fø>¾?0³ÔUÓc{&ÂÊ–R•ââíö¿þyÜ?xŲˢµ´R<¯Ür‹�/Õ?¯v?ƒÏ÷ó¾ø)¾O~>wõý%Öw¡ðYø¾’ílß×w#yŸç!¿ µ×¢Òª~7u¼ Íwà5å}ç�YÏÍþv?(^ZÂF)Æ�Bò÷³>¤çÝy+Ÿ!‰�ãêIRtÜâ‡ü8Þ×Ýûïúáä¯oî�Þ�òçÎ�ý‘þàËòúˆ/úC�?«Ic‹ÄBÊv…5µ´R¬·K‰ÇñcK¸û¶»ß •�W`h ,.ØÿárÿíÇ¿s¹s¦¹(Ül”ë+ìŠטaÈÙ'£$œ7¹þº^øý·À"TAP®›+ì~´µ GÃ8Ô—9ë8[ÛЭ"sí¬é /gîA¸ˆ{÷ÉÚ7á‡YõÎàƒ§ Ö�')~oPi!¤ÚÒ�ÎÎRì}l¼û5�ÅүžMg2œßBúÚÝ6÷¶�~Í®†\çÛôÓRxŒÇôɘ:ÄOØ¢Í^Á]kd ê9LÝ"½wÊ"œR_2edI,ܳà�”FÅUÂm¦ê6HV¡xÌ57ˆ°=Tˆ-Õº…X&âÊî±n»xúèØXÏuJÙkæÐuªªÙ)½ž2G,«Í™¢AäJ"‚‰3Ú¶È¢¢‚m§!uÀ­¹w�ƒÂøQÆQ"wJ{糃TŽŒ�æl‚÷õ.'¦áìND�±»Y·÷‡Ö“p™Až8Ê+�ËKx‡ZÜ$ŸÕÂÆ*DÉÇ>êZ“¼”ÝjX¥±>Á�3£RV²lö[�}[A©ŽcwŽÜYx¾áÄÖ¯I†!~°Xg/ìîöý—áiu"Vªþ°ÓA‡,pã’W9àØP •ì8$úÔÒ2ègjïLäM˜RÞpbÀÀÞ“ÜÄ5×f�d�ãµ··³V ‡2ñ+°š¥æ“ °Å!¡àö-üGòàí9Dhúu–Ù‚�¸nïZ{Á¦‹aÀ Ùo)µÅ -Ÿ„6e¼e,é¨Z’¿åŽJI DòÞ$þÀµ1ŽHÌî&Û­9=µñR�/%oßO/«A@ÌÆ4Ÿ;¡[† A‘®eùr<š¨¹TÉàcæÖ¾Sîð¢Bxtô±7„ùuÍÕb†—(ddÐб\ÊDŸ ëôYKB“´;}­$OLÍ#£°§>¦=†=À¥“× Lqk �²¹ƒ‰ÜK~_¶Ýb#´^\>•=ËéøŽœÛk026ÝGI‘näG¬³izüe>þèEÆ*œ,0·T@„v3YÚ-:n¨¶›®9ÍÇQ@_WX~/ʸÛKg\5«©Ãõ³¬šB±Ÿ±0k– ÑÍDBC–!»ŒÔæÊˆÄ@ƒá­Dä5f7)ƒ�qƒlê‘ o5¨ÅÕ†]ŠÏ®¬£FéABüsÃAZ)µ•SZ=m§Pö¡e$ÒÌÀXT[ò}´‰Gª2¼9¨²bºzc-‹edžÆ¦D$Iß"ú<�˜jbáΚw´àŸ}81ÆÑ›$zð'¶z~¡®’áÔG´*8Rwªì4s�è@PpÚÙ‰2Ävó.Í@6ÖíQdIjE*UD ½4JÉ/RÐ+¬äV��þ ŠWS7|Ñ Æ\{0ê¯Ks&•:Ù1IÖ&qæbÊ ºÐË®™S…Žê$s Î´Eü\F¼m0!Cm�XHZ/Y4F=È OÌ  U#tNñˆ˜·@ïbõ›#³¬eûÃHX¾lj N¡iŠûS>=îM ±�ÕµbÒ)P8ÖAë`)ŸQƒÇâ»°à&ˆ´-;òFùÑ ¦†S¡•ŽJqHµÖÊ‘ÁP3ÍÂÞ‹rBk„[ÒÙ©‡jqÌ[™F®Ó]€z^úÞÒ‰±Þ¨l™°‘‡�ÈŒ0wBJfíµICÅŠ.*�Žr8+)µNæ­H»ÜBy™5JolÔ3 [ °B÷XÍDØ£PÅ•Àžº8X+—û¹çöslC-"b°®²Ù“šO}`ø ñì×åÞ8b­m˜è̤%…JÚ(ÌõPù“F³ÓçJÈ™ µ{JKL¡wÕƒ‚¤ÔY{_IÈ“4 ú£’ø(På¢N ï%”tØ]Ѭ¤ŽmÚƒŸ¯ÀšÉÝ}”>WM×N"[#º œVž)mS6=1)ŽD äMésPZ"–â¿Ä¿8ö_ ­s4¸õk¡žR¬€FH­;ÕHÞQq9è0ŽQšrâ�rmºŽ�¬Ö\‚;ýþ§K©}e“éÕj2\S‘Š‚{±ÎF·@-Éb‚P`Ixºì�¨mªˆ·Zæ7T�Ù¹œ,[M†.ú™J{Sà*tOÎ~:ã’ÐA‰9DNT_GG|àÚì8±5QU)¨ˆ|N�+»7Ò/ÓÛ§S4bå4�æ¨}• ךäE£ã2Π“b¿\i¦é€ •‚Š®-S„èT4…À”“vjºƒ  Å¤·.F÷‘�ª“ãÕhˆ‹FsUdÍA)Cs� =•µRô!ä3lÅâØ2Ñ´Ý�ÜÕt-¤iG'ÑA.�^#]Yá KCkN L>+7*ZvccF€Ð.Ðj8Î÷±ã´N€à3p¥wüM`ú“ôFG‹‘mà⺣){Àå0ødȦìJAšB©¼ŸÑ7€è-пêõÖÞÇé�£®27ÀÁ!0Z¦ì5Ÿw÷u÷öï™v?n+r¥¹ŒìbKGDÿÿÿ ½§“ pHYs  šœtIMEä4m½u IDATxÚì�wxTUúÇ?疙ɤ‡Þ›€t©*¢`ャmíuWwWºkïeÕ-ºöµëÚÁÞ@�¢"½„ !=™¹íüþ¸“É$™IfB(êý>�Odι§—ïyÏyßWœ{öÉE¤÷9�ýÛëˆ%“XR•�¦©)‘LGJ¤#‰•Ð4UæÆÚ þ·�…K)Ý\¥l�_íw DÃ2'¬~zuÓŠÔMˆ8›bcùyhÐé 4„Ï>û Pÿ“&Mâ ƒæç¡(Š×v{�üÝrû} ÆúÃܹ[óŒ7&úLUU%ùë×î2Â�Ç£<Um8ý~?‡vD”þVx‘&=Q»{„üY–KÒ†‰ã8»È�ª(ø|:þ€-�„Îvl*ØŸ¯9ŸS³`ÎK/0¥4›�ï(N¿ë8Öœ¨t%óûpËøíØšJ(fÌïÎáXß–üü!‹œt)âÛv0LÓ4Q…€ßç’LÇÁ„ö㠥DÂ%š>]o”Y¶�i˜†‰mÛî¤iø|:º®!%˜füpMÓp¤ƒiZHÇAÓ4t]‹.æ¦i¹å²mTM%à÷¡ª*–ec†ûUUÝü4 'ò�tTÍmoÛ²1L ÇqB Ç”¯†�$ÊOÓ4�ÆëwË!//�åË—¢*ÐØž³uë&z÷î�aZøýz‡ˆøä;rÞØ�#Þa'™CO2ùÇ>ê²öÉõk7ñ„Ö­ÛpÞ—òä�Öi[Ó2 ƒ´jÝš;¶ïù»õŽûë´ýCÜQ'ü¶;@×un½ãþáÉäT›1>k~ß“cAó€<ì~8ŽÄ0LÚ]øJ¸Ìz‚¿üoJ@AQDœt :c?vñ£+Ù¿½Í×;­â‡/ ±£­ôÂbL)Á!rý!‘–C}þé¦í¬ª��Ýõ.¿ìp0'pÓÃÓ LSR>â6þyfkô˜2c.bö#/1ÙÌjpµ›v(¬¡ô8’“Æ eH·\2d9Åëæ³à‹�™¹Ý‡Cj¯ãâ†ÏئŒâ°ó†Ð[1q¾�÷–,˦,”K�óþÂõÃø6¾Î3O/$_ñQ¦õbÄ)ÇrÌ�.´ñ…©Øô=K&M`ÒêjªÒbl$=kÑ«¼´j?†5–Cõ¤k+?Jõv –Ídö—ß𳑅ÏçÖÚ4­ù=ûÌ"¶*jÜ>û­CQTü~?¶m¡4±±9¶MÛ¶mQ­ÁøtQ†ab˜&HÐ4ŸÏ‡®»ä»±ðúEÛ¶1L#ÜðÀ¡ªJäÀf`ÙVÌf/P"µ€ß�¦©u¤×Må/¥Äv,ÓÂ4MlÇAUü~´û¨·Å‘››Ç¹ç_BffV­Ä]n½ý~¦Mýš%KÑ­[òòÚPTTí£]=ˆÇJøc�%Ÿ‰ê{�7kŠŠÀ§ëøý>„P0-÷ë8Nt¬øt=zXµ,‹pä�«*îM�ªª‘g:Vô›Dki @�zð°'$€RJËÄ0 w±QutU mÓv% ší q¨øsSØ6‘·Þ¬à°ÌŸùa±ÀTll{?Oú‘Š‚P,ÇA¿ŽØŽSç4_ÿ+¥Ä0Mª‚ý8à„8õàöd+²ÐýÝoû1- USQ�Å[ØQåMÅ.¦Ün¬Ìîf[Þõn»b °±««ù²iÝïhNè(¨xè]¦v¹„;®?üÁw˜bgÓ¹ß@h&UùÓ²AU(@îñ×pí°4!#d3L¥Ò�¡W\ËE½$vÉÖ—ä񵂮^Þ™à¿ïâ¿ÅÑô*ÖAHëÅð1éå³³Ø ˜Û�®£Î¦{ë ž~î{¶© Ž#©¬ö7ÈÏ0MŸDo=m8bEƒ�¶±y¢ª*š®#³Îï¦iQa¶¢ëQ§qæ�=騤xå ¦ü‹*ÒQA¥Õ&~xe:>ÝG ¿’R64DÏ#99æÀ±sÝ|æö!Ó¶j” ûO^Ø_œ¥-†?¿¼ !üQ‰M£å‹äoÛ6Õa�Úå ÆŒìÏ€ý:Ó>ýGæ=ö&Óí,TUÙgׯ–@ ÁÊÉÉå‚ß_FvvNÉWÍß±ãŽbõê•TVTLO'++›�;‹v¹Üw{Âß…Üq׃�Ö×q†Ÿv>Î ƒÃQ¦¨îü�7›Æb™CÚˆó¹øÈýé‘¢bíl¦Žÿ�åéø~Ç¡ÂêÂÀs/àìA” “øü�Ïø®2�²¼S¹î¦±ì?ûn™ÂÞ’@�zð°‡ ëÛÞºŽ›Ãaªª:^ô<÷æ Ìy€^]�–$à÷á÷û.BRJ,¥?cÎ>�£ýÉ[}+/�Ä…?�ÑüĬ¿ÿ“wf“sÚcÜ3Nà›u7|¸Y‡—Z¦Å€ó®á÷=ÂX†‰íÓQp¯Á¤t¥†�´HƒüwoäÑ?~¿Ÿ@ ]ol£¤¯ÿˆ÷'ÒkÙ‡L^^Îά“¹áÁÓš9˜¾í^eÎÚxoR1û%Ÿ²³†¸º×³Ò± …-Ì�¿çº#²qª«qÒ(‘kìŠÖÃÓDÕlÞ¹õq&V¶gðŸþÃMÃ;Ó·oÌ­MOQT2Š¿â�§ñrÁ6vV…1‡ÜÀs7�$·U[Ú86[l‡°ac¼¢A~5m$¥'ŒGmÛŠ}MIË÷˜3–\â ÷ä?qýaAT»Š 3“ÖƒNáì>ÌGßçÛê¶´:#AøcãYTŒH$E¡¬Û…Ü~Å :Ž6ýŽæ¤Ž‚ÊûßbJu1…;üè52üdµÉ" I¨¢œêê–e¡ª®RUØ ’{JüüíL`q(ƒj§-ÝO¿†kFçÀÁ©.¦¸¨š°"‘¶Ü'ÞžÅJÃ’y·œ î¼û¡„a·ßù~ð.k׬¢g¯Þ 6Š9³§ ¦“ž‘AQQá#²‰  Ä´tüº «X¸ ŸJEÅÚÈ6Ë¡¼ÏùÜ|V_r¶/aÁ¢tz ?޳®¨ ìŸ“Ym¹R>cÈ\Я€Y¯,B;ãÎ8l.3Ç›t?ûP†góé7„ÈA“ÉÍ�zðð €¢¨÷ªG±QTpÿ¦gñ¥QÕšk ÷Âq\r#££…6Ü“¨Ë´°, Û²AjX1Ú¿± 0T…¥S¾`J`>ŸlÇÝ7B›H˜#%Ž£�‘•�B%jë~ôí^IIQ †pß²ÈF,!~½”mÓ>a«#PÒÒ"`@Z…”–ëô2¶Oû„‚8á%:™ÆTÆß=�¥ƒ*MGPšy$×ü®­J¦ñÔi\vù(2Ü ¡V•Sj�ôu¦W�L´å­h—§‚SLÁ–2²Œ©Œ¿k&â ahÕ¹ô½üÛÎG«NíÉ57óÓû_ñ�%p„IIúÑqó‹'UõàbÌh�¦-ä¬3»�tp,˱°-!cZ„DI¡âÓ—pÄ8?“§Q©²eÙ”¥ÊE£ƒ¨öf=|/nÄ ·ßÆïºÉ‘C?àËïGsy¢ð>à›Ígpã•ÓmËÛüï•y¬\ûïM*¢×Ï2yE;3OæÆ‡Î`hæ`öïø*ó–=Ï?~vFÕ!뀿ð¯? &­|ï¿÷#¡WqÍåÒmËÛ¼öâ\�æâ„åûˆéÓ²Oº–ëFç ×Å›ÿûˆyë+!-HFzŸoï+H)¹ïž[BpçÝqß=·î±|…ŒyS§L¢g¯ÞtïÞƒI?G"ñùü-Ò6ÉH ›ÇR:Ø2H0è lý†_›FqZ:�´ª¢Ða@?òœÍÌxúž[™A÷ËžãÁ£çÀ®Ÿ°rs:¶í�ݦ�‚¯™9çÔ�rd›¶Ðng“>�Yå~ô ›4.n~Ž-qðWë÷9œ|R€¼,‹Ãdž©ªÊÇ2lLÃ&²"ãN ù]åœÌôdå„9ùx“'׎S˲1÷ëEM¢nšÃ¢-~²ô�Ì_RÂY]3è°_OÌ�û%ïÝ“Ìô¡ôÎò£G20k6ëÊKÙ6õ¶J�"„s ñá÷»ÊX†aÖûsƹCÈ¥’-Ÿ½ÎŒŠtrú §w¶›ÞþÁoø¶kâüÛõêAé¬Î\xx.º,aÝŽtúw= W±jþ––Û8ŽÜkoæ+êýM]Š–1sÿ¶nÝ–-[6�‘™å*iIÐ4½EÞ!ºŠ"¡tï¾{nCÓ´FÖ_"‡ìL‰£ÉÙWv§`í-ÞH‘ôc™R¤ÓºS+ô•Õ”í,AŠ6´n€Í� ¢´3¯ÝÛô@ï¡�>ú�r8½Ê'óÒäBªÈ$ ãD”ßꯩ³fNHH§LNŽühžÁMöø9»‘¿2Éo •õÓ©÷ïh¸¬'¡躆ãÈzo‘$B€®–³ñÇxL×ät¤ëã8zø~ <ÿj*7ßÏ'e­Ñu�D{˜”†aRª÷ç˜+/å´î‚ð�/òÒÇ›¨öe¢ 0ÂFÜð*=Óp5�ǦºÿUœß_šù//!‡Ëhõ†�¥idäñK“ÒÕ?±1{²tZ�:•ÑsŸdR±‰0]é�O×Ð4 M¬cÉã`¾ Ðû4þpõ!ô<ájŽÿþf^nýç„ù¦�m[¨ªg¦>þVhzºšNŽ4˜H§Ú•¶¨>¤ô�ãGÓƒhzþ` 0:þ¤tHÏÎB ÊŠ©ÐttU¥¬¤‡LdNn£áääQôîÛ|ÖvÝ·}É¬Ò šÏ}doÕz_޽²æÀñ>ÓÊÒÑÒ„ÛeøqÕÊA|Á ,Át*çÀç¹éºí ¦í �18;qù²s1z `HÙt9†îb4£ÇÈܧå“BEÑ÷øøBpû�÷ÇU:¸ëž†W¶÷Þ}Ëî[c×.)§áï»x ¹ûÞ‡ÚiS'³bÅÏ\p᥃éÜïm ¾—hªEéÚø)§5]†àÑGsÄàÿ𯗱fî4VŒ:’W½ÈëW¹ Ʊm„MS°–Lbê¡çrÑc‡"*~äã99õwë'ü—>É#d¡n�ÆÄWÞáÛʬ¸ÊA³fN‹K§Lþ*iò‘zЃ‡=Jÿj®êHä’»B”ĉ#mŠp5Éê^ùÖ5âàH'bÆ%QÙêòňÉÅÀ.ÞÌvËÂÌ_Áâ¹?²ý–¹j¿nôìáÃZh¡("®‰ )%†aQ¢ áÔë.áøö&eóžä¹7¤ÈŸ‰.f#á*P®ÉwÍ0Õ ì³[x¹û@r1öžSÞž—rûÃYœûb'î=ºÁ-oóÔ#ó£ì@Ÿ‹ïá¶±Ã8Ḿ¼÷n®¼ï†©&Õ“îà�é†köEW�jJø†é›ÆÐ³{;Úµô>8a~{ ›œŠ¦©žýºú’¶cPY•O(Â2MìaB‰Œ7‰åØTVn$-³ 3dDÇ]TI Þ“Ù€,$@zùwÌx÷'æh*ºæ¾o &¥Ú޽ªöÀñâÇ›¨Ò3ÑqM…Í8¦YÅ–o&²BIÃïÓQ«3ëýXš^GV¯|Áœ|B"V¾ÌýÿœÊz­ƒ/¾•ëGõaÌØ^Œ{ë^?5Š–e5Jï¾÷ï»I覹m[:t ´¬MÓ@JLÓh±+àúO_¦O›ÌKsíÿ‚Ï秸xg£yù”åüøæ|6¨PúpüM7s΀£‘½€•«^ãÁ¿ÎdĽè�á§íè³9¼S1ÛÂ8Ž�¦id…çñÙ£?13[!TàÐëúûéTø1ÿ®>‘kleÆÓïáœu §ó-3Þ-@Uã̜߬1)%GsB”ü͘þMJíá]{ð°ÇÛ†gÙø×²ñ¿­ÿ±j•S\dv¤K¡õÕ‘‡ôn\÷²Y`Û€È"3SÅ*0Ñ4U ËV¯|2rµlŠr‚EìØn`ØNvzåJ�UU†¡c˜ðû}i ›¾mKBf}Ïý=Çup¨˜÷8?»�b:ášD0¬Vô½4~¸ªX„…�îóã׺ FQ>ùë-jÞK:Á¶ôh›Žb±eS jÞ`r…à ,ŠSÊÖ‚J²Pi˜¶Œ¦–e¾. ÍÜÌÊMÕ„l‰ÓaÃ;Hp*(+s°Š7²a½ÕҎͯ`sIäm¥À[SãŒ[§ Ç.­õJy›ªª2jF°­,£Ó±jÇ¢t)\EY¶lƒ“•CÐ6Ùêhdæd£ ¡¤˜ÊÒrlIüðÒ÷Š—Zãà–áPªÀ)×_ íMʾ}’gßú‘"_&>¡ºWϦCY«‘ÒÅA‹ùn‰�ªeµÏîÕ­›¢òíĶ,w^iMªø¬­Ì[¸‘kGõÁŸÛ ÛÙœÔÐÒÒ¿º×½ñ�27Œ×¼«àú¶óê¯1³fNã°±G°ví‚Á $P]]Ý"íâ8’{Nyrsó¸òê?âóùÉÇ�§æIŒiš ¾·l‰“JÕòw8ÐÙ‡¦:X–ÄÜþ#ó'¯"gôŸ¸µ#ˆ�ß2o­Š�&ÝçšNPTSVhPÑÿjþÚ»‚U/}Áƶcñ}É‚ïf|'wj…ílmtLÌœ1-Ò–JÊäÏ“zð°—$€Èºoã�N1Àº‹(øÄr}_Å ‡¥ÓëòçxâŒ*Df�«-«ªÊ–�ì�Mÿ«þÉå/þ•××ט°h¸@×þTCàJ;�Ä�J›êRÊBÁœ ÒvLeúRAy›ßqËmãèíüÀŒ‡ç«êœèµ’íØTfÄ‘ƒu,ÔÞò—G.ŠèyHœoÿÍßæŒL.ç=Î3Ê(Ü´� ŠI¸Jaû”ûù×géH Óbçþ×óÚ CHßü1/?9µM6‹*ûp`�ßó·ŒccE&í;ç¢Úe¬]¼ ¿Ú:š^u¹ ýÏãò ;¡T•PjøÉÌâ2ÿ ælÌ`Ǧø—”8¶S/¿Oxí™Yh™Ù$RÞù-CU$‚Rü:8¶îJŸK¸@¡(h>�€æÃçSP”rtM‰‘‚¢*¨V±ÊêÉ€‡0¬ÝW|¿¹7‡ÉAuÂlY½55«¬~qÃ7¯XMuÖpŽ8u8ݶ}ÅÄé[)pZÓ÷’ßs|‡òy�óðsßQìK'€HTUôl‚}ûÑ]uP—ÍçûêJºk{²]v×ôÀq÷<ÍÐ2­ZÆ*fO_�¦æìãgWM¥$ƒ�;‹xùÅç¸ôò«ÉËkUO±ÍaÒÄ/…B´kßË4)-)iñ+àËÙ’Y_*™Ÿ¿®Þu±ûMP†(ñ÷£ßÈ ¾ðN¶-þ€>þ†uz�Œ@gº�F¿ðfògOdÖ_0» ˜î�X}�#üeø™œÚ©�/Me“/ ÿÒycù¥œÿàÔÍ?)?"mÞ}cB{ôXoµòàa@× ��m9¨š‚O÷¹îÈš U¡0%úQÜøØ™ c%3¼�OËòB`˜–iáDì䩪Qnp3,ËÂ4Ý7>º®Õ¹¢�E�GÓ4BàóùPT%â&Ít¯²¤DM×Ð4Û²Ù±ßxöºdmy‹§žÆ†`F”Õ¤6 lËŽº–Uq=*D¼zØvÃpŸ®£ëzÔÓFý7†5Ƙ-ÓB(n|EQ°l Ó0±lb|$G=3ÄHU­šúÙvtsÐ#.çê»y«ŸŸ?b¹ßS©·Áxì‘,Òƒ9TWýŒiÙØ¦‰Q]å*�ø|iøÒÒ‚øtÁŒ>Øf)üsQ䪭ÖËF¹ÝŽýO8‹3ìI‡@%Å+f0eÂÇÌ/  ( •Nûá“ÇÄœ"³×…üåò‘tÝò¯>7“ï:^ɽ7D—úÏ«¤�3õNnú¤GôåÀ›o༕¬ùJžZšƒ®»æ•*;ŸÃŸ.A·-ïðú sX)}TɉË'Ê•Œ8ùNÖ�v�0å²àãw˜”/Ðþ=þþïÁ‡ÿÙ`�¹ã¶›HxèMÆkrrr¹ä²«xü_�4ë?`š¦±eó& wìÂtË/¥äÎÛoN¸¾0t8gŸs>;vlç¿Ï=IUUUܵÑ0M÷M š¦¢ë:š¦FÜKºëB�'�èz£Ö®ï5騶�ª*W—3âADD\lîî7¡â˜£<èÁÃÞ:i'ëûÑqªÍn ¿öRNì”I^º@Ù6�úŠU¾Œ¨›¡ú'ÅØ´%D B7•glZ±>pëŸFkÒ‡ ôcÿ΃Çù©þô¯Ü;9ŒžHè³>Iˆu§•(¼©6Š[æ˜:Çk“Dß77Q~öÝÓÿé„ϯPU¾˲±lpl°-ÂÝ<ÝÕš øèþ¶˜ÆV®½®4JkÚÛ¶m ÃÄ´,×Ö£¦âÓõ(AO®( ¶í`Y–+Õ®Ù¬£‡ƒ¨/²¨{®ÿÔ†i ñ?­£¨ 2²�פçó¹y8Ž“°|D}MX–›§¢Ö†ï / ý½!¼ýÖ†ðÁ‡ÿÑd¼–Æà!C©¬¬`íšÕ»$‹Wþúu¹óö¿qÇ�÷HK£´´„ÿ<þOª««šœ÷ñÖˆ¦ÂãIP…u£{jMѤgƃ‡½´;ÆšÖþuÔ\rZe�ãQ¾f3ÞûŠeŠ]î÷"¾�«Ø´EŒ¯ÚFóŒW6Q—ôÅ.dŠªà,ý€÷, cn—îÚT‹Í£†È5±X‹FÚ 9í)‘\ZI´_sûï·Mª’‰Ïß ©HÃÇÄ&Šª¡i>T]�<ƒpßÚ–ê*ÛÔkoUS ¨ ~Yë -v£l,\QtŸV»áJ%y�8Õ_o#—E û´:é¨JãåÓtU Ä%{c …B¡†ä&Érìîò.Y²h�µƒ¦«øü~¶nÝÂË/=OUueRëLܶh*<&^ƒð=¼¦ˆ£Ž<Ô[¹Þ­ IDATÝOšßGNžŸÜì4W[ïáÁÃn; qøo•öàÁƒ»…¶n­DÎ,H‰í8HGbÙ®2‘ªºÝÝÿB¸ïYwì� Ìyðà¡… Þ)݃<ì.Æ*á FL¬%ø¢FQ <»Š¯›JSi4™ÌPlÓ©ë>%Ȥ"ˆ©ZœtÖ)ùæO¥N�¦+SlƒøÛp£Êê$›µ¥R'‘Üg²9cEÄ�¸Kc@ЏuJ6]'aâ¢yi¶H�š;Vê-g4MIHþ’ž×R¤<þ“›×ÍX+d2ñDÒ Ÿz_‰&DJiFÉ‹æ�•˜×B4]AUjç’e:X¦S× a²G=ÙûJ‚y�ò¼jÐO¢ÙkE*[¹Lrb4–¦m:؆Œ¦­ú•¤¢éy-@6=ÿlSb…§Öê�æWÐ|J# (RjS§¥æµl�½š–›×$1¯›JS‰M ÕÍBÆ%N}î�"aJ¦6¿X›®hq([˜²�@¹/’@DÜ€–&�I§¹��@]W©1ÛlÛNò—Ò&(w×áN¤6¯÷%ØB›EízµçI ®+¨Zm˜m9X†“Bþ¢Eâ$9¯›=þd Ìë– �)î)Rʈĭ–Š¢.w¥¬µó:™xN”ÖVUó+¨ºH¸v¦2¯�$¢¤H L½Op€– �$OebX7™b©d\ògÃ�ÍœX¿H‹“@~…$�¦DwicÙ¨ëj4žeº w]j°�ÌëH`²RƒÝES–4vmÁy­i º^k Ü= ÄHüRZ«~{$0ÉÇ2)‘ÀÆò·ÂÒ‰x>Ѫžœ4°%I ¸RI3ó,@h~¡&ZS$�IÕiÎë]ØSR!�‰ÒUâ ¬æ�Àøäï—K“Xû {�6ï$úÛ$�²…Ià.KR$�®“r5Zfôc®#vU±ûI`Jm%S™»k³©ÜëUs絪ºÄ¯æ�’ãHL³V²“ìS�ß: l²¼Í �Måo›¶YË ’½ni`N�·€ªæÁ]�×N …Þ#$°ýÔ’$Pk8°d4bÜ÷­qòˆ*|4!5¨±éT³8˜À<Ë`‰m²M:žF²<ìˆ=˜�gÉùׂ4ºù$ã2lŽÏ¶ñ‰F©AC(’Wø’¸’I¡ˆèU°æS�Ò%«õÇ™LRlã‘|%Qh‰hœ^ÊÚóC²£<âlj� ðÂdÛJ¸n›¤�±Y‰w÷Ü(ÿlJÛ¨¾ä/YZ"^7«)õûÈÊÎħûPo¡ðàÁƒöE8ŽÄ0 ÊÊËé`Wqw“6Z²÷E5‘š§õ¯hE�}O*‘ žžü¶5„ëÖ§é¥JSÙ%Ô¸“ñ¯}“y?d¯Õ„²2hÛ¶5¿ß# E~Ú¶iÍδîݪc¦ªÛ ­Ç’ ¯…JªT­!·ùi×­OÓϬ”$øqܘŽÓìÂη Ê>²³³¼åÁƒ<üÂ���E�äË25u²² ¦Ÿ¬°ƒ]£Iî¸ÚŠ&<[§$I ’ŠyPKþv¡°ßÛ&YÙ™Þ òàÁƒ~¡ÈÌÊ`j¹Ú(ak)Wʈær$#E­¯$²m6ÛLLË‘@’$�Jr�U›€OÛ7ÅÂîÀÁ§ëÞìñàÁƒ~¡ðû}äIøODeóµþm#" Œü5“" ¤%I 4SCxÏŒV’[ЍäoWÍI„¥DQoöxðàÁƒ¿P¡Pí$OØ#‚Í%�Qi`ÄÎV]“1{É`ts Û6­ÔO-QÂ.ùkY¯!à/}«#ÕqŹ5nU„1“nšÈÆ-[ØTþÍLëÁû�›UŸ—¤AÙ{×pÝgá]jÏ�nxŠ eZ‹–÷ÐëÿÌÑ_\Ê÷›ìñ}¥õú-ïÔÿãúý¿åÃç_àûR�ÜY…ôí`ÛÖ-ÈÊ=WÏ3Ÿo¦¤Fì«w¦Ï)röÁûÑ=×"¼~SÞü¯u꺺Aà¤ã¸[nàÜârÿ±Îô¹à>ÎÚŽ­‚ìRŠ×|ËŒ ïòÉJ“ÈT¡ÇY·sÞ¨.tm$`ì`í7s߬†Wýnù[Ó67�4ª¨ÈŸÇô·^eü*'Ú‹JåFÖ¬\A}Á˜y;�\ãcãwòÔ ©÷æ ¿Ýõ;ïåægW²£©ö¬7:š,‹Úžî'_ÌãúÑ++LÕ†Ìyÿ¼»4­7øÈ=ï^9�!Ö?s.w-Ρ÷Õí7ŸO ÿ/ïJ4Kß»–?Ì?“ÿ{dþ^É#?AmK×.æÂ#úÑ+[bí\ÎÜçàÕÕé¤qwœÞ�ö Tl`ý´WyáƒÕ8"¥r$S§¦ûȃIØ$óç-ଳÏäƒ>B:gœqƸËi‡ÊkŸËU û]D¤võ”8œäI` MÈvÉ m8˜UR‘Mq¯¦I`ØAõ)TŸÀ±À±I�&Ir’UI�&§’ˆ§jõÉÚ¾FÓme£¼�DQW¢¢Œ;º/B]éŠc;Ȱ…¯U;4sϽžkÛ·]7<Á/Q�1€C.8—KÎùž9ã_â¿ïƒ:ôB®<ëz.Yý_‘NÛ³ïæö¿çëÿ=Ä›Åmé~Ê•\ñçjvÞò3ªÕÚ6ôõdø5×s�õÿ~v!ë,wö´ë¿?Ý7=ÍÓ¯RåïD÷#Îæì›»�ûà}¼¼^ óÐèSð O¿º™% �A<åï¶}ûÐuãS<ùr!Õþ.ô9ñι®œ‚[ÞafLY¢’¬˜EE~÷<Ï.ø'÷_r³î�̊ïáò¶y멟ÙÑ )Z£e e�wÖ=Üuäf–¼ÿÛœNî˜ ¸ø†›Èxønþ»F�¤bRúÅ<:ÓÄÁÁ(JK8…�érßWeØHìÒ0NlT‘Fîé÷p×1ÛùùÃ'ø÷: r2P¶« mŒ•Ÿòѳ%VëúŸÃEgÞÈÕ®æÞùZòåiIÕ)¹>òàÁƒ‡øÈÏßÀø÷'pîy¿CJÉ{ï�gýúõ-K4m‰QU{Š@D´ow�Ö ö𨬶°ÍÔ4yëÃ6] ¨nàX±²»_ Œ+ŒGÖö%hØ`UVc…-$Žâ’?£`;J €¶Ü«5ÇýÏA T†0ì=)‘8[—òÓò,±šµíÇ1ö„Uü8u1?Z¹:“¯G_Í1}r`y;ãpN›^{’·¿S‘¬gí=üè8Æô}�ßÝTµŽô¹ì/ü¹Íç¼øð—|_­ÕÍs˾ÿ©‹¥,ýq+á{ïäÊãûðò³ë¢ÃÓÞ´˜Å?—`Eº\øÓ j5biƒŠJ#’Öü°´‹e,.éÉwÈÈî¯1sYTޏ“g^¯Í[-ù€go˜À,«ˆUo¿Áç÷]Ì¥—uaý`�M¯ü�É%ZóÛ2AY¦m<‰�RñÉc<õµ+“+w":?ÈŸŽïÇŸZ]›FÉ&6m2#Æ<â«SK(ÛÂæM5í# †£Ùéã8ñè ª>¹‘'¾Œ•0j€ÄÞ¸ˆïDä» ïðù�÷sE¯¶0gÒå°ÓÇ%_§Fûȃ‡‚ˆÄÑB*†�ííÒ‘U‘û_ Š.ð¥)G4›Ö@OÓЃé€Qa‘äs»†$ÎtÓP#DPˆÔÌÄüR%�Z"²¶;I`*(CP¹³Í˲Üë_á²ôPÁvÔ´4¬�鎭 º�Šâ2Êö–iSº³+�CŽÏK§�âR�@0 a¶ïAï@�.W¼Î —Gå�(ªÅöl_í¿ÇÞÀM¾�̽ïMf–úŸØæ ~Xn@¿žÀº„ñ:]ü*j¸Us"^öFɵ£€Ír�Òk¯‹Ó–þ—ÛßZOuM~V)…¶Û·Zé7¼ýÞX¾zýø(žïà´PsÆ–ÅìЋ¾¾Í¬\^‚MÀ-‡�ϲ•Õ8Cz«[´+ͽؿ^~µ  cøù\pâ ú¶Ï$h–J3ÑVë)çÑœ:Åë#q•c•l:ï߉ôê**zŽá�¶ß1a›Þ2�Y§,"îxlø¶¥N¶JÂñîr>·üá ZO}žW_/ ˆžŒ¸ê:ή·8%q&O®NMö‘<$–ü�5‚ ã?`ýú|&Lø�‘#‡·LšÖ»4*íèÏZ@AKSR¿ÍŒ1í‹(~JÂeVJÆ’¥#±Â-âÛXó§¦!üK3­%ŽÐÖ͉ˆQ¤P»Ò{¿Ê¦üFó6¶,eù–f-! ~Wà€«¹~Ôr¦ýý–�÷0¾d [Àz§eÙ‰¾u5+Œ‘Œê—ƒº&„-¨ÝÙ¿OjþÚZrf(¤eQ(ÅiæáÃí§u¬¶F0¼_.Úšj,YÛKVçžôæ;>ýp>?T¨ @ûzÍÉ”#Ù:yðàÁC³É™” ´}ׯ[Ïú"»BkþÇ ;Qÿ½ªOà ªH™ ¤ÖLŒP �ãʸŒ2«�õŒ„­31ßÁšOÁ2R#�Q/û8 ÔêwÀî'�©¡Ä§°&  VÒ#= ¬J„e#Á� ÏÛfå o»ƒDU‘z:ëvT²* (Ó÷]шZ>•/¦ŸÌ¡'ÜÂ�ÎÇLZUAÈß–îÁ5̘½‘Š+šÊö‰¼úTgÚßr7žtû¨8r «âz&g,bY±Ÿ¬ƒÎåÂÎË™ýö2¹yÞ…ó#vf7úöWcÌÀHDh ?nÀô'ýËëxw]9•¯}Á˜»¯àš±?pÛTƒ–¼ T+§óùäSwò_¹.ô_oI'÷� ¹¨ã¾~uy´Þë7ª¤t'­™Ã Ñ‘veÓ˜¶¶™ý4íd;õ6nàc¦¬©"lGîö)|³eëÄP9uëçí¤Xv CЮ3ï’)G²uòàÁƒ‡}“]ÖÝô“#�nÌD¶mCRmD^®ûk%ƒÉÁX31ðgE4ˆM×RH“„5– Pý öÞ²˜ô-kýOš¶¨Åcáû ü¾µF`“MUI5�õ *6XSϼ‡j;Š‚)¶”V±]qø¡õ>¾iÊr Þ¹‹*~Ϲ‡]ÃN×Ѫ¶³cþ‹,š uz@¢®}�§>Äg\Ëù‹ïå¥|�˜v]Oþ#Ç´së÷|÷Ì+¼¾l÷Ô=Ô÷bn¸­ngûó_àÒ…¿ãL9�'¿*Æ@Eß2žW§ŒåÉÓÏ`ìü7™Ú’vþdEÜË}æ%\xÒMÜ”eR½aÓÿýï®­­÷²÷^æã«Nç¸?ÎiUYÿÁüf@dÛÞ½›û+/â¼#ÿÈÏR ,Ÿ•oÏdöÜ7yæ�t®8é�\¬ͪ¦ªdk·‡S+G’uòàÁƒ‡_ $Ii`�Oã�‡XÉ /]EMÂ}\<[�ª.@wu¬�Ó4 ¹£©¿ L•Öìõ-É­â’˘Äkû ’ x¹hŒ†&Ó©u#Ô�{{¸„îݺ¤4¶ún³iWê�©ø **¾Èõ§!%UŽM¹ S�­²²�‚óxuèƒïrÉ’«¹ú½ Vïi4JšÞŽãØôkâ#UèjãÑš0mfµÓx–‚èu°tÀ6�¦ÉZ}þ’d�’JS$Û¦õ?‘ ë—d¶ $0©¸É0i–uPÙ�«Ða§E^…‰a=¦&(ÊlÍÓ©ò{Òƒú˜å•:Asçžë;ö ’àÍ~èÆlœƒ4$@‰¢H[bU»®cõt%%®âËÒ�Òõ,bµ†¢k\ÆÕ’À_†×-•È¿X0m‹úÌØQ3™75„ ²évèPöß>�WGŸr¶ø"FÒ å˜êø¹˜Ë*dÃä·x³¢ýŽ:�óO/å™7×±UŠ}°Ì‰aûû1âÈ´_9™‰³B„Z�â°qgr‘³…‡>+Å)�Í”——0GÈètP‡œÃEý–³b‹o× àl`Õø—XÝ’-""$µæ(ÚÒí-G]ÂåcªÙ¹ø;|º“‰¥Eìø%’¿Øq)öÜzÔµkùó4f¬¬vísJ¹gú΃‡_ ¬ÇΚe0:‰�r�H1mKb—Ø(ºkF&…e¶†m8XÕ1ÞB"†¢S%�Ђ£STºÕR%l¿¨—Ìä˹Ãtð1Œ]<�É%>Œ®ÇpBŸÍ¬|{kl©´¢Ý˜ã9nxº¤„ ~fé7_3i­E�îÐA7Þéžøç $#÷8ÎÿCOÒßzŒ×Öëåª ]ÌUC[‘ç .XÊ÷“¾dòF�DEq)—�kM«4�¨ÚƶşóÑ´ AÞ©÷ñíßãÅ~d�#säõÜwø&?>…9N:z,G ì@Ç, kË�,œô5Ó6×Ó–×û1|D:ú‚gyo~&ù,·º²ß9‡3¶ã2ÞÙœ–B™i‘6jwÄÅÛ¿ ís|ø­b¶}ù4ÿý!ƒŒá§pê!Ýé–%•Û)˜ò /-©ëtN /aîó?2ÛŽü¾j%ïàÆN]è JXg•P´¹$:v�¼#9g EñÄOù¦¸!ìtü•ß;›¼L?~ª¨ÊŸÏÌ™´¼?½Û¥‘.`ë·1~N1ePº3àªK9{õÃÜ39“F¹™„Õk³¦ÇŒFÚ1wpÇÑa ÇßÍ3K3�ZÛÄ},‚IµŒ®§rõè�üôÊ'L+Ö•&Òl´<€Tòh;úxŽÑ….Ni>?ôŸl $5nšjGGïD�#Žã˜Áíhç«¢rs!ÅivÒåot l¢nº.�£oäÖƒ,ŒÉ�ð÷Ù2aßyðð›"�»$ l†™˜xlK€"Ž”8&T—Zhº@&Okle6ªÏ=l*šˆ*‰Ôд”l&dž[LCXK­ê‘Ì_- 4 û9ýŽ“�^ÀÂ�üt8¦?]—=ÃãkuWJrÄ\9b3k¿y‹7w¤r,'Ÿ›GðµW˜°¹yÒ#¥p!s¿ÝAmétȱV;Ÿ™Î°ÀÚ0‹™”QÒÑzÉ ‡ŸË™�òüÏ~6¯ÙDÉÀÞôÍ\̺RD�.=Ú�¾a?›ds9Wô_Ê‚‰_3©¬m=…3Ω¦ì™é, ×x#§;½ÒKÙ¼n&é€Dß°–åΆtòÁæÊl¤·Hµî³=ŠÞçýÏ‹)W‚ø‹lBm�á÷ǵ&}Ú¼±ÚÁÊhK^iÐN*;fC™d¥;P\DQ}‰–È Ãa£Qò¯üÿì–Ó­ � Þæí�+©öbбÇpb§å,�ú)Ÿ|#�}Žç´#Îâ”Mÿáùiqë“Ó­ �¶½Ë»ŸVPíkOçCŽæØh?'³øX„f?Ï«KÜ¥Ð* ‚H#óÈÄ}<;'ÉöÙô=�ÎBçý•›2¬íKùiÊd&opê,7�öAåYh¤w9WŽÚNþô÷xw‹Df®üv RIDATЊµ¤çV£íhd“wì%\<`=+¦¾Í”B¾.qh'™\ù݃š¨[Xä¢Wùï·aÀ‰:öŽÓw L’8µ Ô’›&JÿWJc9ßN\ͰsOçäÓ-:fÏcê»›)AÇNΘ*æÌ·xw¾ãjôl¨@¶½’‹GwaÂûÛš‘£ƒÜò?¬ a³�•]é{Ù@úw˜ÈÂõé°}ËvD¢n›ÂŒ—ó»Î9ðs5úºåüäLŸž’‰‹Áöõ£o·J ¾É§8íŽjQôÅ&.ó!ÙΦ/»°ßuÃÚõ+®ª•@XédSJaŒï^Å,¡´Z'˜ÂI—yþöÃZ¨�ؾ’ëBé�ŽÝ#�,*(Ú�Ϧm²`+[›Ü¸}èÃÎà”öK˜õJ>eøêJ¾òÆpDÿ6|´˜µŽžxÄ­cM~›ÍlÌƈÑX»p5«m�³iß:‘ú¦C¾“8�Â5¬Zç¶Ùòò.ô‰íç$&�¬ØÎöí"jÉÉŽä�Fúx†•\{Iµ7=»„ÖÌgÑw…l3sÈ=èTÎ>χó܇L)­ýÆ&NÓNk¼<ó7Æ!#}X3ßà�¹vÌrd“�[‰ÛqÞŽ#8x�CÕÔÿñÞüˆ4:_%ý€n�DùCSusç“DT²c{»‰¾óàÁ#�Í'�QaY $0J•úž1\[�fÈÁ 9øÒÕ:Ú¿MI (8–DEÁ2œdm_4­Õï(�Ö–X[ó ãü3RNÙç_2³ÌÝ ŒV�è®mgc~%®¤G8[Éß``í×ض˹ûJv²]ö¢kšøð÷;†ãF÷ [«´ÿoïL›¬*Î8þï>÷Ü{ga†g@aR.…,ÊbŒ Qp(c$d­ø&Ÿ Uñ#$y•J*n¥1jY1‰Z†ˆqe‚"TØdfe˜åÎÝÏÒyq—¹ËYºÏ=wèÅíÓçt?ýôù�^žF�C2”†r9Ãï�ø1=ÿ 6ܶ Gú0°h)î tãø)†Ô °(Bóöçñëí$oBuLÔ«e6Û$oÿÌÕ¬£ÚžNì=¿ ?Øõ+þšÏnÏ“niÃbu=c0PSRoí¦°µæ±PBoO 5þ´!κ–’’š:,Jëe:¸,ÑdÀèt,óùj˜Üýë:p @K!p&ŒäÏR‘hQ° \8Ý�ÔòQœ=—†™5â+…ɨ¢€ÀD*˜& Â�œÿv=u ZýìÇ(nÆ­O<…GòÉ#8¢#�®Àªº!|³t1æ]ø¯EU  Áå÷^Åû}á¢{Å ˆM`‹Q_?ÙpMu.k4Ä&âîg®fý"μñ{ünÉj¬¾g¾ÿËõØôé øí¾¸ÍÈßOðÜ ÿýu¼uº|=£KpÇÒ Œ“ÇqÊà•1 ŒPÐlï@˜Ã(Xä/hçŠÚŒƒ�yë‹tFª �æ:¡ô(FÔÔ…hü6pjsóˆKÇ.þ±VZ� Äq€M¨ Ôµ”Ôõ(ûŸ¤˜}H¤":!5¬ S…@+9Md¦A Íÿh±Ë� 6ûSCˆ§|u¥µ+·à±Öÿáà¿z€ìHáÙSˆ¯Û†�ƒûðÕ€‰dS † ux—q;–m8ƒžQDX+ZCÅ_Jº‡N<Œ�›ÄúØçx ôïÂþo¾‡Õ÷îÆ.³_õ$‘ 6£-܃oŽ #^O?‰CÄý÷íÀŽÑ/°?Ú�ÛhGë…×ð·þšSGéæ•¸¯cWãˆZpc+E ³ðÀVܶq9–\z/Gæcþ‚\CM#yu£@@ÚnF»q �ý¡io[nõÑ7¨"¸ì~lè=‰ó¤-±Cèºìlã±&¾ú"Æ·è><†­›·açÚ°·o.š7®Áªèx÷t€Û®m.Þ…ý‡ïÅš ?ƳèÄ�^ ©p3æŽÄ‘A¾vãÜöºÐùõ½X³î§Ø�ÏÑy)…T° ‚†xM¨-^�e7ÂÑ~*•¥íz$8H]#�å ào¬@±‘@“””˜ã =»>0Üà®�PC†– ãe$ÐyÓ­·‘ÀÜ?Ö Ê Å;8s]@ K"öéKxA{¯ÿ!ž­Õ  œÄ±7?ć»[SûÿŠ×kÁÃ÷=ƒgÂ&Ìd‘ÞsèŽ*B· ÷ÿïìy�¯ß‰�ßU )¤¢—Ð;R€I,�«‡�áÛµw`ñ‘.tkÙqÃøG/â¥ÄVl¹ëI<¹IA 9‚ÈÉ!œ:OxéÐö¿ŠW‚Û°íþa·ÁÄéwñæžsègÊŒ©#³¾ ë–cs“Š C´ïk|òÞѲÇh;ÚÐÂ;°û–Bй„“/ý o÷ÕDAcKÂÑa jÓ?6ãV=€OžX�µO¯Æúä ®|v]=Î6á¬/À€~àU¼܆Ç6ü ?¯I!Õû%>zk'~¸µ9Gä?/âÅÄCغf'vlHl½{ãÈ_»qn{)Ä?{N<„-kŸÄŽ�*z±«gpî jCpö‹.t?ºÛW�ÀÑ�Dü©XÖ¶KIj�’8ÅÈt¦…†0eGI1¬%Çu€„9§…•BQ)Rã: ƒ“NwÀhòÊwV0Û`‰™ðއ žO�¢£}¡ô)))))©Y¬ {ðþM�_ZÁ|'ó&.åB½è)“�kˆ5¬©5™x€¼Ò“Œ4+A6~QNã™h¦€Ó|¼÷u�Lô))))))©kBÌñõOø¸¢‚u�Là".LaÖH¥%2g ó*V< Ú¤LÎf ®hI+Àd"HIIIIII]S x­C �™.ýb^eñ‰Ð8 éNØE è €Õ‚@H”’’’’’’8ƒ �™å0&�Viõ„‰ä˜ûh U©M™!�ó¡íò¥V•Ê$JIIIIII]#Xº,-wf/¥D0O”…‰)½er\‡¡ÙçD©S™ÄÂÄT�”»®ó衲$JIIIIIIä„ÀjÇ d¹{‰—<] €7쟨:m(r* � ‹Ár4�ùÒ¤¤¤¤¤¤¤®°…@¶˜Ž€Ñ!ÐV”çfÕM=‹UÖ¤¤¤¤¤¤¤$:ÁZµ!0¿P!S �Œ÷f¤*›nsH=‹YÓ:ÏÆ�išÒc¤¤¤¤¤¤f+ô1†ZÊ„`¦@ ©›³@!´Ø!Ì.VB´*(&†Vd,�›CZ  �Ö¤÷HIIIIIÍR¥R),T=B“_ȼ@`&oÞq(n°-�@fº\E çͪ+�Vl,¸’™˜�Þ#%%%%%5K5‰bÓ_�ð �°†@á01‰B sLE%»ž=B sÀ©†À54„Æ„†ññˆô )))))©Y¦±ñn4âØ:Ç´„5Q®˜®01Ìd`Yã¹H(V Áq[@ýÛ!L k¾"c @`À³JÂã1\F2™”k¥¤¤¤¤¤f°LÓD2™Ä•¡aÜÃoæ8ÀšW`š ÐÌÅmv Í"�F.­”‹˜[È„næŠnBòq‹”ý)»“Už�„â¹ÀL§plhƒ0�br/±”””””ÔLT ÚU†íõ [ÌI€(zÉó17WÀ:_Ût?8ÝŸ±É¼Y!nº<4O™˜NlÓæQ‰J�ÂH›BeÊ@ ßÙ!& Öû+œTÜCC¸‡†¬yŸ¸ã0×sž´ùžoû¼ ÿ)/Îy’’|½æIœÒòÃ8o¹\7ËA»ZåK*¨×‚D"‘.‰Àª¢@ÉVXJ×øòôT&æR&�y�ušûÈžr¿†'¿æõiç¾Ê:_U�< ^Ó&ƒÅÖÕ…²ù˜ŽÏ�JÐuÃ_3±ºâ.ã®tñ¾ŠqôU^ÊÄ<ú@ù"c^9°¨™£ÚÞ Õ„òµ²SM½jû ɨæê×"uÊ,�ivA`.oB'§„ý€@f²ÌaÂÊÒ èi�-²áTB µ¬%T8lË`&F(Oæî}\‹=¹ÊämÛ¹HW˜ó¶pîB`öÇ ¢LBçËÂwìÙíc€ú�Ì'dÓ �DUU)*:cðWtãrŒÅÒ¶öc|ï +8l¾Räõëi�@æ Õ�b›O2¦y‚ËÒv‘ˆi|÷wðk�~5%XþV‘_›~ÍÙÿ2·¸sÇÁšéÔeû�…£©Û�gú5jÀ]¦Ù�¤òQÛ)„@6èà ÃÌþH²£i]çžðô³eªÜ¯‰g;õ·È=j[% 'ÁùÀšf€¨¯98É$Æbiñ�;^"pË�žß+î~=åh¶<~ÍN� \çÒÚçËøVÂ8€me~m�ÞárªcNžÓ+�ÝY~f” ôefw ‚Ôs_å©ÛˆA5!�UÔ¨*‡@‘¯ !�x&ž š=èšoX”¯OÈ*„ÀP 0ÀdÌ&íÔB /Àâ1þ–rÛªJ(òqçÔWåÖþ™&!™‘?׊Ɍüùî×D̯ý‚ÀŠÞ+Ä;Y“(â×"7šff|·vœbõ } ¬V¬ÀBéÜ40òkOƒ6Œ ¸šzÁ†ôUÌ»_3Àê$â˜Ä!ÐSðE–èËBd] üp‚Y �ÄWD >@ hŽë·® ©×ë 3þÁP[rÍW× $é¢Qƒiõkä�žnœì¯¦3üƒ@fTòNñ 1ó!�¹¾·ª0šZ”.�J�ŠåɼûõÿO% <‹7ŽIEND®B`‚timekpr-next/server/000775 001750 001750 00000000000 15122253261 016502 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/__init__.py000664 001750 001750 00000000000 13476006650 020611 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/user/000775 001750 001750 00000000000 15122253261 017460 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/user/playtime.py000644 001750 001750 00000055514 15122253261 021666 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 01, 2020 @author: mjasnik """ # imports import os import psutil from gi.repository import GLib from datetime import datetime import re # timekpr imports from timekpr.common.log import log from timekpr.common.constants import constants as cons from timekpr.server.config import userhelper class timekprPlayTimeConfig(object): """Contains all the data for PlayTime user""" # key constants _PIDS = "P" # used to identify pids _USRS = "U" # used to identify users (in master structure) _MPIDS = "M" # used to identify processes that match patterns _FLTS = "F" # used to identify filters for processes for particular user _UID = "u" # used to identify user id (child struct) _EXE = "e" # used to identify executable for process _CMD = "c" # used to identify command line for process _TERM = "k" # used to identify terminate attempts before killing _QCP = "Q" # used to identify how many times we need to verify process has changed euid / cmdline (def: 2) _QCT = "q" # used to identify time between the QC passes (def: 5 iterations) _TIM = "t" # used to identify last update date # value constants _QCP_V = 2 _QCT_V = 5 # file locations for inspecting process and its cmdline # status _STATUS = "/proc/%s/status" # exe _EXECUTABLE ="/proc/%s/exe" # cmdline _CMDLINE = "/proc/%s/cmdline" def __init__(self, pTimekprConfig): """Initialize all stuff for PlayTime""" log.log(cons.TK_LOG_LEVEL_INFO, "start init timekprUserPlayTime") # structure: # P - process pids for all processes, every process has: u - user id, c - cmdline, t - adjustment time # U - contains users, which in turn contains reference to P # TIM - last update date for processes self._cachedPids = {self._PIDS: {}, self._USRS: {}, self._TIM: None} # global server config self._timekprConfig = pTimekprConfig log.log(cons.TK_LOG_LEVEL_INFO, "finish init timekprUserPlayTime") def _getMatchedProcessesByFilter(self, pUid, pFlts, pPids): """Method to validate whether cmdline matches the filter""" # def matchedPids = [] # loop through user processes for rPid in pPids: # executable exe = self._cachedPids[self._PIDS][rPid][self._EXE] # command line cmdLine = self._cachedPids[self._PIDS][rPid][self._CMD] # try searching only if exe is specified if exe is not None: # match for rFlt in pFlts: # pid matched isMatched = rFlt.search(exe) is not None isMatched = isMatched or (self._timekprConfig.getTimekprPlayTimeEnhancedActivityMonitorEnabled() and cmdLine is not None and rFlt.search(cmdLine) is not None) # try to check if matches if isMatched: # match matchedPids.append(rPid) # log log.log(cons.TK_LOG_LEVEL_DEBUG, "PT match, uid: %s, exe: %s, cmdl: %s" % (pUid, exe, "n/a" if cmdLine is None else cmdLine[:128])) # first filter is enough break # result return matchedPids def _initUserData(self, pUid): """Initialize user in cached structure""" # result self._cachedPids[self._USRS][pUid] = {self._PIDS: set(), self._MPIDS: set(), self._FLTS: {}} def _cachePlayTimeProcesses(self): """Refresh all processes for inspection""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start cachePlayTimeProcesses") # ## the idea is that processes have to be refreshed regularly, that is: # if users exist with active filters, then it's regular # if they do not exist, we still need to refresh processes, just more seldom # def dt = datetime.now() # regular refreshes need to happen even noone is logged in (process pid reuse) if not ((abs((dt - self._cachedPids[self._TIM]).total_seconds()) if self._cachedPids[self._TIM] is not None else cons.TK_SAVE_INTERVAL) >= cons.TK_SAVE_INTERVAL): # def areFltsEnabled = False # if no users have set up their filters, we do NOT execute process list for rUser in self._cachedPids[self._USRS]: # check if there are filters if self._cachedPids[self._USRS][rUser][self._FLTS]: # filters found areFltsEnabled = True # no need to search further break # do not do anything if there are users and filters are not enabled if not areFltsEnabled: # do not do anything return # ## this is the fastest way I found how to list all processes ## # I tried with: # subprocess + ps -ef (~ 2.2x slower) # psutil (~ 10x slower) # even scandir is a tad slower than listdir (for our use case) # this method was built for support of filtering any processes # even by regexp, but as configuration by regexp is considered # not easy for regular user, so user must specify actual executable # for it to be filterable (at least currently) # as for linux reusing the pids, timekpr refreshes processes very 3 secs # or so, depending on config, but reuse seems to be full circle, i.e. # pid is reused only when limit is reached, then it reuses pids from # the start of interval and only those which are not in use # so I don't think this actually affects timekpr at all # unique last update date + stats variables (these ar for actual counts, not just assesing the result) self._cachedPids[self._TIM] = dt cpids = 0 rpids = 0 apids = 0 lpids = 0 lcmpids = 0 ccmpids = 0 qcpids = 0 ampids = 0 # ## alternative solutions for determining owner / process ## useAltNr = 3 # list all in /proc procIds = [rPid for rPid in os.listdir("/proc") if rPid.isdecimal()] # loop through processes for procId in procIds: # def exe = None cmdLine = None userId = None prevUserId = None qcChk = False processChanged = False # matched if procId in self._cachedPids[self._PIDS]: # determine whether this process passed QC validation if self._cachedPids[self._PIDS][procId][self._QCP] > 0 and self._cachedPids[self._PIDS][procId][self._EXE] is not None: # stat qcpids += 1 # decrease check times self._cachedPids[self._PIDS][procId][self._QCT] -= 1 # check whether it's time to recheck the process if not self._cachedPids[self._PIDS][procId][self._QCT] > 0: # decrease pass times self._cachedPids[self._PIDS][procId][self._QCP] -= 1 # set up next countdown self._cachedPids[self._PIDS][procId][self._QCT] = self._QCT_V # we need to check process qcChk = True # cached self._cachedPids[self._PIDS][procId][self._TIM] = self._cachedPids[self._TIM] # stats cpids += 1 # if not QC if not qcChk: # pass continue # since processes come and go try: # ## depending on version (they all work, but speed / feature may differ) # using status (correct euid) if useAltNr == 1: # obj obj = self._STATUS % (procId) # found the process, now try to determine whether this belongs to our user with open(obj, mode="r") as usrFD: # read status lines content = usrFD.read().splitlines() # loop through status lines for rStat in content: # we are interested in Uid if rStat.startswith("Uid:"): # check for our user userId = rStat.split("\t")[1] # found Uids, no need to check more break # using commandline (filter through params too) elif useAltNr == 2: # obj obj = self._CMDLINE % (procId) # check the owner (since we are interested in processes, that usually do not change euid, this is not only enough, it's even faster than checing euid) userId = str(os.stat(obj).st_uid) # using symlinks (faster) else: # obj obj = self._EXECUTABLE % (procId) # check the owner (since we are interested in processes, that usually do not change euid, this is not only enough, it's even faster than checing euid) userId = str(os.lstat(obj).st_uid) # check if we have it if userId not in self._cachedPids[self._USRS]: # verify if userhelper.isUserValid(int(userId), pValidateUIDOnly=True): # initialize set self._initUserData(userId) else: # this is not of our interest userId = None # we need commandlines for every process, in case it changes (snapd?) try: # ## alternative if useAltNr == 3: # read link destination (this is the final destination) exe = os.readlink(obj) # ## alternative else: # try reading executable for process with open(obj, mode="r") as cmdFd: # split this exe = cmdFd.read().split("\x00")[0] # we have to inspect full cmdline (the first TK_MAX_CMD_SRCH (def: 512) symbols to be precise) if self._timekprConfig.getTimekprPlayTimeEnhancedActivityMonitorEnabled(): # obj obj = self._CMDLINE % (procId) # try reading cmdline for process with open(obj, mode="r") as cmdFd: # split this cmdLine = cmdFd.read().replace("\x00", " ")[:cons.TK_MAX_CMD_SRCH] except Exception: # it's not possible to get executable, but we still cache the process exe = None # stat lcmpids += 1 # try next on any exception except Exception: # stats lpids += 1 # process not here anymore, move on continue # if we ar not running QC check, we cache it, else we make verifications if not qcChk: # cache it self._cachedPids[self._PIDS][procId] = {self._UID: userId, self._EXE: exe, self._CMD: cmdLine, self._QCP: (self._QCP_V if exe is not None else 0), self._QCT: (self._QCT_V if exe is not None else 0), self._TERM: 0, self._TIM: self._cachedPids[self._TIM]} # stats apids += 1 else: # check if process changed uid / cmdline if self._cachedPids[self._PIDS][procId][self._UID] != userId or self._cachedPids[self._PIDS][procId][self._EXE] != exe: # log log.log(cons.TK_LOG_LEVEL_DEBUG, "WARNING: uid/executable changes, uid: %s -> %s, executable: \"%s\" -> \"%s\"" % (self._cachedPids[self._PIDS][procId][self._UID], userId, self._cachedPids[self._PIDS][procId][self._EXE], exe)) # save previous user id prevUserId = self._cachedPids[self._PIDS][procId][self._UID] # adjust new values self._cachedPids[self._PIDS][procId][self._UID] = userId self._cachedPids[self._PIDS][procId][self._EXE] = exe self._cachedPids[self._PIDS][procId][self._CMD] = cmdLine # if process has changed, we do not verify it anymore self._cachedPids[self._PIDS][procId][self._QCP] = 0 self._cachedPids[self._PIDS][procId][self._QCT] = 0 # flag that this is changed processChanged = True # stats ccmpids += 1 else: # nothing here continue # we have user (or process changed and we have to update processes / matches) if (userId is not None and not qcChk) or processChanged: # handle case when uid becomes None from existing if userId != prevUserId and prevUserId is not None: # remove from user pids if procId in self._cachedPids[self._USRS][prevUserId][self._PIDS]: # remove self._cachedPids[self._USRS][prevUserId][self._PIDS].remove(procId) # remove from matched pids if procId in self._cachedPids[self._USRS][prevUserId][self._MPIDS]: # remove self._cachedPids[self._USRS][prevUserId][self._MPIDS].remove(procId) # only if user is specified if userId is not None: # manage pids for users self._cachedPids[self._USRS][userId][self._PIDS].add(procId) # verify whether this cmdline matches any of the filters user set up for rFlt in self._cachedPids[self._USRS][userId][self._FLTS]: # matched pids matchedPids = self._getMatchedProcessesByFilter(userId, self._cachedPids[self._USRS][userId][self._FLTS][rFlt], set([procId])) # match and add to user matched pids for rPid in matchedPids: # add to user pids self._cachedPids[self._USRS][userId][self._MPIDS].add(rPid) # stats ampids += 1 # take care of removing the disapeared pids pids = [rPid for rPid in self._cachedPids[self._PIDS] if self._cachedPids[self._TIM] != self._cachedPids[self._PIDS][rPid][self._TIM]] # remove items for rPid in pids: # pid uid = self._cachedPids[self._PIDS][rPid][self._UID] # uid found if uid is not None: # remove it from user pids self._cachedPids[self._USRS][uid][self._PIDS].remove(rPid) # remove it from user pids that matched filters if rPid in self._cachedPids[self._USRS][uid][self._MPIDS]: # remove self._cachedPids[self._USRS][uid][self._MPIDS].remove(rPid) # remove self._cachedPids[self._PIDS].pop(rPid) # stats rpids += len(pids) # extra log if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): # users for rUser in self._cachedPids[self._USRS]: # print processes log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "PT, user: %s, processes: %i, match: %i" % (rUser, len(self._cachedPids[self._USRS][rUser][self._PIDS]), len(self._cachedPids[self._USRS][rUser][self._MPIDS]))) log.log(cons.TK_LOG_LEVEL_DEBUG, "PT stats, users: %i, cache: %i, add: %i, rm: %i, lost: %i, nocmd: %i, qc: %i, changed: %i, admatch: %i" % (len(self._cachedPids[self._USRS]), cpids, apids, rpids, lpids, lcmpids, qcpids, ccmpids, ampids)) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish cachePlayTimeProcesses") def _scheduleKill(self, pPid, pKill): # kill process try: # if trying to terminate if not pKill: # logging log.log(cons.TK_LOG_LEVEL_WARN, "sending terminate signal to process %s" % (pPid)) # terminate psutil.Process(pid=int(pPid)).terminate() # now just kill else: # logging log.log(cons.TK_LOG_LEVEL_WARN, "sending kill signal to process %s" % (pPid)) # kill psutil.Process(pid=int(pPid)).kill() except: # error in killing does not matter pass def processPlayTimeActivities(self): """This is the main process to take care of PT processes""" # cache processes self._cachePlayTimeProcesses() def verifyPlayTimeActive(self, pUid, pUname, pSilent=False): """Return whether PlayTime is active, i.e. offending process is running""" # if we have user if pUid in self._cachedPids[self._USRS]: # extra log if not pSilent and log.isDebugEnabled(): # logging log.log(cons.TK_LOG_LEVEL_DEBUG, "PT: user \"%s\" (%s) has %i matching processes out of %i, using %i filters" % (pUname, pUid, len(self._cachedPids[self._USRS][pUid][self._MPIDS]), len(self._cachedPids[self._USRS][pUid][self._PIDS]), len(self._cachedPids[self._USRS][pUid][self._FLTS]))) # result return True if self._cachedPids[self._USRS][pUid][self._MPIDS] else False else: # result return False def processPlayTimeFilters(self, pUid, pFlts): """Add, modify, delete user process filters""" # if we do not have a user yet if pUid not in self._cachedPids[self._USRS]: # initialize set self._initUserData(str(pUid)) # the logic here is that we need to remove obsolete first and add the rest later # this is due to user may enter filters in a way that process matches more than one filter # therefore not to loose processes, this order is important newFlts = set([rFlt[0] for rFlt in pFlts]) existFlts = set([rFlt for rFlt in self._cachedPids[self._USRS][pUid][self._FLTS]]) # remove obsolete filters for rFlt in existFlts: # if this is obsolete if rFlt not in newFlts: # now remove processes associated with filter for rPid in self._getMatchedProcessesByFilter(pUid, self._cachedPids[self._USRS][pUid][self._FLTS][rFlt], self._cachedPids[self._USRS][pUid][self._MPIDS]): # remove pids self._cachedPids[self._USRS][pUid][self._MPIDS].remove(rPid) # remove filter self._cachedPids[self._USRS][pUid][self._FLTS].pop(rFlt) # process filters for rFlt in newFlts: # if filter does not exist, we need to add it if rFlt not in existFlts: # filter does not exist, we need to add it self._cachedPids[self._USRS][pUid][self._FLTS][rFlt] = [] # firstly check if regexp is valid, in case someone will not enter it correclty (probably by mistake) try: # if this succeeds then match is valid re.compile("^%s$" % (rFlt)) # filter as is flt = rFlt except re.error: # it failed, so we do escape and that's our pattern flt = re.escape(rFlt) # remove brackets "[]" because we use them as description flt = flt.replace("[", "").replace("]", "") # add precompiled filters self._cachedPids[self._USRS][pUid][self._FLTS][rFlt].append(re.compile(r"^%s$" % (flt))) self._cachedPids[self._USRS][pUid][self._FLTS][rFlt].append(re.compile(r"[/\\]%s$" % (flt))) self._cachedPids[self._USRS][pUid][self._FLTS][rFlt].append(re.compile(r"[/\\]%s " % (flt))) # add matched pids to to matched pid list self._cachedPids[self._USRS][pUid][self._MPIDS].update(self._getMatchedProcessesByFilter(pUid, self._cachedPids[self._USRS][pUid][self._FLTS][rFlt], self._cachedPids[self._USRS][pUid][self._PIDS])) def killPlayTimeProcesses(self, pUid): """Kill all PT processes""" # if we have user if pUid in self._cachedPids[self._USRS]: # logging log.log(cons.TK_LOG_LEVEL_WARN, "killing %i PT processes for uid \"%s\" " % (len(self._cachedPids[self._USRS][pUid][self._MPIDS]), pUid)) # terminate / kill all user PT processes for rPid in self._cachedPids[self._USRS][pUid][self._MPIDS]: # increase terminate attempts self._cachedPids[self._PIDS][rPid][self._TERM] += 1 # schedule a terminate / kill (first we try to terminate and later we just kill) GLib.timeout_add_seconds(0.1, self._scheduleKill, rPid, True if self._cachedPids[self._PIDS][rPid][self._TERM] > cons.TK_POLLTIME else False) # --------------- helper methods --------------- # def getCachedProcesses(self): """Get all cached processes""" proc = [[rPid, self._cachedPids[self._PIDS][rPid][self._EXE], self._cachedPids[self._PIDS][rPid][self._CMD]] for rPid in self._cachedPids[self._PIDS]] return proc def getCachedUserProcesses(self, pUserId): """Get processes, that are cached for user""" if pUserId in self._cachedPids[self._USRS]: proc = [[rPid, self._cachedPids[self._PIDS][rPid][self._EXE], self._cachedPids[self._PIDS][rPid][self._CMD]] for rPid in self._cachedPids[self._USRS][pUserId][self._PIDS]] else: proc = [] return proc def getMatchedUserProcesses(self, pUserId): """Get processes, that are cached for user and matches at least one filter""" if pUserId in self._cachedPids[self._USRS]: proc = [[rPid, self._cachedPids[self._PIDS][rPid][self._EXE], self._cachedPids[self._PIDS][rPid][self._CMD]] for rPid in self._cachedPids[self._USRS][pUserId][self._MPIDS]] else: proc = [] return proc def getMatchedUserProcessCnt(self, pUserId): """Get process count, that are cached for user and matches at least one filter""" if pUserId in self._cachedPids[self._USRS]: procCnt = len(self._cachedPids[self._USRS][pUserId][self._MPIDS]) else: procCnt = 0 return procCnt timekpr-next/server/user/__init__.py000664 001750 001750 00000000000 13476006650 021567 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/user/userdata.py000644 001750 001750 00000147541 15122253261 021654 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import section from datetime import datetime, timedelta, timezone import random import string import math # timekpr imports from timekpr.common.log import log from timekpr.common.constants import constants as cons from timekpr.server.interface.dbus.logind.user import timekprUserManager from timekpr.common.utils.notifications import timekprNotificationManager from timekpr.common.utils.config import timekprUserConfig from timekpr.common.utils.config import timekprUserControl class timekprUser(object): """Contains all the data for timekpr user""" def __init__(self, pBusName, pUserId, pUserName, pUserPath, pTimekprConfig, pPlayTimeConfig): """Initialize all stuff for user""" log.log(cons.TK_LOG_LEVEL_INFO, "start init timekprUser") # init limit structure self._timekprUserData = self._initUserLimits() # set user data self._timekprUserData[cons.TK_CTRL_UID] = pUserId self._timekprUserData[cons.TK_CTRL_UNAME] = pUserName self._timekprUserData[cons.TK_CTRL_UPATH] = pUserPath # global server config self._timekprConfig = pTimekprConfig # PlayTime option self._timekprPlayTimeConfig = pPlayTimeConfig # set up user properties self._timekprUserData[cons.TK_CTRL_SCR_N] = False # is screensaver running self._timekprUserData[cons.TK_CTRL_SCR_K] = None # verification key # save the bus self._timekprUserManager = timekprUserManager(self._timekprUserData[cons.TK_CTRL_UNAME], self._timekprUserData[cons.TK_CTRL_UPATH]) # user config self._timekprUserConfig = timekprUserConfig(self._timekprConfig.getTimekprConfigDir(), self._timekprUserData[cons.TK_CTRL_UNAME]) # user control self._timekprUserControl = timekprUserControl(self._timekprConfig.getTimekprWorkDir(), self._timekprUserData[cons.TK_CTRL_UNAME]) # user notification self._timekprUserNotification = timekprNotificationManager(pBusName, self._timekprUserData[cons.TK_CTRL_UNAME], pTimekprConfig) log.log(cons.TK_LOG_LEVEL_INFO, "finish init timekprUser") def refreshTimekprRuntimeVariables(self): """Calcualte variables before each method which uses them (idea is not to repeat the calculations)""" # establish current time self._effectiveDatetime = datetime.now().replace(microsecond=0) # get DOW self._currentDOW = str(datetime.date(self._effectiveDatetime).isoweekday()) # get HOD self._currentHOD = self._effectiveDatetime.hour # get HOD self._currentMOH = self._effectiveDatetime.minute # get seconds left in day self._secondsLeftDay = int(((datetime(self._effectiveDatetime.year, self._effectiveDatetime.month, self._effectiveDatetime.day) + timedelta(days=1)) - self._effectiveDatetime).total_seconds()) # get seconds left in hour self._secondsLeftHour = int(((self._effectiveDatetime + timedelta(hours=1)).replace(microsecond=0, second=0, minute=0) - self._effectiveDatetime).total_seconds()) # how many seconds are in this hour self._secondsInHour = int((self._effectiveDatetime - self._effectiveDatetime.replace(microsecond=0, second=0, minute=0)).total_seconds()) def _initUserLimits(self): """Initialize default limits for the user""" # init time variables self.refreshTimekprRuntimeVariables(); # the config works as follows: # we have cons.LIMIT, this limit is either time allowed per day or if that is not used, all seconds in allowed hours # in hour section (0 is the sample in config), we have whether one is allowed to work in particular hour and then we have time spent (which can be paused as well) # the rest must be easy # define structure for limits # day: next day | limit | left per day + hours 0 - 23 (0 hour sample included) limits = { # per day values # -- see the loop below initial assignment -- # additional limits cons.TK_CTRL_LIMITW : None, # this is limit per week cons.TK_CTRL_LIMITM : None, # this is limit per month # global time acconting values cons.TK_CTRL_LEFT : 0, # this is how much time left is countinously cons.TK_CTRL_LEFTW : 0, # this is left per week cons.TK_CTRL_LEFTM : 0, # this is left per month cons.TK_CTRL_SPENTD : 0, # this is spent per day cons.TK_CTRL_SPENTW : 0, # this is spent per week cons.TK_CTRL_SPENTM : 0, # this is spent per month # total spent and sleep values for session (currently for reporting only) cons.TK_CTRL_SPENT : 0, # time spent while user was logged in and active cons.TK_CTRL_SLEEP : 0, # time spent while user was logged in and sleeping # checking values cons.TK_CTRL_LCHECK : self._effectiveDatetime, # this is last checked time cons.TK_CTRL_LSAVE : self._effectiveDatetime, # this is last save time (physical save will be less often as check) cons.TK_CTRL_LMOD : self._effectiveDatetime, # this is last control save time cons.TK_CTRL_LCMOD : self._effectiveDatetime, # this is last config save time # user values cons.TK_CTRL_UID : None, # user id (not used, but still saved) cons.TK_CTRL_UNAME : "", # user name, this is the one we need cons.TK_CTRL_UPATH : "", # this is for DBUS communication purposes # user session values (comes directly from user session) cons.TK_CTRL_SCR_N : False, # actual value cons.TK_CTRL_SCR_K : None, # verification key value cons.TK_CTRL_SCR_R : 0 # retry count for verification } # fill up every day and hour # loop through days for i in range(1, 7+1): # fill up day limits[str(i)] = {cons.TK_CTRL_NDAY: str(i + 1 if i < 7 else 1), cons.TK_CTRL_PDAY: str(i - 1 if i > 1 else 7), cons.TK_CTRL_LIMITD: None, cons.TK_CTRL_SPENTBD: None, cons.TK_CTRL_LEFTD: None, "0": {cons.TK_CTRL_ACT: True, cons.TK_CTRL_SPENTH: 0, cons.TK_CTRL_SLEEP: 0, cons.TK_CTRL_SMIN: 0, cons.TK_CTRL_EMIN: 60}} # loop through hours for j in range(0, 23+1): # initial limit is whole hour limits[str(i)][str(j)] = {cons.TK_CTRL_ACT: False, cons.TK_CTRL_SPENTH: 0, cons.TK_CTRL_SLEEP: 0, cons.TK_CTRL_SMIN: 0, cons.TK_CTRL_EMIN: 60, cons.TK_CTRL_UACC: False} # ## this section adds additional features ## # PlayTime limits[cons.TK_CTRL_PTCNT] = {} limits[cons.TK_CTRL_PTCNT][cons.TK_CTRL_PTLSTC] = 0 # loop through days for i in range(1, 7+1): # adding days and allowances limits[cons.TK_CTRL_PTCNT][str(i)] = {cons.TK_CTRL_LIMITD: 0, cons.TK_CTRL_LEFTD: 0, cons.TK_CTRL_SPENTBD: 0, cons.TK_CTRL_SPENTD: 0} # return limits return limits def deInitUser(self): """De-initialize timekpr user""" # logging log.log(cons.TK_LOG_LEVEL_INFO, "de-initialization of \"%s\" DBUS connections" % (self.getUserName())) # deinit self._timekprUserNotification.deInitUser() def recalculateTimeLeft(self): """Recalculate time left based on spent and configuration""" # reset "lefts" self._timekprUserData[cons.TK_CTRL_LEFT] = 0 # calculate time left for week self._timekprUserData[cons.TK_CTRL_LEFTW] = self._timekprUserData[cons.TK_CTRL_LIMITW] - self._timekprUserData[cons.TK_CTRL_SPENTW] # calculate time left for month self._timekprUserData[cons.TK_CTRL_LEFTM] = self._timekprUserData[cons.TK_CTRL_LIMITM] - self._timekprUserData[cons.TK_CTRL_SPENTM] # account PlayTime for this day self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_LEFTD] = self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_LIMITD] - self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTBD] # continous time contTime = True # calculate "lefts" timesLeft = {cons.TK_CTRL_LEFTD: 0, cons.TK_CTRL_LEFTW: self._timekprUserData[cons.TK_CTRL_LEFTW], cons.TK_CTRL_LEFTM: self._timekprUserData[cons.TK_CTRL_LEFTM]} # go through days for i in (self._currentDOW, self._timekprUserData[self._currentDOW][cons.TK_CTRL_NDAY]): # reset "lefts" self._timekprUserData[i][cons.TK_CTRL_LEFTD] = 0 # how many seconds left for that day (not counting hours limits yet) timesLeft[cons.TK_CTRL_LEFTD] = self._timekprUserData[i][cons.TK_CTRL_LIMITD] - self._timekprUserData[i][cons.TK_CTRL_SPENTBD] # left is least of the limits secondsLeft = max(min(timesLeft[cons.TK_CTRL_LEFTD], timesLeft[cons.TK_CTRL_LEFTW], timesLeft[cons.TK_CTRL_LEFTM]), 0) # this is it (no time or there will be no continous time for this day) if secondsLeft <= 0 or not contTime: break # determine current HOD currentHOD = self._currentHOD if self._currentDOW == i else 0 # go through hours for this day for j in range(currentHOD, 23+1): # reset seconds to add secondsToAddHour = secondsLeftHour = 0 # calculate only if hour is enabled if self._timekprUserData[i][str(j)][cons.TK_CTRL_ACT]: # certain values need to be calculated as per this hour if self._currentDOW == i and self._currentHOD == j: # this is how many seconds are actually left in hour (as per generic time calculations) secondsLeftHour = self._secondsLeftHour # calculate how many seconds are left in this hour as per configuration secondsLeftHourLimit = (self._timekprUserData[i][str(j)][cons.TK_CTRL_EMIN] * 60 - self._currentMOH * 60 - self._effectiveDatetime.second) if (self._timekprUserData[i][str(j)][cons.TK_CTRL_SMIN] * 60 <= self._currentMOH * 60 + self._effectiveDatetime.second) else 0 else: # full hour available secondsLeftHour = 3600 # calculate how many seconds are left in this hour as per configuration secondsLeftHourLimit = (self._timekprUserData[i][str(j)][cons.TK_CTRL_EMIN] - self._timekprUserData[i][str(j)][cons.TK_CTRL_SMIN]) * 60 # continous time check for start of the hour (needed to see whether any of next hours are continous before adding to available time) contTime = (contTime and self._timekprUserData[i][str(j)][cons.TK_CTRL_SMIN] == 0) # save seconds to subtract for this hour secondsToAddHour = max(min(secondsLeftHour, secondsLeftHourLimit, secondsLeft), 0) # debug if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "currentDOW: %s, currentHOD: %i, secondsLeftHour: %i, currentMOH: %i, currentSOM: %i, secondsLeftHourLimit: %i, secondsToAddHour: %i, secondsLeft: %i" % (i, j, secondsLeftHour, self._currentMOH, self._effectiveDatetime.second, secondsLeftHourLimit, secondsToAddHour, secondsLeft)) # hour is disabled else: # time is over already from the start (it won't be added to current session, but we'll count the rest of hours allowed) contTime = False # debug if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "day: %s, hour: %i, enabled: %s, addToHour: %i, contTime: %i, leftD: %i, leftWk: %i, leftMon: %i" % (i, j, self._timekprUserData[i][str(j)][cons.TK_CTRL_ACT], secondsToAddHour, contTime, timesLeft[cons.TK_CTRL_LEFTD], self._timekprUserData[cons.TK_CTRL_LEFTW], self._timekprUserData[cons.TK_CTRL_LEFTM])) # adjust left continously self._timekprUserData[cons.TK_CTRL_LEFT] += secondsToAddHour if contTime else 0 # adjust left this hour self._timekprUserData[i][cons.TK_CTRL_LEFTD] += secondsToAddHour # recalculate "lefts" timesLeft[cons.TK_CTRL_LEFTD] -= secondsToAddHour timesLeft[cons.TK_CTRL_LEFTW] -= secondsToAddHour timesLeft[cons.TK_CTRL_LEFTM] -= secondsToAddHour secondsLeft -= secondsToAddHour # recalculate whether time is continous after accounting the time (handles the end of hour) # time previously was previously continous (no break) # seconds to add must be at least equal to the seconds left in this hour (all hour is available) # total seconds left this day cannot be 0 unless it's the end of the day (when seconds for the day ends, the only plausible case is the end of the day) contTime = True if (contTime and not secondsToAddHour < secondsLeftHour and not (secondsLeft <= 0 and j != 23)) else False # this is it (time over) if secondsLeft <= 0 or (not contTime and self._currentDOW != i): # time is over break # debug if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "leftInRow: %i, leftDay: %i, lefDay+1: %i" % (self._timekprUserData[cons.TK_CTRL_LEFT], self._timekprUserData[self._currentDOW][cons.TK_CTRL_LEFTD], self._timekprUserData[self._timekprUserData[self._currentDOW][cons.TK_CTRL_NDAY]][cons.TK_CTRL_LEFTD])) def adjustLimitsFromConfig(self, pSilent=True): """Adjust limits as per loaded configuration""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start adjustLimitsFromConfig") # load config self._timekprUserConfig.loadUserConfiguration() # log config self._timekprUserConfig.logUserConfiguration() # load the configuration into working structures allowedDays = self._timekprUserConfig.getUserAllowedWeekdays() limitsPerWeekday = self._timekprUserConfig.getUserLimitsPerWeekdays() # limits per week & day # we do not have value (yet) for week self._timekprUserData[cons.TK_CTRL_LIMITW] = self._timekprUserConfig.getUserWeekLimit() # we do not have value (yet) for month self._timekprUserData[cons.TK_CTRL_LIMITM] = self._timekprUserConfig.getUserMonthLimit() # load PlayTime configuration into working structures allowedDaysPT = self._timekprUserConfig.getUserPlayTimeAllowedWeekdays() limitsPerWeekdayPT = self._timekprUserConfig.getUserPlayTimeLimitsPerWeekdays() # for allowed weekdays for rDay in cons.TK_ALLOWED_WEEKDAYS.split(";"): # days index idx = allowedDays.index(rDay) if rDay in allowedDays else -1 # limits index idx = idx if idx >= 0 and len(limitsPerWeekday) > idx else -1 # set up limits self._timekprUserData[rDay][cons.TK_CTRL_LIMITD] = limitsPerWeekday[idx] if idx >= 0 else 0 # we do not have value (yet) for day if self._timekprUserData[rDay][cons.TK_CTRL_SPENTBD] is None: # no value means 0 self._timekprUserData[rDay][cons.TK_CTRL_SPENTBD] = 0 # only if not initialized if self._timekprUserData[rDay][cons.TK_CTRL_LEFTD] is None: # initialize left as limit, since we just loaded the configuration self._timekprUserData[rDay][cons.TK_CTRL_LEFTD] = self._timekprUserData[rDay][cons.TK_CTRL_LIMITD] - self._timekprUserData[rDay][cons.TK_CTRL_SPENTBD] # get hours for particular day allowedHours = self._timekprUserConfig.getUserAllowedHours(rDay) # check if it is enabled as per config dayAllowed = rDay in allowedDays # loop through all days for rHour in range(0, 23+1): # if day is disabled, it does not matter whether hour is (order of this if is important) if not dayAllowed: # disallowed hourAllowed = False # if hour is allowed elif str(rHour) in allowedHours: # disallowed hourAllowed = True # set up minutes self._timekprUserData[rDay][str(rHour)][cons.TK_CTRL_SMIN] = allowedHours[str(rHour)][cons.TK_CTRL_SMIN] self._timekprUserData[rDay][str(rHour)][cons.TK_CTRL_EMIN] = allowedHours[str(rHour)][cons.TK_CTRL_EMIN] self._timekprUserData[rDay][str(rHour)][cons.TK_CTRL_UACC] = allowedHours[str(rHour)][cons.TK_CTRL_UACC] # disallowed else: hourAllowed = False # set up in structure self._timekprUserData[rDay][str(rHour)][cons.TK_CTRL_ACT] = hourAllowed # days index idx = allowedDaysPT.index(rDay) if rDay in allowedDaysPT else -1 # limits index idx = idx if idx >= 0 and len(limitsPerWeekdayPT) > idx else -1 # set up PlayTime limits self._timekprUserData[cons.TK_CTRL_PTCNT][rDay][cons.TK_CTRL_LIMITD] = limitsPerWeekdayPT[idx] if idx >= 0 else 0 # process filters only when PT enabled if self._timekprUserConfig.getUserPlayTimeEnabled(): # set up process filters self._timekprPlayTimeConfig.processPlayTimeFilters(self._timekprUserData[cons.TK_CTRL_UID], self._timekprUserConfig.getUserPlayTimeActivities()) # set up last config mod time self._timekprUserData[cons.TK_CTRL_LCMOD] = self._timekprUserConfig.getUserConfigLastModified() # debug if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "adjustLimitsFromConfig structure: %s" % (str(self._timekprUserData))) # get time limits and send them out if needed self.getTimeLimits() # inform user about change if not pSilent: # inform self._timekprUserNotification.timeConfigurationChangedNotification(cons.TK_PRIO_IMPORTANT_INFO) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish adjustLimitsFromConfig") def adjustTimeSpentFromControl(self, pSilent=True, pPreserveSpent=False): """Adjust limits as per loaded configuration""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start adjustTimeSpentFromControl") def _getPlayTimeBalanceSpent(pTimeSpentBeforeReload): """Get PlayTime spent balance""" # def bal = spent = 0 # in case day changed if dayChanged: # get PT status isPTEna, isPTAcc, isPTAct = self._isPlayTimeEnabledAccountedActive(pSilent=True, pCheckActive=True) # if PlayTime is enabled and active, we need to account spent for those seconds (if not active, it will be left as 0) if isPTEna and isPTAct: # seconds in hour for spent spent = spentHour # balance is accounted only when not in override if isPTAcc: bal = spentHour else: # just get the balance bal = self._timekprUserControl.getUserPlayTimeSpentBalance() spent = self._timekprUserControl.getUserPlayTimeSpentDay() + pTimeSpentBeforeReload # balance is adjusted if PT is accounted (not in override mode) if self._isPlayTimeEnabledAccountedActive(pSilent=True)[1]: bal += pTimeSpentBeforeReload # result return bal, spent # in case we force reload the file, we need to account the time which was spent before reload too if pPreserveSpent: # get time spent which was calculated timeSpentBeforeReload = max(self._timekprUserData[self._currentDOW][cons.TK_CTRL_SPENTBD] - self._timekprUserControl.getUserTimeSpentBalance(), 0) # check whether we need to change PT as well timeSpentBeforeReloadPT = max(self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTD] - self._timekprUserControl.getUserPlayTimeSpentDay(), 0) else: # no additional time timeSpentBeforeReload = timeSpentBeforeReloadPT = 0 # read from config self._timekprUserControl.loadUserControl() # log self._timekprUserControl.logUserControl() # tmp use spentHour = int((self._effectiveDatetime - self._timekprUserControl.getUserLastChecked()).total_seconds()) # if time has changed ahead for more than for 3 years this might be a result in CMOS time reset (a user reported this - after CMOS reset it was year 2080) # in this case we do not reset the values, just soak them up and use them if spentHour > 86400 * 365 * 3: # way too ahead of last check time, possible CMOS reset time bug log.log(cons.TK_LOG_LEVEL_WARN, "INFO: user was last checked a very long time ago (%i seconds ago), spent values are not reset to avoid inconsistencies from time resets" % (spentHour)) # nothing has changed dayChanged = weekChanged = monthChanged = False else: # control date components changed dayChanged, weekChanged, monthChanged = self._timekprUserControl.getUserDateComponentChanges(self._effectiveDatetime) # spent this hour spentHour = self._timekprUserData[self._currentDOW][str(self._currentHOD)][cons.TK_CTRL_SPENTH] # if day has changed adjust balance self._timekprUserData[self._currentDOW][cons.TK_CTRL_SPENTBD] = spentHour if dayChanged else self._timekprUserControl.getUserTimeSpentBalance() + timeSpentBeforeReload # if day has changed self._timekprUserData[cons.TK_CTRL_SPENTD] = spentHour if dayChanged else self._timekprUserControl.getUserTimeSpentDay() + timeSpentBeforeReload # if week changed changed self._timekprUserData[cons.TK_CTRL_SPENTW] = spentHour if weekChanged else self._timekprUserControl.getUserTimeSpentWeek() + timeSpentBeforeReload # if month changed self._timekprUserData[cons.TK_CTRL_SPENTM] = spentHour if monthChanged else self._timekprUserControl.getUserTimeSpentMonth() + timeSpentBeforeReload # import that into runtime config (if last check day is the same as current) self._timekprUserData[self._currentDOW][cons.TK_CTRL_LEFTD] = self._timekprUserData[self._currentDOW][cons.TK_CTRL_LIMITD] - self._timekprUserData[self._currentDOW][cons.TK_CTRL_SPENTBD] # account PlayTime as well self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTBD], self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTD] = _getPlayTimeBalanceSpent(timeSpentBeforeReloadPT) # update last file mod time self._timekprUserData[cons.TK_CTRL_LMOD] = self._timekprUserControl.getUserControlLastModified() # inform user about change if not pSilent: # inform self._timekprUserNotification.timeLeftChangedNotification(cons.TK_PRIO_IMPORTANT_INFO) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish adjustTimeSpentFromControl") def _isPlayTimeEnabledAccountedActive(self, pSilent=False, pCheckActive=False): """Return whether PlayTime is enabled, accounted and used at the moment""" # def isPTActive = False # account PlayTime as well (it makes sense to check PT activity only if user is active in the system) isPTEnabled = self._timekprConfig.getTimekprPlayTimeEnabled() and self._timekprUserConfig.getUserPlayTimeEnabled() # whether override mode is enabled isPTAccounted = not self._timekprUserConfig.getUserPlayTimeOverrideEnabled() # check whether active too if pCheckActive and isPTEnabled: # PT active isPTActive = self._timekprPlayTimeConfig.verifyPlayTimeActive(self.getUserId(), self.getUserName(), pSilent) # result return isPTEnabled, isPTAccounted, isPTActive def adjustTimeSpentActual(self, pTimekprConfig): """Adjust time spent (and save it)""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start adjustTimeSpentActual") def _adjustTimeSpentValues(pDay, pHOD, pSecs, pActive): """Adjust time spent values""" # if hour is not accounted, we do not account main time if not pActive or self._timekprUserData[pDay][pHOD][cons.TK_CTRL_UACC]: # track sleep time self._timekprUserData[pDay][pHOD][cons.TK_CTRL_SLEEP] += pSecs # adjust totals for reporting self._timekprUserData[cons.TK_CTRL_SLEEP] += pSecs else: # adjust time spent hour self._timekprUserData[pDay][pHOD][cons.TK_CTRL_SPENTH] += pSecs # adjust time spent day balance self._timekprUserData[pDay][cons.TK_CTRL_SPENTBD] += pSecs # adjust time spent day self._timekprUserData[cons.TK_CTRL_SPENTD] += pSecs # adjust time spent week self._timekprUserData[cons.TK_CTRL_SPENTW] += pSecs # adjust time spent month self._timekprUserData[cons.TK_CTRL_SPENTM] += pSecs # adjust totals for reporting self._timekprUserData[cons.TK_CTRL_SPENT] += pSecs # check if dates have changed dayChanged, weekChanged, monthChanged = self._timekprUserControl.getUserDateComponentChanges(self._effectiveDatetime, self._timekprUserData[cons.TK_CTRL_LCHECK]) # currentHOD in str currentHODStr = str(self._currentHOD) # get time spent timeSpent = max(int((self._effectiveDatetime - self._timekprUserData[cons.TK_CTRL_LCHECK]).total_seconds()), 0) # adjust last time checked self._timekprUserData[cons.TK_CTRL_LCHECK] = self._effectiveDatetime # determine if active userActiveActual, userScreenLocked = self._timekprUserManager.isUserActive(pTimekprConfig, self._timekprUserConfig, self._timekprUserData[cons.TK_CTRL_SCR_N]) userActiveEffective = userActiveActual # def PlayTime userActivePT = False # account PlayTime as well (it makes sense to check PT activity only if user is active in the system) if userActiveEffective: # PT status isPTEna, isPTAcc, isPTAct = self._isPlayTimeEnabledAccountedActive(pSilent=True, pCheckActive=True) # enabled, check actul activity if isPTEna: # PT active userActivePT = isPTAct # if override is enabled, then active is determined differently if not isPTAcc: # override userActiveEffective = userActivePT # if time spent is very much higher than the default polling time, computer might went to sleep? if timeSpent >= cons.TK_POLLTIME * 15: # sleeping time is added to inactive time (there is a question whether that's OK, disabled currently) log.log(cons.TK_LOG_LEVEL_INFO, "INFO: it appears that computer was put to sleep for %i secs" % (timeSpent)) # effectively spent is 0 (we ignore +/- 3 seconds here) timeSpent = 0 else: # set time spent for previous hour (this may be triggered only when day changes) if timeSpent > self._secondsInHour: # adjust time values (either inactive or actual time) _adjustTimeSpentValues(self._timekprUserData[self._currentDOW][cons.TK_CTRL_PDAY] if dayChanged else self._currentDOW, "23" if self._currentHOD == 0 else currentHODStr, timeSpent - self._secondsInHour, userActiveEffective) # adjust time spent for this hour timeSpent = min(timeSpent, self._secondsInHour) # if there is a day change, we need to adjust time for this day and day after if dayChanged: ### handle day change for rDay in (self._currentDOW, self._timekprUserData[self._currentDOW][cons.TK_CTRL_NDAY]): # clean up hours for this day for rHour in range(0, 23+1): # reset spent for hour self._timekprUserData[rDay][str(rHour)][cons.TK_CTRL_SPENTH] = 0 # reset sleeping self._timekprUserData[rDay][str(rHour)][cons.TK_CTRL_SLEEP] = 0 # reset balance for day self._timekprUserData[rDay][cons.TK_CTRL_SPENTBD] = 0 # reset time spent for this day self._timekprUserData[cons.TK_CTRL_SPENTD] = 0 # reset PlayTime balance for this day self._timekprUserData[cons.TK_CTRL_PTCNT][rDay][cons.TK_CTRL_SPENTBD] = 0 # reset PlayTime spent for this day self._timekprUserData[cons.TK_CTRL_PTCNT][rDay][cons.TK_CTRL_SPENTD] = 0 ### handle week change if weekChanged: # set spent for week as not initialized for this week, so new limits will apply properly self._timekprUserData[cons.TK_CTRL_SPENTW] = 0 ### handle month change if monthChanged: # set spent for month as not initialized for this month, so new limits will apply properly self._timekprUserData[cons.TK_CTRL_SPENTM] = 0 # adjust time values (either sleep or inactive or actual time) _adjustTimeSpentValues(self._currentDOW, currentHODStr, timeSpent, userActiveEffective) # count PlayTime if enabled if userActiveEffective and userActivePT: # when override is enabled, only balance for regular time is accounted, PT balance is not # if override is not enabled, we count this only for spent, not for balance (i.e. it will not count towards limit) if not self._timekprUserConfig.getUserPlayTimeOverrideEnabled(): # adjust PlayTime balance this day self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTBD] += timeSpent # adjust PlayTime spent this day self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTD] += timeSpent # logging section if dayChanged: log.log(cons.TK_LOG_LEVEL_INFO, "day change, user: %s, tbal: %i, tsp: %i, ptbal: %i, ptsp: %i" % (self.getUserName(), self._timekprUserData[self._currentDOW][cons.TK_CTRL_SPENTBD], self._timekprUserData[cons.TK_CTRL_SPENTD], self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTBD], self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTD])) if weekChanged: log.log(cons.TK_LOG_LEVEL_INFO, "week change, user: %s, twk: %i" % (self.getUserName(), self._timekprUserData[cons.TK_CTRL_SPENTW])) if monthChanged: log.log(cons.TK_LOG_LEVEL_INFO, "month change, user: %s, tmon: %i" % (self.getUserName(), self._timekprUserData[cons.TK_CTRL_SPENTM])) # check if we need to save progress if abs((self._effectiveDatetime - self._timekprUserData[cons.TK_CTRL_LSAVE]).total_seconds()) >= pTimekprConfig.getTimekprSaveTime() or dayChanged: # save self.saveSpent() log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish adjustTimeSpentActual") # returns if user is active return userActiveEffective, userActiveActual, userScreenLocked def getTimeLeft(self, pForceNotifications=False): """Get how much time is left (for this day and in a row for max this and next day)""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start getTimeLeft") # time left in a row timeLeftToday = self._timekprUserData[self._currentDOW][cons.TK_CTRL_LEFTD] # time left in a row timeLeftInARow = self._timekprUserData[cons.TK_CTRL_LEFT] # time spent this session / time inactive this session / time available from intervals timeSpentThisSession = timeInactiveThisSession = timeAvailableIntervals = 0 # go through hours for this day for j in range(0, 23+1): # for current day (and enabled hours) if self._timekprUserData[self._currentDOW][str(j)][cons.TK_CTRL_ACT]: timeAvailableIntervals += ((self._timekprUserData[self._currentDOW][str(j)][cons.TK_CTRL_EMIN] - self._timekprUserData[self._currentDOW][str(j)][cons.TK_CTRL_SMIN]) * 60) # totals timeSpentThisSession = self._timekprUserData[cons.TK_CTRL_SPENT] timeInactiveThisSession = self._timekprUserData[cons.TK_CTRL_SLEEP] # time spent balance for the day timeSpentBalance = self._timekprUserData[self._currentDOW][cons.TK_CTRL_SPENTBD] # time spent for the day timeSpentDay = self._timekprUserData[cons.TK_CTRL_SPENTD] # time spent for week timeSpentWeek = self._timekprUserData[cons.TK_CTRL_SPENTW] # time spent for week timeSpentMonth = self._timekprUserData[cons.TK_CTRL_SPENTM] # unaccounted hour isCurrentTimeBetweenInterval = self._timekprUserData[self._currentDOW][str(self._currentHOD)][cons.TK_CTRL_SMIN] <= self._currentMOH <= self._timekprUserData[self._currentDOW][str(self._currentHOD)][cons.TK_CTRL_EMIN] timeUnaccountedHour = self._timekprUserData[self._currentDOW][str(self._currentHOD)][cons.TK_CTRL_UACC] if isCurrentTimeBetweenInterval else False # debug (bt = since boot / restart) log.log(cons.TK_LOG_LEVEL_INFO, "get time for \"%s\", tltd %i, tlrow: %i, tspbal: %i, tspbt: %i, tidbt: %i" % (self.getUserName(), timeLeftToday, timeLeftInARow, timeSpentBalance, timeSpentThisSession, timeInactiveThisSession)) # set up values timeValues = {} timeValues[cons.TK_CTRL_LEFTD] = timeLeftToday timeValues[cons.TK_CTRL_LEFT] = timeLeftInARow timeValues[cons.TK_CTRL_SPENT] = timeSpentThisSession timeValues[cons.TK_CTRL_SPENTW] = timeSpentWeek timeValues[cons.TK_CTRL_SPENTM] = timeSpentMonth timeValues[cons.TK_CTRL_SLEEP] = timeInactiveThisSession timeValues[cons.TK_CTRL_TRACK] = self._timekprUserConfig.getUserTrackInactive() timeValues[cons.TK_CTRL_HIDEI] = self._timekprUserConfig.getUserHideTrayIcon() timeValues[cons.TK_CTRL_LIMITD] = self._timekprUserData[self._currentDOW][cons.TK_CTRL_LIMITD] timeValues[cons.TK_CTRL_TNL] = (True if self._timekprUserData[self._currentDOW][cons.TK_CTRL_LIMITD] >= cons.TK_LIMIT_PER_DAY and timeAvailableIntervals >= cons.TK_LIMIT_PER_DAY and timeLeftToday >= (self._secondsLeftDay - self._timekprConfig.getTimekprPollTime()) else False) # PlayTime (only if enabled) if self._isPlayTimeEnabledAccountedActive(pSilent=True)[0]: # time and config for PlayTime timeValues[cons.TK_CTRL_PTTLO] = self._timekprUserConfig.getUserPlayTimeOverrideEnabled() timeValues[cons.TK_CTRL_PTAUH] = self._timekprUserConfig.getUserPlayTimeUnaccountedIntervalsEnabled() timeValues[cons.TK_CTRL_PTSPD] = self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTD] timeValues[cons.TK_CTRL_PTLPD] = max(0, self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_LEFTD]) timeValues[cons.TK_CTRL_PTLSTC] = self.getPlayTimeActiveActivityCnt() # pass uacc too, so notifications can be prevented when hour is unaccounted timeValues[cons.TK_CTRL_UACC] = timeUnaccountedHour # if debug if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "force: %i, timeValues structure: %s" % (pForceNotifications, timeValues)) # process notifications, if needed self._timekprUserNotification.processTimeLeft(pForceNotifications, timeValues) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish getTimeLeft") # return calculated return timeLeftToday, timeLeftInARow, timeSpentThisSession, timeInactiveThisSession, timeSpentBalance, timeSpentDay, timeUnaccountedHour def getPlayTimeLeft(self, pCheckActive=True): """Return whether time is over for PlayTime""" # get time left timeLeftPT = self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_LEFTD] # get PT status isPTEnabled, isPTAccounted, isPTActive = self._isPlayTimeEnabledAccountedActive(pCheckActive=pCheckActive) # if PT is enabled, log the information if isPTEnabled: # logging log.log(cons.TK_LOG_LEVEL_INFO, "get PlayTime for \"%s\", ena: %s, acc: %s, tim: %i" % (self.getUserName(), isPTEnabled, isPTAccounted, timeLeftPT)) # result return timeLeftPT, isPTEnabled, isPTAccounted, isPTActive def saveSpent(self): """Save the time spent by the user""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start saveSpent") # initial config loaded userConfigLastModified = self._timekprUserConfig.getUserConfigLastModified() userControlLastModified = self._timekprUserControl.getUserControlLastModified() # check whether we need to reload file (if externally modified) if self._timekprUserData[cons.TK_CTRL_LCMOD] != userConfigLastModified: log.log(cons.TK_LOG_LEVEL_INFO, "user \"%s\" config changed, prev/now: %s / %s" % (self.getUserName(), self._timekprUserData[cons.TK_CTRL_LCMOD].strftime(cons.TK_LOG_DATETIME_FORMAT), userConfigLastModified.strftime(cons.TK_LOG_DATETIME_FORMAT))) # load config self.adjustLimitsFromConfig(pSilent=False) # check whether we need to reload file (if externally modified) if self._timekprUserData[cons.TK_CTRL_LMOD] != userControlLastModified or self._timekprUserData[cons.TK_CTRL_LCMOD] != userConfigLastModified: # log the change if self._timekprUserData[cons.TK_CTRL_LMOD] != userControlLastModified: log.log(cons.TK_LOG_LEVEL_INFO, "user \"%s\" control changed, prev/now: %s / %s" % (self.getUserName(), self._timekprUserData[cons.TK_CTRL_LMOD].strftime(cons.TK_LOG_DATETIME_FORMAT), userControlLastModified.strftime(cons.TK_LOG_DATETIME_FORMAT))) # load config self.adjustTimeSpentFromControl(pSilent=False, pPreserveSpent=True) # adjust save time as well self._timekprUserData[cons.TK_CTRL_LSAVE] = self._effectiveDatetime # save spent time self._timekprUserControl.setUserTimeSpentBalance(self._timekprUserData[self._currentDOW][cons.TK_CTRL_SPENTBD]) self._timekprUserControl.setUserTimeSpentDay(self._timekprUserData[cons.TK_CTRL_SPENTD]) self._timekprUserControl.setUserTimeSpentWeek(self._timekprUserData[cons.TK_CTRL_SPENTW]) self._timekprUserControl.setUserTimeSpentMonth(self._timekprUserData[cons.TK_CTRL_SPENTM]) self._timekprUserControl.setUserLastChecked(self._effectiveDatetime) self._timekprUserControl.setUserPlayTimeSpentBalance(self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTBD]) self._timekprUserControl.setUserPlayTimeSpentDay(self._timekprUserData[cons.TK_CTRL_PTCNT][self._currentDOW][cons.TK_CTRL_SPENTD]) self._timekprUserControl.saveControl() # renew last modified self._timekprUserData[cons.TK_CTRL_LMOD] = self._timekprUserControl.getUserControlLastModified() # if debug if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "save spent structure: %s" % (str(self._timekprUserData[self._currentDOW]))) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish saveSpent") def getTimeLimits(self): """Calculate time limits for sendout to clients""" # main container timeLimits = {} # check allowed days allowedDays = self._timekprUserConfig.getUserAllowedWeekdays() # traverse the config and get intervals for rDay in cons.TK_ALLOWED_WEEKDAYS.split(";"): # if day is ok, then check hours if rDay in allowedDays: # assign a time limit for the day timeLimits[rDay] = {cons.TK_CTRL_LIMITD: self._timekprUserData[rDay][cons.TK_CTRL_LIMITD], cons.TK_CTRL_INT: list()} # init hours for intervals startHour = endHour = uaccValue = None uaccChanged = False # loop through all days for rHour in range(0, 23+1): # hour in str hourStr = str(rHour) # fill up start value if self._timekprUserData[rDay][hourStr][cons.TK_CTRL_ACT]: # no value (interval was changed) uaccValue = self._timekprUserData[rDay][hourStr][cons.TK_CTRL_UACC] if uaccValue is None else uaccValue # calc uacc changes uaccChanged = self._timekprUserData[rDay][hourStr][cons.TK_CTRL_UACC] != uaccValue # this is needed in case next hour starts with particular minutes, in which case continous interval ends if startHour is not None and (self._timekprUserData[rDay][hourStr][cons.TK_CTRL_SMIN] != 0 or uaccChanged): # fill interval with start and end (because hours are continous, we can count on sequential change) timeLimits[rDay][cons.TK_CTRL_INT].append([int(startHour), int(endHour), uaccValue]) # restart hour intervals startHour = uaccValue = None uaccChanged = False # if hour is enabled for use, we count the interval if self._timekprUserData[rDay][hourStr][cons.TK_CTRL_ACT]: # uacc value uaccValue = self._timekprUserData[rDay][hourStr][cons.TK_CTRL_UACC] # set start hour only if it has not beed set up, that is to start the interval if startHour is None: # start startHour = int(((cons.TK_DATETIME_START + timedelta(hours=rHour, minutes=self._timekprUserData[rDay][hourStr][cons.TK_CTRL_SMIN])) - cons.TK_DATETIME_START).total_seconds()) # end endHour = int(((cons.TK_DATETIME_START + timedelta(hours=rHour, minutes=self._timekprUserData[rDay][hourStr][cons.TK_CTRL_EMIN])) - cons.TK_DATETIME_START).total_seconds()) # interval ends if hour is not allowed or this is the end of the day if (not self._timekprUserData[rDay][hourStr][cons.TK_CTRL_ACT] and startHour is not None) or self._timekprUserData[rDay][hourStr][cons.TK_CTRL_EMIN] != 60: # fill interval with start and end (because end interval is unfinished (break in continuity)) timeLimits[rDay][cons.TK_CTRL_INT].append([int(startHour), int(endHour), uaccValue]) # restart hour intervals startHour = uaccValue = None uaccChanged = False # after we processed intervals, let's check whether we closed all, if not do it if startHour is not None: # fill unfinished interval timeLimits[rDay][cons.TK_CTRL_INT].append([int(startHour), int(endHour), uaccValue]) # weekly and monthly limits timeLimits[cons.TK_CTRL_LIMITW] = self._timekprUserData[cons.TK_CTRL_LIMITW] # weekly and monthly limits timeLimits[cons.TK_CTRL_LIMITM] = self._timekprUserData[cons.TK_CTRL_LIMITM] # ## PlayTime ## # initialize limit and process list timeLimits[cons.TK_CTRL_PTLMT] = list() timeLimits[cons.TK_CTRL_PTLST] = list() # get PT days, limits and activities allowedDaysPT = self._timekprUserConfig.getUserPlayTimeAllowedWeekdays() allowedLimitsPT = self._timekprUserConfig.getUserPlayTimeLimitsPerWeekdays() allowedApplsPT = self._timekprUserConfig.getUserPlayTimeActivities() # fill in limits (keep this ordered for days) for rDay in cons.TK_ALLOWED_WEEKDAYS.split(";"): # days index idx = allowedDaysPT.index(rDay) if rDay in allowedDaysPT else -1 # limits index idx = idx if idx >= 0 and len(allowedLimitsPT) > idx else -1 # check if particular day is enabled if idx >= 0: # add day and limit to the list timeLimits[cons.TK_CTRL_PTLMT].append([rDay, allowedLimitsPT[idx]]) # fill in activities for rAppl in allowedApplsPT: # add process (process and description) to the list timeLimits[cons.TK_CTRL_PTLST].append(rAppl) # add enable as well (exception in limits case) timeLimits[cons.TK_CTRL_PTTLE] = self._timekprUserConfig.getUserPlayTimeEnabled() # add override as well (exception in limits case) timeLimits[cons.TK_CTRL_PTTLO] = self._timekprUserConfig.getUserPlayTimeOverrideEnabled() # add allowed during unaccounted intervals as well (exception in limits case) timeLimits[cons.TK_CTRL_PTAUH] = self._timekprUserConfig.getUserPlayTimeUnaccountedIntervalsEnabled() # debug if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "TL: %s" % (str(timeLimits))) # process notifications, if needed self._timekprUserNotification.processTimeLimits(timeLimits) def processUserSessionAttributes(self, pWhat, pKey, pValue): """This will set up request or verify actual request for user attribute changes""" # depends on what attribute if pWhat == cons.TK_CTRL_SCR_N: # set it to false, e.g. not in force self._timekprUserData[cons.TK_CTRL_SCR_N] = False # if there is no key, we need to set up validation key if pKey == "": # logging log.log(cons.TK_LOG_LEVEL_INFO, "session attributes request: %s" % (pWhat)) # generate random key self._timekprUserData[cons.TK_CTRL_SCR_K] = "".join(random.choice(string.ascii_uppercase + string.digits) for _ in range(16)) """ Clarification about re-validation. Theoretically it's not that hard to fake these, if one desires. Just write a sofware that responds to requests. However, that is doable only for those who know what to do and those are mostly experienced users (I would say xperienced a LOT (DBUS is not common to non-developers)), so maybe they should not be using timekpr in the first place? """ # send verification request self._timekprUserNotification.procesSessionAttributes(pWhat, self._timekprUserData[cons.TK_CTRL_SCR_K]) # if key set set up in server, we compare it elif pKey is not None and self._timekprUserData[cons.TK_CTRL_SCR_K] is not None: # logging log.log(cons.TK_LOG_LEVEL_INFO, "session attributes verify: %s,%s,%s" % (pWhat, "key", pValue)) # if verification is successful if pKey == self._timekprUserData[cons.TK_CTRL_SCR_K]: # set up valid property self._timekprUserData[cons.TK_CTRL_SCR_N] = True if str(pValue).lower() in ("true", "1") else False # reset key anyway self._timekprUserData[cons.TK_CTRL_SCR_K] = None else: # logging log.log(cons.TK_LOG_LEVEL_INFO, "session attributes out of order: %s,%s,%s" % (pWhat, "key", pValue)) # reset key anyway self._timekprUserData[cons.TK_CTRL_SCR_K] = None def revalidateUserSessionAttributes(self): """Actual user session attributes have to be revalidated from time to time. This will take care of that""" # increase stuff self._timekprUserData[cons.TK_CTRL_SCR_R] += 1 # revalidate only when time has come if self._timekprUserData[cons.TK_CTRL_SCR_R] >= math.ceil(cons.TK_MAX_RETRIES / 2): # screensaver # revalidate only if active (that influences time accounting) if self._timekprUserData[cons.TK_CTRL_SCR_N]: # logging log.log(cons.TK_LOG_LEVEL_INFO, "send re-validation request to user \"%s\"" % (self.getUserName())) # send verification request self.processUserSessionAttributes(cons.TK_CTRL_SCR_N, "", None) # reset retries self._timekprUserData[cons.TK_CTRL_SCR_R] = 0 def findNextAvailableIntervalStart(self): """Find next available interval start for user""" # result res = None # wakeup hours hrs = self._timekprUserConfig.getUserWakeupHourInterval() hrFrom = int(hrs[0]) hrTo = int(hrs[1]) # loop through all hours for today for rHour in range(self._currentHOD, 23+1): # check if hour is enabled if self._timekprUserData[self._currentDOW][str(rHour)][cons.TK_CTRL_ACT]: # if current hour, we need to check whether it's possible to use it (check +one minute ahead) if rHour == self._currentHOD and self._currentMOH + 1 >= self._timekprUserData[self._currentDOW][str(rHour)][cons.TK_CTRL_SMIN]: # start can not be used as it is in the past continue # only if wakeup interval is right elif hrFrom <= rHour <= hrTo: # check if we have interval res = int(datetime(self._effectiveDatetime.year, self._effectiveDatetime.month, self._effectiveDatetime.day, rHour, self._timekprUserData[self._currentDOW][str(rHour)][cons.TK_CTRL_SMIN]).strftime("%s")) # this is it break # msg if none found if res is None: log.log(cons.TK_LOG_LEVEL_INFO, "there is no next interval available today for user \"%s\"" % (self.getUserName())) # return return res def setPlayTimeActiveActivityCnt(self, pActiveActivityCnt): """This sets count of active activities""" self._timekprUserData[cons.TK_CTRL_PTCNT][cons.TK_CTRL_PTLSTC] = pActiveActivityCnt def getUserId(self): """Return user id""" return self._timekprUserData[cons.TK_CTRL_UID] def getUserName(self): """Return user name""" return self._timekprUserData[cons.TK_CTRL_UNAME] def getUserPathOnBus(self): """Return user DBUS path""" return self._timekprUserData[cons.TK_CTRL_UPATH] def getUserLockoutType(self): """Return user lockout type""" return self._timekprUserConfig.getUserLockoutType() def getPlayTimeActiveActivityCnt(self): """This returns count of active activities""" return self._timekprUserData[cons.TK_CTRL_PTCNT][cons.TK_CTRL_PTLSTC] def getUserPlayTimeUnaccountedIntervalsEnabled(self): """Return whether PlayTime activities are allowed during unlimited hours""" return self._timekprUserConfig.getUserPlayTimeUnaccountedIntervalsEnabled() def processFinalWarning(self, pFinalNotificationType, pSecondsLeft): """Process emergency message about killing""" self._timekprUserNotification.processEmergencyNotification(pFinalNotificationType, max(int(pSecondsLeft), 0)) def lockUserSessions(self): """Lock all user sessions (from users perspective)""" # lock session self._timekprUserManager.lockUserSessions() def getUserSessionList(self): """Get cached session list""" return self._timekprUserManager.getUserSessionList() timekpr-next/server/timekprd.py000644 001750 001750 00000003701 15122253261 020672 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # imports import os import sys import dbus # distro detection try: # try to load distro module import distro # if successful, mark it so _DISTRO_AVAILABLE = True except (ImportError, ValueError): # if successful, mark it so _DISTRO_AVAILABLE = False # set up our python path if "/usr/lib/python3/dist-packages" not in sys.path: sys.path.append("/usr/lib/python3/dist-packages") # imports import signal # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.server.interface.dbus.daemon import timekprDaemon from timekpr.common.utils import misc from timekpr.server.config.userhelper import timekprUserStore # main start if __name__ == "__main__": log.log(cons.TK_LOG_LEVEL_INFO, "--- initiating timekpr v. %s ---" % (cons.TK_VERSION)) # simple self-running check if misc.checkAndSetRunning(os.path.splitext(os.path.basename(__file__))[0]): # get out sys.exit(0) # get uname uname = os.uname() log.log(cons.TK_LOG_LEVEL_INFO, "running on: %s, %s, %s, %s" % (uname[0], uname[2], uname[3], uname[4])) # distro if _DISTRO_AVAILABLE: log.log(cons.TK_LOG_LEVEL_INFO, "distribution: %s, %s, %s" % (distro.id(), distro.name(), distro.version())) log.log(cons.TK_LOG_LEVEL_INFO, "using python: %s" % (sys.version)) log.log(cons.TK_LOG_LEVEL_INFO, "dbus python: %s" % (dbus.__version__)) log.log(cons.TK_LOG_LEVEL_INFO, "---") # get daemon class _timekprDaemon = timekprDaemon() # this is needed for appindicator to react to ctrl+c signal.signal(signal.SIGINT, _timekprDaemon.finishTimekpr) signal.signal(signal.SIGTERM, _timekprDaemon.finishTimekpr) # prepare all users in the system timekprUserStore().checkAndInitUsers() # init daemon _timekprDaemon.initTimekpr() # start daemon threads _timekprDaemon.startTimekprDaemon() timekpr-next/server/config/000775 001750 001750 00000000000 15122253261 017747 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/config/configprocessor.py000644 001750 001750 00000204412 15122253204 023524 0ustar00bezvfedubezvfedu000000 000000 """ Created on Jan 17, 2019 @author: mjasnik """ # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.utils.config import timekprUserConfig from timekpr.common.utils.config import timekprUserControl from timekpr.common.utils.config import timekprConfig from timekpr.common.constants import messages as msg # imports from datetime import datetime import dbus class timekprUserConfigurationProcessor(object): """Validate and update configuration data for timekpr user""" def __init__(self, pUserName, pTimekprConfig): """Initialize all stuff for user""" # set up initial variables self._configDir = pTimekprConfig.getTimekprConfigDir() self._workDir = pTimekprConfig.getTimekprWorkDir() self._userName = pUserName self._timekprUserConfig = None self._timekprUserControl = None def loadAndCheckUserConfiguration(self): """Load the user configuration (to verify whether user config exists and is readable)""" # result result = 0 message = "" # user config self._timekprUserConfig = timekprUserConfig(self._configDir, self._userName) # result if not self._timekprUserConfig.loadUserConfiguration(True): # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_USERCONFIG_NOTFOUND") % (self._userName) # result return result, message def loadAndCheckUserControl(self): """Load the user control saved state (to verify whether user control exists and is readable)""" # result result = 0 message = "" # user config self._timekprUserControl = timekprUserControl(self._workDir, self._userName) # result if not self._timekprUserControl.loadUserControl(True): # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_USERCONTROL_NOTFOUND") % (self._userName) # result return result, message def calculateAdjustedDatesForUserControl(self, pCheckDate): """Calculate and save proper dates in control file, in case they wastly differ from what as saved""" # control date components changed dayChanged, weekChanged, monthChanged = self._timekprUserControl.getUserDateComponentChanges(pCheckDate) # set defaults in case day changed if dayChanged: # balance and day must be changed self._timekprUserControl.setUserTimeSpentDay(0) self._timekprUserControl.setUserTimeSpentBalance(0) # set defaults in case week changed if weekChanged: # balance and day must be changed self._timekprUserControl.setUserTimeSpentWeek(0) # set defaults in case month changed if monthChanged: # balance and day must be changed self._timekprUserControl.setUserTimeSpentMonth(0) # save user control file if dates changed if dayChanged or weekChanged or monthChanged: # last check date self._timekprUserControl.setUserLastChecked(pCheckDate) # save self._timekprUserControl.saveControl() def calculateTimeAvailableFromSavedConfiguration(self): """Calculate available time for today from saved config""" # current day currDay = str(datetime.now().isoweekday()) # get available hours for today allowedHours = self._timekprUserConfig.getUserAllowedHours(currDay) # allowed week days allowedWeekDays = self._timekprUserConfig.getUserAllowedWeekdays() # limits per week days allowedWeekDayLimits = self._timekprUserConfig.getUserLimitsPerWeekdays() # time now dtn = datetime.now().replace(microsecond=0) #### normalize days # get max of days / limits limitLen = min(len(allowedWeekDays), len(allowedWeekDayLimits)) # remove excess elements for i in range(limitLen, len(allowedWeekDays)): allowedWeekDays.pop() # remove excess elements for i in range(limitLen, len(allowedWeekDayLimits)): allowedWeekDayLimits.pop() # calc availableSeconds = 0 availableSecondsAlt = 0 # count available seconds for intervals starting this hour for rHour in range(dtn.hour, 24): # calc from now if str(rHour) in allowedHours: # for current hour we have to take care of time in progress at the moment if rHour == dtn.hour: availableSeconds += max((max(allowedHours[str(rHour)][cons.TK_CTRL_EMIN], dtn.minute) - max(allowedHours[str(rHour)][cons.TK_CTRL_SMIN], dtn.minute)) * 60 - dtn.second, 0) # for the rest of hours, current secs and mins are not important else: availableSeconds += ((allowedHours[str(rHour)][cons.TK_CTRL_EMIN] - allowedHours[str(rHour)][cons.TK_CTRL_SMIN]) * 60) # calculate available seconds from todays limit if currDay in allowedWeekDays: availableSecondsAlt = allowedWeekDayLimits[allowedWeekDays.index(currDay)] # calculate how much is actually left (from intervals left, time spent and available as well as max that's possible to have) availableSeconds = max(min(min(availableSeconds, availableSecondsAlt - self._timekprUserControl.getUserTimeSpentBalance()), cons.TK_LIMIT_PER_DAY), 0) # available seconds return availableSeconds def calculatePlayTimeAvailableFromSavedConfiguration(self): """Calculate available PlayTime for today from saved config""" # current day currDay = str(datetime.now().isoweekday()) # calc availableSeconds = None # allowed week days allowedWeekDays = self._timekprUserConfig.getUserPlayTimeAllowedWeekdays() # only if we have PlayTime information if allowedWeekDays is not None: # calc availableSeconds = 0 # limits per week days allowedWeekDayLimits = self._timekprUserConfig.getUserPlayTimeLimitsPerWeekdays() #### normalize days # get max of days / limits limitLen = min(len(allowedWeekDays), len(allowedWeekDayLimits)) # remove excess elements for i in range(limitLen, len(allowedWeekDays)): allowedWeekDays.pop() # remove excess elements for i in range(limitLen, len(allowedWeekDayLimits)): allowedWeekDayLimits.pop() # calculate available seconds from todays limit if currDay in allowedWeekDays: availableSeconds = allowedWeekDayLimits[allowedWeekDays.index(currDay)] # calculate how much is actually left (from intervals left, time spent and avilable as well as max that's possible to have) availableSeconds = max(min(availableSeconds - self._timekprUserControl.getUserPlayTimeSpentBalance(), cons.TK_LIMIT_PER_DAY), 0) # available seconds return availableSeconds def getSavedUserInformation(self, pInfoLvl, pIsUserLoggedIn): """Get saved user configuration""" """This operates on saved user configuration, it will return all config as big dict""" # defaults result = 0 message = "" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # initialize username storage userConfigurationStore = {} # if we are still fine if result != 0: # result pass # for full and saved info only else: # check if we have this user result, message = self.loadAndCheckUserControl() # if we are still fine if result != 0: # result pass else: # this goes for full information if pInfoLvl == cons.TK_CL_INF_FULL: # allowed hours per weekdays param = "ALLOWED_HOURS" for rDay in cons.TK_ALLOWED_WEEKDAYS.split(";"): # if there is a day if rDay != "": # fill up hours allowedHours = self._timekprUserConfig.getUserAllowedHours(rDay) userConfigurationStore["%s_%s" % (param, rDay)] = allowedHours if len(allowedHours) > 0 else dbus.Dictionary(signature="sv") # allowed week days allowedWeekDays = self._timekprUserConfig.getUserAllowedWeekdays() userConfigurationStore["ALLOWED_WEEKDAYS"] = list(map(dbus.String, allowedWeekDays)) if len(allowedWeekDays) > 0 else dbus.Array(signature="s") # limits per week days allowedWeekDayLimits = self._timekprUserConfig.getUserLimitsPerWeekdays() userConfigurationStore["LIMITS_PER_WEEKDAYS"] = list(map(dbus.Int32, allowedWeekDayLimits)) if len(allowedWeekDayLimits) > 0 else dbus.Array(signature="i") # track inactive userConfigurationStore["TRACK_INACTIVE"] = self._timekprUserConfig.getUserTrackInactive() # hide icon userConfigurationStore["HIDE_TRAY_ICON"] = self._timekprUserConfig.getUserHideTrayIcon() # restriction / lockout type userConfigurationStore["LOCKOUT_TYPE"] = self._timekprUserConfig.getUserLockoutType() # add wake up intervals if type is wake if userConfigurationStore["LOCKOUT_TYPE"] == cons.TK_CTRL_RES_W: # wake up intervals userConfigurationStore["WAKEUP_HOUR_INTERVAL"] = ";".join(self._timekprUserConfig.getUserWakeupHourInterval()) # limit per week userConfigurationStore["LIMIT_PER_WEEK"] = self._timekprUserConfig.getUserWeekLimit() # limit per month userConfigurationStore["LIMIT_PER_MONTH"] = self._timekprUserConfig.getUserMonthLimit() # ## PlayTime config (if enabled) ## userConfigurationStore["PLAYTIME_ENABLED"] = self._timekprUserConfig.getUserPlayTimeEnabled() # PlayTime override enabled userConfigurationStore["PLAYTIME_LIMIT_OVERRIDE_ENABLED"] = self._timekprUserConfig.getUserPlayTimeOverrideEnabled() # PlayTime allowed during unaccounted intervals userConfigurationStore["PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED"] = self._timekprUserConfig.getUserPlayTimeUnaccountedIntervalsEnabled() # PlayTime allowed week days allowedWeekDays = self._timekprUserConfig.getUserPlayTimeAllowedWeekdays() userConfigurationStore["PLAYTIME_ALLOWED_WEEKDAYS"] = list(map(dbus.String, allowedWeekDays)) if len(allowedWeekDays) > 0 else dbus.Array(signature="s") # PlayTime limits per week days allowedWeekDayLimits = self._timekprUserConfig.getUserPlayTimeLimitsPerWeekdays() userConfigurationStore["PLAYTIME_LIMITS_PER_WEEKDAYS"] = list(map(dbus.Int32, allowedWeekDayLimits)) if len(allowedWeekDayLimits) > 0 else dbus.Array(signature="i") # PlayTime activities playTimeActivities = self._timekprUserConfig.getUserPlayTimeActivities() userConfigurationStore["PLAYTIME_ACTIVITIES"] = playTimeActivities if len(playTimeActivities) > 0 else dbus.Array(signature="aas") # this goes for full and saved info if pInfoLvl in (cons.TK_CL_INF_FULL, cons.TK_CL_INF_SAVED): # before return results, we need to check whether user was active and dates did not change since then # this makes sense only of user is NOT currently logged in if not pIsUserLoggedIn: # calculate self.calculateAdjustedDatesForUserControl(datetime.now().replace(microsecond=0)) # get saved values # time spent userConfigurationStore["TIME_SPENT_BALANCE"] = self._timekprUserControl.getUserTimeSpentBalance() # time spent userConfigurationStore["TIME_SPENT_DAY"] = self._timekprUserControl.getUserTimeSpentDay() # time spent userConfigurationStore["TIME_SPENT_WEEK"] = self._timekprUserControl.getUserTimeSpentWeek() # time spent userConfigurationStore["TIME_SPENT_MONTH"] = self._timekprUserControl.getUserTimeSpentMonth() # time available today userConfigurationStore["TIME_LEFT_DAY"] = self.calculateTimeAvailableFromSavedConfiguration() # PlayTime left userConfigurationStore["PLAYTIME_LEFT_DAY"] = self.calculatePlayTimeAvailableFromSavedConfiguration() # PlayTime spent userConfigurationStore["PLAYTIME_SPENT_DAY"] = self._timekprUserControl.getUserPlayTimeSpentDay() # result return result, message, userConfigurationStore def checkAndSetAllowedDays(self, pDayList): """Validate and set up allowed days for the user""" """Validate allowed days for the user server expects only the days that are allowed, sorted in ascending order""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pDayList is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_DAYLIST_NONE") % (self._userName) else: # days days = [] # parse config try: for rDay in pDayList: # empty if str(rDay) != "": # try to convert day tmp = int(rDay) # only if day is in proper interval if rDay not in cons.TK_ALLOWED_WEEKDAYS: tmp = 1/0 else: days.append(tmp) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_DAYLIST_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserAllowedWeekdays(days) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_DAYLIST_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetAllowedHours(self, pDayNumber, pHourList): """Validate set up allowed hours for the user""" """Validate allowed hours for user for particular day server expects only the hours that are needed, hours must be sorted in ascending order please note that this is using 24h format, no AM/PM nonsense expected minutes can be specified in brackets after hour, like: 16[00-45], which means until 16:45""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # pre-check day number isDayNumberValid = False # pre-check day number if pDayNumber is not None: # check for i in range(1, 7+1): if pDayNumber == str(i): isDayNumberValid = True break # if we are still fine if result != 0: # result pass # if we have no days elif pDayNumber is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_ALLOWEDHOURS_DAY_NONE") % (self._userName) # if days are crazy elif pDayNumber != "ALL" and not isDayNumberValid: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_ALLOWEDHOURS_DAY_INVALID") % (self._userName) else: # parse config try: # check the days if pDayNumber != "ALL": dayNumbers = [] dayNumber = str(pDayNumber) else: dayNumbers = ["2", "3", "4", "5", "6", "7"] dayNumber = "1" # create dict of specific day (maybe I'll support more days in a row at some point, though, I think it's a burden to users who'll use CLI) dayLimits = {dayNumber: {}} # minutes can be specified in brackets after hour for rHour in list(map(str, pHourList)): # reset minuten minutesStart = pHourList[rHour][cons.TK_CTRL_SMIN] minutesEnd = pHourList[rHour][cons.TK_CTRL_EMIN] hourUnaccounted = pHourList[rHour][cons.TK_CTRL_UACC] # get our dict done dayLimits[dayNumber][rHour] = {cons.TK_CTRL_SMIN: minutesStart, cons.TK_CTRL_EMIN: minutesEnd, cons.TK_CTRL_UACC: hourUnaccounted} # fill all days (if needed) for rDay in dayNumbers: dayLimits[rDay] = dayLimits[dayNumber] # set up config # check and parse is happening in set procedure down there, so that's a validation and set in one call self._timekprUserConfig.setUserAllowedHours(dayLimits) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_ALLOWEDHOURS_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetTimeLimitForDays(self, pDayLimits): """Validate and set up new timelimits for each day for the user""" """Validate allowable time to user server always expects 7 limits, for each day of the week, in the list""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pDayLimits is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_DAILYLIMITS_NONE") % (self._userName) else: # limits limits = [] # parse config try: for rLimit in pDayLimits: # empty if str(rLimit) != "": # try to convert seconds in day and normalize seconds in proper interval limits.append(max(min(int(rLimit), cons.TK_LIMIT_PER_DAY), 0)) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_DAILYLIMITS_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserLimitsPerWeekdays(limits) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_DAILYLIMITS_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetTrackInactive(self, pTrackInactive): """Validate and set track inactive sessions for the user""" """Validate whether inactive user sessions are tracked true - logged in user is always tracked (even if switched to console or locked or ...) false - user time is not tracked if he locks the session, session is switched to another user, etc.""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pTrackInactive is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_TRACKINACTIVE_NONE") % (self._userName) else: # parse config try: if bool(pTrackInactive): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_TRACKINACTIVE_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserTrackInactive(pTrackInactive) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_TRACKINACTIVE_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetHideTrayIcon(self, pHideTrayIcon): """Validate and set hide tray icon for the user""" """Validate whether icon will be hidden from user true - icon and notifications are NOT shown to user false - icon and notifications are shown to user""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pHideTrayIcon is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_HIDETRAYICON_NONE") % (self._userName) else: # parse config try: if bool(pHideTrayIcon): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_HIDETRAYICON_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserHideTrayIcon(pHideTrayIcon) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_HIDETRAYICON_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetLockoutType(self, pLockoutType, pWakeFrom=None, pWakeTo=None): """Validate and set restriction / lockout type for the user""" """Validate the restricton / lockout type: lock - lock the screen suspend - suspend the computer suspendwake - suspend the computer terminate - terminate sessions (default) shutdown - shutdown computer""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pLockoutType is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_LOCKOUTTYPE_NONE") % (self._userName) # parse config elif pLockoutType not in (cons.TK_CTRL_RES_L, cons.TK_CTRL_RES_S, cons.TK_CTRL_RES_W, cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K, cons.TK_CTRL_RES_D) or not (pWakeFrom.isnumeric() if pWakeFrom is not None else True) or not (pWakeTo.isnumeric() if pWakeTo is not None else True): # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_LOCKOUTTYPE_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserLockoutType(pLockoutType) if pWakeFrom is not None and pWakeTo is not None: self._timekprUserConfig.setUserWakeupHourInterval([pWakeFrom, pWakeTo]) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_LOCKOUTTYPE_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetTimeLimitForWeek(self, pTimeLimitWeek): """Validate and set up new timelimit for week for the user""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pTimeLimitWeek is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_WEEKLYALLOWANCE_NONE") % (self._userName) else: # parse config try: # verification weekLimit = max(min(int(pTimeLimitWeek), cons.TK_LIMIT_PER_WEEK), 0) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_WEEKLYALLOWANCE_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserWeekLimit(weekLimit) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_WEEKLYALLOWANCE_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetTimeLimitForMonth(self, pTimeLimitMonth): """Validate and set up new timelimit for month for the user""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pTimeLimitMonth is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_MONTHLYALLOWANCE_NONE") % (self._userName) else: # parse config try: # verification monthLimit = max(min(int(pTimeLimitMonth), cons.TK_LIMIT_PER_MONTH), 0) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_MONTHLYALLOWANCE_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserMonthLimit(monthLimit) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_MONTHLYALLOWANCE_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetTimeLeft(self, pOperation, pTimeLeft): """Validate and set time left for today for the user""" """Validate time limits for user for this moment: if pOperation is "+" - more time left is addeed if pOperation is "-" time is subtracted if pOperation is "=" or empty, the time is set as it is""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result == 0: # check if we have this user result, message = self.loadAndCheckUserControl() # if we are still fine if result != 0: # result pass # if we have no days elif pOperation not in ("+", "-", "="): # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_TIMELIMIT_OPERATION_INVALID") % (self._userName) else: # parse config try: if int(pTimeLeft) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_TIMELIMIT_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # defaults setLimit = 0 try: # get actual time limit for this day timeLimit = self._timekprUserConfig.getUserLimitsPerWeekdays()[datetime.date(datetime.now()).isoweekday()-1] # decode time left (operations are actually technicall reversed, + for ppl is please add more time and minus is subtract, # but actually it's reverse, because we are dealing with time spent not time left) if pOperation == "+": setLimit = min(max(min(self._timekprUserControl.getUserTimeSpentBalance(), timeLimit) - pTimeLeft, -cons.TK_LIMIT_PER_DAY), cons.TK_LIMIT_PER_DAY) elif pOperation == "-": setLimit = min(max(min(self._timekprUserControl.getUserTimeSpentBalance(), timeLimit) + pTimeLeft, -cons.TK_LIMIT_PER_DAY), cons.TK_LIMIT_PER_DAY) elif pOperation == "=": setLimit = min(max(timeLimit - pTimeLeft, -cons.TK_LIMIT_PER_DAY), cons.TK_LIMIT_PER_DAY) # set up config for day self._timekprUserControl.setUserTimeSpentBalance(setLimit) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_TIMELIMIT_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserControl.saveControl() # result return result, message # ## PlayTime methods ## def checkAndSetPlayTimeEnabled(self, pPlayTimeEnabled): """Validate and set whether PlayTime is available for the user""" """Validate whether PlayTime is available true - PlayTime enabled for the user false - PlayTime disabled for the user""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pPlayTimeEnabled is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_ENABLE_FLAG_NONE") % (self._userName) else: # parse config try: if bool(pPlayTimeEnabled): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_ENABLE_FLAG_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserPlayTimeEnabled(pPlayTimeEnabled) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_ENABLE_FLAG_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetPlayTimeLimitOverride(self, pPlayTimeLimitOverride): """Validate and set whether PlayTime override is available for the user""" """Validate whether PlayTime override is available true - PlayTime override enabled for the user false - PlayTime override disabled for the user""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pPlayTimeLimitOverride is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_OVERRIDE_FLAG_NONE") % (self._userName) else: # parse config try: if bool(pPlayTimeLimitOverride): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_OVERRIDE_FLAG_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserPlayTimeOverrideEnabled(pPlayTimeLimitOverride) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_OVERRIDE_FLAG_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetPlayTimeUnaccountedIntervalsEnabled(self, pPlayTimeUnaccountedIntervalsEnabled): """Validate and set whether PlayTime is allowed during unaccounted intervals for the user""" """Validate whether PlayTime allowed during unaccounted intervals true - PlayTime allowed during unaccounted intervals enabled for the user false - PlayTime allowed during unaccounted intervals disabled for the user""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pPlayTimeUnaccountedIntervalsEnabled is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_UNACC_INT_FLAG_NONE") % (self._userName) else: # parse config try: if bool(pPlayTimeUnaccountedIntervalsEnabled): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_UNACC_INT_FLAG_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserPlayTimeUnaccountedIntervalsEnabled(pPlayTimeUnaccountedIntervalsEnabled) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_UNACC_INT_FLAG_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetPlayTimeAllowedDays(self, pPlayTimeAllowedDays): """Validate and set up allowed PlayTime days for the user""" """Validate allowed PlayTime days for the user server expects only the days that are allowed, sorted in ascending order""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pPlayTimeAllowedDays is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_DAYLIST_NONE") % (self._userName) else: # days days = [] # parse config try: for rDay in pPlayTimeAllowedDays: # empty if str(rDay) != "": # try to convert day tmp = int(rDay) # only if day is in proper interval if rDay not in cons.TK_ALLOWED_WEEKDAYS: tmp = 1/0 else: days.append(tmp) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_DAYLIST_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserPlayTimeAllowedWeekdays(days) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_DAYLIST_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetPlayTimeLimitsForDays(self, pPlayTimeLimits): """Validate and set up new PlayTime limits for each day for the user""" """Validate allowable PlayTime for the user server always expects 7 limits, for each day of the week, in the list""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pPlayTimeLimits is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_DAYLIMITS_NONE") % (self._userName) else: # limits limits = [] # parse config try: for rLimit in pPlayTimeLimits: # empty if str(rLimit) != "": # try to convert seconds in day and normalize seconds in proper interval limits.append(max(min(int(rLimit), cons.TK_LIMIT_PER_DAY), 0)) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_DAYLIMITS_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserPlayTimeLimitsPerWeekdays(limits) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_DAYLIMITS_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetPlayTimeActivities(self, pPlayTimeActivities): """Validate and set up allowed PlayTime activities for the user""" """Validate allowed PlayTime activities for the user server expects array of array of masks/descriptions""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result != 0: # result pass # if we have no days elif pPlayTimeActivities is None: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_ACTIVITIES_NONE") % (self._userName) else: # days activities = [] # parse config try: for rAct in pPlayTimeActivities: # set up act act = (rAct[0], rAct[1]) # add to list activities.append(act) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_ACTIVITIES_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprUserConfig.setUserPlayTimeAcitivityList(activities) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_ACTIVITIES_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserConfig.saveUserConfiguration() # result return result, message def checkAndSetPlayTimeLeft(self, pOperation, pTimeLeft): """Validate and set time left for today for the user""" """Validate time limits for user for this moment: if pOperation is "+" - more time left is addeed if pOperation is "-" time is subtracted if pOperation is "=" or empty, the time is set as it is""" # check if we have this user result, message = self.loadAndCheckUserConfiguration() # if we are still fine if result == 0: # check if we have this user result, message = self.loadAndCheckUserControl() # if we are still fine if result != 0: # result pass # if we have no days elif pOperation not in ("+", "-", "="): # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_TIMELIMIT_OPERATION_INVALID") % (self._userName) else: # parse config try: if int(pTimeLeft) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_TIMELIMIT_INVALID") % (self._userName) # if all is correct, we update the configuration if result == 0: # defaults setLimit = 0 try: # get actual time limit for this day playTimeLimit = self._timekprUserConfig.getUserPlayTimeLimitsPerWeekdays()[datetime.date(datetime.now()).isoweekday()-1] # decode time left (operations are actually technicall reversed, + for ppl is please add more time and minus is subtract, # but actually it's reverse, because we are dealing with time spent not time left) if pOperation == "+": setLimit = min(max(min(self._timekprUserControl.getUserPlayTimeSpentBalance(), playTimeLimit) - pTimeLeft, -cons.TK_LIMIT_PER_DAY), cons.TK_LIMIT_PER_DAY) elif pOperation == "-": setLimit = min(max(min(self._timekprUserControl.getUserPlayTimeSpentBalance(), playTimeLimit) + pTimeLeft, -cons.TK_LIMIT_PER_DAY), cons.TK_LIMIT_PER_DAY) elif pOperation == "=": setLimit = min(max(playTimeLimit - pTimeLeft, -cons.TK_LIMIT_PER_DAY), cons.TK_LIMIT_PER_DAY) # set up config for day self._timekprUserControl.setUserPlayTimeSpentBalance(setLimit) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_USER_ADMIN_CHK_PT_TIMELIMIT_INVALID_SET") % (self._userName) # if we are still fine if result == 0: # save config self._timekprUserControl.saveControl() # result return result, message class timekprConfigurationProcessor(object): """Validate and update configuration data for timekpr server""" def __init__(self): """Initialize all stuff for user""" # configuration init self._timekprConfig = timekprConfig() def loadTimekprConfiguration(self): """Load timekpr config""" # configuration load self._configLoaded = self._timekprConfig.loadMainConfiguration() # if fail if not self._configLoaded: result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_ERROR_GENERIC") else: result = 0 message = "" # result return result, message def getSavedTimekprConfiguration(self): """Get saved user configuration""" """This operates on saved user configuration, it will return all config as big dict""" # initialize username storage timekprConfigurationStore = {} # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass else: # ## load config ## # log level timekprConfigurationStore["TIMEKPR_LOGLEVEL"] = self._timekprConfig.getTimekprLogLevel() # poll time timekprConfigurationStore["TIMEKPR_POLLTIME"] = self._timekprConfig.getTimekprPollTime() # save time timekprConfigurationStore["TIMEKPR_SAVE_TIME"] = self._timekprConfig.getTimekprSaveTime() # termination time timekprConfigurationStore["TIMEKPR_TERMINATION_TIME"] = self._timekprConfig.getTimekprTerminationTime() # final warning time timekprConfigurationStore["TIMEKPR_FINAL_WARNING_TIME"] = self._timekprConfig.getTimekprFinalWarningTime() # final notification time timekprConfigurationStore["TIMEKPR_FINAL_NOTIFICATION_TIME"] = self._timekprConfig.getTimekprFinalNotificationTime() # sessions to track timekprConfigurationStore["TIMEKPR_SESSION_TYPES_CTRL"] = self._timekprConfig.getTimekprSessionsCtrl() # sessions to exclude timekprConfigurationStore["TIMEKPR_SESSION_TYPES_EXCL"] = self._timekprConfig.getTimekprSessionsExcl() # users to exclude timekprConfigurationStore["TIMEKPR_USERS_EXCL"] = self._timekprConfig.getTimekprUsersExcl() # PlayTime enabled timekprConfigurationStore["TIMEKPR_PLAYTIME_ENABLED"] = self._timekprConfig.getTimekprPlayTimeEnabled() # PlayTime enhanced activity monitor enabled timekprConfigurationStore["TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED"] = self._timekprConfig.getTimekprPlayTimeEnhancedActivityMonitorEnabled() # result return result, message, timekprConfigurationStore def checkAndSetTimekprLogLevel(self, pLogLevel): """Validate and set log level""" """ In case we have something to validate, we'll do it here""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pLogLevel is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_LOGLEVEL_NONE") else: # parse try: # try to convert if int(pLogLevel) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_LOGLEVEL_INVALID") % (str(pLogLevel)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprLogLevel(pLogLevel) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_LOGLEVEL_INVALID_SET") % (str(pLogLevel)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprPollTime(self, pPollTimeSecs): """Validate and Set polltime for timekpr""" """ set in-memory polling time (this is the accounting precision of the time""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pPollTimeSecs is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_POLLTIME_NONE") else: # parse try: # try to convert if int(pPollTimeSecs) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_POLLTIME_INVALID") % (str(pPollTimeSecs)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprPollTime(pPollTimeSecs) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_POLLTIME_INVALID_SET") % (str(pPollTimeSecs)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprSaveTime(self, pSaveTimeSecs): """Check and set save time for timekpr""" """Set the interval at which timekpr saves user data (time spent, etc.)""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pSaveTimeSecs is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_SAVETIME_NONE") else: # parse try: # try to convert if int(pSaveTimeSecs) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_SAVETIME_INVALID") % (str(pSaveTimeSecs)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprSaveTime(pSaveTimeSecs) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_SAVETIME_INVALID_SET") % (str(pSaveTimeSecs)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprTrackInactive(self, pTrackInactive): """Check and set default value for tracking inactive sessions""" """Note that this is just the default value which is configurable at user level""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pTrackInactive is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_TRACKINACTIVE_NONE") else: # parse try: # try to convert if bool(pTrackInactive): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_TRACKINACTIVE_INVALID") % (str(pTrackInactive)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprTrackInactive(pTrackInactive) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_TRACKINACTIVE_INVALID_SET") % (str(pTrackInactive)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprTerminationTime(self, pTerminationTimeSecs): """Check and set up user termination time""" """ User temination time is how many seconds user is allowed in before he's thrown out This setting applies to users who log in at inappropriate time according to user config """ # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pTerminationTimeSecs is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_TERMTIME_NONE") else: # parse try: # try to convert if int(pTerminationTimeSecs) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_TERMTIME_INVALID") % (str(pTerminationTimeSecs)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprTerminationTime(pTerminationTimeSecs) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_TERMTIME_INVALID_SET") % (str(pTerminationTimeSecs)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprFinalWarningTime(self, pFinalWarningTimeSecs): """Check and set up final warning time for users""" """ Final warning time is the countdown lenght (in seconds) for the user before he's thrown out""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pFinalWarningTimeSecs is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_FINALWARNTIME_NONE") else: # parse try: # try to convert if int(pFinalWarningTimeSecs) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_FINALWARNTIME_INVALID") % (str(pFinalWarningTimeSecs)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprFinalWarningTime(pFinalWarningTimeSecs) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_FINALWARNTIME_INVALID_SET") % (str(pFinalWarningTimeSecs)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprFinalNotificationTime(self, pFinalNotificationTimeSecs): """Check and set up final notification time for users""" """ Final notification time is the time prior to ending sessions when final notification is sent out""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pFinalNotificationTimeSecs is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_FINALNOTIFTIME_NONE") else: # parse try: # try to convert if int(pFinalNotificationTimeSecs) > 0: pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_FINALNOTIFTIME_INVALID") % (str(pFinalNotificationTimeSecs)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprFinalNotificationTime(pFinalNotificationTimeSecs) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_FINALNOTIFTIME_INVALID_SET") % (str(pFinalNotificationTimeSecs)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprSessionsCtrl(self, pSessionsCtrl): """Check and set accountable session types for users""" """ Accountable sessions are sessions which are counted as active, there are handful of them, but predefined""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pSessionsCtrl is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_CTRLSESSIONS_NONE") else: # limits sessionsCtrl = [] # parse config try: for rSession in pSessionsCtrl: # try to convert seconds in day and normalize seconds in proper interval sessionsCtrl.append(rSession) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_CTRLSESSIONS_INVALID") # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprSessionsCtrl(sessionsCtrl) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_CTRLSESSIONS_INVALID_SET") # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprSessionsExcl(self, pSessionsExcl): """Check and set NON-accountable session types for users""" """ NON-accountable sessions are sessions which are explicitly ignored during session evaluation, there are handful of them, but predefined""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pSessionsExcl is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_EXCLSESSIONW_NONE") else: # limits sessionsExcl = [] # parse config try: for rSession in pSessionsExcl: # try to convert seconds in day and normalize seconds in proper interval sessionsExcl.append(rSession) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_EXCLSESSIONS_INVALID") # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprSessionsExcl(sessionsExcl) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_EXCLSESSIONS_INVALID_SET") # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprUsersExcl(self, pUsersExcl): """Check and set excluded usernames for timekpr""" """ Excluded usernames are usernames which are excluded from accounting Pre-defined values containt all graphical login managers etc., please do NOT add actual end-users here, You can, but these users will never receive any notifications about time, icon will be in connecting state forever """ # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pUsersExcl is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_EXCLUSERS_NONE") else: # limits usersExcl = [] # parse config try: for rUser in pUsersExcl: # try to convert seconds in day and normalize seconds in proper interval usersExcl.append(rUser) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_EXCLUSERS_INVALID") # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprUsersExcl(usersExcl) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_EXCLUSERS_INVALID_SET") # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprPlayTimeEnabled(self, pPlayTimeEnabled): """Check and set the PlayTime global switch""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pPlayTimeEnabled is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_PLAYTIMEENABLED_NONE") else: # parse try: # try to convert if bool(pPlayTimeEnabled): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_PLAYTIMEENABLED_INVALID") % (str(pPlayTimeEnabled)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprPlayTimeEnabled(pPlayTimeEnabled) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_PLAYTIMEENABLED_INVALID_SET") % (str(pPlayTimeEnabled)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message def checkAndSetTimekprPlayTimeEnhancedActivityMonitorEnabled(self, pPlayTimeAdvancedSearchEnabled): """Check and set the PlayTime global enhanced activity monitor switch""" # load config result, message = self.loadTimekprConfiguration() # if we are still fine if result != 0: # result pass elif pPlayTimeAdvancedSearchEnabled is None: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_PLAYTIME_ENH_ACT_MON_ENABLED_NONE") else: # parse try: # try to convert if bool(pPlayTimeAdvancedSearchEnabled): pass except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_PLAYTIME_ENH_ACT_MON_ENABLED_INVALID") % (str(pPlayTimeAdvancedSearchEnabled)) # if all is correct, we update the configuration if result == 0: # set up config try: self._timekprConfig.setTimekprPlayTimeEnhancedActivityMonitorEnabled(pPlayTimeAdvancedSearchEnabled) except Exception: # result result = -1 message = msg.getTranslation("TK_MSG_ADMIN_CHK_PLAYTIME_ENH_ACT_MON_ENABLED_INVALID_SET") % (str(pPlayTimeAdvancedSearchEnabled)) # if we are still fine if result == 0: # save config self._timekprConfig.saveTimekprConfiguration() # result return result, message timekpr-next/server/config/userhelper.py000644 001750 001750 00000020726 15122253261 022504 0ustar00bezvfedubezvfedu000000 000000 """ Created on Feb 05, 2019 @author: mjasnik """ # imports import fileinput import re import os import pwd import re from glob import glob # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.common.utils.config import timekprConfig from timekpr.common.utils.config import timekprUserConfig from timekpr.common.utils.config import timekprUserControl from timekpr.common.utils.misc import getNormalizedUserNames # user limits _limitsConfig = {} _loginManagers = [result.strip(None) for result in cons.TK_USERS_LOGIN_MANAGERS.split(";")] # defaults _limitsConfig["UID_MIN"] = 1000 _limitsConfig["UID_MAX"] = 60000 # username pattern: # all users, max 101 chars # linux users, extended with uppercase characters and first numeric or "." character # domain users, extended with uppercase characters and first numeric or ".", and "@" symbol _userNameRegexp = re.compile(r"^[a-zA-Z0-9_\.]([a-zA-Z0-9_\.@-]{0,101}|[a-zA-Z0-9_\.@-]{0,100}\$)$") # some distros are "different", login.defs may be in different dir, config reflects multiple dirs to check for the file for rFile in cons.TK_USER_LIMITS_FILE: # check if file exists if os.path.isfile(rFile): # load limits with fileinput.input(rFile) as rLimitsFile: # read line and do manipulations for rLine in rLimitsFile: # get min/max uids if re.match(r"^UID_M(IN|AX)[ \t]+[0-9]+$", rLine): # find our config x = re.findall(r"^([A-Z_]+)[ \t]+([0-9]+).*$", rLine) # save min/max uuids _limitsConfig[x[0][0]] = int(x[0][1]) # fin break def isUserValid(pUserId, pValidateUIDOnly=False, pUserName=None, pUserShell=None): """Validate user ID, name and shell""" # vars global _limitsConfig global _userNameRegexp isUIDOK = False # now, find info on users, if that is needed if not pValidateUIDOnly and (pUserName is None or pUserShell is None): try: # get userTmp = pwd.getpwuid(int(pUserId)) # replace pUserName = userTmp.pw_name pUserShell = userTmp.pw_shell except: # can not get user info pass # check user id if pUserId is not None and pUserId != "": # check normal users and to test in VMs default user (it may have UID of 999, -1 from limit) isUIDOK = (int(pUserId) >= _limitsConfig["UID_MIN"] - 1) # check shell (if provided) if isUIDOK and pUserShell is not None: # uid is ok and shell is passed if "/nologin" in pUserShell or "/false" in pUserShell or "" == pUserShell: # user is not ours isUIDOK = False # check if username is ok if isUIDOK and pUserName is not None: # uid is ok and name is passed if not _userNameRegexp.match(pUserName): # user is not ours isUIDOK = False # fin return(isUIDOK) def getTimekprLoginManagers(): """Get login manager names""" global _loginManagers return(_loginManagers) def setWakeUpByRTC(pWkeUpTimeEpoch): """Set wakeup time for computer""" res = False # first check that we can access rtc if os.path.isfile(cons.TK_CTRL_WKUPF): try: # now write wakeup timer with open(cons.TK_CTRL_WKUPF, "w") as wakeFile: # write time wakeFile.write(str(pWkeUpTimeEpoch)) # success res = True except: # we only care about this, at least for now, if it succeeds res = False # result return res class timekprUserStore(object): """Class will privide methods to help managing users, like intialize the config for them""" def __init__(self): """Initialize timekprsystemusers""" log.log(cons.TK_LOG_LEVEL_DEBUG, "initializing timekprUserStore") def __del__(self): """Deinitialize timekprsystemusers""" log.log(cons.TK_LOG_LEVEL_DEBUG, "de-initializing timekprUserStore") def checkAndInitUsers(self): """Initialize all users present in the system as per particular config""" # config users = {} # iterate through all usernames for rUser in pwd.getpwall(): # save our user, if it mactches if isUserValid(rUser.pw_uid, pUserName=rUser.pw_name, pUserShell=rUser.pw_shell): # get processed usernames userFName = getNormalizedUserNames(pUser=rUser)[1] # save () users[rUser.pw_name] = [rUser.pw_uid, userFName] # get user config timekprConfigManager = timekprConfig() # load user config timekprConfigManager.loadMainConfiguration() # go through our users for rUser in users: # get path of file file = os.path.join(timekprConfigManager.getTimekprConfigDir(), cons.TK_USER_CONFIG_FILE % (rUser)) # check if we have config for them if not os.path.isfile(file): log.log(cons.TK_LOG_LEVEL_INFO, "setting up user \"%s\" with id %i" % (rUser, users[rUser][0])) # user config timekprUserConfig(timekprConfigManager.getTimekprConfigDir(), rUser).initUserConfiguration() # user control timekprUserControl(timekprConfigManager.getTimekprWorkDir(), rUser).initUserControl() log.log(cons.TK_LOG_LEVEL_DEBUG, "finishing setting up users") # user list return users def getSavedUserList(self, pConfigDir=None): """ Get user list, this will get user list from config files present in the system: no config - no user leftover config - please set up non-existent user (maybe pre-defined one?) """ # initialize username storage filterExistingOnly = False # this is to filter only existing local users (currently just here, not decided on what to do) userList = [] # prepare all users in the system users = self.checkAndInitUsers() # in case we don't have a dir yet if pConfigDir is None: # get user config timekprConfigManager = timekprConfig() # load user config timekprConfigManager.loadMainConfiguration() # config dir configDir = timekprConfigManager.getTimekprConfigDir() else: # use passed value configDir = pConfigDir log.log(cons.TK_LOG_LEVEL_DEBUG, "listing user config files") # now list the config files userConfigFiles = glob(os.path.join(configDir, cons.TK_USER_CONFIG_FILE % ("*"))) log.log(cons.TK_LOG_LEVEL_DEBUG, "traversing user config files") # now walk the list for rUserConfigFile in sorted(userConfigFiles): # exclude standard sample file if "timekpr.USER.conf" not in rUserConfigFile: # first get filename and then from filename extract username part (as per cons.TK_USER_CONFIG_FILE) user = re.sub(cons.TK_USER_CONFIG_FILE.replace(".%s.", r"\.(.*)\."), r"\1", os.path.basename(rUserConfigFile)) # whether user is valid in config file userNameValidated = False # try to read the first line with username with open(rUserConfigFile, "r") as confFile: # read first (x) lines and try to get username for i in range(0, cons.TK_UNAME_SRCH_LN_LMT): # check whether we have correct username if "[%s]" % (user) in confFile.readline(): # user validated userNameValidated = True # found break # validate user against valid (existing) users in the system if userNameValidated and (not filterExistingOnly or user in users): # get actual user name if user in users: # add user name and full name userList.append([user, users[user][1]]) else: # add user name and full name userList.append([user, ""]) log.log(cons.TK_LOG_LEVEL_DEBUG, "finishing user list") # finish return(userList) timekpr-next/server/interface/000775 001750 001750 00000000000 13476006650 020452 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/__init__.py000664 001750 001750 00000000000 13476006650 022551 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/database/000775 001750 001750 00000000000 13476006650 022216 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/database/TODO000664 001750 001750 00000000073 13476006650 022706 0ustar00bezvfedubezvfedu000000 000000 # TODO: implement this at some point for stats or the like timekpr-next/server/interface/dbus/000775 001750 001750 00000000000 15122253261 021377 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/dbus/daemon.py000644 001750 001750 00000222052 15122253261 023215 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import section import os from gi.repository import GLib from dbus.mainloop.glib import DBusGMainLoop import dbus.service import time import threading import traceback from datetime import datetime, timedelta # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.server.interface.dbus.logind import manager as l1_manager from timekpr.common.utils.config import timekprConfig from timekpr.common.utils import misc from timekpr.server.user.userdata import timekprUser from timekpr.server.user.playtime import timekprPlayTimeConfig from timekpr.server.config.configprocessor import timekprUserConfigurationProcessor from timekpr.server.config.configprocessor import timekprConfigurationProcessor from timekpr.server.config.userhelper import timekprUserStore from timekpr.server.config import userhelper from timekpr.common.constants import messages as msg # default dbus DBusGMainLoop(set_as_default=True) class timekprDaemon(dbus.service.Object): """Main daemon class""" # --------------- initialization / control methods --------------- # def __init__(self): """Initialize daemon variables""" log.log(cons.TK_LOG_LEVEL_INFO, "start init dbus daemon") # get our bus self._timekprBus = (dbus.SessionBus() if (cons.TK_DEV_ACTIVE and cons.TK_DEV_BUS == "ses") else dbus.SystemBus()) # get our bus name (where clients will find us) self._timekprBusName = dbus.service.BusName(cons.TK_DBUS_BUS_NAME, bus=self._timekprBus, replace_existing=True) # init DBUS super().__init__(self._timekprBusName, cons.TK_DBUS_SERVER_PATH) log.log(cons.TK_LOG_LEVEL_INFO, "finish init dbus daemon") def initTimekpr(self): """Init all the required attributes""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start init daemon data") # ## variables ## # init main loop self._timekprMainLoop = GLib.MainLoop() # init termination trigger self._finishExecution = False # this will define login manager self._timekprLoginManagerName = "L1" # this will define login manager self._timekprLoginManager = None # this will define main timekpr configuration loader self._timekprConfig = None # this will hold all timekpr users (collection of user class, index by username) self._timekprUserList = {} # this will hold all timekpr user info which are permanently ignored (sys users, index by UID) self._timekprIgnoredUserList = {} # this will hold all timekpr user info which are ignored and a warning has been written to log at lease once (index by UID) self._timekprWarnedUserList = {} # this will hold collection of users to be terminated self._timekprUserTerminationList = {} # this will hold collection of users who have restrictions to use computer self._timekprUserRestrictionList = {} # PlayTime config self._timekprPlayTimeConfig = None # ## initialization ## # configuration init self._timekprConfig = timekprConfig() self._timekprConfig.loadMainConfiguration() # log self._timekprConfig.logMainConfiguration() # init logging log.setLogging(self._timekprConfig.getTimekprLogLevel(), self._timekprConfig.getTimekprLogfileDir(), cons.TK_LOG_OWNER_SRV, "") # in case we are dealing with logind if self._timekprLoginManagerName == "L1": self._timekprLoginManager = l1_manager.timekprUserLoginManager() # in case we are dealing with consolekit (WHICH IS NOT IMPLEMENTED YET and might NOT be AT ALL) elif self._timekprLoginManagerName == "CK": self._timekprLoginManager = None # PT config self._timekprPlayTimeConfig = timekprPlayTimeConfig(self._timekprConfig) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish init daemon data") def finishTimekpr(self, signal=None, frame=None): """Exit timekpr gracefully""" # show all threads that we are exiting self._finishExecution = True # exit main loop self._timekprMainLoop.quit() log.log(cons.TK_LOG_LEVEL_INFO, "main loop shut down") def executeTimekprMain(self): """Start up main loop""" log.log(cons.TK_LOG_LEVEL_INFO, "start up main loop thread") # wrap in handlers, so we can finish gracefully try: self._timekprMainLoop.run() except KeyboardInterrupt: log.log(cons.TK_LOG_LEVEL_INFO, "asking everything to shut down") # set up finishing flag self.finishTimekpr() # finish logging log.autoFlushLogFile(True) def executeTimekprWorker(self): """Execute all the logic of timekpr""" log.log(cons.TK_LOG_LEVEL_INFO, "start up worker thread") # def execLen = timedelta(0, 0, 0) execCnt = 0 # we execute tasks until not asked to stop while not self._finishExecution: # perf dtsm = time.time() dts = datetime.now() log.log(cons.TK_LOG_LEVEL_INFO, "--- start working on users ---") # do the actual work try: self.checkUsers() except Exception: log.log(cons.TK_LOG_LEVEL_ERR, "---=== ERROR in \"executeTimekprWorker\" working on users ===---") log.log(cons.TK_LOG_LEVEL_ERR, traceback.format_exc()) log.log(cons.TK_LOG_LEVEL_ERR, "---=== ERROR in \"executeTimekprWorker\" working on users ===---") # periodically flush the file log.autoFlushLogFile() # perf lavg = os.getloadavg() perf = datetime.now() - dts execCnt += 1 execLen += perf log.log(cons.TK_LOG_LEVEL_INFO, "--- end working on users (ela: %s) ---" % (str(perf))) log.log(cons.TK_LOG_LEVEL_DEBUG, "--- perf: avg ela: %s, loadavg: %s, %s, %s ---" % (str(execLen/execCnt), lavg[0], lavg[1], lavg[2])) # take a polling pause (try to do that exactly every 3 secs) time.sleep(self._timekprConfig.getTimekprPollTime() - min(time.time() - dtsm, self._timekprConfig.getTimekprPollTime() / 2)) log.log(cons.TK_LOG_LEVEL_INFO, "worker shut down") log.log(cons.TK_LOG_LEVEL_INFO, "--- timekpr v. %s shut down ---" % (cons.TK_VERSION)) # finish logging log.autoFlushLogFile(True) def startTimekprDaemon(self): """Enable threading for all the tasks""" log.log(cons.TK_LOG_LEVEL_INFO, "start daemons") # set up main loop self._timekprMainLoopTh = threading.Thread(target=self.executeTimekprMain) # set up worker self._timekprWorkTh = threading.Thread(target=self.executeTimekprWorker) # start both self._timekprMainLoopTh.start() self._timekprWorkTh.start() log.log(cons.TK_LOG_LEVEL_INFO, "finish daemons, timekpr started") # --------------- worker methods --------------- # def checkUsers(self): """Entry point for user management logic""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start checkUsers") # get user list wasConnectionLost, userList = self._timekprLoginManager.getUserList() # if we had a disaster, remove all users because connection to DBUS was lost if wasConnectionLost: # logging log.log(cons.TK_LOG_LEVEL_WARN, "IMPORTANT WARNING: due to lost DBUS connection, all users are de-initialized (including from DBUS) and re-initalized from saved state") # remove them from dbus for rUser in self._timekprUserList: # remove from DBUS self._timekprUserList[rUser].deInitUser() # delete all users self._timekprUserList.clear() # delete termination list as well self._timekprUserRestrictionList.clear() # if global switch is enabled, we need to refresh processes at some iterval (method determines that by itself) if self._timekprConfig.getTimekprPlayTimeEnabled(): # refresh PT process list self._timekprPlayTimeConfig.processPlayTimeActivities() # add new users to track for rUserName, userDict in userList.items(): # totally skip ignored users if userDict[cons.TK_CTRL_UID] in self._timekprIgnoredUserList: # skip continue # if username is in exclusion list, additionally verify that username is not a sysuser / login manager (this is somewhat obsolete now) elif userDict[cons.TK_CTRL_UID] not in self._timekprWarnedUserList and rUserName in self._timekprConfig.getTimekprUsersExcl() and rUserName not in userhelper.getTimekprLoginManagers(): log.log(cons.TK_LOG_LEVEL_INFO, "NOTE: user \"%s\" with UID %s explicitly excluded (note issued once per user)" % (rUserName, userDict[cons.TK_CTRL_UID])) # add to ignored list self._timekprWarnedUserList[userDict[cons.TK_CTRL_UID]] = { cons.TK_CTRL_UID: userDict[cons.TK_CTRL_UID], cons.TK_CTRL_UNAME: userDict[cons.TK_CTRL_UNAME] } # whether we have a new user elif rUserName not in self._timekprUserList: # login manager is system user, we do these checks only for system users if not userhelper.isUserValid(userDict[cons.TK_CTRL_UID], pUserName=userDict[cons.TK_CTRL_UNAME]): # sys user log.log(cons.TK_LOG_LEVEL_INFO, "NOTE: a system or mismatched user \"%s\" with UID %s explicitly excluded (note issued once per user)" % (rUserName, userDict[cons.TK_CTRL_UID])) # try to get login manager VT (if not already found) self._timekprLoginManager.determineLoginManagerVT(rUserName, userDict[cons.TK_CTRL_UPATH]) # add to ignored list self._timekprIgnoredUserList[userDict[cons.TK_CTRL_UID]] = { cons.TK_CTRL_UID: userDict[cons.TK_CTRL_UID], cons.TK_CTRL_UNAME: userDict[cons.TK_CTRL_UNAME] } else: # we have found a new friend log.log(cons.TK_LOG_LEVEL_INFO, "NOTE: we have a new user \"%s\" with UID %s" % (rUserName, userDict[cons.TK_CTRL_UID])) # add user self._timekprUserList[rUserName] = timekprUser( self._timekprBusName, userDict[cons.TK_CTRL_UID], userDict[cons.TK_CTRL_UNAME], userDict[cons.TK_CTRL_UPATH], self._timekprConfig, self._timekprPlayTimeConfig ) # adjust config self._timekprUserList[rUserName].adjustLimitsFromConfig() # adjust time spent self._timekprUserList[rUserName].adjustTimeSpentFromControl() log.log(cons.TK_LOG_LEVEL_INFO, "NOTE: user \"%s\" set up for tracking" % (rUserName)) # session list to remove removableUsers = [rUserName for rUserName in self._timekprUserList if rUserName not in userList] # get rid of users which left for rUserName in removableUsers: log.log(cons.TK_LOG_LEVEL_INFO, "NOTE: user \"%s\" has gone" % (rUserName)) # save everything for the user self._timekprUserList[rUserName].saveSpent() self._timekprUserList[rUserName].deInitUser() # delete users that left self._timekprUserList.pop(rUserName) # remove if exists if rUserName in self._timekprUserRestrictionList: # delete from killing list as well self._timekprUserRestrictionList.pop(rUserName) # go through all users for rUserName in self._timekprUserList: # init variables for user self._timekprUserList[rUserName].refreshTimekprRuntimeVariables() # adjust time spent userActiveEffective, userActiveActual, userScreenLocked = self._timekprUserList[rUserName].adjustTimeSpentActual(self._timekprConfig) # recalculate time left self._timekprUserList[rUserName].recalculateTimeLeft() # process actual user session variable validation self._timekprUserList[rUserName].revalidateUserSessionAttributes() # get stats for user timeLeftArray = self._timekprUserList[rUserName].getTimeLeft() timeLeftToday = timeLeftArray[0] timeLeftInARow = timeLeftArray[1] timeHourUnaccounted = timeLeftArray[6] timePTActivityCnt = 0 # PlayTime left validation if self._timekprConfig.getTimekprPlayTimeEnabled(): # get time left for PLayTime timeLeftPT, isPTEnabled, isPTAccounted, isPTActive = self._timekprUserList[rUserName].getPlayTimeLeft() # enabled and active for user if isPTEnabled and isPTActive: # if there is no time left (compare to almost ultimate answer) # or hour is unaccounted and PT is not allowed in those hours if (isPTAccounted and timeLeftPT < 0.0042) or (timeHourUnaccounted and not self._timekprUserList[rUserName].getUserPlayTimeUnaccountedIntervalsEnabled()): # killing processes self._timekprPlayTimeConfig.killPlayTimeProcesses(self._timekprUserList[rUserName].getUserId()) else: # active count timePTActivityCnt = self._timekprPlayTimeConfig.getMatchedUserProcessCnt(self._timekprUserList[rUserName].getUserId()) # set process count (in case PT was disable in-flight or it has changed) self._timekprUserList[rUserName].setPlayTimeActiveActivityCnt(timePTActivityCnt) # logging log.log(cons.TK_LOG_LEVEL_DEBUG, "user \"%s\", active: %s/%s/%s (act/eff/lck), huacc: %s, tleft: %i" % (rUserName, str(userActiveActual), str(userActiveEffective), str(userScreenLocked), str(timeHourUnaccounted), timeLeftInARow)) # process actions if user is in the restrictions list if rUserName in self._timekprUserRestrictionList: # (internal idle killing switch) + user is not active + there is a time available today (opposing to in a row) if ((not userActiveActual and timeLeftToday > self._timekprConfig.getTimekprTerminationTime()) or timeHourUnaccounted) and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K, cons.TK_CTRL_RES_D): log.log(cons.TK_LOG_LEVEL_INFO, "SAVING user \"%s\" from ending his sessions / shutdown" % (rUserName)) # remove from death list self._timekprUserRestrictionList.pop(rUserName) # if restricted time has passed for hard restrictions, we need to lift the restriction elif (timeLeftInARow > self._timekprConfig.getTimekprTerminationTime() or timeHourUnaccounted) and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K, cons.TK_CTRL_RES_D): log.log(cons.TK_LOG_LEVEL_INFO, "RELEASING terminate / kill / shutdown from user \"%s\"" % (rUserName)) # remove from restriction list self._timekprUserRestrictionList.pop(rUserName) # if restricted time has passed for soft restrictions, we need to lift the restriction elif (timeLeftInARow > self._timekprConfig.getTimekprTerminationTime() or timeHourUnaccounted) and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_L, cons.TK_CTRL_RES_S, cons.TK_CTRL_RES_W): log.log(cons.TK_LOG_LEVEL_INFO, "RELEASING lock / suspend from user \"%s\"" % (rUserName)) # remove from restriction list self._timekprUserRestrictionList.pop(rUserName) # update restriction stats else: # update active states for restriction routines self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USACT] = userActiveActual self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USLCK] = userScreenLocked self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] = max(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] - 1, 0) # only if user is active / screen is not locked if ((userActiveActual and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K, cons.TK_CTRL_RES_D)) or (not userScreenLocked and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_S, cons.TK_CTRL_RES_L, cons.TK_CTRL_RES_W))): # update active states for restriction routines self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] = max(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] - 1, 0) # ## FILL IN USER RESTRICTIONS ## # if user has very few time left, we need to enforce limits: Lock screen / Sleep computer / Shutdown computer / Terminate sessions if timeLeftInARow <= self._timekprConfig.getTimekprTerminationTime() and not timeHourUnaccounted and rUserName not in self._timekprUserRestrictionList and userActiveActual: log.log(cons.TK_LOG_LEVEL_DEBUG, "INFO: user \"%s\" has got restrictions..." % (rUserName)) # add user to restrictions list self._timekprUserRestrictionList[rUserName] = { cons.TK_CTRL_UPATH: self._timekprUserList[rUserName].getUserPathOnBus(), # user path on dbus cons.TK_CTRL_FCNTD: max(timeLeftInARow, self._timekprConfig.getTimekprTerminationTime()), # final countdown cons.TK_CTRL_RESTY: self._timekprUserList[rUserName].getUserLockoutType(), # restricton type: lock, suspend, suspendwake, terminate, kill, shutdown cons.TK_CTRL_RTDEL: 0, # retry delay before next attempt to enforce restrictions cons.TK_CTRL_RTDEA: 0, # retry delay (additional delay for lock in case of suspend) cons.TK_CTRL_USACT: userActiveActual, # whether user is actually active cons.TK_CTRL_USLCK: userScreenLocked, # whether user screen is locked cons.TK_CTRL_USWKU: self._timekprUserList[rUserName].findNextAvailableIntervalStart() if self._timekprUserList[rUserName].getUserLockoutType() == cons.TK_CTRL_RES_W and timeLeftToday > timeLeftInARow else None } # in case this is first restriction we need to initiate restriction process if len(self._timekprUserRestrictionList) == 1: # process users GLib.timeout_add_seconds(1, self._restrictUsers) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish checkUsers") def _restrictUsers(self): """Terminate user sessions""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start user killer") # final warn def _processFinalWarning(pUserName, pFinalNotificationType, pSecondsLeft): # process final warning with error catch (so it won't interfere with ending the sessions) try: self._timekprUserList[pUserName].processFinalWarning(pFinalNotificationType, pSecondsLeft) except Exception: log.log(cons.TK_LOG_LEVEL_ERR, "ERROR sending notification while terminating users:\n%s" % (traceback.format_exc())) # loop through users to be killed for rUserName in self._timekprUserRestrictionList: log.log(cons.TK_LOG_LEVEL_WARN, "RESTRICTIONS, usr: \"%s\", cntd: %i, del: %i, dea: %i" % (rUserName, self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD], self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL], self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA])) # ## check which restriction is needed ## # we are going to TERMINATE user sessions if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K, cons.TK_CTRL_RES_D): # log that we are going to terminate user sessions if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] <= 0: log.log(cons.TK_LOG_LEVEL_WARN, "%s approaching in %s secs" % ("TERMINATE" if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] == cons.TK_CTRL_RES_T else ("KILL" if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] == cons.TK_CTRL_RES_K else "SHUTDOWN"), str(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD]))) # send messages only when certain time is left if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] <= self._timekprConfig.getTimekprFinalWarningTime(): # final warning _processFinalWarning(rUserName, self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY], self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD]) # time to die if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] <= 0: # set restriction for repetitive kill self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] = cons.TK_CTRL_LCDEL * 5 # save user before kill self._timekprUserList[rUserName].saveSpent() # terminate user sessions try: # term if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_T, cons.TK_CTRL_RES_K): # terminate self._timekprLoginManager.terminateUserSessions(rUserName, self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_UPATH], self._timekprConfig, self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY]) # shut elif self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] == cons.TK_CTRL_RES_D: # shutdown self._timekprLoginManager.shutdownComputer(rUserName) except Exception: log.log(cons.TK_LOG_LEVEL_ERR, "ERROR killing sessions: %s" % (traceback.format_exc())) # we are going to LOCK user sessions elif self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] == cons.TK_CTRL_RES_L: # is user active isUserInactive = (not self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USACT] or self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USLCK]) # check if user has locked the screen if isUserInactive and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] <= 0: # we are going lock user sessions log.log(cons.TK_LOG_LEVEL_INFO, "time is up, but user \"%s\" not active, not enforcing the lock" % (rUserName)) # set restriction for repetitive lock self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] = cons.TK_CTRL_LCDEL # lock must be enforced only if user is active elif not isUserInactive: # continue if there is no delay if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] <= 0: # log log.log(cons.TK_LOG_LEVEL_WARN, "LOCK approaching in %s secs" % (str(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD]))) # send messages only when certain time is left if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] <= self._timekprConfig.getTimekprFinalWarningTime(): # final warning _processFinalWarning(rUserName, self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY], self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD]) # time to lock if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] <= 0: # set restriction for repetitive lock self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] = cons.TK_CTRL_LCDEL # log lock log.log(cons.TK_LOG_LEVEL_WARN, "time is up for user \"%s\", enforcing the LOCK" % (rUserName)) # lock computer #self._timekprUserList[rUserName].lockUserSessions() # lock the computer (from manager) self._timekprLoginManager.lockUserSessionsManager(self._timekprUserList[rUserName].getUserSessionList()) # we are going to SUSPEND user sessions elif self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY] in (cons.TK_CTRL_RES_S, cons.TK_CTRL_RES_W): # is user active isUserInactive = (not self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USACT] or self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USLCK]) # check if user has locked the screen if isUserInactive and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] <= 0: # we are going lock user sessions log.log(cons.TK_LOG_LEVEL_INFO, "time is up, but user \"%s\" not active, not enforcing the suspend" % (rUserName)) # set restriction for repetitive lock when suspending self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] = cons.TK_CTRL_LCDEL # suspend / lock must be enforced only if user is active elif not isUserInactive: # continue if there is no delay if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] <= 0: # log log.log(cons.TK_LOG_LEVEL_WARN, "SUSPEND approaching in %s secs" % (str(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD]))) # send messages only when certain time is left if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] <= self._timekprConfig.getTimekprFinalWarningTime(): # final warning _processFinalWarning(rUserName, self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY], self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD]) # time to suspend if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] <= 0: # check if we have a delay before initiating actions if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] <= 0: # log suspend log.log(cons.TK_LOG_LEVEL_WARN, "time is up for user \"%s\", enforcing the SUSPEND" % (rUserName)) # set restriction for repetitive lock when suspending self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] = cons.TK_CTRL_LCDEL # set restriction for repetitive suspend self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] = cons.TK_CTRL_SCDEL # set up wake time if that was set if self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USWKU] is not None: # set up if userhelper.setWakeUpByRTC(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USWKU]): log.log(cons.TK_LOG_LEVEL_INFO, "wake up time is SET at %i (%s) on behalf of user \"%s\"" % (self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USWKU], datetime.fromtimestamp(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USWKU]).strftime(cons.TK_LOG_DATETIME_FORMAT), rUserName)) else: log.log(cons.TK_LOG_LEVEL_INFO, "wake up time at %i (%s) could NOT be set on behalf of user \"%s\"" % (self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USWKU], datetime.fromtimestamp(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_USWKU]).strftime(cons.TK_LOG_DATETIME_FORMAT), rUserName)) # suspend computer self._timekprLoginManager.suspendComputer(rUserName) # do not enforce lock right away after suspend, wait a little elif cons.TK_CTRL_SCDEL - cons.TK_CTRL_LCDEL > self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL] > 0 and self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] <= 0: # log suspend lock log.log(cons.TK_LOG_LEVEL_WARN, "time is up for user \"%s\", enforcing the SUSPEND LOCK (SUSPEND in %i iterations)" % (rUserName, self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEL])) # set restriction for repetitive lock when suspending self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RTDEA] = cons.TK_CTRL_LCDEL # if delay is still in place, just lock the screen (from user sessions) #self._timekprUserList[rUserName].lockUserSessions() # if delay is still in place, just lock the screen (from manager) self._timekprLoginManager.lockUserSessionsManager(self._timekprUserList[rUserName].getUserSessionList()) else: log.log(cons.TK_LOG_LEVEL_WARN, "WARN: unsupported restriction type \"%s\"" % (self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_RESTY])) # decrease time for restrictions self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] = max(self._timekprUserRestrictionList[rUserName][cons.TK_CTRL_FCNTD] - 1, 0) log.log(cons.TK_LOG_LEVEL_INFO, "RESTRICTIONS, completed with: %s" % (str(len(self._timekprUserRestrictionList) > 0))) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish user killer") # return whether to keep trying to enforce restrictions return (len(self._timekprUserRestrictionList) > 0) # --------------- helper methods --------------- # def _getUserActualTimeInformation(self, pTimekprUser, pUserConfigurationStore): """Helper to provide actual (in memory information)""" # values from live session if pTimekprUser is not None: # get lefts timeLeftArray = pTimekprUser.getTimeLeft() # assign time lefts timeLeftToday = timeLeftArray[0] timeLeftInARow = timeLeftArray[1] timeSpentThisSession = timeLeftArray[2] timeInactiveThisSession = timeLeftArray[3] timeSpentBalance = timeLeftArray[4] timeSpentDay = timeLeftArray[5] # time spent session pUserConfigurationStore["ACTUAL_TIME_SPENT_SESSION"] = int(timeSpentThisSession) # time inactive this session pUserConfigurationStore["ACTUAL_TIME_INACTIVE_SESSION"] = int(timeInactiveThisSession) # time spent pUserConfigurationStore["ACTUAL_TIME_SPENT_BALANCE"] = int(timeSpentBalance) # time spent pUserConfigurationStore["ACTUAL_TIME_SPENT_DAY"] = int(timeSpentDay) # time left today pUserConfigurationStore["ACTUAL_TIME_LEFT_DAY"] = int(timeLeftToday) # time left in a row pUserConfigurationStore["ACTUAL_TIME_LEFT_CONTINUOUS"] = int(timeLeftInARow) # PlayTime playTimeLeft, playTimeEnabled, playTimeAccounted, _unused = pTimekprUser.getPlayTimeLeft(pCheckActive=False) playTimeLeft = max(playTimeLeft, 0) if playTimeEnabled and playTimeAccounted else 0 # PlayTime left today pUserConfigurationStore["ACTUAL_PLAYTIME_LEFT_DAY"] = playTimeLeft # active PlayTime activity count pUserConfigurationStore["ACTUAL_ACTIVE_PLAYTIME_ACTIVITY_COUNT"] = pTimekprUser.getPlayTimeActiveActivityCnt() # ## --------------- DBUS / communication methods --------------- ## # # --------------- simple user time limits methods accessible by any --------------- # @dbus.service.method(cons.TK_DBUS_USER_LIMITS_INTERFACE, in_signature="s", out_signature="is") def requestTimeLimits(self, pUserName): """Request to send config to client (returns error in case no user and the like)""" # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_USER_NOTFOUND") % (pUserName) # check if we have this user if pUserName in self._timekprUserList: # pass this to actual method self._timekprUserList[pUserName].getTimeLimits() # result result = 0 message = "" # result return result, message @dbus.service.method(cons.TK_DBUS_USER_LIMITS_INTERFACE, in_signature="s", out_signature="is") def requestTimeLeft(self, pUserName): """Request to send current state of time & limits for user (returns error in case no user and the like)""" # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_USER_NOTFOUND") % (pUserName) # check if we have this user if pUserName in self._timekprUserList: # pass this to actual method self._timekprUserList[pUserName].getTimeLeft(True) # result result = 0 message = "" # result return result, message # --------------- simple user session attributes accessible by any --------------- # @dbus.service.method(cons.TK_DBUS_USER_SESSION_ATTRIBUTE_INTERFACE, in_signature="ssss", out_signature="is") def processUserSessionAttributes(self, pUserName, pWhat, pKey, pValue): """Request to verify or set user session attributes (returns error in case no user and the like)""" # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_USER_NOTFOUND") % (pUserName) # check if we have this user if pUserName in self._timekprUserList: # pass this to actual method self._timekprUserList[pUserName].processUserSessionAttributes(pWhat, pKey, pValue) # result result = 0 message = "" # result return result, message # --------------- user information get methods accessible by privileged users (root and all in timekpr group) --------------- # @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="", out_signature="isaas") def getUserList(self): """Get user list and their time left""" """Sets allowed days for the user server expects only the days that are allowed, sorted in ascending order""" # result result = 0 message = "" userList = [] try: # init store timekprUStore = timekprUserStore() # check if we have this user userList = timekprUStore.getSavedUserList(self._timekprConfig.getTimekprConfigDir()) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_USERLIST_UNEXPECTED_ERROR") # result return result, message, userList @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="ss", out_signature="isa{sv}") def getUserInformation(self, pUserName, pInfoLvl): """Get user configuration (saved)""" """ this retrieves stored configuration and some realtime inforamation for the user""" # initialize username storage userConfigurationStore = {} result = 0 message = "" try: # only saved and full if pInfoLvl in (cons.TK_CL_INF_FULL, cons.TK_CL_INF_SAVED): # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message, userConfigurationStore = userConfigProcessor.getSavedUserInformation(pInfoLvl, pUserName in self._timekprUserList) # additionally, if realtime needed if pInfoLvl in (cons.TK_CL_INF_FULL, cons.TK_CL_INF_RT) and pUserName in self._timekprUserList: # get in-memory settings self._getUserActualTimeInformation(self._timekprUserList[pUserName], userConfigurationStore) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_USER_UNEXPECTED_ERROR") # result return result, message, userConfigurationStore # --------------- user admin methods accessible by privileged users (root and all in timekpr group) --------------- # @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sas", out_signature="is") def setAllowedDays(self, pUserName, pDayList): """Set up allowed days for the user""" """Sets allowed days for the user server expects only the days that are allowed, sorted in ascending order""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetAllowedDays(pDayList) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="ssa{sa{si}}", out_signature="is") def setAllowedHours(self, pUserName, pDayNumber, pHourList): """Set up allowed hours for the user""" """This sets allowed hours for user for particular day server expects only the hours that are needed, hours must be sorted in ascending order please note that this is using 24h format, no AM/PM nonsense expected minutes can be specified in brackets after hour, like: 16[00-45], which means until 16:45""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetAllowedHours(pDayNumber, pHourList) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sai", out_signature="is") def setTimeLimitForDays(self, pUserName, pDayLimits): """Set up new timelimits for each day for the user""" """This sets allowable time to user server always expects 7 limits, for each day of the week, in the list""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetTimeLimitForDays(pDayLimits) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sb", out_signature="is") def setTrackInactive(self, pUserName, pTrackInactive): """Set track inactive sessions for the user""" """This sets whether inactive user sessions are tracked true - logged in user is always tracked (even if switched to console or locked or ...) false - user time is not tracked if he locks the session, session is switched to another user, etc.""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetTrackInactive(True if bool(pTrackInactive) else False) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sb", out_signature="is") def setHideTrayIcon(self, pUserName, pHideTrayIcon): """Set hide tray icon for the user""" """This sets whether icon will be hidden from user true - icon and notifications are NOT shown to user false - icon and notifications are shown to user""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetHideTrayIcon(True if bool(pHideTrayIcon) else False) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="ssss", out_signature="is") def setLockoutType(self, pUserName, pLockoutType, pWakeFrom, pWakeTo): """Set restriction / lockout type for the user""" """Restricton / lockout types: lock - lock the screen suspend - suspend the computer suspendwake - suspend the computer and set wakeup timer terminate - terminate sessions (default)""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetLockoutType(pLockoutType, pWakeFrom, pWakeTo) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="si", out_signature="is") def setTimeLimitForWeek(self, pUserName, pTimeLimitWeek): """Set up new timelimit for week for the user""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetTimeLimitForWeek(pTimeLimitWeek) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="si", out_signature="is") def setTimeLimitForMonth(self, pUserName, pTimeLimitMonth): """Set up new timelimit for month for the user""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetTimeLimitForMonth(pTimeLimitMonth) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="ssi", out_signature="is") def setTimeLeft(self, pUserName, pOperation, pTimeLeft): """Set time left for today for the user""" """Sets time limits for user for this moment: if pOperation is "+" - more time left is addeed if pOperation is "-" time is subtracted if pOperation is "=" or empty, the time is set as it is""" try: # check the user and it's configuration userControlProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userControlProcessor.checkAndSetTimeLeft(pOperation, pTimeLeft) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustTimeSpentFromControl(pSilent=False, pPreserveSpent=(pOperation != "=")) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONTROL_UNEXPECTED_ERROR") # result return result, message # --------------- user PlayTime admin methods accessible by privileged users (root and all in timekpr group) --------------- # @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sb", out_signature="is") def setPlayTimeEnabled(self, pUserName, pPlayTimeEnabled): """Set whether PlayTime is enabled for the user""" """PlayTime enablement flag true - PlayTime is enabled false - PlayTime is disabled""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetPlayTimeEnabled(True if bool(pPlayTimeEnabled) else False) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sb", out_signature="is") def setPlayTimeLimitOverride(self, pUserName, pPlayTimeLimitOverride): """Set whether PlayTime override is enabled for the user""" """PlayTime override enablement flag true - PlayTime override is enabled false - PlayTime override is disabled""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetPlayTimeLimitOverride(True if bool(pPlayTimeLimitOverride) else False) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sb", out_signature="is") def setPlayTimeUnaccountedIntervalsEnabled(self, pUserName, pPlayTimeUnaccountedIntervalsEnabled): """Set whether PlayTime activities are allowed during unaccounted intervals for the user""" """PlayTime allowed during unaccounted intervals enablement flag true - PlayTime allowed during unaccounted intervals is enabled false - PlayTime allowed during unaccounted intervals is disabled""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetPlayTimeUnaccountedIntervalsEnabled(True if bool(pPlayTimeUnaccountedIntervalsEnabled) else False) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sas", out_signature="is") def setPlayTimeAllowedDays(self, pUserName, pPlayTimeAllowedDays): """Set up allowed PlayTime days for the user""" """Sets allowed PlayTime days for the user server expects only the days that are allowed, sorted in ascending order""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetPlayTimeAllowedDays(pPlayTimeAllowedDays) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="sai", out_signature="is") def setPlayTimeLimitsForDays(self, pUserName, pPlayTimeLimits): """Set up new PlayTime limits for each day for the user""" """This sets allowable PlayTime limits to user server always expects 7 limits, for each day of the week, in the list""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetPlayTimeLimitsForDays(pPlayTimeLimits) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="saas", out_signature="is") def setPlayTimeActivities(self, pUserName, pPlayTimeActivities): """Set up new PlayTime activities for the user""" """This sets PlayTime activities (executable masks) for the user""" try: # check the user and it's configuration userConfigProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userConfigProcessor.checkAndSetPlayTimeActivities(pPlayTimeActivities) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustLimitsFromConfig(False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_USER_ADMIN_INTERFACE, in_signature="ssi", out_signature="is") def setPlayTimeLeft(self, pUserName, pOperation, pTimeLeft): """Set time left for today for the user""" """Sets time limits for user for this moment: if pOperation is "+" - more time left is addeed if pOperation is "-" time is subtracted if pOperation is "=" or empty, the time is set as it is""" try: # check the user and it's configuration userControlProcessor = timekprUserConfigurationProcessor(pUserName, self._timekprConfig) # load config result, message = userControlProcessor.checkAndSetPlayTimeLeft(pOperation, pTimeLeft) # check if we have this user if pUserName in self._timekprUserList: # inform the user immediately self._timekprUserList[pUserName].adjustTimeSpentFromControl(pSilent=False, pPreserveSpent=(pOperation != "=")) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONTROL_UNEXPECTED_ERROR") # result return result, message # --------------- server admin get methods accessible by privileged users (root and all in timekpr group) --------------- # @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="", out_signature="isa{sv}") def getTimekprConfiguration(self): """Get all timekpr configuration from server""" # default timekprConfig = {} try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message, timekprConfig = mainConfigurationProcessor.getSavedTimekprConfiguration() except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_UNEXPECTED_ERROR") # result return result, message, timekprConfig # --------------- server admin set methods accessible by privileged users (root and all in timekpr group) --------------- # @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="i", out_signature="is") def setTimekprLogLevel(self, pLogLevel): """Set the logging level for server""" """ restart needed to fully engage, but newly logged in users get logging properly""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprLogLevel(pLogLevel) # set in memory as well self._timekprConfig.setTimekprLogLevel(pLogLevel) # set it effective immediately log.setLogLevel(pLogLevel) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="i", out_signature="is") def setTimekprPollTime(self, pPollTimeSecs): """Set polltime for timekpr""" """ set in-memory polling time (this is the accounting precision of the time""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprPollTime(pPollTimeSecs) # set in memory as well self._timekprConfig.setTimekprPollTime(pPollTimeSecs) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="i", out_signature="is") def setTimekprSaveTime(self, pSaveTimeSecs): """Set save time for timekpr""" """Set the interval at which timekpr saves user data (time spent, etc.)""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprSaveTime(pSaveTimeSecs) # set in memory as well self._timekprConfig.setTimekprSaveTime(pSaveTimeSecs) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="b", out_signature="is") def setTimekprTrackInactive(self, pTrackInactive): """Set default value for tracking inactive sessions""" """Note that this is just the default value which is configurable at user level""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprTrackInactive(pTrackInactive) # set in memory as well self._timekprConfig.setTimekprTrackInactive(pTrackInactive) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="i", out_signature="is") def setTimekprTerminationTime(self, pTerminationTimeSecs): """Set up user termination time""" """ User temination time is how many seconds user is allowed in before he's thrown out This setting applies to users who log in at inappropriate time according to user config """ try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprTerminationTime(pTerminationTimeSecs) # set in memory as well self._timekprConfig.setTimekprTerminationTime(pTerminationTimeSecs) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="i", out_signature="is") def setTimekprFinalWarningTime(self, pFinalWarningTimeSecs): """Set up final warning time for users""" """ Final warning time is the countdown lenght (in seconds) for the user before he's thrown out""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprFinalWarningTime(pFinalWarningTimeSecs) # set in memory as well self._timekprConfig.setTimekprFinalWarningTime(pFinalWarningTimeSecs) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="i", out_signature="is") def setTimekprFinalNotificationTime(self, pFinalNotificationTimeSecs): """Set up final warning time for users""" """ Final warning time is the countdown lenght (in seconds) for the user before he's thrown out""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprFinalNotificationTime(pFinalNotificationTimeSecs) # set in memory as well self._timekprConfig.setTimekprFinalNotificationTime(pFinalNotificationTimeSecs) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="as", out_signature="is") def setTimekprSessionsCtrl(self, pSessionsCtrl): """Set accountable session types for users""" """ Accountable sessions are sessions which are counted as active, there are handful of them, but predefined""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprSessionsCtrl(pSessionsCtrl) # set in memory as well self._timekprConfig.setTimekprSessionsCtrl(pSessionsCtrl) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="as", out_signature="is") def setTimekprSessionsExcl(self, pSessionsExcl): """Set NON-accountable session types for users""" """ NON-accountable sessions are sessions which are explicitly ignored during session evaluation, there are handful of them, but predefined""" try: # result # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprSessionsExcl(pSessionsExcl) # set in memory as well self._timekprConfig.setTimekprSessionsExcl(pSessionsExcl) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="as", out_signature="is") def setTimekprUsersExcl(self, pUsersExcl): """Set excluded usernames for timekpr""" """ Excluded usernames are usernames which are excluded from accounting Pre-defined values containt all graphical login managers etc., please do NOT add actual end-users here, You can, but these users will never receive any notifications about time, icon will be in connecting state forever """ try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprUsersExcl(pUsersExcl) # set in memory as well self._timekprConfig.setTimekprUsersExcl(pUsersExcl) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="b", out_signature="is") def setTimekprPlayTimeEnabled(self, pPlayTimeEnabled): """Set whether PlayTime is enabled globally""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprPlayTimeEnabled(True if bool(pPlayTimeEnabled) else False) # set in memory as well self._timekprConfig.setTimekprPlayTimeEnabled(True if bool(pPlayTimeEnabled) else False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="b", out_signature="is") def setTimekprPlayTimeEnhancedActivityMonitorEnabled(self, pPlayTimeAdvancedSearchEnabled): """Set whether PlayTime is enabled globally""" try: # check the configuration mainConfigurationProcessor = timekprConfigurationProcessor() # check and set config result, message = mainConfigurationProcessor.checkAndSetTimekprPlayTimeEnhancedActivityMonitorEnabled(True if bool(pPlayTimeAdvancedSearchEnabled) else False) # set in memory as well self._timekprConfig.setTimekprPlayTimeEnhancedActivityMonitorEnabled(True if bool(pPlayTimeAdvancedSearchEnabled) else False) except Exception as unexpectedException: # logging log.log(cons.TK_LOG_LEVEL_ERR, "Unexpected ERROR (details, %s)!" % (misc.getExceptionDetails())) # result result = -1 message = msg.getTranslation("TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR") # result return result, message # --------------- DBUS helper methods --------------- # @dbus.service.method(cons.TK_DBUS_ADMIN_INTERFACE, in_signature="s", out_signature="") def logCachedProcesses(self, pUserId): """Return cached PIDs and CMDLINEs""" # set up logging pids = self._timekprPlayTimeConfig.getCachedProcesses() log.log(cons.TK_LOG_LEVEL_INFO, "ALLPIDS (%i)" % (len(pids))) log.log(cons.TK_LOG_LEVEL_INFO, "----------------------------------------") for rPid in pids: log.log(cons.TK_LOG_LEVEL_INFO, rPid) pids = self._timekprPlayTimeConfig.getCachedUserProcesses(str(pUserId)) log.log(cons.TK_LOG_LEVEL_INFO, "USERPIDS (%i)" % (len(pids))) log.log(cons.TK_LOG_LEVEL_INFO, "----------------------------------------") for rPid in pids: log.log(cons.TK_LOG_LEVEL_INFO, rPid) pids = self._timekprPlayTimeConfig.getMatchedUserProcesses(str(pUserId)) log.log(cons.TK_LOG_LEVEL_INFO, "USERMATCHEDPIDS (%i)" % (len(pids))) log.log(cons.TK_LOG_LEVEL_INFO, "----------------------------------------") for rPid in pids: log.log(cons.TK_LOG_LEVEL_INFO, rPid) log.log(cons.TK_LOG_LEVEL_INFO, "----------------------------------------") timekpr-next/server/interface/dbus/__init__.py000664 001750 001750 00000000000 13476006650 023506 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/dbus/consolekit/000775 001750 001750 00000000000 15122253204 023546 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/dbus/consolekit/user.py000600 001750 001750 00000001370 14575617135 025107 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # connection with ck class timekprUserManager(object): # init def __init__(self, pUserName, pUserPathOnBus): """Initialize manager for ConsoleKit.""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") def cacheUserSessionList(self): """Determine user sessions and cache session objects for further reference.""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") def isUserActive(self, pSessionTypes, pTrackInactive, pIsScreenLocked): """Check if user is active.""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") timekpr-next/server/interface/dbus/consolekit/__init__.py000664 001750 001750 00000000000 13476006650 025660 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/dbus/consolekit/manager.py000644 001750 001750 00000002535 15122253204 025535 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # connection with ck class timekprUserLoginManager(object): """Class enables the connection with ConsoleKit""" def __init__(self): """Initialize all stuff for consolekit""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") def getUserList(self, pSilent=False): """Go through a list of logged in users""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") def getUserSessionList(self, pUserName, pUserPath): """Get up-to-date user session list""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") def determineLoginManagerVT(self, pUserName, pUserPath): """Get login manager session VTNr""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") def switchTTY(self, pSeatId, pSessionTTY): """Swith TTY for login screen""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") def terminateUserSessions(self, pUserName, pUserPath, pTimekprConfig, pRestrictionType): """Terminate user sessions""" # NOT IMPLEMENTED raise NotImplementedError("ConsoleKit support is not implemented") timekpr-next/server/interface/dbus/logind/000775 001750 001750 00000000000 15122253261 022653 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/dbus/logind/user.py000644 001750 001750 00000032533 15122253261 024207 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018. @author: mjasnik """ # import section import dbus # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.common.utils import misc class timekprUserManager(object): """A connection with login1 and other DBUS servers.""" def __init__(self, pUserName, pUserPathOnBus): """Initialize manager.""" # save the bus and user self._timekprBus = dbus.SystemBus() self._userName = pUserName # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus object self._login1UserObject = self._timekprBus.get_object(cons.TK_DBUS_L1_OBJECT, pUserPathOnBus) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_L1_OBJECT) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus interface for properties self._login1UserInterface = dbus.Interface(self._login1UserObject, cons.TK_DBUS_PROPERTIES_INTERFACE) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_PROPERTIES_INTERFACE) # user sessions & additional DBUS objects self._timekprUserSessions = {} self._timekprUserObjects = {} # get user ID self._userId = int(self._login1UserInterface.Get(cons.TK_DBUS_USER_OBJECT, "UID")) self._scrRetryCnt = 0 self._sessionLockedStateAvailable = None def cacheUserSessionList(self): """Determine user sessions and cache session objects for further reference.""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "---=== start cacheUserSessionList for \"%s\" ===---" % (self._userName)) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get all user sessions userSessions = self._login1UserInterface.Get(cons.TK_DBUS_USER_OBJECT, "Sessions") # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_USER_OBJECT) # extra only if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): # print all sessions log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "got %i sessions:%s, start loop" % (len(userSessions), "".join([(" (%s, %s)" % (str(rS[0]), str(rS[1]))) for rS in userSessions]))) # init active sessions activeSessions = [] # go through all user sessions for rUserSession in userSessions: # sessionId & sessionPath on dbus sessionId = str(rUserSession[0]) sessionPath = str(rUserSession[1]) # save active sessions activeSessions.append(sessionId) # if we have not yet saved a user session, let's do that to improve interaction with dbus if sessionId not in self._timekprUserSessions: log.log(cons.TK_LOG_LEVEL_DEBUG, "adding session: %s, %s" % (sessionId, sessionPath)) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get object and interface to save it sessionObject = self._timekprBus.get_object(cons.TK_DBUS_L1_OBJECT, sessionPath) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_L1_OBJECT) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get object and interface to save it sessionPropertiesInterface = dbus.Interface(sessionObject, cons.TK_DBUS_PROPERTIES_INTERFACE) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_PROPERTIES_INTERFACE) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus interface for Session sessionInterface = dbus.Interface(sessionObject, cons.TK_DBUS_SESSION_OBJECT) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_SESSION_OBJECT) # cache sessions self._timekprUserSessions[sessionId] = {cons.TK_CTRL_DBUS_SESS_OBJ: sessionObject, cons.TK_CTRL_DBUS_SESS_IF: sessionInterface, cons.TK_CTRL_DBUS_SESS_PROP_IF: sessionPropertiesInterface, cons.TK_CTRL_DBUS_SESS_PROP: {}} # add static properties self._timekprUserSessions[sessionId][cons.TK_CTRL_DBUS_SESS_PROP]["VTNr"] = str(int(sessionPropertiesInterface.Get(cons.TK_DBUS_SESSION_OBJECT, "VTNr"))) self._timekprUserSessions[sessionId][cons.TK_CTRL_DBUS_SESS_PROP]["Seat"] = str(sessionPropertiesInterface.Get(cons.TK_DBUS_SESSION_OBJECT, "Seat")[0]) else: log.log(cons.TK_LOG_LEVEL_DEBUG, "session already cached: %s" % (sessionId)) # list of sessions to delete removableSesssions = [rUserSession for rUserSession in self._timekprUserSessions if rUserSession not in activeSessions] # get rid of sessions not on the list for userSession in removableSesssions: log.log(cons.TK_LOG_LEVEL_DEBUG, "removing session: %s" % (userSession)) self._timekprUserSessions.pop(userSession) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "---=== finish cacheUserSessionList for \"%s\" ===---" % (self._userName)) def isUserActive(self, pTimekprConfig, pTimekprUserConfig, pIsScreenLocked): """Check if user is active.""" log.log(cons.TK_LOG_LEVEL_DEBUG, "---=== start isUserActive for \"%s\" ===---" % (self._userName)) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "supported session types: %s" % (str(pTimekprConfig.getTimekprSessionsCtrl()))) # get all user sessions userState = str(self._login1UserInterface.Get(cons.TK_DBUS_USER_OBJECT, "State")) userIdleState = str(bool(self._login1UserInterface.Get(cons.TK_DBUS_USER_OBJECT, "IdleHint"))) log.log(cons.TK_LOG_LEVEL_DEBUG, "user stats, ul1st: %s, ul1idlhnt: %s, uscrlck: %s" % (userState, userIdleState, str(pIsScreenLocked))) # cache sessions self.cacheUserSessionList() # to determine if user is active for all sessions: # session must not be "active" # idlehint must be true # special care must be taken for tty sessions # screenlocker status from user DBUS session # official statuses # "offline" (user not logged in at all) # "lingering" (user not logged in, but some user services running) # "online" (user logged in, but not active, i.e. has no session in the foreground) # "active" (user logged in, and has at least one active session, i.e. one session in the foreground) # "closing" (user not logged in, and not lingering, but some processes are still around) # init active accounting (the status is determined by sessions, not by user state) userActive = userScreenLocked = False sessionLockedState = "False" # if user locked the computer if pIsScreenLocked and not pTimekprUserConfig.getUserTrackInactive(): # user is not active log.log(cons.TK_LOG_LEVEL_DEBUG, "session inactive (verified by user \"%s\" screensaver status), sessions won't be checked" % (self._userName)) else: # go through all user sessions for rSessionId in self._timekprUserSessions: # not locked sessionLockedState = "False" # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get needed static properties sessionVTNr = self._timekprUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_PROP]["VTNr"] # get needed properties sessionType = str(self._timekprUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_PROP_IF].Get(cons.TK_DBUS_SESSION_OBJECT, "Type")) sessionState = str(self._timekprUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_PROP_IF].Get(cons.TK_DBUS_SESSION_OBJECT, "State")) sessionIdleState = str(bool(self._timekprUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_PROP_IF].Get(cons.TK_DBUS_SESSION_OBJECT, "IdleHint"))) # get locked state, only if it's available if self._sessionLockedStateAvailable or self._sessionLockedStateAvailable is None: try: # get locked state sessionLockedState = str(bool(self._timekprUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_PROP_IF].Get(cons.TK_DBUS_SESSION_OBJECT, "LockedHint"))) # locked state available if self._sessionLockedStateAvailable is None: # state used self._sessionLockedStateAvailable = True log.log(cons.TK_LOG_LEVEL_INFO, "INFO: session locked state is available for user \"%s\" and will be used for idle state detection (if it works)" % (self._userName)) except: # locked state not used self._sessionLockedStateAvailable = False log.log(cons.TK_LOG_LEVEL_INFO, "INFO: session locked state is NOT available for user \"%s\", will rely on client screensaver state (if it works)" % (self._userName)) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=rSessionId) # logging log.log(cons.TK_LOG_LEVEL_DEBUG, "session stats, styp: %s, sVTNr: %s, sl1St: %s, sl1idlst: %s, sl1lckst: %s" % (sessionType, sessionVTNr, sessionState, sessionIdleState, sessionLockedState)) # check if active if sessionState == "active" and sessionIdleState == "False" and sessionLockedState == "False": # validate against session types we specifically do not track if sessionType in pTimekprConfig.getTimekprSessionsExcl(): # session is on the list of session types we specifically do not track log.log(cons.TK_LOG_LEVEL_DEBUG, "session %s is active, but session type \"%s\" is excluded from tracking (thus effectively inactive)" % (rSessionId, sessionType)) # validate against session types we manage elif sessionType not in pTimekprConfig.getTimekprSessionsCtrl(): # session is not on the list of session types we track log.log(cons.TK_LOG_LEVEL_DEBUG, "session %s is active, but session type \"%s\" is not on tracked type list (thus effectively inactive)" % (rSessionId, sessionType)) else: # session is on the list of session types we track and session is active userActive = True log.log(cons.TK_LOG_LEVEL_DEBUG, "session %s active" % (rSessionId)) elif sessionType in pTimekprConfig.getTimekprSessionsCtrl(): # session can be: offline, closing, online, lingering, active # do not count lingering, offline and closing sessions as active either way if sessionState in ("offline", "closing", "lingering"): # user is not active log.log(cons.TK_LOG_LEVEL_DEBUG, "session %s is inactive (not exactly logged in too)" % (rSessionId)) # if we track inactive elif pTimekprUserConfig.getUserTrackInactive(): # we track inactive sessions userActive = True # session is not on the list of session types we track log.log(cons.TK_LOG_LEVEL_DEBUG, "session %s is considered active (track inactive sessions enabled)" % (rSessionId)) else: # session is not active log.log(cons.TK_LOG_LEVEL_DEBUG, "session %s is considered inactive" % (rSessionId)) else: # session is not on the list of session types we track log.log(cons.TK_LOG_LEVEL_DEBUG, "session %s is inactive and not tracked" % (rSessionId)) # screen lock state userScreenLocked = (pIsScreenLocked or sessionLockedState == "True") log.log(cons.TK_LOG_LEVEL_DEBUG, "---=== finish isUserActive: %s ===---" % (str(userActive))) # return whether user is active return userActive, userScreenLocked def lockUserSessions(self): """Ask login manager to lock user sessions (from users perspective)""" # go through all user sessions for rSessionId in self._timekprUserSessions: # we lock only GUI sessions if str(self._timekprUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_PROP_IF].Get(cons.TK_DBUS_SESSION_OBJECT, "Type")) in cons.TK_SESSION_TYPES_CTRL: # do not lock in DEV mode if cons.TK_DEV_ACTIVE: log.log(cons.TK_LOG_LEVEL_WARN, "DEVELOPMENT ACTIVE, not locking myself out, sorry...") else: # lock session self._timekprUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_IF].Lock() def getUserSessionList(self): """Get cached session list""" return self._timekprUserSessions timekpr-next/server/interface/dbus/logind/__init__.py000664 001750 001750 00000000000 13476006650 024762 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/server/interface/dbus/logind/manager.py000644 001750 001750 00000045435 15122253261 024650 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # import section import dbus import time import signal from gi.repository import GLib # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log from timekpr.common.utils import misc class timekprUserLoginManager(object): """Class enables the connection with login1""" def __init__(self): """Initialize all stuff for login1""" log.log(cons.TK_LOG_LEVEL_INFO, "start timekpr login1 manager") # variables self._login1Object = None self._login1ManagerInterface = None self._loginManagerVTNr = None self._loginManagerVTNrRetries = 0 self._connectionRetryCount = 0 # dbus initialization self._timekprBus = dbus.SystemBus() # init connections self._initDbusConnections() log.log(cons.TK_LOG_LEVEL_INFO, "finish login1 manager") def _initDbusConnections(self): """Init connections to dbus""" # count retries self._connectionRetryCount += 1 # if there was a connection before, give a big fat warning if self._login1ManagerInterface is not None: log.log(cons.TK_LOG_LEVEL_WARN, "IMPORTANT WARNING: connection to DBUS was lost, trying to establish it again, retry %i" % (self._connectionRetryCount)) try: log.log(cons.TK_LOG_LEVEL_DEBUG, "getting login1 object on DBUS") # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # try to get real connection to our objects and interface self._login1Object = self._timekprBus.get_object(cons.TK_DBUS_L1_OBJECT, cons.TK_DBUS_L1_PATH) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_L1_OBJECT) log.log(cons.TK_LOG_LEVEL_DEBUG, "getting login1 interface on DBUS") # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # interface self._login1ManagerInterface = dbus.Interface(self._login1Object, cons.TK_DBUS_L1_MANAGER_INTERFACE) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_L1_MANAGER_INTERFACE) log.log(cons.TK_LOG_LEVEL_DEBUG, "got interface, login1 successfully set up") # reset retries self._connectionRetryCount = 0 except Exception as exc: log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: error getting DBUS login manager: %s" % (exc)) # reset connections self._login1ManagerInterface = None self._login1Object = None # raise error when too much retries if self._connectionRetryCount >= cons.TK_MAX_RETRIES: raise def _listUsers(self): """Exec ListUsers dbus methods (this is the only method which just has to succeed)""" # reset counter on retry self._connectionRetryCount = 0 # def result loggedInUsersDBUS = None wasConnectionLost = False # try executing when there are retries left and there is no result while loggedInUsersDBUS is None and self._connectionRetryCount < cons.TK_MAX_RETRIES: # try get result try: # exec loggedInUsersDBUS = self._login1ManagerInterface.ListUsers() except Exception: # failure wasConnectionLost = True # no sleep on first retry if self._connectionRetryCount > 0: # wait a little before retry time.sleep(0.5) # retry connection self._initDbusConnections() # pass back the result return wasConnectionLost, loggedInUsersDBUS def getUserList(self, pSilent=False): """Go through a list of logged in users""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start getUserList") if not pSilent else True # get user list wasConnectionLost, loggedInUsersDBUS = self._listUsers() loggedInUsers = {} # loop through all users for rUser in loggedInUsersDBUS: # set up dict for every user loggedInUsers[str(rUser[1])] = {cons.TK_CTRL_UID: str(int(rUser[0])), cons.TK_CTRL_UNAME: str(rUser[1]), cons.TK_CTRL_UPATH: str(rUser[2])} # in case debug if not pSilent and log.isDebugEnabled(): # get all properties for key, value in loggedInUsers.items(): # optimize logging uNameLog = "USER: %s" % (key) # values and keys for keyx, valuex in value.items(): uNameLog = "%s, %s: %s" % (uNameLog, keyx, valuex) log.log(cons.TK_LOG_LEVEL_DEBUG, uNameLog) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish getUserList") if not pSilent else True # passing back user tuples return wasConnectionLost, loggedInUsers def getUserSessionList(self, pUserName, pUserPath): """Get up-to-date user session list""" # prepare return list userSessions = [] # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus object login1UserObject = self._timekprBus.get_object(cons.TK_DBUS_L1_OBJECT, pUserPath) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=pUserPath) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus interface for properties login1UserInterface = dbus.Interface(login1UserObject, cons.TK_DBUS_PROPERTIES_INTERFACE) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_PROPERTIES_INTERFACE) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get all user sessions login1UserSessions = login1UserInterface.Get(cons.TK_DBUS_USER_OBJECT, "Sessions") # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_USER_OBJECT) # go through all user sessions for rUserSession in login1UserSessions: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus object login1SessionObject = self._timekprBus.get_object(cons.TK_DBUS_L1_OBJECT, str(rUserSession[1])) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=str(rUserSession[1])) # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # get dbus interface for properties login1SessionInterface = dbus.Interface(login1SessionObject, cons.TK_DBUS_PROPERTIES_INTERFACE) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_PROPERTIES_INTERFACE) # get all user session properties try: # dbus performance measurement misc.measureDBUSTimeElapsed(pStart=True) # properties sessionType = str(login1SessionInterface.Get(cons.TK_DBUS_SESSION_OBJECT, "Type")) sessionVTNr = str(int(login1SessionInterface.Get(cons.TK_DBUS_SESSION_OBJECT, "VTNr"))) sessionSeat = str(login1SessionInterface.Get(cons.TK_DBUS_SESSION_OBJECT, "Seat")[0]) sessionState = str(login1SessionInterface.Get(cons.TK_DBUS_SESSION_OBJECT, "State")) # measurement logging misc.measureDBUSTimeElapsed(pStop=True, pDbusIFName=cons.TK_DBUS_SESSION_OBJECT) # add user session to return list userSessions.append({"sessionId": str(rUserSession[0]), "sessionPath": str(rUserSession[1]), "type": sessionType, "vtnr": sessionVTNr, "seat": sessionSeat, "state": sessionState}) except Exception as exc: log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: error getting session properties for session \"%s\" DBUS: %s" % (str(rUserSession[1]), exc)) # free del login1SessionInterface, login1SessionObject # free del login1UserSessions, login1UserInterface, login1UserObject # return sessions return userSessions def determineLoginManagerVT(self, pUserName, pUserPath): """Get login manager session VTNr""" # if we did not yet find a login manager VTNr if self._loginManagerVTNr is None and self._loginManagerVTNrRetries < cons.TK_MAX_RETRIES: # def loginManager = None # loop through login managers for rLMan in cons.TK_USERS_LOGIN_MANAGERS.split(";"): # since we are checking this with UID less than 1K (or whatever is configured in limits file) # we can safely compare usernames or try to use LIKE operator on user name # exact match if rLMan == pUserName: # we found one loginManager = pUserName else: # try to determine if we found one (according to "3.278 Portable Filename Character Set" additional symbols are ._-) for rSymb in (".", "_", "-"): # check for name if "%s%s" % (rSymb, rLMan) in pUserName or "%s%s%s" % (rSymb, rLMan, rSymb) in pUserName or "%s%s" % (rLMan, rSymb) in pUserName: # we found one loginManager = pUserName # first match is ok break # determine if we have one like manager if loginManager is not None: # advance counter self._loginManagerVTNrRetries += 1 # log log.log(cons.TK_LOG_LEVEL_DEBUG, "INFO: searching for login manager (%s) VTNr" % (pUserName)) # VTNr (default) loginSessionVTNr = None # get user session list userSessionList = self.getUserSessionList(pUserName, pUserPath) # loop through users and try to guess login managers for rSession in userSessionList: # check whether user seems to be login manager user if rSession["type"] in cons.TK_SESSION_TYPES_CTRL: # we got right session, save VTNr loginSessionVTNr = rSession["vtnr"] # done break # if we found login manager VTNr if loginSessionVTNr is not None and loginSessionVTNr != "": # return VTNr self._loginManagerVTNr = loginSessionVTNr # seat is found log.log(cons.TK_LOG_LEVEL_INFO, "INFO: login manager (%s) TTY found: %s" % (pUserName, self._loginManagerVTNr)) else: # log log.log(cons.TK_LOG_LEVEL_DEBUG, "INFO: searching for login manager, user (%s) does not look like one" % (pUserName)) # in case we tried hard elif self._loginManagerVTNr is None and self._loginManagerVTNrRetries == cons.TK_MAX_RETRIES: # advance counter (so we never get here again) self._loginManagerVTNrRetries += 1 # seat is NOT found and we'll not try to find it anymore log.log(cons.TK_LOG_LEVEL_INFO, "INFO: login manager (%s) TTY is NOT found, giving up until restart" % (pUserName)) def switchTTY(self, pSeatId, pForce): """Swith TTY for login screen""" # defaults willSwitchTTY = True # switch to right TTY (if needed) if self._loginManagerVTNr is None: log.log(cons.TK_LOG_LEVEL_INFO, "INFO: switching TTY is not possible, login manager TTY was not found") willSwitchTTY = False elif pSeatId is not None and pSeatId != "": # get all necessary objects from DBUS to switch the TTY try: # it appears that sometimes seats are not available (RDP may not have it) seat = self._login1ManagerInterface.GetSeat(pSeatId) except Exception as exc: # cannot switch as we can't get seat willSwitchTTY = False log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: error getting seat (%s) from DBUS: %s" % (str(pSeatId), exc)) # only if we got the seat if willSwitchTTY: # seat object processing login1SeatObject = self._timekprBus.get_object(cons.TK_DBUS_L1_OBJECT, seat) login1SeatInterface = dbus.Interface(login1SeatObject, cons.TK_DBUS_SEAT_OBJECT) log.log(cons.TK_LOG_LEVEL_INFO, "INFO:%s switching TTY to %s" % (" (forced)" if pForce else "", self._loginManagerVTNr)) # finally switching the TTY if cons.TK_DEV_ACTIVE: log.log(cons.TK_LOG_LEVEL_WARN, "DEVELOPMENT ACTIVE, not switching my sessions, sorry...") else: # finally switching the TTY login1SeatInterface.SwitchTo(self._loginManagerVTNr) # free del login1SeatInterface, login1SeatObject, seat else: log.log(cons.TK_LOG_LEVEL_INFO, "INFO: switching TTY is not needed") # will not switch willSwitchTTY = False # in case switch is needed, reschedule it (might not work from first try) if willSwitchTTY and not pForce: # schedule a switch GLib.timeout_add_seconds(cons.TK_POLLTIME, self.switchTTY, pSeatId, True) # return false for repeat schedule to be discarded return False def lockUserSessionsManager(self, pUserSessions): """Ask login manager to lock user sessions""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start lockUserSessionsManager") # go through all user sessions for rSessionId in pUserSessions: # we lock only GUI sessions if str(pUserSessions[rSessionId][cons.TK_CTRL_DBUS_SESS_PROP_IF].Get(cons.TK_DBUS_SESSION_OBJECT, "Type")) in cons.TK_SESSION_TYPES_CTRL: # not locking myself out if cons.TK_DEV_ACTIVE: log.log(cons.TK_LOG_LEVEL_WARN, "DEVELOPMENT ACTIVE, not locking myself out, sorry...") else: # lock GLib.timeout_add_seconds(0.1, self._login1ManagerInterface.LockSession, rSessionId) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish lockUserSessionsManager") def terminateUserSessions(self, pUserName, pUserPath, pTimekprConfig, pRestrictionType): """Terminate user sessions""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start terminateUserSessions") log.log(cons.TK_LOG_LEVEL_DEBUG, "inspecting \"%s\" userpath \"%s\" sessions" % (pUserName, pUserPath)) # get user session list userSessionList = self.getUserSessionList(pUserName, pUserPath) # indication whether we are killing smth sessionsToKill = 0 lastSeat = None userActive = False # go through all user sessions for rUserSession in userSessionList: # if we support this session type and it is not specifically excluded, only then we kill it if rUserSession["type"] in pTimekprConfig.getTimekprSessionsCtrl() and rUserSession["type"] not in pTimekprConfig.getTimekprSessionsExcl(): log.log(cons.TK_LOG_LEVEL_INFO, "(delayed 0.1 sec) killing \"%s\" session \"%s\" (%s, %s)" % (pUserName, rUserSession["sessionPath"], rUserSession["sessionId"], rUserSession["type"])) # killing time if cons.TK_DEV_ACTIVE: log.log(cons.TK_LOG_LEVEL_WARN, "DEVELOPMENT ACTIVE, not killing myself, sorry...") elif pRestrictionType == cons.TK_CTRL_RES_K: GLib.timeout_add_seconds(0.1, self._login1ManagerInterface.KillSession, rUserSession["sessionId"], "all", signal.SIGTERM) else: GLib.timeout_add_seconds(0.1, self._login1ManagerInterface.TerminateSession, rUserSession["sessionId"]) # get last seat lastSeat = rUserSession["seat"] if rUserSession["seat"] is not None and rUserSession["seat"] != "" and rUserSession["vtnr"] is not None and rUserSession["vtnr"] != "" and self._loginManagerVTNr != rUserSession["vtnr"] else lastSeat # determine whether user is active userActive = userActive or rUserSession["state"] == "active" # count sessions to kill sessionsToKill += 1 else: log.log(cons.TK_LOG_LEVEL_INFO, "saving \"%s\" session %s (%s)" % (pUserName, rUserSession["sessionPath"], rUserSession["type"])) # kill leftover processes (if we are killing smth) if sessionsToKill > 0 and userActive and lastSeat is not None: # timeout tmo = cons.TK_POLLTIME - 1 # switch TTY log.log(cons.TK_LOG_LEVEL_INFO, "scheduling a TTY switch sequence after %i seconds" % (tmo)) # schedule a switch GLib.timeout_add_seconds(tmo, self.switchTTY, lastSeat, False) else: log.log(cons.TK_LOG_LEVEL_INFO, "TTY switch ommitted for user %s" % (pUserName)) # cleanup if sessionsToKill > 0: # timeout tmo = cons.TK_POLLTIME * 2 + 1 # dispatch a killer for leftovers log.log(cons.TK_LOG_LEVEL_WARN, "dipatching a killer for leftover processes after %i seconds" % (tmo)) # schedule leftover processes to be killed (it's rather sophisticated killing and checks whether we need to kill gui or terminal processes) GLib.timeout_add_seconds(tmo, misc.killLeftoverUserProcesses, pUserName, pTimekprConfig) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish terminateUserSessions") def suspendComputer(self, pUserName): """Suspend computer""" # only if we are not in DEV mode if cons.TK_DEV_ACTIVE: log.log(cons.TK_LOG_LEVEL_WARN, "DEVELOPMENT ACTIVE, not suspending myself, sorry...") else: log.log(cons.TK_LOG_LEVEL_DEBUG, "start suspendComputer in the name of \"%s\"" % (pUserName)) GLib.timeout_add_seconds(0.1, self._login1ManagerInterface.Suspend, False) def shutdownComputer(self, pUserName): """Shutdown computer""" # only if we are not in DEV mode if cons.TK_DEV_ACTIVE: log.log(cons.TK_LOG_LEVEL_WARN, "DEVELOPMENT ACTIVE, not issuing shutdown for myself, sorry...") else: log.log(cons.TK_LOG_LEVEL_DEBUG, "start shutdownComputer in the name of \"%s\"" % (pUserName)) GLib.timeout_add_seconds(0.1, self._login1ManagerInterface.PowerOff, False) timekpr-next/bin/000775 001750 001750 00000000000 15122253261 015744 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/bin/timekprc000755 001750 001750 00000000137 15122253261 017507 0ustar00bezvfedubezvfedu000000 000000 #!/bin/sh exec /usr/bin/python3 /usr/lib/python3/dist-packages/timekpr/client/timekprc.py "$@" timekpr-next/bin/timekpra000755 001750 001750 00000000137 15122253261 017505 0ustar00bezvfedubezvfedu000000 000000 #!/bin/sh exec /usr/bin/python3 /usr/lib/python3/dist-packages/timekpr/client/timekpra.py "$@" timekpr-next/bin/timekprd000755 001750 001750 00000000137 15122253261 017510 0ustar00bezvfedubezvfedu000000 000000 #!/bin/sh exec /usr/bin/python3 /usr/lib/python3/dist-packages/timekpr/server/timekprd.py "$@" timekpr-next/common/000775 001750 001750 00000000000 13476006650 016474 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/common/utils/000775 001750 001750 00000000000 15122253261 017624 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/common/utils/notifications.py000644 001750 001750 00000031032 15122253261 023044 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # imports import dbus.service from datetime import datetime # timekpr imports from timekpr.common.log import log from timekpr.common.constants import constants as cons class timekprNotificationManager(dbus.service.Object): """Notification manager""" # --------------- initialization / control methods --------------- # def __init__(self, pBusName, pUserName, pTimekprConfig): """Initialize notification manager""" log.log(cons.TK_LOG_LEVEL_INFO, "start init notifications") # config self._timekprConfig = pTimekprConfig # last notification self._userName = pUserName self._userNameDBUS = self._userName.replace(".", "").replace("-", "") self._lastNotified = datetime.now().replace(microsecond=0) self._notificationLvl = -1 self._prevNotificationLvl = -1 # ## define notifications levels # notifications are calculated as more than specified limit in ascending order, e.g. if there is 2400 seconds # left, it means that (3600 > 2400 > 1800) second level is chosen self._notificationLimits = ( # ## historical config, just for reference ## # {cons.TK_NOTIF_LEFT: 3600*2, cons.TK_NOTIF_INTERVAL: 3600*2, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_LOW} # ,{cons.TK_NOTIF_LEFT: 3600, cons.TK_NOTIF_INTERVAL: 3600, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_LOW} # ,{cons.TK_NOTIF_LEFT: 1800, cons.TK_NOTIF_INTERVAL: 1800, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_NORMAL} # ,{cons.TK_NOTIF_LEFT: 300, cons.TK_NOTIF_INTERVAL: 600, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_WARNING} # ,{cons.TK_NOTIF_LEFT: 60, cons.TK_NOTIF_INTERVAL: 120, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_IMPORTANT} # ,{cons.TK_NOTIF_LEFT: 0, cons.TK_NOTIF_INTERVAL:60, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_CRITICAL} # ,{cons.TK_NOTIF_LEFT: -cons.TK_LIMIT_PER_DAY*31, cons.TK_NOTIF_INTERVAL: 10, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_CRITICAL} # ## since notifications are client responsibility, but we still need to send them at some point, so this is a placeholder config ## # ## notification levels should not matter anymore, when message arrives to client, it will calc prio depending on it's config ## {cons.TK_NOTIF_LEFT: self._timekprConfig.getTimekprFinalNotificationTime, cons.TK_NOTIF_INTERVAL: self._getTwoDaysTime, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_LOW}, {cons.TK_NOTIF_LEFT: self._getZeroDaysTime, cons.TK_NOTIF_INTERVAL: self._timekprConfig.getTimekprFinalNotificationTime, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_CRITICAL}, {cons.TK_NOTIF_LEFT: self._getLongestTimeNeg, cons.TK_NOTIF_INTERVAL: self._getLongestTime, cons.TK_NOTIF_URGENCY: cons.TK_PRIO_CRITICAL} ) # init DBUS super().__init__(pBusName, cons.TK_DBUS_USER_NOTIF_PATH_PREFIX + self._userNameDBUS) log.log(cons.TK_LOG_LEVEL_INFO, "finish init notifications") # --------------- helper methods --------------- # # a time ceiling of time for comparison def _getLongestTime(self): return cons.TK_LIMIT_PER_DAY * 31 # a time floor of time for comparison def _getLongestTimeNeg(self): return -self._getLongestTime # max time user could have def _getTwoDaysTime(self): return cons.TK_LIMIT_PER_DAY * 2 # 0 time def _getZeroDaysTime(self): return 0 # --------------- worker methods --------------- # def deInitUser(self): """Leave the connection""" # un-init DBUS super().remove_from_connection() def processTimeLeft(self, pForce, pTimeValues): """Process notifications and send signals if needed""" log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "start processTimeLeft") # save old level self._prevNotificationLvl = self._notificationLvl # defaults newNotificatonLvl = -1 effectiveDatetime = datetime.now().replace(microsecond=0) # find current limit for i in self._notificationLimits: # set up new level newNotificatonLvl += 1 # check if pTimeValues[cons.TK_CTRL_LEFT] >= i[cons.TK_NOTIF_LEFT](): # set up new level self._notificationLvl = newNotificatonLvl # we found what we needed break # timeleft timeLeft = dbus.Dictionary({}, signature="si") timeLeft[cons.TK_CTRL_LEFTD] = int(pTimeValues[cons.TK_CTRL_LEFTD]) timeLeft[cons.TK_CTRL_LEFT] = int(pTimeValues[cons.TK_CTRL_LEFT]) timeLeft[cons.TK_CTRL_SPENT] = int(pTimeValues[cons.TK_CTRL_SPENT]) timeLeft[cons.TK_CTRL_SPENTW] = int(pTimeValues[cons.TK_CTRL_SPENTW]) timeLeft[cons.TK_CTRL_SPENTM] = int(pTimeValues[cons.TK_CTRL_SPENTM]) timeLeft[cons.TK_CTRL_SLEEP] = int(pTimeValues[cons.TK_CTRL_SLEEP]) timeLeft[cons.TK_CTRL_TRACK] = bool(pTimeValues[cons.TK_CTRL_TRACK]) timeLeft[cons.TK_CTRL_HIDEI] = bool(pTimeValues[cons.TK_CTRL_HIDEI]) timeLeft[cons.TK_CTRL_TNL] = bool(pTimeValues[cons.TK_CTRL_TNL]) # include PlayTime (if enabled, check is done for couple of mandatory values) if cons.TK_CTRL_PTTLO in pTimeValues and cons.TK_CTRL_PTSPD in pTimeValues: timeLeft[cons.TK_CTRL_PTTLO] = bool(pTimeValues[cons.TK_CTRL_PTTLO]) timeLeft[cons.TK_CTRL_PTAUH] = bool(pTimeValues[cons.TK_CTRL_PTAUH]) timeLeft[cons.TK_CTRL_PTSPD] = int(pTimeValues[cons.TK_CTRL_PTSPD]) timeLeft[cons.TK_CTRL_PTLPD] = int(pTimeValues[cons.TK_CTRL_PTLPD]) timeLeft[cons.TK_CTRL_PTLSTC] = int(pTimeValues[cons.TK_CTRL_PTLSTC]) # save calculated urgency (calculated may get overridden by uacc) notifUrgency = cons.TK_PRIO_UACC if pTimeValues[cons.TK_CTRL_UACC] else self._notificationLimits[self._notificationLvl][cons.TK_NOTIF_URGENCY] # inform clients about time left in any case self.timeLeft(notifUrgency, timeLeft) # if notification levels changed (and it was not the first iteration) if (pForce) or (self._notificationLvl != self._prevNotificationLvl) or (abs((effectiveDatetime - self._lastNotified).total_seconds()) >= self._notificationLimits[self._notificationLvl][cons.TK_NOTIF_INTERVAL]() and not pTimeValues[cons.TK_CTRL_UACC]): # set up last notified self._lastNotified = effectiveDatetime # if time left is whole day, we have no limit (as an additonal limit is the hours, so check if accounting is actually correct) if timeLeft[cons.TK_CTRL_TNL] > 0: # we send no limit just once if self._prevNotificationLvl < 0 or pForce: # no limit self.timeNoLimitNotification(cons.TK_PRIO_LOW) else: # limit self.timeLeftNotification(notifUrgency, max(int(pTimeValues[cons.TK_CTRL_LEFT]), 0), max(int(pTimeValues[cons.TK_CTRL_LEFTD]), 0), int(pTimeValues[cons.TK_CTRL_LIMITD])) log.log(cons.TK_LOG_LEVEL_DEBUG, "time left, tlrow: %i, tleftd: %i, tlimd: %i, notification lvl: %s, priority: %s, force: %s" % (pTimeValues[cons.TK_CTRL_LEFT], pTimeValues[cons.TK_CTRL_LEFTD], pTimeValues[cons.TK_CTRL_LIMITD], self._notificationLvl, notifUrgency, str(pForce))) log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "finish processTimeLeft") def processTimeLimits(self, pTimeLimits): """Enable sending out the limits config""" # dbus dict for holding days timeLimits = dbus.Dictionary(signature="sv") # convert this all to dbus for rKey, rValue in pTimeLimits.items(): # weekly & monthly limits are set differently if rKey in (cons.TK_CTRL_LIMITW, cons.TK_CTRL_LIMITM): # this is to comply with standard limits structure timeLimits[rKey] = dbus.Dictionary(signature="sv") timeLimits[rKey][rKey] = dbus.Int32(rValue) # PlayTime flags elif rKey in (cons.TK_CTRL_PTTLO, cons.TK_CTRL_PTAUH, cons.TK_CTRL_PTTLE): # this is to comply with standard limits structure timeLimits[rKey] = dbus.Dictionary(signature="sb") timeLimits[rKey][rKey] = dbus.Boolean(rValue) # PlayTime lists elif rKey in (cons.TK_CTRL_PTLMT, cons.TK_CTRL_PTLST): # dbus dict for holding days, limits and activities timeLimits[rKey] = dbus.Dictionary(signature="sv") timeLimits[rKey][rKey] = dbus.Array(signature="av") # fill in limits or activities (both have 2 node arrays) for rSubValue in rValue: timeLimits[rKey][rKey].append(dbus.Array([rSubValue[0], rSubValue[1]], signature=("i" if rKey == cons.TK_CTRL_PTLMT else "s"))) else: # dbus dict for holding limits and intervals timeLimits[rKey] = dbus.Dictionary(signature="sv") timeLimits[rKey][cons.TK_CTRL_LIMITD] = rValue[cons.TK_CTRL_LIMITD] # dbus list for holding intervals timeLimits[rKey][cons.TK_CTRL_INT] = dbus.Array(signature="av") # set up dbus dict for rLimit in rValue[cons.TK_CTRL_INT]: # add intervals timeLimits[rKey][cons.TK_CTRL_INT].append(dbus.Array([rLimit[0], rLimit[1], rLimit[2]], signature="i")) # extra if log.isDebugEnabled(cons.TK_LOG_LEVEL_EXTRA_DEBUG): log.log(cons.TK_LOG_LEVEL_EXTRA_DEBUG, "TLDB: %s" % (str(timeLimits))) # process self.timeLimits(cons.TK_PRIO_LOW, timeLimits) def processEmergencyNotification(self, pFinalNotificationType, pCountdown): """Emergency notifcation call wrapper""" # forward to dbus self.timeCriticalNotification(pFinalNotificationType, cons.TK_PRIO_CRITICAL, pCountdown) def procesSessionAttributes(self, pWhat, pKey): """Session attribute verification wrapper""" # forward to dbus self.sessionAttributeVerification(pWhat, pKey) # --------------- DBUS / communication methods (verification, user session states) --------------- # @dbus.service.signal(cons.TK_DBUS_USER_SESSION_ATTRIBUTE_INTERFACE, signature="ss") def sessionAttributeVerification(self, pWhat, pKey): """Send out signal""" # this just passes time back pass # --------------- DBUS / communication methods (limits, config) --------------- # @dbus.service.signal(cons.TK_DBUS_USER_LIMITS_INTERFACE, signature="sa{si}") def timeLeft(self, pPriority, pTimeLeft): """Send out signal""" # this just passes time back pass @dbus.service.signal(cons.TK_DBUS_USER_LIMITS_INTERFACE, signature="sa{sa{sv}}") def timeLimits(self, pPriority, pTimeLimits): """Send out signal""" # this just passes time back pass # --------------- DBUS / communication methods (notifications) --------------- # @dbus.service.signal(cons.TK_DBUS_USER_NOTIF_INTERFACE, signature="siii") def timeLeftNotification(self, pPriority, pTimeLeftTotal, pTimeLeftToday, pTimeLimitToday): """Send out signal""" log.log(cons.TK_LOG_LEVEL_DEBUG, "sending tln: %i" % (pTimeLeftTotal)) # You have %s to use continously, including %s ouf of %s today pass @dbus.service.signal(cons.TK_DBUS_USER_NOTIF_INTERFACE, signature="ssi") def timeCriticalNotification(self, pFinalNotificationType, pPriority, pSecondsLeft): """Send out signal""" log.log(cons.TK_LOG_LEVEL_DEBUG, "sending tcn: %s, %i" % (pFinalNotificationType, pSecondsLeft)) # Your time is up, you will be forcibly logged / locked / suspended / shutdown out in %i seconds! pass @dbus.service.signal(cons.TK_DBUS_USER_NOTIF_INTERFACE, signature="s") def timeNoLimitNotification(self, pPriority): """Send out signal""" log.log(cons.TK_LOG_LEVEL_DEBUG, "sending ntln") # Congratulations, your time is not limited today pass @dbus.service.signal(cons.TK_DBUS_USER_NOTIF_INTERFACE, signature="s") def timeLeftChangedNotification(self, pPriority): """Send out signal""" log.log(cons.TK_LOG_LEVEL_DEBUG, "sending tlcn") # Limits have changed and applied pass @dbus.service.signal(cons.TK_DBUS_USER_NOTIF_INTERFACE, signature="s") def timeConfigurationChangedNotification(self, pPriority): """Send out signal""" log.log(cons.TK_LOG_LEVEL_DEBUG, "sending tccn") # Configuration has changed, new limits may have been applied pass timekpr-next/common/utils/__init__.py000664 001750 001750 00000000000 13476006650 021733 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/common/utils/misc.py000644 001750 001750 00000032066 15122253261 021136 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # defaults _START_TIME = None _END_TIME = None _RESULT = 0 _LOCK_FILE = None # imports from datetime import datetime import os import pwd import inspect import sys import traceback import re import tempfile import fcntl try: import psutil _PSUTIL = True except (ImportError, ValueError): _PSUTIL = False pass # timekpr imports from timekpr.common.constants import constants as cons from timekpr.common.log import log def whoami(): """Return callers name from the call stack, the 0 is this function, prev is the one needed""" # result return inspect.stack()[1][3] def getExceptionDetails(): """Log exception details (can be used only when exception happens)""" exc_type, exc_value, exc_traceback = sys.exc_info() tb = traceback.extract_tb(exc_traceback)[-1] # result return "file: %s, function: %s, line: %s, error: %s" % (tb.filename, tb.name, tb.lineno, exc_value) def getNormalizedUserNames(pUID=None, pUser=None): """Get usernames and/or normalize them""" user = pUser userName = None userNameFull = "" try: # if we need to get one if pUID is not None: # user user = pwd.getpwuid(pUID) # we have user if user is not None: # username userName = user.pw_name userNameFull = user.pw_gecos # workaround for distros that have one or more "," at the end of user full name userNameFull = userNameFull.rstrip(",") # if username is exactly the same as full name, no need to show it separately userNameFull = userNameFull if userNameFull != userName else "" except KeyError: pass # full username return userName, userNameFull def measureTimeElapsed(pStart=False, pStop=False, pResult=False): """Calculate the time difference in the simplest manner""" # init globals (per import) global _START_TIME global _END_TIME global _RESULT # set up start if pStart: _START_TIME = datetime.now() # set up end if pStop: # calc seconds and finish stuff _END_TIME = datetime.now() _RESULT = (_END_TIME - _START_TIME).total_seconds() _START_TIME = _END_TIME # return return _RESULT def measureDBUSTimeElapsed(pStart=False, pStop=False, pPrintToConsole=False, pDbusIFName=""): """Calculate the time difference in the simplest manner""" # run result = measureTimeElapsed(pStart, pStop) # in case we measure dbus performance issues, just print them if pStop and result >= cons.TK_DBUS_ANSWER_TIME: # measurement logging if pPrintToConsole: # measurement logging log.consoleOut("WARNING: PERFORMANCE (DBUS) - acquiring \"%s\" took too long (%is)" % (pDbusIFName, result)) else: # measurement logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: PERFORMANCE (DBUS) - acquiring \"%s\" took too long (%is)" % (pDbusIFName, result)) # return return result def checkAndSetRunning(pAppName, pUserName=""): """Check whether application is already running""" # glo global _LOCK_FILE # def isAlreadyRunning = False # set up pidfile name pidFileName = "%s.%s" % ((pAppName if pUserName == "" else "%s.%s" % (pAppName, pUserName)), cons.TK_LOG_PID_EXT) # determine the location to put pid/lock file in for rDir in cons.TK_LOG_PID_DIRS: # if path is variable, let's get it if rDir.startswith("$"): # get location pidFile = os.getenv(rDir[1:]) else: # def pidFile = rDir # set? if pidFile is None or pidFile == "": continue # check if we can write to it try: with tempfile.TemporaryFile(dir=pidFile): pass except Exception: continue # assemble the final pidFile = os.path.join(pidFile, pidFileName) # try to get the lock on the file try: # file _LOCK_FILE = open(pidFile, "w") # try lock fcntl.flock(_LOCK_FILE, fcntl.LOCK_EX | fcntl.LOCK_NB) # write pid to it (not needed rly, but still) _LOCK_FILE.write(str(os.getpid())) # write _LOCK_FILE.flush() # msg log.log(cons.TK_LOG_LEVEL_WARN, "pid file written to %s" % (pidFile)) except BlockingIOError: # we are running isAlreadyRunning = True # print this to console as well log.log(cons.TK_LOG_LEVEL_WARN, "Timekpr-nExT \"%s\" is already running for user \"%s\"" % (pAppName, pUserName if pUserName != "" else "root")) if pUserName != "": print("Timekpr-nExT \"%s\" is already running for user \"%s\"" % (pAppName, pUserName if pUserName != "" else "root")) # fin break # return whether we are running return isAlreadyRunning def killLeftoverUserProcesses(pUserName, pTimekprConfig): """Kill leftover processes for user""" # if psutil is not available, do nothing global _PSUTIL if not _PSUTIL: return # determine which sessions we are going to kill (either graphical or tty) # this is somewhat interesting as for processes we cannot exactly tell whether it's graphical or not, but we check terminal sessions, # if terminal is not set, then it's assumed graphical or so killTty = False killGUI = False killedProcesses = 0 otherProcesses = 0 # build up killing session types sessinTypesForKill = [rSessionType for rSessionType in pTimekprConfig.getTimekprSessionsCtrl() if rSessionType not in pTimekprConfig.getTimekprSessionsExcl()] # check for graphical for sessionType in cons.TK_SESSION_TYPES_CTRL.split(";"): # check for kill if sessionType in sessinTypesForKill: killGUI = True break # check for graphical for sessionType in cons.TK_SESSION_TYPES_EXCL.split(";"): # check for kill if sessionType in sessinTypesForKill: killTty = True break # get all processes for this user for userProc in psutil.process_iter(): # process info procInfo = userProc.as_dict(attrs=["pid", "ppid", "name", "username", "terminal"]) # check for username and for processes that originates from init (the rest should be terminated along with the session) if procInfo["username"] == pUserName: # if originates from init if procInfo["ppid"] in (0, 1): # normalize terminal (only real terminals are considered terminals) terminal = procInfo["terminal"] if (procInfo["terminal"] is not None and "/dev/pts/" not in procInfo["terminal"]) else None # logging log.log(cons.TK_LOG_LEVEL_INFO, "INFO: got leftover process, pid: %s, ppid: %s, username: %s, name: %s, terminal: %s, effective terminal: %s" % (procInfo["pid"], procInfo["ppid"], procInfo["username"], procInfo["name"], procInfo["terminal"], terminal)) # kill processes if they are terminal and terminals are tracked or they are not terminal processes if (terminal is not None and killTty) or (terminal is None and killGUI): try: # get process and kill it userPrc = psutil.Process(procInfo["pid"]) # killing time if cons.TK_DEV_ACTIVE: log.log(cons.TK_LOG_LEVEL_WARN, "DEVELOPMENT ACTIVE, not killing my own processes, sorry...") else: # asking process to terminate userPrc.terminate() except psutil.Error as psErr: log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: killing %s failed (%s)" % (procInfo["pid"], str(psErr))) pass else: # count killed processes killedProcesses += 1 else: # do not kill terminal sessions if ones are not tracked log.log(cons.TK_LOG_LEVEL_INFO, "INFO: NOT killing process %s as it's from sessions which are not being tracked" % (procInfo["pid"])) else: # count other processes otherProcesses += 1 # log log.log(cons.TK_LOG_LEVEL_INFO, "INFO: %i session related processes were killed, %i other processes for user were not killed" % (killedProcesses, otherProcesses)) def findHourStartEndMinutes(pStr): """Separate name and desription in brackets""" # hour, start, end hour = None sMin = None eMin = None uacc = None # get len beforehand ln = len(pStr) if pStr is not None else 0 # it makes sense to calc stuff only when there is a hour defined if ln > 0: # is hour unaccounted uacc = True if pStr[0] == "!" else False # in case of unlimited hour actual len is smaller ln = ln - 1 if uacc else ln # get hour (ex: 1 or 11) if 1 <= ln <= 2: # hour, start, end hour = pStr[1:] if uacc else pStr sMin = 0 eMin = 60 # get hours and minutes (ex: 1[1:1] or 11[11:22]) elif 6 <= ln <= 9: # find minutes beg = 1 if uacc else 0 st = pStr.find("[") sep = pStr.find("-") # failover to : (currently undocumented) sep = sep if not sep < 0 else pStr.find(":") en = pStr.find("]") # in case user config is broken, we cannot determine stuff if st < 0 or en < 0 or sep < 0 or not st < sep < en: # nothing pass else: # hour, start, end try: # determine hour and minutes (and check for errors as well) hour = int(pStr[beg:st]) sMin = int(pStr[st+1:sep]) eMin = int(pStr[sep+1:en]) # checks for errors (and raise one if there is an error) hour = hour if 0 <= hour <= 23 else 1/0 sMin = sMin if 0 <= sMin <= 60 else 1/0 eMin = eMin if 0 <= eMin <= 60 else 1/0 eMin = eMin if sMin < eMin else 1/0 except (ValueError, ZeroDivisionError): # hour, start, end hour = None sMin = None eMin = None uacc = None # return return hour, sMin, eMin, uacc def splitConfigValueNameParam(pStr): """Separate value and param in brackets""" # name and its value value = None param = None # nothing if len(pStr) < 2: # can not be a normal value pass else: try: # find description ("") is for backwards compatibility st = pStr.find("(\"") # compatibility description start en = pStr.find("\")") # compatibility description end ln = 1 if st < 0 else 2 # compatility case searches for 2 letters, new one 1 # new style config st = pStr.find("[") if st < 0 else st # new style config en = pStr.find("]") if en < 0 else en # new style config st = en if st < 0 else st # no description, we'll get just pattern # process and its description value = pStr[0:st if st > 0 else len(pStr)] param = "" if st < 0 else pStr[st+ln:en if en >= 0 else len(pStr)] except: # it doesn't matter which error occurs value = None param = None # return return value, param def getSecondsFromTimeStr(pTimeStr): # def secs = None # regular expression to match time formats (days or hours or minutes or seconds or seconds w/o suffix) pattern = re.compile(r"^(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?(?:(\d+))?$") # find matches match = pattern.match(pTimeStr.replace(" ", "")) # no match - time format is wrong if match: # extract matched values secs = ((int(match.group(1) or 0) * 86400) # days + (int(match.group(2) or 0) * 3600) # hours + (int(match.group(3) or 0) * 60) # minutes + int(match.group(4) or match.group(5) or 0)) # seconds # fin return secs def getTimeStrFromSeconds(pSeconds): # for building our final string parts = [] # secs seconds = abs(pSeconds) # get sign parts += ["-"] if seconds < 0 else [] # secs seconds = abs(seconds) # calc stuff days, seconds = divmod(seconds, 86400) hours, seconds = divmod(seconds, 3600) minutes, seconds = divmod(seconds, 60) # days parts += ["%sd" % (days)] if days else [] # hrs parts += ["%sh" % (hours)] if hours else [] # mins parts += ["%sm" % (minutes)] if minutes else [] # seconds left parts += ["%ss" % (seconds)] if seconds or len(parts) == 0 else [] # fin return "".join(parts) timekpr-next/common/utils/config.py000644 001750 001750 00000273663 15122253261 021462 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # imports from datetime import datetime import re import os import shutil import getpass # timekpr imports from timekpr.common.log import log from timekpr.common.constants import constants as cons from timekpr.common.utils.misc import findHourStartEndMinutes as findHourStartEndMinutes from timekpr.common.utils.misc import splitConfigValueNameParam as splitConfigValueNameParam # ## GLOBAL ## # key pattern search RE_SECTIONFINDER = re.compile(r"^\[([a-zA-Z0-9_\.@-]+)\]$") RE_KEYVALUEFINDER = re.compile(r"^ *([A-Z]+[A-Z_]+[0-9]*) *= *(.*)$") RE_ARRAYKEYFINDER = re.compile(r"^##([A-Z]+[A-Z_]+)##.*$") def _saveConfigFile(pConfigFile, pKeyValuePairs): """Save the config file using custom helper function""" global RE_KEYVALUEFINDER, RE_ARRAYKEYFINDER # edit control file (using custom file rewrite method) # make a backup of the file shutil.copy(pConfigFile, pConfigFile + cons.TK_BAK_EXT) # read backup and write actual config file with open(pConfigFile + cons.TK_BAK_EXT, "r") as srcFile, open(pConfigFile, "w") as dstFile: # destination file dstLines = [] # read line and do manipulations for rLine in srcFile: # def line line = rLine # if line matches parameter pattern, we look up for that key in our value list if RE_KEYVALUEFINDER.match(rLine): # check whether we can find the value for it key = RE_KEYVALUEFINDER.sub(r"\1", rLine.rstrip()) # if key exists if key in pKeyValuePairs: # in case of placeholder (value = None), just keep the line, else replace it if pKeyValuePairs[key] is not None: # now get the value dstLines.append("%s = %s\n" % (key, pKeyValuePairs[key])) # do not add original line line = None else: # do not add unknown options line = None # search for variable options elif RE_ARRAYKEYFINDER.match(rLine): # check whether we can find the value for it key = RE_ARRAYKEYFINDER.sub(r"\1", rLine.rstrip()) # now get the value dstLines.append("%s" % (rLine)) # if key exists if key in pKeyValuePairs: # append array of values for rVal in pKeyValuePairs[key]: # now get the value dstLines.append("%s\n" % (rVal)) # do not add original line line = None # append if there is a line if line is not None: # add line dstLines.append(line) # save config lines back to file dstFile.writelines(dstLines) def _loadAndPrepareConfigFile(pTimekprConfig, pConfigFile, pLoadOnly=False): """Try to load config file, if that fails, try to read backup file""" global RE_KEYVALUEFINDER, RE_SECTIONFINDER # by default fail result = False # process primary and backup files for rFile in (pConfigFile, pConfigFile + cons.TK_BAK_EXT): # if file is ok if os.path.isfile(rFile) and os.path.getsize(rFile) != 0: # copy file back to original (if this is backup file) if rFile != pConfigFile and not pLoadOnly: # copy shutil.copy(rFile, pConfigFile) # current section currSect = "" # read config file with open(pConfigFile, "r") as srcFile: # read line for rLine in srcFile: # if line matches parameter pattern, we look up for that key in our value list if RE_SECTIONFINDER.match(rLine): # set up current section currSect = RE_SECTIONFINDER.sub(r"\1", rLine.rstrip()) # found if currSect != "": # section found pTimekprConfig["CONFIGLOADER"][currSect] = {} elif currSect != "" and RE_KEYVALUEFINDER.match(rLine): # value found pTimekprConfig["CONFIGLOADER"][currSect][RE_KEYVALUEFINDER.sub(r"\1", rLine.rstrip())] = RE_KEYVALUEFINDER.sub(r"\2", rLine.rstrip()) # some values were read result = True # we found smth if result: # stop break else: # we do not need empty files if os.path.isfile(rFile) and not pLoadOnly: # remove empty file os.remove(rFile) # result return result def _readAndNormalizeValue(pTimekprConfig, pSection, pParam, pDefaultValue, pCheckValue, pOverallSuccess): """Read value from parser, if fails, then return default value""" # default values result = pOverallSuccess value = pDefaultValue try: # read value from config value = pTimekprConfig["CONFIGLOADER"][pSection][pParam] # check min / max if we have numbers if type(pDefaultValue).__name__ in ("int", "float"): value = int(value) # check if pCheckValue is not None: value = min(max(value, -pCheckValue), pCheckValue) # validate date format properly elif type(pDefaultValue).__name__ in ("date", "datetime"): value = datetime.strptime(value, cons.TK_DATETIME_FORMAT) # validate boolean properly elif type(pDefaultValue).__name__ in ("bool"): value = value.capitalize() == "True" except Exception: # default value value = pDefaultValue # failed result = False # return return result, value def _cleanupValue(pValue): """Clean up value (basically remove stuff from begining and end)""" return(pValue.strip().strip(";") if pValue is not None else None) class timekprConfig(object): """Main configuration class for the server""" def __init__(self): """Initialize stuff""" log.log(cons.TK_LOG_LEVEL_INFO, "initializing configuration manager") # config self._timekprConfig = {} # config sections from file self._timekprConfig["CONFIGLOADER"] = {} # in dev self._configDirPrefix = os.getcwd() if cons.TK_DEV_ACTIVE else "" # main config self._timekprConfig["TIMEKPR_MAIN_CONFIG_DIR"] = os.path.join(self._configDirPrefix, (cons.TK_MAIN_CONFIG_DIR_DEV if cons.TK_DEV_ACTIVE else cons.TK_MAIN_CONFIG_DIR)) self._configFile = os.path.join(self._timekprConfig["TIMEKPR_MAIN_CONFIG_DIR"], cons.TK_MAIN_CONFIG_FILE) log.log(cons.TK_LOG_LEVEL_INFO, "finish configuration manager") def __del__(self): """De-initialize stuff""" log.log(cons.TK_LOG_LEVEL_INFO, "de-initializing configuration manager") def loadMainConfiguration(self): """Read main timekpr config file""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start loading configuration") # try to load config file result = _loadAndPrepareConfigFile(self._timekprConfig, self._configFile) # value read result resultValue = True # read config failed, we need to initialize if not result: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: could not parse main configuration file (%s) properly, will use default values" % (self._configFile)) # init config self.initDefaultConfiguration() # re-read the file result = _loadAndPrepareConfigFile(self._timekprConfig, self._configFile) # general section section = "GENERAL" # read param = "TIMEKPR_VERSION" self._timekprConfig[param] = cons.TK_VERSION # read param = "TIMEKPR_LOGLEVEL" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_USR_LOG_LEVEL_INFO, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TIMEKPR_POLLTIME" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_POLLTIME, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TIMEKPR_SAVE_TIME" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_SAVE_INTERVAL, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TIMEKPR_TRACK_INACTIVE" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_TRACK_INACTIVE, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TIMEKPR_TERMINATION_TIME" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_TERMINATION_TIME, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TIMEKPR_FINAL_WARNING_TIME" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_FINAL_COUNTDOWN_TIME, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TIMEKPR_FINAL_NOTIFICATION_TIME" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_FINAL_NOTIFICATION_TIME, pCheckValue=None, pOverallSuccess=resultValue) # session section section = "SESSION" # read param = "TIMEKPR_SESSION_TYPES_CTRL" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_SESSION_TYPES_CTRL, pCheckValue=None, pOverallSuccess=resultValue) self._timekprConfig[param] = _cleanupValue(self._timekprConfig[param]) # read param = "TIMEKPR_SESSION_TYPES_EXCL" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_SESSION_TYPES_EXCL, pCheckValue=None, pOverallSuccess=resultValue) self._timekprConfig[param] = _cleanupValue(self._timekprConfig[param]) # read param = "TIMEKPR_USERS_EXCL" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_USERS_EXCL, pCheckValue=None, pOverallSuccess=resultValue) self._timekprConfig[param] = _cleanupValue(self._timekprConfig[param]) # directory section (! in case directories are not correct, they are not overwritten with defaults !) section = "DIRECTORIES" # read param = "TIMEKPR_CONFIG_DIR" result, value = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_CONFIG_DIR, pCheckValue=None, pOverallSuccess=result) self._timekprConfig[param] = os.path.join(self._configDirPrefix, value) # read param = "TIMEKPR_WORK_DIR" result, value = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_WORK_DIR, pCheckValue=None, pOverallSuccess=result) self._timekprConfig[param] = os.path.join(self._configDirPrefix, value) # read param = "TIMEKPR_SHARED_DIR" result, value = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_SHARED_DIR, pCheckValue=None, pOverallSuccess=result) self._timekprConfig[param] = os.path.join(self._configDirPrefix, value) # read param = "TIMEKPR_LOGFILE_DIR" result, value = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_LOGFILE_DIR, pCheckValue=None, pOverallSuccess=result) self._timekprConfig[param] = os.path.join(self._configDirPrefix, value) # global PlayTime config section section = "PLAYTIME" # read param = "TIMEKPR_PLAYTIME_ENABLED" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_PLAYTIME_ENABLED, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED" resultValue, self._timekprConfig[param] = _readAndNormalizeValue(self._timekprConfig, section, param, pDefaultValue=cons.TK_PLAYTIME_ENABLED, pCheckValue=None, pOverallSuccess=resultValue) # if we could not read some values, save what we could + defaults if not resultValue: # logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: some values in main config file (%s) could not be read or new configuration option was introduced, valid values and defaults are used / saved instead" % (self._configFile)) # save what we could self.initDefaultConfiguration(True) # if we could not read some values, report that (directories only) if not result: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: some directory values in main config file (%s) could not be read, valid values and defaults used (config NOT overwritten)" % (self._configFile)) # clear self._timekprConfig["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_DEBUG, "finish loading configuration") # result return True def initDefaultConfiguration(self, pReuseValues=False): """Save config file (if someone messed up config file, we have to write new one)""" log.log(cons.TK_LOG_LEVEL_INFO, "start saving default configuration") # build the file dstLines = [] # save default config section = "DOCUMENTATION" # section dstLines += ["[%s]\n" % section] # values / comments dstLines += ["%s\n" % "#### this is the main configuration file for timekpr-next"] dstLines += ["%s\n" % "#### if this file cannot be read properly, it will be overwritten with defaults"] # section section = "GENERAL" # values / comments dstLines += ["\n[%s]\n" % section] dstLines += ["%s\n" % "#### general configuration section"] # set up param param = "TIMEKPR_LOGLEVEL" dstLines += ["%s\n" % "# this defines logging level of the timekpr (1 - normal, 2 - debug, 3 - extra debug)"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_USR_LOG_LEVEL_INFO))] # set up param param = "TIMEKPR_POLLTIME" dstLines += ["%s\n" % "# this defines polling time (in memory) in seconds"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_POLLTIME))] # set up param param = "TIMEKPR_SAVE_TIME" dstLines += ["%s\n" % "# this defines a time for saving user time control file (polling and accounting is done in memory more often, but saving is not)"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_SAVE_INTERVAL))] # set up param param = "TIMEKPR_TRACK_INACTIVE" dstLines += ["%s\n" % "# this defines whether to account sessions which are inactive (locked screen, user switched away from desktop, etc.),"] dstLines += ["%s\n" % "# new users, when created, will inherit this value"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_TRACK_INACTIVE))] # set up param param = "TIMEKPR_TERMINATION_TIME" dstLines += ["%s\n" % "# this defines a time interval in seconds prior to assign user a termination sequence"] dstLines += ["%s\n" % "# 15 seconds before time ends nothing can be done to avoid killing a session"] dstLines += ["%s\n" % "# this also is the time before initiating a termination sequence if user has logged in inappropriate time"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_TERMINATION_TIME))] # set up param param = "TIMEKPR_FINAL_WARNING_TIME" dstLines += ["%s\n" % "# this defines a time interval prior to termination of user sessions when timekpr will send continous final warnings (countdown) until the actual termination"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_FINAL_COUNTDOWN_TIME))] # set up param param = "TIMEKPR_FINAL_NOTIFICATION_TIME" dstLines += ["%s\n" % "# this defines a time interval prior to termination of user sessions when timekpr will send one final warning about time left"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_FINAL_NOTIFICATION_TIME))] # section section = "SESSION" # values / comments dstLines += ["\n[%s]\n" % section] dstLines += ["%s\n" % "#### this section contains configuration about sessions"] # set up param param = "TIMEKPR_SESSION_TYPES_CTRL" dstLines += ["%s\n" % "# session types timekpr will track"] dstLines += [ "%s = %s\n" % (param, self._timekprConfig[param] if pReuseValues else cons.TK_SESSION_TYPES_CTRL)] # set up param param = "TIMEKPR_SESSION_TYPES_EXCL" dstLines += ["%s\n" % "# session types timekpr will ignore explicitly"] dstLines += [ "%s = %s\n" % (param, self._timekprConfig[param] if pReuseValues else cons.TK_SESSION_TYPES_EXCL)] # set up param param = "TIMEKPR_USERS_EXCL" dstLines += ["%s\n" % "# users timekpr will ignore explicitly"] dstLines += [ "%s = %s\n" % (param, self._timekprConfig[param] if pReuseValues else cons.TK_USERS_EXCL)] # section section = "DIRECTORIES" # values / comments dstLines += ["\n[%s]\n" % section] dstLines += ["%s\n" % "#### this section contains directory configuration"] # set up param param = "TIMEKPR_CONFIG_DIR" dstLines += ["%s\n" % "# runtime directory for timekpr user configuration files"] dstLines += [ "%s = %s\n" % (param, self._timekprConfig[param] if pReuseValues else cons.TK_CONFIG_DIR)] # set up param param = "TIMEKPR_WORK_DIR" dstLines += ["%s\n" % "# runtime directory for timekpr time control files"] dstLines += [ "%s = %s\n" % (param, self._timekprConfig[param] if pReuseValues else cons.TK_WORK_DIR)] # set up param param = "TIMEKPR_SHARED_DIR" dstLines += ["%s\n" % "# directory for shared files (images, gui definitions, etc.)"] dstLines += [ "%s = %s\n" % (param, self._timekprConfig[param] if pReuseValues else cons.TK_SHARED_DIR)] # set up param param = "TIMEKPR_LOGFILE_DIR" dstLines += ["%s\n" % "# directory for log files"] dstLines += [ "%s = %s\n" % (param, self._timekprConfig[param] if pReuseValues else cons.TK_LOGFILE_DIR)] # section section = "PLAYTIME" # values / comments dstLines += ["\n[%s]\n" % section] dstLines += ["%s\n" % "#### this section contains global PlayTime activity configuration"] # set up param param = "TIMEKPR_PLAYTIME_ENABLED" dstLines += ["%s\n" % "# whether PlayTime is enabled globally"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_PLAYTIME_ENABLED))] # set up param param = "TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED" dstLines += ["%s\n" % "# whether PlayTime activity monitor will use process command line, including arguments, for monitoring processes (by default only uses the process name)"] dstLines += [ "%s = %s\n" % (param, str(self._timekprConfig[param]) if pReuseValues else str(cons.TK_PLAYTIME_ENABLED))] # write config file with open(self._configFile, "w") as dstFile: # save the file dstFile.writelines(dstLines) # clear self._timekprConfig["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_INFO, "finish saving default configuration") def saveTimekprConfiguration(self): """Write new sections of the file""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start saving timekpr configuration") # init dict values = {} # server loglevel param = "TIMEKPR_LOGLEVEL" values[param] = str(self._timekprConfig[param]) # in-memory polling time param = "TIMEKPR_POLLTIME" values[param] = str(self._timekprConfig[param]) # time interval to save user spent time param = "TIMEKPR_SAVE_TIME" values[param] = str(self._timekprConfig[param]) # track inactive (default value) param = "TIMEKPR_TRACK_INACTIVE" values[param] = str(self._timekprConfig[param]) # termination time (allowed login time when there is no time left before user is thrown out) param = "TIMEKPR_TERMINATION_TIME" values[param] = str(self._timekprConfig[param]) # final warning time (countdown to 0 before terminating session) param = "TIMEKPR_FINAL_WARNING_TIME" values[param] = str(self._timekprConfig[param]) # final notification time (final warning before terminating session) param = "TIMEKPR_FINAL_NOTIFICATION_TIME" values[param] = str(self._timekprConfig[param]) # which session types to control param = "TIMEKPR_SESSION_TYPES_CTRL" values[param] = str(self._timekprConfig[param]) # explicitly excludeds ession types (do not count time in these sessions) param = "TIMEKPR_SESSION_TYPES_EXCL" values[param] = str(self._timekprConfig[param]) # which users to exclude from time accounting param = "TIMEKPR_USERS_EXCL" values[param] = str(self._timekprConfig[param]) # whether PlayTime is enabled param = "TIMEKPR_PLAYTIME_ENABLED" values[param] = str(self._timekprConfig[param]) # whether PlayTime enhanced activity monitor is enabled param = "TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED" values[param] = str(self._timekprConfig[param]) # ## pass placeholders for directories ## # config dir param = "TIMEKPR_CONFIG_DIR" values[param] = None # work dir param = "TIMEKPR_WORK_DIR" values[param] = None # shared dir param = "TIMEKPR_SHARED_DIR" values[param] = None # log dir param = "TIMEKPR_LOGFILE_DIR" values[param] = None # edit client config file (using alternate method) _saveConfigFile(self._configFile, values) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish saving timekpr configuration") def logMainConfiguration(self): """Log main timekpr config file""" # log log.log(cons.TK_LOG_LEVEL_INFO, "main configuration:") try: # log param = "TIMEKPR_LOGLEVEL" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_POLLTIME" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_SAVE_TIME" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_TRACK_INACTIVE" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_TERMINATION_TIME" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_FINAL_WARNING_TIME" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_FINAL_NOTIFICATION_TIME" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_SESSION_TYPES_CTRL" self._timekprConfig[param] = _cleanupValue(self._timekprConfig[param]) log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_SESSION_TYPES_EXCL" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_USERS_EXCL" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_PLAYTIME_ENABLED" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # log param = "TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprConfig[param]))) # fail except Exception: # log log.log(cons.TK_LOG_LEVEL_INFO, " configuration log failed") def getTimekprVersion(self): """Get version""" # param param = "TIMEKPR_VERSION" # result return self._timekprConfig[param] def getTimekprLogLevel(self): """Get logging level""" # param param = "TIMEKPR_LOGLEVEL" # result return self._timekprConfig[param] def getTimekprPollTime(self): """Get polling time""" # param param = "TIMEKPR_POLLTIME" # result return self._timekprConfig[param] def getTimekprSaveTime(self): """Get save time""" # param param = "TIMEKPR_SAVE_TIME" # result return self._timekprConfig[param] def getTimekprTrackInactive(self): """Get tracking inactive""" # param param = "TIMEKPR_TRACK_INACTIVE" # result return self._timekprConfig[param] def getTimekprTerminationTime(self): """Get termination time""" # param param = "TIMEKPR_TERMINATION_TIME" # result return self._timekprConfig[param] def getTimekprFinalWarningTime(self): """Get final warning time""" # param param = "TIMEKPR_FINAL_WARNING_TIME" # result return self._timekprConfig[param] def getTimekprFinalNotificationTime(self): """Get final notification time""" # param param = "TIMEKPR_FINAL_NOTIFICATION_TIME" # result return self._timekprConfig[param] def getTimekprSessionsCtrl(self): """Get sessions to control""" # param param = "TIMEKPR_SESSION_TYPES_CTRL" # result return [rVal.strip() for rVal in self._timekprConfig[param].split(";") if rVal != ""] if param in self._timekprConfig else [] def getTimekprSessionsExcl(self): """Get sessions to exclude""" # param param = "TIMEKPR_SESSION_TYPES_EXCL" # result return [rVal.strip() for rVal in self._timekprConfig[param].split(";") if rVal != ""] if param in self._timekprConfig else [] def getTimekprUsersExcl(self): """Get sessions to exclude""" # param param = "TIMEKPR_USERS_EXCL" # result return [rVal.strip() for rVal in self._timekprConfig[param].split(";") if rVal != ""] if param in self._timekprConfig else [] def getTimekprConfigDir(self): """Get config dir""" # param param = "TIMEKPR_CONFIG_DIR" # result return cons.TK_CONFIG_DIR_DEV if cons.TK_DEV_ACTIVE else self._timekprConfig[param] def getTimekprWorkDir(self): """Get working dir""" # param param = "TIMEKPR_WORK_DIR" # result return cons.TK_WORK_DIR_DEV if cons.TK_DEV_ACTIVE else self._timekprConfig[param] def getTimekprSharedDir(self): """Get shared dir""" # param param = "TIMEKPR_SHARED_DIR" # result return cons.TK_SHARED_DIR_DEV if cons.TK_DEV_ACTIVE else self._timekprConfig[param] def getTimekprLogfileDir(self): """Get log file dir""" # param param = "TIMEKPR_LOGFILE_DIR" # result return cons.TK_LOGFILE_DIR_DEV if cons.TK_DEV_ACTIVE else self._timekprConfig[param] def getTimekprPlayTimeEnabled(self): """Return whether we have PlayTime enabled""" # param param = "TIMEKPR_PLAYTIME_ENABLED" # result return self._timekprConfig[param] def getTimekprPlayTimeEnhancedActivityMonitorEnabled(self): """Return whether we have PlayTime enhanced activity monitor is enabled""" # param param = "TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED" # result return self._timekprConfig[param] def getTimekprLastModified(self): """Get last file modification time""" # result return datetime.fromtimestamp(os.path.getmtime(self._configFile)) def setTimekprLogLevel(self, pLogLevel): """Set logging level""" # set self._timekprConfig["TIMEKPR_LOGLEVEL"] = pLogLevel def setTimekprPollTime(self, pPollingTimeSecs): """Set polling time""" # set self._timekprConfig["TIMEKPR_POLLTIME"] = pPollingTimeSecs def setTimekprSaveTime(self, pSaveTimeSecs): """Set save time""" # set self._timekprConfig["TIMEKPR_SAVE_TIME"] = pSaveTimeSecs def setTimekprTrackInactive(self, pTrackInactiveDefault): """Get tracking inactive""" # set self._timekprConfig["TIMEKPR_TRACK_INACTIVE"] = pTrackInactiveDefault def setTimekprTerminationTime(self, pTerminationTimeSecs): """Set termination time""" # set self._timekprConfig["TIMEKPR_TERMINATION_TIME"] = pTerminationTimeSecs def setTimekprFinalWarningTime(self, pFinalWarningTimeSecs): """Set final warning time""" # set self._timekprConfig["TIMEKPR_FINAL_WARNING_TIME"] = pFinalWarningTimeSecs def setTimekprFinalNotificationTime(self, pFinalNotificationTimeSecs): """Set final warning time""" # set self._timekprConfig["TIMEKPR_FINAL_NOTIFICATION_TIME"] = pFinalNotificationTimeSecs def setTimekprSessionsCtrl(self, pSessionsCtrl): """Set sessions to control""" # set self._timekprConfig["TIMEKPR_SESSION_TYPES_CTRL"] = ";".join(pSessionsCtrl) def setTimekprSessionsExcl(self, pSessionsExcl): """Set sessions to exclude""" # set self._timekprConfig["TIMEKPR_SESSION_TYPES_EXCL"] = ";".join(pSessionsExcl) def setTimekprUsersExcl(self, pUsersExcl): """Set sessions to exclude""" # set self._timekprConfig["TIMEKPR_USERS_EXCL"] = ";".join(pUsersExcl) def setTimekprPlayTimeEnabled(self, pPlayTimeEnabled): """Set PlayTime enable flag""" # set self._timekprConfig["TIMEKPR_PLAYTIME_ENABLED"] = pPlayTimeEnabled def setTimekprPlayTimeEnhancedActivityMonitorEnabled(self, pPlayTimeAdvancedSearchEnabled): """Set PlayTime enable flag""" # set self._timekprConfig["TIMEKPR_PLAYTIME_ENHANCED_ACTIVITY_MONITOR_ENABLED"] = pPlayTimeAdvancedSearchEnabled class timekprUserConfig(object): """Class will contain and provide config related functionality""" def __init__(self, pDirectory, pUserName): """Initialize config""" log.log(cons.TK_LOG_LEVEL_INFO, "init user (%s) configuration manager" % (pUserName)) # initialize class variables self._configFile = os.path.join(pDirectory, cons.TK_USER_CONFIG_FILE % (pUserName)) self._userName = pUserName self._timekprUserConfig = {} # config sections from file self._timekprUserConfig["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_INFO, "finish user configuration manager") def __del__(self): """De-initialize config""" log.log(cons.TK_LOG_LEVEL_INFO, "de-init user configuration manager") def loadUserConfiguration(self, pValidateOnly=False): """Read user timekpr config file""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start load user configuration") # user config section section = self._userName # try to load config file result = _loadAndPrepareConfigFile(self._timekprUserConfig, self._configFile) # value read result resultValue = True # if we still are fine (and not just checking) if not pValidateOnly or (pValidateOnly and result): # read config failed, we need to initialize if not result: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: could not parse the main configuration file (%s) properly, will use default values" % (self._configFile)) # init config self.initUserConfiguration() # re-read the file result = _loadAndPrepareConfigFile(self._timekprUserConfig, self._configFile) # read param = "ALLOWED_HOURS" for i in range(1, 7+1): resultValue, self._timekprUserConfig["%s_%s" % (param, str(i))] = _readAndNormalizeValue(self._timekprUserConfig, section, ("%s_%s" % (param, str(i))), pDefaultValue=cons.TK_ALLOWED_HOURS, pCheckValue=None, pOverallSuccess=resultValue) # read param = "ALLOWED_WEEKDAYS" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_ALLOWED_WEEKDAYS, pCheckValue=None, pOverallSuccess=resultValue) self._timekprUserConfig[param] = _cleanupValue(self._timekprUserConfig[param]) # read param = "LIMITS_PER_WEEKDAYS" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_LIMITS_PER_WEEKDAYS, pCheckValue=None, pOverallSuccess=resultValue) self._timekprUserConfig[param] = _cleanupValue(self._timekprUserConfig[param]) # read param = "LIMIT_PER_WEEK" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_LIMIT_PER_WEEK, pCheckValue=None, pOverallSuccess=resultValue) # read param = "LIMIT_PER_MONTH" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_LIMIT_PER_MONTH, pCheckValue=None, pOverallSuccess=resultValue) # read param = "TRACK_INACTIVE" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_TRACK_INACTIVE, pCheckValue=None, pOverallSuccess=resultValue) # read param = "HIDE_TRAY_ICON" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_HIDE_TRAY_ICON, pCheckValue=None, pOverallSuccess=resultValue) # read param = "LOCKOUT_TYPE" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_CTRL_RES_T, pCheckValue=None, pOverallSuccess=resultValue) # read param = "WAKEUP_HOUR_INTERVAL" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue="0;23", pCheckValue=None, pOverallSuccess=resultValue) self._timekprUserConfig[param] = _cleanupValue(self._timekprUserConfig[param]) # user PlayTime config section section = "%s.%s" % (self._userName, "PLAYTIME") # read param = "PLAYTIME_ENABLED" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_PLAYTIME_ENABLED, pCheckValue=None, pOverallSuccess=resultValue) # read param = "PLAYTIME_LIMIT_OVERRIDE_ENABLED" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_PLAYTIME_ENABLED, pCheckValue=None, pOverallSuccess=resultValue) # read param = "PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=(not cons.TK_PLAYTIME_ENABLED), pCheckValue=None, pOverallSuccess=resultValue) # read param = "PLAYTIME_ALLOWED_WEEKDAYS" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_PLAYTIME_ALLOWED_WEEKDAYS, pCheckValue=None, pOverallSuccess=resultValue) self._timekprUserConfig[param] = _cleanupValue(self._timekprUserConfig[param]) # read param = "PLAYTIME_LIMITS_PER_WEEKDAYS" resultValue, self._timekprUserConfig[param] = _readAndNormalizeValue(self._timekprUserConfig, section, param, pDefaultValue=cons.TK_PLAYTIME_LIMITS_PER_WEEKDAYS, pCheckValue=None, pOverallSuccess=resultValue) self._timekprUserConfig[param] = _cleanupValue(self._timekprUserConfig[param]) # read activities self._timekprUserConfig["PLAYTIME_ACTIVITIES"] = [] appCfgKeys = [rParam for rParam in self._timekprUserConfig["CONFIGLOADER"][section] if "PLAYTIME_ACTIVITY_" in rParam] if section in self._timekprUserConfig["CONFIGLOADER"] else [] # read all apps (apps have to be properly configured) for rAppIdx in range(0, len(appCfgKeys)): # read value resultValue, process = _readAndNormalizeValue(self._timekprUserConfig, section, appCfgKeys[rAppIdx], pDefaultValue=None, pCheckValue=None, pOverallSuccess=resultValue) # read successful if process is not None: # add to the activities list proc, desc = splitConfigValueNameParam(process) # we have valid process if proc is not None: # save process self._timekprUserConfig["PLAYTIME_ACTIVITIES"].append([proc, desc]) # log log.log(cons.TK_LOG_LEVEL_DEBUG, "PT: found total %i activities, valid %i" % (len(appCfgKeys), len(self._timekprUserConfig["PLAYTIME_ACTIVITIES"]))) # if we could not read some values, save what we could + defaults if not resultValue: # logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: some values in user config file (%s) could not be read or new configuration option was introduced, valid values and defaults are used / saved instead" % (self._configFile)) # init config with partial values read and save what we could self.initUserConfiguration(True) # clear self._timekprUserConfig["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_DEBUG, "finish load user configuration") # result return result def initUserConfiguration(self, pReuseValues=False): """Write new sections of the file""" log.log(cons.TK_LOG_LEVEL_INFO, "init default user (%s) configuration" % (self._userName)) # build the file dstLines = [] # save default config section = "DOCUMENTATION" # section dstLines += ["[%s]\n" % section] # values / comments dstLines += ["%s\n" % "#### this is the user configuration file for timekpr-next"] dstLines += ["%s\n" % "#### if this file cannot be read properly, it will be overwritten with defaults"] dstLines += ["%s\n" % "#### all numeric time values are specified in seconds"] dstLines += ["%s\n" % "#### days and hours should be configured as per ISO 8601 (i.e. Monday is the first day of week (1-7) and hours are in 24h format (0-23))"] # add new user section section = self._userName # section dstLines += ["\n[%s]\n" % section] # values / comments dstLines += ["%s\n" % "# this defines which hours are allowed (remove or add hours to limit access), configure limits for start/end minutes for hour in brackets,"] dstLines += ["%s\n" % "# optionally enter ! in front of hour to mark it non-accountable, example: !22[00-15]"] # set up param param = "ALLOWED_HOURS" # set hours for all days for i in range(1, 7+1): dstLines += ["%s_%s = %s\n" % (param, str(i), self._timekprUserConfig["%s_%s" % (param, str(i))] if pReuseValues else cons.TK_ALLOWED_HOURS)] # set up param param = "ALLOWED_WEEKDAYS" dstLines += ["%s\n" % "# this defines which days of the week a user can use computer (remove or add days to limit access)"] dstLines += ["%s = %s\n" % (param, self._timekprUserConfig[param] if pReuseValues else cons.TK_ALLOWED_WEEKDAYS)] # set up param param = "LIMITS_PER_WEEKDAYS" dstLines += ["%s\n" % "# this defines allowed time in seconds per week day a user can use the computer (number of values must match the number of values for option ALLOWED_WEEKDAYS)"] dstLines += ["%s = %s\n" % (param, self._timekprUserConfig[param] if pReuseValues else cons.TK_LIMITS_PER_WEEKDAYS)] # set up param param = "LIMIT_PER_WEEK" dstLines += ["%s\n" % "# this defines allowed time per week in seconds (in addition to other limits)"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserConfig[param]) if pReuseValues else str(cons.TK_LIMIT_PER_WEEK))] # set up param param = "LIMIT_PER_MONTH" dstLines += ["%s\n" % "# this defines allowed time per month in seconds (in addition to other limits)"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserConfig[param]) if pReuseValues else str(cons.TK_LIMIT_PER_MONTH))] # set up param param = "TRACK_INACTIVE" dstLines += ["%s\n" % "# this defines whether to account sessions which are inactive (locked screen, user switched away from desktop, etc.)"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserConfig[param]) if pReuseValues else str(cons.TK_TRACK_INACTIVE))] # set up param param = "HIDE_TRAY_ICON" dstLines += ["%s\n" % "# this defines whether to show icon and notifications for user"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserConfig[param]) if pReuseValues else str(cons.TK_HIDE_TRAY_ICON))] # set up param param = "LOCKOUT_TYPE" dstLines += ["%s\n" % "# this defines user restriction / lockout mode: lock - lock screen, suspend - put computer to sleep, suspendwake - put computer to sleep and wake it up,"] dstLines += ["%s\n" % "# terminate - terminate sessions, kill - kill sessions, shutdown - shutdown the computer"] dstLines += ["%s = %s\n" % (param, self._timekprUserConfig[param] if pReuseValues else cons.TK_CTRL_RES_T)] # set up param param = "WAKEUP_HOUR_INTERVAL" dstLines += ["%s\n" % "# this defines wakeup hour interval in format xn;yn where xn / yn are hours from 0 to 23, wakeup itself must be supported by BIOS / UEFI and enabled,"] dstLines += ["%s\n" % "# this is effective only when lockout type is suspendwake"] dstLines += ["%s = %s\n" % (param, self._timekprUserConfig[param] if pReuseValues else "0;23")] # PlayTime section = "%s.%s" % (self._userName, "PLAYTIME") # section dstLines += ["\n[%s]\n" % section] # set up param param = "PLAYTIME_ENABLED" dstLines += ["%s\n" % "# whether PlayTime is enabled for this user"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserConfig[param]) if pReuseValues else str(cons.TK_PLAYTIME_ENABLED))] # set up param param = "PLAYTIME_LIMIT_OVERRIDE_ENABLED" dstLines += ["%s\n" % "# whether PlayTime is enabled to override existing time accounting, i.e. time ticks only when PlayTime processes / activities are running,"] dstLines += ["%s\n" % "# in this case explicit PlayTime limits are ignored"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserConfig[param]) if pReuseValues else str(cons.TK_PLAYTIME_ENABLED))] # set up param param = "PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED" dstLines += ["%s\n" % "# whether PlayTime activities are allowed during unaccounted time intervals"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserConfig[param]) if pReuseValues else str(not cons.TK_PLAYTIME_ENABLED))] # set up param param = "PLAYTIME_ALLOWED_WEEKDAYS" dstLines += ["%s\n" % "# specify on which days PlayTime is enabled"] dstLines += ["%s = %s\n" % (param, self._timekprUserConfig[param] if pReuseValues else cons.TK_PLAYTIME_ALLOWED_WEEKDAYS)] # set up param param = "PLAYTIME_LIMITS_PER_WEEKDAYS" dstLines += ["%s\n" % "# how much PlayTime is allowed per allowed days (number of values must match the number of values for option PLAYTIME_ALLOWED_WEEKDAYS)"] dstLines += ["%s = %s\n" % (param, self._timekprUserConfig[param] if pReuseValues else cons.TK_PLAYTIME_LIMITS_PER_WEEKDAYS)] # set up param dstLines += ["%s\n" % "# this defines which activities / processes are monitored, pattern: PLAYTIME_ACTIVITY_NNN = PROCESS_MASK[DESCRIPTION],"] dstLines += ["%s\n" % "# where NNN is number left padded with 0 (keys must be unique and ordered), optionally it's possible to add user"] dstLines += ["%s\n" % "# friendly description in [] brackets. Process mask supports regexp, except symbols [], please be careful entering it!"] dstLines += ["%s\n" % "##PLAYTIME_ACTIVITIES## Do NOT remove or alter this line!"] # save all activity values (activities are varying list), do this only if values are reused for rPTAppIdx in range(0, len(self._timekprUserConfig["PLAYTIME_ACTIVITIES"]) if pReuseValues else 0): # write all to file param = "PLAYTIME_ACTIVITY_%s" % (str(rPTAppIdx+1).rjust(3, "0")) act = self._timekprUserConfig["PLAYTIME_ACTIVITIES"][rPTAppIdx][0] desc = self._timekprUserConfig["PLAYTIME_ACTIVITIES"][rPTAppIdx][1] dstLines += ["%s = %s\n" % (param, "%s[%s]" % (act, desc) if desc is not None else "%s" % (act))] # write config file with open(self._configFile, "w") as dstFile: # save the file dstFile.writelines(dstLines) # clear self._timekprUserConfig["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_INFO, "finish init default user configuration") def saveUserConfiguration(self): """Write new sections of the file""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start saving new user (%s) configuration" % (self._userName)) # init dict values = {} # allowed weekdays param = "ALLOWED_WEEKDAYS" values[param] = self._timekprUserConfig[param] # allowed hours for every week day for rDay in range(1, 7+1): param = "ALLOWED_HOURS_%s" % (str(rDay)) values[param] = self._timekprUserConfig[param] # limits per weekdays param = "LIMITS_PER_WEEKDAYS" values[param] = self._timekprUserConfig[param] # limits per week param = "LIMIT_PER_WEEK" values[param] = str(self._timekprUserConfig[param]) # limits per month param = "LIMIT_PER_MONTH" values[param] = str(self._timekprUserConfig[param]) # track inactive param = "TRACK_INACTIVE" values[param] = str(self._timekprUserConfig[param]) # try icon param = "HIDE_TRAY_ICON" values[param] = str(self._timekprUserConfig[param]) # restriction / lockout type param = "LOCKOUT_TYPE" values[param] = self._timekprUserConfig[param] # wakeup hour interval param = "WAKEUP_HOUR_INTERVAL" values[param] = self._timekprUserConfig[param] # PlayTime config # PlayTime enabled param = "PLAYTIME_ENABLED" values[param] = str(self._timekprUserConfig[param]) # PlayTime override enabled param = "PLAYTIME_LIMIT_OVERRIDE_ENABLED" values[param] = str(self._timekprUserConfig[param]) # PlayTime allowed during unaccounted intervals param = "PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED" values[param] = str(self._timekprUserConfig[param]) # PlayTime allowed weekdays param = "PLAYTIME_ALLOWED_WEEKDAYS" values[param] = self._timekprUserConfig[param] # PlayTime limits per weekdays param = "PLAYTIME_LIMITS_PER_WEEKDAYS" values[param] = str(self._timekprUserConfig[param]) # PlayTime activities param = "PLAYTIME_ACTIVITIES" values[param] = [] # save all activity values for rPTAppIdx in range(0, len(self._timekprUserConfig[param])): # write all to file subparam = "PLAYTIME_ACTIVITY_%s" % (str(rPTAppIdx + 1).rjust(3, "0")) act = self._timekprUserConfig["PLAYTIME_ACTIVITIES"][rPTAppIdx][0] desc = self._timekprUserConfig["PLAYTIME_ACTIVITIES"][rPTAppIdx][1] values[param].append("%s = %s[%s]" % (subparam, act, desc) if desc is not None else "%s = %s" % (subparam, act)) # edit client config file (using alternate method) _saveConfigFile(self._configFile, values) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish saving new user configuration") def logUserConfiguration(self): """Log user timekpr config file""" # log log.log(cons.TK_LOG_LEVEL_INFO, "user \"%s\" configuration:" % (self._userName)) try: # log param = "ALLOWED_HOURS" for i in range(1, 7+1): paramN = "%s_%i" % (param, i) log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (paramN, str(self._timekprUserConfig[paramN]))) # log param = "ALLOWED_WEEKDAYS" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "LIMITS_PER_WEEKDAYS" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "LIMIT_PER_WEEK" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "LIMIT_PER_MONTH" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "TRACK_INACTIVE" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "HIDE_TRAY_ICON" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "LOCKOUT_TYPE" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "WAKEUP_HOUR_INTERVAL" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "PLAYTIME_ENABLED" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "PLAYTIME_LIMIT_OVERRIDE_ENABLED" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "PLAYTIME_ALLOWED_WEEKDAYS" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log param = "PLAYTIME_LIMITS_PER_WEEKDAYS" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserConfig[param]))) # log activities log.log(cons.TK_LOG_LEVEL_INFO, " PT activities:") for rV in self._timekprUserConfig["PLAYTIME_ACTIVITIES"]: log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (rV[0], rV[1])) # fail except Exception: # log log.log(cons.TK_LOG_LEVEL_INFO, " configuration log failed") def getUserAllowedHours(self, pDay): """Get allowed hours""" # this is the dict for hour config allowedHours = {} # get allowed hours for all of the week days param = "ALLOWED_HOURS_%s" % (pDay) # minutes can be specified in brackets after hour if self._timekprUserConfig[param] != "": for rHour in self._timekprUserConfig[param].split(";"): # determine hour and minutes hour, sMin, eMin, uacc = findHourStartEndMinutes(rHour) # hour is correct if hour is not None: # get our dict done allowedHours[str(hour)] = {cons.TK_CTRL_SMIN: sMin, cons.TK_CTRL_EMIN: eMin, cons.TK_CTRL_UACC: uacc} # result return allowedHours def getUserAllowedWeekdays(self): """Get allowed week days""" # param param = "ALLOWED_WEEKDAYS" # result return [rVal.strip() for rVal in self._timekprUserConfig[param].split(";") if rVal != ""] def getUserLimitsPerWeekdays(self): """Get allowed limits per week day""" # param param = "LIMITS_PER_WEEKDAYS" # result return [int(rVal.strip()) for rVal in self._timekprUserConfig[param].split(";") if rVal != ""] def getUserWeekLimit(self): """Get limit per week""" # result return self._timekprUserConfig["LIMIT_PER_WEEK"] def getUserMonthLimit(self): """Get limit per month""" # result return self._timekprUserConfig["LIMIT_PER_MONTH"] def getUserTrackInactive(self): """Get whether to track inactive sessions""" # result return self._timekprUserConfig["TRACK_INACTIVE"] def getUserHideTrayIcon(self): """Get whether to hide icon and notifications""" # result return self._timekprUserConfig["HIDE_TRAY_ICON"] def getUserLockoutType(self): """Get user restriction / lockout type""" # result return self._timekprUserConfig["LOCKOUT_TYPE"] def getUserWakeupHourInterval(self): """Get user wakeup hour intervals""" # param param = "WAKEUP_HOUR_INTERVAL" # result return [rVal.strip() for rVal in self._timekprUserConfig[param].split(";") if rVal != ""] def getUserPlayTimeEnabled(self): """Return whether we have PlayTime enabled""" # param param = "PLAYTIME_ENABLED" # check whether user has this enabled in config return self._timekprUserConfig[param] def getUserPlayTimeOverrideEnabled(self): """Return whether we have PlayTime overrides the normal time accounting""" # param param = "PLAYTIME_LIMIT_OVERRIDE_ENABLED" # result return self._timekprUserConfig[param] def getUserPlayTimeUnaccountedIntervalsEnabled(self): """Return whether PlayTime activities are allowed during unaccounted intervals""" # param param = "PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED" # result return self._timekprUserConfig[param] def getUserPlayTimeAllowedWeekdays(self): """Get allowed week days for PlayTime""" # param param = "PLAYTIME_ALLOWED_WEEKDAYS" # result return [rVal.strip() for rVal in self._timekprUserConfig[param].split(";") if rVal != ""] def getUserPlayTimeLimitsPerWeekdays(self): """Get allowed limits per week day for PlayTime""" # param param = "PLAYTIME_LIMITS_PER_WEEKDAYS" # result return [int(rVal.strip()) for rVal in self._timekprUserConfig[param].split(";") if rVal != ""] def getUserPlayTimeActivities(self): """Return PlayTime process / process list""" # param param = "PLAYTIME_ACTIVITIES" # result return self._timekprUserConfig[param] def getUserConfigLastModified(self): """Get last file modification time for user""" # result return datetime.fromtimestamp(os.path.getmtime(self._configFile)) def setUserAllowedHours(self, pAllowedHours): """Set allowed hours""" # go through all days given for modifications for rDay, rHours in pAllowedHours.items(): # inital hours hours = [] # go through all hours (in correct order) for rHour in range(0, 23+1): # convert once hour = str(rHour) # do we have config for this hour if hour in rHours: # is this hour unaccounted unaccounted = "!" if rHours[hour][cons.TK_CTRL_UACC] else "" # do we have proper minuten minutes = ("[%i-%i]" % (rHours[hour][cons.TK_CTRL_SMIN], rHours[hour][cons.TK_CTRL_EMIN])) if (rHours[hour][cons.TK_CTRL_SMIN] > 0 or rHours[hour][cons.TK_CTRL_EMIN] < 60) else "" # build up this hour hours.append("%s%s%s" % (unaccounted, hour, minutes)) # add this hour to allowable list self._timekprUserConfig["ALLOWED_HOURS_%s" % (str(rDay))] = ";".join(hours) def setUserAllowedWeekdays(self, pAllowedWeekdays): """Set allowed week days""" # set up weekdays self._timekprUserConfig["ALLOWED_WEEKDAYS"] = ";".join(map(str, pAllowedWeekdays)) def setUserLimitsPerWeekdays(self, pLimits): """Set allowed limits per week day""" # set up limits for weekdays self._timekprUserConfig["LIMITS_PER_WEEKDAYS"] = ";".join(map(str, pLimits)) def setUserWeekLimit(self, pWeekLimitSecs): """Set limit per week""" # set self._timekprUserConfig["LIMIT_PER_WEEK"] = int(pWeekLimitSecs) def setUserMonthLimit(self, pMonthLimitSecs): """Set limit per month""" # set self._timekprUserConfig["LIMIT_PER_MONTH"] = int(pMonthLimitSecs) def setUserTrackInactive(self, pTrackInactive): """Set whether to track inactive sessions""" # set track inactive self._timekprUserConfig["TRACK_INACTIVE"] = pTrackInactive def setUserHideTrayIcon(self, pHideTrayIcon): """Set whether to hide icon and notifications""" # set self._timekprUserConfig["HIDE_TRAY_ICON"] = pHideTrayIcon def setUserLockoutType(self, pLockoutType): """Set user restriction / lockout type""" # set self._timekprUserConfig["LOCKOUT_TYPE"] = pLockoutType def setUserWakeupHourInterval(self, pWakeupHourInterval): """Set user wake up hours from / to""" # set self._timekprUserConfig["WAKEUP_HOUR_INTERVAL"] = ";".join(pWakeupHourInterval) def setUserPlayTimeEnabled(self, pPlayTimeEnabled): """Set PlayTime enabled for user""" # set self._timekprUserConfig["PLAYTIME_ENABLED"] = pPlayTimeEnabled def setUserPlayTimeOverrideEnabled(self, pPlayTimeOverrideEnabled): """Set PlayTime override to the normal time accounting""" # set self._timekprUserConfig["PLAYTIME_LIMIT_OVERRIDE_ENABLED"] = pPlayTimeOverrideEnabled def setUserPlayTimeUnaccountedIntervalsEnabled(self, pPlayTimeUnaccountedIntervalsEnabled): """Set whether PlayTime activities are allowed during unaccounted intervals""" # set self._timekprUserConfig["PLAYTIME_UNACCOUNTED_INTERVALS_ENABLED"] = pPlayTimeUnaccountedIntervalsEnabled def setUserPlayTimeAllowedWeekdays(self, pPlayTimeAllowedWeekdays): """Set allowed week days for PlayTime""" # set up weekdays self._timekprUserConfig["PLAYTIME_ALLOWED_WEEKDAYS"] = ";".join(map(str, pPlayTimeAllowedWeekdays)) def setUserPlayTimeLimitsPerWeekdays(self, pPlayTimeAllowedLimitsPerWeekdays): """Set allowed week day limits for PlayTime""" # set up weekdays self._timekprUserConfig["PLAYTIME_LIMITS_PER_WEEKDAYS"] = ";".join(map(str, pPlayTimeAllowedLimitsPerWeekdays)) def setUserPlayTimeAcitivityList(self, pPlayTimeActivityList): """Set PlayTime process / process list""" # def self._timekprUserConfig["PLAYTIME_ACTIVITIES"] = [] # loop through all for i in range(0, len(pPlayTimeActivityList)): # desc desc = None if pPlayTimeActivityList[i][1] == "" else pPlayTimeActivityList[i][1] # set this up self._timekprUserConfig["PLAYTIME_ACTIVITIES"].append([pPlayTimeActivityList[i][0], desc]) class timekprUserControl(object): """Class will provide time spent file management functionality""" def __init__(self, pDirectory, pUserName): """Initialize config""" log.log(cons.TK_LOG_LEVEL_INFO, "init user (%s) control" % (pUserName)) # initialize class variables self._configFile = os.path.join(pDirectory, "%s.time" % (pUserName)) self._userName = pUserName self._timekprUserControl = {} # config sections from file self._timekprUserControl["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_INFO, "finish init user control") def __del__(self): """De-initialize config""" log.log(cons.TK_LOG_LEVEL_INFO, "de-init user control") def loadUserControl(self, pValidateOnly=False): """Read user control config file""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start loading user control (%s)" % (self._userName)) # directory section section = self._userName # try to load config file result = _loadAndPrepareConfigFile(self._timekprUserControl, self._configFile) # value read result resultValue = True # if we still are fine (and not just checking) if not pValidateOnly or (pValidateOnly and result): # read config failed, we need to initialize if not result: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: could not parse the user control file (%s) properly, will recreate" % (self._configFile)) # init config self.initUserControl() # re-read the file result = _loadAndPrepareConfigFile(self._timekprUserControl, self._configFile) # read param = "TIME_SPENT_BALANCE" resultValue, self._timekprUserControl[param] = _readAndNormalizeValue(self._timekprUserControl, section, param, pDefaultValue=0, pCheckValue=cons.TK_LIMIT_PER_DAY, pOverallSuccess=resultValue) # read param = "TIME_SPENT_DAY" resultValue, self._timekprUserControl[param] = _readAndNormalizeValue(self._timekprUserControl, section, param, pDefaultValue=0, pCheckValue=cons.TK_LIMIT_PER_DAY, pOverallSuccess=resultValue) # read param = "TIME_SPENT_WEEK" resultValue, self._timekprUserControl[param] = _readAndNormalizeValue(self._timekprUserControl, section, param, pDefaultValue=0, pCheckValue=cons.TK_LIMIT_PER_WEEK, pOverallSuccess=resultValue) # read param = "TIME_SPENT_MONTH" resultValue, self._timekprUserControl[param] = _readAndNormalizeValue(self._timekprUserControl, section, param, pDefaultValue=0, pCheckValue=cons.TK_LIMIT_PER_MONTH, pOverallSuccess=resultValue) # read param = "LAST_CHECKED" resultValue, self._timekprUserControl[param] = _readAndNormalizeValue(self._timekprUserControl, section, param, pDefaultValue=datetime.now().replace(microsecond=0), pCheckValue=None, pOverallSuccess=resultValue) # user PlayTime config section section = "%s.%s" % (self._userName, "PLAYTIME") # read param = "PLAYTIME_SPENT_BALANCE" resultValue, self._timekprUserControl[param] = _readAndNormalizeValue(self._timekprUserControl, section, param, pDefaultValue=0, pCheckValue=cons.TK_LIMIT_PER_DAY, pOverallSuccess=resultValue) # read param = "PLAYTIME_SPENT_DAY" resultValue, self._timekprUserControl[param] = _readAndNormalizeValue(self._timekprUserControl, section, param, pDefaultValue=0, pCheckValue=cons.TK_LIMIT_PER_DAY, pOverallSuccess=resultValue) # if we could not read some values, save what we could + defaults if not resultValue: # logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: some values in user control file (%s) could not be read or new configuration option was introduced, valid values and defaults are used / saved instead" % (self._configFile)) # save what we could self.initUserControl(True) # clear self._timekprUserControl["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_DEBUG, "finish loading user control") # result return result def initUserControl(self, pReuseValues=False): """Write new sections of the file""" log.log(cons.TK_LOG_LEVEL_INFO, "start init user (%s) control" % (self._userName)) # build the file dstLines = [] # add new user section section = self._userName # section dstLines += ["[%s]\n" % section] dstLines += ["%s\n" % "#### NOTE: all number values are stored in seconds"] # set up param param = "TIME_SPENT_BALANCE" dstLines += ["%s\n" % "# total time balance spent for this day"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserControl[param]) if pReuseValues else "0")] # set up param param = "TIME_SPENT_DAY" dstLines += ["%s\n" % "# total time spent for this day"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserControl[param]) if pReuseValues else "0")] # set up param param = "TIME_SPENT_WEEK" dstLines += ["%s\n" % "# total spent for this week"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserControl[param]) if pReuseValues else "0")] # set up param param = "TIME_SPENT_MONTH" dstLines += ["%s\n" % "# total spent for this month"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserControl[param]) if pReuseValues else "0")] # set up param param = "LAST_CHECKED" dstLines += ["%s\n" % "# last update time of the file"] dstLines += ["%s = %s\n" % (param, self._timekprUserControl[param].strftime(cons.TK_DATETIME_FORMAT) if pReuseValues else datetime.now().replace(microsecond=0).strftime(cons.TK_DATETIME_FORMAT))] # user PlayTime config section section = "%s.%s" % (self._userName, "PLAYTIME") # section dstLines += ["\n[%s]\n" % section] param = "PLAYTIME_SPENT_BALANCE" dstLines += ["%s\n" % "# total PlayTime balance spent for this day"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserControl[param]) if pReuseValues else "0")] param = "PLAYTIME_SPENT_DAY" dstLines += ["%s\n" % "# total PlayTime spent for this day"] dstLines += ["%s = %s\n" % (param, str(self._timekprUserControl[param]) if pReuseValues else "0")] # write config file with open(self._configFile, "w") as dstFile: # save the file dstFile.writelines(dstLines) # clear self._timekprUserControl["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_INFO, "finish init user control") def saveControl(self): """Save configuration""" log.log(cons.TK_LOG_LEVEL_INFO, "start save user (%s) control" % (self._userName)) # init dict values = {} # spent day (including bonuses) param = "TIME_SPENT_BALANCE" values[param] = str(int(self._timekprUserControl[param])) # spent day param = "TIME_SPENT_DAY" values[param] = str(int(self._timekprUserControl[param])) # spent week param = "TIME_SPENT_WEEK" values[param] = str(int(self._timekprUserControl[param])) # spent month param = "TIME_SPENT_MONTH" values[param] = str(int(self._timekprUserControl[param])) # last checked param = "LAST_CHECKED" values[param] = self._timekprUserControl[param].strftime(cons.TK_DATETIME_FORMAT) # PlayTime balance param = "PLAYTIME_SPENT_BALANCE" values[param] = str(int(self._timekprUserControl[param])) # PlayTime spent day param = "PLAYTIME_SPENT_DAY" values[param] = str(int(self._timekprUserControl[param])) # edit control file (using alternate method) _saveConfigFile(self._configFile, values) log.log(cons.TK_LOG_LEVEL_INFO, "finish save user control") def logUserControl(self): """Log user control config file""" # log log.log(cons.TK_LOG_LEVEL_INFO, "user \"%s\" control:" % (self._userName)) try: # log param = "TIME_SPENT_BALANCE" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserControl[param]))) # log param = "TIME_SPENT_DAY" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserControl[param]))) # log param = "TIME_SPENT_WEEK" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserControl[param]))) # log param = "TIME_SPENT_MONTH" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserControl[param]))) # log param = "LAST_CHECKED" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserControl[param]))) # log param = "PLAYTIME_SPENT_BALANCE" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserControl[param]))) # log param = "PLAYTIME_SPENT_DAY" log.log(cons.TK_LOG_LEVEL_INFO, " %s=%s" % (param, str(self._timekprUserControl[param]))) # fail except Exception: # log log.log(cons.TK_LOG_LEVEL_INFO, " configuration log failed") def getUserDateComponentChanges(self, pCheckDate, pValidationDate=None): """Determine whether days / weeks / months changed since last change date in file or other date""" # date to validate against validationDate = pValidationDate.date() if pValidationDate is not None else self.getUserLastChecked().date() checkDate = pCheckDate.date() # ## validations ## # month changed monthChanged = (checkDate.year != validationDate.year or checkDate.month != validationDate.month) # week changed weekChanged = (checkDate.isocalendar()[1] != validationDate.isocalendar()[1] or (checkDate.isocalendar()[1] == validationDate.isocalendar()[1] and abs((checkDate - validationDate).days) > 7)) # day changed dayChanged = (checkDate != validationDate) # result (day / week / month) return dayChanged, weekChanged, monthChanged def getUserTimeSpentBalance(self): """Get time spent for day (including bonues)""" # result return self._timekprUserControl["TIME_SPENT_BALANCE"] def getUserTimeSpentDay(self): """Get time spent for day""" # result return self._timekprUserControl["TIME_SPENT_DAY"] def getUserTimeSpentWeek(self): """Get time spent for week""" # result return self._timekprUserControl["TIME_SPENT_WEEK"] def getUserTimeSpentMonth(self): """Get time spent for month""" # result return self._timekprUserControl["TIME_SPENT_MONTH"] def getUserLastChecked(self): """Get last check time for user""" # result return self._timekprUserControl["LAST_CHECKED"] def getUserPlayTimeSpentBalance(self): """Get PlayTime balance for day (including bonues)""" # result return self._timekprUserControl["PLAYTIME_SPENT_BALANCE"] def getUserPlayTimeSpentDay(self): """Get PlayTime spent for day (including bonues)""" # result return self._timekprUserControl["PLAYTIME_SPENT_DAY"] def getUserControlLastModified(self): """Get last file modification time for user""" # result return datetime.fromtimestamp(os.path.getmtime(self._configFile)) def setUserTimeSpentBalance(self, pTimeSpent): """Set time spent for day (including bonuses)""" # set self._timekprUserControl["TIME_SPENT_BALANCE"] = pTimeSpent def setUserTimeSpentDay(self, pTimeSpentDay): """Set time spent for day""" # set self._timekprUserControl["TIME_SPENT_DAY"] = pTimeSpentDay def setUserTimeSpentWeek(self, pTimeSpentWeek): """Set time spent for week""" # set self._timekprUserControl["TIME_SPENT_WEEK"] = pTimeSpentWeek def setUserTimeSpentMonth(self, pTimeSpentMonth): """Set time spent for month""" # set self._timekprUserControl["TIME_SPENT_MONTH"] = pTimeSpentMonth def setUserLastChecked(self, pEffectiveDatetime): """Set last check time for user""" # set self._timekprUserControl["LAST_CHECKED"] = pEffectiveDatetime def setUserPlayTimeSpentBalance(self, pTimeSpent): """Set PlayTime balance for day (including bonues)""" # set self._timekprUserControl["PLAYTIME_SPENT_BALANCE"] = pTimeSpent def setUserPlayTimeSpentDay(self, pTimeSpent): """Set PlayTime spent for day (including bonues)""" # set self._timekprUserControl["PLAYTIME_SPENT_DAY"] = pTimeSpent class timekprClientConfig(object): """Class will hold and provide config management for user""" def __init__(self): """Initialize config""" # config self._timekprClientConfig = {} # config sections from file self._timekprClientConfig["CONFIGLOADER"] = {} # get home self._userHome = os.path.expanduser("~") # set up log file name self._timekprClientConfig["TIMEKPR_LOGFILE_DIR"] = cons.TK_LOG_TEMP_DIR log.log(cons.TK_LOG_LEVEL_INFO, "start initializing client configuration manager") # in dev self._configDirPrefix = os.getcwd() if cons.TK_DEV_ACTIVE else "" # main config self._timekprClientConfig["TIMEKPR_MAIN_CONFIG_DIR"] = os.path.join(self._configDirPrefix, (cons.TK_MAIN_CONFIG_DIR_DEV if cons.TK_DEV_ACTIVE else cons.TK_MAIN_CONFIG_DIR)) self._configMainFile = os.path.join(self._timekprClientConfig["TIMEKPR_MAIN_CONFIG_DIR"], cons.TK_MAIN_CONFIG_FILE) # config self._configFile = os.path.join(self._userHome, ".config/timekpr", cons.TK_MAIN_CONFIG_FILE) log.log(cons.TK_LOG_LEVEL_INFO, "finish initializing client configuration manager") def __del__(self): """De-initialize config""" log.log(cons.TK_LOG_LEVEL_INFO, "de-initialize client configuration manager") def loadClientConfiguration(self): """Read main timekpr config file""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start loading client configuration") # get directories from main config if "TIMEKPR_SHARED_DIR" not in self._timekprClientConfig: # load main config to get directories self.loadMinimalClientMainConfig() # clear out cp, we don't need to store all condfigs in minimal case self._timekprClientConfig["CONFIGLOADER"] = {} # try to load config file result = _loadAndPrepareConfigFile(self._timekprClientConfig, self._configFile) # value read result resultValue = True # read config failed, we need to initialize if not result: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: could not parse the configuration file (%s) properly, will use default values" % (self._configFile)) # write correct config file self.initClientConfig() # re-read the file result = _loadAndPrepareConfigFile(self._timekprClientConfig, self._configFile) # config load time self._clientConfigModTime = self.getClientLastModified() # directory section section = "CONFIG" # read param = "LOG_LEVEL" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=cons.TK_USR_LOG_LEVEL_INFO, pCheckValue=None, pOverallSuccess=resultValue) # read param = "SHOW_LIMIT_NOTIFICATION" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=True, pCheckValue=None, pOverallSuccess=resultValue) # read param = "SHOW_ALL_NOTIFICATIONS" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=True, pCheckValue=None, pOverallSuccess=resultValue) # read param = "USE_SPEECH_NOTIFICATIONS" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=False, pCheckValue=None, pOverallSuccess=resultValue) # read param = "SHOW_SECONDS" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=False, pCheckValue=None, pOverallSuccess=resultValue) # read param = "NOTIFICATION_TIMEOUT" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=cons.TK_CL_NOTIF_TMO, pCheckValue=None, pOverallSuccess=resultValue) # read param = "NOTIFICATION_TIMEOUT_CRITICAL" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=cons.TK_CL_NOTIF_CRIT_TMO, pCheckValue=None, pOverallSuccess=resultValue) # read param = "USE_NOTIFICATION_SOUNDS" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=False, pCheckValue=None, pOverallSuccess=resultValue) # read param = "NOTIFICATION_LEVELS" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=cons.TK_NOTIFICATION_LEVELS, pCheckValue=None, pOverallSuccess=resultValue) self._timekprClientConfig[param] = _cleanupValue(self._timekprClientConfig[param]) # read param = "PLAYTIME_NOTIFICATION_LEVELS" resultValue, self._timekprClientConfig[param] = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=cons.TK_PT_NOTIFICATION_LEVELS, pCheckValue=None, pOverallSuccess=resultValue) self._timekprClientConfig[param] = _cleanupValue(self._timekprClientConfig[param]) # if we could not read some values, save what we could + defaults if not resultValue: # logging log.log(cons.TK_LOG_LEVEL_WARN, "WARNING: some values in client confguration file (%s) could not be read or new configuration option was introduced, valid values and defaults are used / saved instead" % (self._configFile)) # save what we could self.initClientConfig(True) # check whether sound is supported if cons.TK_CL_NOTIF_SND_TYPE == "sound-name": self._timekprClientConfig["USE_NOTIFICATION_SOUNDS_SUPPORTED"] = True else: self._timekprClientConfig["USE_NOTIFICATION_SOUNDS_SUPPORTED"] = (os.path.isfile(cons.TK_CL_NOTIF_SND_FILE_WARN) and os.path.isfile(cons.TK_CL_NOTIF_SND_FILE_CRITICAL)) # check whether speech is supported try: # try importing speech import timekpr.client.interface.speech.espeak as espeak # supported self._timekprClientConfig["USE_SPEECH_NOTIFICATIONS_SUPPORTED"] = espeak.isSupported() except: # NOT supported self._timekprClientConfig["USE_SPEECH_NOTIFICATIONS_SUPPORTED"] = False # clear self._timekprClientConfig["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_DEBUG, "finish loading client configuration") # result return True def loadMinimalClientMainConfig(self): """Load main configuration file to get shared file locations""" log.log(cons.TK_LOG_LEVEL_DEBUG, "start loading minimal main configuration") # defaults # directory section section = "DIRECTORIES" # read param = "TIMEKPR_SHARED_DIR" # try to load config file result = _loadAndPrepareConfigFile(self._timekprClientConfig, self._configMainFile, True) # if file cannot be read if not result: # default value value = cons.TK_SHARED_DIR else: # read file result, value = _readAndNormalizeValue(self._timekprClientConfig, section, param, pDefaultValue=cons.TK_SHARED_DIR, pCheckValue=None, pOverallSuccess=True) # problems loading default config if not result: # logging log.log(cons.TK_LOG_LEVEL_ERR, "ERROR: could not parse the configuration file (%s) properly, will use default values" % (self._configMainFile)) # finalize directory self._timekprClientConfig[param] = os.path.join(self._configDirPrefix, (cons.TK_SHARED_DIR_DEV if cons.TK_DEV_ACTIVE else value)) log.log(cons.TK_LOG_LEVEL_DEBUG, "finish loading minimal main configuration") # result return True def initClientConfig(self, pReuseValues=False): """Write new config""" log.log(cons.TK_LOG_LEVEL_INFO, "start init client configuration") # build the file dstLines = [] # add new user section section = "DOCUMENTATION" # section dstLines += ["[%s]\n" % section] dstLines += ["%s\n" % "# client application configuration file"] dstLines += ["%s\n" % "# NOTE: this file is not intended to be edited manually, however, if it is, please restart the application"] # add new user section section = "CONFIG" # section dstLines += ["\n[%s]\n" % section] # set up param param = "LOG_LEVEL" dstLines += ["%s\n" % "# user logging level (1 - normal, 2 - debug, 3 - extra debug)"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else str(cons.TK_USR_LOG_LEVEL_INFO))] # set up param param = "SHOW_LIMIT_NOTIFICATION" dstLines += ["%s\n" % "# whether to show limit change notification"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else "True")] # set up param param = "SHOW_ALL_NOTIFICATIONS" dstLines += ["%s\n" % "# whether to show all notifications or important ones only"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else "True")] # set up param param = "SHOW_SECONDS" dstLines += ["%s\n" % "# whether to show seconds in label (if DE supports it)"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else "True")] # set up param param = "USE_SPEECH_NOTIFICATIONS" dstLines += ["%s\n" % "# whether to use speech notifications"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else str(cons.TK_TRACK_INACTIVE))] # set up param param = "NOTIFICATION_TIMEOUT" dstLines += ["%s\n" % "# how long regular notifications should be displayed (in seconds)"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else str(cons.TK_CL_NOTIF_TMO))] # set up param param = "NOTIFICATION_TIMEOUT_CRITICAL" dstLines += ["%s\n" % "# how long critical notifications should be displayed (in seconds)"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else str(cons.TK_CL_NOTIF_CRIT_TMO))] # set up param param = "USE_NOTIFICATION_SOUNDS" dstLines += ["%s\n" % "# use notification sounds for notifications"] dstLines += ["%s = %s\n" % (param, str(self._timekprClientConfig[param]) if pReuseValues else str(cons.TK_TRACK_INACTIVE))] # set up param param = "NOTIFICATION_LEVELS" dstLines += ["%s\n" % "# user configured notification levels in form of level[priority];..."] dstLines += ["%s = %s\n" % (param, self._timekprClientConfig[param] if pReuseValues else cons.TK_NOTIFICATION_LEVELS)] # set up param param = "PLAYTIME_NOTIFICATION_LEVELS" dstLines += ["%s\n" % "# user configured PlayTime notification levels in form of level[priority];..."] dstLines += ["%s = %s\n" % (param, self._timekprClientConfig[param] if pReuseValues else cons.TK_PT_NOTIFICATION_LEVELS)] # directory name dirName = os.path.dirname(self._configFile) # check file if not os.path.isdir(dirName): # make it os.makedirs(dirName) # write config file with open(self._configFile, "w") as dstFile: # save the file dstFile.writelines(dstLines) # clear self._timekprClientConfig["CONFIGLOADER"] = {} log.log(cons.TK_LOG_LEVEL_INFO, "finish init client configuration") def saveClientConfig(self): """Save configuration (called from GUI)""" log.log(cons.TK_LOG_LEVEL_INFO, "start save client config") # init dict values = {} # log level param = "LOG_LEVEL" values[param] = str(self._timekprClientConfig[param]) # first limit notification param = "SHOW_LIMIT_NOTIFICATION" values[param] = str(self._timekprClientConfig[param]) # all notifications param = "SHOW_ALL_NOTIFICATIONS" values[param] = str(self._timekprClientConfig[param]) # speech notifications param = "USE_SPEECH_NOTIFICATIONS" values[param] = str(self._timekprClientConfig[param]) # show seconds param = "SHOW_SECONDS" values[param] = str(self._timekprClientConfig[param]) # timeout for notifications param = "NOTIFICATION_TIMEOUT" values[param] = str(self._timekprClientConfig[param]) # timeout for critical notifications param = "NOTIFICATION_TIMEOUT_CRITICAL" values[param] = str(self._timekprClientConfig[param]) # notification sounds param = "USE_NOTIFICATION_SOUNDS" values[param] = str(self._timekprClientConfig[param]) # notification levels param = "NOTIFICATION_LEVELS" values[param] = self._timekprClientConfig[param] # PlayTime notification levels param = "PLAYTIME_NOTIFICATION_LEVELS" values[param] = self._timekprClientConfig[param] # edit control file (using alternate method) _saveConfigFile(self._configFile, values) log.log(cons.TK_LOG_LEVEL_INFO, "finish save client config") def isClientConfigChanged(self): """Whether config has changed""" # defaults result = False clientLastModified = self.getClientLastModified() # yes, is it changed? if self._clientConfigModTime != clientLastModified: log.log(cons.TK_LOG_LEVEL_INFO, "client config changed, prev/now: %s / %s" % (self._clientConfigModTime.strftime(cons.TK_LOG_DATETIME_FORMAT), clientLastModified.strftime(cons.TK_LOG_DATETIME_FORMAT))) # changed self._clientConfigModTime = clientLastModified # load config self.loadClientConfiguration() # changed result = True # result return result def _parseNotificationLevels(self, pKey): """Parse notification levels, if can not be parsed, return None""" # def result = [] # work on levels for rLvl in self._timekprClientConfig[pKey].split(";"): # no need for non-empty values if rLvl != "": # try to find time left and level secs, prio = splitConfigValueNameParam(rLvl) # if identified correctly (e.g. we have secs and level too) if secs is not None and prio is not None: # this is just to verify that config is OK if prio in cons.TK_PRIO_LVL_MAP: # add to list result.append([int(secs), prio]) # result return result def _formatClientNotificationLevels(self, pNotificationLevels): """Get formatted notification levels""" # def result = "" # loop through settings for rPrio in pNotificationLevels: # levels should be sorted from higher limit to lower result = "%s%s%s" % (result, ("" if result == "" else ";"), "%s[%s]" % (str(rPrio[0]), str(rPrio[1]))) # result return result def getIsNotificationSoundSupported(self): """Whether notification sounds are supported""" # result return self._timekprClientConfig["USE_NOTIFICATION_SOUNDS_SUPPORTED"] def getIsNotificationSpeechSupported(self): """Whether speech notifications are supported""" # result return self._timekprClientConfig["USE_SPEECH_NOTIFICATIONS_SUPPORTED"] def getClientShowLimitNotifications(self): """Get whether to show frst notification""" # result return self._timekprClientConfig["SHOW_LIMIT_NOTIFICATION"] def getClientShowAllNotifications(self): """Get whether to show all notifications""" # result return self._timekprClientConfig["SHOW_ALL_NOTIFICATIONS"] def getClientUseSpeechNotifications(self): """Get whether to use speech""" # result return self._timekprClientConfig["USE_SPEECH_NOTIFICATIONS"] def getClientShowSeconds(self): """Get whether to show seconds""" # result return self._timekprClientConfig["SHOW_SECONDS"] def getClientNotificationTimeout(self): """Get timeout for regular notifications""" # result return self._timekprClientConfig["NOTIFICATION_TIMEOUT"] def getClientNotificationTimeoutCritical(self): """Get timeout for critical notifications""" # result return self._timekprClientConfig["NOTIFICATION_TIMEOUT_CRITICAL"] def getClientUseNotificationSound(self): """Get whether to show use sound notifications""" # result return self._timekprClientConfig["USE_NOTIFICATION_SOUNDS"] def getClientNotificationLevels(self): """Get notification levels""" # result return self._parseNotificationLevels("NOTIFICATION_LEVELS") def getClientPlayTimeNotificationLevels(self): """Get PlayTime notification levels""" # result return self._parseNotificationLevels("PLAYTIME_NOTIFICATION_LEVELS") def getClientLogLevel(self): """Get client log level""" # result return self._timekprClientConfig["LOG_LEVEL"] def getTimekprSharedDir(self): """Get shared dir""" # result return self._timekprClientConfig["TIMEKPR_SHARED_DIR"] def getClientLogfileDir(self): """Get shared dir""" # result return self._timekprClientConfig["TIMEKPR_LOGFILE_DIR"] def getClientLastModified(self): """Get last file modification time for user""" # result return datetime.fromtimestamp(os.path.getmtime(self._configFile)) def setClientLogLevel(self, pClientLogLevel): """Set client log level""" # set self._timekprClientConfig["LOG_LEVEL"] = pClientLogLevel def setIsNotificationSoundSupported(self, pIsSupported): """Whether notification sounds are supported""" # set self._timekprClientConfig["USE_NOTIFICATION_SOUNDS_SUPPORTED"] = pIsSupported def setClientShowLimitNotifications(self, pClientShowLimitNotification): """Set whether to show frst notification""" # set self._timekprClientConfig["SHOW_LIMIT_NOTIFICATION"] = pClientShowLimitNotification def setClientShowAllNotifications(self, pClientShowAllNotifications): """Set whether to show all notifications""" # set self._timekprClientConfig["SHOW_ALL_NOTIFICATIONS"] = pClientShowAllNotifications def setClientUseSpeechNotifications(self, pClientUseSpeechNotifications): """Set whether to use speech""" # set self._timekprClientConfig["USE_SPEECH_NOTIFICATIONS"] = pClientUseSpeechNotifications def setClientShowSeconds(self, pClientShowSeconds): """Set whether to show seconds""" # set self._timekprClientConfig["SHOW_SECONDS"] = pClientShowSeconds def setClientNotificationTimeout(self, pClientNotificationTimeout): """Set timeout for regular notifications""" # set self._timekprClientConfig["NOTIFICATION_TIMEOUT"] = pClientNotificationTimeout def setClientNotificationTimeoutCritical(self, pClientNotificationTimeoutCritical): """Set timeout for critical notifications""" # set self._timekprClientConfig["NOTIFICATION_TIMEOUT_CRITICAL"] = pClientNotificationTimeoutCritical def setClientUseNotificationSound(self, pClientUseNotificationSound): """Set whether to use sound notifications""" # set self._timekprClientConfig["USE_NOTIFICATION_SOUNDS"] = pClientUseNotificationSound def setClientNotificationLevels(self, pNotificationLevels): """Set whether to use sound notifications""" # set self._timekprClientConfig["NOTIFICATION_LEVELS"] = self._formatClientNotificationLevels(pNotificationLevels) def setClientPlayTimeNotificationLevels(self, pPlayTimeNotificationLevels): """Set whether to use sound notifications""" # set self._timekprClientConfig["PLAYTIME_NOTIFICATION_LEVELS"] = self._formatClientNotificationLevels(pPlayTimeNotificationLevels) timekpr-next/common/constants/000775 001750 001750 00000000000 15122253261 020500 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/common/constants/__init__.py000664 001750 001750 00000000000 13476006650 022607 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/common/constants/constants.py000644 001750 001750 00000045537 15122253261 023102 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # timekpr imports from timekpr.common.constants import messages as msg # imports import dbus import locale import gettext from datetime import datetime # ## constants ## # version (in case config is corrupt or smth like that) TK_VERSION = "0.5.9" TK_DEV_ACTIVE = False # change this accordingly when running in DEV or PROD TK_DEV_BUS = "ses" # this sets up which bus to use for development (sys or ses) TK_DEV_SUPPORT_PAGE = "https://tinyurl.com/yc9x85v2" # formats TK_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" TK_LOG_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S.%f" TK_DATETIME_START = datetime(2018, 1, 1) # loggers TK_LOG_FACILITY_TKL = 0 # timekpr standard logging (files, buffering) TK_LOG_FACILITY_PYL = 1 # python logger (files, buffering) TK_LOG_FACILITY_SDL = 2 # python + journald logger (journald) # effective / desired logging facility TK_LOG_FACILITY_EFF = 2 # timekpr log levels TK_USR_LOG_LEVEL_NONE = 0 TK_USR_LOG_LEVEL_INFO = 1 TK_USR_LOG_LEVEL_DEBUG = 2 TK_USR_LOG_LEVEL_EXTRA_DEBUG = 3 # logging levels TK_LOG_LEVEL_NONE = 0 # corresponds to logging.NOTSET TK_LOG_LEVEL_EXTRA_DEBUG = 5 # corresponds to logging.DEBUG - 5 TK_LOG_LEVEL_DEBUG = 10 # corresponds to logging.DEBUG TK_LOG_LEVEL_INFO = 20 # corresponds to logging.INFO TK_LOG_LEVEL_WARN = 30 # corresponds to logging.WARNING TK_LOG_LEVEL_ERR = 40 # corresponds to logging.ERROR TK_LOG_LEVEL_CRIT = 50 # corresponds to logging.CRITICAL # logging properties TK_LOG_L = "lvl" TK_LOG_D = "dir" TK_LOG_W = "who" TK_LOG_U = "user" TK_LOG_TEMP_DIR = "/tmp" TK_LOG_PID_DIRS = [ "$XDG_RUNTIME_DIR", "/var/run", "/run", "/tmp" ] TK_LOG_PID_EXT = "pid" # logging clients TK_LOG_OWNER_SRV = 0 TK_LOG_OWNER_CLIENT = 1 TK_LOG_OWNER_ADMIN = 2 TK_LOG_OWNER_ADMIN_SU = 3 # default event count for log file flush TK_LOG_AUTO_FLUSH_EVT_CNT = 42 # client config and default values TK_CL_NOTIF_MAX = 60 TK_CL_NOTIF_TMO = 3 TK_CL_NOTIF_CRIT_TMO = 10 TK_CL_NOTIF_SND_TYPE="sound-name" # can be sound-name or sound-file TK_CL_NOTIF_SND_FILE_WARN = "/usr/share/sounds/freedesktop/stereo/dialog-information.oga" TK_CL_NOTIF_SND_FILE_CRITICAL = "/usr/share/sounds/freedesktop/stereo/dialog-error.oga" TK_CL_NOTIF_SND_NAME_WARNING = "bell-window-system" TK_CL_NOTIF_SND_NAME_IMPORTANT = "dialog-warning" TK_CL_INF_FULL = "F" TK_CL_INF_SAVED = "S" TK_CL_INF_RT = "R" # ## files and locations ## # users and login configuration TK_USERS_FILE = "/etc/passwd" TK_USER_LIMITS_FILE = [ "/etc/login.defs", "/usr/etc/login.defs" ] # backup extension TK_BAK_EXT = ".prev" # log files TK_LOG_USER = "" TK_LOG_FILE = "timekpr.log" TK_LOG_FILE_CLIENT = "timekprc..log" TK_LOG_FILE_ADMIN = "timekpra..log" TK_LOG_FILE_ADMIN_SU = "timekpra.su.log" # main config file TK_MAIN_CONFIG_DIR = "/etc/timekpr" # runtime directory for timekpr user configuration files TK_CONFIG_DIR = "/var/lib/timekpr/config" # runtime directory for timekpr time control files TK_WORK_DIR = "/var/lib/timekpr/work" # directory for shared files (images, gui definitions, etc.) TK_SHARED_DIR = "/usr/share/timekpr" # directory for log files TK_LOGFILE_DIR = "/var/log" # localization TK_LOCALIZATION_DIR = "/usr/share/locale" # ## development ## # main config file TK_MAIN_CONFIG_DIR_DEV = "../resource/server" # runtime directory for timekpr user configuration files TK_CONFIG_DIR_DEV = "../../runtime.tmp" # runtime directory for timekpr time control files TK_WORK_DIR_DEV = "../../runtime.tmp" # directory for shared files (images, gui definitions, etc.) TK_SHARED_DIR_DEV = "../resource" # directory for log files TK_LOGFILE_DIR_DEV = "../../runtime.tmp" # localization TK_LOCALIZATION_DIR_DEV = "../resource/locale" # retry cnt for various actions TK_MAX_RETRIES = 5 # max symbols to search for pattern in cmdline for PlayTime TK_MAX_CMD_SRCH = 512 # ## dbus ## # common TK_DBUS_PROPERTIES_INTERFACE = "org.freedesktop.DBus.Properties" # login1 TK_DBUS_L1_OBJECT = "org.freedesktop.login1" TK_DBUS_L1_PATH = "/org/freedesktop/login1" TK_DBUS_L1_MANAGER_INTERFACE = "org.freedesktop.login1.Manager" # ck TK_DBUS_CK_OBJECT = "org.freedesktop.ConsoleKit" TK_DBUS_CK_PATH = "/org/freedesktop/ConsoleKit" TK_DBUS_CK_MANAGER_INTERFACE = "org.freedesktop.ConsoleKit.Manager" # seat / user / session / screensaver TK_DBUS_SEAT_OBJECT = "org.freedesktop.login1.Seat" TK_DBUS_USER_OBJECT = "org.freedesktop.login1.User" TK_DBUS_SESSION_OBJECT = "org.freedesktop.login1.Session" # path / objects / interfaces TK_DBUS_BUS_NAME = "com.timekpr.server" TK_DBUS_SERVER_PATH = "/com/timekpr/server" TK_DBUS_ADMIN_INTERFACE = "com.timekpr.server.admin" TK_DBUS_USER_NOTIF_PATH_PREFIX = "/com/timekpr/server/user/" TK_DBUS_USER_NOTIF_INTERFACE = "com.timekpr.server.user.notifications" TK_DBUS_USER_LIMITS_INTERFACE = "com.timekpr.server.user.limits" TK_DBUS_USER_SESSION_ATTRIBUTE_INTERFACE = "com.timekpr.server.user.sessionattributes" TK_DBUS_USER_ADMIN_INTERFACE = "com.timekpr.server.user.admin" # actual user session validation and control TK_CTRL_SCR_N = "scrs" TK_CTRL_SCR_K = "scrs:key" TK_CTRL_SCR_R = "scrs:retr" # WORKAROUNDS section for use in Gnome and similar (almost everyone makes their own screensaver dbus interface these days, KDE (of the biggest players) is not) TK_SCR_XDGCD_OVERRIDE = [ ["unity", "gnome"], ["kde", "freedesktop"]] # DBUS performance measurement TK_DBUS_ANSWER_TIME = 3 # user and their restriction constants TK_CTRL_UID = "UID" # user id TK_CTRL_UNAME = "UNAME" # user name TK_CTRL_UPATH = "UPATH" # user path on dbus TK_CTRL_FCNTD = "FCNTD" # final countdown TK_CTRL_RESTY = "RESTY" # restricton type: lock, suspend, suspendwake, terminate, kill, shutdown TK_CTRL_RTDEL = "RTDEL" # retry delay before next attempt to enforce restrictions TK_CTRL_RTDEA = "RTDEA" # retry delay (additional delay for lock in case of suspend) TK_CTRL_USACT = "USACT" # whether user is active TK_CTRL_USLCK = "USLCK" # whether user screen is locked TK_CTRL_USWKU = "USWKU" # wake up time for computer if one is specified TK_CTRL_LCDEL = 1 # lock cycle delay (how many ticks happen before repetitive lock) TK_CTRL_SCDEL = 20 # suspend cycle delay (how many ticks happen before repetitive suspend) # restriction / lockout types TK_CTRL_RES_L = "lock" TK_CTRL_RES_S = "suspend" TK_CTRL_RES_W = "suspendwake" TK_CTRL_RES_T = "terminate" TK_CTRL_RES_K = "kill" TK_CTRL_RES_D = "shutdown" # wake up RTC file TK_CTRL_WKUPF = "/sys/class/rtc/rtc0/wakealarm" # session properties TK_CTRL_DBUS_SESS_OBJ = "SESSION_OBJECT" TK_CTRL_DBUS_SESS_IF = "SESSION_INTERFACE" TK_CTRL_DBUS_SESS_PROP_IF = "SESSION_PROPERTIES_INTERFACE" TK_CTRL_DBUS_SESS_PROP = "SESSION_STATIC_PROPERTIES" # limit configuration TK_CTRL_NDAY = "NEXTDAY" # next day idx TK_CTRL_PDAY = "PREVDAY" # previous day idx TK_CTRL_LIMITD = "LIMITD" # limit idx / today TK_CTRL_LEFTD = "LEFTD" # time left today idx TK_CTRL_LEFT = "LEFT" # time left idx (continously) TK_CTRL_LEFTW = "LEFTW" # time left for week TK_CTRL_LEFTM = "LEFTM" # time left for month TK_CTRL_LCHECK = "LCHK" # last checked idx TK_CTRL_LSAVE = "LSAVE" # last saved idx TK_CTRL_LMOD = "LMOD" # file modification idx (control) TK_CTRL_LCMOD = "LMCOD" # file modification idx (config) TK_CTRL_LIMITW = "LIMITW" # left per week idx TK_CTRL_LIMITM = "LIMITM" # left per month idx TK_CTRL_ACT = "ACTIVE" # is hour enabled TK_CTRL_UACC = "UACC" # is hour unaccounted TK_CTRL_SLEEP = "SLEEP" # time spent in "inactive" TK_CTRL_SPENT = "SPENT" # time spent in this session TK_CTRL_SPENTBD = "SPENTBD" # time balance spent in this day TK_CTRL_SPENTH = "SPENTH" # time spent in this hour TK_CTRL_SPENTD = "SPENTD" # time spent in this day TK_CTRL_SPENTW = "SPENTW" # time spent for week TK_CTRL_SPENTM = "SPENTM" # time spent for month TK_CTRL_SMIN = "STARTMIN" # start minute in this hour TK_CTRL_EMIN = "ENDMIN" # end minute in this hour TK_CTRL_INT = "INTERVALS" # intervals of time available to user TK_CTRL_TRACK = "TRACKI" # whether to track inactive sessions TK_CTRL_HIDEI = "HIDEI" # whether to hide timekpr icon TK_CTRL_TNL = "TNL" # time not limited TK_CTRL_PTTLE = "PTTLE" # PlayTime enabled TK_CTRL_PTCNT = "PTCNT" # PlayTime counters TK_CTRL_PTSPD = "PTSPD" # time spent for PlayTime TK_CTRL_PTLPD = "PTLPD" # time left for PlayTime TK_CTRL_PTTLO = "PTTLO" # PlayTime limit override TK_CTRL_PTAUH = "PTAUH" # PlayTime allowed during unaccounted intervals TK_CTRL_PTLMT = "PTLMT" # time limits for each day for PlayTime TK_CTRL_PTLST = "PTLST" # process list for PlayTime TK_CTRL_PTLSTC = "PTLSTC" # process list count for PlayTime # notificaton limits TK_NOTIF_LEFT = "LEFT" TK_NOTIF_INTERVAL = "INTERVAL" TK_NOTIF_URGENCY = "URGENCY" # notification idx config TK_ICON_NOTIF = "NOTIF-ICON" TK_ICON_STAT = "STATUS-ICON" TK_DBUS_PRIO = "DBUS-PRIO" # session types (and whether they are subject to termination) # "unspecified" (for cron PAM sessions and suchalike), "tty" (for text logins) or "x11"/"mir"/"wayland" (for graphical logins). # real TK_SESSION_TYPES_CTRL = "x11;wayland;mir" TK_SESSION_TYPES_EXCL = "tty;unspecified" # exclude users (test user for timekpr and all known login managers) TK_USERS_TEST = "testtimekpr" TK_USERS_LOGIN_MANAGERS = "gdm;gdm3;kdm;lightdm;mdm;lxdm;xdm;sddm;cdm" TK_USERS_EXCL = "%s;%s" % (TK_USERS_TEST, TK_USERS_LOGIN_MANAGERS) # ## user defaults ## # default value for allowed hours TK_ALLOWED_HOURS = "0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23" # default value for allowed week days TK_ALLOWED_WEEKDAYS = "1;2;3;4;5;6;7" # default value for limit per hour TK_LIMIT_PER_MINUTE = 60 # default value for limit per hour TK_LIMIT_PER_HOUR = 3600 # default value for limit per day TK_LIMIT_PER_DAY = 86400 # default value for limit per week TK_LIMIT_PER_WEEK = TK_LIMIT_PER_DAY*7 # default value for limit per month TK_LIMIT_PER_MONTH = TK_LIMIT_PER_DAY*31 # default value for limit per every weekday TK_LIMITS_PER_WEEKDAYS = "%s;%s;%s;%s;%s;%s;%s" % (TK_LIMIT_PER_DAY, TK_LIMIT_PER_DAY, TK_LIMIT_PER_DAY, TK_LIMIT_PER_DAY, TK_LIMIT_PER_DAY, TK_LIMIT_PER_DAY, TK_LIMIT_PER_DAY) # default value for nitification levels TK_NOTIFICATION_LEVELS = "3600[3];1800[2];600[1];300[0]" TK_PT_NOTIFICATION_LEVELS = "180[1]" # ## user PlayTime defaults ## # enabled TK_PLAYTIME_ENABLED = False # default value for allowed week days TK_PLAYTIME_ALLOWED_WEEKDAYS = "1;2;3;4;5;6;7" # how much PlayTime is allowed per allowed days TK_PLAYTIME_LIMITS_PER_WEEKDAYS = "0;0;0;0;0;0;0" # ## default values for control ## # time control # in-memory poll time TK_POLLTIME = 3 # flush interval TK_SAVE_INTERVAL = 30 # time left for putting user on kill list TK_TERMINATION_TIME = 15 # time left for final warning time TK_FINAL_COUNTDOWN_TIME = 10 # time left for final warning time TK_FINAL_NOTIFICATION_TIME = 60 # default value for tracking inactive sessions TK_TRACK_INACTIVE = False # default value for tracking inactive sessions TK_HIDE_TRAY_ICON = False # ## files ## # config TK_MAIN_CONFIG_FILE = "timekpr.conf" TK_USER_CONFIG_FILE = "timekpr.%s.conf" TK_UNAME_SRCH_LN_LMT = 10 # this defines line count for verifying username in first n lines # ## timekpr notification config ## # priorites TK_PRIO_LOW = "low" TK_PRIO_NORMAL = "normal" TK_PRIO_WARNING = "warning" TK_PRIO_IMPORTANT = "important" TK_PRIO_CRITICAL = "critical" TK_PRIO_IMPORTANT_INFO = "important_info" TK_PRIO_UACC = "unaccounted" # notification levels mapping from / to codes TK_PRIO_LVL_MAP = {"4": TK_PRIO_UACC, "3": TK_PRIO_LOW, "2": TK_PRIO_WARNING, "1": TK_PRIO_IMPORTANT, "0": TK_PRIO_CRITICAL, TK_PRIO_UACC: "4", TK_PRIO_LOW: "3", TK_PRIO_WARNING: "2", TK_PRIO_IMPORTANT: "1", TK_PRIO_CRITICAL: "0"} # config TK_PRIO_CONF = {} TK_PRIO_CONF["logo"] = {TK_ICON_STAT: "timekpr-logo.svg", TK_ICON_NOTIF: "dialog-information", TK_DBUS_PRIO: dbus.Byte(0, variant_level=1)} TK_PRIO_CONF["client-logo"] = {TK_ICON_STAT: "timekpr-client-logo.svg", TK_ICON_NOTIF: "dialog-information", TK_DBUS_PRIO: dbus.Byte(0, variant_level=1)} TK_PRIO_CONF["unlimited"] = {TK_ICON_STAT: "timekpr-padlock-unlimited-green.svg", TK_ICON_NOTIF: "dialog-information", TK_DBUS_PRIO: dbus.Byte(0, variant_level=1)} TK_PRIO_CONF[TK_PRIO_LOW] = {TK_ICON_STAT: "timekpr-padlock-limited-green.svg", TK_ICON_NOTIF: "dialog-information", TK_DBUS_PRIO: dbus.Byte(0, variant_level=1)} TK_PRIO_CONF[TK_PRIO_NORMAL] = {TK_ICON_STAT: "timekpr-padlock-limited-green.svg", TK_ICON_NOTIF: "dialog-information", TK_DBUS_PRIO: dbus.Byte(1, variant_level=1)} TK_PRIO_CONF[TK_PRIO_WARNING] = {TK_ICON_STAT: "timekpr-padlock-limited-yellow.svg", TK_ICON_NOTIF: "dialog-warning", TK_DBUS_PRIO: dbus.Byte(1, variant_level=1)} TK_PRIO_CONF[TK_PRIO_IMPORTANT] = {TK_ICON_STAT: "timekpr-padlock-limited-red.svg", TK_ICON_NOTIF: "dialog-warning", TK_DBUS_PRIO: dbus.Byte(1, variant_level=1)} TK_PRIO_CONF[TK_PRIO_CRITICAL] = {TK_ICON_STAT: "timekpr-padlock-limited-red.svg", TK_ICON_NOTIF: "dialog-error", TK_DBUS_PRIO: dbus.Byte(2, variant_level=1)} TK_PRIO_CONF[TK_PRIO_IMPORTANT_INFO] = {TK_ICON_STAT: "timekpr-padlock-limited-yellow.svg", TK_ICON_NOTIF: "dialog-information", TK_DBUS_PRIO: dbus.Byte(1, variant_level=1)} TK_PRIO_CONF[TK_PRIO_UACC] = {TK_ICON_STAT: "timekpr-padlock-limited-uacc.svg", TK_ICON_NOTIF: "dialog-warning", TK_DBUS_PRIO: dbus.Byte(1, variant_level=1)} # ## timekpr notification config ## # init python gettext gettext.bindtextdomain("timekpr", TK_LOCALIZATION_DIR if not TK_DEV_ACTIVE else TK_LOCALIZATION_DIR_DEV) gettext.textdomain("timekpr") # init actual libc gettext locale.bindtextdomain("timekpr", TK_LOCALIZATION_DIR if not TK_DEV_ACTIVE else TK_LOCALIZATION_DIR_DEV) locale.textdomain("timekpr") # define admin commands (NOT IMPLEMENTED) TK_ADMIN_COMMANDS = { # "--setloglevel" : "" # ,"--setpolltime" : "" # ,"--setsavetime" : "" # ,"--settrackinactive" : "" # ,"--setterminationtime" : "" # ,"--setfinalwarningtime" : "" # ,"--setsessiontypes" : "" # ,"--setexcludedsessiontypes" : "" # ,"--setexcludedusers" : "" } # define user admin commands TK_USER_ADMIN_COMMANDS = { "--help" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_HELP"), "timekpra --help"), "--getuserlist" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_USERLIST"), "timekpra --getuserlist"), "--getuserinfo" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_USERCONFIG"), "timekpra --getuserinfo 'testuser'\n timekpra --getuserinfo 'testuser' -h"), "--getuserinfort" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_USERCONFIGRT"), "timekpra --getuserinfort 'testuser'\n timekpra --getuserinfort 'testuser' -h"), "--setalloweddays" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETALLOWEDDAYS"), "timekpra --setalloweddays 'testuser' '1;2;3;4;5'"), "--setallowedhours" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETALLOWEDHOURS"), "timekpra --setallowedhours 'testuser' 'ALL' '7;8;9;10;11[00-30];!14;!15;17;18;19;20[00-45]'"), "--settimelimits" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETTIMELIMITS"), "timekpra --settimelimits 'testuser' '7200;7200;7200;7200;10800'\n timekpra --settimelimits 'testuser' '2h;2h;2h;2h;3h'"), "--settimelimitweek" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETTIMELIMITWK"), "timekpra --settimelimitweek 'testuser' '50000'\n timekpra --settimelimitweek 'testuser' '13h53m20s'"), "--settimelimitmonth" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETTIMELIMITMON"), "timekpra --settimelimitmonth 'testuser' '200000'\n timekpra --settimelimitmonth 'testuser' '2d7h33m20s'"), "--settrackinactive" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETTRACKINACTIVE"), "timekpra --settrackinactive 'testuser' 'false'"), "--sethidetrayicon" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETHIDETRAYICON"), "timekpra --sethidetrayicon 'testuser' 'false'"), "--setlockouttype" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETLOCKOUTTYPE"), "timekpra --setlockouttype 'testuser' 'terminate'\n timekpra --setlockouttype 'testuser' 'suspendwake;7;18'"), "--settimeleft" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETTIMELEFT"), "timekpra --settimeleft 'testuser' '+' '3600'\n timekpra --settimeleft 'testuser' '+' '1h'"), "--setplaytimeenabled" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEENABLED"), "timekpra --setplaytimeenabled 'testuser' 'false'"), "--setplaytimelimitoverride" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETPLAYTIMELIMITOVERRIDE"), "timekpra --setplaytimelimitoverride 'testuser' 'false'"), "--setplaytimeunaccountedintervalsflag" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEUNACCOUNTEDINTARVALSFLAG"), "timekpra --setplaytimeunaccountedintervalsflag 'testuser' 'false'"), "--setplaytimealloweddays" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEALLOWEDDAYS"), "timekpra --setplaytimealloweddays 'testuser' '1;2;3;4;5'"), "--setplaytimelimits" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETPLAYTIMELIMITS"), "timekpra --setplaytimelimits 'testuser' '1800;1800;1800;1800;3600'\n timekpra --setplaytimelimits 'testuser' '30m;30m;30m;30m;1h'"), "--setplaytimeactivities" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEACTIVITIES"), "timekpra --setplaytimeactivities 'testuser' 'DOOMEternalx64vk.exe[Doom Eternal];csgo_linux[CS: GO];firefox[Firefox browser]'"), "--setplaytimeleft" : "%s:\n %s" % (msg.getTranslation("TK_MSG_USER_ADMIN_CMD_SETPLAYTIMELEFT"), "timekpra --setplaytimeleft 'testuser' '+' '3600'\n timekpra --setplaytimeleft 'testuser' '+' '1h'") } def getNotificationPrioriy(pPriority): """Get the proper notification level""" # if we have it, just return it, else fallback to logo if pPriority in TK_PRIO_CONF: result = pPriority else: result = "logo" # return return result # this defines messages for use in notifications TK_MSG_CODE_TIMEUNLIMITED = "TIME_UNLIMITED" TK_MSG_CODE_TIMELEFT = "TIME_LEFT" TK_MSG_CODE_TIMECRITICAL = "TIME_CRITICAL" TK_MSG_CODE_TIMELEFTCHANGED = "TIME_LIMIT_CHANGED" TK_MSG_CODE_TIMECONFIGCHANGED = "TIME_CONFIG_CHANGED" TK_MSG_CODE_REMOTE_COMMUNICATION_ERROR = "TIMEKPR_REMOTE_COMMUNICATION_ERROR" TK_MSG_CODE_REMOTE_INVOCATION_ERROR = "TIMEKPR_REMOTE_INVOCATION_ERROR" TK_MSG_CODE_ICON_INIT_ERROR = "TIMEKPR_ICON_INIT_ERROR" TK_MSG_CODE_FEATURE_SCR_NOT_AVAILABLE_ERROR = "TIMEKPR_SCR_FEATURE_NOT_AVAILABLE_ERROR" timekpr-next/common/constants/messages.py000644 001750 001750 00000071446 15122253204 022670 0ustar00bezvfedubezvfedu000000 000000 """ Created on Mar 19, 2019 @author: mjasnik """ # imports from gettext import ngettext as _translatePlural from gettext import gettext as _translateSingle def _(pMsgS): """Make automated tools like poedit to pick up translations, which will actually be translated later""" return pMsgS def __(pMsgS, pMsgP): """Make automated tools like poedit to pick up translations, which will actually be translated later""" return pMsgS, pMsgP # ## This module is responsible for all message translations for timekpr ## """Initialize all stuff for messages""" # messages _messages = {} def initMessages(): """Initialize all messages""" # ## define user admin command texts ## _messages["TK_MSG_USER_ADMIN_CMD_HELP"] = {"s": _("==> print help, example")} _messages["TK_MSG_USER_ADMIN_CMD_USERLIST"] = {"s": _("==> get saved user list from the server, example")} _messages["TK_MSG_USER_ADMIN_CMD_USERCONFIG"] = {"s": _("==> get user configuration and time information from the server, example")} _messages["TK_MSG_USER_ADMIN_CMD_USERCONFIGRT"] = {"s": _("==> get realtime user time information from the server, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETALLOWEDDAYS"] = {"s": _("==> set allowed days for the user, example")} # TRANSLATORS: please DO NOT translate the keyword "ALL" _messages["TK_MSG_USER_ADMIN_CMD_SETALLOWEDHOURS"] = {"s": _("==> set allowed hours for the specified day, or \"ALL\" for every day, optionally specify start and end minutes in brackets like this [x-y], additionally specify ! in front of hour if it doesn't have to be accounted (free time for user), example")} _messages["TK_MSG_USER_ADMIN_CMD_SETTIMELIMITS"] = {"s": _("==> set time limits for all allowed days, the number of values must not exceed the allowed days for the user, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETTIMELIMITWK"] = {"s": _("==> set time limit per week, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETTIMELIMITMON"] = {"s": _("==> set time limit per month, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETTRACKINACTIVE"] = {"s": _("==> set whether to track inactive user sessions, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETHIDETRAYICON"] = {"s": _("==> set whether to hide tray icon and prevent notifications, example")} # TRANSLATORS: please DO NOT translate the keywords: "lock", "suspend", "suspendwake", "terminate", "kill", "shutdown" _messages["TK_MSG_USER_ADMIN_CMD_SETLOCKOUTTYPE"] = {"s": _("==> set restriction / lockout type (\"lock\" - lock session, \"suspend\" - suspend the computer, \"suspendwake\" - suspend and wake up, \"terminate\" - terminate sessions, \"kill\" - kill sessions, \"shutdown\" - shutdown the computer), examples")} _messages["TK_MSG_USER_ADMIN_CMD_SETTIMELEFT"] = {"s": _("==> set time left for the user at the current moment of time: \"+\" (add time), \"-\" (subtract time), \"=\" (set exact time available), example (add one hour)")} _messages["TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEENABLED"] = {"s": _("==> set whether PlayTime is enabled for the user, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETPLAYTIMELIMITOVERRIDE"] = {"s": _("==> set whether PlayTime must be accounted instead of normal activity, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEUNACCOUNTEDINTARVALSFLAG"] = {"s": _("==> set whether PlayTime activities are allowed during unaccounted (\"∞\") intervals, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEALLOWEDDAYS"] = {"s": _("==> set allowed days for PlayTime activities, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETPLAYTIMELIMITS"] = {"s": _("==> set PlayTime limits for all allowed days, the number of values must not exceed the allowed PlayTime allowed days for the user, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETPLAYTIMEACTIVITIES"] = {"s": _("==> set PlayTime activity process masks, for which the time is accounted, example")} _messages["TK_MSG_USER_ADMIN_CMD_SETPLAYTIMELEFT"] = {"s": _("==> set PlayTime left for the user at the current moment of time: \"+\" (add time), \"-\" (subtract time), \"=\" (set exact time available), example (add one hour)")} # ## this defines messages for use in configuration validation ## _messages["TK_MSG_ADMIN_CHK_CTRLSESSIONS_NONE"] = {"s": _("Control sessions types are not passed")} _messages["TK_MSG_ADMIN_CHK_CTRLSESSIONS_INVALID"] = {"s": _("Control sessions types list is not correct")} _messages["TK_MSG_ADMIN_CHK_CTRLSESSIONS_INVALID_SET"] = {"s": _("Control sessions types list is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_EXCLSESSIONW_NONE"] = {"s": _("Excluded session types are not passed")} _messages["TK_MSG_ADMIN_CHK_EXCLSESSIONS_INVALID"] = {"s": _("Excluded session types list is not correct")} _messages["TK_MSG_ADMIN_CHK_EXCLSESSIONS_INVALID_SET"] = {"s": _("Excluded session types list is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_EXCLUSERS_NONE"] = {"s": _("Excluded user list is not passed")} _messages["TK_MSG_ADMIN_CHK_EXCLUSERS_INVALID"] = {"s": _("Excluded user list is not correct")} _messages["TK_MSG_ADMIN_CHK_EXCLUSERS_INVALID_SET"] = {"s": _("Excluded user list is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_FINALWARNTIME_NONE"] = {"s": _("Final warning time is not passed")} _messages["TK_MSG_ADMIN_CHK_FINALWARNTIME_INVALID"] = {"s": _("Final warning time \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_FINALWARNTIME_INVALID_SET"] = {"s": _("Final warning time \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_FINALNOTIFTIME_NONE"] = {"s": _("Final notification time is not passed")} _messages["TK_MSG_ADMIN_CHK_FINALNOTIFTIME_INVALID"] = {"s": _("Final notification time \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_FINALNOTIFTIME_INVALID_SET"] = {"s": _("Final notification time \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_TERMTIME_NONE"] = {"s": _("Termination time is not passed")} _messages["TK_MSG_ADMIN_CHK_TERMTIME_INVALID"] = {"s": _("Termination time \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_TERMTIME_INVALID_SET"] = {"s": _("Termination time \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_TRACKINACTIVE_NONE"] = {"s": _("Track inactive is not passed")} _messages["TK_MSG_ADMIN_CHK_TRACKINACTIVE_INVALID"] = {"s": _("Track inactive \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_TRACKINACTIVE_INVALID_SET"] = {"s": _("Track inactive \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_LOGLEVEL_NONE"] = {"s": _("Log level is not passed")} _messages["TK_MSG_ADMIN_CHK_LOGLEVEL_INVALID"] = {"s": _("Log level \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_LOGLEVEL_INVALID_SET"] = {"s": _("Log level \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_POLLTIME_NONE"] = {"s": _("Poll time is not passed")} _messages["TK_MSG_ADMIN_CHK_POLLTIME_INVALID"] = {"s": _("Poll time \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_POLLTIME_INVALID_SET"] = {"s": _("Poll time \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_SAVETIME_NONE"] = {"s": _("Save time is not passed")} _messages["TK_MSG_ADMIN_CHK_SAVETIME_INVALID"] = {"s": _("Save time \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_SAVETIME_INVALID_SET"] = {"s": _("Save time \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_PLAYTIMEENABLED_NONE"] = {"s": _("PlayTime flag is not passed")} _messages["TK_MSG_ADMIN_CHK_PLAYTIMEENABLED_INVALID"] = {"s": _("PlayTime flag \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_PLAYTIMEENABLED_INVALID_SET"] = {"s": _("PlayTime flag \"%%s\" is not correct and cannot be set")} _messages["TK_MSG_ADMIN_CHK_PLAYTIME_ENH_ACT_MON_ENABLED_NONE"] = {"s": _("PlayTime enhanced activity monitor flag is not passed")} _messages["TK_MSG_ADMIN_CHK_PLAYTIME_ENH_ACT_MON_ENABLED_INVALID"] = {"s": _("PlayTime enhanced activity monitor flag \"%%s\" is not correct")} _messages["TK_MSG_ADMIN_CHK_PLAYTIME_ENH_ACT_MON_ENABLED_INVALID_SET"] = {"s": _("PlayTime enhanced activity monitor flag \"%%s\" is not correct and cannot be set")} # ## this defines messages for use in user configuration validation ## _messages["TK_MSG_USER_ADMIN_CHK_ALLOWEDHOURS_DAY_NONE"] = {"s": _("User's \"%%s\" day number must be present")} _messages["TK_MSG_USER_ADMIN_CHK_ALLOWEDHOURS_DAY_INVALID"] = {"s": _("User's \"%%s\" day number must be between 1 and 7")} _messages["TK_MSG_USER_ADMIN_CHK_ALLOWEDHOURS_INVALID_SET"] = {"s": _("User's \"%%s\" allowed hours are not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_DAYLIST_NONE"] = {"s": _("User's \"%%s\" day list is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_DAYLIST_INVALID"] = {"s": _("User's \"%%s\" day list is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_DAYLIST_INVALID_SET"] = {"s": _("User's \"%%s\" day list is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_DAILYLIMITS_NONE"] = {"s": _("User's \"%%s\" day limits list is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_DAILYLIMITS_INVALID"] = {"s": _("User's \"%%s\" day limits list is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_DAILYLIMITS_INVALID_SET"] = {"s": _("User's \"%%s\" day limits list is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_TIMELIMIT_OPERATION_INVALID"] = {"s": _("User's \"%%s\" time operation can be one of these: - + =")} _messages["TK_MSG_USER_ADMIN_CHK_TIMELIMIT_INVALID"] = {"s": _("User's \"%%s\" time limit is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_TIMELIMIT_INVALID_SET"] = {"s": _("User's \"%%s\" time limit is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_MONTHLYALLOWANCE_NONE"] = {"s": _("User's \"%%s\" monthly allowance is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_MONTHLYALLOWANCE_INVALID"] = {"s": _("User's \"%%s\" monthly allowance is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_MONTHLYALLOWANCE_INVALID_SET"] = {"s": _("User's \"%%s\" monthly allowance is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_TRACKINACTIVE_NONE"] = {"s": _("User's \"%%s\" track inactive flag is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_TRACKINACTIVE_INVALID"] = {"s": _("User's \"%%s\" track inactive flag is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_TRACKINACTIVE_INVALID_SET"] = {"s": _("User's \"%%s\" track inactive flag is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_HIDETRAYICON_NONE"] = {"s": _("User's \"%%s\" hide tray icon flag is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_HIDETRAYICON_INVALID"] = {"s": _("User's \"%%s\" hide tray icon flag is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_HIDETRAYICON_INVALID_SET"] = {"s": _("User's \"%%s\" hide tray icon flag is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_LOCKOUTTYPE_NONE"] = {"s": _("User's \"%%s\" restriction / lockout type is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_LOCKOUTTYPE_INVALID"] = {"s": _("User's \"%%s\" restriction / lockout type is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_LOCKOUTTYPE_INVALID_SET"] = {"s": _("User's \"%%s\" restriction / lockout type is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_WEEKLYALLOWANCE_NONE"] = {"s": _("User's \"%%s\" weekly allowance is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_WEEKLYALLOWANCE_INVALID"] = {"s": _("User's \"%%s\" weekly allowance is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_WEEKLYALLOWANCE_INVALID_SET"] = {"s": _("User's \"%%s\" weekly allowance is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_PT_ENABLE_FLAG_NONE"] = {"s": _("User's \"%%s\" PlayTime enable flag is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_PT_ENABLE_FLAG_INVALID"] = {"s": _("User's \"%%s\" PlayTime enable flag is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_PT_ENABLE_FLAG_INVALID_SET"] = {"s": _("User's \"%%s\" PlayTime enable flag is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_PT_OVERRIDE_FLAG_NONE"] = {"s": _("User's \"%%s\" PlayTime override flag is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_PT_OVERRIDE_FLAG_INVALID"] = {"s": _("User's \"%%s\" PlayTime override flag is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_PT_OVERRIDE_FLAG_INVALID_SET"] = {"s": _("User's \"%%s\" PlayTime override flag is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_PT_UNACC_INT_FLAG_NONE"] = {"s": _("User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_PT_UNACC_INT_FLAG_INVALID"] = {"s": _("User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_PT_UNACC_INT_FLAG_INVALID_SET"] = {"s": _("User's \"%%s\" PlayTime allowed during unaccounted intervals flag is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_PT_DAYLIST_NONE"] = {"s": _("User's \"%%s\" PlayTime day list is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_PT_DAYLIST_INVALID"] = {"s": _("User's \"%%s\" PlayTime day list is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_PT_DAYLIST_INVALID_SET"] = {"s": _("User's \"%%s\" PlayTime day list is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_PT_DAYLIMITS_NONE"] = {"s": _("User's \"%%s\" PlayTime day limits list is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_PT_DAYLIMITS_INVALID"] = {"s": _("User's \"%%s\" PlayTime day limits list is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_PT_DAYLIMITS_INVALID_SET"] = {"s": _("User's \"%%s\" PlayTime day limits list is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_PT_ACTIVITIES_NONE"] = {"s": _("User's \"%%s\" PlayTime day limits list is not passed")} _messages["TK_MSG_USER_ADMIN_CHK_PT_ACTIVITIES_INVALID"] = {"s": _("User's \"%%s\" PlayTime day limits list is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_PT_ACTIVITIES_INVALID_SET"] = {"s": _("User's \"%%s\" PlayTime day limits list is not correct and cannot be set")} _messages["TK_MSG_USER_ADMIN_CHK_PT_TIMELIMIT_OPERATION_INVALID"] = {"s": _("User's \"%%s\" PlayTime operation can be one of these: - + =")} _messages["TK_MSG_USER_ADMIN_CHK_PT_TIMELIMIT_INVALID"] = {"s": _("User's \"%%s\" set PlayTime limit is not correct")} _messages["TK_MSG_USER_ADMIN_CHK_PT_TIMELIMIT_INVALID_SET"] = {"s": _("User's \"%%s\" PlayTime time limit is not correct and cannot be set")} # ## this defines messages for use in configuration loader ## # TRANSLATORS: this message must be 80 symbols long at max _messages["TK_MSG_CONFIG_LOADER_ERROR_GENERIC"] = {"s": _("Unexpected ERROR while loading configuration. Please inspect Timekpr-nExT log files")} # TRANSLATORS: this message must be 80 symbols long at max _messages["TK_MSG_CONFIG_LOADER_UNEXPECTED_ERROR"] = {"s": _("Unexpected ERROR getting configuration. Please inspect Timekpr-nExT log files")} # TRANSLATORS: this message must be 80 symbols long at max _messages["TK_MSG_CONFIG_LOADER_USER_UNEXPECTED_ERROR"] = {"s": _("Unexpected ERROR getting user configuration. Please inspect Timekpr-nExT log files")} # TRANSLATORS: this message must be 80 symbols long at max _messages["TK_MSG_CONFIG_LOADER_USERLIST_UNEXPECTED_ERROR"] = {"s": _("Unexpected ERROR getting user list. Please inspect Timekpr-nExT log files")} # TRANSLATORS: this message must be 80 symbols long at max _messages["TK_MSG_CONFIG_LOADER_SAVECONFIG_UNEXPECTED_ERROR"] = {"s": _("Unexpected ERROR updating configuration. Please inspect Timekpr-nExT log files")} # TRANSLATORS: this message must be 80 symbols long at max _messages["TK_MSG_CONFIG_LOADER_SAVECONTROL_UNEXPECTED_ERROR"] = {"s": _("Unexpected ERROR updating control. Please inspect Timekpr-nExT log files")} _messages["TK_MSG_CONFIG_LOADER_USERCONFIG_NOTFOUND"] = {"s": _("User \"%%s\" configuration is not found")} _messages["TK_MSG_CONFIG_LOADER_USERCONTROL_NOTFOUND"] = {"s": _("User \"%%s\" control file is not found")} _messages["TK_MSG_CONFIG_LOADER_USER_NOTFOUND"] = {"s": _("User \"%%s\" is not found")} # ## this defines messages for use in notifications ## _messages["TK_MSG_STATUS_CONNECTED"] = {"s": _("Connected")} _messages["TK_MSG_STATUS_CONNECTING"] = {"s": _("Connecting...")} _messages["TK_MSG_STATUS_CONNECTION_FAILED"] = {"s": _("Failed to connect")} # TRANSLATORS: this message must be 80 symbols long at max _messages["TK_MSG_STATUS_CONNECTION_ACCESS_DENIED"] = {"s": _("Please reopen the application if you are superuser and Timekpr-nExT is running")} _messages["TK_MSG_STATUS_STARTED"] = {"s": _("Started")} _messages["TK_MSG_STATUS_USER_CONFIG_RETRIEVED"] = {"s": _("User configuration retrieved")} _messages["TK_MSG_STATUS_CONFIG_RETRIEVED"] = {"s": _("Configuration retrieved")} _messages["TK_MSG_STATUS_TRACKINACTIVE_PROCESSED"] = {"s": _("Track inactive for user has been processed")} _messages["TK_MSG_STATUS_HIDETRAYICON_PROCESSED"] = {"s": _("Hide tray icon for user has been processed")} _messages["TK_MSG_STATUS_LOCKOUTTYPE_PROCESSED"] = {"s": _("Restriction / lockout type for user has been processed")} _messages["TK_MSG_STATUS_ADJUSTTIME_PROCESSED"] = {"s": _("Additional time for user has been processed")} _messages["TK_MSG_STATUS_PT_ADJUSTTIME_PROCESSED"] = {"s": _("Additional PlayTime for user has been processed")} _messages["TK_MSG_STATUS_WKMONADJUSTTIME_PROCESSED"] = {"s": _("Weekly and monthly limits for user have been processed")} _messages["TK_MSG_STATUS_ALLOWEDDAYS_PROCESSED"] = {"s": _("Allowed days for user have been processed")} _messages["TK_MSG_STATUS_TIMELIMITS_PROCESSED"] = {"s": _("Day time limits for user have been processed")} _messages["TK_MSG_STATUS_ALLOWEDHOURS_PROCESSED"] = {"s": _("Allowed hours for user have been processed")} _messages["TK_MSG_STATUS_CONFIGURATION_SAVED"] = {"s": _("Timekpr-nExT configuration has been saved")} _messages["TK_MSG_STATUS_USER_LIMIT_CONFIGURATION_SAVED"] = {"s": _("User time limits have been saved")} _messages["TK_MSG_STATUS_USER_PT_LIMIT_CONFIGURATION_SAVED"] = {"s": _("User PlayTime limits have been saved")} _messages["TK_MSG_STATUS_USER_ADDOPTS_CONFIGURATION_SAVED"] = {"s": _("User additional options have been saved")} _messages["TK_MSG_STATUS_PT_ENABLEMENT_PROCESSED"] = {"s": _("Enable PlayTime for the user has been processed")} _messages["TK_MSG_STATUS_PT_OVERRIDE_PROCESSED"] = {"s": _("PlayTime override flag for the user has been processed")} _messages["TK_MSG_STATUS_PT_ALLOWED_UNLIMITED_INTERVALS_PROCESSED"] = {"s": _("PlayTime allowed during unaccounted intervals flag for the user has been processed")} _messages["TK_MSG_STATUS_PT_ALLOWEDDAYS_PROCESSED"] = {"s": _("PlayTime allowed days for user have been processed")} _messages["TK_MSG_STATUS_PT_TIMELIMITS_PROCESSED"] = {"s": _("PlayTime day limits for user have been processed")} _messages["TK_MSG_STATUS_PT_ACTIVITIES_PROCESSED"] = {"s": _("PlayTime activities for user have been processed")} _messages["TK_MSG_STATUS_NODAY_SELECTED"] = {"s": _("Please select a day to set the limits")} _messages["TK_MSG_STATUS_INTERVAL_OVERLAP_DETECTED"] = {"s": _("That interval overlaps with an existing one")} _messages["TK_MSG_STATUS_INTERVALSTART_CONFLICT_DETECTED"] = {"s": _("That interval's start conflicts with an existing one")} _messages["TK_MSG_STATUS_INTERVALEND_CONFLICT_DETECTED"] = {"s": _("That interval's end conflicts with an existing one")} _messages["TK_MSG_STATUS_INTERVAL_DUPLICATE_DETECTED"] = {"s": _("That interval's start or end duplicates an existing one")} _messages["TK_MSG_STATUS_INTERVAL_STARTENDEQUAL_DETECTED"] = {"s": _("Interval start cannot be the same as end")} _messages["TK_MSG_STATUS_INTERVAL_ENDLESSTHANSTART_DETECTED"] = {"s": _("Interval's start cannot be later than end")} _messages["TK_MSG_STATUS_NOHOUR_SELECTED"] = {"s": _("Please select an hour interval to remove")} _messages["TK_MSG_STATUS_INTERVAL_REMOVED"] = {"s": _("Interval removed")} _messages["TK_MSG_STATUS_INTERFACE_NOTREADY"] = {"s": _("Timekpr-nExT interface is not yet ready")} # ## this defines messages for use in CLI ## _messages["TK_MSG_CONSOLE_GUI_NOT_AVAILABLE"] = {"s": _("WARNING: Timekpr-nExT administration utility was asked to run in GUI mode, but no displays are available, thus running in CLI...")} _messages["TK_MSG_CONSOLE_COMMAND_INCORRECT"] = {"s": _("The command is incorrect:")} _messages["TK_MSG_CONSOLE_USAGE_NOTES"] = {"s": _("The usage of Timekpr-nExT admin client is as follows:")} _messages["TK_MSG_CONSOLE_USAGE_NOTICE_HEAD"] = {"s": _("---=== NOTICE ===---")} _messages["TK_MSG_CONSOLE_USAGE_NOTICE_TIME"] = {"s": _("numeric time values are in seconds")} _messages["TK_MSG_CONSOLE_USAGE_NOTICE_DAYS"] = {"s": _("weekdays are numbered according to ISO 8601 (i.e. Monday is the first day, format: 1-7)")} _messages["TK_MSG_CONSOLE_USAGE_NOTICE_HOURS"] = {"s": _("hours are numbered according to ISO 8601 (i.e. 24h clock, format: 0-23)")} _messages["TK_MSG_CONSOLE_USERS_TOTAL"] = {"s": __("%(n)s user in total:", "%(n)s users in total:")[0], "p": __("%(n)s user in total:", "%(n)s users in total:")[1]} _messages["TK_MSG_CONSOLE_CONFIG_FOR"] = {"s": _("Configuration for user %s:")} # ## this defines messages for use in menus ## _messages["TK_MSG_MENU_TIME_LEFT"] = {"s": _("Time left...")} _messages["TK_MSG_MENU_CONFIGURATION"] = {"s": _("Limits & Configuration")} _messages["TK_MSG_MENU_ABOUT"] = {"s": _("About")} # ## GUI labels ## _messages["TK_MSG_LOGO_LABEL"] = {"s": _("Keep control of computer usage")} _messages["TK_MSG_DAY_LIST_DAY_LABEL"] = {"s": _("Day")} _messages["TK_MSG_DAY_LIST_ENABLED_LABEL"] = {"s": _("Enabled")} _messages["TK_MSG_DAY_LIST_LIMIT_LABEL"] = {"s": _("Limit")} _messages["TK_MSG_DAY_INTERVALS_FROM_LABEL"] = {"s": _("From")} _messages["TK_MSG_DAY_INTERVALS_FROM_PHLD_LABEL"] = {"s": _("from...")} _messages["TK_MSG_DAY_INTERVALS_TO_LABEL"] = {"s": _("To")} _messages["TK_MSG_DAY_INTERVALS_TO_PHLD_LABEL"] = {"s": _("to...")} _messages["TK_MSG_WK_MON_LABEL"] = {"s": _("Period")} _messages["TK_MSG_WK_MON_LIMIT_LABEL"] = {"s": _("Limit")} _messages["TK_MSG_WEEKLY_LABEL"] = {"s": _("Weekly")} _messages["TK_MSG_MONTHLY_LABEL"] = {"s": _("Monthly")} _messages["TK_MSG_TRACKED_SESSIONS_LABEL"] = {"s": _("Session type")} _messages["TK_MSG_TRACKED_SESSIONS_PHLD_LABEL"] = {"s": _("session type...")} _messages["TK_MSG_UNTRACKED_SESSIONS_LABEL"] = {"s": _("Session type")} _messages["TK_MSG_UNTRACKED_SESSIONS_PHLD_LABEL"] = {"s": _("session type...")} _messages["TK_MSG_EXCLUDED_USERS_LABEL"] = {"s": _("Username")} _messages["TK_MSG_EXCLUDED_USERS_PHLD_LABEL"] = {"s": _("username...")} _messages["TK_MSG_PLAYTIME_ACTIVITY_MASK_LABEL"] = {"s": _("Process mask")} _messages["TK_MSG_PLAYTIME_ACTIVITY_MASK_PHLD_LABEL"] = {"s": _("executable mask...")} _messages["TK_MSG_PLAYTIME_ACTIVITY_DESCRIPTION_LABEL"] = {"s": _("Process description")} _messages["TK_MSG_PLAYTIME_ACTIVITY_DESCRIPTION_PHLD_LABEL"] = {"s": _("process description...")} _messages["TK_MSG_NOTIF_CONFIG_TIME_LABEL"] = {"s": _("Time")} _messages["TK_MSG_NOTIF_CONFIG_TIME_PHLD_LABEL"] = {"s": _("time...")} _messages["TK_MSG_NOTIF_CONFIG_IMPORTANCE_LABEL"] = {"s": _("Importance")} _messages["TK_MSG_NOTIF_CONFIG_IMPORTANCE_PHLD_LABEL"] = {"s": _("importance...")} # ## this defines messages for use in notifications ## _messages["TK_MSG_NOTIFICATION_TITLE"] = {"s": _("Timekpr-nExT notification")} _messages["TK_MSG_NOTIFICATION_PLAYTIME_TITLE"] = {"s": _("Timekpr-nExT PlayTime notification")} _messages["TK_MSG_NOTIFICATION_NOT_LIMITED"] = {"s": _("Your time is not limited today")} _messages["TK_MSG_NOTIFICATION_ALLOWANCE_CHANGED"] = {"s": _("Time allowance has changed, please note new time left!")} _messages["TK_MSG_NOTIFICATION_CONFIGURATION_CHANGED"] = {"s": _("Time limit configuration has changed, please note new configuration!")} _messages["TK_MSG_NOTIFICATION_CANNOT_CONNECT"] = {"s": _("There is a problem connecting to Timekpr-nExT daemon (%%s)!")} _messages["TK_MSG_NOTIFICATION_CANNOT_COMMUNICATE"] = {"s": _("There is a problem communicating to Timekpr-nExT (%%s)!")} _messages["TK_MSG_NOTIFICATION_CANNOT_INIT_ICON"] = {"s": _("Icon initialization error (%%s)!")} # TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_IS_UP_1T"] = {"s": _("Your time is up, you will be forcibly logged out in")} # TRANSLATORS: this is a part of message "Your time is up, your computer will be forcibly shutdown in %s seconds", please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_IS_UP_1D"] = {"s": _("Your time is up, your computer will be forcibly shutdown in")} # TRANSLATORS: this is a part of message "Your time is up, your session will be forcibly locked in %s seconds", please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_IS_UP_1L"] = {"s": _("Your time is up, your session will be forcibly locked in")} # TRANSLATORS: this is a part of message ", Your computer will be forcibly suspended in %s seconds", please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_IS_UP_1S"] = {"s": _("Your time is up, your computer will be forcibly suspended in")} # TRANSLATORS: this is a part of message "Your time is up, you will be forcibly logged out in %s seconds", please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_IS_UP_2"] = {"s": __("%(n)s second", "%(n)s seconds")[0], "p": __("%(n)s second", "%(n)s seconds")[1]} _messages["TK_MSG_NOTIFICATION_CONNECTION_ERROR"] = {"s": _("Internal connection error, please check log files")} # TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_LEFT_1"] = {"s": __("You have %(n)s hour", "You have %(n)s hours")[0], "p": __("You have %(n)s hour", "You have %(n)s hours")[1]} # TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_LEFT_2"] = {"s": __("%(n)s minute", "%(n)s minutes")[0], "p": __("%(n)s minute", "%(n)s minutes")[1]} # TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) left" please translate accordingly _messages["TK_MSG_NOTIFICATION_TIME_LEFT_3"] = {"s": __("%(n)s second left", "%(n)s seconds left")[0], "p": __("%(n)s second left", "%(n)s seconds left")[1]} # TRANSLATORS: this is a part of message "You have %i hour(s), %i minute(s) and %i second(s) of PlayTime left" please translate accordingly _messages["TK_MSG_NOTIFICATION_PLAYTIME_LEFT_3"] = {"s": __("%(n)s second left", "%(n)s seconds of PlayTime left")[0], "p": __("%(n)s second of PlayTime left", "%(n)s seconds of PlayTime left")[1]} _messages["TK_MSG_NOTIFICATION_SCR_FEATURE_NOT_AVAILABLE"] = {"s": _("Feature \"%%s\", which is used to detect idle time, cannot be enabled!\nIdle / inactive time might not be accounted when screen is locked!")} # ## misc errors ## _messages["TK_MSG_UNEXPECTED_ERROR"] = {"s": _("UNEXPECTED ERROR: %%s")} _messages["TK_MSG_PARSE_ERROR"] = {"s": _("PARAMETER PARSE ERROR (please check parameter validity): %%s")} _messages["TK_MSG_DBUS_COMMUNICATION_COMMAND_FAILED"] = {"s": _("Command FAILED: access denied")} _messages["TK_MSG_DBUS_COMMUNICATION_COMMAND_NOT_ACCEPTED"] = {"s": _("Command FAILED: communication was not accepted")} _messages["TK_MSG_TRANSLATION_NOTFOUND"] = {"s": _("n/a")} _messages["TK_MSG_TRANSLATOR_CREDITS"] = {"s": "please-enter-translator-credits"} # special case # init initMessages() def getTranslation(pMsgCode, n=None): """Get message translation""" # initial result = None # in case translation not found if pMsgCode not in _messages: result = _translateSingle(_messages["TK_MSG_TRANSLATION_NOTFOUND"]["s"]) else: # we need to translate plurals if "p" in _messages[pMsgCode] and n is not None: # numbers try: result = _translatePlural(_messages[pMsgCode]["s"], _messages[pMsgCode]["p"], n) % {"n": n} except Exception: pass # if translation was not plural or plural failed if result is None: # single result = _translateSingle(_messages[pMsgCode]["s"]).replace("%%", "%") # result return result # main start if __name__ == "__main__": print(getTranslation("TK_MSG_USER_ADMIN_CMD_USERLIST_N/A")) print(getTranslation("TK_MSG_USER_ADMIN_CMD_HELP")) print(getTranslation("TK_MSG_CONSOLE_USERS_TOTAL", 1)) print(getTranslation("TK_MSG_CONSOLE_USERS_TOTAL", 2)) timekpr-next/common/log/000775 001750 001750 00000000000 15122253261 017245 5ustar00bezvfedubezvfedu000000 000000 timekpr-next/common/log/__init__.py000664 001750 001750 00000000000 13476006650 021354 0ustar00bezvfedubezvfedu000000 000000 timekpr-next/common/log/log.py000644 001750 001750 00000015320 15122253261 020377 0ustar00bezvfedubezvfedu000000 000000 """ Created on Aug 28, 2018 @author: mjasnik """ # imports from datetime import datetime import os # timekpr imports from timekpr.common.constants import constants as cons # default logging _LOG_LEVEL = cons.TK_LOG_LEVEL_INFO # logging to file _LOG_FILE = None _LOG_NAME = "default" _LOGGER = None _LOG_FACILITY = cons.TK_LOG_FACILITY_EFF # logging buffer (before we know where to put log file) _LOG_PEND_EVT_CNT = 0 _LOG_PEND_FLUSH_TIM = datetime.now() _LOG_BUFFER = [] # conditional imports if _LOG_FACILITY > cons.TK_LOG_FACILITY_TKL: try: # std logging import logging # journald if _LOG_FACILITY > cons.TK_LOG_FACILITY_PYL: from systemd.journal import JournalHandler except: _LOG_FACILITY = cons.TK_LOG_FACILITY_TKL # log names def _getLogFileName(pWho, pUserName): """Get log file""" # log file logFile = (cons.TK_LOG_FILE_CLIENT if pWho == cons.TK_LOG_OWNER_CLIENT else (cons.TK_LOG_FILE_ADMIN if pWho == cons.TK_LOG_OWNER_ADMIN else (cons.TK_LOG_FILE_ADMIN_SU if pWho == cons.TK_LOG_OWNER_ADMIN_SU else cons.TK_LOG_FILE))) # replace user in log file return(logFile.replace(cons.TK_LOG_USER, pUserName, 1)) def setLogging(pLogLevel, pLogDir, pWho, pUserName): """Set up logging (this function expects 4 params: log level, log directory, log owner and username""" global _LOG_FACILITY, _LOG_FILE, _LOG_NAME, _LOGGER, _IS_JOURNALD_AVAILABLE # set up file _LOG_FILE = os.path.join(pLogDir, _getLogFileName(pWho, pUserName)) # set up logging name _LOG_NAME = ("timekprc" if pWho == cons.TK_LOG_OWNER_CLIENT else ("timekpra" if pWho == cons.TK_LOG_OWNER_ADMIN else ("timekpra-su" if pWho == cons.TK_LOG_OWNER_ADMIN_SU else "timekprd"))) # logger used if _LOG_FACILITY > cons.TK_LOG_FACILITY_TKL: # add python logger _LOGGER = logging.getLogger(_LOG_NAME) _LOGGER.setLevel(pLogLevel) # journald if _LOG_FACILITY > cons.TK_LOG_FACILITY_PYL: # set up lHandler = JournalHandler(SYSLOG_IDENTIFIER=_LOG_NAME) else: # set up file handler lHandler = logging.FileHandler(_LOG_FILE) # finish handler lHandler.setLevel(cons.TK_LOG_LEVEL_DEBUG) # set up logging format mFmt = logging.Formatter("%(message)s") lHandler.setFormatter(mFmt) # add journald handler _LOGGER.addHandler(lHandler) # set up level setLogLevel(pLogLevel) def setLogLevel(pUsrLvl): """Set up log level""" global _LOG_LEVEL, _LOGGER # none = def if pUsrLvl == cons.TK_USR_LOG_LEVEL_NONE: # set _LOG_LEVEL = cons.TK_LOG_LEVEL_INFO elif pUsrLvl == cons.TK_USR_LOG_LEVEL_INFO: # set _LOG_LEVEL = cons.TK_LOG_LEVEL_INFO elif pUsrLvl == cons.TK_USR_LOG_LEVEL_DEBUG: # set _LOG_LEVEL = cons.TK_LOG_LEVEL_DEBUG elif pUsrLvl == cons.TK_USR_LOG_LEVEL_EXTRA_DEBUG: # set _LOG_LEVEL = cons.TK_LOG_LEVEL_EXTRA_DEBUG # logging facility is not default if _LOG_FACILITY > cons.TK_LOG_FACILITY_TKL: # for logger _LOGGER.setLevel(_LOG_LEVEL) def isDebugEnabled(pDebugLevel=cons.TK_LOG_LEVEL_DEBUG): """Is debug enabled""" global _LOG_LEVEL # check whether debug is enabled return pDebugLevel >= _LOG_LEVEL def log(pLvl, pText, pForceFlush=False): """Print to console""" global _LOG_LEVEL, _LOGGER, _LOG_FACILITY, _LOG_PEND_EVT_CNT # check debug level and output if pLvl >= _LOG_LEVEL: # log while logging itself is not intitialized if _LOG_FACILITY < cons.TK_LOG_FACILITY_SDL or (_LOG_FACILITY == cons.TK_LOG_FACILITY_SDL and _LOGGER is None): # format text logText = "%s: %s" % (datetime.now().strftime(cons.TK_LOG_DATETIME_FORMAT), pText) # add to pending event cnt _LOG_PEND_EVT_CNT += 1 # prepare a line for file _LOG_BUFFER.append({"l": pLvl, "m": ("%s\n" if _LOG_FACILITY < cons.TK_LOG_FACILITY_PYL else "%s") % (logText)}) # log only if enough calls are passed to log autoFlushLogFile(pForceFlush) else: # flush if there was somethig pending if _LOG_PEND_EVT_CNT > 0: # flush log file _flushLogFile() # format text logText = "%s: %s" % (datetime.now().strftime(cons.TK_LOG_DATETIME_FORMAT), pText) # non-custom logging if pLvl <= cons.TK_LOG_LEVEL_DEBUG: # debug _LOGGER.debug(logText) else: # debug _LOGGER.log(pLvl, logText) # in development mode, we spit out in console as well if cons.TK_DEV_ACTIVE: # print to console consoleOut(logText) def consoleOut(*args): """Print everything passed to console""" # currently just output the stuff print(*args) def autoFlushLogFile(pForceFlush=False): """This will flush the log file to file""" # iport globals global _LOG_PEND_FLUSH_TIM, _LOG_PEND_EVT_CNT # when the time has come, just flush the log file if (datetime.now() - _LOG_PEND_FLUSH_TIM).total_seconds() >= cons.TK_POLLTIME * 2 or _LOG_PEND_EVT_CNT >= cons.TK_LOG_AUTO_FLUSH_EVT_CNT or pForceFlush: # flush the log _flushLogFile() def _flushLogFile(): """This will flush the log file to file""" # iport globals global _LOG_FILE, _LOG_BUFFER, _LOGGER, _LOG_FACILITY, _LOG_PEND_EVT_CNT, _LOG_PEND_FLUSH_TIM # we can only flush if there is a file if _LOG_FILE is not None and len(_LOG_BUFFER) > 0: try: # timekpr logging if _LOG_FACILITY < cons.TK_LOG_FACILITY_PYL: # open log file with open(_LOG_FILE, "a") as logFile: # loop for rM in _LOG_BUFFER: # write whole buffer to log file logFile.write(rM["m"]) # get back until we have set up logger elif _LOG_FACILITY > cons.TK_LOG_FACILITY_TKL and _LOGGER is None: return else: # loop for rM in _LOG_BUFFER: # non-custom logging if rM["l"] <= cons.TK_LOG_LEVEL_DEBUG: # debug _LOGGER.debug(rM["m"]) else: # debug _LOGGER.log(rM["l"], rM["m"]) # reset _LOG_PEND_EVT_CNT = 0 _LOG_PEND_FLUSH_TIM = datetime.now() _LOG_BUFFER.clear() except Exception as ex: # spit out to console consoleOut("ERROR: can not write to log due to:\n%s" % (ex))